PGh0bWw+CjwhLS0KICAgICBDb3B5cmlnaHQgKGMpIEplcmVteSBTaWVrIDIwMDAKICAgIAogICAgIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KICAgICAoU2VlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0CiAgICAgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQogIC0tPgoKPGhlYWQ+CjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+CjxtZXRhIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iTWljcm9zb2Z0IEZyb250UGFnZSA0LjAiPgo8bWV0YSBuYW1lPSJQcm9nSWQiIGNvbnRlbnQ9IkZyb250UGFnZS5FZGl0b3IuRG9jdW1lbnQiPgo8dGl0bGU+QWRqYWNlbmN5IEl0ZXJhdG9yIEFkYXB0b3IgRG9jdW1lbnRhdGlvbjwvdGl0bGU+CjwvaGVhZD4KCjxib2R5IGJnY29sb3I9IiNGRkZGRkYiIHRleHQ9IiMwMDAwMDAiPgoKPGltZyBzcmM9Ii4uLy4uLy4uL2Jvb3N0LnBuZyIgYWx0PSJib29zdC5wbmcgKDY4OTcgYnl0ZXMpIgphbGlnbj0iY2VudGVyIiB3aWR0aD0iMjc3IiBoZWlnaHQ9Ijg2Ij4KCjxoMT5BZGphY2VuY3kgSXRlcmF0b3IgQWRhcHRvcjwvaDE+CgpEZWZpbmVkIGluIGhlYWRlcgo8YSBocmVmPSIuLi8uLi8uLi9ib29zdC9ncmFwaC9hZGphY2VuY3lfaXRlcmF0b3IuaHBwIj5ib29zdC9ncmFwaC9hZGphY2VuY3lfaXRlcmF0b3IuaHBwPC9hPgoKPHA+ClRoZSBhZGphY2VuY3kgaXRlcmF0b3IgYWRhcHRvciB0cmFuc2Zvcm1zIGFuCjx0dD5vdXRfZWRnZV9pdGVyYXRvcjwvdHQ+IGludG8gYW4gYWRqYWNlbmN5IGl0ZXJhdG9yLiBUaGF0IGlzLCBpdAp0YWtlcyBhbiBpdGVyYXRvciB0aGF0IHRyYXZlcnNlcyBvdmVyIGVkZ2VzLCBhbmQgY3JlYXRlcyBhbiBpdGVyYXRvcgp0aGF0IHRyYXZlcnNlcyBvdmVyIHRoZSA8Yj48aT50YXJnZXQ8L2k+PC9iPiB2ZXJ0aWNlcyBvZiB0aG9zZSBlZGdlcy4KV2l0aCB0aGlzIGFkYXB0b3IgaXQgaXMgdHJpdmlhbCB0byB0YWtlIGEgZ3JhcGggdHlwZSB0aGF0IG1vZGVscyA8YQpocmVmPSJJbmNpZGVuY2VHcmFwaC5odG1sIj5JbmNpZGVuY2UgR3JhcGg8L2E+IGFuZCBhZGQgdGhlCmNhcGFiaWxpdGllcyByZXF1aXJlZCBvZiA8YSBocmVmPSJBZGphY2VuY3lHcmFwaC5odG1sIj5BZGphY2VuY3kKR3JhcGg8L2E+LgoKCjxoMj5TeW5vcHNpczwvaDI+Cgo8cHJlPgpuYW1lc3BhY2UgYm9vc3QgewogIHRlbXBsYXRlICZsdDtjbGFzcyBHcmFwaCwgY2xhc3MgVmVydGV4RGVzY3JpcHRvciwgY2xhc3MgT3V0RWRnZUl0ZXImZ3Q7CiAgY2xhc3MgYWRqYWNlbmN5X2l0ZXJhdG9yX2dlbmVyYXRvciB7CiAgcHVibGljOgogICAgdHlwZWRlZiA8YSBocmVmPSIuLi8uLi9pdGVyYXRvci9kb2MvaXRlcmF0b3JfYWRhcHRvci5odG1sIj5pdGVyYXRvcl9hZGFwdG9yPC9hPiZsdDsuLi4mZ3Q7IHR5cGU7CiAgfTsKfQo8L3ByZT4KCjxocj4KCjxoMz5FeGFtcGxlPC9oMz4KCjxwPgpUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgb2YgaG93IHRvIHVzZSB0aGUKPHR0PmFkamFjZW5jeV9pdGVyYXRvcl9nZW5lcmF0b3I8L3R0PiBjbGFzcy4KCjxwPgo8UFJFPgojaW5jbHVkZSAmbHQ7Ym9vc3QvZ3JhcGgvYWRqYWNlbmN5X2l0ZXJhdG9yLmhwcCZndDsKCmNsYXNzIG15X2dyYXBoIHsKICAvLyAuLi4KICB0eXBlZGVmIC4uLiBvdXRfZWRnZV9pdGVyYXRvcjsKICB0eXBlZGVmIC4uLiB2ZXJ0ZXhfZGVzY3JpcHRvcjsKICB0eXBlZGVmIGJvb3N0OjphZGphY2VuY3lfaXRlcmF0b3JfZ2VuZXJhdG9yJmx0O215X2dyYXBoLCB2ZXJ0ZXhfZGVzY3JpcHRvciwgb3V0X2VkZ2VfaXRlcmF0b3ImZ3Q7Ojp0eXBlIGFkamFjZW5jeV9pdGVyYXRvcjsKICAvLyAuLi4KfTsKCjwvUFJFPgoKPGgzPlRlbXBsYXRlIFBhcmFtZXRlcnM8L2gzPgoKPFRhYmxlIGJvcmRlcj4KPFRSPgo8VEg+UGFyYW1ldGVyPC9USD48VEg+RGVzY3JpcHRpb248L1RIPgo8L1RSPgoKPFRSPgo8VEQ+PHR0PkdyYXBoPC90dD48L1REPgo8VEQ+VGhlIGdyYXBoIHR5cGUsIHdoaWNoIG11c3QgbW9kZWwgPGEKaHJlZj0iLi9JbmNpZGVuY2VHcmFwaC5odG1sIj5JbmNpZGVuY2UgR3JhcGg8L2E+LjwvVEQ+CjwvVFI+Cgo8VFI+CjxURD48dHQ+VmVydGV4RGVzY3JpcHRvcjwvdHQ+PC9URD4KPFREPlRoaXMgbXVzdCBiZSB0aGUgc2FtZSB0eXBlIGFzCjx0dD5ncmFwaF90cmFpdHMmbHQ7R3JhcGgmZ3Q7Ojp2ZXJ0ZXhfZGVzY3JpcHRvcjwvdHQ+LiAgVGhlIHJlYXNvbiB3aHkKdGhpcyBpcyBhIHRlbXBsYXRlIHBhcmFtZXRlciBpcyB0aGF0IHRoZSBwcmltYXJ5IHVzZSBvZgo8dHQ+YWRqYWNlbmN5X2l0ZXJhdG9yX2dlbmVyYXRvcjwvdHQ+IGlzIDxiPjxpPmluc2lkZTwvaT48L2I+IHRoZQpkZWZpbml0aW9uIG9mIHRoZSBncmFwaCBjbGFzcywgYW5kIGluIHRoYXQgY29udGV4dCB3ZSBjYW4gbm90IHVzZQo8dHQ+Z3JhcGhfdHJhaXRzPC90dD4gb24gdGhlIG5vdCB5ZXQgZnVsbHkgZGVmaW5lZCBncmFwaCBjbGFzcy48YnI+CjxiPkRlZmF1bHQ6PC9iPiA8dHQ+Z3JhcGhfdHJhaXRzJmx0O0dyYXBoJmd0Ozo6dmVydGV4X2Rlc2NyaXB0b3I8L3R0PjwvVEQ+CjwvVFI+Cgo8VFI+CjxURD48dHQ+T3V0RWRnZUl0ZXI8L3R0PjwvVEQ+CjxURD5UaGlzIG11c3QgYmUgdGhlIHNhbWUgdHlwZSBhcwo8dHQ+Z3JhcGhfdHJhaXRzJmx0O0dyYXBoJmd0Ozo6b3V0X2VkZ2VfaXRlcmF0b3I8L3R0Pi48YnI+CjxiPkRlZmF1bHQ6PC9iPiA8dHQ+Z3JhcGhfdHJhaXRzJmx0O0dyYXBoJmd0Ozo6b3V0X2VkZ2VfaXRlcmF0b3IKPC9URD4KPC9UUj4KCjwvVGFibGU+Cgo8aDM+TW9kZWwgb2Y8L2gzPgoKVGhlIGFkamFjZW5jeSBpdGVyYXRvciBhZGFwdG9yICh0aGUgdHlwZQo8dHQ+YWRqYWNlbmN5X2l0ZXJhdG9yX2dlbmVyYXRvcjwuLi4+Ojp0eXBlPC90dD4pIGlzIGEgbW9kZWwgb2YgPGEKaHJlZj0iLi4vLi4vdXRpbGl0eS9NdWx0aVBhc3NJbnB1dEl0ZXJhdG9yLmh0bWwiPk11bHRpLVBhc3MgSW5wdXQgSXRlcmF0b3I8L2E+CjwvYT4uCgoKPGgzPk1lbWJlcnM8L2gzPgoKVGhlIGFkamFjZW5jeSBpdGVyYXRvciB0eXBlIGltcGxlbWVudHMgdGhlIG1lbWJlciBmdW5jdGlvbnMgYW5kCm9wZXJhdG9ycyByZXF1aXJlZCBvZiB0aGUgPGEKaHJlZj0iaHR0cDovL3d3dy5zZ2kuY29tL3RlY2gvc3RsL1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLmh0bWwiPlJhbmRvbSBBY2Nlc3MgSXRlcmF0b3I8L2E+CmNvbmNlcHQsIGV4Y2VwdCB0aGF0IHRoZSA8dHQ+cmVmZXJlbmNlPC90dD4gdHlwZSBpcyB0aGUgc2FtZSBhcyB0aGUgPHR0PnZhbHVlX3R5cGU8L3R0PgpzbyA8dHQ+b3BlcmF0b3IqKCk8L3R0PiByZXR1cm5zIGJ5LXZhbHVlLiBJbiBhZGRpdGlvbiBpdCBoYXMgdGhlIGZvbGxvd2luZyBjb25zdHJ1Y3RvcjoKCjxwcmU+CmFkamFjZW5jeV9pdGVyYXRvcl9nZW5lcmF0b3I6OnR5cGUoY29uc3QgT3V0RWRnZUl0ZXImYW1wOyBpdCwgY29uc3QgR3JhcGgqIGcpCjwvcHJlPgoKPGhyPgo8cD5SZXZpc2VkIDwhLS13ZWJib3QgYm90PSJUaW1lc3RhbXAiIHMtdHlwZT0iRURJVEVEIiBzLWZvcm1hdD0iJWQgJWIgJVkiIHN0YXJ0c3BhbiAtLT4xOSBBdWcgMjAwMTwhLS13ZWJib3QgYm90PSJUaW1lc3RhbXAiIGVuZHNwYW4gaS1jaGVja3N1bT0iMTQ3NjciIC0tPjwvcD4KPHA+qSBDb3B5cmlnaHQgSmVyZW15IFNpZWsgMjAwMC4gUGVybWlzc2lvbiB0byBjb3B5LCB1c2UsCm1vZGlmeSwgc2VsbCBhbmQgZGlzdHJpYnV0ZSB0aGlzIGRvY3VtZW50IGlzIGdyYW50ZWQgcHJvdmlkZWQgdGhpcyBjb3B5cmlnaHQKbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcy4gVGhpcyBkb2N1bWVudCBpcyBwcm92aWRlZCAmcXVvdDthcyBpcyZxdW90Owp3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eSwgYW5kIHdpdGggbm8gY2xhaW0gYXMgdG8gaXRzIHN1aXRhYmlsaXR5IGZvcgphbnkgcHVycG9zZS48L3A+Cgo8L2JvZHk+Cgo8L2h0bWw+Cg==