PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+CjwhLS1OZXdQYWdlLS0+CjxIVE1MPgo8SEVBRD4KPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAoYnVpbGQgMS42LjBfMTQpIG9uIFdlZCBBcHIgMDcgMDc6NDY6MjIgQlNUIDIwMTAgLS0+CjxUSVRMRT4KSkRUVXRpbHMKPC9USVRMRT4KCjxNRVRBIE5BTUU9ImRhdGUiIENPTlRFTlQ9IjIwMTAtMDQtMDciPgoKPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgoKPFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgpmdW5jdGlvbiB3aW5kb3dUaXRsZSgpCnsKICAgIGlmIChsb2NhdGlvbi5ocmVmLmluZGV4T2YoJ2lzLWV4dGVybmFsPXRydWUnKSA9PSAtMSkgewogICAgICAgIHBhcmVudC5kb2N1bWVudC50aXRsZT0iSkRUVXRpbHMiOwogICAgfQp9CjwvU0NSSVBUPgo8Tk9TQ1JJUFQ+CjwvTk9TQ1JJUFQ+Cgo8L0hFQUQ+Cgo8Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJ3aW5kb3dUaXRsZSgpOyI+CjxIUj4KCgo8IS0tID09PT09PT09PSBTVEFSVCBPRiBUT1AgTkFWQkFSID09PT09PT0gLS0+CjxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgo8QSBIUkVGPSIjc2tpcC1uYXZiYXJfdG9wIiB0aXRsZT0iU2tpcCBuYXZpZ2F0aW9uIGxpbmtzIj48L0E+CjxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+CjxUUj4KPFREIENPTFNQQU49MiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgo8QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIiBTVU1NQVJZPSIiPgogIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+CiAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+CiAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgogIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgogIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJjbGFzcy11c2UvSkRUVXRpbHMuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5Vc2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgogIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+CiAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2luZGV4LWZpbGVzL2luZGV4LTEuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+CiAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+CiAgPC9UUj4KPC9UQUJMRT4KPC9URD4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+CjwvRU0+CjwvVEQ+CjwvVFI+Cgo8VFI+CjxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+CiZuYnNwO1BSRVYgQ0xBU1MmbmJzcDsKJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2UvanN0L3dzL2pheHdzL2NvcmUvdXRpbHMvV1NETFV0aWxzLmh0bWwiIHRpdGxlPSJjbGFzcyBpbiBvcmcuZWNsaXBzZS5qc3Qud3MuamF4d3MuY29yZS51dGlscyI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+CjxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+CiAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbD9vcmcvZWNsaXBzZS9qc3Qvd3MvamF4d3MvY29yZS91dGlscy9KRFRVdGlscy5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKJm5ic3A7PEEgSFJFRj0iSkRUVXRpbHMuaHRtbCIgdGFyZ2V0PSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7CiZuYnNwOzxTQ1JJUFQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KICA8IS0tCiAgaWYod2luZG93PT10b3ApIHsKICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7CiAgfQogIC8vLS0+CjwvU0NSSVBUPgo8Tk9TQ1JJUFQ+CiAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KPC9OT1NDUklQVD4KCgo8L0ZPTlQ+PC9URD4KPC9UUj4KPFRSPgo8VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgogIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgo8L1RSPgo8L1RBQkxFPgo8QSBOQU1FPSJza2lwLW5hdmJhcl90b3AiPjwvQT4KPCEtLSA9PT09PT09PT0gRU5EIE9GIFRPUCBOQVZCQVIgPT09PT09PT09IC0tPgoKPEhSPgo8IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+CjxIMj4KPEZPTlQgU0laRT0iLTEiPgpvcmcuZWNsaXBzZS5qc3Qud3MuamF4d3MuY29yZS51dGlsczwvRk9OVD4KPEJSPgpDbGFzcyBKRFRVdGlsczwvSDI+CjxQUkU+CmphdmEubGFuZy5PYmplY3QKICA8SU1HIFNSQz0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vcmVzb3VyY2VzL2luaGVyaXQuZ2lmIiBBTFQ9ImV4dGVuZGVkIGJ5ICI+PEI+b3JnLmVjbGlwc2UuanN0LndzLmpheHdzLmNvcmUudXRpbHMuSkRUVXRpbHM8L0I+CjwvUFJFPgo8SFI+CjxETD4KPERUPjxQUkU+cHVibGljIGZpbmFsIGNsYXNzIDxCPkpEVFV0aWxzPC9CPjxEVD5leHRlbmRzIGphdmEubGFuZy5PYmplY3Q8L0RMPgo8L1BSRT4KCjxQPgpKRFQgVXRpbGl0eSBjbGFzcy4KIDxwPgogPHN0cm9uZz5Qcm92aXNpb25hbCBBUEk6PC9zdHJvbmc+IFRoaXMgY2xhc3MvaW50ZXJmYWNlIGlzIHBhcnQgb2YgYW4gaW50ZXJpbSBBUEkgdGhhdCBpcyBzdGlsbCB1bmRlcgogZGV2ZWxvcG1lbnQgYW5kIGV4cGVjdGVkIHRvIGNoYW5nZSBzaWduaWZpY2FudGx5IGJlZm9yZSByZWFjaGluZyBzdGFiaWxpdHkuIEl0IGlzIGJlaW5nIG1hZGUgYXZhaWxhYmxlIGF0CiB0aGlzIGVhcmx5IHN0YWdlIHRvIHNvbGljaXQgZmVlZGJhY2sgZnJvbSBwaW9uZWVyaW5nIGFkb3B0ZXJzIG9uIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgYW55IGNvZGUgdGhhdCB1c2VzCiB0aGlzIEFQSSB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgYmUgYnJva2VuIChyZXBlYXRlZGx5KSBhcyB0aGUgQVBJIGV2b2x2ZXMuCiA8L3A+CjxQPgoKPFA+CjxIUj4KCjxQPgoKPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgoKPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgo8VEFCTEUgQk9SREVSPSIxIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBTVU1NQVJZPSIiPgo8VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KPFRIIEFMSUdOPSJsZWZ0IiBDT0xTUEFOPSIyIj48Rk9OVCBTSVpFPSIrMiI+CjxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1RIPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgo8Q09ERT5zdGF0aWMmbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2UvanN0L3dzL2pheHdzL2NvcmUvdXRpbHMvSkRUVXRpbHMuaHRtbCNhZGRUb0NsYXNzcGF0aChvcmcuZWNsaXBzZS5qZHQuY29yZS5JSmF2YVByb2plY3QsIG9yZy5lY2xpcHNlLmpkdC5jb3JlLklDbGFzc3BhdGhFbnRyeSkiPmFkZFRvQ2xhc3NwYXRoPC9BPjwvQj4ob3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFQcm9qZWN0Jm5ic3A7amF2YVByb2plY3QsCiAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmpkdC5jb3JlLklDbGFzc3BhdGhFbnRyeSZuYnNwO2NsYXNzcGF0aEVudHJ5KTwvQ09ERT4KCjxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QWRkIGEgPGNvZGU+SUNsYXNzcGF0aEVudHJ5PC9jb2RlPiB0byBhIDxjb2RlPklKYXZhUHJvamVjdDwvY29kZT48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgo8Q09ERT5zdGF0aWMmbmJzcDtvcmcuZWNsaXBzZS5qZHQuY29yZS5JVHlwZTwvQ09ERT48L0ZPTlQ+PC9URD4KPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL2pzdC93cy9qYXh3cy9jb3JlL3V0aWxzL0pEVFV0aWxzLmh0bWwjZmluZFR5cGUob3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFQcm9qZWN0LCBqYXZhLmxhbmcuU3RyaW5nKSI+ZmluZFR5cGU8L0E+PC9CPihvcmcuZWNsaXBzZS5qZHQuY29yZS5JSmF2YVByb2plY3QmbmJzcDtqYXZhUHJvamVjdCwKICAgICAgICAgamF2YS5sYW5nLlN0cmluZyZuYnNwO2Z1bGx5UXVhbGlmaWVkQ2xhc3NOYW1lKTwvQ09ERT4KCjxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgZmlyc3QgdHlwZSBmb3VuZCBmb2xsb3dpbmcgdGhlIGdpdmVuIGphdmEgcHJvamVjdCdzIGNsYXNzcGF0aCB3aXRoIHRoZSBnaXZlbiBmdWxseSBxdWFsaWZpZWQgbmFtZSBvciBudWxsIGlmIG5vbmUgaXMgZm91bmQuPC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KPENPREU+c3RhdGljJm5ic3A7b3JnLmVjbGlwc2UuamR0LmNvcmUuSVR5cGU8L0NPREU+PC9GT05UPjwvVEQ+CjxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS9qc3Qvd3MvamF4d3MvY29yZS91dGlscy9KRFRVdGlscy5odG1sI2ZpbmRUeXBlKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpIj5maW5kVHlwZTwvQT48L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtwcm9qZWN0TmFtZSwKICAgICAgICAgamF2YS5sYW5nLlN0cmluZyZuYnNwO2Z1bGx5UXVhbGlmaWVkQ2xhc3NOYW1lKTwvQ09ERT4KCjxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgZmlyc3QgdHlwZSBmb3VuZCB3aXRoIHRoZSBnaXZlbiBmdWxseSBxdWFsaWZpZWQgbmFtZSBmb2xsb3dpbmcgdGhlIGNsYXNzcGF0aCBvZiB0aGUgamF2YSBwcm9qZWN0IHdpdGgKIHRoZSBnaXZlIHByb2plY3QgbmFtZSBvciBudWxsIGlmIG5vbmUgaXMgZm91bmQuPC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KPENPREU+c3RhdGljJm5ic3A7b3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFQcm9qZWN0PC9DT0RFPjwvRk9OVD48L1REPgo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2UvanN0L3dzL2pheHdzL2NvcmUvdXRpbHMvSkRUVXRpbHMuaHRtbCNnZXRKYXZhUHJvamVjdChqYXZhLmxhbmcuU3RyaW5nKSI+Z2V0SmF2YVByb2plY3Q8L0E+PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7cHJvamVjdE5hbWUpPC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBKYXZhIHByb2plY3QgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gcHJvamVjdCBuYW1lLjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CjxDT0RFPnN0YXRpYyZuYnNwO29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDwvQ09ERT48L0ZPTlQ+PC9URD4KPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL2pzdC93cy9qYXh3cy9jb3JlL3V0aWxzL0pEVFV0aWxzLmh0bWwjZ2V0SmF2YVByb2plY3RPdXRwdXREaXJlY3RvcnlQYXRoKG9yZy5lY2xpcHNlLmpkdC5jb3JlLklKYXZhUHJvamVjdCkiPmdldEphdmFQcm9qZWN0T3V0cHV0RGlyZWN0b3J5UGF0aDwvQT48L0I+KG9yZy5lY2xpcHNlLmpkdC5jb3JlLklKYXZhUHJvamVjdCZuYnNwO2phdmFQcm9qZWN0KTwvQ09ERT4KCjxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgYWJzb2x1dGUgcGF0aCBpbiB0aGUgbG9jYWwgZmlsZSBzeXN0ZW0gb2YgdGhlIGRlZmF1bHQgb3V0cHV0IGxvY2F0aW9uIGZvciB0aGUgZ2l2ZW4gamF2YSBwcm9qZWN0LjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CjxDT0RFPnN0YXRpYyZuYnNwO29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDwvQ09ERT48L0ZPTlQ+PC9URD4KPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL2pzdC93cy9qYXh3cy9jb3JlL3V0aWxzL0pEVFV0aWxzLmh0bWwjZ2V0SmF2YVByb2plY3RPdXRwdXREaXJlY3RvcnlQYXRoKGphdmEubGFuZy5TdHJpbmcpIj5nZXRKYXZhUHJvamVjdE91dHB1dERpcmVjdG9yeVBhdGg8L0E+PC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7cHJvamVjdE5hbWUpPC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBhYnNvbHV0ZSBwYXRoIGluIHRoZSBsb2NhbCBmaWxlIHN5c3RlbSBvZiB0aGUgZGVmYXVsdCBvdXRwdXQgbG9jYXRpb24gZm9yIHRoZSBnaXZlbiBqYXZhIHByb2plY3QgbmFtZS48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgo8Q09ERT5zdGF0aWMmbmJzcDtvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg8L0NPREU+PC9GT05UPjwvVEQ+CjxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS9qc3Qvd3MvamF4d3MvY29yZS91dGlscy9KRFRVdGlscy5odG1sI2dldEphdmFQcm9qZWN0U291cmNlRGlyZWN0b3J5UGF0aChvcmcuZWNsaXBzZS5qZHQuY29yZS5JSmF2YVByb2plY3QpIj5nZXRKYXZhUHJvamVjdFNvdXJjZURpcmVjdG9yeVBhdGg8L0E+PC9CPihvcmcuZWNsaXBzZS5qZHQuY29yZS5JSmF2YVByb2plY3QmbmJzcDtqYXZhUHJvamVjdCk8L0NPREU+Cgo8QlI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIGZ1bGwsIGFic29sdXRlIHBhdGggcmVsYXRpdmUgdG8gdGhlIHdvcmtzcGFjZSBvZiB0aGUgZmlyc3Qgc291cmNlIGZvbGRlciBmb3VuZCBpbiB0aGUgZ2l2ZW4gamF2YSBwcm9qZWN0LjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CjxDT0RFPnN0YXRpYyZuYnNwO29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDwvQ09ERT48L0ZPTlQ+PC9URD4KPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL2pzdC93cy9qYXh3cy9jb3JlL3V0aWxzL0pEVFV0aWxzLmh0bWwjZ2V0SmF2YVByb2plY3RTb3VyY2VEaXJlY3RvcnlQYXRoKG9yZy5lY2xpcHNlLmpkdC5jb3JlLklUeXBlKSI+Z2V0SmF2YVByb2plY3RTb3VyY2VEaXJlY3RvcnlQYXRoPC9BPjwvQj4ob3JnLmVjbGlwc2UuamR0LmNvcmUuSVR5cGUmbmJzcDt0eXBlKTwvQ09ERT4KCjxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgZnVsbCwgYWJzb2x1dGUgcGF0aCByZWxhdGl2ZSB0byB0aGUgd29ya3NwYWNlIG9mIHRoZSBzb3VyY2UgZm9sZGVyIHRoYXQgY29udGFpbnMgdGhlIGdpdmVuIHR5cGUuPC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KPENPREU+c3RhdGljJm5ic3A7b3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoPC9DT0RFPjwvRk9OVD48L1REPgo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2UvanN0L3dzL2pheHdzL2NvcmUvdXRpbHMvSkRUVXRpbHMuaHRtbCNnZXRKYXZhUHJvamVjdFNvdXJjZURpcmVjdG9yeVBhdGgoamF2YS5sYW5nLlN0cmluZykiPmdldEphdmFQcm9qZWN0U291cmNlRGlyZWN0b3J5UGF0aDwvQT48L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtwcm9qZWN0TmFtZSk8L0NPREU+Cgo8QlI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIGZ1bGwsIGFic29sdXRlIHBhdGggcmVsYXRpdmUgdG8gdGhlIHdvcmtzcGFjZSBvZiB0aGUgZmlyc3Qgc291cmNlIGZvbGRlciBmb3VuZCBpbiB0aGUgamF2YSBwcm9qZWN0IHdpdGggdGhlIGdpdmVuIG5hbWUuPC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KPENPREU+c3RhdGljJm5ic3A7b3JnLmVjbGlwc2UuamR0LmNvcmUuSU1ldGhvZFtdPC9DT0RFPjwvRk9OVD48L1REPgo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2UvanN0L3dzL2pheHdzL2NvcmUvdXRpbHMvSkRUVXRpbHMuaHRtbCNnZXRQdWJsaWNNZXRob2RzKG9yZy5lY2xpcHNlLmpkdC5jb3JlLklUeXBlKSI+Z2V0UHVibGljTWV0aG9kczwvQT48L0I+KG9yZy5lY2xpcHNlLmpkdC5jb3JlLklUeXBlJm5ic3A7dHlwZSk8L0NPREU+Cgo8QlI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0lmIHRoZSBnaXZlbiA8Y29kZT5JVHlwZTwvY29kZT4gaXMgYW4gaW50ZXJmYWNlIGFsbCBtZXRob2RzIGRlY2xhcmVkIGluIHRoYXQgaW50ZXJmYWNlIGFyZSByZXR1cm5lZC48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgo8Q09ERT5zdGF0aWMmbmJzcDtqYXZhLmxhbmcuU3RyaW5nPC9DT0RFPjwvRk9OVD48L1REPgo8VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3JnL2VjbGlwc2UvanN0L3dzL2pheHdzL2NvcmUvdXRpbHMvSkRUVXRpbHMuaHRtbCNnZXRUYXJnZXROYW1lc3BhY2VGcm9tUGFja2FnZU5hbWUoamF2YS5sYW5nLlN0cmluZykiPmdldFRhcmdldE5hbWVzcGFjZUZyb21QYWNrYWdlTmFtZTwvQT48L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtwYWNrYWdlTmFtZSk8L0NPREU+Cgo8QlI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NvbnN0cnVjdHMgYSB0YXJnZXQgbmFtZXNwYWNlIHN0cmluZyBmcm9tIHRoZSBnaXZlbiBwYWNrYWdlIG5hbWUgYnkgc3BsaXR0aW5nIHRoZSBkb3QgJy4nIHNlcGFyYXRlZAogcGFja2FnZSBuYW1lLCByZXZlcnNpbmcgdGhlIG9yZGVyIG9mIHRoZSBwYWNrYWdlIG5hbWUgc2VnbWVudHMgZm9sbG93ZWQgYnkgcHJlZml4aW5nIHRoZSBzdHJpbmcgd2l0aAogJ2h0dHA6Ly8nIGFuZCBhcHBlbmRpbmcgYSBmb3J3YXJkIHNsYXNoICcvJyB0byB0aGUgZW5kLjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CjxDT0RFPnN0YXRpYyZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+CjxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS9qc3Qvd3MvamF4d3MvY29yZS91dGlscy9KRFRVdGlscy5odG1sI2lzSmF2YVByb2plY3Qob3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3QpIj5pc0phdmFQcm9qZWN0PC9BPjwvQj4ob3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3QmbmJzcDtwcm9qZWN0KTwvQ09ERT4KCjxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB3aGV0aGVyIHRoZSBnaXZlbiBwcm9qZWN0IGhhcyB0aGUgamF2YSBuYXR1cmUuPC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KPENPREU+c3RhdGljJm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL2pzdC93cy9qYXh3cy9jb3JlL3V0aWxzL0pEVFV0aWxzLmh0bWwjaXNQdWJsaWNNZXRob2Qob3JnLmVjbGlwc2UuamR0LmNvcmUuSU1ldGhvZCkiPmlzUHVibGljTWV0aG9kPC9BPjwvQj4ob3JnLmVjbGlwc2UuamR0LmNvcmUuSU1ldGhvZCZuYnNwO21ldGhvZCk8L0NPREU+Cgo8QlI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gbWV0aG9kIGlzbid0IGEgbWFpbiBtZXRob2Qgb3IgY29uc3RydWN0b3IgYW5kIGlmIGl0IGhhcyB0aGUgcHVibGljIG1vZGlmaWVyLjwvVEQ+CjwvVFI+CjxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+CjxDT0RFPnN0YXRpYyZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+CjxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS9qc3Qvd3MvamF4d3MvY29yZS91dGlscy9KRFRVdGlscy5odG1sI3JlbW92ZUZyb21DbGFzc3BhdGgob3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFQcm9qZWN0LCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JQ2xhc3NwYXRoRW50cnkpIj5yZW1vdmVGcm9tQ2xhc3NwYXRoPC9BPjwvQj4ob3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFQcm9qZWN0Jm5ic3A7amF2YVByb2plY3QsCiAgICAgICAgICAgICAgICAgICAgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUNsYXNzcGF0aEVudHJ5Jm5ic3A7Y2xhc3NwYXRoRW50cnkpPC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZW1vdmUgYSA8Y29kZT5JQ2xhc3NwYXRoRW50cnk8L2NvZGU+IGZyb20gYSA8Y29kZT5JSmF2YVByb2plY3Q8L2NvZGU+PC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KPENPREU+c3RhdGljJm5ic3A7b3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM8L0NPREU+PC9GT05UPjwvVEQ+CjxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS9qc3Qvd3MvamF4d3MvY29yZS91dGlscy9KRFRVdGlscy5odG1sI3ZhbGlkYXRlSWRlbnRpZmllcihqYXZhLmxhbmcuU3RyaW5nKSI+dmFsaWRhdGVJZGVudGlmaWVyPC9BPjwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO2lkKTwvQ09ERT4KCjxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VmFsaWRhdGVzIHRoZSBnaXZlbiBKYXZhIGlkZW50aWZpZXIgd2l0aCB0aGUgd29ya3NwYWNlIHNvdXJjZSBhbmQgY29tcGxpYW5jZSBsZXZlbHMuPC9URD4KPC9UUj4KPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+CjxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KPENPREU+c3RhdGljJm5ic3A7b3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM8L0NPREU+PC9GT05UPjwvVEQ+CjxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS9qc3Qvd3MvamF4d3MvY29yZS91dGlscy9KRFRVdGlscy5odG1sI3ZhbGlkYXRlSmF2YVR5cGVOYW1lKGphdmEubGFuZy5TdHJpbmcpIj52YWxpZGF0ZUphdmFUeXBlTmFtZTwvQT48L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtuYW1lKTwvQ09ERT4KCjxCUj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VmFsaWRhdGVzIHRoZSBnaXZlbiBKYXZhIHR5cGUgbmFtZSwgZWl0aGVyIHNpbXBsZSBvciBxdWFsaWZpZWQsIHVzaW5nIHRoZSB3b3Jrc3BhY2Ugc291cmNlIGFuZCBjb21wbGlhbmNlIGxldmVscy48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgo8Q09ERT5zdGF0aWMmbmJzcDtvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czwvQ09ERT48L0ZPTlQ+PC9URD4KPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL2pzdC93cy9qYXh3cy9jb3JlL3V0aWxzL0pEVFV0aWxzLmh0bWwjdmFsaWRhdGVKYXZhVHlwZU5hbWUoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykiPnZhbGlkYXRlSmF2YVR5cGVOYW1lPC9BPjwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO3Byb2plY3ROYW1lLAogICAgICAgICAgICAgICAgICAgICBqYXZhLmxhbmcuU3RyaW5nJm5ic3A7bmFtZSk8L0NPREU+Cgo8QlI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1ZhbGlkYXRlcyB0aGUgZ2l2ZW4gSmF2YSB0eXBlIG5hbWUsIGVpdGhlciBzaW1wbGUgb3IgcXVhbGlmaWVkLCB1c2luZyB0aGUgZ2l2ZW4gcHJvamVjdHMgc291cmNlIGFuZCBjb21wbGlhbmNlIGxldmVscy48L1REPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgo8Q09ERT5zdGF0aWMmbmJzcDtvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czwvQ09ERT48L0ZPTlQ+PC9URD4KPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uLy4uLy4uLy4uLy4uL29yZy9lY2xpcHNlL2pzdC93cy9qYXh3cy9jb3JlL3V0aWxzL0pEVFV0aWxzLmh0bWwjdmFsaWRhdGVQYWNrYWdlTmFtZShqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKSI+dmFsaWRhdGVQYWNrYWdlTmFtZTwvQT48L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtwcm9qZWN0TmFtZSwKICAgICAgICAgICAgICAgICAgICBqYXZhLmxhbmcuU3RyaW5nJm5ic3A7cGFja2FnZU5hbWUpPC9DT0RFPgoKPEJSPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtWYWxpZGF0ZSB0aGUgZ2l2ZW4gcGFja2FnZSBuYW1lIHVzaW5nIHRoZSBnaXZlbiBwcm9qZWN0cyBzb3VyY2UgYW5kIGNvbXBsaWFuY2UgbGV2ZWxzLjwvVEQ+CjwvVFI+CjwvVEFCTEU+CiZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YS5sYW5nLk9iamVjdCI+PCEtLSAtLT48L0E+CjxUQUJMRSBCT1JERVI9IjEiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFNVTU1BUlk9IiI+CjxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgo8VEggQUxJR049ImxlZnQiPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MgamF2YS5sYW5nLk9iamVjdDwvQj48L1RIPgo8L1RSPgo8VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KPFREPjxDT0RFPmNsb25lLCBlcXVhbHMsIGZpbmFsaXplLCBnZXRDbGFzcywgaGFzaENvZGUsIG5vdGlmeSwgbm90aWZ5QWxsLCB0b1N0cmluZywgd2FpdCwgd2FpdCwgd2FpdDwvQ09ERT48L1REPgo8L1RSPgo8L1RBQkxFPgombmJzcDsKPFA+Cgo8IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Cgo8QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KPFRBQkxFIEJPUkRFUj0iMSIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+CjxUSCBBTElHTj0ibGVmdCIgQ09MU1BBTj0iMSI+PEZPTlQgU0laRT0iKzIiPgo8Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1RIPgo8L1RSPgo8L1RBQkxFPgoKPEEgTkFNRT0iYWRkVG9DbGFzc3BhdGgob3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFQcm9qZWN0LCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JQ2xhc3NwYXRoRW50cnkpIj48IS0tIC0tPjwvQT48SDM+CmFkZFRvQ2xhc3NwYXRoPC9IMz4KPFBSRT4KcHVibGljIHN0YXRpYyB2b2lkIDxCPmFkZFRvQ2xhc3NwYXRoPC9CPihvcmcuZWNsaXBzZS5qZHQuY29yZS5JSmF2YVByb2plY3QmbmJzcDtqYXZhUHJvamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy5lY2xpcHNlLmpkdC5jb3JlLklDbGFzc3BhdGhFbnRyeSZuYnNwO2NsYXNzcGF0aEVudHJ5KTwvUFJFPgo8REw+CjxERD5BZGQgYSA8Y29kZT5JQ2xhc3NwYXRoRW50cnk8L2NvZGU+IHRvIGEgPGNvZGU+SUphdmFQcm9qZWN0PC9jb2RlPgo8UD4KPEREPjxETD4KPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5qYXZhUHJvamVjdDwvQ09ERT4gLSB0aGUgPGNvZGU+SUphdmFQcm9qZWN0PC9jb2RlPiB0byBhZGQgdGhlIGNsYXNzcGF0aCBlbnRyeSB0bzxERD48Q09ERT5jbGFzc3BhdGhFbnRyeTwvQ09ERT4gLSB0aGUgPGNvZGU+SUNsYXNzcGF0aEVudHJ5PC9jb2RlPiB0byBhZGQ8L0RMPgo8L0REPgo8L0RMPgo8SFI+Cgo8QSBOQU1FPSJyZW1vdmVGcm9tQ2xhc3NwYXRoKG9yZy5lY2xpcHNlLmpkdC5jb3JlLklKYXZhUHJvamVjdCwgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUNsYXNzcGF0aEVudHJ5KSI+PCEtLSAtLT48L0E+PEgzPgpyZW1vdmVGcm9tQ2xhc3NwYXRoPC9IMz4KPFBSRT4KcHVibGljIHN0YXRpYyB2b2lkIDxCPnJlbW92ZUZyb21DbGFzc3BhdGg8L0I+KG9yZy5lY2xpcHNlLmpkdC5jb3JlLklKYXZhUHJvamVjdCZuYnNwO2phdmFQcm9qZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmcuZWNsaXBzZS5qZHQuY29yZS5JQ2xhc3NwYXRoRW50cnkmbmJzcDtjbGFzc3BhdGhFbnRyeSk8L1BSRT4KPERMPgo8REQ+UmVtb3ZlIGEgPGNvZGU+SUNsYXNzcGF0aEVudHJ5PC9jb2RlPiBmcm9tIGEgPGNvZGU+SUphdmFQcm9qZWN0PC9jb2RlPgo8UD4KPEREPjxETD4KPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5qYXZhUHJvamVjdDwvQ09ERT4gLSB0aGUgPGNvZGU+SUphdmFQcm9qZWN0PC9jb2RlPiB0byByZW1vdmUgdGhlIGNsYXNzcGF0aCBlbnRyeSBmcm9tPEREPjxDT0RFPmNsYXNzcGF0aEVudHJ5PC9DT0RFPiAtIHRoZSA8Y29kZT5JQ2xhc3NwYXRoRW50cnk8L2NvZGU+IHRvIHJlbW92ZTwvREw+CjwvREQ+CjwvREw+CjxIUj4KCjxBIE5BTUU9ImdldEphdmFQcm9qZWN0KGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+CmdldEphdmFQcm9qZWN0PC9IMz4KPFBSRT4KcHVibGljIHN0YXRpYyBvcmcuZWNsaXBzZS5qZHQuY29yZS5JSmF2YVByb2plY3QgPEI+Z2V0SmF2YVByb2plY3Q8L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtwcm9qZWN0TmFtZSk8L1BSRT4KPERMPgo8REQ+UmV0dXJucyB0aGUgSmF2YSBwcm9qZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIHByb2plY3QgbmFtZS4KPFA+CjxERD48REw+CjxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+cHJvamVjdE5hbWU8L0NPREU+IC0gdGhlIHByb2plY3QgbmFtZQo8RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBKYXZhIHByb2plY3QgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gcHJvamVjdCBuYW1lPC9ETD4KPC9ERD4KPC9ETD4KPEhSPgoKPEEgTkFNRT0iZ2V0SmF2YVByb2plY3RPdXRwdXREaXJlY3RvcnlQYXRoKG9yZy5lY2xpcHNlLmpkdC5jb3JlLklKYXZhUHJvamVjdCkiPjwhLS0gLS0+PC9BPjxIMz4KZ2V0SmF2YVByb2plY3RPdXRwdXREaXJlY3RvcnlQYXRoPC9IMz4KPFBSRT4KcHVibGljIHN0YXRpYyBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGggPEI+Z2V0SmF2YVByb2plY3RPdXRwdXREaXJlY3RvcnlQYXRoPC9CPihvcmcuZWNsaXBzZS5qZHQuY29yZS5JSmF2YVByb2plY3QmbmJzcDtqYXZhUHJvamVjdCk8L1BSRT4KPERMPgo8REQ+UmV0dXJucyB0aGUgYWJzb2x1dGUgcGF0aCBpbiB0aGUgbG9jYWwgZmlsZSBzeXN0ZW0gb2YgdGhlIGRlZmF1bHQgb3V0cHV0IGxvY2F0aW9uIGZvciB0aGUgZ2l2ZW4gamF2YSBwcm9qZWN0Lgo8UD4KPEREPjxETD4KPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5qYXZhUHJvamVjdDwvQ09ERT4gLSB0aGUgamF2YSBwcm9qZWN0CjxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIGFic29sdXRlIHBhdGggb2YgdGhlIGRlZmF1bHQgb3V0cHV0IGZvbGRlciBmb3IgdGhlIGdpdmVuIGphdmEgcHJvamVjdDwvREw+CjwvREQ+CjwvREw+CjxIUj4KCjxBIE5BTUU9ImdldEphdmFQcm9qZWN0T3V0cHV0RGlyZWN0b3J5UGF0aChqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgpnZXRKYXZhUHJvamVjdE91dHB1dERpcmVjdG9yeVBhdGg8L0gzPgo8UFJFPgpwdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aCA8Qj5nZXRKYXZhUHJvamVjdE91dHB1dERpcmVjdG9yeVBhdGg8L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtwcm9qZWN0TmFtZSk8L1BSRT4KPERMPgo8REQ+UmV0dXJucyB0aGUgYWJzb2x1dGUgcGF0aCBpbiB0aGUgbG9jYWwgZmlsZSBzeXN0ZW0gb2YgdGhlIGRlZmF1bHQgb3V0cHV0IGxvY2F0aW9uIGZvciB0aGUgZ2l2ZW4gamF2YSBwcm9qZWN0IG5hbWUuCjxQPgo8REQ+PERMPgo8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnByb2plY3ROYW1lPC9DT0RFPiAtIHRoZSBuYW1lIG9mIHRoZSBqYXZhIHByb2plY3QKPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgZGVmYXVsdCBvdXRwdXQgZm9sZGVyIGZvciB0aGUgZ2l2ZW4gamF2YSBwcm9qZWN0IG5hbWU8L0RMPgo8L0REPgo8L0RMPgo8SFI+Cgo8QSBOQU1FPSJnZXRKYXZhUHJvamVjdFNvdXJjZURpcmVjdG9yeVBhdGgob3JnLmVjbGlwc2UuamR0LmNvcmUuSVR5cGUpIj48IS0tIC0tPjwvQT48SDM+CmdldEphdmFQcm9qZWN0U291cmNlRGlyZWN0b3J5UGF0aDwvSDM+CjxQUkU+CnB1YmxpYyBzdGF0aWMgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoIDxCPmdldEphdmFQcm9qZWN0U291cmNlRGlyZWN0b3J5UGF0aDwvQj4ob3JnLmVjbGlwc2UuamR0LmNvcmUuSVR5cGUmbmJzcDt0eXBlKTwvUFJFPgo8REw+CjxERD5SZXR1cm5zIHRoZSBmdWxsLCBhYnNvbHV0ZSBwYXRoIHJlbGF0aXZlIHRvIHRoZSB3b3Jrc3BhY2Ugb2YgdGhlIHNvdXJjZSBmb2xkZXIgdGhhdCBjb250YWlucyB0aGUgZ2l2ZW4gdHlwZS4KPFA+CjxERD48REw+CjxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+dHlwZTwvQ09ERT4gLSB0aGUgPGNvZGU+SVR5cGU8L2NvZGU+CjxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIGFic29sdXRlIHBhdGggb2YgdGhlIGdpdmVuIDxjb2RlPklUeXBlPC9jb2RlPiBzb3VyY2UgZm9sZGVyPC9ETD4KPC9ERD4KPC9ETD4KPEhSPgoKPEEgTkFNRT0iZ2V0SmF2YVByb2plY3RTb3VyY2VEaXJlY3RvcnlQYXRoKGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+CmdldEphdmFQcm9qZWN0U291cmNlRGlyZWN0b3J5UGF0aDwvSDM+CjxQUkU+CnB1YmxpYyBzdGF0aWMgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoIDxCPmdldEphdmFQcm9qZWN0U291cmNlRGlyZWN0b3J5UGF0aDwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO3Byb2plY3ROYW1lKTwvUFJFPgo8REw+CjxERD5SZXR1cm5zIHRoZSBmdWxsLCBhYnNvbHV0ZSBwYXRoIHJlbGF0aXZlIHRvIHRoZSB3b3Jrc3BhY2Ugb2YgdGhlIGZpcnN0IHNvdXJjZSBmb2xkZXIgZm91bmQgaW4gdGhlIGphdmEgcHJvamVjdCB3aXRoIHRoZSBnaXZlbiBuYW1lLgo8UD4KPEREPjxETD4KPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5wcm9qZWN0TmFtZTwvQ09ERT4gLSB0aGUgbmFtZSBvZiB0aGUgamF2YSBwcm9qZWN0CjxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIGFic29sdXRlIHBhdGggb2YgdGhlIGZpcnN0IHNvdXJjZSBmb2xkZXIgZm91bmQgaW4gdGhlIGphdmEgcHJvamVjdCB3aXRoIHRoZSBnaXZlbiBuYW1lLjwvREw+CjwvREQ+CjwvREw+CjxIUj4KCjxBIE5BTUU9ImdldEphdmFQcm9qZWN0U291cmNlRGlyZWN0b3J5UGF0aChvcmcuZWNsaXBzZS5qZHQuY29yZS5JSmF2YVByb2plY3QpIj48IS0tIC0tPjwvQT48SDM+CmdldEphdmFQcm9qZWN0U291cmNlRGlyZWN0b3J5UGF0aDwvSDM+CjxQUkU+CnB1YmxpYyBzdGF0aWMgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoIDxCPmdldEphdmFQcm9qZWN0U291cmNlRGlyZWN0b3J5UGF0aDwvQj4ob3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFQcm9qZWN0Jm5ic3A7amF2YVByb2plY3QpPC9QUkU+CjxETD4KPEREPlJldHVybnMgdGhlIGZ1bGwsIGFic29sdXRlIHBhdGggcmVsYXRpdmUgdG8gdGhlIHdvcmtzcGFjZSBvZiB0aGUgZmlyc3Qgc291cmNlIGZvbGRlciBmb3VuZCBpbiB0aGUgZ2l2ZW4gamF2YSBwcm9qZWN0Lgo8UD4KPEREPjxETD4KPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5qYXZhUHJvamVjdDwvQ09ERT4gLSB0aGUgPGNvZGU+SUphdmFQcm9qZWN0PC9jb2RlPgo8RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBmaXJzdCBzb3VyY2UgZm9sZGVyIGZvdW5kIGluIHRoZSBnaXZlbiBqYXZhIHByb2plY3QuPC9ETD4KPC9ERD4KPC9ETD4KPEhSPgoKPEEgTkFNRT0iZ2V0UHVibGljTWV0aG9kcyhvcmcuZWNsaXBzZS5qZHQuY29yZS5JVHlwZSkiPjwhLS0gLS0+PC9BPjxIMz4KZ2V0UHVibGljTWV0aG9kczwvSDM+CjxQUkU+CnB1YmxpYyBzdGF0aWMgb3JnLmVjbGlwc2UuamR0LmNvcmUuSU1ldGhvZFtdIDxCPmdldFB1YmxpY01ldGhvZHM8L0I+KG9yZy5lY2xpcHNlLmpkdC5jb3JlLklUeXBlJm5ic3A7dHlwZSk8L1BSRT4KPERMPgo8REQ+SWYgdGhlIGdpdmVuIDxjb2RlPklUeXBlPC9jb2RlPiBpcyBhbiBpbnRlcmZhY2UgYWxsIG1ldGhvZHMgZGVjbGFyZWQgaW4gdGhhdCBpbnRlcmZhY2UgYXJlIHJldHVybmVkLgogPHA+CiBBbHRlcm5hdGl2ZWx5IGlmIHRoZSBnaXZlbiBnaXZlbiA8Y29kZT5JVHlwZTwvY29kZT4gaXMgYSBjbGFzcywgb25seSBtZXRob2RzIHRoYXQgYXJlIGV4cGxpY2l0bHkgbWFya2VkCiBwdWJsaWMgYXJlIHJldHVybmVkLgo8UD4KPEREPjxETD4KPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT50eXBlPC9DT0RFPiAtIHRoZSA8Y29kZT5JVHlwZTwvY29kZT4KPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgcHVibGljIG1ldGhvZHMgZGVjbGFyZWQgaW4gdGhpcyB0eXBlPC9ETD4KPC9ERD4KPC9ETD4KPEhSPgoKPEEgTkFNRT0iZ2V0VGFyZ2V0TmFtZXNwYWNlRnJvbVBhY2thZ2VOYW1lKGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+CmdldFRhcmdldE5hbWVzcGFjZUZyb21QYWNrYWdlTmFtZTwvSDM+CjxQUkU+CnB1YmxpYyBzdGF0aWMgamF2YS5sYW5nLlN0cmluZyA8Qj5nZXRUYXJnZXROYW1lc3BhY2VGcm9tUGFja2FnZU5hbWU8L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtwYWNrYWdlTmFtZSk8L1BSRT4KPERMPgo8REQ+Q29uc3RydWN0cyBhIHRhcmdldCBuYW1lc3BhY2Ugc3RyaW5nIGZyb20gdGhlIGdpdmVuIHBhY2thZ2UgbmFtZSBieSBzcGxpdHRpbmcgdGhlIGRvdCAnLicgc2VwYXJhdGVkCiBwYWNrYWdlIG5hbWUsIHJldmVyc2luZyB0aGUgb3JkZXIgb2YgdGhlIHBhY2thZ2UgbmFtZSBzZWdtZW50cyBmb2xsb3dlZCBieSBwcmVmaXhpbmcgdGhlIHN0cmluZyB3aXRoCiAnaHR0cDovLycgYW5kIGFwcGVuZGluZyBhIGZvcndhcmQgc2xhc2ggJy8nIHRvIHRoZSBlbmQuCiA8cD5FLmcuLCB0aGUgSmF2YSBwYWNrYWdlINJjb20uZXhhbXBsZS53c9Mgd291bGQgcmV0dXJuIHRoZSB0YXJnZXQgbmFtZXNwYWNlINJodHRwOi8vd3MuZXhhbXBsZS5jb20v0y48L3A+CiA8cD5JZiB0aGUgcGFja2FnZSBuYW1lIGlzIG51bGwgb3IgaXMgb2YgemVybyBsZW5ndGggICJodHRwOi8vZGVmYXVsdF9wYWNrYWdlLyIgaXMgcmV0dXJuZWQuPC9wPgo8UD4KPEREPjxETD4KPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5wYWNrYWdlTmFtZTwvQ09ERT4gLSB0aGUgcGFja2FnZSBuYW1lCjxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIGRlcml2ZWQgdGFyZ2V0IG5hbWVzcGFjZTwvREw+CjwvREQ+CjwvREw+CjxIUj4KCjxBIE5BTUU9ImZpbmRUeXBlKG9yZy5lY2xpcHNlLmpkdC5jb3JlLklKYXZhUHJvamVjdCwgamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KZmluZFR5cGU8L0gzPgo8UFJFPgpwdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLmpkdC5jb3JlLklUeXBlIDxCPmZpbmRUeXBlPC9CPihvcmcuZWNsaXBzZS5qZHQuY29yZS5JSmF2YVByb2plY3QmbmJzcDtqYXZhUHJvamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmxhbmcuU3RyaW5nJm5ic3A7ZnVsbHlRdWFsaWZpZWRDbGFzc05hbWUpPC9QUkU+CjxETD4KPEREPlJldHVybnMgdGhlIGZpcnN0IHR5cGUgZm91bmQgZm9sbG93aW5nIHRoZSBnaXZlbiBqYXZhIHByb2plY3QncyBjbGFzc3BhdGggd2l0aCB0aGUgZ2l2ZW4gZnVsbHkgcXVhbGlmaWVkIG5hbWUgb3IgbnVsbCBpZiBub25lIGlzIGZvdW5kLgo8UD4KPEREPjxETD4KPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5qYXZhUHJvamVjdDwvQ09ERT4gLSB0aGUgZ2l2ZW4gPGNvZGU+SUphdmFQcm9qZWN0PC9jb2RlPjxERD48Q09ERT5mdWxseVF1YWxpZmllZENsYXNzTmFtZTwvQ09ERT4gLSB0aGUgZ2l2ZW4gZnVsbHkgcXVhbGlmaWVkIG5hbWUKPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgZmlyc3QgdHlwZSBmb3VuZCBmb2xsb3dpbmcgdGhlIGphdmEgcHJvamVjdCdzIGNsYXNzcGF0aCB3aXRoIHRoZSBnaXZlbiBmdWxseSBxdWFsaWZpZWQgbmFtZSBvciBudWxsIGlmIG5vbmUgaXMgZm91bmQ8L0RMPgo8L0REPgo8L0RMPgo8SFI+Cgo8QSBOQU1FPSJmaW5kVHlwZShqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgpmaW5kVHlwZTwvSDM+CjxQUkU+CnB1YmxpYyBzdGF0aWMgb3JnLmVjbGlwc2UuamR0LmNvcmUuSVR5cGUgPEI+ZmluZFR5cGU8L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtwcm9qZWN0TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhLmxhbmcuU3RyaW5nJm5ic3A7ZnVsbHlRdWFsaWZpZWRDbGFzc05hbWUpPC9QUkU+CjxETD4KPEREPlJldHVybnMgdGhlIGZpcnN0IHR5cGUgZm91bmQgd2l0aCB0aGUgZ2l2ZW4gZnVsbHkgcXVhbGlmaWVkIG5hbWUgZm9sbG93aW5nIHRoZSBjbGFzc3BhdGggb2YgdGhlIGphdmEgcHJvamVjdCB3aXRoCiB0aGUgZ2l2ZSBwcm9qZWN0IG5hbWUgb3IgbnVsbCBpZiBub25lIGlzIGZvdW5kLgo8UD4KPEREPjxETD4KPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5wcm9qZWN0TmFtZTwvQ09ERT4gLSB0aGUgbmFtZSBvZiB0aGUgamF2YSBwcm9qZWN0PEREPjxDT0RFPmZ1bGx5UXVhbGlmaWVkQ2xhc3NOYW1lPC9DT0RFPiAtIHRoZSBnaXZlbiBmdWxseSBxdWFsaWZpZWQgbmFtZQo8RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBmaXJzdCB0eXBlIGZvdW5kIGZvbGxvd2luZyB0aGUgamF2YSBwcm9qZWN0J3MgY2xhc3NwYXRoIHdpdGggdGhlIGdpdmVuIGZ1bGx5IHF1YWxpZmllZCBuYW1lIG9yIG51bGwgaWYgbm9uZSBpcyBmb3VuZDwvREw+CjwvREQ+CjwvREw+CjxIUj4KCjxBIE5BTUU9ImlzSmF2YVByb2plY3Qob3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3QpIj48IS0tIC0tPjwvQT48SDM+CmlzSmF2YVByb2plY3Q8L0gzPgo8UFJFPgpwdWJsaWMgc3RhdGljIGJvb2xlYW4gPEI+aXNKYXZhUHJvamVjdDwvQj4ob3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3QmbmJzcDtwcm9qZWN0KTwvUFJFPgo8REw+CjxERD5SZXR1cm5zIHdoZXRoZXIgdGhlIGdpdmVuIHByb2plY3QgaGFzIHRoZSBqYXZhIG5hdHVyZS4KPFA+CjxERD48REw+CjxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+cHJvamVjdDwvQ09ERT4gLSB0aGUgZ2l2ZW4gcHJvamVjdAo8RFQ+PEI+UmV0dXJuczo8L0I+PEREPjxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBwcm9qZWN0IGhhcyB0aGUgamF2YSBuYXR1cmU8L0RMPgo8L0REPgo8L0RMPgo8SFI+Cgo8QSBOQU1FPSJpc1B1YmxpY01ldGhvZChvcmcuZWNsaXBzZS5qZHQuY29yZS5JTWV0aG9kKSI+PCEtLSAtLT48L0E+PEgzPgppc1B1YmxpY01ldGhvZDwvSDM+CjxQUkU+CnB1YmxpYyBzdGF0aWMgYm9vbGVhbiA8Qj5pc1B1YmxpY01ldGhvZDwvQj4ob3JnLmVjbGlwc2UuamR0LmNvcmUuSU1ldGhvZCZuYnNwO21ldGhvZCk8L1BSRT4KPERMPgo8REQ+UmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBtZXRob2QgaXNuJ3QgYSBtYWluIG1ldGhvZCBvciBjb25zdHJ1Y3RvciBhbmQgaWYgaXQgaGFzIHRoZSBwdWJsaWMgbW9kaWZpZXIuCjxQPgo8REQ+PERMPgo8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPm1ldGhvZDwvQ09ERT4gLSB0aGUgZ2l2ZW4gbWV0aG9kCjxEVD48Qj5SZXR1cm5zOjwvQj48REQ+PGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGdpdmVuIG1ldGhvZCBpcyBwdWJsaWM8L0RMPgo8L0REPgo8L0RMPgo8SFI+Cgo8QSBOQU1FPSJ2YWxpZGF0ZUphdmFUeXBlTmFtZShqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgp2YWxpZGF0ZUphdmFUeXBlTmFtZTwvSDM+CjxQUkU+CnB1YmxpYyBzdGF0aWMgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXMgPEI+dmFsaWRhdGVKYXZhVHlwZU5hbWU8L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtuYW1lKTwvUFJFPgo8REw+CjxERD5WYWxpZGF0ZXMgdGhlIGdpdmVuIEphdmEgdHlwZSBuYW1lLCBlaXRoZXIgc2ltcGxlIG9yIHF1YWxpZmllZCwgdXNpbmcgdGhlIHdvcmtzcGFjZSBzb3VyY2UgYW5kIGNvbXBsaWFuY2UgbGV2ZWxzLgo8UD4KPEREPjxETD4KPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5uYW1lPC9DT0RFPiAtIHRoZSBuYW1lIG9mIGEgdHlwZQo8RFQ+PEI+UmV0dXJuczo8L0I+PEREPmEgc3RhdHVzIG9iamVjdCB3aXRoIGNvZGUgSVN0YXR1cy5PSyBpZiB0aGUgZ2l2ZW4gbmFtZSBpcyB2YWxpZCBhcyBhIEphdmEgdHlwZSBuYW1lLCBhIHN0YXR1cyB3aXRoCiBjb2RlIElTdGF0dXMuV0FSTklORyBpbmRpY2F0aW5nIHdoeSB0aGUgZ2l2ZW4gbmFtZSBpcyBkaXNjb3VyYWdlZCwgb3RoZXJ3aXNlIGEgc3RhdHVzIG9iamVjdCBpbmRpY2F0aW5nIHdoYXQgaXMgd3Jvbmcgd2l0aCB0aGUgbmFtZTwvREw+CjwvREQ+CjwvREw+CjxIUj4KCjxBIE5BTUU9InZhbGlkYXRlSmF2YVR5cGVOYW1lKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+CnZhbGlkYXRlSmF2YVR5cGVOYW1lPC9IMz4KPFBSRT4KcHVibGljIHN0YXRpYyBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1cyA8Qj52YWxpZGF0ZUphdmFUeXBlTmFtZTwvQj4oamF2YS5sYW5nLlN0cmluZyZuYnNwO3Byb2plY3ROYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEubGFuZy5TdHJpbmcmbmJzcDtuYW1lKTwvUFJFPgo8REw+CjxERD5WYWxpZGF0ZXMgdGhlIGdpdmVuIEphdmEgdHlwZSBuYW1lLCBlaXRoZXIgc2ltcGxlIG9yIHF1YWxpZmllZCwgdXNpbmcgdGhlIGdpdmVuIHByb2plY3RzIHNvdXJjZSBhbmQgY29tcGxpYW5jZSBsZXZlbHMuCjxQPgo8REQ+PERMPgo8RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnByb2plY3ROYW1lPC9DT0RFPiAtIHRoZSBuYW1lIG9mIHRoZSBqYXZhIHByb2plY3Q8REQ+PENPREU+bmFtZTwvQ09ERT4gLSB0aGUgbmFtZSBvZiBhIHR5cGUKPERUPjxCPlJldHVybnM6PC9CPjxERD5hIHN0YXR1cyBvYmplY3Qgd2l0aCBjb2RlIElTdGF0dXMuT0sgaWYgdGhlIGdpdmVuIG5hbWUgaXMgdmFsaWQgYXMgYSBKYXZhIHR5cGUgbmFtZSwgYSBzdGF0dXMgd2l0aAogY29kZSBJU3RhdHVzLldBUk5JTkcgaW5kaWNhdGluZyB3aHkgdGhlIGdpdmVuIG5hbWUgaXMgZGlzY291cmFnZWQsIG90aGVyd2lzZSBhIHN0YXR1cyBvYmplY3QgaW5kaWNhdGluZyB3aGF0IGlzIHdyb25nIHdpdGggdGhlIG5hbWU8L0RMPgo8L0REPgo8L0RMPgo8SFI+Cgo8QSBOQU1FPSJ2YWxpZGF0ZVBhY2thZ2VOYW1lKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+CnZhbGlkYXRlUGFja2FnZU5hbWU8L0gzPgo8UFJFPgpwdWJsaWMgc3RhdGljIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzIDxCPnZhbGlkYXRlUGFja2FnZU5hbWU8L0I+KGphdmEubGFuZy5TdHJpbmcmbmJzcDtwcm9qZWN0TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmEubGFuZy5TdHJpbmcmbmJzcDtwYWNrYWdlTmFtZSk8L1BSRT4KPERMPgo8REQ+VmFsaWRhdGUgdGhlIGdpdmVuIHBhY2thZ2UgbmFtZSB1c2luZyB0aGUgZ2l2ZW4gcHJvamVjdHMgc291cmNlIGFuZCBjb21wbGlhbmNlIGxldmVscy4KPFA+CjxERD48REw+CjxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+cHJvamVjdE5hbWU8L0NPREU+IC0gdGhlIG5hbWUgb2YgdGhlIGphdmEgcHJvamVjdDxERD48Q09ERT5wYWNrYWdlTmFtZTwvQ09ERT4gLSB0aGUgbmFtZSBvZiBhIHBhY2thZ2UKPERUPjxCPlJldHVybnM6PC9CPjxERD5hIHN0YXR1cyBvYmplY3Qgd2l0aCBjb2RlIElTdGF0dXMuT0sgaWYgdGhlIGdpdmVuIG5hbWUgaXMgdmFsaWQgYXMgYSBwYWNrYWdlIG5hbWUsIG90aGVyd2lzZSBhIHN0YXR1cwogb2JqZWN0IGluZGljYXRpbmcgd2hhdCBpcyB3cm9uZyB3aXRoIHRoZSBuYW1lPC9ETD4KPC9ERD4KPC9ETD4KPEhSPgoKPEEgTkFNRT0idmFsaWRhdGVJZGVudGlmaWVyKGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+CnZhbGlkYXRlSWRlbnRpZmllcjwvSDM+CjxQUkU+CnB1YmxpYyBzdGF0aWMgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXMgPEI+dmFsaWRhdGVJZGVudGlmaWVyPC9CPihqYXZhLmxhbmcuU3RyaW5nJm5ic3A7aWQpPC9QUkU+CjxETD4KPEREPlZhbGlkYXRlcyB0aGUgZ2l2ZW4gSmF2YSBpZGVudGlmaWVyIHdpdGggdGhlIHdvcmtzcGFjZSBzb3VyY2UgYW5kIGNvbXBsaWFuY2UgbGV2ZWxzLgo8UD4KPEREPjxETD4KPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5pZDwvQ09ERT4gLSB0aGUgSmF2YSBpZGVudGlmaWVyCjxEVD48Qj5SZXR1cm5zOjwvQj48REQ+YSBzdGF0dXMgb2JqZWN0IHdpdGggY29kZSBJU3RhdHVzLk9LIGlmIHRoZSBnaXZlbiBpZGVudGlmaWVyIGlzIGEgdmFsaWQgSmF2YSBpZGVudGlmaWVyLCBvdGhlcndpc2UKIGEgc3RhdHVzIG9iamVjdCBpbmRpY2F0aW5nIHdoYXQgaXMgd3Jvbmcgd2l0aCB0aGUgaWRlbnRpZmllcjwvREw+CjwvREQ+CjwvREw+CjwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KPEhSPgoKCjwhLS0gPT09PT09PSBTVEFSVCBPRiBCT1RUT00gTkFWQkFSID09PT09PSAtLT4KPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+CjxBIEhSRUY9IiNza2lwLW5hdmJhcl9ib3R0b20iIHRpdGxlPSJTa2lwIG5hdmlnYXRpb24gbGlua3MiPjwvQT4KPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCIgU1VNTUFSWT0iIj4KPFRSPgo8VEQgQ09MU1BBTj0yIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+CjxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgo8VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiIFNVTU1BUlk9IiI+CiAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+CiAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+CiAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImNsYXNzLXVzZS9KRFRVdGlscy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlVzZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+CiAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgogIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaW5kZXgtZmlsZXMvaW5kZXgtMS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KICA8L1RSPgo8L1RBQkxFPgo8L1REPgo8VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KPC9FTT4KPC9URD4KPC9UUj4KCjxUUj4KPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KJm5ic3A7UFJFViBDTEFTUyZuYnNwOwombmJzcDs8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9vcmcvZWNsaXBzZS9qc3Qvd3MvamF4d3MvY29yZS91dGlscy9XU0RMVXRpbHMuaHRtbCIgdGl0bGU9ImNsYXNzIGluIG9yZy5lY2xpcHNlLmpzdC53cy5qYXh3cy5jb3JlLnV0aWxzIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sP29yZy9lY2xpcHNlL2pzdC93cy9qYXh3cy9jb3JlL3V0aWxzL0pEVFV0aWxzLmh0bWwiIHRhcmdldD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwombmJzcDs8QSBIUkVGPSJKRFRVdGlscy5odG1sIiB0YXJnZXQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKJm5ic3A7PFNDUklQVCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogIDwhLS0KICBpZih3aW5kb3c9PXRvcCkgewogICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vLi4vLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKICB9CiAgLy8tLT4KPC9TQ1JJUFQ+CjxOT1NDUklQVD4KICA8QSBIUkVGPSIuLi8uLi8uLi8uLi8uLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgo8L05PU0NSSVBUPgoKCjwvRk9OVD48L1REPgo8L1RSPgo8VFI+CjxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+CiAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgo8VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgpERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+CjwvVFI+CjwvVEFCTEU+CjxBIE5BTUU9InNraXAtbmF2YmFyX2JvdHRvbSI+PC9BPgo8IS0tID09PT09PT09IEVORCBPRiBCT1RUT00gTkFWQkFSID09PT09PT0gLS0+Cgo8SFI+Cgo8L0JPRFk+CjwvSFRNTD4K