VGhpcyBmaWxlIGRlc2NyaWJlcyB3aGVyZSB0byBzdGFydCBkZWJ1Z2dpbmcgV2luZS4gSWYgYXQgYW55IHBvaW50CnlvdSBnZXQgc3R1Y2sgYW5kIHdhbnQgdG8gYXNrIGZvciBoZWxwLCBwbGVhc2UgcmVhZCB0aGUgZmlsZQpkb2N1bWVudGF0aW9uL2J1Z3JlcG9ydHMgZm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byB3cml0ZSB1c2VmdWwgYnVnIApyZXBvcnRzLgoKQ3Jhc2hlcwo9PT09PT09CgogIFRoZXNlIHVzdWFsbHkgc2hvdyB1cCBsaWtlIHRoaXM6Cgp8VW5leHBlY3RlZCBXaW5kb3dzIHByb2dyYW0gc2VnZmF1bHQgLSBvcGNvZGUgPSA4Ygp8U2VnbWVudGF0aW9uIGZhdWx0IGluIFdpbmRvd3MgcHJvZ3JhbSAxYjc6YzQxLgp8TG9hZGluZyBzeW1ib2xzIGZyb20gRUxGIGZpbGUgL3Jvb3Qvd2luZS93aW5lLi4uCnwuLi4ubW9yZSBMb2FkaW5nIHN5bWJvbHMgZnJvbSAuLi4KfEluIDE2IGJpdCBtb2RlLgp8UmVnaXN0ZXIgZHVtcDoKfCBDUzowMWI3IFNTOjAxNmYgRFM6MDI4NyBFUzowMDAwCnwgSVA6MGM0MSBTUDo4NzhhIEJQOjg3OTYgRkxBR1M6MDI0Ngp8IEFYOjgxMWUgQlg6MDAwMCBDWDowMDAwIERYOjAwMDAgU0k6MDAwMSBESTpmZmZmCnxTdGFjayBkdW1wOgp8MHgwMTZmOjB4ODc4YTogIDAwMDEgMDE2ZiBmZmVkIDAwMDAgMDAwMCAwMjg3IDg5MGIgMWU1Ygp8MHgwMTZmOjB4ODc5YTogIDAxYjcgMDAwMSAwMDBkIDEwNTAgMDhiNyAwMTZmIDAwMDEgMDAwZAp8MHgwMTZmOjB4ODdhYTogIDAwMGEgMDAwMyAwMDA0IDAwMDAgMDAwNyAwMDA3IDAxOTAgMDAwMAp8MHgwMTZmOjB4ODdiYToKfAp8MDA1MDogc2VsPTAyODcgYmFzZT00MDIxMWQzMCBsaW1pdD0wYjkzZiAoYnl0ZXMpIDE2LWJpdCBydy0KfEJhY2t0cmFjZToKfDAgMHgwMWI3OjB4MGM0MSAoUFhTUlZfRk9OR0VURkFDRU5BTUUrMHg3YykKfDEgMHgwMWI3OjB4MWU1YiAoUFhTUlZfRk9OUFVUQ0FURk9OVCsweDJjZCkKfDIgMHgwMWE3OjB4MDVhYQp8MyAweDAxYjc6MHgwNzY4IChQWFNSVl9GT05JTklURk9OVFMrMHg4MSkKfDQgMHgwMTRmOjB4MDNlZCAoUERPWFdJTl9AU1FMQ1VSQ0IkUTZDQlRZUEVVTE44Q0JTQ1RZUEUrMHgxYjEpCnw1IDB4MDEzZjoweDAwYWMKfAp8MHgwMWI3OjB4MGM0MSAoUFhTUlZfRk9OR0VURkFDRU5BTUUrMHg3Yyk6ICBtb3Z3ICAgICAgICAlZXM6MHgzOCglYngpLCVkeAoKU3RlcHMgdG8gZGVidWcgYSBjcmFzaC4gWW91IG1heSBzdG9wIGF0IGFueSBzdGVwLCBidXQgcGxlYXNlIHJlcG9ydCB0aGUgYnVnCmFuZCBwcm92aWRlIGFzIG11Y2ggb2YgdGhlIGluZm9ybWF0aW9uIGdhdGhlcmVkIHRvIHRoZSBuZXdzZ3JvdXAgb3IgdGhlCnJlbGV2YW50IGRldmVsb3BlciBhcyBmZWFzb25hYmxlLgogIAogMS4gR2V0IHRoZSByZWFzb24gZm9yIHRoZSBjcmFzaC4gVGhpcyBpcyB1c3VhbGx5IGFuIGFjY2VzcyB0byBhbiBpbnZhbGlkCiAgICBzZWxlY3RvciwgYW4gYWNjZXNzIHRvIGFuIG91dCBvZiByYW5nZSBhZGRyZXNzIGluIGEgdmFsaWQgc2VsZWN0b3IsCiAgICBwb3BwaW5nIGEgc2VnbWVudHJlZ2lzdGVyIGZyb20gdGhlIHN0YWNrIG9yIHRoZSBsaWtlLiBXaGVuIHJlcG9ydGluZyBhCiAgICBjcmFzaCwgcmVwb3J0IHRoaXMgV0hPTEUgY3Jhc2hkdW1wIGV2ZW4gaWYgaXQgZG9lc24ndCBtYWtlIHNlbnNlIHRvIHlvdS4KCiAgICAoSW4gdGhpcyBjYXNlIGl0IGlzIGFjY2VzcyB0byBhbiBpbnZhbGlkIHNlbGVjdG9yLCBmb3IgJWVzIGlzIDAwMDAsIGFzCiAgICBzZWVuIGluIHRoZSByZWdpc3RlciBkdW1wKS4KICAgIAogMi4gRGV0ZXJtaW5lIHdoZXJlIHRoZSByZWFzb24gY2FtZSBmcm9tLgogICAgU2luY2UgdGhpcyBpcyB1c3VhbGx5IGEgcHJpbWFyeS9zZWNvbmRhcnkgcmVhY3Rpb24gdG8gYSBmYWlsZWQgb3IKICAgIG1pc2JlaGF2aW5nIFdpbmUgZnVuY3Rpb24sIHJlcnVuIFdpbmUgd2l0aCAiLWRlYnVnbXNnICtyZWxheSIgKHdpdGhvdXQgIikKICAgIGFkZGVkIHRvIHRoZSBjb21tYW5kbGluZS4gVGhpcyB3aWxsIGdldCByYXRoZXIgbXVjaCBvdXRwdXQsIGJ1dCB1c3VhbGx5CiAgICB0aGUgcmVhc29uIGlzIGxvY2F0ZWQgaW4gdGhlIGxhc3QgY2FsbChzKS4gIFRob3NlIGxpbmVzIHVzdWFsbHkgbG9vayBsaWtlCiAgICB0aGlzOgoKfENhbGwgS0VSTkVMLjkwOiBMU1RSTEVOKDAyMjc6MDY5MiAidGV4dCIpIHJldD0wMWU3OjJjZTcgZHM9MDIyNwogICAgICBeXl5eXl5eXl4gIF4gICAgICAgXl5eXl5eXl5eIF5eXl5eXiAgICAgIF5eXl5eXl5eXiAgICBeXl5eCiAgICAgIHwgICAgICAgICAgfCAgICAgICB8ICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgIHxEYXRhc2VnbWVudAogICAgICB8ICAgICAgICAgIHwgICAgICAgfCAgICAgICAgIHwgICAgICAgICAgIHxSZXR1cm4gYWRkcmVzcwogICAgICB8ICAgICAgICAgIHwgICAgICAgfCAgICAgICAgIHx0ZXh0dWFsIHBhcmFtZXRlcgogICAgICB8ICAgICAgICAgIHwgICAgICAgfAogICAgICB8ICAgICAgICAgIHwgICAgICAgfEFyZ3VtZW50KHMpLiBUaGlzIG9uZSBpcyBhIHdpbjE2IHNlZ21lbnRlZCBwb2ludGVyLgogICAgICB8ICAgICAgICAgIHxGdW5jdGlvbiBjYWxsZWQuCiAgICAgIHxUaGUgbW9kdWxlLCB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkIGluLiBJbiB0aGlzIGNhc2UgaXQgaXMgS0VSTkVMLgoJCSAgICAgICAgCnxSZXQgIEtFUk5FTC45MDogTFNUUkxFTigpIHJldHZhbD0weDAwMDQgcmV0PTAxZTc6MmNlNyBkcz0wMjI3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl4KCQkJCSAgfFJldHVybnZhbHVlIGlzIDE2IGJpdCBhbmQgaGFzIHRoZSB2YWx1ZSA0LgoKCiAzLiBJZiB5b3UgaGF2ZSBmb3VuZCBhIG1pc2JlaGF2aW5nIGZ1bmN0aW9uLCB0cnkgdG8gZmluZCBvdXQgd2h5IGl0CiAgICBtaXNiZWhhdmVzLiBGaW5kIHRoZSBmdW5jdGlvbiBpbiB0aGUgc291cmNlIGNvZGUuIFRyeSB0byBtYWtlIHNlbnNlIG9mCiAgICB0aGUgYXJndW1lbnRzIHBhc3NlZC4gVXN1YWxseSB0aGVyZSBpcyBhICdUUkFDRSg8Y2hhbm5lbD4sIiguLi4pXG4iKTsnIAogICAgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZnVuY3Rpb24uIFJlcnVuIHdpbmUgd2l0aCAKICAgICItZGVidWdtc2cgK3h5eiwrcmVsYXkiIGFkZGVkIHRvIHRoZSBjb21tYW5kbGluZS4KCiA0LiBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIGhvdyB0byBkZWJ1ZyB1c2luZyB0aGUgaW50ZXJuYWwgZGVidWdnZXIgY2FuIGJlIAogICAgZm91bmQgaW4gZGVidWdnZXIvUkVBRE1FLgoKIDUuIElmIHRob3NlIGluZm9ybWF0aW9uIGlzbid0IGNsZWFyIGVub3VnaCBvciBpZiB5b3Ugd2FudCB0byBrbm93IG1vcmUgYWJvdXQKICAgIHdoYXQncyBoYXBwZW5pbmcgaW4gdGhlIGZ1bmN0aW9uIGl0c2VsZiwgdHJ5IHJ1bm5pbmcgd2luZSB3aXRoICItZGVidWdtc2cKICAgICthbGwiLCB3aGljaCBkdW1wcyBBTEwgaW5jbHVkZWQgZGVidWcgaW5mb3JtYXRpb24gaW4gd2luZS4KCiA2LiBJZiB0aGF0IGlzbid0IGVub3VnaCBhZGQgbW9yZSBkZWJ1ZyBvdXRwdXQgZm9yIHlvdXJzZWxmIGludG8gdGhlCiAgICBmdW5jdGlvbnMgeW91IGZpbmQgcmVsZXZhbnQuICBTZWUgZG9jdW1lbnRhdGlvbi9kZWJ1Zy1tc2dzLgogICAgWW91IG1pZ2h0IGFsc28gdHJ5IHRvIHJ1biB0aGUgcHJvZ3JhbSBpbiBnZGIgaW5zdGVhZCBvZiB1c2luZyB0aGUKICAgIFdJTkUtZGVidWdnZXIuIElmIHlvdSBkbyB0aGF0LCB1c2UgImhhbmRsZSBTSUdTRUdWIG5vc3RvcCBub3ByaW50IgogICAgdG8gZGlzYWJsZSB0aGUgaGFuZGxpbmcgb2Ygc2VnIGZhdWx0cyBpbnNpZGUgZ2RiIChuZWVkZWQgZm9yIFdpbjE2KS4KICAgIElmIHlvdSBkb24ndCB1c2UgdGhlICItZGVza3RvcCIgb3IgIi1tYW5hZ2VkIiBvcHRpb24sCiAgICBzdGFydCB0aGUgV0lORSBwcm9jZXNzIHdpdGggIi1zeW5jIiwgb3IgY2hhbmNlcyBhcmUgZ29vZCB0byBnZXQgWCBpbnRvCiAgICBhbiB1bnVzYWJsZSBzdGF0ZS4KICAKIDcuIFlvdSBjYW4gYWxzbyBzZXQgYSBicmVha3BvaW50IGZvciB0aGF0IGZ1bmN0aW9uLiBTdGFydCB3aW5lIHdpdGggdGhlCiAgICAiLWRlYnVnIiBvcHRpb24gYWRkZWQgdG8gdGhlIGNvbW1hbmRsaW5lLiBBZnRlciBsb2FkaW5nIHRoZSBleGVjdXRhYmxlCiAgICB3aW5lIHdpbGwgZW50ZXIgdGhlIGludGVybmFsIGRlYnVnZ2VyLiBVc2UgImJyZWFrIEtFUk5FTF9MU1RSTEVOIgogICAgKHJlcGxhY2UgYnkgZnVuY3Rpb24geW91IHdhbnQgdG8gZGVidWcsIENBU0UgSVMgUkVMRVZBTlQuKSB0byBzZXQgYQogICAgYnJlYWtwb2ludC4gIFRoZW4gdXNlICJjb250aW51ZSIgdG8gc3RhcnQgbm9ybWFsIHByb2dyYW0tZXhlY3V0aW9uLiBXaW5lCiAgICB3aWxsIHN0b3AgaWYgaXQgcmVhY2hlcyB0aGUgYnJlYWtwb2ludC4gSWYgdGhlIHByb2dyYW0gaXNuJ3QgeWV0IGF0IHRoZQogICAgY3Jhc2hpbmcgY2FsbCBvZiB0aGF0IGZ1bmN0aW9uLCB1c2UgImNvbnRpbnVlIiBhZ2FpbiB1bnRpbCB5b3UgYXJlIGFib3V0CiAgICB0byBlbnRlciB0aGF0IGZ1bmN0aW9uLiBZb3UgbWF5IG5vdyBwcm9jZWVkIHdpdGggc2luZ2xlLXN0ZXBwaW5nIHRoZQogICAgZnVuY3Rpb24gdW50aWwgeW91IHJlYWNoIHRoZSBwb2ludCBvZiBjcmFzaC4gVXNlIHRoZSBvdGhlciBkZWJ1Z2dlcgogICAgY29tbWFuZHMgdG8gcHJpbnQgcmVnaXN0ZXJzIGFuZCB0aGUgbGlrZS4KCgpQcm9ncmFtIGhhbmdzLCBub3RoaW5nIGhhcHBlbnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogIFN3aXRjaCB0byBVTklYIHNoZWxsLCBnZXQgdGhlIHByb2Nlc3MtSUQgdXNpbmcgInBzIC1hfGdyZXAgd2luZSIsIGFuZCBkbyBhCiAgImtpbGwgLUhVUCA8cGlkPiIgKHdpdGhvdXQgIiBhbmQgPD4pLiBXaW5lIHdpbGwgdGhlbiBlbnRlciBpdHMgaW50ZXJuYWwKICBkZWJ1Z2dlciBhbmQgeW91IGNhbiBwcm9jZWVkIGFzIGV4cGxhaW5lZCBhYm92ZS4gQWxzbywgeW91IGNhbiB1c2UgLWRlYnVnCiAgc3dpdGNoIGFuZCB0aGVuIHlvdSBjYW4gZ2V0IGludG8gaW50ZXJuYWwgZGVidWdnZXIgYnkgcHJlc3NpbmcgQ3RybC1DIGluIAogIHRoZSB0ZXJtaW5hbCB3aGVyZSB5b3UgcnVuIFdpbmUuCgpQcm9ncmFtIHJlcG9ydHMgYW4gZXJyb3Igd2l0aCBhIE1lc3NhZ2Vib3gKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogIFNvbWV0aW1lcyBwcm9ncmFtcyBhcmUgcmVwb3J0aW5nIGZhaWx1cmUgdXNpbmcgYSBtb3JlIG9yIGxlc3Mgbm9uZGVzY3JpcHQKICBtZXNzYWdlYm94ZXMuIFdlIGNhbiBkZWJ1ZyB0aGlzIHVzaW5nIHRoZSBzYW1lIG1ldGhvZCBhcyBDcmFzaGVzLCBidXQgdGhlcmUKICBpcyBvbmUgcHJvYmxlbS4uLiBGb3Igc2V0dGluZyB1cCBhIG1lc3NhZ2UgYm94IHRoZSBwcm9ncmFtIGFsc28gY2FsbHMgV2luZQogIHByb2R1Y2luZyBodWdlIGNodW5rcyBvZiBkZWJ1ZyBjb2RlLgoKICBTaW5jZSB0aGUgZmFpbHVyZSBoYXBwZW5zIHVzdWFsbHkgZGlyZWN0bHkgYmVmb3JlIHNldHRpbmcgdXAgdGhlIE1lc3NhZ2Vib3gKICB5b3UgY2FuIHN0YXJ0IHdpbmUgd2l0aCAiLWRlYnVnIiBhZGRlZCB0byB0aGUgY29tbWFuZGxpbmUsIHNldCBhIGJyZWFrcG9pbnQKICBhdCAiTWVzc2FnZUJveEEiIChjYWxsZWQgYnkgd2luMTYgYW5kIHdpbjMyIHByb2dyYW1zKSBhbmQgcHJvY2VlZCB3aXRoCiAgImNvbnRpbnVlIi4gV2l0aCAiLWRlYnVnbXNnICthbGwiIFdpbmUgd2lsbCBub3cgc3RvcCBkaXJlY3RseSBiZWZvcmUgCiAgc2V0dGluZyB1cCB0aGUgTWVzc2FnZWJveC4gIFByb2NlZWQgYXMgZXhwbGFpbmVkIGFib3ZlLgoKICBZb3UgY2FuIGFsc28gcnVuIHdpbmUgdXNpbmcgIndpbmUgLWRlYnVnbXNnICtyZWxheSBwcm9ncmFtLmV4ZSAyPiYxfGxlc3MgLWkiCiAgYW5kIGluIGxlc3Mgc2VhcmNoIGZvciBtZXNzYWdlYm94LgoKRGlzYXNzZW1ibGluZyBwcm9ncmFtczoKPT09PT09PT09PT09PT09PT09PT09PT0KICBZb3UgbWF5IGFsc28gdHJ5IHRvIGRpc2Fzc2VtYmxlIHRoZSBvZmZlbmRpbmcgcHJvZ3JhbSB0byBjaGVjayBmb3IgCiAgdW5kb2N1bWVudGVkIGZlYXR1cmVzIGFuZC9vciB1c2Ugb2YgdGhlbS4KCiAgVGhlIGJlc3QsIGZyZWVseSBhdmFpbGFibGUsIGRpc2Fzc2VtYmxlciBmb3IgV2luMTYgcHJvZ3JhbXMgaXMKICBXaW5kb3dzIENvZGViYWNrLCBhcmNoaXZlbmFtZSB3Y2J4eHguemlwLCB3aGljaCB1c3VhbGx5IGNhbiBiZSBmb3VuZAogIGluIHRoZSBDaWNhLU1pcnJvciBzdWJkaXJlY3Rvcnkgb24gdGhlIFdJTkUgZnRwc2l0ZXMuIChTZWUgQU5OT1VOQ0UpLgoKICBEaXNhc3NlbWJsaW5nIHdpbjMyIHByb2dyYW1zIGlzIHBvc3NpYmxlIHVzaW5nIHRoZSBXaW5kb3dzIERpc2Fzc2VtYmxlciAzMiwKICBhcmNoaXZlbmFtZSBzb21ldGhpbmcgbGlrZSB3MzJkc204Ny56aXAgKG9yIHNpbWlsYXIpIG9uIGZ0cC53aW5zaXRlLmNvbQogIGFuZCBtaXJyb3JzLiAgVGhlIHNoYXJld2FyZSB2ZXJzaW9uIGRvZXMgbm90IGFsbG93IHNhdmluZyBvZiBkaXNhc3NlbWJseQogIGxpc3RpbmdzLgogIFlvdSBjYW4gYWxzbyB1c2UgdGhlIG5ld2VyIChhbmQgaW4gdGhlIGZ1bGwgdmVyc2lvbiBiZXR0ZXIpIEludGVyYWN0aXZlCiAgRGlzYXNzZW1ibGVyIChJREEpIGZyb20gdGhlIGZ0cCBzaXRlcyBtZW50aW9uZWQgYXQgdGhlIGVuZCBvZiB0aGUgZG9jdW1lbnQuCgogIFVuZGVyc3RhbmRpbmcgZGlzYXNzZW1ibGVkIGNvZGUgaXMgbW9zdGx5IGEgcXVlc3Rpb24gb2YgZXhlcmNpc2UuCgogIE1vc3QgY29kZSBvdXQgdGhlcmUgdXNlcyBzdGFuZGFyZCBDIGZ1bmN0aW9uIGVudHJpZXMgKGZvciBpdCBpcyB1c3VhbGx5IAogIHdyaXR0ZW4gaW4gQykuIFdpbjE2IGZ1bmN0aW9uIGVudHJpZXMgdXN1YWxseSBsb29rIGxpa2UgdGhhdDoKfCAgCXB1c2ggYnAKfAltb3YgYnAsIHNwCnwJLi4uIGZ1bmN0aW9uIGNvZGUgLi4KfAlyZXRmIFhYWFggCTwtLS0tLS0tLS0gWFhYWCBpcyBudW1iZXIgb2YgYnl0ZXMgb2YgYXJndW1lbnRzCgogIFRoaXMgaXMgYSBGQVIgZnVuY3Rpb24gd2l0aCBubyBsb2NhbCBzdG9yYWdlLiBUaGUgYXJndW1lbnRzIHVzdWFsbHkgc3RhcnQKICBhdCBbYnArNl0gd2l0aCBpbmNyZWFzaW5nIG9mZnNldHMuIE5vdGUsIHRoYXQgW2JwKzZdIGJlbG9uZ3MgdG8gdGhlIFJJR0hUTU9TVCAKICBhcmd1bWVudCwgZm9yIGV4cG9ydGVkIHdpbjE2IGZ1bmN0aW9ucyB1c2UgdGhlIFBBU0NBTCBjYWxsaW5nIGNvbnZlbnRpb24uCiAgU28sIGlmIHdlIHVzZSBzdHJjbXAoYSxiKSB3aXRoIGEgYW5kIGIgYm90aCAzMiBiaXQgdmFyaWFibGVzIGIgd291bGQgYmUgYXQKICBbYnArNl0gYW5kIGEgYXQgW2JwKzEwXS4KICBNb3N0IGZ1bmN0aW9ucyBtYWtlIGFsc28gdXNlIG9mIGxvY2FsIHN0b3JhZ2UgaW4gdGhlIHN0YWNrZnJhbWU6CnwJZW50ZXIgMDA4NiwgMDAKfAkuLi4gZnVuY3Rpb24gY29kZSAuLi4KfAlsZWF2ZQp8CXJldGYgWFhYWAogIFRoaXMgZG9lcyBtb3N0bHkgdGhlIHNhbWUgYXMgYWJvdmUsIGJ1dCBhbHNvIGFkZHMgMHg4NiBieXRlcyBvZgogIHN0YWNrc3RvcmFnZSwgd2hpY2ggaXMgYWNjZXNzZWQgdXNpbmcgW2JwLXh4XS4KICBCZWZvcmUgY2FsbGluZyBhIGZ1bmN0aW9uLCBhcmd1bWVudHMgYXJlIHB1c2hlZCBvbiB0aGUgc3RhY2sgdXNpbmcgc29tZXRoaW5nCiAgbGlrZSB0aGlzOgp8CXB1c2ggd29yZCBwdHIgW2JwLTAyXQk8LSB3aWxsIGJlIGF0IFticCs4XQp8CXB1c2ggZGkJCQk8LSB3aWxsIGJlIGF0IFticCs2XQp8CWNhbGwgS0VSTkVMLkxTVFJMRU4KICBIZXJlIGZpcnN0IHRoZSBzZWxlY3RvciBhbmQgdGhlbiB0aGUgb2Zmc2V0IHRvIHRoZSBwYXNzZWQgc3RyaW5nIGFyZSBwdXNoZWQuCgpTYW1wbGUgZGVidWdnaW5nIHNlc3Npb246Cj09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgTGV0J3MgZGVidWcgdGhlIGluZmFtb3VzIFdvcmQgU0hBUkUuRVhFIG1lc3NhZ2Vib3g6IAoKfG1hcmN1c0BqZXQgJCB3aW5lIHdpbndvcmQuZXhlCnwgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwp8ICAgICAgICAgICAgfCAhICBZb3UgbXVzdCBsZWF2ZSBXaW5kb3dzIGFuZCBsb2FkIFNIQVJFLkVYRXwKfCAgICAgICAgICAgIHwgICAgYmVmb3JlIHN0YXJ0aW5nIFdvcmQuICAgICAgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwoKCnxtYXJjdXNAamV0ICQgd2luZSB3aW53b3JkLmV4ZSAtZGVidWdtc2cgK3JlbGF5IC1kZWJ1Zwp8Q2FsbFRvMzIod25kcHJvYz0weDQwMDY1YmMwLGh3bmQ9MDAwMDAxYWMsbXNnPTAwMDAwMDgxLHdwPTAwMDAwMDAwLGxwPTAwMDAwMDAwKQp8V2luMTYgdGFzayAnd2lud29yZCc6IEJyZWFrcG9pbnQgMSBhdCAweDAxZDc6MHgwMDFhCnxDYWxsVG8xNihmdW5jPTAxMjc6MDA3MCxkcz0wOTI3KQp8Q2FsbCBXUFJPQ1MuMjQ6IFRBU0tfUkVTQ0hFRFVMRSgpIHJldD0wMGI3OjE0NTYgZHM9MDkyNwp8UmV0ICBXUFJPQ1MuMjQ6IFRBU0tfUkVTQ0hFRFVMRSgpIHJldHZhbD0weDg2NzIgcmV0PTAwYjc6MTQ1NiBkcz0wOTI3CnxDYWxsVG8xNihmdW5jPTAxZDc6MDAxYSxkcz0wOTI3KQp8ICAgICBBWD0wMDAwIEJYPTNjYjQgQ1g9MWY0MCBEWD0wMDAwIFNJPTAwMDAgREk9MDkyNyBCUD0wMDAwIEVTPTExZjcKfExvYWRpbmcgc3ltYm9sczogL2hvbWUvbWFyY3VzL3dpbmUvd2luZS4uLgp8U3RvcHBlZCBvbiBicmVha3BvaW50IDEgYXQgMHgwMWQ3OjB4MDAxYQp8SW4gMTYgYml0IG1vZGUuCnxXaW5lLWRiZz5icmVhayBNZXNzYWdlQm94QSAgICAgICAgICAgICAgICAgICAgICAgICAgPC0tLS0gU2V0IEJyZWFrcG9pbnQKfEJyZWFrcG9pbnQgMiBhdCAweDQwMTg5MTAwIChNZXNzYWdlQm94QSBbbXNnYm94LmM6MTkwXSkKfFdpbmUtZGJnPmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwtLS0tIENvbnRpbnVlCnxDYWxsIEtFUk5FTC45MTogSU5JVFRBU0soKSByZXQ9MDE1NzowMDIyIGRzPTA4YTcKfCAgICAgQVg9MDAwMCBCWD0zY2I0IENYPTFmNDAgRFg9MDAwMCBTST0wMDAwIERJPTA4YTcgRVM9MTFkNyBFRkw9MDAwMDAyODYKfENhbGxUbzE2KGZ1bmM9MDkwZjowODVjLGRzPTBkY2YsMHgwMDAwLDB4MDAwMCwweDAwMDAsMHgwMDAwLDB4MDgwMCwweDAwMDAsMHgwMDAwLDB4MGRjZikKfC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwtLS0tLSBNdWNoIGRlYnVnb3V0cHV0CnxDYWxsIEtFUk5FTC4xMzY6IEdFVERSSVZFVFlQRSgweDAwMDApIHJldD0wNjBmOjA5N2IgZHM9MDkyNwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eIERyaXZlIDAgKEE6KQp8UmV0ICBLRVJORUwuMTM2OiBHRVREUklWRVRZUEUoKSByZXR2YWw9MHgwMDAyIHJldD0wNjBmOjA5N2IgZHM9MDkyNwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eICBEUklWRV9SRU1PVkVBQkxFCgkJCQkJCShJdCBpcyBhIGZsb3BweSBkaXNrZHJpdmUuKQoKfENhbGwgS0VSTkVMLjEzNjogR0VURFJJVkVUWVBFKDB4MDAwMSkgcmV0PTA2MGY6MDk3YiBkcz0wOTI3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl4gRHJpdmUgMSAoQjopCnxSZXQgIEtFUk5FTC4xMzY6IEdFVERSSVZFVFlQRSgpIHJldHZhbD0weDAwMDAgcmV0PTA2MGY6MDk3YiBkcz0wOTI3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl4gIERSSVZFX0NBTk5PVERFVEVSTUlORQoJCQkJCQkoSSBkb24ndCBoYXZlIGRyaXZlIEI6IGFzc2lnbmVkKQoKfENhbGwgS0VSTkVMLjEzNjogR0VURFJJVkVUWVBFKDB4MDAwMikgcmV0PTA2MGY6MDk3YiBkcz0wOTI3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl5eIERyaXZlIDIgKEM6KQp8UmV0ICBLRVJORUwuMTM2OiBHRVREUklWRVRZUEUoKSByZXR2YWw9MHgwMDAzIHJldD0wNjBmOjA5N2IgZHM9MDkyNwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eIERSSVZFX0ZJWEVECiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNwZWNpZmllZCBhcyBhIGhhcmRkaXNrKQoKfENhbGwgS0VSTkVMLjk3OiBHRVRURU1QRklMRU5BTUUoMHgwMGMzLDB4MDkyNzgzNjQiZG9jIiwweDAwMDAsMDkyNzo4MjQ4KSByZXQ9MDYwZjowOWIxIGRzPTA5MjcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eICAgICAgICAgICBeXl5eXiAgICAgICAgXl5eXl5eXl5eCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHxidWZmZXIgZm9yIGZuYW1lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgfHRlbXBvcmFyeSBuYW1lIH5kb2NYWFhYLnRtcAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Rm9yY2UgdXNlIG9mIERyaXZlIEM6LgoKfFdhcm5pbmc6IEdldFRlbXBGaWxlTmFtZSByZXR1cm5zICdDOn5kb2M5MjgxLnRtcCcsIHdoaWNoIGRvZXNuJ3Qgc2VlbSB0byBiZSB3cml0ZWFibGUuCnxQbGVhc2UgY2hlY2sgeW91ciBjb25maWd1cmF0aW9uIGZpbGUgaWYgdGhpcyBnZW5lcmF0ZXMgYSBmYWlsdXJlLgoKV2hvb3BzLCBpdCBldmVuIGRldGVjdHMgdGhhdCBzb21ldGhpbmcgaXMgd3JvbmchCgp8UmV0ICBLRVJORUwuOTc6IEdFVFRFTVBGSUxFTkFNRSgpIHJldHZhbD0weDkyODEgcmV0PTA2MGY6MDliMSBkcz0wOTI3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXiBUZW1wb3Jhcnkgc3RvcmFnZSBJRAoKfENhbGwgS0VSTkVMLjc0OiBPUEVORklMRSgweDA5Mjc4MjQ4IkM6fmRvYzkyODEudG1wIiwwOTI3OjgyZGEsMHgxMDEyKSByZXQ9MDYwZjowOWQ4IGRzPTA5MjcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eXl5eXl5eXl5eXiBeXl5eXl5eXl4gXl5eXl5eXgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ZmlsZW5hbWUgICAgICAgIHxPRlNUUlVDVCB8b3BlbiBtb2RlOgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0ZfQ1JFQVRFfE9GX1NIQVJFX0VYQ0xVU0lWRXxPRl9SRUFEV1JJVEUKClRoaXMgZmFpbHMsIHNpbmNlIG15IEM6IGRyaXZlIGlzIGluIHRoaXMgY2FzZSBtb3VudGVkIHJlYWRvbmx5LgoKfFJldCAgS0VSTkVMLjc0OiBPUEVORklMRSgpIHJldHZhbD0weGZmZmYgcmV0PTA2MGY6MDlkOCBkcz0wOTI3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eIEhGSUxFX0VSUk9SMTYsIHllcywgaXQgZmFpbGVkLgoKfENhbGwgVVNFUi4xOiBNRVNTQUdFQk9YKDB4MDAwMCwweDA5Mjc4Mzc2IlNpZSBt/HNzZW4gV2luZG93cyB2ZXJsYXNzZW4gdW5kIFNIQVJFLkVYRSBsYWRlbiBiZXZvciBTaWUgV29yZCBzdGFydGVuLiIsMHgwMDAwMDAwMCwweDEwMzApIHJldD0wNjBmOjA4NGYgZHM9MDkyNwogICAgICAgICAgIApBbmQgTWVzc2FnZUJveCdlZC4KCnxTdG9wcGVkIG9uIGJyZWFrcG9pbnQgMiBhdCAweDQwMTg5MTAwIChNZXNzYWdlQm94QSBbbXNnYm94LmM6MTkwXSkKfDE5MCAgICAgewkJPC0gdGhlIHNvdXJjZWxpbmUKSW4gMzIgYml0IG1vZGUuCldpbmUtZGJnPgoKCVRoZSBjb2RlIHNlZW1zIHRvIGZpbmQgYSB3cml0ZWFibGUgaGFyZGRpc2sgYW5kIHRyaWVzIHRvIGNyZWF0ZSBhIGZpbGUKCXRoZXJlLiBUbyB3b3JrIGFyb3VuZCB0aGlzIGJ1ZywgeW91IGNhbiBkZWZpbmUgQzogYXMgYSBuZXR3b3JrZHJpdmUsCgl3aGljaCBpcyBpZ25vcmVkIGJ5IHRoZSBjb2RlIGFib3ZlLgoKV3JpdHRlbiBieSBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4sCmFkZGl0aW9ucyB3ZWxjb21lLgotLS0tLS0tCgpIZXJlIGFyZSBzb21lIHVzZWZ1bCBkZWJ1Z2dpbmcgdGlwcywgYWRkZWQgYnkgQW5kcmVhcyBNb2hyOgoKCmEpIElmIHlvdSBoYXZlIGEgcHJvZ3JhbSBjcmFzaGluZyBhdCBzdWNoIGFuIGVhcmx5IGxvYWRlciBwaGFzZSB0aGF0IHlvdSBjYW4ndAp1c2UgdGhlIFdpbmUgZGVidWdnZXIgbm9ybWFsbHksIGJ1dCBXaW5lIGFscmVhZHkgZXhlY3V0ZXMgdGhlIHByb2dyYW0ncwpzdGFydCBjb2RlLCB0aGVuIHlvdSBtYXkgdXNlIGEgc3BlY2lhbCB0cmljazoKWW91IHNob3VsZCBkbyBhCndpbmUgLWRlYnVnbXNnICtyZWxheSBwcm9ncmFtCnRvIGdldCBhIGxpc3Rpbmcgb2YgdGhlIGZ1bmN0aW9ucyB0aGUgcHJvZ3JhbSBjYWxscyBpbiBpdHMgc3RhcnQgZnVuY3Rpb24uCk5vdyB5b3UgZG8gYQp3aW5lIC1kZWJ1ZyB3aW5maWxlLmV4ZQpUaGlzIHdheSwgeW91IGdldCBpbnRvIFdpbmUtZGJnLiBOb3cgeW91IGNhbiBzZXQgYSBicmVha3BvaW50IG9uIGFueQpmdW5jdGlvbiB0aGUgcHJvZ3JhbSBjYWxscyBpbiB0aGUgc3RhcnQgZnVuY3Rpb24gYW5kIGp1c3QgdHlwZSAiYyIgdG8gYnlwYXNzCnRoZSBldmVudHVhbCBjYWxscyBvZiBXaW5maWxlIHRvIHRoaXMgZnVuY3Rpb24gdW50aWwgeW91IGFyZSBmaW5hbGx5IGF0IHRoZQpwbGFjZSB3aGVyZSB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGJ5IHRoZSBjcmFzaGluZyBzdGFydCBmdW5jdGlvbi4KTm93IHlvdSBjYW4gcHJvY2VlZCB3aXRoIHlvdXIgZGVidWdnaW5nIGFzIHVzdWFsLgoKCmIpIElmIHlvdSB0cnkgdG8gcnVuIGEgcHJvZ3JhbSBhbmQgaXQgcXVpdHMgYWZ0ZXIgc2hvd2luZyBhbiBlcnJvciBtZXNzYWdlYm94LAp0aGUgcHJvYmxlbSBjYW4gdXN1YWxseSBiZSBpZGVudGlmaWVkIGluIHRoZSByZXR1cm4gdmFsdWUgb2Ygb25lIG9mIHRoZQpmdW5jdGlvbnMgZXhlY3V0ZWQgYmVmb3JlIE1lc3NhZ2VCb3goKS4KVGhhdCdzIHdoeSB5b3Ugc2hvdWxkIHJlLXJ1biB0aGUgcHJvZ3JhbSB3aXRoIGUuZy4Kd2luZSAtZGVidWdtc2cgK3JlbGF5IDxwcm9ncmFtIG5hbWU+ICY+cmVsbXNnClRoZW4gZG8gYSAibW9yZSByZWxtc2ciIGFuZCBzZWFyY2ggZm9yIHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgYSBjYWxsIHRvIHRoZSBzdHJpbmcgIk1FU1NBR0VCT1giLgpUaGlzIGlzIGEgbGluZSBsaWtlCkNhbGwgVVNFUi4xOiBNRVNTQUdFQk9YKDB4MDAwMCwweDAxZmYxMjQ2ICJSdW50aW1lIGVycm9yIDIxOSBhdCAwMDA0OjEwNTYuIiwweDAwMDAwMDAwLDB4MTAxMCkgcmV0PTAxZjc6MjE2MCBkcz0wMWZmCgpJbiBteSBleGFtcGxlIHRoZSBsaW5lcyBiZWZvcmUgdGhlIGNhbGwgdG8gTWVzc2FnZUJveCgpIGxvb2sgbGlrZSB0aGF0OgoKQ2FsbCBLRVJORUwuOTY6IEZSRUVMSUJSQVJZKDB4MDM0NykgcmV0PTAxY2Y6MTAzMyBkcz0wMWZmCkNhbGxUbzE2KGZ1bmM9MDMzZjowMDcyLGRzPTAxZmYsMHgwMDAwKQpSZXQgIEtFUk5FTC45NjogRlJFRUxJQlJBUlkoKSByZXR2YWw9MHgwMDAxIHJldD0wMWNmOjEwMzMgZHM9MDFmZgpDYWxsIEtFUk5FTC45NjogRlJFRUxJQlJBUlkoMHgwMzZmKSByZXQ9MDFjZjoxMDQzIGRzPTAxZmYKQ2FsbFRvMTYoZnVuYz0wMzY3OjAwNzIsZHM9MDFmZiwweDAwMDApClJldCAgS0VSTkVMLjk2OiBGUkVFTElCUkFSWSgpIHJldHZhbD0weDAwMDEgcmV0PTAxY2Y6MTA0MyBkcz0wMWZmCkNhbGwgS0VSTkVMLjk2OiBGUkVFTElCUkFSWSgweDAzMWYpIHJldD0wMWNmOjEwNWMgZHM9MDFmZgpDYWxsVG8xNihmdW5jPTAzMTc6MDA3Mixkcz0wMWZmLDB4MDAwMCkKUmV0ICBLRVJORUwuOTY6IEZSRUVMSUJSQVJZKCkgcmV0dmFsPTB4MDAwMSByZXQ9MDFjZjoxMDVjIGRzPTAxZmYKQ2FsbCBVU0VSLjE3MTogV0lOSEVMUCgweDAyYWMsMHgwMWZmMDViNCAiQ09NRVQuSExQIiwweDAwMDIsMHgwMDAwMDAwMCkgcmV0PTAxY2Y6MTA3MCBkcz0wMWZmCkNhbGxUbzE2KGZ1bmM9MDExNzowMDgwLGRzPTAxZmYpCkNhbGwgV1BST0NTLjI0OiBUQVNLX1JFU0NIRURVTEUoKSByZXQ9MDBhNzowYTJkIGRzPTAwMmIKUmV0ICBXUFJPQ1MuMjQ6IFRBU0tfUkVTQ0hFRFVMRSgpIHJldHZhbD0weDAwMDAgcmV0PTAwYTc6MGEyZCBkcz0wMDJiClJldCAgVVNFUi4xNzE6IFdJTkhFTFAoKSByZXR2YWw9MHgwMDAxIHJldD0wMWNmOjEwNzAgZHM9MDFmZgpDYWxsIEtFUk5FTC45NjogRlJFRUxJQlJBUlkoMHgwMWJlKSByZXQ9MDFkZjozZTI5IGRzPTAxZmYKUmV0ICBLRVJORUwuOTY6IEZSRUVMSUJSQVJZKCkgcmV0dmFsPTB4MDAwMCByZXQ9MDFkZjozZTI5IGRzPTAxZmYKQ2FsbCBLRVJORUwuNTI6IEZSRUVQUk9DSU5TVEFOQ0UoMHgwMmNmMDBiYSkgcmV0PTAxZjc6MTQ2MCBkcz0wMWZmClJldCAgS0VSTkVMLjUyOiBGUkVFUFJPQ0lOU1RBTkNFKCkgcmV0dmFsPTB4MDAwMSByZXQ9MDFmNzoxNDYwIGRzPTAxZmYKQ2FsbCBVU0VSLjE6IE1FU1NBR0VCT1goMHgwMDAwLDB4MDFmZjEyNDYgIlJ1bnRpbWUgZXJyb3IgMjE5IGF0IDAwMDQ6MTA1Ni4iLDB4MDAwMDAwMDAsMHgxMDEwKSByZXQ9MDFmNzoyMTYwIGRzPTAxZmYKCkkgdGhpbmsgdGhhdCB0aGUgY2FsbCB0byBNZXNzYWdlQm94KCkgaW4gdGhpcyBleGFtcGxlIGlzIF9ub3RfIGNhdXNlZApieSBhIHdyb25nIHJlc3VsdCB2YWx1ZSBvZiBzb21lIHByZXZpb3VzbHkgZXhlY3V0ZWQgZnVuY3Rpb24gKGl0J3MKaGFwcGVuaW5nIHF1aXRlIG9mdGVuIGxpa2UgdGhhdCksIGJ1dCBpbnN0ZWFkIHRoZSBtZXNzYWdlYm94IGNvbXBsYWlucwphYm91dCBhIHJ1bnRpbWUgZXJyb3IgYXQgMHgwMDA0OjB4MTA1Ni4KCkFzIHRoZSBzZWdtZW50IHZhbHVlIG9mIHRoZSBhZGRyZXNzIGlzIG9ubHkgIjQiLCBJIHRoaW5rIHRoYXQgdGhhdCBpcwpvbmx5IGFuIGludGVybmFsIHByb2dyYW0gdmFsdWUuIEJ1dCB0aGUgb2Zmc2V0IGFkZHJlc3MgcmV2ZWFscyBzb21ldGhpbmcKcXVpdGUgaW50ZXJlc3Rpbmc6CgpPZmZzZXQgMTA1NiBpcyBfdmVyeV8gY2xvc2UgdG8gdGhlIHJldHVybiBhZGRyZXNzIG9mIEZSRUVMSUJSQVJZKCk6CgpDYWxsIEtFUk5FTC45NjogRlJFRUxJQlJBUlkoMHgwMzFmKSByZXQ9MDFjZjoxMDVjIGRzPTAxZmYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXgpQcm92aWRlZCB0aGF0IHNlZ21lbnQgMHgwMDA0IGlzIGluZGVlZApzZWdtZW50IDB4MWNmLCB3ZSBub3cgd2UgY2FuIHVzZSBJREEgKGF2YWlsYWJsZSBhdApmdHA6Ly9mdHAudW5pLWtvZWxuLmRlL3BjL21zZG9zL3Byb2dyYW1taW5nL2Fzc2VtYmxlci9pZGEzNWJ4LnppcCkKdG8gZGlzYXNzZW1ibGUgdGhlIHBhcnQgdGhhdCBjYXVzZWQgdGhlIGVycm9yLiBXZSBqdXN0IGhhdmUgdG8gZmluZAp0aGUgYWRkcmVzcyBvZiB0aGUgY2FsbCB0byBGcmVlTGlicmFyeSgpLiBTb21lIGxpbmVzIGJlZm9yZSB0aGF0IHRoZQpydW50aW1lIGVycm9yIG9jY3VycmVkLiAgQnV0IGJlIGNhcmVmdWwgISBJbiBzb21lIGNhc2VzIHlvdSBkb24ndCBoYXZlCnRvIGRpc2Fzc2VtYmxlIHRoZSBtYWluIHByb2dyYW0sIGJ1dCBpbnN0ZWFkIHNvbWUgRExMIGNhbGxlZCBieSBpdCBpbgpvcmRlciB0byBmaW5kIHRoZSBjb3JyZWN0IHBsYWNlIHdoZXJlIHRoZSBydW50aW1lIGVycm9yIG9jY3VycmVkLiBUaGF0CmNhbiBiZSBkZXRlcm1pbmVkIGJ5IGZpbmRpbmcgdGhlIG9yaWdpbiBvZiB0aGUgc2VnbWVudCB2YWx1ZSAoaW4gdGhpcwpjYXNlIDB4MWNmKS4KCmMpIElmIHlvdSBoYXZlIGNyZWF0ZWQgYSByZWxheSBmaWxlIG9mIHNvbWUgY3Jhc2hpbmcgcHJvZ3JhbSBhbmQgd2FudCB0byBzZXQgYQpicmVha3BvaW50IGF0IGEgY2VydGFpbiBsb2NhdGlvbiB3aGljaCBpcyBub3QgeWV0IGF2YWlsYWJsZSBhcyB0aGUKcHJvZ3JhbSBsb2FkcyB0aGUgYnJlYWtwb2ludCdzIHNlZ21lbnQgZHVyaW5nIGV4ZWN1dGlvbiwKeW91IG1heSBzZXQgYSBicmVha3BvaW50IHRvIEdldFZlcnNpb24xNi8zMiBhcyB0aG9zZSBmdW5jdGlvbnMgYXJlIGNhbGxlZAp2ZXJ5IG9mdGVuLgpUaGVuIGRvIGEgImMiIHVudGlsIHlvdSBhcmUgYWJsZSB0byBzZXQgdGhpcyBicmVha3BvaW50IHdpdGhvdXQgZXJyb3IgbWVzc2FnZS4KCmQpIFNvbWUgdXNlZnVsIHByb2dyYW1zOgpJREE6IGZ0cDovL2Z0cC51bmkta29lbG4uZGUvcGMvbXNkb3MvcHJvZ3JhbW1pbmcvYXNzZW1ibGVyL2lkYTM1YnguemlwCipWZXJ5KiBnb29kIERPUyBkaXNhc3NlbWJsZXIgISBJdCdzIGJhZGx5IG5lZWRlZCBmb3IgZGVidWdnaW5nIFdpbmUgc29tZXRpbWVzLgoKWFJBWTogZnRwOi8vZnRwLnRoLWRhcm1zdGFkdC5kZS9wdWIvbWFjaGluZXMvbXMtZG9zL1NpbVRlbC9tc2Rvcy9hc211dGlsL3hyYXkxNS56aXAKVHJhY2VzIERPUyBjYWxscyAoSW50IDIxaCwgRFBNSSwgLi4uKS4gVXNlIGl0IHdpdGggV2luZG93cyB0byBjb3JyZWN0CmZpbGUgbWFuYWdlbWVudCBwcm9ibGVtcyBldGMuCgpwZWR1bXA6IGh0dHA6Ly9vYWsub2FrbGFuZC5lZHUvcHViL3NpbXRlbG5ldC93aW45NS9wcm9nL3BlZHVtcC56aXAKRHVtcHMgdGhlIGltcG9ydHMgYW5kIGV4cG9ydHMgb2YgYSBQRSAoUG9ydGFibGUgRXhlY3V0YWJsZSkgRExMLgoKClNvbWUgYmFzaWMgZGVidWdnZXIgdXNhZ2VzOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT0KCkFmdGVyIHN0YXJ0aW5nIHlvdSBwcm9ncmFtIHdpdGgKICB3aW5lIC1kZWJ1ZyBteXByb2cuZXhlCnRoZSBwcm9ncmFtIGxvYWRzIGFuZCB5b3UgZ2V0IGEgcHJvbXB0IGF0IHRoZSBwcm9ncmFtIHN0YXJ0aW5nIHBvaW50LgpUaGVuIHlvdSBjYW4gc2V0IGJyZWFrcG9pbnRzOgogIGIgUm91dGluZU5hbWUgICAgICAoYnkgb3V0aW5lIG5hbWUpIE9SCiAgYiAqMHg4MTI1NzUgICAgICAgIChieSBhZGRyZXNzKQpUaGVuIHlvdSBoaXQgJ2MnIChjb250aW51ZSkgdG8gcnVuIHRoZSBwcm9ncmFtLiBJdCBzdG9wcyBhdAp0aGUgYnJlYWtwb2ludC4gWW91IGNhbiB0eXBlCiAgc3RlcCAgICAgICAgICAgICAgICh0byBzdGVwIG9uZSBsaW5lKSBPUgogIHN0ZXBpICAgICAgICAgICAgICAodG8gc3RlcCBvbmUgbWFjaGluZSBpbnN0cnVjdGlvbiBhdCBhIHRpbWU7CiAgICAgICAgICAgICAgICAgICAgICBoZXJlLCBpdCBoZWxwcyB0byBrbm93IHRoZSBiYXNpYyAzODYKICAgICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uIHNldCkKICBpbmZvIHJlZyAgICAgICAgICAgKHRvIHNlZSByZWdpc3RlcnMpCiAgaW5mbyBzdGFjayAgICAgICAgICh0byBzZWUgaGV4IHZhbHVlcyBpbiB0aGUgc3RhY2spCiAgaW5mbyBsb2NhbCAgICAgICAgICh0byBzZWUgbG9jYWwgdmFyaWFibGVzKQogIGxpc3QgPGxpbmUgbnVtYmVyPiAodG8gbGlzdCBzb3VyY2UgY29kZSkKICB4IDx2YXJpYWJsZSBuYW1lPiAgKHRvIGV4YW1pbmUgYSB2YXJpYWJsZTsgb25seSB3b3JrcyBpZiBjb2RlCiAgICAgICAgICAgICAgICAgICAgICBpcyBub3QgY29tcGlsZWQgd2l0aCBvcHRpbWl6YXRpb24pCiAgeCAweDQyNjk5NzggICAgICAgICh0byBleGFtaW5lIGEgbWVtb3J5IGxvY2F0aW9uKQogID8gICAgICAgICAgICAgICAgICAoaGVscCkKICBxICAgICAgICAgICAgICAgICAgKHF1aXQpCkJ5IGhpdHRpbmcgRW50ZXIsIHlvdSByZXBlYXQgdGhlIGxhc3QgY29tbWFuZC4K