PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+CjxodG1sPgo8aGVhZD4KICA8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KICA8dGl0bGU+QXhpczIgVXNlcidzIEd1aWRlPC90aXRsZT4KICA8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9ImFtYXlhIDkuMi4xLCBzZWUgaHR0cDovL3d3dy53My5vcmcvQW1heWEvIj4KPC9oZWFkPgoKPGJvZHkgbGFuZz0iZW4tVVMiIGRpcj0ibHRyIj4KPGg0PjxhIG5hbWU9IkF4aXMyX1VzZXInc19HdWlkZSI+QXhpczIgVXNlcidzIEd1aWRlPC9hPjwvaDQ+Cgo8cD48aT4tQXhpczIgVmVyc2lvbiAwLjk1PC9pPjwvcD4KCjxwPjxpPlVzZXIgRmVlZGJhY2s6IDxhCmhyZWY9Im1haWx0bzpheGlzLXVzZXJAd3MuYXBhY2hlLm9yZyI+YXhpcy11c2VyQHdzLmFwYWNoZS5vcmc8L2E+PC9pPi4gUHJlZml4CnN1YmplY3Qgd2l0aCBbQXhpczJdLiBUbyBzdWJzY3JpYmUgdG8gbWFpbGluZyBsaXN0IHNlZSA8YQpocmVmPSJodHRwOi8vd3MuYXBhY2hlLm9yZy9heGlzMi9tYWlsLWxpc3RzLmh0bWwiPmhlcmUuPC9hPjwvcD4KCjxwIGFsaWduPSJyaWdodCI+UGFnZXM6IDxhIGhyZWY9InVzZXJndWlkZS5odG1sIj5Db250ZW50PC9hPiwgPGEKaHJlZj0idXNlcmd1aWRlMS5odG1sIj4xPC9hPiwgPGEgaHJlZj0idXNlcmd1aWRlMi5odG1sIj4yPC9hPiwgPGEKaHJlZj0idXNlcmd1aWRlMy5odG1sIj4zPC9hPiwgPGI+NDwvYj4sIDxhIGhyZWY9InVzZXJndWlkZTUuaHRtbCI+NTwvYT48L3A+Cgo8cD48Yj48Zm9udCBzaXplPSI0Ij5Ob3RlIChvbiBzYW1wbGVzKTo8L2ZvbnQ+PC9iPiBBbGwgdGhlIHVzZXIncyBndWlkZQpzYW1wbGVzIGFyZSBsb2NhdGVkIGluIHRoZSA8Yj4ic2FtcGxlcy91c2VyZ3VpZGUvc3JjIjwvYj4gZGlyZWN0b3J5IG9mIHRoZQpiaW5hcnkgZGlzdHJpYnV0aW9uLjwvcD4KCjxoMj48YSBuYW1lPSJNb2R1bGVzIj48L2E+TW9kdWxlczwvaDI+Cgo8cD5BeGlzMiBwcm92aWRlcyBhbiBleHRlbmRlZCBzdXBwb3J0IGZvciBtb2R1bGVzIChTZWUgPGEKaHJlZj0iQXhpczJBcmNoaXRlY3R1cmVHdWlkZS5odG1sIiB0YXJnZXQ9Il9ibGFuayI+QXJjaGl0ZWN0dXJlIEd1aWRlPC9hPiBmb3IKbW9yZSBkZXRhaWxzIGFib3V0IG1vZHVsZXMgaW4gQXhpczIpLiBMZXQncyBjcmVhdGUgYSBjdXN0b20gbW9kdWxlIGFuZCBkZXBsb3kKaXQgdG8gdGhlIE15U2VydmljZSB3aGljaCB3ZSBjcmVhdGVkIGVhcmxpZXIuIEZvbGxvd2luZyBzdGVwcyBzaG93cyB0aGUKYWN0aW9ucyB0aGF0IG5lZWQgdG8gYmUgcGVyZm9ybWVkIHRvIGRlcGxveSBhIGN1c3RvbSBtb2R1bGUgZm9yIGEgZ2l2ZW4gV2ViClNlcnZpY2U6PC9wPgo8b2w+CiAgPGxpPjxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW4iPkNyZWF0ZSB0aGUgTW9kdWxlIEltcGxlbWVudGF0aW9uPC9wPgogIDwvbGk+CiAgPGxpPjxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW4iPkNyZWF0ZSB0aGUgSGFuZGxlcnM8L3A+CiAgPC9saT4KICA8bGk+PHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IDBpbiI+Q3JlYXRlIHRoZSBtb2R1bGUueG1sPC9wPgogIDwvbGk+CiAgPGxpPjxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW4iPk1vZGlmeSB0aGUgImF4aXMyLnhtbCIgKGlmIHlvdSBuZWVkCiAgICBjdXN0b20gcGhhc2VzKTwvcD4KICA8L2xpPgogIDxsaT48cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluIj5Nb2RpZnkgdGhlICJzZXJ2aWNlcy54bWwiIHRvIGVuZ2FnZQogICAgbW9kdWxlcyBhdCB0aGUgZGVwbG95bWVudCB0aW1lLjwvcD4KICA8L2xpPgogIDxsaT48cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluIj5QYWNrYWdlIGluIGEgIi5tYXIiIChNb2R1bGUgQXJjaGl2ZSk8L3A+CiAgPC9saT4KICA8bGk+PHA+RGVwbG95IHRoZSBtb2R1bGUgaW4gQXhpczI8L3A+CiAgPC9saT4KPC9vbD4KCjxoMz48YSBuYW1lPSJNeVNlcnZpY2Vfd2l0aF9hX0xvZ2dpbmdfTW9kdWxlIj5NeVNlcnZpY2Ugd2l0aCBhIExvZ2dpbmcKTW9kdWxlPC9hPjwvaDM+Cgo8cD5MZXQncyB3cml0ZSBhIHNpbXBsZSBsb2dnaW5nIG1vZHVsZSBmb3Igb3VyIHNhbXBsZS4gVGhpcyBtb2R1bGUgY29udGFpbnMKb25lIGhhbmRsZXIgdGhhdCBqdXN0IGxvZ3MgdGhlIG1lc3NhZ2UgdGhhdCBpcyBwYXNzZWQgdGhyb3VnaCBpdC4gQXhpczIgdXNlcwouIm1hciIgKE1vZHVsZSBBcmNoaXZlKSB0byBkZXBsb3kgbW9kdWxlcyBpbiBBeGlzMi4gRm9sbG93aW5nIGRpYWdyYW0gc2hvd3MKdGhlIGZpbGUgc3RydWN0dXJlIGluc2lkZSB0aGF0IG5lZWRzIHRvIGJlIHRoZXJlIGluIHRoZSAiLm1hciIgYXJjaGl2ZS4gTGV0J3MKY3JlYXRlIGFsbCB0aGVzZSBhbmQgc2VlIGhvdyBpdCB3b3Jrcy48L3A+Cgo8cD48aW1nIHNyYz0iaW1hZ2VzL3VzZXJndWlkZS9Nb2R1bGVWaWV3LmpwZyIgbmFtZT0iR3JhcGhpYzUiIGFsaWduPSJib3R0b20iCndpZHRoPSIxODUiIGhlaWdodD0iMTIwIiBib3JkZXI9IjAiPjwvcD4KCjxoND48YSBuYW1lPSJTdGVwMV86X0xvZ2dpbmdNb2R1bGVfQ2xhc3MiPlN0ZXAxIDogTG9nZ2luZ01vZHVsZSBDbGFzczwvYT48L2g0PgoKPHA+TG9nZ2luZ01vZHVsZSBpcyB0aGUgaW1wbGVtZW50YXRpb24gY2xhc3Mgb2YgdGhlIEF4aXMyIG1vZHVsZS4gQXhpczIKbW9kdWxlcyBzaG91bGQgaW1wbGVtZW50IHRoZSAib3JnLmFwYWNoZS5heGlzMi5tb2R1bGVzLk1vZHVsZSIgaW50ZXJmYWNlIHdpdGgKdGhlIGZvbGxvd2luZyBtZXRob2RzLjwvcD4KPHByZT5wdWJsaWMgdm9pZCBpbml0KENvbmZpZ3VyYXRpb25Db250ZXh0IGNvbmZpZ0NvbnRleHQsIEF4aXNNb2R1bGUgbW9kdWxlKSB0aHJvd3MgQXhpc0ZhdWx0Oy8vSW5pdGlhbGl6ZSB0aGUgbW9kdWxlCnB1YmxpYyB2b2lkIHNodXRkb3duKEF4aXNDb25maWd1cmF0aW9uIGF4aXNTeXN0ZW0pIHRocm93cyBBeGlzRmF1bHQ7Ly9FbmQgb2YgbW9kdWxlIHByb2Nlc3NpbmcKcHVibGljIHZvaWQgZW5nYWdlTm90aWZ5KEF4aXNEZXNjcmlwdGlvbiBheGlzRGVzY3JpcHRpb24pIHRocm93cyBBeGlzRmF1bHQ7PC9wcmU+Cgo8cD5UaGVzZSBtZXRob2RzIGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgdGhlIG1vZHVsZSBpbml0aWFsaXphdGlvbiBhbmQgdGhlCnRlcm1pbmF0aW9uLiBXaXRoIHRoZSBpbnB1dCBwYXJhbWV0ZXIgQXhpc0NvbmZpZ3VyYXRpb24gdXNlciBpcyBwcm92aWRlZCB3aXRoCnRoZSBjb21wbGV0ZSBjb25maWd1cmF0aW9uIGhpZXJhcmNoeS4gVGhpcyBjYW4gYmUgdXNlZCB0byBmaW5lLXR1bmUgdGhlCm1vZHVsZSBiZWhhdmlvciB1c2luZyB0aGUgbW9kdWxlIHdyaXRlcnMuIEZvciB0aGUgc2ltcGxlIGxvZ2dpbmcgc2VydmljZSB3ZQpjYW4ga2VlcCB0aGVzZSBtZXRob2RzIGJsYW5rIGluIG91ciBpbXBsZW1lbnRhdGlvbiBjbGFzcy48L3A+Cgo8aDQ+PGEgbmFtZT0iU3RlcDJfOl9Mb2dIYW5kbGVyIj5TdGVwMiA6IExvZ0hhbmRsZXI8L2E+PC9oND4KCjxwPkEgbW9kdWxlIGluIEF4aXMyIGNhbiBjb250YWluLCBvbmUgb3IgbW9yZSBoYW5kbGVycyB0aGF0IHBlcmZvcm0gdmFyaW91cwpTT0FQIGhlYWRlciBwcm9jZXNzaW5nIGF0IGRpZmZlcmVudCBwaGFzZXMuIChTZWU8YQpocmVmPSJBeGlzMkFyY2hpdGVjdHVyZUd1aWRlLmh0bWwiIHRhcmdldD0iX2JsYW5rIj4gQXJjaGl0ZWN0dXJlIEd1aWRlPC9hPgpmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwaGFzZXMpLiBGb3IgdGhlIGxvZ2dpbmcgbW9kdWxlIHdlIHdpbGwgd3JpdGUgYQpoYW5kbGUgd2l0aCB0aGUgZm9sbG93aW5nIG1ldGhvZHMuICJwdWJsaWMgdm9pZCBpbnZva2UoTWVzc2FnZUNvbnRleHQgY3R4KTsiCmlzIHRoZSBtZXRob2QgdGhhdCBpcyBjYWxsZWQgYnkgQXhpczIgZW5naW5lIHdoZW4gdGhlIGNvbnRyb2wgaXMgcGFzc2VkIHRvCnRoZSBoYW5kbGVyLiAicHVibGljIHZvaWQgcmV2b2tlKE1lc3NhZ2VDb250ZXh0IGN0eCk7IiBpcyBjYWxsZWQgd2hlbiB0aGUKaGFuZGxlcnMgYXJlIHJldm9rZWQgYnkgdGhlIEF4aXMyIGVuZ2luZS48L3A+CjxwcmU+cHVibGljIGNsYXNzIExvZ0hhbmRsZXIgZXh0ZW5kcyBBYnN0cmFjdEhhbmRsZXIgaW1wbGVtZW50cyBIYW5kbGVyIHsKICAgIHByaXZhdGUgTG9nIGxvZyA9IExvZ0ZhY3RvcnkuZ2V0TG9nKGdldENsYXNzKCkpOwogICAgcHJpdmF0ZSBRTmFtZSBuYW1lOwoKICAgIHB1YmxpYyBRTmFtZSBnZXROYW1lKCkgewogICAgICAgIHJldHVybiBuYW1lOwogICAgfQoKICAgIHB1YmxpYyB2b2lkIGludm9rZShNZXNzYWdlQ29udGV4dCBtc2dDb250ZXh0KSB0aHJvd3MgQXhpc0ZhdWx0IHsKICAgICAgICBsb2cuaW5mbyhtc2dDb250ZXh0LmdldEVudmVsb3BlKCkudG9TdHJpbmcoKSk7CiAgICB9CgogICAgcHVibGljIHZvaWQgcmV2b2tlKE1lc3NhZ2VDb250ZXh0IG1zZ0NvbnRleHQpIHsKICAgICAgICBsb2cuaW5mbyhtc2dDb250ZXh0LmdldEVudmVsb3BlKCkudG9TdHJpbmcoKSk7CiAgICB9CgogICAgcHVibGljIHZvaWQgc2V0TmFtZShRTmFtZSBuYW1lKSB7CiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgIH0KfTwvcHJlPgoKPGg0PjxhIG5hbWU9IlN0ZXAzXzpfbW9kdWxlX3htbCI+U3RlcDMgOiBtb2R1bGUueG1sPC9hPjwvaDQ+Cgo8cD4ibW9kdWxlLnhtbCIgY29udGFpbnMgdGhlIGRlcGxveW1lbnQgY29uZmlndXJhdGlvbnMgZm9yIGEgcGFydGljdWxhcgptb2R1bGUuIEl0IGNvbnRhaW5zIGRldGFpbHMgc3VjaCBhcyBJbXBsZW1lbnRhdGlvbiBjbGFzcyBvZiB0aGUgbW9kdWxlIChpbgp0aGlzIGV4YW1wbGUgaXQgaXMgdGhlICJMb2dnaW5nTW9kdWxlIiBjbGFzcyBhbmQgdmFyaW91cyBoYW5kbGVycyB0aGF0IHdpbGwKcnVuIGluIGRpZmZlcmVudCBwaGFzZXMpLiAibW9kdWxlLnhtbCIgZm9yIHRoZSBsb2dnaW5nIG1vZHVsZSB3aWxsIGJlIGFzCmZvbGxvd3M6PC9wPgo8cHJlPiZsdDttb2R1bGUgbmFtZT0ibG9nZ2luZyIgY2xhc3M9InVzZXJndWlkZS5sb2dnaW5nbW9kdWxlLkxvZ2dpbmdNb2R1bGUgIiZndDsKICAgJmx0O2luZmxvdyZndDsKICAgICAgICAmbHQ7aGFuZGxlciBuYW1lPSJJbkZsb3dMb2dIYW5kbGVyIiBjbGFzcz0idXNlcmd1aWRlLmxvZ2dpbmdtb2R1bGUuTG9nSGFuZGxlciImZ3Q7CiAgICAgICAgJmx0O29yZGVyIHBoYXNlPSJsb2dnaW5nUGhhc2UiIC8mZ3Q7CiAgICAgICAgJmx0Oy9oYW5kbGVyJmd0OwogICAmbHQ7L2luZmxvdyZndDsKCiAgICZsdDtvdXRmbG93Jmd0OwogICAgICAgICZsdDtoYW5kbGVyIG5hbWU9Ik91dEZsb3dMb2dIYW5kbGVyIiBjbGFzcz0idXNlcmd1aWRlLmxvZ2dpbmdtb2R1bGUuTG9nSGFuZGxlciImZ3Q7CiAgICAgICAgJmx0O29yZGVyIHBoYXNlPSJsb2dnaW5nUGhhc2UiLyZndDsKICAgICAgICAmbHQ7L2hhbmRsZXImZ3Q7CiAgICZsdDsvb3V0ZmxvdyZndDsKCiAgICZsdDtPdXRmYXVsdGZsb3cmZ3Q7CiAgICAgICAgJmx0O2hhbmRsZXIgbmFtZT0iRmF1bHRPdXRGbG93TG9nSGFuZGxlciIgY2xhc3M9InVzZXJndWlkZS5sb2dnaW5nbW9kdWxlLkxvZ0hhbmRsZXIiJmd0OwogICAgICAgICZsdDtvcmRlciBwaGFzZT0ibG9nZ2luZ1BoYXNlIi8mZ3Q7CiAgICAgICAgJmx0Oy9oYW5kbGVyJmd0OwogICAmbHQ7L091dGZhdWx0ZmxvdyZndDsKCiAgICZsdDtJTmZhdWx0ZmxvdyZndDsKICAgICAgICAmbHQ7aGFuZGxlciBuYW1lPSJGYXVsdEluRmxvd0xvZ0hhbmRsZXIiIGNsYXNzPSJ1c2VyZ3VpZGUubG9nZ2luZ21vZHVsZS5Mb2dIYW5kbGVyIiZndDsKICAgICAgICAmbHQ7b3JkZXIgcGhhc2U9ImxvZ2dpbmdQaGFzZSIvJmd0OwogICAgICAgICZsdDsvaGFuZGxlciZndDsKICAgJmx0Oy9JTmZhdWx0ZmxvdyZndDsKJmx0Oy9tb2R1bGUmZ3Q7PC9wcmU+Cgo8cD5BcyBpdCBjYW4gYmUgc2VlbiB0aGVyZSBhcmUgZm91ciBwaGFzZXMgZGVmaW5lZCBpbiB0aGlzICJtb2R1bGUueG1sIjwvcD4KPG9sPgogIDxsaT5pbmZsb3egoKCgoKCgoKCgoKCgoCAtIFJlcHJlc2VudHMgdGhlIGhhbmRsZXIgY2hhaW4gdGhhdCB3aWxsIHJ1biB3aGVuCiAgICBhIG1lc3NhZ2UgaXMgY29taW5nIGluLiA8L2xpPgogIDxsaT48cCBzdHlsZT0ibWFyZ2luLWJvdHRvbTogMGluIj5vdXRmbG93oKCgoKCgoKCgoKCgIC0gUmVwcmVzZW50cyB0aGUKICAgIGhhbmRsZXIgY2hhaW4gdGhhdCB3aWxsIHJ1biB3aGVuIHRoZSBtZXNzYWdlIGlzIGdvaW5nIG91dC4gPC9wPgogIDwvbGk+CiAgPGxpPjxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAwaW4iPk91dGZhdWx0Zmxvd6CgoKCgIC0gUmVwcmVzZW50cyB0aGUKICAgIGhhbmRsZXIgY2hhaW4gdGhhdCB3aWxsIHJ1biB3aGVuIHRoZXJlIGlzIGEgZmF1bHQgYW5kIHRoZSBmYXVsdCBpcyBnb2luZwogICAgb3V0IDwvcD4KICA8L2xpPgogIDxsaT48cD5JTmZhdWx0Zmxvd6CgoKCgoCAtIFJlcHJlc2VudHMgdGhlIGhhbmRsZXIgY2hhaW4gdGhhdCB3aWxsIHJ1biB3aGVuCiAgICB0aGVyZSBpcyBhIGZhdWx0IGFuZCB0aGUgZmF1bHQgaXMgY29taW5nIGluIDwvcD4KICA8L2xpPgo8L29sPgoKPHA+Rm9sbG93aW5nIHNldCBvZiB0YWdzIGRlc2NyaWJlIHRoZSBuYW1lIG9mIHRoZSBoYW5kbGVyLCBoYW5kbGVyIGNsYXNzIGFuZAp0aGUgcGhhc2UgaW4gd2hpY2ggdGhpcyBoYW5kbGVyIGlzIGdvaW5nIHRvIHJ1bi4gIkluRmxvd0xvZ0hhbmRsZXIiIGlzIHRoZQpuYW1lIGdpdmVuIGZvciB0aGUgcGFydGljdWxhciBpbnN0YW5jZSBvZiB0aGlzIGhhbmRsZXIuIFRoZSB2YWx1ZSBvZiBjbGFzcwphdHRyaWJ1dGUgaXMgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgdGhpcyBoYW5kbGVyLiBTaW5jZSB3ZSBhcmUKd3JpdGluZyBsb2dnaW5nIGhhbmRsZXIsIHdlIGNhbiByZXVzZSB0aGUgc2FtZSBoYW5kbGVyIGluIGFsbCB0aGVzZSBwaGFzZXMuCkhvd2V2ZXIgdGhpcyBtYXkgbm90IGJlIHRoZSBzYW1lIGZvciBhbGwgdGhlIG1vZHVsZXMuICImbHQ7b3JkZXIKcGhhc2U9ImxvZ2dpbmdQaGFzZSIgLyZndDsiIGRlc2NyaWJlcyB0aGUgcGhhc2UgaW4gd2hpY2ggdGhpcyBoYW5kbGVyCnJ1bnMuPC9wPgo8cHJlPiZsdDtoYW5kbGVyIG5hbWU9IkluRmxvd0xvZ0hhbmRsZXIiIGNsYXNzPSJ1c2VyZ3VpZGUubG9nZ2luZ21vZHVsZS5Mb2dIYW5kbGVyIiZndDsKJmx0O29yZGVyIHBoYXNlPSJsb2dnaW5nUGhhc2UiIC8mZ3Q7CiZsdDsvaGFuZGxlciZndDs8L3ByZT4KCjxwPlRvIGxlYXJuIG1vcmUgb24gUGhhc2UgcnVsZXMsIGNsaWNrIG9uIDxhCmhyZWY9Imh0dHA6Ly93d3cuZGV2ZWxvcGVyLmNvbS9qYXZhL3dlYi9hcnRpY2xlLnBocC8zNTI5MzIxIgp0YXJnZXQ9Il9ibGFuayI+aGVyZTwvYT48L3A+Cgo8aDQ+PGEgbmFtZT0iU3RlcF80Ol9Nb2RpZnlfdGhlXyYjMzQ7YXhpczJfeG1sJiMzNDsiPlN0ZXAgNDogTW9kaWZ5IHRoZQoiYXhpczIueG1sIjwvYT48L2g0PgoKPHA+SW4gdGhpcyBoYW5kbGVyIHRoZSBwaGFzZSAibG9nZ2luZ1BoYXNlIiBpcyBkZWZpbmVkIGJ5IHRoZSBtb2R1bGUgd3JpdGVyLgpJdCBpcyBub3QgYSBwcmUtZGVmaW5lZCBoYW5kbGVyIHBoYXNlLCBoZW5jZSB0aGUgbW9kdWxlIHdyaXRlciBzaG91bGQKaW50cm9kdWNlIGl0IHRvIHRoZSAiYXhpczIueG1sIiAoTk9UIHRoZSBzZXJ2aWNlcy54bWwpIHNvIHRoYXQgQXhpczIgZW5naW5lCmtub3dzIHdoZXJlIHRvIHBsYWNlIHRoZSBoYW5kbGVyIGluIGRpZmZlcmVudCAiZmxvd3MiICggSW5GbG93LCBPdXRGbG93LApldGMuKS4gRm9sbG93aW5nIHhtbCBsaW5lcyBzaG93IHRoZSByZXNwZWN0aXZlIGNoYW5nZXMgbWFkZSB0byB0aGUKImF4aXMyLnhtbCIgaW4gb3JkZXIgdG8gZGVwbG95IHRoaXMgbG9nZ2luZyBtb2R1bGUgaW4gQXhpczIgZW5naW5lLiBUaGlzIGlzCmFuIGV4dHJhY3Qgb2YgdGhlIHBoYXNlIHNlY3Rpb24gb2YgdGhlICJheGlzMi54bWwiLjwvcD4KPHByZT4mbHQ7IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0mZ3Q7CiZsdDshLS0gUGhhc2VzIC0tJmd0OwombHQ7IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0mZ3Q7CgombHQ7cGhhc2VPcmRlciB0eXBlPSJpbmZsb3ciJmd0OwogICAgICAgICZsdDshLS0gIFN5c3RlbSBwcmUgZGVmaW5lZCBwaGFzZXMgICAgICAgLS0mZ3Q7CiAgICAgICAgJmx0O3BoYXNlIG5hbWU9IlRyYW5zcG9ydEluIi8mZ3Q7CiAgICAgICAgJmx0O3BoYXNlIG5hbWU9IlByZURpc3BhdGNoIi8mZ3Q7CiAgICAgICAgJmx0O3BoYXNlIG5hbWU9IkRpc3BhdGNoIiBjbGFzcz0ib3JnLmFwYWNoZS5heGlzMi5lbmdpbmUuRGlzcGF0Y2hQaGFzZSImZ3Q7CiAgICAgICAgICAgICZsdDtoYW5kbGVyIG5hbWU9IkFkZHJlc3NpbmdCYXNlZERpc3BhdGNoZXIiCiAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuYXBhY2hlLmF4aXMyLmVuZ2luZS5BZGRyZXNzaW5nQmFzZWREaXNwYXRjaGVyIiZndDsKICAgICAgICAgICAgICAgICZsdDtvcmRlciBwaGFzZT0iRGlzcGF0Y2giLyZndDsKICAgICAgICAgICAgJmx0Oy9oYW5kbGVyJmd0OwoKICAgICAgICAgICAgJmx0O2hhbmRsZXIgbmFtZT0iUmVxdWVzdFVSSUJhc2VkRGlzcGF0Y2hlciIKICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5hcGFjaGUuYXhpczIuZW5naW5lLlJlcXVlc3RVUklCYXNlZERpc3BhdGNoZXIiJmd0OwogICAgICAgICAgICAgICAgJmx0O29yZGVyIHBoYXNlPSJEaXNwYXRjaCIvJmd0OwogICAgICAgICAgICAmbHQ7L2hhbmRsZXImZ3Q7CgogICAgICAgICAgICAmbHQ7aGFuZGxlciBuYW1lPSJTT0FQQWN0aW9uQmFzZWREaXNwYXRjaGVyIgogICAgICAgICAgICAgICAgICAgICBjbGFzcz0ib3JnLmFwYWNoZS5heGlzMi5lbmdpbmUuU09BUEFjdGlvbkJhc2VkRGlzcGF0Y2hlciImZ3Q7CiAgICAgICAgICAgICAgICAmbHQ7b3JkZXIgcGhhc2U9IkRpc3BhdGNoIi8mZ3Q7CiAgICAgICAgICAgICZsdDsvaGFuZGxlciZndDsKCiAgICAgICAgICAgICZsdDtoYW5kbGVyIG5hbWU9IlNPQVBNZXNzYWdlQm9keUJhc2VkRGlzcGF0Y2hlciIKICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5hcGFjaGUuYXhpczIuZW5naW5lLlNPQVBNZXNzYWdlQm9keUJhc2VkRGlzcGF0Y2hlciImZ3Q7CiAgICAgICAgICAgICAgICAmbHQ7b3JkZXIgcGhhc2U9IkRpc3BhdGNoIi8mZ3Q7CiAgICAgICAgICAgICZsdDsvaGFuZGxlciZndDsKICAgICAgICAgICAgJmx0O2hhbmRsZXIgbmFtZT0iSW5zdGFuY2VEaXNwYXRjaGVyIgogICAgICAgICAgICAgICAgICAgICBjbGFzcz0ib3JnLmFwYWNoZS5heGlzMi5lbmdpbmUuSW5zdGFuY2VEaXNwYXRjaGVyIiZndDsKICAgICAgICAgICAgICAgICZsdDtvcmRlciBwaGFzZT0iUG9zdERpc3BhdGNoIi8mZ3Q7CiAgICAgICAgICAgICZsdDsvaGFuZGxlciZndDsKICAgICAgICAmbHQ7L3BoYXNlJmd0OwogICAgICAgICZsdDshLS0gIFN5c3RlbSBwcmUgZGVmaW5lZCBwaGFzZXMgICAgICAgLS0mZ3Q7CiAgICAgICAgJmx0OyEtLSAgIEFmdGVyIFBvc3RkaXNwYXRjaCBwaGFzZSBtb2R1bGUgYXV0aG9yIG9yIG9yIHNlcnZpY2UgYXV0aG9yIGNhbiBhZGQgYW55IHBoYXNlIGhlIHdhbnQgICAgICAtLSZndDsKICAgICAgICAmbHQ7cGhhc2UgbmFtZT0iT3BlcmF0aW9uSW5QaGFzZSIvJmd0OwogICAgICAgICZsdDtwaGFzZSBuYW1lPSI8Zm9udCBjb2xvcj0iIzMzY2MwMCI+bG9nZ2luZ1BoYXNlPC9mb250PiIvJmd0OwogICAgJmx0Oy9waGFzZU9yZGVyJmd0OwogICAgJmx0O3BoYXNlT3JkZXIgdHlwZT0ib3V0ZmxvdyImZ3Q7CiAgICAgICAgJmx0OyEtLSAgICAgIHVzZXIgY2FuIGFkZCBoaXMgb3duIHBoYXNlcyB0byB0aGlzIGFyZWEgIC0tJmd0OwogICAgICAgICZsdDtwaGFzZSBuYW1lPSJPcGVyYXRpb25PdXRQaGFzZSIvJmd0OwogICAgICAgICZsdDtwaGFzZSBuYW1lPSI8Zm9udCBjb2xvcj0iIzMzY2MwMCI+bG9nZ2luZ1BoYXNlPC9mb250PiIvJmd0OwogICAgICAgICZsdDshLS1zeXN0ZW0gcHJlZGVmaW5lZCBwaGFzZS0tJmd0OwogICAgICAgICZsdDshLS10aGVzZSBwaGFzZSB3aWxsIHJ1biBpcnJlc3BlY3RpdmUgb2YgdGhlIHNlcnZpY2UtLSZndDsKICAgICAgICAmbHQ7cGhhc2UgbmFtZT0iUG9saWN5RGV0ZXJtaW5hdGlvbiIvJmd0OwogICAgICAgICZsdDtwaGFzZSBuYW1lPSJNZXNzYWdlT3V0Ii8mZ3Q7CiAgICAmbHQ7L3BoYXNlT3JkZXIvJmd0OwogICAgJmx0O3BoYXNlT3JkZXIgdHlwZT0iSU5mYXVsdGZsb3ciJmd0OwogICAgICAgICZsdDshLS0gICAgICB1c2VyIGNhbiBhZGQgaGlzIG93biBwaGFzZXMgdG8gdGhpcyBhcmVhICAtLSZndDsKICAgICAgICAmbHQ7cGhhc2UgbmFtZT0iT3BlcmF0aW9uSW5GYXVsdFBoYXNlIi8mZ3Q7CiAgICAgICAgJmx0O3BoYXNlIG5hbWU9Ijxmb250IGNvbG9yPSIjMzNjYzAwIj5sb2dnaW5nUGhhc2U8L2ZvbnQ+Ii8mZ3Q7CiAgICAmbHQ7L3BoYXNlT3JkZXImZ3Q7CiAgICAmbHQ7cGhhc2VPcmRlciB0eXBlPSJPdXRmYXVsdGZsb3ciJmd0OwogICAgICAgICZsdDshLS0gICAgICB1c2VyIGNhbiBhZGQgaGlzIG93biBwaGFzZXMgdG8gdGhpcyBhcmVhICAtLSZndDsKICAgICAgICAmbHQ7cGhhc2UgbmFtZT0iT3BlcmF0aW9uT3V0RmF1bHRQaGFzZSIvJmd0OwogICAgICAgICZsdDtwaGFzZSBuYW1lPSI8Zm9udCBjb2xvcj0iIzMzY2MwMCI+bG9nZ2luZ1BoYXNlPC9mb250PiIvJmd0OwogICAgICAgICZsdDtwaGFzZSBuYW1lPSJQb2xpY3lEZXRlcm1pbmF0aW9uIi8mZ3Q7CiAgICAgICAgJmx0O3BoYXNlIG5hbWU9Ik1lc3NhZ2VPdXQiLyZndDsKICAgICZsdDsvcGhhc2VPcmRlciZndDsKICAgIDwvcHJlPgoKPHA+U2hvd24gaW4gZ3JlZW4sIHRoZSBjdXN0b20gcGhhc2UgImxvZ2dpbmdQaGFzZSIgaXMgcGxhY2VkIGluIGFsbCB0aGUKZmxvd3MsIGhlbmNlIHRoYXQgcGhhc2Ugd2lsbCBiZSBjYWxsZWQgaW4gYWxsIHRoZSBtZXNzYWdlIGZsb3dzIGluIHRoZQplbmdpbmUuIFNpbmNlIG91ciBtb2R1bGUgaXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGhhc2UsIHRoZSBMb2dIYW5kbGVyIGluc2lkZQp0aGUgbW9kdWxlIG5vdyB3aWxsIGJlIGV4ZWN1dGVkIGluIHRoaXMgcGhhc2UuPC9wPgoKPGg0PjxhIG5hbWU9IlN0ZXA1XzpfTW9kaWZ5X3RoZV8mIzM0O3NlcnZpY2VzX3htbCYjMzQ7Ij5TdGVwNSA6IE1vZGlmeSB0aGUKInNlcnZpY2VzLnhtbCI8L2E+PC9oND4KCjxwPlVwIHRvIHRoaXMgcG9pbnQgd2UgaGF2ZSBjcmVhdGVkIHRoZSByZXF1aXJlZCBjbGFzc2VzIGFuZCBjb25maWd1cmF0aW9uCmRlc2NyaXB0aW9ucyBmb3IgdGhlIGxvZ2dpbmcgbW9kdWxlIGFuZCBieSBjaGFuZ2luZyB0aGUgImF4aXMyLnhtbCIgd2UgaGF2ZQpjcmVhdGVkIHRoZSByZXF1aXJlZCBwaGFzZXMgZm9yIHRoZSBsb2dnaW5nIG1vZHVsZS4gTmV4dCBzdGVwIGlzIHRvCiI8Yj5lbmdhZ2U8L2I+IiAodXNlKSB0aGlzIG1vZHVsZSBpbiBvbmUgb2Ygb3VyIHNlcnZpY2VzLiBGb3IgdGhpcywgbGV0J3MgdXNlCnRoZSBzYW1lIFdlYiBTZXJ2aWNlIHRoYXQgd2UgaGF2ZSB1c2VkIHRocm91Z2hvdXQgdGhlIHVzZXIncyBndWlkZSwKTXlTZXJ2aWNlLiBIb3dldmVyLCBzaW5jZSB3ZSBuZWVkIHRvIG1vZGlmeSB0aGUgInNlcnZpY2VzLnhtbCIgb2YgTXlTZXJ2aWNlCmluIG9yZGVyIHRvIGVuZ2FnZSB0aGlzIG1vZHVsZSwgd2UgdXNlIGEgc2VwYXJhdGUgV2ViIFNlcnZpY2UsIGJ1dCB3aXRoIHRoZQpzaW1pbGFyIG9wZXJhdGlvbnMuIFRoZSBjb2RlIGZvciB0aGlzIHNlcnZpY2UgY2FuIGJlIGZvdW5kIGluIHRoZQoiQXhpczJIb21lL3NhbXBsZXMvdXNlcmd1aWRlL3NyYy91c2VyZ3VpZGUvZXhhbXBsZTIiIGRpcmVjdG9yeS4gVGhlIHNpbXBsZQpjaGFuZ2VzIHRoYXQgd2UgaGF2ZSBkb25lIHRvICJzZXJ2aWNlcy54bWwnIGFyZSBzaG93biBpbiBncmVlbiBpbiB0aGUKZm9sbG93aW5nIGxpbmVzIG9mIHhtbC48L3A+CjxwcmU+Jmx0O3NlcnZpY2UgbmFtZT0iPGZvbnQgY29sb3I9IiMzM2NjMDAiPk15U2VydmljZVdpdGhNb2R1bGU8L2ZvbnQ+IiZndDsKICAgICZsdDtkZXNjcmlwdGlvbiZndDsKICAgIFRoaXMgaXMgYSBzYW1wbGUgV2ViIFNlcnZpY2Ugd2l0aCBhIGxvZ2dpbmcgbW9kdWxlIGVuZ2FnZWQuCiAgICAmbHQ7L2Rlc2NyaXB0aW9uJmd0OwogICAgPGZvbnQgY29sb3I9IiMzM2NjMDAiPiZsdDttb2R1bGUgcmVmPSJsb2dnaW5nIi8mZ3Q7PC9mb250PgogICAgJmx0O3BhcmFtZXRlciBuYW1lPSJTZXJ2aWNlQ2xhc3MiIGxvY2tlZD0ieHNkOmZhbHNlIiZndDt1c2VyZ3VpZGUuZXhhbXBsZTIuTXlTZXJ2aWNlJmx0Oy9wYXJhbWV0ZXImZ3Q7CiAgICAmbHQ7b3BlcmF0aW9uIG5hbWU9ImVjaG8iJmd0OwogICAgJmx0O21lc3NhZ2VSZWNlaXZlciBjbGFzcz0ib3JnLmFwYWNoZS5heGlzMi5yZWNlaXZlcnMuUmF3WE1MSU5PdXRNZXNzYWdlUmVjZWl2ZXIiLyZndDsKICAgICZsdDsvb3BlcmF0aW9uJmd0OwogICAgJmx0O29wZXJhdGlvbiBuYW1lPSJwaW5nIiZndDsKICAgICZsdDttZXNzYWdlUmVjZWl2ZXIgY2xhc3M9Im9yZy5hcGFjaGUuYXhpczIucmVjZWl2ZXJzLlJhd1hNTElOT3V0TWVzc2FnZVJlY2VpdmVyIi8mZ3Q7CiAgICAmbHQ7L29wZXJhdGlvbiZndDsKJmx0Oy9zZXJ2aWNlJmd0OzwvcHJlPgoKPHA+SW4gdGhpcyBleGFtcGxlIHdlIGhhdmUgY2hhbmdlZCB0aGUgc2VydmljZSBuYW1lICh0aGUgaW1wbGVtZW50YXRpb24gY2xhc3MKaXMgdmVyeSBzaW1pbGFyIHRvIHdoYXQgd2UgaGF2ZSB1c2VkIGVhcmxpZXIgYWx0aG91Z2ggaXQgaXMgaW4gYSBkaWZmZXJlbnQKcGFja2FnZSkuIEluIGFkZGl0aW9uIHdlIGhhdmUgYWRkZWQgdGhlIGxpbmUgPGI+IiZsdDttb2R1bGUKcmVmPSJsb2dnaW5nIi8mZ3Q7IjwvYj4gdG8gInNlcnZpY2VzLnhtbCIuIFRoaXMgaW5mb3JtcyB0aGUgQXhpczIgZW5naW5lIHRoYXQKdGhlIG1vZHVsZSAibG9nZ2luZyIgc2hvdWxkIGJlIGVuZ2FnZWQgZm9yIHRoaXMgc2VydmljZS4gVGhlIGhhbmRsZXIgaW5zaWRlCnRoZSBtb2R1bGUgd2lsbCBiZSBleGVjdXRlZCBpbiB0aGVpciByZXNwZWN0aXZlIHBoYXNlcyBhcyBkZXNjcmliZWQgYnkgdGhlCiJtb2R1bGUueG1sIi48L3A+Cgo8cD48Yj48YSBuYW1lPSJTdGVwNl86X1BhY2thZ2luZyI+U3RlcDYgOiBQYWNrYWdpbmc8L2E+PC9iPjwvcD4KCjxwPkJlZm9yZSBkZXBsb3lpbmcgdGhlIG1vZHVsZSB3ZSBuZWVkIHRvIGNyZWF0ZSB0aGUgIi5tYXIiIGZpbGUgZm9yIHRoaXMKbW9kdWxlLiBUaGlzIGNhbiBiZSBkb25lLCB1c2luZyB0aGUgImphciIgY29tbWFuZCBhbmQgdGhlbiByZW5hbWluZyB0aGUKY3JlYXRlZCBqYXIgZmlsZS4gT3IgeW91IGNhbiBmaW5kIHRoZSAiTG9nZ2luZy5tYXIiIHRoYXQgaXMgYWxyZWFkeSBjcmVhdGVkCmZvciB5b3UgaW4gdGhlICJBeGlzMkhvbWUvc2FtcGxlcy91c2VyZ3VpZGUiIGRpcmVjdG9yeS48L3A+Cgo8aDQ+PGEgbmFtZT0iU3RlcDdfOl9EZXBsb3lfdGhlX01vZHVsZV9pbl9BeGlzMiI+U3RlcDcgOiBEZXBsb3kgdGhlIE1vZHVsZSBpbgpBeGlzMjwvYT48L2g0PgoKPHA+RGVwbG95aW5nIGEgbW9kdWxlIGluIEF4aXMyIHJlcXVpcmUgdGhlIHVzZXIgdG8gY3JlYXRlIGEgZGlyZWN0b3J5IHdpdGgKdGhlIG5hbWUgIm1vZHVsZXMiIGluIHRoZSAid2ViYXBwcy9heGlzMi9XRUItSU5GIiBkaXJlY3Rvcnkgb2YgdGhlaXIgc2VydmxldApjb250YWluZXIgYW5kIHRoZW4gY29weWluZyB0aGUgIi5tYXIiIGZpbGUgdG8gdGhhdCBkaXJlY3RvcnkuIFNvIGxldCdzIGZpcnN0CmNyZWF0ZSB0aGUgIm1vZHVsZXMiIGRpcmVjdG9yeSBhbmQgZHJvcCB0aGUgIkxvZ2dpbmdNb2R1bGUubWFyIiBpbiB0byB0aGlzCmRpcmVjdG9yeS48L3A+Cgo8cD5BbHRob3VnaCB0aGUgcmVxdWlyZWQgY2hhbmdlcyB0byB0aGUgInNlcnZpY2VzLnhtbCIgaXMgdmVyeSBsaXR0bGUsIHdlCmhhdmUgY3JlYXRlZCBhIHNlcGFyYXRlIHNlcnZpY2UgYXJjaGl2ZSAoTXlTZXJ2aWNlV2l0aE1vZHVsZS5hYXIpIGZvciB1c2Vycwp0byBkZXBsb3kgYW5kIHNlZS4gRGVwbG95IHRoaXMgc2VydmljZSB1c2luZyB0aGUgPGEKaHJlZj0idXNlcmd1aWRlMi5odG1sI1N0ZXA0XzpEZXBsb3lfdGhlX1dlYl9TZXJ2aWNlIj5zYW1lIHN0ZXBzIHRoYXQgeW91IHVzZWQKdG8gZGVwbG95ICJNeVNlcnZpY2UiPC9hPiBhbmQgY29weSB0aGUgIkxvZ2dpbmdNb2R1bGUubWFyIiBmaWxlIHRvIHRoZQoibW9kdWxlcyIgZGlyZWN0b3J5LiBUaGVuIHJ1biB1c2luZyB0aGUgIlRlc3RXZWJTZXJ2aWNlV2l0aE1vZHVsZUNsaWVudC5iYXQiCm9yICJUZXN0V2ViU2VydmljZVdpdGhNb2R1bGVDbGllbnQuc2giIGluIHRoZQoiQXhpczJIb21lL3NhbXBsZXMvdXNlcmd1aWRlL3NyYy91c2VyZ3VpZGUvY2xpZW50cy9iaW4iIGRpcmVjdG9yeS48L3A+Cgo8cD5Ob3RlOiBUbyBzZWUgdGhlIGxvZ3MsIHRoZSB1c2VyIG5lZWRzIHRvIG1vZGlmeSB0aGUgImxvZzRqLnByb3BlcnRpZXMiIHRvCmxvZyBJTkZPLiBUaGUgcHJvcGVydHkgZmlsZSBpcyBsb2NhdGVkIGluICJ3ZWJhcHBzXGF4aXMyXFdFQi1JTkZcY2xhc3NlcyIgb2YKeW91ciBzZXJ2bGV0IGNvbnRhaW5lci4gQ2hhbmdlIHRoZSBsaW5lICJsb2c0ai5yb290Q2F0ZWdvcnk9IEVSUk9SLCBMT0dGSUxFIgp0byAibG9nNGoucm9vdENhdGVnb3J5PUlORk8sIEVSUk9SLCBMT0dGSUxFIi48L3A+Cgo8cCBhbGlnbj0icmlnaHQiPjxhIGhyZWY9InVzZXJndWlkZTMuaHRtbCI+PGltZyBzcmM9ImltYWdlcy9hcnJvd19sZWZ0LmdpZiI+ClByZXZpb3VzPC9hPiB8IDxhIGhyZWY9InVzZXJndWlkZTUuaHRtbCI+TmV4dCA8aW1nCnNyYz0iaW1hZ2VzL2Fycm93X3JpZ2h0LmdpZiI+PC9hPjwvcD4KCjxwPlBhZ2VzOiA8YSBocmVmPSJ1c2VyZ3VpZGUuaHRtbCI+Q29udGVudDwvYT4sIDxhCmhyZWY9InVzZXJndWlkZTEuaHRtbCI+MTwvYT4sIDxhIGhyZWY9InVzZXJndWlkZTIuaHRtbCI+MjwvYT4sPGEKaHJlZj0idXNlcmd1aWRlMy5odG1sIj4gMzwvYT4sIDxiPjQ8L2I+LCA8YSBocmVmPSJ1c2VyZ3VpZGU1Lmh0bWwiPjU8L2E+PC9wPgo8L2JvZHk+CjwvaHRtbD4K