PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGQiPgo8IS0tCiBJbnRlcm5ldCBFeHBsb3JlciBUZXN0IFBhZ2VzIENvcHlyaWdodCDCqSAyMDEyIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KCiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgoKIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mCiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCgogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YKIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCiBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCgogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgTWljcm9zb2Z0IENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUKIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKIHdyaXR0ZW4gcGVybWlzc2lvbi4KCiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIE1JQ1JPU09GVCBDT1JQT1JBVElPTiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5ECiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgTUlDUk9TT0ZUIENPUlBPUkFUSU9OCiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IKIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotLT4KPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgogICAgPGhlYWQ+CiAgICAgICAgPHRpdGxlPkNTUyBUZXN0OiBTY3JvbGxpbmcgd2hlbiCRYmFja2dyb3VuZC1hdHRhY2htZW50OiBsb2NhbJI8L3RpdGxlPgogICAgICAgIDxsaW5rIHJlbD0iYXV0aG9yIiB0aXRsZT0iTWljcm9zb2Z0IiBocmVmPSJodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vIiAvPgogICAgICAgIDxsaW5rIHJlbD0iaGVscCIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1iYWNrZ3JvdW5kLyN0aGUtYmFja2dyb3VuZC1hdHRhY2htZW50IiAvPgogICAgICAgIDxtZXRhIG5hbWU9ImZsYWdzIiBjb250ZW50PSIiIC8+CiAgICAgICAgPG1ldGEgbmFtZT0iYXNzZXJ0IiBjb250ZW50PSJJZiAnYmFja2dyb3VuZC1hdHRhY2htZW50OiBsb2NhbCcgdGhlIGJhY2tncm91bmQgc2Nyb2xscyBhbG9uZyB3aXRoIHRoZSBlbGVtZW50J3MgY29udGVudHMgKHRoZSBVQSBtYXkgdHJlYXQgJ2JhY2tncm91bmQtY2xpcDogYm9yZGVyLWJveCcgYXMgdGhlIHNhbWUgYXMgJ2JhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3gnKS4iIC8+CiAgICAgICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KICAgICAgICAgICAgI3Rlc3QKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgd2lkdGg6IDJpbjsKICAgICAgICAgICAgICAgIGhlaWdodDogMmluOwogICAgICAgICAgICAgICAgYm9yZGVyOiA1MHB4IGRvdWJsZSBibGFjazsKICAgICAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiLi4vc3VwcG9ydC9jYXQucG5nIik7CiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGxvY2FsOwogICAgICAgICAgICAgICAgb3ZlcmZsb3c6IHNjcm9sbDsKICAgICAgICAgICAgfQogICAgICAgIDwvc3R5bGU+CiAgICA8L2hlYWQ+CiAgICA8Ym9keT4KICAgICAgICA8c2NyaXB0PgogICAgICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKICAgICAgICAgICAgICAgIC8vIFVuZm9ydHVuYXRlbHksIHRoaXMgbmVlZHMgdG8gYmUgYSBwaXhlbCB0ZXN0CiAgICAgICAgICAgICAgICB3aW5kb3cudGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CiAgICAgICAgICAgIH0KICAgICAgICA8L3NjcmlwdD4KCiAgICAgICAgPHA+VGVzdCBwYXNzZXMgaWYgdGhlIGltYWdlcyBvZiBhbGwgdGhlIGNhdHMgc2Nyb2xsIHdoZW4gdGhlIGJveCBpcyBzY3JvbGxlZC4gKFByZXNlbmNlIG9mIGNhdHMgYmVoaW5kIHRoZSBkb3VibGUgYm9yZGVyIGlzIFVBIGRlcGVuZGVudCkuIDwvcD4KICAgICAgICA8ZGl2IGlkPSJ0ZXN0Ij5GaWxsZXIgVGV4dCBGaWxsZXIgVGV4dAogICAgICAgIEZpbGxlciBUZXh0IEZpbGxlciBUZXh0IEZpbGxlciBUZXh0CiAgICAgICAgRmlsbGVyIFRleHQgRmlsbGVyIFRleHQgRmlsbGVyIFRleHQKICAgICAgICBGaWxsZXIgVGV4dCBGaWxsZXIgVGV4dCBGaWxsZXIgVGV4dAogICAgICAgIEZpbGxlciBUZXh0IEZpbGxlciBUZXh0IEZpbGxlciBUZXh0CiAgICAgICAgRmlsbGVyIFRleHQgRmlsbGVyIFRleHQgRmlsbGVyIFRleHQKICAgICAgICBGaWxsZXIgVGV4dCBGaWxsZXIgVGV4dCBGaWxsZXIgVGV4dAogICAgICAgIEZpbGxlciBUZXh0IEZpbGxlciBUZXh0IEZpbGxlciBUZXh0CiAgICAgICAgRmlsbGVyIFRleHQgRmlsbGVyIFRleHQgRmlsbGVyIFRleHQKICAgICAgICBGaWxsZXIgVGV4dCBGaWxsZXIgVGV4dCBGaWxsZXIgVGV4dAogICAgICAgIEZpbGxlciBUZXh0IEZpbGxlciBUZXh0IEZpbGxlciBUZXh0CiAgICAgICAgRmlsbGVyIFRleHQgRmlsbGVyIFRleHQgRmlsbGVyIFRleHQKICAgICAgICBGaWxsZXIgVGV4dCBGaWxsZXIgVGV4dCBGaWxsZXIgVGV4dAogICAgICAgIEZpbGxlciBUZXh0IEZpbGxlciBUZXh0IDwvZGl2PgogICAgPC9ib2R5PgoKICAgIDxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgoKICAgIDxzY3JpcHQ+CiAgICAgICAgaWYgKHdpbmRvdy5ldmVudFNlbmRlcikgewogICAgICAgICAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbygyNDAsIDI1MCk7CiAgICAgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlRG93bigpOwogICAgICAgICAgICBldmVudFNlbmRlci5tb3VzZVVwKCk7CgogICAgICAgICAgICBzZXRUaW1lb3V0KGZpbmlzaGVkLCAxMDAwKTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGZpbmlzaGVkKCkKICAgICAgICB7CiAgICAgICAgICAgIHdpbmRvdy50ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKICAgICAgICB9CgogICAgPC9zY3JpcHQ+Cgo8L2h0bWw+Cg==