PGh0bWw+CjwhLS0KICAgICBDb3B5cmlnaHQgKGMpIDIwMDAgSmVyZW15IFNpZWsKICAgIAogICAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KICAgICAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0CiAgICAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQogIC0tPgoKPGhlYWQ+CjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+CjxtZXRhIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iTWljcm9zb2Z0IEZyb250UGFnZSA0LjAiPgo8bWV0YSBuYW1lPSJQcm9nSWQiIGNvbnRlbnQ9IkZyb250UGFnZS5FZGl0b3IuRG9jdW1lbnQiPgo8dGl0bGU+SW52ZXJzZSBBZGphY2VuY3kgSXRlcmF0b3IgQWRhcHRvciBEb2N1bWVudGF0aW9uPC90aXRsZT4KPC9oZWFkPgoKPGJvZHkgYmdjb2xvcj0iI0ZGRkZGRiIgdGV4dD0iIzAwMDAwMCI+Cgo8aW1nIHNyYz0iLi4vLi4vLi4vYm9vc3QucG5nIiBhbHQ9ImJvb3N0LnBuZyAoNjg5NyBieXRlcykiCmFsaWduPSJjZW50ZXIiIHdpZHRoPSIyNzciIGhlaWdodD0iODYiPgoKPGgxPkludmVyc2UgQWRqYWNlbmN5IEl0ZXJhdG9yIEFkYXB0b3I8L2gxPgoKRGVmaW5lZCBpbiBoZWFkZXIKPGEgaHJlZj0iLi4vLi4vLi4vYm9vc3QvZ3JhcGgvYWRqYWNlbmN5X2l0ZXJhdG9yLmhwcCI+Ym9vc3QvZ3JhcGgvYWRqYWNlbmN5X2l0ZXJhdG9yLmhwcDwvYT4KCjxwPgpUaGUgaW52ZXJzZSBhZGphY2VuY3kgaXRlcmF0b3IgYWRhcHRvciB0cmFuc2Zvcm1zIGFuCjx0dD5pbl9lZGdlX2l0ZXJhdG9yPC90dD4gaW50byBhbiBpbnZlcnNlIGFkamFjZW5jeSBpdGVyYXRvci4gVGhhdCBpcywgaXQKdGFrZXMgYW4gaXRlcmF0b3IgdGhhdCB0cmF2ZXJzZXMgb3ZlciBlZGdlcywgYW5kIGNyZWF0ZXMgYW4gaXRlcmF0b3IKdGhhdCB0cmF2ZXJzZXMgb3ZlciB0aGUgPGI+PGk+c291cmNlPC9pPjwvYj4gdmVydGljZXMgb2YgdGhvc2UgZWRnZXMuCgo8IS0tCldpdGggdGhpcyBhZGFwdG9yIGl0IGlzIHRyaXZpYWwgdG8gdGFrZSBhIGdyYXBoIHR5cGUgdGhhdCBtb2RlbHMgPGEKaHJlZj0iSW5jaWRlbmNlR3JhcGguaHRtbCI+SW5jaWRlbmNlIEdyYXBoPC9hPiBhbmQgYWRkIHRoZQpjYXBhYmlsaXRpZXMgcmVxdWlyZWQgb2YgPGEgaHJlZj0iQWRqYWNlbmN5R3JhcGguaHRtbCI+QWRqYWNlbmN5CkdyYXBoPC9hPi4gLS0+CgoKPGgyPlN5bm9wc2lzPC9oMj4KCjxwcmU+Cm5hbWVzcGFjZSBib29zdCB7CiAgdGVtcGxhdGUgJmx0O2NsYXNzIEdyYXBoLCBjbGFzcyBWZXJ0ZXhEZXNjcmlwdG9yLCBjbGFzcyBJbkVkZ2VJdGVyJmd0OwogIGNsYXNzIGludl9hZGphY2VuY3lfaXRlcmF0b3JfZ2VuZXJhdG9yIHsKICBwdWJsaWM6CiAgICB0eXBlZGVmIDxhIGhyZWY9Ii4uLy4uL2l0ZXJhdG9yL2RvYy9pdGVyYXRvcl9hZGFwdG9yLmh0bWwiPml0ZXJhdG9yX2FkYXB0b3I8L2E+Jmx0Oy4uLiZndDsgdHlwZTsKICB9Owp9CjwvcHJlPgoKPGhyPgoKPGgzPkV4YW1wbGU8L2gzPgoKPHA+ClRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBvZiBob3cgdG8gdXNlIHRoZQo8dHQ+aW52X2FkamFjZW5jeV9pdGVyYXRvcl9nZW5lcmF0b3I8L3R0PiBjbGFzcy4KCjxwPgo8UFJFPgojaW5jbHVkZSAmbHQ7Ym9vc3QvZ3JhcGgvYWRqYWNlbmN5X2l0ZXJhdG9yLmhwcCZndDsKCmNsYXNzIG15X2dyYXBoIHsKICAvLyAuLi4KICB0eXBlZGVmIC4uLiBpbl9lZGdlX2l0ZXJhdG9yOwogIHR5cGVkZWYgLi4uIHZlcnRleF9kZXNjcmlwdG9yOwogIHR5cGVkZWYgYm9vc3Q6Omludl9hZGphY2VuY3lfaXRlcmF0b3JfZ2VuZXJhdG9yJmx0O215X2dyYXBoLCB2ZXJ0ZXhfZGVzY3JpcHRvciwgaW5fZWRnZV9pdGVyYXRvciZndDs6OnR5cGUgaW52X2FkamFjZW5jeV9pdGVyYXRvcjsKICAvLyAuLi4KfTsKCjwvUFJFPgoKPGgzPlRlbXBsYXRlIFBhcmFtZXRlcnM8L2gzPgoKPFRhYmxlIGJvcmRlcj4KPFRSPgo8VEg+UGFyYW1ldGVyPC9USD48VEg+RGVzY3JpcHRpb248L1RIPgo8L1RSPgoKPFRSPgo8VEQ+PHR0PkdyYXBoPC90dD48L1REPgo8VEQ+VGhlIGdyYXBoIHR5cGUsIHdoaWNoIG11c3QgbW9kZWwgPGEKaHJlZj0iLi9JbmNpZGVuY2VHcmFwaC5odG1sIj5JbmNpZGVuY2UgR3JhcGg8L2E+LjwvVEQ+CjwvVFI+Cgo8VFI+CjxURD48dHQ+VmVydGV4RGVzY3JpcHRvcjwvdHQ+PC9URD4KPFREPlRoaXMgbXVzdCBiZSB0aGUgc2FtZSB0eXBlIGFzCjx0dD5ncmFwaF90cmFpdHMmbHQ7R3JhcGgmZ3Q7Ojp2ZXJ0ZXhfZGVzY3JpcHRvcjwvdHQ+LiAgVGhlIHJlYXNvbiB3aHkKdGhpcyBpcyBhIHRlbXBsYXRlIHBhcmFtZXRlciBpcyB0aGF0IHRoZSBwcmltYXJ5IHVzZSBvZgo8dHQ+aW52X2FkamFjZW5jeV9pdGVyYXRvcl9nZW5lcmF0b3I8L3R0PiBpcyA8Yj48aT5pbnNpZGU8L2k+PC9iPiB0aGUKZGVmaW5pdGlvbiBvZiB0aGUgZ3JhcGggY2xhc3MsIGFuZCBpbiB0aGF0IGNvbnRleHQgd2UgY2FuIG5vdCB1c2UKPHR0PmdyYXBoX3RyYWl0czwvdHQ+IG9uIHRoZSBub3QgeWV0IGZ1bGx5IGRlZmluZWQgZ3JhcGggY2xhc3MuPGJyPgo8Yj5EZWZhdWx0OjwvYj4gPHR0PmdyYXBoX3RyYWl0cyZsdDtHcmFwaCZndDs6OnZlcnRleF9kZXNjcmlwdG9yPC90dD48L1REPgo8L1RSPgoKPFRSPgo8VEQ+PHR0PkluRWRnZUl0ZXI8L3R0PjwvVEQ+CjxURD5UaGlzIG11c3QgYmUgdGhlIHNhbWUgdHlwZSBhcwo8dHQ+Z3JhcGhfdHJhaXRzJmx0O0dyYXBoJmd0Ozo6aW5fZWRnZV9pdGVyYXRvcjwvdHQ+Ljxicj4KPGI+RGVmYXVsdDo8L2I+IDx0dD5ncmFwaF90cmFpdHMmbHQ7R3JhcGgmZ3Q7Ojppbl9lZGdlX2l0ZXJhdG9yCjwvVEQ+CjwvVFI+Cgo8L1RhYmxlPgoKPGgzPk1vZGVsIG9mPC9oMz4KClRoZSBpbnZlcnNlIGFkamFjZW5jeSBpdGVyYXRvciBhZGFwdG9yICh0aGUgdHlwZQo8dHQ+aW52X2FkamFjZW5jeV9pdGVyYXRvcl9nZW5lcmF0b3I8Li4uPjo6dHlwZTwvdHQ+KSBpcyBhIG1vZGVsIG9mIDxhCmhyZWY9Ii4uLy4uL3V0aWxpdHkvTXVsdGlQYXNzSW5wdXRJdGVyYXRvci5odG1sIj5NdWx0aS1QYXNzIElucHV0IEl0ZXJhdG9yPC9hPgo8L2E+LgoKCjxoMz5NZW1iZXJzPC9oMz4KClRoZSBpbnZlcnNlIGFkamFjZW5jeSBpdGVyYXRvciB0eXBlIGltcGxlbWVudHMgdGhlIG1lbWJlciBmdW5jdGlvbnMgYW5kCm9wZXJhdG9ycyByZXF1aXJlZCBvZiB0aGUgPGEKaHJlZj0iaHR0cDovL3d3dy5zZ2kuY29tL3RlY2gvc3RsL1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLmh0bWwiPlJhbmRvbSBBY2Nlc3MgSXRlcmF0b3I8L2E+CmNvbmNlcHQsIGV4Y2VwdCB0aGF0IHRoZSA8dHQ+cmVmZXJlbmNlPC90dD4gdHlwZSBpcyB0aGUgc2FtZSBhcyB0aGUgPHR0PnZhbHVlX3R5cGU8L3R0PgpzbyA8dHQ+b3BlcmF0b3IqKCk8L3R0PiByZXR1cm5zIGJ5LXZhbHVlLiBJbiBhZGRpdGlvbiBpdCBoYXMgdGhlIGZvbGxvd2luZyBjb25zdHJ1Y3RvcjoKCjxwcmU+Cmludl9hZGphY2VuY3lfaXRlcmF0b3JfZ2VuZXJhdG9yOjp0eXBlKGNvbnN0IEluRWRnZUl0ZXImYW1wOyBpdCwgY29uc3QgR3JhcGgqIGcpCjwvcHJlPgoKPGhyPgo8cD5SZXZpc2VkIDwhLS13ZWJib3QgYm90PSJUaW1lc3RhbXAiIHMtdHlwZT0iRURJVEVEIiBzLWZvcm1hdD0iJWQgJWIgJVkiIHN0YXJ0c3BhbiAtLT4xOSBBdWcgMjAwMTwhLS13ZWJib3QgYm90PSJUaW1lc3RhbXAiIGVuZHNwYW4gaS1jaGVja3N1bT0iMTQ3NjciIC0tPjwvcD4KPHA+qSBDb3B5cmlnaHQgSmVyZW15IFNpZWsgMjAwMC4gUGVybWlzc2lvbiB0byBjb3B5LCB1c2UsCm1vZGlmeSwgc2VsbCBhbmQgZGlzdHJpYnV0ZSB0aGlzIGRvY3VtZW50IGlzIGdyYW50ZWQgcHJvdmlkZWQgdGhpcyBjb3B5cmlnaHQKbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcy4gVGhpcyBkb2N1bWVudCBpcyBwcm92aWRlZCAmcXVvdDthcyBpcyZxdW90Owp3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eSwgYW5kIHdpdGggbm8gY2xhaW0gYXMgdG8gaXRzIHN1aXRhYmlsaXR5IGZvcgphbnkgcHVycG9zZS48L3A+Cgo8L2JvZHk+Cgo8L2h0bWw+Cgo8IS0tICBMb2NhbFdvcmRzOiAgVmVydGV4RGVzY3JpcHRvciBJbkVkZ2VJdGVyIGludiBjb25zdCBBdWcgU2llawogLS0+Cg==