PCEtLSBzYXZlZCBmcm9tIHVybD0oMDAyMilodHRwOi8vaW50ZXJuZXQuZS1tYWlsIC0tPgo8IWRvY3R5cGUgaHRtbCBwdWJsaWMgIi0vL3czYy8vZHRkIGh0bWwgNC4wIHRyYW5zaXRpb25hbC8vZW4iPgoKPGh0bWw+Cgo8aGVhZD4KPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyIj4KPG1ldGEgbmFtZT0iQXV0aG9yIiBjb250ZW50PSJFY2xpcHNlIFByb2plY3QgUE1DIj4KPG1ldGEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJNaWNyb3NvZnQgRnJvbnRQYWdlIDQuMCI+CjxtZXRhIG5hbWU9IlByb2dJZCIgY29udGVudD0iRnJvbnRQYWdlLkVkaXRvci5Eb2N1bWVudCI+Cjx0aXRsZT5FY2xpcHNlIFByb2plY3QgRHJhZnQgMy4xIFBsYW48L3RpdGxlPgo8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2RlZmF1bHRfc3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+CjwvaGVhZD4KCjxib2R5PgoKPGgxPkVjbGlwc2UgUHJvamVjdDxicj4KICBEUkFGVCAzLjEgUGxhbjwvaDE+CjxwPkxhc3QgcmV2aXNlZCAxODowMCBFU1QgRGVjZW1iZXIgMTQsIDIwMDQgKDxpbWcgYm9yZGVyPSIwIiBzcmM9Im5ldy5naWYiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiI+IAogIG1hcmtzIGludGVyZXN0aW5nIGNoYW5nZXMgc2luY2UgdGhlIDxhIGhyZWY9ImVjbGlwc2VfcHJvamVjdF9wbGFuXzNfMV8yMDA0MDcyOS5odG1sIj5pbml0aWFsIAogIGRyYWZ0IG9mIEp1bHkgMjksIDIwMDQ8L2E+KTxicj4KICA8YnI+CiAgPGk+Jm5ic3A7Jm5ic3A7Jm5ic3A7IFBsZWFzZSBzZW5kIGNvbW1lbnRzIGFib3V0IHRoaXMgZHJhZnQgcGxhbiB0byB0aGUgPC9pPjxhIGhyZWY9Im1haWx0bzplY2xpcHNlLWRldkBlY2xpcHNlLm9yZyI+ZWNsaXBzZS1kZXZAZWNsaXBzZS5vcmc8L2E+IAogIDxpPmRldmVsb3BlciBtYWlsaW5nIGxpc3QuPC9pPjwvcD4KPHA+VGhpcyBkb2N1bWVudCBsYXlzIG91dCB0aGUgZmVhdHVyZSBhbmQgQVBJIHNldCBmb3IgdGhlIG5leHQgZmVhdHVyZSByZWxlYXNlCm9mIEVjbGlwc2UgYWZ0ZXIgMy4wLCBkZXNpZ25hdGVkIHJlbGVhc2UgMy4xLgo8dWw+CiAgPGxpPjxhIGhyZWY9IiNEZWxpdmVyYWJsZXMiPlJlbGVhc2UgZGVsaXZlcmFibGVzPC9hPjwvbGk+CiAgPGxpPjxhIGhyZWY9IiNNaWxlc3RvbmVzIj5SZWxlYXNlIG1pbGVzdG9uZXM8L2E+PC9saT4KICA8bGk+PGEgaHJlZj0iI1RhcmdldE9wZXJhdGluZ0Vudmlyb25tZW50cyI+VGFyZ2V0IG9wZXJhdGluZyBlbnZpcm9ubWVudHM8L2E+PC9saT4KICA8bGk+PGEgaHJlZj0iI0NvbXBhdGliaWxpdHkiPkNvbXBhdGliaWxpdHkgd2l0aCBwcmV2aW91cyByZWxlYXNlczwvYT48L2xpPgogIDxsaT48YSBocmVmPSIjUGxhdGZvcm0iPkVjbGlwc2UgUGxhdGZvcm0gcHJvamVjdDwvYT48L2xpPgogIDxsaT48YSBocmVmPSIjSkRUIj5KYXZhIGRldmVsb3BtZW50IHRvb2xzIChKRFQpIHByb2plY3Q8L2E+PC9saT4KICA8bGk+PGEgaHJlZj0iI1BERSI+UGx1Zy1pbiBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCAoUERFKSBwcm9qZWN0PC9hPjwvbGk+CjwvdWw+CjxwPlBsYW5zIGRvIG5vdCBtYXRlcmlhbGl6ZSBvdXQgb2Ygbm93aGVyZSwgbm9yIGFyZSB0aGV5IGVudGlyZWx5IHN0YXRpYy4gVG8KZW5zdXJlIHRoZSBwbGFubmluZyBwcm9jZXNzIGlzIHRyYW5zcGFyZW50IGFuZCBvcGVuIHRvIHRoZSBlbnRpcmUgRWNsaXBzZQpjb21tdW5pdHksIHdlICh0aGUgRWNsaXBzZSBQTUMpIHBvc3QgcGxhbnMgaW4gYW4gZW1icnlvbmljIGZvcm0gYW5kIHJldmlzZSB0aGVtCnRocm91Z2hvdXQgdGhlIHJlbGVhc2UgY3ljbGUuCjxwPlRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBwbGFuIGRlYWxzIHdpdGggdGhlIGltcG9ydGFudCBtYXR0ZXJzIG9mIHJlbGVhc2UKZGVsaXZlcmFibGVzLCByZWxlYXNlIG1pbGVzdG9uZXMsIHRhcmdldCBvcGVyYXRpbmcgZW52aXJvbm1lbnRzLCBhbmQKcmVsZWFzZS10by1yZWxlYXNlIGNvbXBhdGliaWxpdHkuIFRoZXNlIGFyZSBhbGwgdGhpbmdzIHRoYXQgbmVlZCB0byBiZSBjbGVhciBmb3IKYW55IHJlbGVhc2UsIGV2ZW4gaWYgbm8gZmVhdHVyZXMgd2VyZSB0byBjaGFuZ2UuJm5ic3A7CjxwPlRoZSByZW1haW5kZXIgb2YgdGhlIHBsYW4gY29uc2lzdHMgb2YgcGxhbiBpdGVtcyBmb3IgdGhlIHRocmVlIHByb2plY3RzIHVuZGVyCnRoZSBFY2xpcHNlIHRvcC1sZXZlbCBwcm9qZWN0LiBFYWNoIHBsYW4gaXRlbSBjb3ZlcnMgYSBmZWF0dXJlIG9yIEFQSSB0aGF0IGlzIHRvIGJlIGFkZGVkIHRvCkVjbGlwc2UsIG9yIHNvbWUgYXNwZWN0IG9mIEVjbGlwc2UgdGhhdCBpcyB0byBiZSBpbXByb3ZlZC4gRWFjaCBwbGFuIGl0ZW0gaGFzCml0cyBvd24gZW50cnkgaW4gdGhlIEVjbGlwc2UgYnVnemlsbGEgZGF0YWJhc2UsIHdpdGggYSB0aXRsZSBhbmQgYSBjb25jaXNlCnN1bW1hcnkgKHVzdWFsbHkgYSBzaW5nbGUgcGFyYWdyYXBoKSB0aGF0IGV4cGxhaW5zIHRoZSB3b3JrIGl0ZW0gYXQgYSBzdWl0YWJseQpoaWdoIGVub3VnaCBsZXZlbCBzbyB0aGF0IGV2ZXJ5b25lIGNhbiByZWFkaWx5IHVuZGVyc3RhbmQgd2hhdCB0aGUgd29yayBpdGVtIGlzCndpdGhvdXQgaGF2aW5nIHRvIHVuZGVyc3RhbmQgdGhlIG5pdHR5LWdyaXR0eSBkZXRhaWwuCjxwPk5vdCBhbGwgcGxhbiBpdGVtcyByZXByZXNlbnQgdGhlIHNhbWUgYW1vdW50IG9mIHdvcms7IHNvbWUgbWF5IGJlIHF1aXRlCmxhcmdlLCBvdGhlcnMsIHF1aXRlIHNtYWxsLiBTb21lIHBsYW4gaXRlbXMgbWF5IGludm9sdmUgd29yayB0aGF0IGlzIGxvY2FsaXplZAp0byBhIHNpbmdsZSBQbGF0Zm9ybSBjb21wb25lbnQ7IG90aGVycyBtYXkgaW52b2x2ZSBjb29yZGluYXRlZCBjaGFuZ2VzIHRvCnNldmVyYWwgY29tcG9uZW50czsgb3RoZXIgbWF5IHBlcnZhZGUgdGhlIGVudGlyZSBQbGF0Zm9ybS4gQWx0aG91Z2ggc29tZSBwbGFuCml0ZW1zIGFyZSBmb3Igd29yayB0aGF0IGlzIG1vcmUgcHJlc3NpbmcgdGhhdCBvdGhlcnMsIHRoZSBwbGFuIGl0ZW1zIGFwcGVhciBpbgpubyBwYXJ0aWN1bGFyIG9yZGVyLgo8cD5XaXRoIHRoZSBwcmV2aW91cyByZWxlYXNlIGFzIHRoZSBzdGFydGluZyBwb2ludCwgdGhpcyBpcyB0aGUgcGxhbiBmb3IgaG93IHdlCndpbGwgZW5oYW5jZSBhbmQgaW1wcm92ZSBpdC4gRml4aW5nIGJ1Z3MsIGltcHJvdmluZyB0ZXN0IGNvdmVyYWdlLApkb2N1bWVudGF0aW9uLCBleGFtcGxlcywgcGVyZm9ybWFuY2UgdHVuaW5nLCB1c2FiaWxpdHksIGV0Yy4gYXJlIGNvbnNpZGVyZWQgcm91dGluZQpvbmdvaW5nIG1haW50ZW5hbmNlIGFjdGl2aXRpZXMgYW5kIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhpcyBwbGFuIHVubGVzcyB0aGV5CndvdWxkIGFsc28gaW52b2x2ZSBhIHNpZ25pZmljYW50IGNoYW5nZSB0byB0aGUgQVBJIG9yIGZlYXR1cmUgc2V0LCBvciBpbnZvbHZlIGEKc2lnbmlmaWNhbnQgYW1vdW50IG9mIHdvcmsuIFRoZSBpbnRlbnQgb2YgdGhlIHBsYW4gaXMgdG8gYWNjb3VudCBmb3IgYWxsIGludGVyZXN0aW5nIGZlYXR1cmUgd29yay4KPHA+VGhlIGN1cnJlbnQgc3RhdHVzIG9mIGVhY2ggcGxhbiBpdGVtIGlzIG5vdGVkOgo8dWw+CiAgPGxpPjxiPkNvbW1pdHRlZDwvYj4gcGxhbiBpdGVtIC0gQSBjb21taXR0ZWQgcGxhbiBpdGVtIGlzIG9uZSB0aGF0IHdlIGhhdmUKICAgIGRlY2lkZWQgdG8gYWRkcmVzcyBmb3IgdGhlIHJlbGVhc2UuPC9saT4KICA8bGk+PGI+UHJvcG9zZWQ8L2I+IHBsYW4gaXRlbSAtIEEgcHJvcG9zZWQgcGxhbiBpdGVtIGlzIG9uZSB0aGF0IHdlIGFyZQogICAgY29uc2lkZXJpbmcgYWRkcmVzc2luZyBmb3IgdGhlIHJlbGVhc2UuIEFsdGhvdWdoIHdlIGFyZSBhY3RpdmVseQogICAgaW52ZXN0aWdhdGluZyBpdCwgd2UgYXJlIG5vdCB5ZXQgaW4gYSBwb3NpdGlvbiB0byBjb21taXQgdG8gaXQsIG9yIHRvIHNheQogICAgdGhhdCB3ZSB3b24ndCBiZSBhYmxlIHRvIGFkZHJlc3MgaXQuIEFmdGVyIGR1ZSBjb25zaWRlcmF0aW9uLCBhIHByb3Bvc2FsCiAgICB3aWxsIGVpdGhlciBiZSBjb21taXR0ZWQgb3IgZGVmZXJyZWQuPC9saT4KICA8bGk+PGI+RGVmZXJyZWQ8L2I+IHBsYW4gaXRlbSAtIEEgcmVhc29uYWJsZSBwcm9wb3NhbCB0aGF0IHdpbGwgbm90IG1ha2UgaXQgaW4KICAgIHRvIHRoaXMgcmVsZWFzZSBmb3Igc29tZSByZWFzb24gaXMgbWFya2VkIGFzIGRlZmVycmVkIHdpdGggYSBicmllZiBub3RlIGFzCiAgICB0byB3aHkgaXQgd2FzIGRlZmVycmVkLiBEZWZlcnJlZCBwbGFuIGl0ZW1zIG1heSByZXN1cmZhY2UgYXMgY29tbWl0dGVkIHBsYW4KICAgIGl0ZW1zIGF0IGEgbGF0ZXIgcG9pbnQuPC9saT4KPC91bD4KPGgyPjxhIG5hbWU9IkRlbGl2ZXJhYmxlcyI+PC9hPlJlbGVhc2UgZGVsaXZlcmFibGVzPC9oMj4KPHA+VGhlIHJlbGVhc2UgZGVsaXZlcmFibGVzIGhhdmUgdGhlIHNhbWUgZm9ybSBhcyBwcmV2aW91cyByZWxlYXNlcywgbmFtZWx5Ogo8dWw+CiAgPGxpPlNvdXJjZSBjb2RlIHJlbGVhc2UgZm9yIEVjbGlwc2UgUHJvamVjdCwgYXZhaWxhYmxlIGFzIHZlcnNpb25zIHRhZ2dlZAogICAgJnF1b3Q7UjNfMSZxdW90OyBpbiB0aGUgRWNsaXBzZSBQcm9qZWN0IDxhIGhyZWY9Imh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvdmlld2N2cy8iPkNWUwogICAgcmVwb3NpdG9yeTwvYT4uPC9saT4KICA8bGk+RWNsaXBzZSBQcm9qZWN0IFNESyAoaW5jbHVkZXMgcnVudGltZSBiaW5hcnkgYW5kIFNESyBmb3IgUGxhdGZvcm0sIEpEVCwKICAgIGFuZCBQREUpIChkb3dubG9hZGFibGUpLjwvbGk+CiAgPGxpPkVjbGlwc2UgUGxhdGZvcm0gcnVudGltZSBiaW5hcnkgYW5kIFNESyBkaXN0cmlidXRpb25zIChkb3dubG9hZGFibGUpLjwvbGk+CiAgPGxpPkVjbGlwc2UgUkNQIHJ1bnRpbWUgYmluYXJ5IGFuZCBTREsgZGlzdHJpYnV0aW9ucyAoZG93bmxvYWRhYmxlKS48L2xpPgogIDxsaT5KRFQgcnVudGltZSBiaW5hcnkgYW5kIFNESyBkaXN0cmlidXRpb25zIChkb3dubG9hZGFibGUpLjwvbGk+CiAgPGxpPlBERSBydW50aW1lIGJpbmFyeSBhbmQgU0RLIGRpc3RyaWJ1dGlvbnMgKGRvd25sb2FkYWJsZSkuPC9saT4KICA8bGk+RWNsaXBzZSBTREsgRXhhbXBsZXMgKGRvd25sb2FkYWJsZSkuPC9saT4KICA8bGk+U1dUIGRpc3RyaWJ1dGlvbiAoZG93bmxvYWRhYmxlKS48L2xpPgo8L3VsPgo8aDI+PGEgbmFtZT0iTWlsZXN0b25lcyI+PC9hPlJlbGVhc2UgbWlsZXN0b25lczwvaDI+CjxwPlJlbGVhc2UgbWlsZXN0b25lIG9jY3VycmluZyBhdCByb3VnaGx5IDYgd2VlayBpbnRlcnZhbHMgZXhpc3QgdG8gZmFjaWxpdGF0ZQpjb2Fyc2UtZ3JhaW5lZCBwbGFubmluZyBhbmQgc3RhZ2luZy4gVGhlIG1pbGVzdG9uZXMgYXJlOjwvcD4KPHVsPgogIDxsaT5GcmlkYXkgQXVnLiAxMywgMjAwNCAtIE1pbGVzdG9uZSAxICgzLjEgTTEpIC0gc3RhYmxlIGJ1aWxkPC9saT4KICA8bGk+RnJpZGF5IFNlcC4gMjQsIDIwMDQgLSBNaWxlc3RvbmUgMiAoMy4xIE0yKSAtIHN0YWJsZSBidWlsZDwvbGk+CiAgPGxpPkZyaWRheSBOb3YuIDUsIDIwMDQgLSBNaWxlc3RvbmUgMyAoMy4xIE0zKSAtIHN0YWJsZSBidWlsZDwvbGk+CiAgPGxpPkZyaWRheSBEZWMuIDE3LCAyMDA0IC0gTWlsZXN0b25lIDQgKDMuMSBNNCkgLSBzdGFibGUgYnVpbGQ8L2xpPgogIDxsaT5GcmlkYXkgRmViLiAxOCwgMjAwNSZuYnNwOyAtIE1pbGVzdG9uZSA1ICgzLjEgTTUpIC0gc3RhYmxlIGJ1aWxkPC9saT4KICA8bGk+RnJpZGF5IEFwci4gMSwgMjAwNSAtIE1pbGVzdG9uZSA2ICgzLjEgTTYpIC0gc3RhYmxlIGJ1aWxkIC0gPGltZyBib3JkZXI9IjAiIHNyYz0ibmV3LmdpZiIgd2lkdGg9IjEyIiBoZWlnaHQ9IjEyIj4gCiAgICBBUEkgY29tcGxldGUgLSBBUEkgZnJlZXplPC9saT4KICA8bGk+PGltZyBib3JkZXI9IjAiIHNyYz0ibmV3LmdpZiIgd2lkdGg9IjEyIiBoZWlnaHQ9IjEyIj4gRnJpZGF5IE1heSAxMywgMjAwNSAKICAgIC0gTWlsZXN0b25lIDcgKDMuMSBNNykgLSBzdGFibGUgYnVpbGQgLSBmZWF0dXJlIGNvbXBsZXRlIC0gZGV2ZWxvcG1lbnQgZnJlZXplIAogICAgLSBsb2NrIGRvd24gYW5kIHRlc3RpbmcgYmVnaW5zPC9saT4KPC91bD4KPHA+VGhlIDMuMSByZWxlYXNlIGlzIHRhcmdldGVkIGZvciBsYXRlIEp1bmUgMjAwNS4gQWxsIHJlbGVhc2UgZGVsaXZlcmFibGVzIHdpbGwgCiAgYmUgYXZhaWxhYmxlIGZvciBkb3dubG9hZCBhcyBzb29uIGFzIHRoZSByZWxlYXNlIGhhcyBiZWVuIHRlc3RlZCBhbmQgdmFsaWRhdGVkIAogIGluIHRoZSB0YXJnZXQgb3BlcmF0aW5nIGNvbmZpZ3VyYXRpb25zIGxpc3RlZCBiZWxvdy48L3A+CjxoMj48YSBuYW1lPSJUYXJnZXRPcGVyYXRpbmdFbnZpcm9ubWVudHMiPjwvYT5UYXJnZXQgT3BlcmF0aW5nIEVudmlyb25tZW50czwvaDI+CjxwPkluIG9yZGVyIHRvIHJlbWFpbiBjdXJyZW50LCBlYWNoIEVjbGlwc2UgcmVsZWFzZSB0YXJnZXRzIHJlYXNvbmFibHkgY3VycmVudAp2ZXJzaW9ucyBvZiB0aGUgdW5kZXJseWluZyBvcGVyYXRpbmcgZW52aXJvbm1lbnRzLjwvcD4KPHA+TW9zdCBvZiB0aGUgRWNsaXBzZSBTREsgaXMgJnF1b3Q7cHVyZSZxdW90OyBKYXZhmSBjb2RlIGFuZCBoYXMgbm8gZGlyZWN0CmRlcGVuZGVuY2Ugb24gdGhlIHVuZGVybHlpbmcgb3BlcmF0aW5nIHN5c3RlbS4gVGhlIGNoaWVmIGRlcGVuZGVuY2UgaXMgdGhlcmVmb3JlCm9uIHRoZSBKYXZhIDIgUGxhdGZvcm0gaXRzZWxmLiBUaGUgMy4xIHJlbGVhc2Ugb2YgdGhlIEVjbGlwc2UgUHJvamVjdCBpcyB3cml0dGVuCmFuZCBjb21waWxlZCBhZ2FpbnN0IHZlcnNpb24gMS40IG9mIHRoZSBKYXZhIDIgUGxhdGZvcm0gQVBJcywgYW5kIHRhcmdldGVkIHRvCnJ1biBvbiB2ZXJzaW9uIDEuNCBvZiB0aGUgSmF2YSAyIFJ1bnRpbWUgRW52aXJvbm1lbnQsIFN0YW5kYXJkIEVkaXRpb24uPC9wPgo8cD5UaGVyZSBhcmUgbWFueSBkaWZmZXJlbnQgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBKYXZhIDIgUGxhdGZvcm0gcnVubmluZyBhdG9wCmEgdmFyaWV0eSBvZiBvcGVyYXRpbmcgc3lzdGVtcy4gV2UgZm9jdXMgRWNsaXBzZSB0ZXN0aW5nIG9uIGEgaGFuZGZ1bCBvZiBwb3B1bGFyCjxzcGFuIGNsYXNzPSJoZWFkZXIiPmNvbWJpbmF0aW9ucyBvZiBvcGVyYXRpbmcgc3lzdGVtIGFuZCBKYXZhIDIgUGxhdGZvcm07IHRoZXNlCmFyZSBvdXIgPGVtPnJlZmVyZW5jZSBwbGF0Zm9ybXM8L2VtPi4gRWNsaXBzZSB1bmRvdWJ0ZWRseSBydW5zIGZpbmUgaW4gbWFueQpvcGVyYXRpbmcgZW52aXJvbm1lbnRzIGJleW9uZCB0aGUgcmVmZXJlbmNlIHBsYXRmb3JtcyB3ZSB0ZXN0LiBIb3dldmVyLCBzaW5jZSB3ZQpkbyBub3Qgc3lzdGVtYXRpY2FsbHkgdGVzdCB0aGVtIHdlIGNhbm5vdCB2b3VjaCBmb3IgdGhlbS4gUHJvYmxlbXMgZW5jb3VudGVyZWQKd2hlbiBydW5uaW5nIEVjbGlwc2Ugb24gbm9uLXJlZmVyZW5jZSBwbGF0Zm9ybSB0aGF0IGNhbm5vdCBiZSByZWNyZWF0ZWQgb24gYW55CnJlZmVyZW5jZSBwbGF0Zm9ybSB3aWxsIGJlIGdpdmVuIGxvd2VyIHByaW9yaXR5IHRoYW4gcHJvYmxlbXMgd2l0aCBydW5uaW5nCkVjbGlwc2Ugb24gYSByZWZlcmVuY2UgcGxhdGZvcm0uPC9zcGFuPjwvcD4KPHA+RWNsaXBzZSBTREsgMy4xIGlzIHRlc3RlZCBhbmQgdmFsaWRhdGVkIG9uIHRoZSBmb2xsb3dpbmcgcmVmZXJlbmNlIHBsYXRmb3JtcyAKICAodGhpcyBsaXN0IGlzIHVwZGF0ZWQgb3ZlciB0aGUgY291cnNlIG9mIHRoZSByZWxlYXNlIGN5Y2xlKTo8L3A+Cjx0YWJsZSB3aWR0aD0iODIxIiBib3JkZXI9IjEiPgogIDx0ciBiZ2NvbG9yPSIjQ0NDQ0NDIj4KICAgIDx0aCBjb2xzcGFuPSI0Ij4KICAgICAgPGRpdiBhbGlnbj0iY2VudGVyIj4KICAgICAgICA8Yj48Zm9udCBzaXplPSIrMSI+RWNsaXBzZSBSZWZlcmVuY2UgUGxhdGZvcm1zPC9mb250PjwvYj4KICAgICAgPC9kaXY+CiAgICA8L3RoPgogIDwvdHI+CiAgPHRyPgogICAgPHRkIHdpZHRoPSIyMDUiPjxiPk9wZXJhdGluZyBzeXN0ZW08L2I+PC90ZD4KICAgIDx0ZCB3aWR0aD0iNzYiPjxiPlByb2Nlc3NvciBhcmNoaXRlY3R1cmU8L2I+PC90ZD4KICAgIDx0ZCB3aWR0aD0iNTkiPjxiPldpbmRvdyBzeXN0ZW08L2I+PC90ZD4KICAgIDx0ZCB3aWR0aD0iNDUzIj48Yj5KYXZhIDIgUGxhdGZvcm08L2I+PC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZCB3aWR0aD0iMjA1Ij5NaWNyb3NvZnQgV2luZG93cyBYUDwvdGQ+CiAgICA8dGQgd2lkdGg9Ijc2Ij5JbnRlbCB4ODY8L3RkPgogICAgPHRkIHdpZHRoPSI1OSI+V2luMzI8L3RkPgogICAgPHRkIHdpZHRoPSI0NTMiPjxpbWcgYm9yZGVyPSIwIiBzcmM9Im5ldy5naWYiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiI+IFN1biAKICAgICAgSmF2YSAyIFN0YW5kYXJkIEVkaXRpb24sIHZlcnNpb24gMS40LjJfMDYgZm9yIE1pY3Jvc29mdCBXaW5kb3dzPC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZCB3aWR0aD0iMjA1Ij5NaWNyb3NvZnQgV2luZG93cyBYUDwvdGQ+CiAgICA8dGQgd2lkdGg9Ijc2Ij5JbnRlbCB4ODY8L3RkPgogICAgPHRkIHdpZHRoPSI1OSI+V2luMzI8L3RkPgogICAgPHRkIHdpZHRoPSI0NTMiPiA8cD48aW1nIGJvcmRlcj0iMCIgc3JjPSJuZXcuZ2lmIiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiPiAKICAgICAgICBJQk0gMzItYml0IFNESyBmb3IgV2luZG93cywgSmF2YSAyIFRlY2hub2xvZ3kgRWRpdGlvbiwgVmVyc2lvbiAxLjQuMl8wMTwvcD4KICAgIDwvdGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQgd2lkdGg9IjIwNSI+TWljcm9zb2Z0IFdpbmRvd3MgWFA8L3RkPgogICAgPHRkIHdpZHRoPSI3NiI+SW50ZWwgeDg2PC90ZD4KICAgIDx0ZCB3aWR0aD0iNTkiPldpbjMyPC90ZD4KICAgIDx0ZCB3aWR0aD0iNDUzIj5TdW4gSmF2YSAyIFN0YW5kYXJkIEVkaXRpb24gNS4wIGZvciBNaWNyb3NvZnQgV2luZG93czwvdGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQgd2lkdGg9IjIwNSI+UmVkIEhhdCBFbnRlcnByaXNlIExpbnV4IFdTIDM8L3RkPgogICAgPHRkIHdpZHRoPSI3NiI+SW50ZWwgeDg2PC90ZD4KICAgIDx0ZCB3aWR0aD0iNTkiPkdUSzwvdGQ+CiAgICA8dGQgd2lkdGg9IjQ1MyI+PGltZyBib3JkZXI9IjAiIHNyYz0ibmV3LmdpZiIgd2lkdGg9IjEyIiBoZWlnaHQ9IjEyIj4gU3VuIAogICAgICBKYXZhIDIgU3RhbmRhcmQgRWRpdGlvbiwgMS40LjJfMDYgZm9yIExpbnV4IHg4NjwvdGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQgd2lkdGg9IjIwNSI+UmVkIEhhdCBFbnRlcnByaXNlIExpbnV4IFdTIDM8L3RkPgogICAgPHRkIHdpZHRoPSI3NiI+SW50ZWwgeDg2PC90ZD4KICAgIDx0ZCB3aWR0aD0iNTkiPkdUSzwvdGQ+CiAgICA8dGQgd2lkdGg9IjQ1MyI+PGltZyBib3JkZXI9IjAiIHNyYz0ibmV3LmdpZiIgd2lkdGg9IjEyIiBoZWlnaHQ9IjEyIj4gSUJNIAogICAgICAzMi1iaXQgU0RLIGZvciBMaW51eCBvbiBJbnRlbCBhcmNoaXRlY3R1cmUsIEphdmEgMiBUZWNobm9sb2d5IEVkaXRpb24sIFZlcnNpb24gCiAgICAgIDEuNC4yXzAxPC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZCB3aWR0aD0iMjA1Ij48aW1nIGJvcmRlcj0iMCIgc3JjPSJuZXcuZ2lmIiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiPiBTTEVTIAogICAgICA5PC90ZD4KICAgIDx0ZCB3aWR0aD0iNzYiPkludGVsIHg4NjwvdGQ+CiAgICA8dGQgd2lkdGg9IjU5Ij5HVEs8L3RkPgogICAgPHRkIHdpZHRoPSI0NTMiPjxpbWcgYm9yZGVyPSIwIiBzcmM9Im5ldy5naWYiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiI+IFN1biAKICAgICAgSmF2YSAyIFN0YW5kYXJkIEVkaXRpb24sIHZlcnNpb24gMS40LjJfMDYgZm9yIExpbnV4IHg4NjwvdGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQgd2lkdGg9IjIwNSI+PGltZyBib3JkZXI9IjAiIHNyYz0ibmV3LmdpZiIgd2lkdGg9IjEyIiBoZWlnaHQ9IjEyIj4gU0xFUyAKICAgICAgOTwvdGQ+CiAgICA8dGQgd2lkdGg9Ijc2Ij5JbnRlbCB4ODY8L3RkPgogICAgPHRkIHdpZHRoPSI1OSI+R1RLPC90ZD4KICAgIDx0ZCB3aWR0aD0iNDUzIj48aW1nIGJvcmRlcj0iMCIgc3JjPSJuZXcuZ2lmIiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiPiBJQk0gCiAgICAgIDMyLWJpdCBTREsgZm9yIExpbnV4IG9uIEludGVsIGFyY2hpdGVjdHVyZSwgSmF2YSAyIFRlY2hub2xvZ3kgRWRpdGlvbiwgVmVyc2lvbiAKICAgICAgMS40LjJfMDE8L3RkPgogIDwvdHI+CiAgPHRyPgogICAgPHRkIHdpZHRoPSIyMDUiPlN1biBTb2xhcmlzIDg8L3RkPgogICAgPHRkIHdpZHRoPSI3NiI+U1BBUkM8L3RkPgogICAgPHRkIHdpZHRoPSI1OSI+TW90aWY8L3RkPgogICAgPHRkIHdpZHRoPSI0NTMiPjxpbWcgYm9yZGVyPSIwIiBzcmM9Im5ldy5naWYiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiI+IFN1biAKICAgICAgSmF2YSAyIFNESywgU3RhbmRhcmQgRWRpdGlvbiwgMS40LjJfMDYgZm9yIFNvbGFyaXMgU1BBUkM8L3RkPgogIDwvdHI+CiAgPHRyPgogICAgPHRkIHdpZHRoPSIyMDUiPkhQIEhQLVVYIDExaTwvdGQ+CiAgICA8dGQgd2lkdGg9Ijc2Ij5ocDkwMDA8YnI+CiAgICAgIFBBLVJJU0M8L3RkPgogICAgPHRkIHdpZHRoPSI1OSI+TW90aWY8L3RkPgogICAgPHRkIHdpZHRoPSI0NTMiPjxzcGFuIGNsYXNzPSJoZWFkZXIiPjxpbWcgYm9yZGVyPSIwIiBzcmM9Im5ldy5naWYiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiI+IAogICAgICBIUC1VWCBTREsgZm9yIHRoZSBKYXZhIDIgcGxhdGZvcm0sIHZlcnNpb24gMS40LjIuMDYgZm9yIGhwOTAwMCBQQS1SSVNDPC9zcGFuPjwvdGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQgd2lkdGg9IjIwNSIgaGVpZ2h0PSIyMSI+SUJNIEFJWCA1TCBWZXJzaW9uIDUuMjwvdGQ+CiAgICA8dGQgd2lkdGg9Ijc2Ij5Qb3dlclBDPC90ZD4KICAgIDx0ZCB3aWR0aD0iNTkiPk1vdGlmPC90ZD4KICAgIDx0ZCB3aWR0aD0iNDUzIj4gPHA+PGltZyBib3JkZXI9IjAiIHNyYz0ibmV3LmdpZiIgd2lkdGg9IjEyIiBoZWlnaHQ9IjEyIj4gCiAgICAgICAgSUJNIDMyLWJpdCBTREsgZm9yIEFJWCwgSmF2YSAyIFRlY2hub2xvZ3kgRWRpdGlvbiwgVmVyc2lvbiAxLjQuMjwvcD4KICAgIDwvdGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQgd2lkdGg9IjIwNSI+QXBwbGUgTWFjIE9TIFggMTAuMzwvdGQ+CiAgICA8dGQgd2lkdGg9Ijc2Ij5Qb3dlclBDPC90ZD4KICAgIDx0ZCB3aWR0aD0iNTkiPkNhcmJvbjwvdGQ+CiAgICA8dGQgd2lkdGg9IjQ1MyI+SmF2YSAyIFN0YW5kYXJkIEVkaXRpb24KICAgICAgMS40LjIgZm9yIE1hYyBPUyBYPC90ZD4KICA8L3RyPgo8L3RhYmxlPgo8cD5BbHRob3VnaCB1bnRlc3RlZCwgRWNsaXBzZSBzaG91bGQgd29yayBmaW5lIG9uIG90aGVyIE9TZXMgdGhhdCBzdXBwb3J0IHRoZQpzYW1lIHdpbmRvdyBzeXN0ZW0uIEZvciBXaW4zMjogV2luZG93cyA5OCwgTUUsIE5ULCAyMDAwLCBhbmQgU2VydmVyIDIwMDM7IFNXVApIVE1MIHZpZXdlciByZXF1aXJlcyBJbnRlcm5ldCBFeHBsb3JlciA1IChvciBoaWdoZXIpLiBGb3IgR1RLIG9uIG90aGVyIExpbnV4CnN5c3RlbXM6IHZlcnNpb24gMi4yLjEgb2YgdGhlIEdUSysgd2lkZ2V0IHRvb2xraXQgYW5kIGFzc29jaWF0ZWQgbGlicmFyZXMgKEdMaWIsClBhbmdvKTsgU1dUIEhUTUwgdmlld2VyIHJlcXVpcmVzIE1vemlsbGEgMS40R1RLMi4gRm9yIE1vdGlmIG9uIG90aGVyIExpbnV4CnN5c3RlbXM6IE9wZW4gTW90aWYgMi4xIChpbmNsdWRlZCk7IFNXVCBIVE1MIHZpZXdlciByZXF1aXJlcyBNb3ppbGxhIDEuNEdUSzIuPC9wPgo8cD5BbiBlYXJseSBhY2Nlc3MgdmVyc2lvbiBvZiBFY2xpcHNlIGlzIGFsc28gYXZhaWxhYmxlIGZvciA2NC1iaXQgTGludXggR1RLLgpUZXN0aW5nIGhhcyBiZWVuIGxpbWl0ZWQgdG8gZWFybHkgYWNjZXNzIDY0LWJpdCBKMlNFcyBydW5uaW5nIG9uIEFNRDY0CnByb2Nlc3NvcnMuPC9wPgo8cD5TV1QgaXMgYWxzbyBzdXBwb3J0ZWQgb24gdGhlIFFOWCBOZXV0cmlubyBvcGVyYXRpbmcgc3lzdGVtLCB4ODYgcHJvY2Vzc29yLApQaG90b24gd2luZG93IHN5c3RlbSwgYW5kIElCTSBKOSBWTSB2ZXJzaW9uIDIuMC4gRWNsaXBzZSAzLjEgb24gV2luZG93cyBvciBMaW51eApjYW4gYmUgdXNlZCBjcm9zcyBkZXZlbG9wIFFOWCBhcHBsaWNhdGlvbnMuIChFY2xpcHNlIDMuMSBpcyB1bmF2YWlsYWJsZSBvbiBRTlgKYmVjYXVzZSB0aGVyZSBpcyBjdXJyZW50bHkgbm8gMS40IEoyU0UgZm9yIFFOWC4pPC9wPgo8aDQ+SW50ZXJuYXRpb25hbGl6YXRpb248L2g0Pgo8cD5UaGUgRWNsaXBzZSBQbGF0Zm9ybSBpcyBkZXNpZ25lZCBhcyB0aGUgYmFzaXMgZm9yIGludGVybmF0aW9uYWxpemVkIHByb2R1Y3RzLgpUaGUgdXNlciBpbnRlcmZhY2UgZWxlbWVudHMgcHJvdmlkZWQgYnkgdGhlIEVjbGlwc2UgU0RLIGNvbXBvbmVudHMsIGluY2x1ZGluZwpkaWFsb2dzIGFuZCBlcnJvciBtZXNzYWdlcywgYXJlIGV4dGVybmFsaXplZC4gVGhlIEVuZ2xpc2ggc3RyaW5ncyBhcmUgcHJvdmlkZWQKYXMgdGhlIGRlZmF1bHQgcmVzb3VyY2UgYnVuZGxlcy48L3A+CjxwPkxhdGluLTEgbG9jYWxlcyBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBFY2xpcHNlIFNESyBvbiBhbGwgb2YgdGhlIGFib3ZlCm9wZXJhdGluZyBlbnZpcm9ubWVudHM7IERCQ1MgbG9jYWxlcyBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBFY2xpcHNlIFNESyBvbiB0aGUKV2luZG93cywgR1RLLCBhbmQgTW90aWYgd2luZG93IHN5c3RlbXM7IEJJREkgbG9jYWxlcyBhcmUgc3VwcG9ydGVkIGJ5IHRoZQpFY2xpcHNlIFNESyBvbmx5IG9uIFdpbmRvd3Mgb3BlcmF0aW5nIGVudmlyb25tZW50cy4KPHA+VGhlIEVjbGlwc2UgU0RLIHN1cHBvcnRzIEdCIDE4MDMwLCB0aGUgbmV3IENoaW5lc2UgY29kZSBwYWdlIHN0YW5kYXJkLCBvbgpXaW5kb3dzIFhQIGFuZCAyMDAwLCBhbmQgTGludXguCjxwPkdlcm1hbiBhbmQgSmFwYW5lc2UgbG9jYWxlcyBhcmUgdGVzdGVkLjwvcD4KPGg0PkJJREkgc3VwcG9ydDwvaDQ+CjxwPlNXVCBmdWxseSBzdXBwb3J0cyBCSURJIG9uIFdpbmRvd3MgKG9ubHkpLiBPbiBMaW51eCBHVEssIFNXVCBzdXBwb3J0cyBlbnRlcmluZyAKICBhbmQgZGlzcGxheWluZyBCSURJIHRleHQuIDxpbWcgYm9yZGVyPSIwIiBzcmM9Im5ldy5naWYiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiI+IAogIFRoZSB3aWRnZXQgb3JpZW50YXRpb24gb2YgSkZhY2Ugd2luZG93cyBkZWZhdWx0cyBhcHByb3ByaWF0ZWx5IGluIEJJREkgbG9jYWxlcyAKICBvbiBXaW5kb3dzIChvbmx5KS48L3A+CjxwPlRoZSBFY2xpcHNlIFNESyBpcyBhIGRldmVsb3BtZW50IGVudmlyb25tZW50IHRhcmdldGVkIGF0IHRlY2huaWNhbCBwcm9mZXNzaW9uYWxzIAogIC0gbm90IGFuIGVuZCB1c2VyIGFwcGxpY2F0aW9uLiBIb3dldmVyLCB0aGUgRWNsaXBzZSBTREsgdG9vbHMgd2lsbCBwZXJtaXQgdGVjaG5pY2FsIAogIHByb2Zlc3Npb25hbHMgd2hvIGFyZSB3b3JraW5nIGluIEVuZ2xpc2ggdG8gYnVpbGQgSGVicmV3L0FyYWJpYyBlbmQgdXNlciBKYXZhIAogIHByb2dyYW1zIHdoaWNoIGFyZSB0aGVtc2VsdmVzIG5vdCBiYXNlZCBvbiB0aGUgRWNsaXBzZSBTREsuIFRoZSBCSURJIHN1cHBvcnQgCiAgaW4gdGhlIEVjbGlwc2UgU0RLIGFsbG93cyBhIEphdmEgcHJvZ3JhbW1lciB0byB3b3JrIHdpdGggQklESSBzdHJpbmdzLCBjb2RlIAogIGNvbW1lbnRzLCBldGMuIGJ1dCB0aGUgRWNsaXBzZSBTREsgaXRzZWxmIGlzIG5vdCBkZXNpZ25lZCB0byBiZSBsb2NhbGl6ZWQgZm9yIAogIEJJREkgbG9jYWxlcyBhbmQgaXRzIHdpZGdldCBvcmllbnRhdGlvbiBjYW4gbm90IGJlIGNoYW5nZWQuPC9wPgo8aDI+PGEgbmFtZT0iQ29tcGF0aWJpbGl0eSI+PC9hPkNvbXBhdGliaWxpdHkgd2l0aCBQcmV2aW91cyBSZWxlYXNlczwvaDI+CjxoMz5Db21wYXRpYmlsaXR5IG9mIFJlbGVhc2UgMy4xIHdpdGggMy4wPC9oMz4KPHA+RWNsaXBzZSAzLjEgd2lsbCBiZSBjb21wYXRpYmxlIHdpdGggRWNsaXBzZSAzLjAuPC9wPgo8cD48Yj5BUEkgQ29udHJhY3QgQ29tcGF0aWJpbGl0eTo8L2I+IEVjbGlwc2UgU0RLIDMuMSB3aWxsIGJlIHVwd2FyZHMKY29udHJhY3QtY29tcGF0aWJsZSB3aXRoIEVjbGlwc2UgU0RLIDMuMCBleGNlcHQgaW4gdGhvc2UgYXJlYXMgbm90ZWQgaW4gdGhlIDxhIGhyZWY9Imh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvdmlld2N2cy9pbmRleC5jZ2kvfmNoZWNrb3V0fi9vcmcuZWNsaXBzZS5wbGF0Zm9ybS5kb2MuaXN2L3BvcnRpbmcvZWNsaXBzZV8zXzFfcG9ydGluZ19ndWlkZS5odG1sIiB0YXJnZXQ9Il90b3AiPjxlbT5FY2xpcHNlCjMuMSBQbHVnLWluIE1pZ3JhdGlvbiBHdWlkZTwvZW0+PC9hPi4gUHJvZ3JhbXMgdGhhdCB1c2UgYWZmZWN0ZWQgQVBJcyBhbmQgZXh0ZW5zaW9uIHBvaW50cwp3aWxsIG5lZWQgdG8gYmUgcG9ydGVkIHRvIEVjbGlwc2UgU0RLIDMuMSBBUElzLiBEb3dud2FyZCBjb250cmFjdCBjb21wYXRpYmlsaXR5CmlzIG5vdCBzdXBwb3J0ZWQuIFRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IGNvbXBsaWFuY2Ugd2l0aCBFY2xpcHNlIFNESyAzLjEKQVBJcyB3b3VsZCBlbnN1cmUgY29tcGxpYW5jZSB3aXRoIEVjbGlwc2UgU0RLIDMuMCBBUElzLiBSZWZlciB0byA8aT48YSBocmVmPSJodHRwOi8vZWNsaXBzZS5vcmcvZWNsaXBzZS9kZXZlbG9wbWVudC9qYXZhLWFwaS1ldm9sdXRpb24uaHRtbCI+RXZvbHZpbmcKSmF2YS1iYXNlZCBBUElzPC9hPjwvaT4gZm9yIGEgZGlzY3Vzc2lvbiBvZiB0aGUga2luZHMgb2YgQVBJIGNoYW5nZXMgdGhhdAptYWludGFpbiBjb250cmFjdCBjb21wYXRpYmlsaXR5LjwvcD4KPHA+PGI+QmluYXJ5IChwbHVnLWluKSBDb21wYXRpYmlsaXR5OjwvYj4gRWNsaXBzZSBTREsgMy4xIHdpbGwgYmUgdXB3YXJkcwpiaW5hcnktY29tcGF0aWJsZSB3aXRoIEVjbGlwc2UgU0RLIDMuMCBleGNlcHQgaW4gdGhvc2UgYXJlYXMgbm90ZWQgaW4gdGhlIDxhIGhyZWY9Imh0dHA6Ly9kZXYuZWNsaXBzZS5vcmcvdmlld2N2cy9pbmRleC5jZ2kvfmNoZWNrb3V0fi9vcmcuZWNsaXBzZS5wbGF0Zm9ybS5kb2MuaXN2L3BvcnRpbmcvZWNsaXBzZV8zXzFfcG9ydGluZ19ndWlkZS5odG1sIiB0YXJnZXQ9Il90b3AiPjxlbT5FY2xpcHNlCjMuMSBQbHVnLWluIE1pZ3JhdGlvbiBHdWlkZTwvZW0+PC9hPi4gRG93bndhcmQgcGx1Zy1pbiBjb21wYXRpYmlsaXR5IGlzIG5vdCBzdXBwb3J0ZWQuClBsdWctaW5zIGZvciBFY2xpcHNlIFNESyAzLjEgd2lsbCBub3QgYmUgdXNhYmxlIGluIEVjbGlwc2UgU0RLIDMuMC4gUmVmZXIgdG8gPGk+PGEgaHJlZj0iaHR0cDovL2VjbGlwc2Uub3JnL2VjbGlwc2UvZGV2ZWxvcG1lbnQvamF2YS1hcGktZXZvbHV0aW9uLmh0bWwiPkV2b2x2aW5nCkphdmEtYmFzZWQgQVBJczwvYT48L2k+IGZvciBhIGRpc2N1c3Npb24gb2YgdGhlIGtpbmRzIG9mIEFQSSBjaGFuZ2VzIHRoYXQKbWFpbnRhaW4gYmluYXJ5IGNvbXBhdGliaWxpdHkuCjxwPjxiPlNvdXJjZSBDb21wYXRpYmlsaXR5OjwvYj4gRWNsaXBzZSBTREsgMy4xIHdpbGwgYmUgdXB3YXJkcwpzb3VyY2UtY29tcGF0aWJsZSB3aXRoIEVjbGlwc2UgU0RLIDMuMCBleGNlcHQgaW4gdGhlIGFyZWFzIG5vdGVkIGluIHRoZSA8YSBocmVmPSJodHRwOi8vZGV2LmVjbGlwc2Uub3JnL3ZpZXdjdnMvaW5kZXguY2dpL35jaGVja291dH4vb3JnLmVjbGlwc2UucGxhdGZvcm0uZG9jLmlzdi9wb3J0aW5nL2VjbGlwc2VfM18xX3BvcnRpbmdfZ3VpZGUuaHRtbCIgdGFyZ2V0PSJfdG9wIj48ZW0+RWNsaXBzZQozLjEgUGx1Zy1pbiBNaWdyYXRpb24gR3VpZGU8L2VtPjwvYT4uIFRoaXMgbWVhbnMgdGhhdCBzb3VyY2UgZmlsZXMgd3JpdHRlbiB0byB1c2UgRWNsaXBzZQpTREsgMy4wIEFQSXMgbWlnaHQgc3VjY2Vzc2Z1bGx5IGNvbXBpbGUgYW5kIHJ1biBhZ2FpbnN0IEVjbGlwc2UgU0RLIDMuMSBBUElzLAphbHRob3VnaCB0aGlzIGlzIG5vdCBndWFyYW50ZWVkLiBEb3dud2FyZCBzb3VyY2UgY29tcGF0aWJpbGl0eSBpcyBub3Qgc3VwcG9ydGVkLgpJZiBzb3VyY2UgZmlsZXMgdXNlIG5ldyBFY2xpcHNlIFNESyBBUElzLCB0aGV5IHdpbGwgbm90IGJlIHVzYWJsZSB3aXRoIGFuCmVhcmxpZXIgdmVyc2lvbiBvZiB0aGUgRWNsaXBzZSBTREsuCjxwPjxiPldvcmtzcGFjZSBDb21wYXRpYmlsaXR5OjwvYj4gRWNsaXBzZSBTREsgMy4xIHdpbGwgYmUgdXB3YXJkcwp3b3Jrc3BhY2UtY29tcGF0aWJsZSB3aXRoIEVjbGlwc2UgU0RLIDMuMCB1bmxlc3Mgbm90ZWQuIFRoaXMgbWVhbnMgdGhhdAp3b3Jrc3BhY2VzIGFuZCBwcm9qZWN0cyBjcmVhdGVkIHdpdGggRWNsaXBzZSBTREsgMy4wIGNhbiBiZSBzdWNjZXNzZnVsbHkgb3BlbmVkCmJ5IEVjbGlwc2UgU0RLIDMuMSBhbmQgdXBncmFkZWQgdG8gYSAzLjEgd29ya3NwYWNlLiBUaGlzIGluY2x1ZGVzIGJvdGggaGlkZGVuCm1ldGFkYXRhLCB3aGljaCBpcyBsb2NhbGl6ZWQgdG8gYSBwYXJ0aWN1bGFyIHdvcmtzcGFjZSwgYXMgd2VsbCBhcyBtZXRhZGF0YQpmaWxlcyBmb3VuZCB3aXRoaW4gYSB3b3Jrc3BhY2UgcHJvamVjdCAoZS5nLiwgdGhlIC5wcm9qZWN0IGZpbGUpLCB3aGljaCBtYXkKcHJvcGFnYXRlIGJldHdlZW4gd29ya3NwYWNlcyB2aWEgZmlsZSBjb3B5aW5nIG9yIHRlYW0gcmVwb3NpdG9yaWVzLiBJbmRpdmlkdWFsCnBsdWctaW5zIGRldmVsb3BlZCBmb3IgRWNsaXBzZSBTREsgMy4xIHNob3VsZCBwcm92aWRlIHNpbWlsYXIgdXB3YXJkcwpjb21wYXRpYmlsaXR5IGZvciB0aGVpciBoaWRkZW4gYW5kIHZpc2libGUgd29ya3NwYWNlIG1ldGFkYXRhIGNyZWF0ZWQgYnkgZWFybGllcgp2ZXJzaW9uczsgMy4xIHBsdWctaW4gZGV2ZWxvcGVycyBhcmUgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgdGhlaXIKcGx1Zy1pbnMgcmVjb2duaXplIDMuMSwgMy4wLCAyLjEsIGFuZCAyLjAgbWV0YWRhdGEgYW5kIHByb2Nlc3MgaXQgYXBwcm9wcmlhdGVseS4KVXNlciBpbnRlcmZhY2Ugc2Vzc2lvbiBzdGF0ZSBtYXkgYmUgZGlzY2FyZGVkIHdoZW4gYSB3b3Jrc3BhY2UgaXMgdXBncmFkZWQuCkRvd253YXJkIHdvcmtzcGFjZSBjb21wYXRpYmlsaXR5IGlzIG5vdCBzdXBwb3J0ZWQuIEEgd29ya3NwYWNlIGNyZWF0ZWQgKG9yCm9wZW5lZCkgYnkgYSBwcm9kdWN0IGJhc2VkIG9uIEVjbGlwc2UgMy4xIHdpbGwgYmUgdW51c2FibGUgd2l0aCBhIHByb2R1Y3QgYmFzZWQKYW4gZWFybGllciB2ZXJzaW9uIG9mIEVjbGlwc2UuIFZpc2libGUgbWV0YWRhdGEgZmlsZXMgY3JlYXRlZCAob3Igb3ZlcndyaXR0ZW4pCmJ5IEVjbGlwc2UgMy4xIHdpbGwgZ2VuZXJhbGx5IGJlIHVudXNhYmxlIHdpdGggZWFybGllciB2ZXJzaW9ucyBvZiBFY2xpcHNlLgo8cD48Yj5Ob24tY29tcGxpYW50IHVzYWdlIG9mIEFQSSdzPC9iPjogQWxsIG5vbi1BUEkgbWV0aG9kcyBhbmQgY2xhc3NlcywgYW5kCmNlcnRhaW5seSBldmVyeXRoaW5nIGluIGEgcGFja2FnZSB3aXRoICZxdW90O2ludGVybmFsJnF1b3Q7IGluIGl0cyBuYW1lLCBhcmUKY29uc2lkZXJlZCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHdoaWNoIG1heSB2YXJ5IGJldHdlZW4gb3BlcmF0aW5nIGVudmlyb25tZW50CmFuZCBhcmUgc3ViamVjdCB0byBjaGFuZ2Ugd2l0aG91dCBub3RpY2UuIENsaWVudCBwbHVnLWlucyB0aGF0IGRpcmVjdGx5IGRlcGVuZApvbiBhbnl0aGluZyBvdGhlciB0aGFuIHdoYXQgaXMgc3BlY2lmaWVkIGluIHRoZSBFY2xpcHNlIFNESyBBUEkgYXJlIGluaGVyZW50bHkKdW5zdXBwb3J0YWJsZSBhbmQgcmVjZWl2ZSBubyBndWFyYW50ZWVzIGFib3V0IGNvbXBhdGliaWxpdHkgd2l0aGluIGEgc2luZ2xlCnJlbGVhc2UgbXVjaCBsZXNzIHdpdGggYW4gZWFybGllciByZWxlYXNlcy4gUmVmZXIgdG8gPGk+PGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9hcnRpY2xlcy9BcnRpY2xlLUFQSSUyMHVzZS9lY2xpcHNlLWFwaS11c2FnZS1ydWxlcy5odG1sIj5Ib3cKdG8gVXNlIHRoZSBFY2xpcHNlIEFQSTwvYT48L2k+IGZvciBpbmZvcm1hdGlvbiBhYm91dCBob3cgdG8gd3JpdGUgY29tcGxpYW50CnBsdWctaW5zLgo8aDI+VGhlbWVzPC9oMj4KPHA+VGhlIGNoYW5nZXMgdW5kZXIgY29uc2lkZXJhdGlvbiBmb3IgdGhlIG5leHQgcmVsZWFzZSBvZiBFY2xpcHNlIFBsYXRmb3JtLCBKRFQsCmFuZCBQREUgYWRkcmVzcyBhIGZldyBtYWpvciB0aGVtZXM6PC9wPgo8dWw+CiAgPGxpPjxiPkJ1aWx0IHRvIGxhc3QgPC9iPi0gRWNsaXBzZSBoYXMgYWx3YXlzIGJlZW4gYSBwbGF0Zm9ybSBmb3IgZGVsaXZlcmluZwogICAgaW50ZWdyYXRlZCBzb2Z0d2FyZSB0b29scy4gV2l0aCBhIGxhcmdlIGFuZCBncm93aW5nIGJhc2Ugb2YgYm90aCBmcmVlIGFuZAogICAgY29tbWVyY2lhbCBvZmZlcmluZ3MgYmFzZWQgb24gRWNsaXBzZSwgaXQncyBjcml0aWNhbCBmb3IgY29udGludWVkIHN1Y2Nlc3MKICAgIHRvIG1haW50YWluIEFQSSBzdGFiaWxpdHkgYW5kIGVuc3VyZSB0aGF0IHRoZSBwbGF0Zm9ybSBzY2FsZXMgd2VsbC4gVGhpcwogICAgdGhlbWUgaW5jbHVkZXMgd29yayB0byBtZWFzdXJlIGFuZCBpbXByb3ZlIHRoZSBwZXJmb3JtYW5jZSBvZiBrZXkgb3BlcmF0aW9ucwogICAgdW5kZXIgdmFyaW91cyBsb2FkcyAobnVtYmVyIG9mIGluc3RhbGxlZCBwbHVnLWlucywgbnVtYmVyIG9mIHJlc291cmNlcyBpbgogICAgdGhlIHdvcmtzcGFjZSwgZXRjLikuIFRoaXMgdGhlbWUgYWxzbyBpbmNsdWRlcyBjb25zb2xpZGF0aW9uIGFjdGl2aXRpZXMKICAgIHdoZXJlIGdyb3VuZHdvcmsgd2FzIGxhaWQgaW4gMy4wIGJ1dCBuZWVkcyB0byBiZSBjb21wbGV0ZWQgYW5kIGJyb3VnaHQgaW50bwogICAgZnVsbCB1c2UuPC9saT4KICA8bGk+PGI+U2ltcGxlIHRvIHVzZTwvYj4gLSBUaGUgRWNsaXBzZSBwbGF0Zm9ybSBuZWVkcyB0byBub3Qgb25seSBwcm92aWRlIHRoZQogICAgZmVhdHVyZXMgdGhhdCBhZHZhbmNlZCB1c2VycyBkZW1hbmQsIGJ1dCBhbHNvIGJlIHNvbWV0aGluZyB0aGF0IG1vc3QgdXNlcnMKICAgIGZpbmQgc2ltcGxlIHRvIHVzZS4gVGhpcyB0aGVtZSBpbmNsdWRlcyBlYXNlLW9mLXVzZSByZXZpZXdzIG9mIGV4aXN0aW5nCiAgICBmZWF0dXJlcywgYW5kIHdvcmsgdGhhdCBoZWxwcyBtYWtlIEVjbGlwc2UtYmFzZWQgcHJvZHVjdHMgc2ltcGxlIHRvIHVzZSBmb3IKICAgIHVzZXJzIHdpdGggd2lkZWx5LXZhcnlpbmcgYmFja2dyb3VuZHMgYW5kIHNraWxsIHNldHMuPC9saT4KICA8bGk+PGI+UmljaCBjbGllbnQgcGxhdGZvcm0gPC9iPi0gVGhlIEVjbGlwc2UgUkNQIGlzIGEgSmF2YS1iYXNlZCBhcHBsaWNhdGlvbgogICAgZnJhbWV3b3JrIGZvciB0aGUgZGVza3RvcC4gQnVpbGRpbmcgb24gdGhlIEVjbGlwc2UgcnVudGltZSBhbmQgdGhlIG1vZHVsYXIKICAgIHBsdWctaW4gc3RvcnksIGl0IGlzIHBvc3NpYmxlIHRvIGJ1aWxkIGFwcGxpY2F0aW9ucyByYW5naW5nIGZyb20gY29tbWFuZAogICAgbGluZSB0b29scyB0byBmZWF0dXJlLXJpY2ggYXBwbGljYXRpb25zIHRoYXQgdGFrZSBmdWxsIGFkdmFudGFnZSBvZiBTV1QncwogICAgbmF0aXZlIHBsYXRmb3JtIGludGVncmF0aW9uIGFuZCB0aGUgbWFueSBvdGhlciByZXVzYWJsZSBjb21wb25lbnRzIHRoYXQgdGhlCiAgICBFY2xpcHNlIHBsYXRmb3JtIHByb3ZpZGVzLiBUaGlzIHRoZW1lIGluY2x1ZGVzIHdvcmsgdG8gZW5oYW5jZSB0aGUgUkNQLCBhbmQKICAgIHRvIHByb3ZpZGUgUERFIHN1cHBvcnQgZm9yIGRldmVsb3BpbmcgYW5kIGRlcGxveWluZyBSQ1AtYmFzZWQgYXBwbGljYXRpb25zLjwvbGk+CiAgPGxpPjxiPkoyU0UgNSBzdXBwb3J0PC9iPiAtIFRoaXMgdGhlbWUgY292ZXJzIHdvcmsgdG8gYWRkIGZ1bGwgc3VwcG9ydCBmb3IKICAgIEoyU0UgNSB0byBKRFQuPC9saT4KICA8bGk+PGI+TGFyZ2Utc2NhbGUgZGV2ZWxvcG1lbnQgPC9iPi0gTGFyZ2Ugc29mdHdhcmUgcHJvamVjdHMgYXJlIGxvbmctdGVybQogICAgY29sbGFib3JhdGlvbnMgaW52b2x2aW5nIGxhcmdlIHRlYW1zIG9mIGRldmVsb3BlcnMgcGxheWluZyBhIHZhcmlldHkgb2YKICAgIHJvbGVzLiBJbiBvcmRlciB0byBiZSBlZmZlY3RpdmUgZm9yIGxhcmdlIHByb2plY3RzLCBzb2Z0d2FyZSB0b29scyBhbmQKICAgIHByb2Nlc3NlcyBtdXN0IGZpdCB3ZWxsIGludG8gdGhpcyByZWFsaXR5LiBUaGlzIHRoZW1lIGluY2x1ZGVzIGxheWluZyB0aGUKICAgIGdyb3VuZHdvcmsgaW4gdGhlIEVjbGlwc2UgUGxhdGZvcm0gdGhhdCB3aWxsIGVuYWJsZSBsYXJnZSB0ZWFtcyB0byBtYWtlCiAgICBlZmZlY3RpdmUgdXNlIG9mIEVjbGlwc2UtYmFzZWQgcHJvZHVjdHMuPC9saT4KICA8bGk+PGI+QnJvYWRlbmluZyB0aGUgY29tbXVuaXR5PC9iPiAtIFRoaXMgdGhlbWUgaW5jbHVkZXMgd29yayB0aGF0IGdyb3dzCiAgICBkZWVwZXIgcm9vdHMgaW50byB0aGUgdmFyaW91cyBPUy1zcGVjaWZpYyBjb21tdW5pdGllcywgc3ByZWFkcyBFY2xpcHNlIHRvCiAgICBhZGRpdGlvbmFsIG9wZXJhdGluZyBlbnZpcm9ubWVudHMsIGFuZCBidWlsZHMgYnJpZGdlcyB0byBvdGhlciBvcGVuIHNvdXJjZQogICAgY29tbXVuaXRpZXMuPC9saT4KPC91bD4KPHA+U2luY2UgZWFjaCB0aGVtZSBoYXMgYSBudW1iZXIgb2YgaXRlbXMsIHRoZSBjb21taXR0ZWQsIHByb3Bvc2VkLCBhbmQgZGVmZXJyZWQKcGxhbiBpdGVtcyBhcmUgZ3JvdXBlZCBpbiBzZWN0aW9ucyBieSB0aGVtZS4gSW4gYWRkaXRpb24sIHRoZXJlIGFyZSBhIGZldwppbXBvcnRhbnQgRWNsaXBzZSBQbGF0Zm9ybSBpbXByb3ZlbWVudHMgdGhhdCBkbyBub3QgbmF0dXJhbGx5IGZpdCBpbnRvIGFueSBvZgp0aGUgYWJvdmUgdGhlbWVzOyB0aGVzZSBhcmUgbGlzdGVkIHNlcGFyYXRlbHkuPC9wPgpFYWNoIG9mIHRoZSAzIHByb2plY3RzIHVuZGVyIHRoZSBFY2xpcHNlIHRvcC1sZXZlbCBwcm9qZWN0IGlzIGNvdmVyZWQgaW4gaXRzCm93biBzZWN0aW9uOgo8dWw+CiAgPGxpPjxhIGhyZWY9IiNQbGF0Zm9ybSI+RWNsaXBzZSBQbGF0Zm9ybSBwcm9qZWN0PC9hPjwvbGk+CiAgPGxpPjxhIGhyZWY9IiNKRFQiPkphdmEgZGV2ZWxvcG1lbnQgdG9vbHMgKEpEVCkgcHJvamVjdDwvYT48L2xpPgogIDxsaT48YSBocmVmPSIjUERFIj5QbHVnLWluIGRldmVsb3BtZW50IGVudmlyb25tZW50IChQREUpIHByb2plY3Q8L2E+PC9saT4KPC91bD4KPHA+Rm9yIGVhY2ggcHJvamVjdCwgdGhlIGl0ZW1zIGxpc3RlZCByZWZsZWN0IG5ldyBmZWF0dXJlcyBvZiBFY2xpcHNlIG9yIGFyZWFzIAogIHdoZXJlIGV4aXN0aW5nIGZlYXR1cmVzIHdpbGwgYmUgc2lnbmlmaWNhbnRseSByZXdvcmtlZC4gRWFjaCBpdGVtIGluZGljYXRlcyAKICB0aGUgY29tcG9uZW50cyBsaWtlbHkgYWZmZWN0ZWQgYnkgdGhhdCB3b3JrIGl0ZW0gKG1hbnkgaXRlbXMgaW52b2x2ZSBjb29yZGluYXRlZCAKICBjaGFuZ2VzIHRvIHNldmVyYWwgY29tcG9uZW50cykuIE51bWJlcnMgaW4gcGFyZW50aGVzZXMgbGluayB0byBidWd6aWxsYSBwcm9ibGVtIAogIHJlcG9ydHMgZm9yIHRoYXQgcGxhbiBpdGVtLiAKPGgyPjxhIG5hbWU9IlBsYXRmb3JtIj5FY2xpcHNlIFBsYXRmb3JtIHByb2plY3Q8L2E+PC9oMj4KPHA+VGhlIEVjbGlwc2UgUGxhdGZvcm0gcHJvdmlkZXMgdGhlIG1vc3QgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzLiBQbGFuCml0ZW1zIHJlZmxlY3QgbmV3IGZlYXR1cmVzIG9mIHRoZSBFY2xpcHNlIFBsYXRmb3JtLCBvciBhcmVhcyB3aGVyZSBleGlzdGluZwpmZWF0dXJlcyB3aWxsIGJlIHNpZ25pZmljYW50bHkgcmV3b3JrZWQuPC9wPgo8aDQ+Q29tbWl0dGVkIEl0ZW1zIChFY2xpcHNlIFBsYXRmb3JtIHByb2plY3QpPC9oND4KPGJsb2NrcXVvdGU+IAogIDxwPig8aW1nIGJvcmRlcj0iMCIgc3JjPSJuZXcuZ2lmIiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiPiByZXBsYWNlbWVudCBmb3IgPGEgaHJlZj0iaHR0cDovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9Mzc3MjMiPjM3NzIzPC9hPjsgCiAgICByZWNlbnRseSBjb21taXR0ZWQpIDxzdHJvbmc+TWFwcGluZyBsb2dpY2FsIHZpZXdzIHRvIHBoeXNpY2FsIGZpbGVzIG9uIGRpc2suPC9zdHJvbmc+IAogICAgSW4gc29tZSBjYXNlcywgbXVsdGlwbGUgZGlzdGluY3Qgb2JqZWN0cyBoYXBwZW4gdG8gYmUgc3RvcmVkIGluIGEgc2luZ2xlIGZpbGUsIAogICAgbGlrZSBhbiBhcmNoaXZlLiBDb252ZXJzZWx5LCBpbiBvdGhlciBjYXNlcywgc29tZXRoaW5nIHRoYXQgaXMgbG9naWNhbGx5IGEgCiAgICBzaW5nbGUgb2JqZWN0IGlzIHN0b3JlZCBhY3Jvc3MgbXVsdGlwbGUgZmlsZXMuIFRoaXMgZGlzY3JlcGFuY3kgYmV0d2VlbiBsb2dpY2FsIAogICAgYW5kIHBoeXNpY2FsIGNyZWF0ZXMgcHJvYmxlbXMgZm9yIGNvbW1vbiBvcGVyYXRpb25zIHN1Y2ggYXMgc2VhcmNoaW5nLCBjb21wYXJpbmcsIAogICAgYW5kIHZlcnNpb25pbmcsIHdoaWNoIG5lZWQgdG8gd29yayBpbiB0aGUgcGh5c2ljYWwgcmVhbG0uIEVjbGlwc2Ugc2hvdWxkIHN1cHBvcnQgCiAgICBzb21lIHdheSBvZiBtYXBwaW5nIGJldHdlZW4gYSBsb2dpY2FsIHZpZXcgYW5kIHRoZSBwaHlzaWNhbCBvcmdhbml6YXRpb24gb2YgCiAgICBmaWxlcyBvbiBkaXNrLiBbUGxhdGZvcm0gQ29yZSwgUGxhdGZvcm0gVUksIFRlYW1dICg8YSBocmVmPSJodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9ODAzOTYiPjgwMzk2PC9hPiAKICAgICkgW1RoZW1lOiBCdWlsdCB0byBsYXN0OyBsYXJnZS1zY2FsZSBkZXZlbG9wbWVudF08L3A+CiAgPHA+KDxpbWcgYm9yZGVyPSIwIiBzcmM9Im5ldy5naWYiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiI+IHJlY2VudGx5IGNvbW1pdHRlZCkgPHN0cm9uZz5MYXJnZS1zY2FsZSB3b3Jrc3BhY2VzLjwvc3Ryb25nPiBTb21lIGxhcmdlIGN1c3RvbWVycyBoYXZlIHdvcmtzcGFjZXMgCiAgICBjb250YWluaW5nIHNldmVyYWwgaHVuZHJlZCBwcm9qZWN0cy4gU2NvcGVkIGJ1aWxkcyAoYWRkZWQgaW4gMy4wKSB3ZXJlIGEgc3RlcCAKICAgIGluIHRoZSByaWdodCBkaXJlY3Rpb24gdG93YXJkcyBtYWtpbmcgdGhlc2Ugd29ya2FibGUuIEVjbGlwc2UgbmVlZHMgdG8gcHJvdmlkZSAKICAgIGFwcHJvcHJpYXRlIHN1cHBvcnQgZm9yIGxhcmdlIHdvcmtzcGFjZXMgYW5kIHdvcmtpbmcgc2V0cywgYW5kIGVuc3VyZSB0aGF0IAogICAgZXZlcnl0aGluZyBzY2FsZXMgcHJvcGVybHkuIFtQbGF0Zm9ybSBDb3JlOyBQbGF0Zm9ybSBVSTsgSkRUXSAoPGEgaHJlZj0iaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTcxMTI4Ij43MTEyODwvYT4pIAogICAgW1RoZW1lOiBMYXJnZS1zY2FsZSBkZXZlbG9wbWVudF08L3A+CiAgPHA+KDxpbWcgYm9yZGVyPSIwIiBzcmM9Im5ldy5naWYiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiI+IHJlY2VudGx5IGNvbW1pdHRlZCkgCiAgICA8Yj5Qcm9jZXNzIGltcHJvdmVtZW50cyB3cnQgcGVyZm9ybWFuY2UuPC9iPiBGb3IgMy4xIHdlIHNob3VsZCBnZXQgYSBmaXJtIAogICAgZ3JpcCBvbiBzcGVlZCBhbmQgc3BhY2UgcGVyZm9ybWFuY2UuIFRvIGRvIHRoaXMgd2Ugc2hvdWxkICgxKSBpZGVudGlmeSB3aGljaCAKICAgIGFzcGVjdHMgYXJlIGNyaXRpY2FsbHkgaW1wb3J0YW50IHBlcmZvcm1hbmNlLXdpc2U7ICgyKSBlc3RhYmxpc2ggYmVuY2htYXJrcyAKICAgIHRvIHF1YW50aWZ5IHBlcmZvcm1hbmNlOyBhbmQgKDMpIGxvb2sgYXQgd2F5cyB0byBpbXByb3ZlIHBlcmZvcm1hbmNlLiBCeSBpdHMgCiAgICBuYXR1cmUsIGl0J3MgaGFyZCB0byBzYXkgaW4gYWR2YW5jZSB3aGF0IGtpbmQgb2YgaW1wcm92ZW1lbnRzIHdlJ2xsIGJlIGFibGUgCiAgICB0byBhY2hpZXZlLCBtYWtpbmcgaXQgZGlmZmljdWx0IHRvIG1ha2UgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzIGEgcmVsZWFzZSAKICAgIGRlbGl2ZXJhYmxlLiBJbnN0ZWFkLCB3aGF0IHdlIG5lZWQgdG8gZG8gZm9yIDMuMSBpcyBjb21taXQgdG8gdHJhY2sgcGVyZm9ybWFuY2UgCiAgICBmcm9tIHRoaXMgcG9pbnQgb24uIFdlIHNob3VsZCBjYXJyeSBvdXQgcGVyZm9ybWFuY2UgcmV2aWV3cyAoMSkgYW5kIGNyZWF0ZSAKICAgIGJlbmNobWFya3MgKDIpIGZvciBldmVyeSBjb21wb25lbnQsIGFuZCBmb3IgYW55IGNyaXRpY2FsIGFzcGVjdHMgdGhhdCBzcGFuIAogICAgY29tcG9uZW50cy4gRXZlbiBpZiB3ZSBjYW5ub3QgZmluZCB3YXlzIHRvIG1ha2Ugc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgZ2FpbnMgCiAgICAoMyksIHRoZSBiZW5jaG1hcmtzIGFyZSBzdGlsbCBjcml0aWNhbCB0byBFY2xpcHNlJ3Mgc3VjY2VzcyB0byBwcmV2ZW50IGJhY2tzbGlkaW5nIAogICAgaW4gdGhlIGZ1dHVyZS4gVGhlIHdvcmsgaXRlbSBpcyB0byBpbXByb3ZlIG91ciBwcm9jZXNzIHdpdGggcmVzcGVjdCB0byBwZXJmb3JtYW5jZS4gCiAgICBUaGUgZGVsaXZlcmFibGVzIGFyZSB0aGUgYXV0b21hdGVkIHBlcmZvcm1hbmNlIHRlc3RzLCB0aGUgYnVpbGQgcHJvY2VzcyB0aGF0IAogICAgY29sbGVjdHMgYW5kIHB1Ymxpc2hlcyBwZXJmb3JtYW5jZSBkYXRhIGNvdmVyaW5nIGFsbCBjcml0aWNhbCBhc3BlY3RzIG9mIEVjbGlwc2UsIAogICAgYW5kIHRoZSBjb21taXRtZW50IHRvIGxldmVyYWdlIHRoaXMgZGF0YSB0byBtb25pdG9yIHNwZWVkIGFuZCBzcGFjZSBwZXJmb3JtYW5jZSAKICAgIGFzIHBhcnQgYW5kIHBhcmNlbCBvZiBkZXZlbG9waW5nIEVjbGlwc2UuIFtBbGwgRWNsaXBzZSBjb21wb25lbnRzXSAoPGEgaHJlZj0iaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTcxMTIzIj43MTEyMzwvYT4pIAogICAgW1RoZW1lOiBCdWlsdCB0byBsYXN0XTwvcD4KICA8cD4oPGltZyBib3JkZXI9IjAiIHNyYz0ibmV3LmdpZiIgd2lkdGg9IjEyIiBoZWlnaHQ9IjEyIj4gcmVjZW50bHkgY29tbWl0dGVkKSAKICAgIDxiPk92ZXJoYXVsIHByZWZlcmVuY2VzLjwvYj4gVGhlIHdheSB0aGF0IEVjbGlwc2UgZGVhbHMgd2l0aCBwcmVmZXJlbmNlcyBzaG91bGQgCiAgICBiZSBpbXByb3ZlZC4gVGhlIHdvcmtiZW5jaCBwcmVzZW50YXRpb24gb2YgcHJlZmVyZW5jZXMgZ2VuZXJhbGx5IHVzZXMgYSBjb21wb25lbnQtb3JpZW50ZWQgCiAgICBoaWVyYXJjaHksIHdoaWNoIGlzIG5vdCBhbHdheXMgdGhlIGJlc3QgY2hvaWNlIGZvciB1c2Vycy4gVGhlIFVJIHNob3VsZCBwcmVzZW50IAogICAgcHJlZmVyZW5jZXMgaW4gc3VjaCBhIHdheSB0aGF0IHVzZXJzIGNhbiByZWFkaWx5IGRpc2NvdmVyIHRoZW0uIFNvbWUgcHJlZmVyZW5jZSAKICAgIHNldHRpbmdzIGhhdmUgc2NvcGVzIChlLmcuLCB3b3Jrc3BhY2Utd2lkZSB2cy4gcGVyIHByb2plY3QpLiBUaGUgVUkgc2hvdWxkIAogICAgaGVscCB0aGUgdXNlciB0byB2aXN1YWxpemUgdGhlc2Ugc2NvcGVzLiBGb3IgdGVhbS13aWRlIHVuaWZvcm1pdHksIHNvbWUgcHJlZmVyZW5jZXMgCiAgICBzZXR0aW5ncyAoZS5nLiwgY29tcGlsZXIgb3B0aW9ucykgbmVlZCB0byBiZSBzaGFyZWQgKG9yIGltcG9zZWQpIGFjcm9zcyB0ZWFtcy4gCiAgICBUaGUgVUkgc2hvdWxkIGFsc28gZmFjaWxpdGF0ZSB0aGlzLiBbUGxhdGZvcm0gQ29yZTsgUGxhdGZvcm0gVUk7IFRleHQ7IEpEVCAKICAgIFVJOyBKRFQgQ29yZV0gKDxhIGhyZWY9Imh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD03MTEyNCI+NzExMjQ8L2E+KSAKICAgIFtUaGVtZTogQnVpbHQgdG8gbGFzdDsgc2ltcGxlIHRvIHVzZV08L3A+CiAgPHA+KDxpbWcgYm9yZGVyPSIwIiBzcmM9Im5ldy5naWYiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiI+IG5ldykgPGI+SW1wcm92ZSBhY3Rpb24gCiAgICBjb250cmlidXRpb25zLjwvYj4gU2ltcGxpZnkgdGhlIHByb2dyYW1taW5nIG1vZGVsIGZvciBjb250cmlidXRpbmcgbWVudSBhbmQgCiAgICB0b29sYmFyIGl0ZW1zIHRvIHRoZSB3b3JrYmVuY2ggKGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIGFwcGVhcmFuY2UgYW5kIGJlaGF2aW9yKS4gCiAgICBJbXByb3ZlIGNvbnRyb2wgb3ZlciBtZW51IGRlZmluaXRpb24gYW5kIGl0ZW0gb3JkZXJpbmcuIEFsbG93IHRoZSBzZWxlY3RlZCAKICAgIG9iamVjdCBpbiBhIHZpZXcgdG8gb3ZlcnJpZGUgYW4gYWN0aW9uLCBlLmcuLCBSZW5hbWUgbWVudSBpdGVtIG9uIEphdmEgZWxlbWVudCAKICAgIGluIG5hdmlnYXRvciB2aWV3IHJlc29sdmVzIHRvIEpEVCByZWZhY3RvcmluZyByZW5hbWUgaW5zdGVhZCBvZiBiYXNpYyBmaWxlIAogICAgcmVuYW1lLiBNYWludGFpbiBhIHN0cm9uZyBzZXBhcmF0aW9uIGJldHdlZW4gYSBjb21tYW5kLCBpdHMgaGFuZGxlcihzKSBhbmQgCiAgICBpdHMgcGxhY2VtZW50KHMpIGluIHRoZSBVSS4gW1BsYXRmb3JtIFVJOyBQbGF0Zm9ybSBUZXh0OyBKRFQgVUldICg8YSBocmVmPSJodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MzY5NjgiPjM2OTY4PC9hPikgCiAgICBbVGhlbWU6IEJ1aWx0IHRvIGxhc3RdPC9wPgogIDxwPig8aW1nIGJvcmRlcj0iMCIgc3JjPSJuZXcuZ2lmIiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiPiBuZXcpIDxiPlNjYWxhYmlsaXR5LjwvYj4gCiAgICBJbiBjYXNlcyB3aGVyZSBlaXRoZXIgdGhlIHRhcmdldCBtYWNoaW5lIGlzIHJlc291cmNlLWNvbnN0cmFpbmVkLCBvciB0aGUgbnVtYmVyIAogICAgb2YgcGx1Zy1pbnMgaXMgbGFyZ2UsIG9yIHRoZSBzaXplIG9mIHRoZSB3b3Jrc3BhY2UgaXMgbGFyZ2UsIHRoZSBzY2FsYWJpbGl0eSAKICAgIG9mIHRoZSBFY2xpcHNlIFBsYXRmb3JtIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50LiBUaGUgd29yayBpbnZvbHZlcyBpZGVudGlmeWluZyAKICAgIHByb2JsZW1hdGljIGFyZWFzIGFuZCBtYWtpbmcgY2hhbmdlcyB0byBpbXByb3ZlIHRoZSBzY2FsYWJpbGl0eS4gW0FsbCBjb21wb25lbnRzXSAKICAgICg8YSBocmVmPSJodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9ODAxMjkiPjgwMTI5PC9hPikgCiAgICBbVGhlbWU6IEJ1aWx0IHRvIGxhc3RdPC9wPgogIDxwPig8aW1nIGJvcmRlcj0iMCIgc3JjPSJuZXcuZ2lmIiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiPiBuZXcpIDxiPkltcHJvdmUgY2FwYWJpbGl0aWVzLjwvYj4gCiAgICBFY2xpcHNlIDMuMCBpbnRyb2R1Y2VkIHRoZSBub3Rpb24gb2YgY2FwYWJpbGl0aWVzIGFuZCBwcm92aWRlZCBjYXRlZ29yaWVzIAogICAgZm9yIGdyb3VwaW5nIHJlbGF0ZWQgY2FwYWJpbGl0aWVzLiBUaGVzZSBjYXBhYmlsaXRpZXMgYXJlIHVzZWQgdG8gc2ltcGxpZnkgCiAgICB0aGUgVUkgYnkgaGlkaW5nIGZ1bmN0aW9uYWxpdHkgdGhhdCBpcyBub3QgY3VycmVudGx5IHJlbGV2YW50IHRvIHRoZSB1c2VyLiAKICAgIFRoaXMgcGxhbiBpdGVtIGlzIHRvIGltcHJvdmUgdGhpcyBzdXBwb3J0LiBUaGUgbWlzc2luZyBmZWF0dXJlcyBjZW50ZXIgYXJvdW5kIAogICAgYSBwcm9kdWN0J3MgYWJpbGl0eSB0byBzdWNjZXNzZnVsbHkgc3VwcG9ydCBoaWdoZXItbGV2ZWwgbm90aW9ucyAobGlrZSB1c2VyIAogICAgcm9sZXMpIGFuZCBjb250cm9sIHdoZW4gYW5kIGhvdyBjYXBhYmlsaXRpZXMgZ2V0IGVuYWJsZWQuIFtQbGF0Zm9ybSBVSV0gKDxhIGhyZWY9Imh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD04MDEzMCI+ODAxMzA8L2E+KSAKICAgIFtUaGVtZTogU2ltcGxlIHRvIHVzZV08L3A+CiAgPHA+KDxpbWcgYm9yZGVyPSIwIiBzcmM9Im5ldy5naWYiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiI+IG5ldykgPHN0cm9uZz5BbnQgZWRpdG9yIAogICAgaW1wcm92ZW1lbnRzLjwvc3Ryb25nPiBQcm92aWRlIHRoZSBBbnQgZWRpdG9yIHdpdGggY29tcGFyYWJsZSBmdW5jdGlvbmFsaXR5IAogICAgdG8gdGhlIEphdmEgZWRpdG9yIHdpdGggcmVnYXJkIHRvIGZvbGRpbmcsIGh5cGVybGluayBuYXZpZ2F0aW9uLCBvcGVuIGRlY2xhcmF0aW9uLCAKICAgIG1hcmtpbmcgb2NjdXJyZW5jZXMsIHNob3cgZXh0ZXJuYWwgZG9jdW1lbnRhdGlvbiwgcmVmYWN0b3JpbmcsIGV0Yy4gW0FudF0gCiAgICAoPGEgaHJlZj0iaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTgwMTM1Ij44MDEzNTwvYT4pIAogICAgW1RoZW1lOiBTaW1wbGUgdG8gdXNlXTwvcD4KICA8cD4oPGltZyBib3JkZXI9IjAiIHNyYz0ibmV3LmdpZiIgd2lkdGg9IjEyIiBoZWlnaHQ9IjEyIj4gbmV3KSA8c3Ryb25nPkJyZWFrcG9pbnQgCiAgICBpbXByb3ZlbWVudHMuIDwvc3Ryb25nPlNpbXBsaWZ5IGRlYnVnZ2luZyB3aXRoIGxvdHMgb2YgYnJlYWtwb2ludHM6IHByb3ZpZGUgCiAgICBkaWZmZXJlbnQgd2F5cyB0byBncm91cCBhbmQgb3JnYW5pemUgYnJlYWtwb2ludHMgc28gdGhhdCB0aGV5IGNhbiBiZSBlbmFibGVkL2Rpc2FibGVkIAogICAgYXMgYSB1bml0LiBbRGVidWddICg8YSBocmVmPSJodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9ODAxMzYiPjgwMTM2PC9hPikgCiAgICBbVGhlbWU6IExhcmdlLXNjYWxlIGRldmVsb3BtZW50XTwvcD4KPC9ibG9ja3F1b3RlPgo8aDQ+UHJvcG9zZWQgSXRlbXMgKEVjbGlwc2UgUGxhdGZvcm0gcHJvamVjdCk8L2g0Pgo8YmxvY2txdW90ZT4gCiAgPHA+KDxpbWcgYm9yZGVyPSIwIiBzcmM9Im5ldy5naWYiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiI+IHJldmlzZWQgaXRlbSk8Yj4gRW1iZWRkaW5nIAogICAgZWRpdG9ycyBhbmQgdmlld3MuPC9iPiBWYXJpb3VzIHBsdWctaW5zIGVuY291bnRlciBwcm9ibGVtcyB3aGVuIHRyeWluZyB0byAKICAgIGVtYmVkIGVkaXRvcnMgb3Igdmlld3Mgd2l0aGluIG90aGVyIHdvcmtiZW5jaCBwYXJ0cy4gRm9yIGV4YW1wbGUsIHRoZSBjdXJyZW50IAogICAgY29tcGFyZSBpbmZyYXN0cnVjdHVyZSByZXF1aXJlcyBhIHBsdWctaW4gdG8gY3JlYXRlIGEgc2VwYXJhdGUgdGV4dCBlZGl0b3IgCiAgICBmb3Igdmlld2luZyBjaGFuZ2VzIGJldHdlZW4gZmlsZXMuIFRoaXMgaXMgZHVlIHRvIGEgbGltaXRhdGlvbiBpbiB0aGUgd29ya2JlbmNoIAogICAgdGhhdCBwcmV2ZW50cyBlZGl0b3JzIGZyb20gYmVpbmcgZW1iZWRkZWQgaW5zaWRlIHZpZXdzIG9yIG90aGVyIGNvbnRyb2xzLiAKICAgIEFzIGEgY29uc2VxdWVuY2UsIHRoZSBjb21wYXJlIGVkaXRvcidzIG5lc3RlZCBlZGl0b3JzIGRvbid0IHN1cHBvcnQgdGhlIGZ1bGwgCiAgICBzZXQgb2YgZmVhdHVyZXMgcHJvdmlkZWQgYnkgdGhlIGNvcnJlc3BvbmRpbmcgcmVhbCBjb250ZW50LXR5cGUtc3BlY2lmaWMgZWRpdG9yLiAKICAgIFRoaXMgcmVwcmVzZW50cyBhIG1ham9yIHVzYWJpbGl0eSBwcm9ibGVtOiB0aGUgdXNlciBtdXN0IHN3aXRjaCB0byB0aGUgcmVhbCAKICAgIGVkaXRvciB0byBtYWtlIGNoYW5nZXMgYW5kIHRoZW4gcmV0dXJuIHRvIHRoZSBjb21wYXJlIHZpZXcgdG8gcmV2aWV3IHRoZSBjaGFuZ2VzLiAKICAgIEVjbGlwc2Ugc2hvdWxkIGJlIG1vcmUgZmxleGlibGUgaW4gdGhlIHdheXMgdmFyaW91cyBlZGl0b3JzIGNhbiBiZSB1c2VkIGFuZCAKICAgIHJldXNlZC4gSW1wcm92ZSB0aGUgVUkgY29tcG9uZW50IG1vZGVsIHRvIHN1cHBvcnQgbmVzdGluZyBvZiB3b3JrYmVuY2ggcGFydHMuIAogICAgUmVkdWNlIGNvdXBsaW5nIG9mIHBhcnRzIHRvIHBhcnRpY3VsYXIgbG9jYXRpb25zIGluIHRoZSB3b3JrYmVuY2gsIGFsbG93aW5nIAogICAgZm9yIG1vcmUgZmxleGlibGUgVUkgY29uZmlndXJhdGlvbnMuIFtQbGF0Zm9ybSBVSSwgQ29tcGFyZSwgUGxhdGZvcm0gVGV4dF0gCiAgICAoPGEgaHJlZj0iaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTcxMTI1Ij43MTEyNTwvYT4pIAogICAgW1RoZW1lOiBTaW1wbGUgdG8gdXNlXTwvcD4KICA8cD4KICAgIDxiPlRlYW0gcG9saWNpZXMuPC9iPiBUZWFtcyBvZiBkZXZlbG9wZXJzIHdvcmtpbmcgdG9nZXRoZXIgaGF2ZSBzcGVjaWFsIG5lZWRzIAogICAgZm9yIGVuc3VyaW5nIHRoZSBpbnRlZ3JpdHkgYW5kIGNvbnNpc3RlbmN5IG9mIHRoZWlyIGNvbGxlY3RpdmUgd29yay4gRm9yIGV4YW1wbGUsIAogICAgdGhleSBtYXkgaGF2ZSBwb2xpY2llcyBmb3IgdGhpbmdzIGxpa2Ugc291cmNlIGZpbGUgbmFtaW5nLCBjb2RlIGZvcm1hdHRpbmcsIAogICAgb3IgYnVnIHJlcG9ydCBudW1iZXIgZm9yIGNoYW5nZSB0cmFja2luZy4gRWNsaXBzZSBzaG91bGQgZW5hYmxlIHRvb2xzIHRoYXQgCiAgICBoZWxwIGFjaGlldmUgdGhhdCBpbnRlZ3JpdHkgYW5kIGNvbnNpc3RlbmN5LiBFY2xpcHNlIHNob3VsZCBwcm92aWRlIG1vcmUgYWNjZXNzIAogICAgcG9pbnRzIHNvIHRoYXQgY29tcGxleCBwb2xpY2llcyBjYW4gYmUgc3VnZ2VzdGVkLCBjaGVja2VkLCBvciBlbmZvcmNlZC4gW1BsYXRmb3JtIAogICAgQ29yZTsgVGVhbV0gKDxhIGhyZWY9Imh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD03MTEyNiI+NzExMjY8L2E+KSAKICAgIFtUaGVtZTogTGFyZ2Utc2NhbGUgZGV2ZWxvcG1lbnRdPC9wPgogICAgCiAgPHA+ICg8aW1nIGJvcmRlcj0iMCIgc3JjPSJuZXcuZ2lmIiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiPiBuZXcpIDxiPkdlbmVyYWxpemVkIAogICAgdW5kbyBzdXBwb3J0LjwvYj4gVGhlIFBsYXRmb3JtIHNob3VsZCBkZWZpbmUgYSBjb21tb24gY29tbWFuZCBwcm9jZXNzaW5nIGZyYW1ld29yayAKICAgIGluIG9yZGVyIHRvIHByb3ZpZGUgYSB3b3JrYmVuY2gtd2lkZSB1bmRvL3JlZG8gZmFjaWxpdHkuIFtQbGF0Zm9ybSBVSTsgUGxhdGZvcm0gCiAgICBUZXh0OyBKRFQgVUldICg8YSBocmVmPSJodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9ODAxMzciPjgwMTM3PC9hPikgCiAgICBbVGhlbWU6IEJ1aWx0IHRvIGxhc3RdPC9wPgogIDxwPig8aW1nIGJvcmRlcj0iMCIgc3JjPSJuZXcuZ2lmIiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiPiBuZXcpIDxiPkNvbnRlbnQgdHlwZXMuPC9iPiAKICAgIFRoZSBhbGdvcml0aG0gdGhhdCB0aGUgRWNsaXBzZSBQbGF0Zm9ybSB1c2VzIHRvIGRldGVybWluZSB3aGljaCBlZGl0b3IgdG8gCiAgICBvcGVuIGlzIGJhc2VkIG9uIHRoZSBmaWxlJ3MgbmFtZSBhbmQgc2ltcGxlIG1hdGNoaW5nIHJ1bGVzLiBJbiBtYW55IGNhc2VzIAogICAgbGlrZSBYTUwgZmlsZXMgdGhpcyBzaW1wbGUgYXBwcm9hY2ggaXMgbm90IHN1ZmZpY2llbnQuIFRoZSBQbGF0Zm9ybSBuZWVkcyAKICAgIHRvIHByb3ZpZGUgYSBtb3JlIHJvYnVzdCBhbmQgc2NhbGFibGUgc29sdXRpb24gYmFzZWQgb24gdGhlIGNvbnRlbnQgb2YgdGhlIAogICAgcmVzb3VyY2UuIFtQbGF0Zm9ybSBVSV0gKDxhIGhyZWY9Imh0dHA6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTM3NjY4Ij4zNzY2ODwvYT4pIAogICAgW1RoZW1lOiBCdWlsdCB0byBsYXN0XTwvcD4KICA8cD4oPGltZyBib3JkZXI9IjAiIHNyYz0ibmV3LmdpZiIgd2lkdGg9IjEyIiBoZWlnaHQ9IjEyIj4gbmV3KSA8Yj5BZGQgY3JpdGljYWwgCiAgICBwZXJmb3JtYW5jZSBpbnN0cnVtZW50YXRpb24uPC9iPiBBZGQgc3VwcG9ydCBmb3IgbW9uaXRvcmluZyBwZXJmb3JtYW5jZSBhbmQgCiAgICBkZXRlY3RpbmcgcHJvYmxlbXMgaW4gcGVyZm9ybWFuY2UgY3JpdGljYWwgYXNwZWN0cyBvZiB0aGUgRWNsaXBzZSBQbGF0Zm9ybS4gCiAgICBQb3RlbnRpYWwgY3JpdGljYWwgYXJlYXMgdG8gbW9uaXRvciBpbmNsdWRlIHRoZSB0aW1lcyB0bzogc3RhcnQgdXAgYSBwbHVnLWluLCAKICAgIG9wZW4gYW4gZWRpdG9yLCBkaXNwbGF5IGEgbWVudSwgc3dpdGNoIHBlcnNwZWN0aXZlcywgcHJvY2VzcyBhbiBTV1QgZXZlbnQsIAogICAgcHJvY2VzcyBhIHJlc291cmNlIGNoYW5nZSBldmVudCwgZXRjLiBbUGxhdGZvcm0gVUk7IFBsYXRmb3JtIENvcmU7IFNXVF0gKDxhIGhyZWY9Imh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD04MDEzOCI+ODAxMzg8L2E+KSAKICAgIFtUaGVtZTogQnVpbHQgdG8gbGFzdF08L3A+CiAgPHA+KDxpbWcgYm9yZGVyPSIwIiBzcmM9Im5ldy5naWYiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiI+IG5ldykgPGI+SW5pdGlhbCB1c2VyIAogICAgZXhwZXJpZW5jZSBpbXByb3ZlbWVudHMuPC9iPiBTdXBwb3J0IGZvciBXZWxjb21lIGNvbnRlbnQgd2lsbCBiZSBlbmhhbmNlZCAKICAgIGJ5IGEgbnVtYmVyIG9mIGltcHJvdmVtZW50czogYXV0aG9yaW5nIG9mIHdlbGNvbWUgY29udGVudCB3aWxsIGJlIG1hZGUgZWFzaWVyIAogICAgYnkgcHJvdmlkaW5nIGVhc3kgcHJldmlldyBvZiB0aGUgcmVzdWx0aW5nIHBhZ2VzIHdoZW4gYWxsIHRoZSBjb250ZW50IGlzIGNvbXBvc2VkOyAKICAgIHdoZW5ldmVyIHBvc3NpYmxlLCBoZWxwIGRvY3VtZW50cyB3aWxsIGJlIHNob3duIGluIHBsYWNlIHRvIHJlZHVjZSB0aGUgbmVlZCAKICAgIHRvIGxlYXZlIHRoZSBXZWxjb21lIGNvbnRleHQ7IHRyYW5zaXRpb24gdG8gd29ya2JlbmNoIHdpbGwgYmUgbWFkZSBsZXNzIGFicnVwdCAKICAgIHdpdGggdmFyaW91cyBkZWdyZWVzIG9mIHdlbGNvbWUgc3RpbGwgcHJlc2VudCBmb3IgdGhlIHVzZXIgdG8gcmV0dXJuOyBzdXBwb3J0IAogICAgZm9yIHdlbGNvbWUgaW4gc29waGlzdGljYXRlZCBzdGFja2VkIHByb2R1Y3RzIHdpbGwgYmUgZW5oYW5jZWQuIFtQbGF0Zm9ybSAKICAgIFVJXSAoPGEgaHJlZj0iaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTgwMTM5Ij44MDEzOTwvYT4pIAogICAgW1RoZW1lOiBTaW1wbGUgdG8gdXNlXTwvcD4KICA8cD4oPGltZyBib3JkZXI9IjAiIHNyYz0ibmV3LmdpZiIgd2lkdGg9IjEyIiBoZWlnaHQ9IjEyIj4gbmV3KSA8Yj5NYWNybyByZWNvcmRpbmcgCiAgICBhbmQgcGxheWJhY2suPC9iPiBBZGQgYSBtZWNoYW5pc20gZm9yIHJlY29yZGluZyBhIHNlcXVlbmNlIG9mIHVzZXIgaW50ZXJmYWNlIAogICAgaW50ZXJhY3Rpb25zLCBzdG9yaW5nIHRoZW4gaW4gYSBmaWxlLCBhbmQgcGxheWluZyB0aGVtIGJhY2sgYXQgYSBsYXRlciB0aW1lLiAKICAgIEZpbGUgcGxheWJhY2sgd2lsbCBiZSBtYWRlIGF2YWlsYWJsZSBhcyBhbiBhY3Rpb24gZm9yIHRoZSBiZW5lZml0IG9mIGNoZWF0IAogICAgc2hlZXRzIGFuZCBhY3RpdmUgaGVscC4gW1BsYXRmb3JtIFVJXSAoPGEgaHJlZj0iaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTgwMTQwIj44MDE0MDwvYT4pIAogICAgW1RoZW1lOiBTaW1wbGUgdG8gdXNlXTwvcD4KICA8cD4oPGltZyBib3JkZXI9IjAiIHNyYz0ibmV3LmdpZiIgd2lkdGg9IjEyIiBoZWlnaHQ9IjEyIj4gbmV3KSA8Yj5FbmhhbmNlbWVudHMgCiAgICBmb3Igc3VwcG9ydGluZyBuZXcgdXNlcnMuPC9iPiBGb2xsb3dpbmcgb24gZnJvbSB0aGUgd29yayBkb25lIGluIEVjbGlwc2UgMy4wLCAKICAgIHdlIHdhbnQgdG8gZnVydGhlciBpbXByb3ZlIHRoZSB3YXkgRWNsaXBzZSBmZWVscyB0byBuZXcgdXNlcnMuIEZvciBleGFtcGxlOiAKICAgIHN1cHBvcnQgZm9yIHRlbXBsYXRlcyAodG8gY3JlYXRlIHByb2plY3RzIHRoYXQgZG8gc29tZXRoaW5nIHVzZWZ1bCkgYXMgd2VsbCAKICAgIGFzIGEgc2V0IG9mIHRlbXBsYXRlcyB0aGF0IHNoaXAgd2l0aCBFY2xpcHNlIFNESzsgc3VwcG9ydCBmb3Igc2FtcGxlcyAoZW5oYW5jaW5nIAogICAgc2FtcGxlIHN1cHBvcnQgc2hpcHBlZCBpbiAzLjAgYW5kIG1ha2luZyBpdCBBUEkpOyBzYWZlIG1vZGUgKGEgY29uc3RyYWluZWQgCiAgICBtb2RlIG9mIHJ1bm5pbmcgdGhlIHdvcmtiZW5jaCAtICd0cmFpbmluZyB3aGVlbHMnIC0gd2hlcmUgY2FwYWJpbGl0aWVzIGFyZSAKICAgIHJlc3RyaWN0ZWQgaW4gb3JkZXIgdG8gcHJldmVudCBjb21tb24gZWFybHkgbWlzdGFrZXMpOyBzaW1wbGVyIHdvcmtzcGFjZSBjaG9vc2VyIAogICAgKHdoZXJlIGRvIHlvdSB3YW50IHlvdXIgd29yayBzYXZlZD8pOyBtb3JlIHVzYWJsZSBwZXJzcGVjdGl2ZSBjaG9vc2VyIHdpdGggCiAgICBzaG9ydCBkZXNjcmlwdGlvbiwgYSBzbWFsbCBpbWFnZSB0aGF0IHNob3dzIHRoZSBnZW5lcmFsIHBlcnNwZWN0aXZlIGxheW91dCwgCiAgICBwZXJzcGVjdGl2ZSBncm91cHMgYnkgcm9sZSBlLmcuIEphdmEgRGV2ZWxvcG1lbnQuIFtQbGF0Zm9ybSBVSV0gKDxhIGhyZWY9Imh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD04MDEzMiI+ODAxMzI8L2E+KSAKICAgIFtUaGVtZTogU2ltcGxlIHRvIHVzZV08L3A+CiAgPHA+KDxpbWcgYm9yZGVyPSIwIiBzcmM9Im5ldy5naWYiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiI+IG5ldykgPGI+SGVscCBzZWFyY2ggCiAgICBlbmhhbmNlbWVudHMuPC9iPiBTZWFyY2ggd2lsbCBiZSBlbmhhbmNlZCBpbiBhIG51bWJlciBvZiB3YXlzLiBBZGQgdGhlIGFiaWxpdHkgCiAgICB0byBzZWFyY2ggdGhlIHdvcmtiZW5jaCBVSSB0byBmaW5kIGFjdGlvbnMsIHZpZXdzLCBwZXJzcGVjdGl2ZXMsIGV0Yy47IHRvIAogICAgc2VhcmNoIHRoZSB3ZWIgaW4gYWRkaXRpb24gdG8gbG9jYWwgZG9jdW1lbnRhdGlvbjsgYW5kIHRvIGNvbGxhdGUgcmVzdWx0cyAKICAgIGZyb20gbXVsdGlwbGUgc2VhcmNoIGVuZ2luZXMgcXVlcmllZCBpbiBwYXJhbGxlbC4gSW1wcm92ZSB0aGUgcHJlc2VudGF0aW9uIAogICAgb2Ygc2VhcmNoIGJ5IGV4cG9zaW5nIEhlbHAgc2VhcmNoZXMgaW4gd2l6YXJkIFVJIHBhbmVzLCBhbmQgYnkgbWFraW5nIHNlYXJjaCAKICAgIHBlcnZhc2l2ZSBpbiB0aGUgd29ya2JlbmNoLiBbSGVscCwgUGxhdGZvcm0gVUksIFNlYXJjaF0gKDxhIGhyZWY9Imh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD04MDEzMSI+ODAxMzE8L2E+KSAKICAgIFtUaGVtZTogU2ltcGxlIHRvIHVzZTsgbGFyZ2Utc2NhbGUgZGV2ZWxvcG1lbnRdPC9wPgogIDxwPig8aW1nIGJvcmRlcj0iMCIgc3JjPSJuZXcuZ2lmIiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiPiBuZXcpIDxiPkhlbHAgc3lzdGVtIAogICAgaW1wcm92ZW1lbnRzLjwvYj4gQSBudW1iZXIgb2YgaW1wcm92ZW1lbnRzIHdvdWxkIGJlIGFkZGVkIHRvIHRoZSBjdXJyZW50IGhlbHAgCiAgICBzeXN0ZW0gdG8gYWRkcmVzcyB0aGUgY3VycmVudCBwcm9ibGVtcyBhbmQgbWFrZSBoZWxwIG1vcmUgdXNlZnVsLiBJbXByb3ZlbWVudHMgCiAgICBpbmNsdWRlOiBBbGxvdyBoZWxwIGNvbnRlbnQgdG8gYXBwZWFyIGVtYmVkZGVkIGluIHZhcmlvdXMgcGxhY2VzIG9mIHRoZSB3b3JrYmVuY2ggCiAgICAod2VsY29tZSwgY2hlYXQgc2hlZXRzLCBoZWxwIHZpZXcpIGFzIGEgd2F5IHRvIGF2b2lkIHByb2JsZW1zIGNhdXNlZCBieSBoYXZpbmcgCiAgICBhbGwgSGVscCBwcmVzZW50ZWQgaW4gYSBzZXBhcmF0ZSB3aW5kb3cgKHRoaXMgd291bGQgYWxzbyBlbnRhaWwgc29tZSByZXdvcmsgCiAgICBvZiB0aGUgVGFza3Mgc2VjdGlvbnMgb2YgdGhlIEVjbGlwc2UgaGVscCBib29rcyB0byBtYWtlIHRoZW0gc3VpdGFibGUgZm9yIAogICAgcHJlc2VudGF0aW9uIGluIGEgbmFycm93IHdpbmRvdykuJm5ic3A7UHJvdmlkZSBhIGhvb2sgZnJvbSBlcnJvciBkaWFsb2dzIGludG8gCiAgICBoZWxwLiBbSGVscF0gKDxhIGhyZWY9Imh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD04MDE0MSI+ODAxNDE8L2E+KSAKICAgIFtUaGVtZTogU2ltcGxlIHRvIHVzZV08L3A+CiAgPHA+KDxpbWcgYm9yZGVyPSIwIiBzcmM9Im5ldy5naWYiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiI+IG5ldykgPGI+SW1wcm92ZSBjaGVhdCAKICAgIHNoZWV0IGF1dGhvcmluZy48L2I+IFRoZSBnb2FsIGlzIHRvIGJldHRlciBzdXBwb3J0IGF1dGhvcmluZyBvZiBjaGVhdCBzaGVldHMgCiAgICBieSBub24tcHJvZ3JhbW1lcnMgYnkgYWxsb3dpbmcgYWN0aW9ucyB0byBiZSByZWNvcmRlZCBhcyBtYWNyb3MgdG8gaGFuZGxlIAogICAgJ2RvIGl0IGZvciBtZScgc3RlcCBhY3Rpb25zLiBbUGxhdGZvcm0gVUldICg8YSBocmVmPSJodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9ODAxNDIiPjgwMTQyPC9hPikgCiAgICBbVGhlbWU6IFNpbXBsZSB0byB1c2VdPC9wPgogIDxwPig8aW1nIGJvcmRlcj0iMCIgc3JjPSJuZXcuZ2lmIiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiPiBuZXcpIDxiPlBlcnZhc2l2ZSAKICAgIGNvbnRleHQgaGVscCBwYW5lLjwvYj4gVGhlIFBsYXRmb3JtIHNob3VsZCBwcm92aWRlIGEgcmV1c2FibGUgcGFuZSB0byBzaG93IAogICAgY29udGV4dCBoZWxwIGZvciB0aGUgY3VycmVudGx5IGFjdGl2ZSBjb250ZXh0LiBUaGUgcGFuZSBjYW4gYmUgdXNlZCBpbiB2YXJpb3VzIAogICAgcGxhY2VzLCBpbmNsdWRpbmcgdmlld3MgYW5kIHdpemFyZCBkaWFsb2dzLiBUaGUgcGFuZSBzaG93cyBhZGRpdGlvbmFsIGhlbHAgCiAgICBvbiB0aGUgY3VycmVudCBjb250ZXh0LCBsaW5rcyB0byBoZWxwIHRvcGljcyBhYm91dCBpdCwgYW5kIGEgcXVpY2sgc2VhcmNoIAogICAgZW50cnkuIFtIZWxwLCBQbGF0Zm9ybSBVSV0gKDxhIGhyZWY9Imh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD04MDE0MyI+ODAxNDM8L2E+KSAKICAgIFtUaGVtZTogU2ltcGxlIHRvIHVzZV08L3A+CiAgPHA+KDxpbWcgYm9yZGVyPSIwIiBzcmM9Im5ldy5naWYiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiI+IG5ldykgPHN0cm9uZz5SQ1AgcGVyZm9ybWFuY2UuPC9zdHJvbmc+IAogICAgU3RhcnR1cCB0aW1lIGFuZCB0b3RhbCBzcGFjZSByZXF1aXJlbWVudHMgYXJlIGtleSBlbGVtZW50cyBpbiB0aGUgdmlhYmlsaXR5IAogICAgb2YgRWNsaXBzZSBhcyBhbiBSQ1AuIEluIHRoZSAzLjEgY3ljbGUgd2Ugd2lsbCBmb2N1cyBvbiB0aGVzZSB0d28gcGVyZm9ybWFuY2UgCiAgICBjaGFyYWN0ZXJpc3RpY3Mgd2l0aCB0aGUgcGFydGljdWxhciBnb2FscyBvZjogcmVkdWNpbmcgc3BhY2UgcmVxdWlyZWQgaW50ZXJuYWwgCiAgICBkYXRhIHN0cnVjdHVyZXMgKGUuZy4sIGZyYW1ld29yayBzdGF0ZSwgZXh0ZW5zaW9uIHJlZ2lzdHJ5LCAuLi4pOyBzdHJlYW1saW5pbmcgCiAgICB0aGUgc3RhcnR1cCBleGVjdXRpb24gdG8gZ2V0IHRvIHRoZSBhcHBsaWNhdGlvbiBjb2RlIGZhc3RlcjsgYW5kIHByb3ZpZGluZyAKICAgIGJhc2ljIHN1cHBvcnQgZm9yIHNwYWNlLWVmZmljaWVudCByZXNvdXJjZSBidW5kbGVzLiBbUGxhdGZvcm0gQ29yZV0gKDxhIGhyZWY9Imh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD04MDE0NSI+ODAxNDU8L2E+KSAKICAgIFtUaGVtZTogUmljaCBjbGllbnQgcGxhdGZvcm1dPC9wPgogIDxwPiAoPGltZyBib3JkZXI9IjAiIHNyYz0ibmV3LmdpZiIgd2lkdGg9IjEyIiBoZWlnaHQ9IjEyIj4gbmV3KSA8c3Ryb25nPlJDUCAKICAgIGluZnJhc3RydWN0dXJlLjwvc3Ryb25nPiBUaGVyZSBhcmUgdmFyaW91cyBpbXByb3ZlbWVudHMgdG8gdGhlIFJDUCBpbmZyYXN0cnVjdHVyZSAKICAgIHRvIGJldHRlciBzdXBwb3J0IGEgd2lkZW5pbmcgcmFuZ2Ugb2YgdXNlcywgaW5jbHVkaW5nOiBpbXByb3ZlIHN1cHBvcnQgZm9yIAogICAgcHJlY29uZmlndXJlZCBpbnN0YWxsczsgYW5kIGltcHJvdmUgc3VwcG9ydCBmb3IgQVBJIGRlY2xhcmF0aW9uL2NvbnN1bXB0aW9uLiAKICAgIEFkZGl0aW9uYWxseSwgYWxsIFJDUC1yZWxhdGVkIHBsdWctaW5zIHdpbGwgYmUgdXBkYXRlZCB0byB1c2Ugb25seSBjbGFzc2VzIAogICAgaW4gdGhlIEoyTUUgQ0RDL0ZvdW5kYXRpb24gcHJvZmlsZS4gW1BsYXRmb3JtIENvcmU7IFBsYXRmb3JtIFVJOyBVcGRhdGU7IEhlbHBdIAogICAgKDxhIGhyZWY9Imh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD04MDE0NiI+ODAxNDY8L2E+KSAKICAgIFtUaGVtZTogUmljaCBjbGllbnQgcGxhdGZvcm1dPC9wPgogIDxwPig8aW1nIGJvcmRlcj0iMCIgc3JjPSJuZXcuZ2lmIiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiPiBuZXcpIDxzdHJvbmc+T1NHaS4gCiAgICA8L3N0cm9uZz5FY2xpcHNlIDMuMSB3aWxsIGluY2x1ZGUgYSBjb21wbGlhbnQgaW1wbGVtZW50YXRpb24gb2YgdGhlIHVwY29taW5nIAogICAgT1NHaSBQbGF0Zm9ybSBSNCBzcGVjaWZpY2F0aW9uLiBXZSB3aWxsIGFsc28gaW5jcmVhc2UgdGhlIGZsZXhpYmlsaXR5IG9mIHRoZSAKICAgIGFkYXB0b3Igc3RydWN0dXJlIG9mIHRoZSBPU0dpIGZyYW1ld29yayBpbiBvcmRlciB0byBtYWtlIGl0IGVhc2llciB0byB1c2UgCiAgICB0aGUgRWNsaXBzZSBPU0dpIGltcGxlbWVudGF0aW9uIG9uIGl0cyBvd24uIFtQbGF0Zm9ybSBDb3JlXSAoPGEgaHJlZj0iaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTgwMTQ3Ij44MDE0NzwvYT4pIAogICAgW1RoZW1lOiBSaWNoIGNsaWVudCBwbGF0Zm9ybV08L3A+CiAgPHA+KDxpbWcgYm9yZGVyPSIwIiBzcmM9Im5ldy5naWYiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiI+IG5ldykgPHN0cm9uZz5EeW5hbWljIAogICAgcGx1Zy1pbnMuPC9zdHJvbmc+IEluIEVjbGlwc2UgMy4wIGl0IGJlY2FtZSBwb3NzaWJsZSB0byBpbnN0YWxsIGFuZCByZW1vdmUgCiAgICBwbHVnLWlucyB3aXRob3V0IHJlc3RhcnRpbmcgdGhlIHN5c3RlbS4gSW4gcHJhY3RpY2UgdGhpcyBpcyBhIGNvb3BlcmF0aXZlIAogICAgZWZmb3J0IHJlcXVpcmluZyB0aGUgcmVzdCBvZiB0aGUgcGx1Zy1pbnMgaW4gdGhlIHN5c3RlbSB0byByZXNwb25kIGNvcnJlY3RseSAKICAgIHRvIHRoZSBjaGFuZ2VzLiBXb3JrIHdpbGwgYmUgZG9uZSB0byBpbmNyZWFzZSB0aGUgcnVudGltZSBzdXBwb3J0IGZvciBtYWtpbmcgCiAgICBwbHVnLWlucyBkeW5hbWljLWF3YXJlLCBpbmNsdWRpbmcgYW5ub3RhdGluZyBwbHVnLWlucyB3aXRoIHRoZWlyIGR5bmFtaWMgY2hhcmFjdGVyaXN0aWNzLCAKICAgIGNoYW5naW5nIHRoZSByZWdpc3RyeSBkYXRhIHN0cnVjdHVyZSB0byB1c2UgbGlnaHQtd2VpZ2h0IGhhbmRsZXMsIGFuZCBwcm92aWRlIAogICAgc3VwcG9ydCBmb3IgdHJhY2tpbmcga2V5IG9iamVjdHMuIE90aGVyIFJDUCBwbHVnLWlucyB3aWxsIGJlIHVwZGF0ZWQgdG8gdXNlIAogICAgdGhlc2UgbWVjaGFuaXNtcy4gQWxzbywgZGV2ZWxvcCByZXVzYWJsZSBjb2Rpbmcgc3RydWN0dXJlcyBhbmQgZ3VpZGVsaW5lcyAKICAgIGZvciB3cml0aW5nIGR5bmFtaWMtYXdhcmUgcGx1Zy1pbnMuIFtQbGF0Zm9ybSBDb3JlOyBQbGF0Zm9ybSBVSTsgUGxhdGZvcm0gCiAgICBUZXh0OyBVcGRhdGU7IEhlbHBdICg8YSBocmVmPSJodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9ODAxNDgiPjgwMTQ4PC9hPikgCiAgICBbVGhlbWU6IFJpY2ggY2xpZW50IHBsYXRmb3JtXTwvcD4KICA8cD4oPGltZyBib3JkZXI9IjAiIHNyYz0ibmV3LmdpZiIgd2lkdGg9IjEyIiBoZWlnaHQ9IjEyIj4gbmV3KSA8c3Ryb25nPiBKTkxQIAogICAgU3VwcG9ydC48L3N0cm9uZz4gSXQgaXMgY29udmVuaWVudCB0byBiZSBhYmxlIHRvIGxhdW5jaCBhIEphdmEtYmFzZWQgYXBwbGljYXRpb24gCiAgICBmcm9tIGEgd2ViIGJyb3dzZXIuIFRoZXJlIGFyZSB2YXJpb3VzIHRlY2huaWNhbCBpc3N1ZXMgd2l0aCBsYXVuY2hpbmcgRWNsaXBzZSAKICAgIHVzaW5nIEphdmEgV2ViIFN0YXJ0IChKTkxQKS4gV2Ugd2lsbCBlbnN1cmUgdGhhdCB0aGUgc2ltcGxlIGZvcm1zIG9mIEpOTFAtYmFzZWQgCiAgICBkZXBsb3ltZW50IGFyZSBzdXBwb3J0ZWQsIGFuZCB3aWxsIGludmVzdGlnYXRlIHN1cHBvcnRpbmcgbW9yZSBhZHZhbmNlZCBzb2x1dGlvbnMgCiAgICB0aGF0IGNvdWxkIHByb3ZpZGUgYSBoaWdoZXIgbGV2ZWwgb2YgaW50ZWdyYXRpb24gYmV0d2VlbiB0aGUgRWNsaXBzZSBjb21wb25lbnQgCiAgICBtb2RlbCBhbmQgdGhhdCBvZiBKTkxQLiBbUGxhdGZvcm0gQ29yZV0gKDxhIGhyZWY9Imh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD04MDE0OSI+ODAxNDk8L2E+KSAKICAgIFtUaGVtZTogUmljaCBjbGllbnQgcGxhdGZvcm1dPC9wPgogIDxwPig8aW1nIGJvcmRlcj0iMCIgc3JjPSJuZXcuZ2lmIiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiPiBuZXcpIDxzdHJvbmc+IFNlY3VyaXR5Ljwvc3Ryb25nPiAKICAgIFN1cHBvcnQgb25nb2luZyB3b3JrIGluIEVxdWlub3ggaW52ZXN0aWdhdGluZyBzZWN1cml0eS4gVGhpcyBjb3ZlcnMgaXRlbXMgCiAgICBzdWNoIGFzIGVuYWJsaW5nIEphdmEgMiBzZWN1cml0eSBtYW5hZ2VycywgcGx1Zy1pbiBzaWduaW5nLCB0ZWNobmlxdWVzIGFuZCAKICAgIG1lY2hhbmlzbXMgZm9yIGF1dGhlbnRpY2F0aW9uIGFuZCBhdXRob3JpemF0aW9uIGFuZCBjcmVkZW50aWFsIHN0b3JlcyBhcyB3ZWxsIAogICAgYXMgZW5kLXRvLWVuZCBzZWN1cml0eSBvZiB0aGUgUGxhdGZvcm0gaW5zdGFsbC4gW1BsYXRmb3JtIENvcmU7IFBsYXRmb3JtIFVwZGF0ZV0gCiAgICAoPGEgaHJlZj0iaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTM3NjkyIj4zNzY5MjwvYT4pIAogICAgW1RoZW1lOiBSaWNoIGNsaWVudCBwbGF0Zm9ybV08L3A+CiAgPHA+KDxpbWcgYm9yZGVyPSIwIiBzcmM9Im5ldy5naWYiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiI+IG5ldykgPHN0cm9uZz5TdXBwb3J0IAogICAgZm9yIGxhdW5jaGVyIGJyYW5kaW5nLjwvc3Ryb25nPiBBIGtleSBzdGVwIGluIHByb2R1Y2luZyBhbiBSQ1AtYmFzZWQgcHJvZHVjdCAKICAgIGlzIGNyZWF0aW5nIHRoZSBsYXVuY2hlciB0aGUgdXNlciB1c2VzIHRvIHJ1biB0aGUgcHJvZHVjdC4gQXMgYSBtaW5pbXVtIGl0IAogICAgc2hvdWxkIGhhdmUgYSBwcm9kdWN0LXNwZWNpZmljIG5hbWUgYW5kIGljb24uIEN1cnJlbnRseSwgY29uc3RydWN0aW5nIHN1Y2ggCiAgICBhIGxhdW5jaGVyIHJlcXVpcmVzIGEgQyBjb21waWxlciBhbmQgb3RoZXIgT1Mtc3BlY2lmaWMgdG9vbHMuIFdlIHdpbGwgaW52ZXN0aWdhdGUgCiAgICBwcm92aWRpbmcgdGVtcGxhdGUgbGF1bmNoZXJzIHdoaWNoIGNhbiBiZSBpbnN0YW50aWF0ZWQgYnkgUERFIHdoZW4gYXNzZW1ibGluZyAKICAgIGEgcHJvZHVjdCBmb3IgYSBnaXZlbiBPUy4gW1NXVDsgUERFXSAoPGEgaHJlZj0iaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTgwMTUwIj44MDE1MDwvYT4pIAogICAgW1RoZW1lOiBSaWNoIGNsaWVudCBwbGF0Zm9ybV08L3A+CiAgPHA+KDxpbWcgYm9yZGVyPSIwIiBzcmM9Im5ldy5naWYiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiI+IG5ldykgPHN0cm9uZz5BbnQgZGVidWdnZXIuPC9zdHJvbmc+IAogICAgUHJvdmlkZSBhbiBpbnRlZ3JhdGVkIGRlYnVnZ2VyIGZvciBBbnQgYnVpbGQgZmlsZXMuIFtBbnRdICg8YSBocmVmPSJodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9ODAxNTEiPjgwMTUxPC9hPikgCiAgICBbVGhlbWU6IExhcmdlLXNjYWxlIGRldmVsb3BtZW50XTwvcD4KICA8cD4oPGltZyBib3JkZXI9IjAiIHNyYz0ibmV3LmdpZiIgd2lkdGg9IjEyIiBoZWlnaHQ9IjEyIj4gbmV3KSA8c3Ryb25nPkNvbmN1cnJlbmN5IAogICAgc3VwcG9ydCBmb3IgZGVidWdnZXJzLjwvc3Ryb25nPiBNYW55IGRlYnVnIGFyY2hpdGVjdHVyZXMgcmVxdWlyZSBjb21tdW5pY2F0aW5nIAogICAgd2l0aCBhIHJlbW90ZSBkZWJ1ZyB0YXJnZXQuIFRoZSBkZWJ1ZyB1c2VyIGludGVyZmFjZSBuZWVkcyB0byBiZSByb2J1c3QgaW4gCiAgICB0aGUgZmFjZSBvZiBsYXRlbnQgYW5kIHVucmVsaWFibGUgY29ubmVjdGlvbnMuIFRvIGF2b2lkIGJsb2NraW5nIHRoZSB1c2VyIAogICAgaW50ZXJmYWNlLCB0aGUgZGVidWcgcGxhdGZvcm0gd2lsbCB1c2UgYmFja2dyb3VuZCBqb2JzIHRvIHBlcmZvcm0gb3BlcmF0aW9ucyAKICAgIGFuZCBjb21tdW5pY2F0ZSB3aXRoIGRlYnVnZ2Vycy4gW1BsYXRmb3JtIERlYnVnLCBKRFQgRGVidWddICg8YSBocmVmPSJodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9ODAxNTIiPjgwMTUyPC9hPikgCiAgICBbVGhlbWU6IEJ1aWx0IHRvIGxhc3RdPC9wPgogIDxwPig8aW1nIGJvcmRlcj0iMCIgc3JjPSJuZXcuZ2lmIiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiPiBuZXcpIDxzdHJvbmc+UHJvdmlkZSAKICAgIGJldHRlciB0ZXh0IGVkaXRvciBzdXBwb3J0IGZvciBSQ1AuPC9zdHJvbmc+IFRoZSBsaXN0IG9mIGZ1bmN0aW9ucyB0byBhZGQgCiAgICB3aWxsIGdyb3cgb3ZlciB0aW1lLiBUaGUgaW5pdGlhbCBzZXQgaW5jbHVkZXM6IGFubm90YXRpb24gcHJlc2VudGF0aW9uIGFuZCAKICAgIG5hdmlnYXRpb24sIHVzZXIgYXNzaWduZWQgY29sb3JzIGFuZCBmb250cywgc3BlbGwgY2hlY2tpbmcsIHVzZXIgZGVmaW5lZCwgCiAgICBwZXJzaXN0ZW50IGZvbGRpbmcsIHF1aWNrIGRpZmYsIHRlbXBsYXRlcywgVVJMIGRldGVjdGlvbiBhbmQgaGFuZGxpbmcuIFtQbGF0Zm9ybSAKICAgIFRleHRdICg8YSBocmVmPSJodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9ODAxNTQiPjgwMTU0PC9hPikgCiAgICBbVGhlbWU6IFJpY2ggY2xpZW50IHBsYXRmb3JtXTwvcD4KPC9ibG9ja3F1b3RlPgo8aDQ+RGVmZXJyZWQgSXRlbXMgKEVjbGlwc2UgUGxhdGZvcm0gcHJvamVjdCk8L2g0Pgo8YmxvY2txdW90ZT4gCiAgPHA+PGk+Tm9uZSBhdCB0aGlzIHRpbWUuPC9pPjwvcD4KPC9ibG9ja3F1b3RlPgo8cD4oRW5kIG9mIGl0ZW1zIGZvciBFY2xpcHNlIFBsYXRmb3JtIHByb2plY3QuKTwvcD4KPGgyPjxhIG5hbWU9IkpEVCI+SmF2YSBkZXZlbG9wbWVudCB0b29scyAoSkRUKSBwcm9qZWN0PC9hPjwvaDI+CjxwPjxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvamR0L2luZGV4Lmh0bWwiPkphdmEgZGV2ZWxvcG1lbnQgdG9vbHM8L2E+IChKRFQpCmltcGxlbWVudHMgYSBKYXZhIElERSBiYXNlZCBvbiB0aGUgRWNsaXBzZSBQbGF0Zm9ybS4gVGhlIGZvbGxvd2luZyB3b3JrIGl0ZW1zCnJlZmxlY3QgbmV3IGZlYXR1cmVzIG9mIEpEVCwgb3IgYXJlYXMgd2hlcmUgZXhpc3RpbmcgZmVhdHVyZXMgd2lsbCBiZQpzaWduaWZpY2FudGx5IHJld29ya2VkLjwvcD4KPGg0PkNvbW1pdHRlZCBJdGVtcyAoRWNsaXBzZSBKRFQgcHJvamVjdCwpPC9oND4KPGJsb2NrcXVvdGU+IAogIDxwPig8aW1nIGJvcmRlcj0iMCIgc3JjPSJuZXcuZ2lmIiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiPiB1cGRhdGVkIGl0ZW0pIDxiPkFkZCAKICAgIHN1cHBvcnQgZm9yIEoyU0UgNSBmZWF0dXJlcy4gPC9iPkoyU0UgNSAoYWxzbyBrbm93biBhcyBKREsgMS41ICZxdW90O1RpZ2VyJnF1b3Q7KSAKICAgIGlzIHRhcmdldGVkIHRvIHNoaXAgaW4gdGhlIHNlY29uZCBoYWxmIG9mIDIwMDQuIFRoaXMgcmVsZWFzZSBjb250YWlucyA8YSBocmVmPSJodHRwOi8vZG93bmxvYWQub3JhY2xlLmNvbS9qYXZhc2UvMS41LjAvZG9jcy9ndWlkZS9sYW5ndWFnZS9pbmRleC5odG1sIj5uZXcgCiAgICBKYXZhIGxhbmd1YWdlIGZlYXR1cmVzPC9hPiwgaW5jbHVkaW5nIGdlbmVyaWMgdHlwZXMsIHR5cGVzYWZlIGVudW1lcmF0aW9ucywgCiAgICBhdXRvYm94aW5nLCBlbmhhbmNlZCBmb3IgbG9vcHMsIHN0YXRpYyBpbXBvcnRzLCB2YXJhcmdzLCBhbmQgYW5ub3RhdGlvbnMuIAogICAgU3VwcG9ydGluZyB0aGVzZSBuZXcgbGFuZ3VhZ2UgYW5kIGNvbXBpbGVyIGZlYXR1cmVzIHJlcXVpcmVzIG1ham9yIGNoYW5nZXMgCiAgICB0byB0aGUgRWNsaXBzZSBKYXZhIGNvbXBpbGVyLCB0byBKRFQgQ29yZSBBUElzLCB0byBKRFQgVUksIGFuZCB0byBKRFQgRGVidWcuIAogICAgRWNsaXBzZSBzaG91bGQgY29udGFpbiBmdWxsIHN1cHBvcnQgZm9yIGRldmVsb3BpbmcgSmF2YSBwcm9ncmFtcyB0aGF0IHVzZSAKICAgIHRoZSBuZXcgbGFuZ3VhZ2UgZmVhdHVyZXMsIGluY2x1ZGluZyBjb2RlIGFzc2lzdCwgcXVpY2sgZml4ZXMsIG5ldyB3aXphcmRzLCAKICAgIHNvdXJjZSBhY3Rpb25zLCBhbmQgcmVmYWN0b3JpbmdzLiBUaGVyZSBzaG91bGQgYWxzbyBiZSBxdWljayBhc3Npc3RzIGFuZCByZWZhY3RvcmluZ3MgCiAgICBmb3IgbWlncmF0aW5nIGV4aXN0aW5nIEphdmEgY29kZSB0byB0aGUgbmV3IGxhbmd1YWdlIGNvbnN0cnVjdHMsIGluY2x1ZGluZyAKICAgIGluZmVycmluZyB0eXBlIHBhcmFtZXRlcnMgZm9yIENvbGxlY3Rpb25zLCBhbmQgY29udmVydGluZyBzaW1wbGUgZm9yIGxvb3BzIAogICAgdG8gdXNlIHRoZSBlbmhhbmNlZCBmb3IgbG9vcC4gW0pEVCBDb3JlLCBKRFQgVUksIEpEVCBUZXh0LCBKRFQgRGVidWddICg8YSBocmVmPSJodHRwOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0zNjkzOCI+MzY5Mzg8L2E+KSAKICAgIFtUaGVtZTogSjJTRSA1IHN1cHBvcnRdPC9wPgogIDxwPig8aW1nIGJvcmRlcj0iMCIgc3JjPSJuZXcuZ2lmIiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiPiBuZXcpIDxzdHJvbmc+SW1wcm92ZWQgCiAgICBjb21waWxlciBjaGVja2luZy48L3N0cm9uZz4gQWRkIHN1cHBvcnQgZm9yIGRldGVjdGluZyByZWZlcmVuY2VzIHRvIGludGVybmFsIAogICAgY2xhc3NlcywgYWRkIHdhcm5pbmdzIGFib3V0IG1pc3NpbmcgZGVjbGFyYXRpb25zIG9mIHNlcmlhbFZlcnNpb25VSUQsIGFuZCAKICAgIHBlcmZvcm0gbnVsbCByZWZlcmVuY2UgYW5hbHlzaXMuIFtKRFQgQ29yZV0gKDxhIGhyZWY9Imh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD04MDE1NSI+ODAxNTU8L2E+KSAKICAgIFtUaGVtZTogTGFyZ2Utc2NhbGUgZGV2ZWxvcG1lbnRdPC9wPgogIDxwPig8aW1nIGJvcmRlcj0iMCIgc3JjPSJuZXcuZ2lmIiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiPiBuZXcpIDxzdHJvbmc+SW1wcm92ZSAKICAgIHN1cHBvcnQgZm9yIGV4dGVybmFsaXplZCBzdHJpbmdzLjwvc3Ryb25nPiBQcm92aWRlIGEgc2VwYXJhdGUgcHJvcGVydGllcyBmaWxlIAogICAgZWRpdG9yLCBhbmQgZW5oYW5jZSB0aGUgSmF2YSBlZGl0b3IgdG8gZGlzcGxheSB0aGUgdmFsdWUgb2YgYW5kIG5hdmlnYXRlIGZyb20gCiAgICBhbiBOTFMga2V5IGluIGNvZGUgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGVudHJ5IGluIHRoZSBwcm9wZXJ0aWVzIGZpbGUuIFtKRFQgCiAgICBUZXh0XSAoPGEgaHJlZj0iaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTgwMTU2Ij44MDE1NjwvYT4pIAogICAgW1RoZW1lOiBMYXJnZS1zY2FsZSBkZXZlbG9wbWVudF08L3A+CiAgPHA+KDxpbWcgYm9yZGVyPSIwIiBzcmM9Im5ldy5naWYiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiI+IG5ldykgPHN0cm9uZz5FeHBvc2UgCiAgICBKYXZhIGVkaXRvciBmdW5jdGlvbmFsaXR5Ljwvc3Ryb25nPiBNYWtlIGZ1bmN0aW9uYWxpdHkgY3VycmVudGx5IGZvdW5kIGluIAogICAgdGhlIEphdmEgZWRpdG9yIGF2YWlsYWJsZSB0byBvdGhlciBwbHVnLWlucyBieSBwdXNoaW5nIGl0IGRvd24gaW50byBQbGF0Zm9ybSAKICAgIFRleHQuIFRoaXMgaW5jbHVkZXMgaHlwZXJsaW5rIHN0eWxlIG5hdmlnYXRpb24sIGFubm90YXRpb24gbmF2aWdhdGlvbiwgc3BlbGwgCiAgICBjaGVja2luZywgYW5kIHF1aWNrIGZpeCBpbmZyYXN0cnVjdHVyZS4gW0pEVCBUZXh0OyBQbGF0Zm9ybSBUZXh0XSAoPGEgaHJlZj0iaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTgwMTU3Ij44MDE1NzwvYT4pIAogICAgW1RoZW1lOiBCdWlsdCB0byBsYXN0XTwvcD4KICA8cD4oPGltZyBib3JkZXI9IjAiIHNyYz0ibmV3LmdpZiIgd2lkdGg9IjEyIiBoZWlnaHQ9IjEyIj4gbmV3KSA8c3Ryb25nPkRlYnVnZ2VyIAogICAgdXNhYmlsaXR5IGltcHJvdmVtZW50cy48L3N0cm9uZz4gSW50ZWdyYXRlIG1vbml0b3IgbG9ja3MgaW50byB0aGUgZGVidWcgdmlldywgCiAgICBzaG93IHZhcmlhYmxlIHZhbHVlcyBpbmxpbmUsIHN1cHBvcnQgaHlwZXJsaW5rLXN0eWxlIG5hdmlnYXRpb24gZnJvbSB0aGUgdGV4dCAKICAgIG9mIGFueSBzdGFjayB0cmFjZS4gW0pEVCBEZWJ1ZzsgUGxhdGZvcm0gRGVidWddICg8YSBocmVmPSJodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9ODAxNTgiPjgwMTU4PC9hPikgCiAgICBbVGhlbWU6IFNpbXBsZSB0byB1c2VdPC9wPgogIDxwPig8aW1nIGJvcmRlcj0iMCIgc3JjPSJuZXcuZ2lmIiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiPiBuZXcpIDxzdHJvbmc+SW1wb3J0L2V4cG9ydCAKICAgIG9mIEFudCBidWlsZCBmaWxlcy48L3N0cm9uZz4gVXNpbmcgaW5mb3JtYXRpb24gZnJvbSB0aGUgamF2YWMgdGFzayBpbiBhbiBleGlzdGluZyAKICAgIEFudCBidWlsZCBmaWxlLCBjcmVhdGUgYSBKYXZhIHByb2plY3QsIGltcG9ydCB0aGUgc291cmNlIGZpbGVzLCBhbmQgY29uZmlndXJlIAogICAgdGhlIHByb2plY3QncyBidWlsZCBjbGFzcyBwYXRoLiBDb252ZXJzZWx5LCBmcm9tIGFuIGV4aXN0aW5nIEphdmEgcHJvamVjdCAKICAgIGdlbmVyYXRlIGFuIEFudCBidWlsZCBmaWxlIHRoYXQgd2lsbCBjb21waWxlIHRoZSBwcm9qZWN0J3Mgc291cmNlIGZpbGVzLiBbSkRUIAogICAgVUk7IEFudF0gKDxhIGhyZWY9Imh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD04MDE1OSI+ODAxNTk8L2E+KSAKICAgIFtUaGVtZTogTGFyZ2Utc2NhbGUgZGV2ZWxvcG1lbnRdPC9wPgo8L2Jsb2NrcXVvdGU+CjxoND5Qcm9wb3NlZCBJdGVtcyAoRWNsaXBzZSBKRFQgcHJvamVjdCk8L2g0Pgo8YmxvY2txdW90ZT4gCiAgPHA+KDxpbWcgYm9yZGVyPSIwIiBzcmM9Im5ldy5naWYiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiI+IHVwZGF0ZWQgaXRlbSkgPGI+SW1wcm92ZSAKICAgIHByb2dyYW0gbWFuaXB1bGF0aW9uIGluZnJhc3RydWN0dXJlLjwvYj4gUGFydHMgb2YgdGhlIEphdmEgbW9kZWwgYXJlIHN0aWxsIAogICAgaW1wbGVtZW50ZWQgaW4gdGVybXMgb2YgdGhlIGRlcHJlY2F0ZWQgSkRPTSwgYW4gZWFybHkgcHJlY3Vyc29yIG9mIHRoZSBBU1QgCiAgICBmYWNpbGl0eS4gSkRUIHNob3VsZCBtb3ZlIHRvIGFuIEFTVC1iYXNlZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgSmF2YSBtb2RlbC4gCiAgICBBbGwgc291cmNlIGFuZCByZWZhY3RvcmluZyBvcGVyYXRpb25zIHNob3VsZCBiZSByZXdyaXR0ZW4gdG8gdXNlIGNvbW1vbiBwcm9ncmFtIAogICAgbWFuaXB1bGF0aW9uIGluZnJhc3RydWN0dXJlIGJhc2VkIG9uIEFTVHMgYW5kIEFTVCByZXdyaXRpbmcuIEFTVCBjcmVhdGlvbiAKICAgIGluIHRoZSBwcmVzZW5jZSBvZiBzeW50YXggZXJyb3JzIHNob3VsZCBiZSBpbXByb3ZlZCB0byBpbmNsdWRlIHBhcnRpYWwgYmluZGluZ3MuIAogICAgVGhlIGdvYWwgaXMgdG8gc3VwcG9ydCBzdGF0ZW1lbnQgbGV2ZWwgcmVjb3ZlcnkgaW4gdGhlIEFTVCBwYXJzZXIuIFRoZSBwZXJmb3JtYW5jZSAKICAgIG9mIEFTVCBjcmVhdGlvbiBzaG91bGQgYmUgaW1wcm92ZWQgYnkgdXNpbmcgYSBzcGVjaWFsIHBhcnNlciBhbmQgZWxpbWluYXRpbmcgCiAgICBvbmUgaW50ZXJuYWwgbGF5ZXIgb2YgQVNUcy4gVGhlcmUgc2hvdWxkIGFsc28gYmUgYmV0dGVyIHN1cHBvcnQgZm9yIG5hdmlnYXRpbmcgCiAgICBiZXR3ZWVuIGEgbm9kZSBpbiBhbiBBU1QgKG9yIGFuIEFTVCBiaW5kaW5nKSBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudCAKICAgIGluIHRoZSBKYXZhIG1vZGVsICh3aGljaCB3b3VsZCBiZW5lZml0IHZpZXdzIHRoYXQgcHJlc2VudCB0eXBlIGhpZXJhcmNoaWVzKS4gCiAgICBbSkRUIENvcmUsIEpEVCBVSV0gKDxhIGhyZWY9Imh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD03MTEyOSI+NzExMjk8L2E+KSAKICAgIFtUaGVtZTogQnVpbHQgdG8gbGFzdF08L3A+CiAgPHA+ICg8aW1nIGJvcmRlcj0iMCIgc3JjPSJuZXcuZ2lmIiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiPiB1cGRhdGVkIGl0ZW0pIDxzdHJvbmc+U2VhcmNoIAogICAgZW5oYW5jZW1lbnRzLjwvc3Ryb25nPiBQcm92aWRlIGFkZGl0aW9uYWwgc2VhcmNoIHF1ZXJpZXMgdG8gZW5hYmxlIG1vcmUgcHJlY2lzZSAKICAgIHNlYXJjaGluZzsgZS5nLiwgZmluZCB3aGVyZSBpcyBhIGV4Y2VwdGlvbiB0aHJvd24vY2F1Z2h0LCBtYXRjaCBhZ2FpbnN0IG1ldGhvZCAKICAgIHBhcmFtZXRlcnMgaW4gcmVmZXJlbmNlIHNlYXJjaGVzLiBbSkRUIENvcmUsIEpEVCBVSV0gKDxhIGhyZWY9Imh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD03MTEzMCI+NzExMzA8L2E+KSAKICAgIFtUaGVtZTogU2ltcGxlIHRvIHVzZV08L3A+CiAgPHA+KDxpbWcgYm9yZGVyPSIwIiBzcmM9Im5ldy5naWYiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiI+IG5ldykgPHN0cm9uZz5MaWJyYXJ5IAogICAgcHJvamVjdHMuPC9zdHJvbmc+IEZvciBwbHVnLWluIGRldmVsb3BtZW50LCBQREUgZGlzdGluZ3Vpc2hlcyBiZXR3ZWVuIHRoZSAKICAgIHBsdWctaW4gcHJvamVjdHMgeW91IGFyZSB3b3JraW5nIG9uIChzb3VyY2UgcGx1Zy1pbiBwcm9qZWN0cykgYW5kIHBsdWctaW4gCiAgICBwcm9qZWN0cyB5b3UgYXJlIHdvcmtpbmcgd2l0aCBidXQgbm90IGFjdHVhbGx5IGNoYW5naW5nIChiaW5hcnkgcGx1Zy1pbiBwcm9qZWN0cykuIAogICAgTWFraW5nIHRoaXMgZGlzdGluY3Rpb24gYWZmb3J0cyB0aGUgdXNlciB0aGUgYmVuZWZpdHMgb2YgaGF2aW5nIGZ1bGwgc291cmNlIAogICAgZm9yIGV2ZXJ5dGhpbmcgaW4gdGhlaXIgd29ya3NwYWNlIHdoZXJlIGl0J3MgZWFzaWx5IGJyb3dzZWQgYW5kIHNlYXJjaGVkLCAKICAgIHdoaWxlIHBlcm1pdHRpbmcgZWNvbm9taWVzIGJlY2F1c2UgdGhlIGxhdHRlciBraW5kIG9mIHByb2plY3RzIGRvIG5vdCBhY3R1YWxseSAKICAgIGhhdmUgdG8gYmUgKHJlKWNvbXBpbGVkLiBUaGlzIHdvcmsgaXRlbSBpcyB0byBzdXBwb3J0IGEgc2ltaWxhciBub3Rpb24gb2YgCiAgICBsaWJyYXJ5IHByb2plY3QgZm9yIEphdmEgZGV2ZWxvcG1lbnQgaW4gZ2VuZXJhbC4gVGhlIHVzZXIgd291bGQgYmUgYWJsZSB0byAKICAgIGZsYWcgYSBKYXZhIHByb2plY3QgYXMgYSBsaWJyYXJ5IHByb2plY3Q7IEpEVCB3b3VsZCBrbm93IGhvdyBwcmVzZW50IGxpYnJhcnkgCiAgICBwcm9qZWN0cyBhcHByb3ByaWF0ZWx5IGF0IHRoZSBVSSwgYW5kIGhvdyB0byBkZWFsIHdpdGggdGhlbSBtb3JlIGVmZmljaWVudGx5IAogICAgdXNpbmcgZ2VuZXJhdGVkIGJpbmFyaWVzLiBbSkRUIENvcmUsIEpEVCBVSV0gKDxhIGhyZWY9Imh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD04MDE2MiI+ODAxNjI8L2E+KSAKICAgIFtUaGVtZTogTGFyZ2Utc2NhbGUgZGV2ZWxvcG1lbnRdPC9wPgogIDwvYmxvY2txdW90ZT4KPGg0PkRlZmVycmVkIEl0ZW1zIChFY2xpcHNlIEpEVCBwcm9qZWN0KTwvaDQ+CjxibG9ja3F1b3RlPgogIDxwPjxpPk5vbmUgYXQgdGhpcyB0aW1lLjwvaT48L3A+CjwvYmxvY2txdW90ZT4KPHA+KEVuZCBvZiBpdGVtcyBmb3IgRWNsaXBzZSBKRFQgcHJvamVjdC4pCjxoMj48YSBuYW1lPSJQREUiPlBsdWctaW4gZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgKFBERSkgcHJvamVjdDwvYT48L2gyPgpUaGUgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9wZGUvaW5kZXguaHRtbCI+cGx1Zy1pbiBkZXZlbG9wbWVudAplbnZpcm9ubWVudDwvYT4gIChQREUpIGNvbnNpc3RzIG9mJm5ic3A7dG9vbHMgZm9yIGRldmVsb3BpbmcgcGx1Zy1pbnMgZm9yIHRoZQpFY2xpcHNlIFBsYXRmb3JtLiBUaGUgZm9sbG93aW5nIHdvcmsgaXRlbXMgcmVmbGVjdCBuZXcgZmVhdHVyZXMgb2YgUERFLCBvciBhcmVhcwp3aGVyZSBleGlzdGluZyBmZWF0dXJlcyB3aWxsIGJlIHNpZ25pZmljYW50bHkgcmV3b3JrZWQuCjxoND5Db21taXR0ZWQgSXRlbXMgKEVjbGlwc2UgUERFIHByb2plY3QpPC9oND4KPGJsb2NrcXVvdGU+CiAgPHA+PGk+Tm9uZSBhdCB0aGlzIHRpbWUuPC9pPjwvcD4KPC9ibG9ja3F1b3RlPgo8aDQ+UHJvcG9zZWQgSXRlbXMgKEVjbGlwc2UgUERFIHByb2plY3QpPC9oND4KPGJsb2NrcXVvdGU+IAogIDxwPjxiPlJDUCBzdXBwb3J0LjwvYj4gUERFIGN1cnJlbnRseSBzdXBwb3J0cyBkZXZlbG9waW5nIEVjbGlwc2UgcGx1Zy1pbnMsIGJ1dCAKICAgIGlzIG5vdCBleHByZXNzbHkgZ2VhcmVkIGZvciB0aGUgc3BlY2lmaWMgbmVlZHMgb2YgY2xpZW50cyBkZXZlbG9waW5nIGFwcGxpY2F0aW9ucyAKICAgIGJhc2VkIG9uIHRoZSBSQ1AuIFBERSBzaG91bGQgZmFjaWxpdGF0ZSBkZXZlbG9waW5nIGFuZCBkZXBsb3lpbmcgUkNQLWJhc2VkIAogICAgYXBwbGljYXRpb25zLiAoPGEgaHJlZj0iaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTcxMTMxIj43MTEzMTwvYT4pIAogICAgW1RoZW1lOiBSaWNoIGNsaWVudCBwbGF0Zm9ybV08L3A+CiAgPHA+ICg8aW1nIGJvcmRlcj0iMCIgc3JjPSJuZXcuZ2lmIiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiPiBuZXcpIDxzdHJvbmc+SW1wcm92ZWQgCiAgICB0YXJnZXQgc3VwcG9ydC48L3N0cm9uZz4gUERFIG1hbmFnZXMgYSBtb2RlbCBvZiB0aGUgdGFyZ2V0IEVjbGlwc2UgZm9yIHdoaWNoIAogICAgeW91IGFyZSBkZXZlbG9waW5nLiBUaGVzZSB0YXJnZXRzIG1heSBiZSBjb21wbGV4IGFuZCBkaXZlcnNlIGFuZCBzd2l0Y2hpbmcgCiAgICB0YXJnZXRzIG9yIGxhdW5jaCBjb25maWd1cmF0aW9ucyBjYW4gYmUgZXhwZW5zaXZlLiBQREUgd2lsbCBiZSBleHRlbmRlZCB0byAKICAgIHN1cHBvcnQgbmFtZWQgdGFyZ2V0cywgYW5kIGF1dG9tYXRpY2FsbHkgdHJhY2sgY2hhbmdlcyB0byB0aGUgd29ya3NwYWNlIGFmZmVjdGluZyAKICAgIHRhcmdldHMuIFtQREVdICg8YSBocmVmPSJodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9ODAxNjMiPjgwMTYzPC9hPikgCiAgICBbVGhlbWU6IFJpY2ggY2xpZW50IHBsYXRmb3JtXTwvcD4KICA8cD4oPGltZyBib3JkZXI9IjAiIHNyYz0ibmV3LmdpZiIgd2lkdGg9IjEyIiBoZWlnaHQ9IjEyIj4gbmV3KSA8c3Ryb25nPk9TR2kgCiAgICBidW5kbGUgbWFuaWZlc3QgdG9vbGluZy48L3N0cm9uZz4gSW4gT1NHaSwgYnVuZGxlcyBhcmUgZGVmaW5lZCB1c2luZyBzdGFuZGFyZCAKICAgIEpBUiBtYW5pZmVzdC5tZiBmaWxlcy4gUERFIDMuMCBjb250YWlucyBhIHJ1ZGltZW50YXJ5IG1hbmlmZXN0IGVkaXRvci4gVGhpcyAKICAgIHN1cHBvcnQgd2lsbCBiZSBleHBhbmRlZCBpbiAzLjEgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBpbXBvcnQvZXhwb3J0IHBhY2thZ2UsIAogICAgZGVjbGFyYXRpdmUgc2VydmljZXMsIGluY3JlYXNlZCBkZXBlbmRlbmN5IHZhbGlkYXRpb24sIGFuZCB0b29scyBmb3IgJnF1b3Q7YnVuZGxpemluZyZxdW90OyAKICAgIHRoaXJkLXBhcnR5IG5vbi1FY2xpcHNlIEpBUnMuIFtQREVdICg8YSBocmVmPSJodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9ODAxNjUiPjgwMTY1PC9hPikgCiAgICBbVGhlbWU6IFJpY2ggY2xpZW50IHBsYXRmb3JtXTwvcD4KICA8L2Jsb2NrcXVvdGU+CjxoND5EZWZlcnJlZCBJdGVtcyAoRWNsaXBzZSBQREUgcHJvamVjdCk8L2g0Pgo8YmxvY2txdW90ZT4KICA8cD48aT5Ob25lIGF0IHRoaXMgdGltZS48L2k+PC9wPgo8L2Jsb2NrcXVvdGU+CjxoND4oRW5kIG9mIGl0ZW1zIGZvciBFY2xpcHNlIFBERSBwcm9qZWN0Lik8L2g0Pgo8L2JvZHk+Cgo8L2h0bWw+