cGFja2FnZSBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5jb3JlLmludGVybmFsLnhtbC5zZXJ2ZXI0MDsKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogQ29weXJpZ2h0IChjKSAyMDAzIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogKiBBbGwgcmlnaHRzIHJlc2VydmVkLiCgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ29tbW9uIFB1YmxpYyBMaWNlbnNlIHYxLjAKICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwKoCoKICogQ29udHJpYnV0b3JzOgogKiAgICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmltcG9ydCBvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5jb3JlLmludGVybmFsLnhtbC4qOwovKioKICogCiAqLwpwdWJsaWMgY2xhc3MgQ29ubmVjdG9yIGV4dGVuZHMgWE1MRWxlbWVudCB7CglwdWJsaWMgQ29ubmVjdG9yKCkgeyB9CgoJcHVibGljIFN0cmluZyBnZXRBY2NlcHRDb3VudCgpIHsKCQlyZXR1cm4gZ2V0QXR0cmlidXRlVmFsdWUoImFjY2VwdENvdW50Iik7Cgl9CgoJcHVibGljIFN0cmluZyBnZXRDbGFzc05hbWUoKSB7CgkJcmV0dXJuIGdldEF0dHJpYnV0ZVZhbHVlKCJjbGFzc05hbWUiKTsKCX0KCglwdWJsaWMgU3RyaW5nIGdldERlYnVnKCkgewoJCXJldHVybiBnZXRBdHRyaWJ1dGVWYWx1ZSgiZGVidWciKTsKCX0KCglwdWJsaWMgU3RyaW5nIGdldE1heFByb2Nlc3NvcnMoKSB7CgkJcmV0dXJuIGdldEF0dHJpYnV0ZVZhbHVlKCJtYXhQcm9jZXNzb3JzIik7Cgl9CgoJcHVibGljIFN0cmluZyBnZXRNaW5Qcm9jZXNzb3JzKCkgewoJCXJldHVybiBnZXRBdHRyaWJ1dGVWYWx1ZSgibWluUHJvY2Vzc29ycyIpOwoJfQoKCXB1YmxpYyBTdHJpbmcgZ2V0UG9ydCgpIHsKCQlyZXR1cm4gZ2V0QXR0cmlidXRlVmFsdWUoInBvcnQiKTsKCX0KCQoJcHVibGljIFN0cmluZyBnZXRTZWN1cmUoKSB7CgkJcmV0dXJuIGdldEF0dHJpYnV0ZVZhbHVlKCJzZWN1cmUiKTsKCX0KCQoJcHVibGljIFN0cmluZyBnZXRQcm90b2NvbCgpIHsKCQlyZXR1cm4gZ2V0QXR0cmlidXRlVmFsdWUoInByb3RvY29sIik7Cgl9CgoJcHVibGljIHZvaWQgc2V0QWNjZXB0Q291bnQoU3RyaW5nIGFjY2VwdENvdW50KSB7CgkJc2V0QXR0cmlidXRlVmFsdWUoImFjY2VwdENvdW50IiwgYWNjZXB0Q291bnQpOwoJfQoKCXB1YmxpYyB2b2lkIHNldENsYXNzTmFtZShTdHJpbmcgY2xhc3NOYW1lKSB7CgkJc2V0QXR0cmlidXRlVmFsdWUoImNsYXNzTmFtZSIsIGNsYXNzTmFtZSk7Cgl9CgoJcHVibGljIHZvaWQgc2V0RGVidWcoU3RyaW5nIGRlYnVnKSB7CgkJc2V0QXR0cmlidXRlVmFsdWUoImRlYnVnIiwgZGVidWcpOwoJfQoKCXB1YmxpYyB2b2lkIHNldE1heFByb2Nlc3NvcnMoU3RyaW5nIG1heFByb2Nlc3NvcnMpIHsKCQlzZXRBdHRyaWJ1dGVWYWx1ZSgibWF4UHJvY2Vzc29ycyIsIG1heFByb2Nlc3NvcnMpOwoJfQoKCXB1YmxpYyB2b2lkIHNldE1pblByb2Nlc3NvcnMoU3RyaW5nIG1pblByb2Nlc3NvcnMpIHsKCQlzZXRBdHRyaWJ1dGVWYWx1ZSgibWluUHJvY2Vzc29ycyIsIG1pblByb2Nlc3NvcnMpOwoJfQoKCXB1YmxpYyB2b2lkIHNldFBvcnQoU3RyaW5nIHBvcnQpIHsKCQlzZXRBdHRyaWJ1dGVWYWx1ZSgicG9ydCIsIHBvcnQpOwoJfQp9