T24gU3VuZGF5LCAyLiBKdW5lIDIwMTMgMTI6Mjg6MjMgQWRyacOhbiBDaGF2ZXMgRmVybsOhbmRl eiB3cm90ZToKPiBUaGFua3MgdG8gYm90aCBvZiB5b3UgYW5kIE1pbGlhbi4gSSBoYXZlIGl0IHdv cmtpbmcgYWxyZWFkeS4KPiAKPiBPbmNlIEkgZ290IHRoZSBlZGl0b3IgdGhlIHJpZ2h0IHdheSwg c2V0dGluZyB0aGUgc3ludGF4IGhpZ2hsaWdodGluZyBJCj4gd2FudGVkIHdhcyBhcyBlYXN5IGFz Ogo+IAo+ICAgICBkb2N1bWVudC0+c2V0SGlnaGxpZ2h0aW5nTW9kZSgibWVkaWF3aWtpIik7CgpO b3cgYXMgYSAxMCB5ZWFycyBrYXRlIGRldmVsb3BlciBJIGRpZG4ndCBzZWUgdGhpcyBzaW1wbGUg c29sdXRpb24sIGxvbC4KCkNoZWVycywKRG9taW5pawoKPiBPIERvbWluZ28sIDIgZGUgWHXDsW8g ZGUgMjAxMyAwMzoxNzowMiBEb21pbmlrIEhhdW1hbm4gZXNjcmliaXU6Cj4gPiBPbiBXZWRuZXNk YXksIDI5LiBNYXkgMjAxMyAyMTozODowMyBBZHJpw6FuIENoYXZlcyBGZXJuw6FuZGV6IHdyb3Rl Ogo+ID4gPiBIaSwKPiA+ID4gCj4gPiA+IEkgd2FudCB0byBzdGFydCBhbiBhcHBsaWNhdGlvbiB3 aXRoIGEgdGV4dCBlZGl0b3IgdGhhdCBwcm92aWRlcyBhCj4gPiA+IHNwZWNpZmljCj4gPiA+IHN5 bnRheCBoaWdobGlnaHRpbmcsIGFzIHRoZSBhcHBsaWNhdGlvbiBpcyBvbmx5IGdvaW5nIHRvIHN1 cHBvcnQgYQo+ID4gPiBzcGVjaWZpYwo+ID4gPiB0eXBlIG9mIGZpbGVzIChNZWRpYVdpa2kpLiBU aGVuIEkgcGxhbiB0byBidWlsZCBzb21lIGZlYXR1cmVzCj4gPiA+IChhdXRvLWNvbXBsZXRlLCBl dGMuKSBvbiB0b3Agb2YgaXQuCj4gPiA+IAo+ID4gPiBOb3QgdG8gcmVpbnZlbnQgdGhlIHdoZWVs LCBJIHdhbnRlZCB0byByZXVzZSBLYXRl4oCZcyB0ZXh0IGVkaXRpb24gd2lkZ2V0Lgo+ID4gPiBJ 4oCZdmUgYWN0dWFsbHkgYmVlbiB3b3JraW5nIG9uIGltcHJvdmluZyB0aGUgTWVkaWFXaWtpIHN5 bnRheAo+ID4gPiBoaWdobGlnaHRpbmcKPiA+ID4gc3VwcG9ydCBpbiBLYXRlLCBzbyByZXVzaW5n IHRoYXQgd29yayBmb3IgbXkgYXBwIHdvdWxkIGJlIGlkZWFsLgo+ID4gPiAKPiA+ID4gU28gSSBm b3VuZCBteXNlbGYgY29weWluZyBhbmQgcGFzdGluZyB0aGUgY29kZSBpbgo+ID4gPiBodHRwOi8v dGVjaGJhc2Uua2RlLm9yZy9EZXZlbG9wbWVudC9UdXRvcmlhbHMvVXNpbmdfS1BhcnRzCj4gPiAK PiA+IEl0J3MgY29ycmVjdCB0aGF0IHRoZSBLVGV4dEVkaXRvciBpbnRlcmZhY2VzIGltcGxlbWVu dCBLUGFydHMuCj4gPiBUaGVyZSBtb3JlIHN0cmFpZ2h0Zm9yd2FyZCB3YXkgdG8gZ2V0IGFuIGVk aXRvciBjb21wb25lbnQgaXMgdG8gdG8gZm9sbG93Cj4gPiBodHRwOi8vYXBpLmtkZS5vcmcvNC4x MC1hcGkva2RlbGlicy1hcGlkb2NzL2ludGVyZmFjZXMva3RleHRlZGl0b3IvaHRtbC9rdAo+ID4g ZV9ob3d0by5odG1sPiAKPiA+IEFzIHlvdSBjYW4gc2VlLCBjcmVhdGluZyBhbiBlZGl0b3IgaXMg c2ltcGx5IGRvbmUgYnk6Cj4gPiAgS1RleHRFZGl0b3I6OkVkaXRvciAqZWRpdG9yID0gS1RleHRF ZGl0b3I6OkVkaXRvckNob29zZXI6OmVkaXRvcigpOwo+ID4gIC8vIGVycm9yIGhhbmRsaW5nIG9t aXR0ZWQKPiA+ICBtX2RvY3VtZW50ID0gZWRpdG9yLT5jcmVhdGVEb2N1bWVudCgwKTsKPiA+ICBt X3ZpZXcgPSBtX2RvY3VtZW50LT5jcmVhdGVWaWV3KHRoaXMpOwo+ID4gIC8vIGhvb2sgdGhpcyB2 aWV3IGludG8gdGhlIGd1aSBzb21ld2hlcmUKPiA+ICAKPiA+ICAvLyBub3cgWE1MIGd1aSBzdHVm ZjoKPiA+ICBzZXRYTUxGaWxlKCJtYWlud2luZG93dWkucmMiKTsKPiA+ICBndWlGYWN0b3J5KCkt PmFkZENsaWVudChtX3ZpZXcpOwo+ID4gCj4gPiBzZXRYTUxGaWxlIHNldHMgeW91ciBndWkucmMg ZmlsZS4gVGhpcyBpcyB3aGVyZSB5b3UgY2FuIGNvbnRyb2wgd2hpY2gKPiA+IGFjdGlvbnMgb2Yg S2F0ZSBhcHBlYXIgaW4gdGhlIGd1aSwgaWlyYy4gSWYgaW4gZG91YnQsIHlvdSBjYW4gYWxzbyBs b29rCj4gPiBhdCB0aGUgS2F0ZSBhcHBsaWNhdGlvbiAoa2F0ZS9hcHAvKikuIFRoZXJlIHdlIGFs c28gc29sZWx5IHVzZSB0aGUKPiA+IGludGVyZmFjZXMgdG8gZ2V0IHRoZSBlZGl0b3IgY29tcG9u ZW50IGluc3RhbmNlLgo+ID4gCj4gPiA+IE5vdyBJIGhhdmUgYSB3b3JraW5nIEthdGVQYXJ0LiBC dXQgSSBoYXZlIG5vIGlkZWEgd2hhdHNvZXZlciBhYm91dAo+ID4gPiBpbnRlcmFjdGluZyB3aXRo IGl0IGZyb20gY29kZSAoc3VjaCBhcyBnZXR0aW5nIGFuIGluc3RhbmNlIG9mCj4gPiA+IEthdGVE b2N1bWVudCkuIEFueSByZWNvbW1lbmRhdGlvbiB0aGF0IHB1dHMgbWUgaW4gdGhlIHJpZ2h0IGRp cmVjdGlvbiB0bwo+ID4gPiBzZXQgdGhlIEthdGVQYXJ0IHN5bnRheCBoaWdobGlnaHRpbmcgZnJv bSBjb2RlPwo+ID4gCj4gPiBPbmUgd2F5IG9mIHNldHRpbmcgdGhlIHN5bnRheCBoaWdobGlnaHRp bmcgaXM6Cj4gPiAjaW5jbHVkZSA8Y29tbWFuZGludGVyZmFjZS5oPgo+ID4gCj4gPiBLVGV4dEVk aXRvcjo6Q29tbWFuZEludGVyZmFjZSAqaWZhY2UgPQo+ID4gcW9iamVjdF9jYXN0PEtUZXh0RWRp dG9yOjpDb21tYW5kSW50ZXJmYWNlKj4oIGVkaXRvciApOyBpZiggaWZhY2UgKSB7Cj4gPiAKPiA+ ICAgS1RleHRFZGl0b3I6OkNvbW1hbmQgKiBzZXRIbCA9IGlmYWNlLT5xdWVyeUNvbW1hbmQoInNl dC1oaWdobGlnaHQiKTsKPiA+ICAgaWYgKHNldEhsKSB7Cj4gPiAgIAo+ID4gICAgIFFTdHJpbmcg ZXJyb3I7Cj4gPiAgICAgc2V0SGwtPmV4ZWModmlldywgInNldC1oaWdobGlnaHQgTWVkaWFXaWtp IiwgZXJyb3IpOwo+ID4gICAKPiA+ICAgfQo+ID4gCj4gPiB9Cj4gPiAKPiA+IFlvdSBjYW4gZ2V0 IGEgbGlzdCBvZiBjb21tYW5kcyBieSBzd2l0Y2hpbmcgaW50byB0aGUgY29tbWFuZCBsaW5lIHdp dGggRjcKPiA+IGluIEthdGUvS3dydGUvS0RldmVsb3AvS2lsZSwgLi4uIEp1c3Qgc3RhcnQgdHlw aW5nIHNldC0KPiA+IAo+ID4gPiBBbHNvLCBJIHdhbnQgdG8gbWFudWFsbHkgZGVmaW5lIHRoZSBj b250ZXh0LW1lbnUgaXRlbXMgYW5kIGFueSBvdGhlcgo+ID4gPiBhY3Rpb25zIGluIHRoZSBpbnRl cmZhY2UsIHNvIEnigJltIG5vdCBjYWxsaW5nIGNyZWF0ZUdVSShtX3BhcnQpLiBNb3N0Cj4gPiA+ IEthdGVQYXJ0PiAKPiA+IFllcyB5b3UgY2FuIHJlbW92ZSBhY3Rpb25zLCBzZWUgYWJvdmUgd2l0 aCB0aGUgWE1MIGZpbGUuCj4gPiAKPiA+ID4gYWN0aW9ucyBJIGRvbuKAmXQgd2FudCB0byBwcm92 aWRlLCBzbyBpcyBLYXRlUGFydCB0aGUgcmlnaHQgY2hvaWNlIGZvciBtZQo+ID4gPiBub25ldGhl bGVzcz8gT3IgaXMgdGhlcmUgYW5vdGhlciB3YXkgKHdpdGhvdXQga3BhcnRzKSBvZiByZXVzaW5n IEthdGXigJlzCj4gPiA+IHRleHQgZWRpdGlvbiB3aWRnZXQgdGhhdCBmaXRzIG15IHVzZSBjYXNl IGJldHRlcj8KPiA+IAo+ID4gWW91IGNhbiBzZXQgdGhlIGNvbnRleHQgbWVudSB3aXRoIFZpZXc6 OnNldENvbnRleHRNZW51Ogo+ID4gaHR0cDovL2FwaS5rZGUub3JnLzQuMTAtYXBpL2tkZWxpYnMt YXBpZG9jcy9pbnRlcmZhY2VzL2t0ZXh0ZWRpdG9yL2h0bWwvY2wKPiA+IGFzc0tUZXh0RWRpdG9y XzFfMVZpZXcuaHRtbCNhYWM2N2YzZDYxZTJmY2VjODM2OWZlMzEwMTJmMjdmYjAKPiA+IAo+ID4g WW91IGNhbiBhbHNvIGFzayBvbiBrd3JpdGUtZGV2ZWxAa2RlLm9yZyBmb3IgZnVydGhlciBoZWxw Lgo+ID4gCj4gPiBHcmVldGluZ3MKPiA+IERvbWluaWsKCj4+IFZpc2l0IGh0dHA6Ly9tYWlsLmtk ZS5vcmcvbWFpbG1hbi9saXN0aW5mby9rZGUtZGV2ZWwjdW5zdWIgdG8gdW5zdWJzY3JpYmUgPDwK