CiAgICAgICAgICAgICBDb21tb25zIElPIFBhY2thZ2UKICAgICAgICAgICAgICAgIFZlcnNpb24gMi4yCiAgICAgICAgICAgICAgIFJlbGVhc2UgTm90ZXMKCklOVFJPRFVDVElPTjoKCkNvbW1vbnMgSU8gaXMgYSBwYWNrYWdlIG9mIEphdmEgdXRpbGl0eSBjbGFzc2VzIGxpa2UgamF2YS5pby4gIApDbGFzc2VzIGluIHRoaXMgcGFja2FnZSBhcmUgY29uc2lkZXJlZCB0byBiZSBzbyBzdGFuZGFyZCBhbmQgb2Ygc3VjaCBoaWdoIApyZXVzZSBhcyB0byBqdXN0aWZ5IGV4aXN0ZW5jZSBpbiBqYXZhLmlvLgoKVGhlIENvbW1vbnMgSU8gbGlicmFyeSBjb250YWlucyB1dGlsaXR5IGNsYXNzZXMsIHN0cmVhbSBpbXBsZW1lbnRhdGlvbnMsIGZpbGUgZmlsdGVycywgCmZpbGUgY29tcGFyYXRvcnMsIGVuZGlhbiB0cmFuc2Zvcm1hdGlvbiBjbGFzc2VzLCBhbmQgbXVjaCBtb3JlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNvbW1vbnMgSU8gUGFja2FnZSBWZXJzaW9uIDIuMgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCkNoYW5nZXMgaW4gdGhpcyB2ZXJzaW9uIGluY2x1ZGU6CgpOZXcgZmVhdHVyZXM6Cm8gQWRkIElPVVRpbHMudG9CdWZmZXJlZFJlYWRlcihSZWFkZXIpICBJc3N1ZTogSU8tMzEzLiBUaGFua3MgdG8gZ2dyZWdvcnkuIApvIEFsbG93IGFwcGxpY2F0aW9ucyB0byBwcm92aWRlIGJ1ZmZlciAob3Igc2l6ZSkgZm9yIGNvcHlMYXJnZSBtZXRob2RzLiAgSXNzdWU6IElPLTMwOC4gVGhhbmtzIHRvIE1hbm9qIE1va2FzaGkuIApvIE5ldyBjb3B5TGFyZ2UoKSBtZXRob2QgaW4gSU9VdGlscyB0aGF0IHRha2VzIGFkZGl0aW9uYWwgb2Zmc2V0LCBsZW5ndGggYXJndW1lbnRzICBJc3N1ZTogSU8tMzA1LiBUaGFua3MgdG8gTWFub2ogTW9rYXNoaS4gCm8gVXNlIHRlcmFieXRlIChUQiksIHBldGFieXRlIChQQikgYW5kIGV4YWJ5dGUgKEVCKSBpbiBGaWxlVXRpbHMuYnl0ZUNvdW50VG9EaXNwbGF5U2l6ZShsb25nIHNpemUpICBJc3N1ZTogSU8tMjg3LiBUaGFua3MgdG8gUm9uIEt1cmlzLCBHYXJ5IEdyZWdvcnkuIApvIEZpbGVVdGlscy5saXN0RmlsZXMoKSBkb2Vzbid0IHJldHVybiBkaXJlY3RvcmllcyAgSXNzdWU6IElPLTE3My4gVGhhbmtzIHRvIE1hcmNvcyBWaW7tY2l1cyBkYSBTaWx2YS4gCm8gQ2hhclNlcXVlbmNlSW5wdXRTdHJlYW0gdG8gZWZmaWNpZW50bHkgc3RyZWFtIGNvbnRlbnQgb2YgYSBDaGFyU2VxdWVuY2UgIElzc3VlOiBJTy0yOTcuIFRoYW5rcyB0byBPbGVnIEthbG5pY2hldnNraS4gCm8gVGhlIHNlY29uZCBjb25zdHJ1Y3RvciBvZiBUYWlsZXIgY2xhc3MgZG9lcyBub3QgcGFzcyAnZGVsYXknIHRvIHRoZSB0aGlyZCBvbmUgIElzc3VlOiBJTy0zMDQuIFRoYW5rcyB0byBsaWFuZ2x5LiAKbyBUZWVPdXRwdXRTdHJlYW0gZG9lcyBub3QgY2FsbCBicmFuY2guY2xvc2UoKSB3aGVuIG1haW4uY2xvc2UoKSB0aHJvd3MgYW4gZXhjZXB0aW9uICBJc3N1ZTogSU8tMzAzLiBUaGFua3MgdG8gZmFiaWFuLmJhcm5leS4gCm8gQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGluIEJPTUlucHV0U3RyZWFtIHdoZW4gcmVhZGluZyBhIGZpbGUgd2l0aG91dCBCT00gbXVsdGlwbGUgdGltZXMgIElzc3VlOiBJTy0zMDIuIFRoYW5rcyB0byBqc3RldWVyd2FsZCwgZGV0aW5oby4gCm8gQWRkIElPVXRpbHMuY2xvc2VRdWlldGx5KFNlbGVjdG9yKSBuZWNlc3NhcnkgIElzc3VlOiBJTy0zMDEuIFRoYW5rcyB0byBrYXlrYXkudW5pcXVlLiAKbyBJT1V0aWxzLmNsb3NlUXVpZXRseSgpIHNob3VsZCB0YWtlIGEgU2VydmVyU29ja2V0IGFzIGEgcGFyYW1ldGVyICBJc3N1ZTogSU8tMjkyLiBUaGFua3MgdG8gc2ViYi4gCm8gQWRkIHJlYWQvcmVhZEZ1bGx5IG1ldGhvZHMgdG8gSU9VdGlscyAgSXNzdWU6IElPLTI5MC4gVGhhbmtzIHRvIHNlYmIuIApvIFN1cHBseSBhIFJldmVyc2VkTGluZXNGaWxlUmVhZGVyICBJc3N1ZTogSU8tMjg4LiBUaGFua3MgdG8gR2VvcmcgSGVuemxlci4gCm8gQWRkIG5ldyBmdW5jdGlvbiBGaWxlVXRpbHMuZGlyZWN0b3J5Q29udGFpbnMuICBJc3N1ZTogSU8tMjkxLiBUaGFua3MgdG8gZ2dyZWdvcnkuIApvIEZpbGVVdGlscy5jb250ZW50RXF1YWxzIGFuZCBJT1V0aWxzLmNvbnRlbnRFcXVhbHMgLSBBZGQgb3B0aW9uIHRvIGlnbm9yZSAibGluZSBlbmRpbmdzIgogICAgICAgIEFkZGVkIGNvbnRlbnRFcXVhbHNJZ25vcmVFT0wgbWV0aG9kcyB0byBib3RoIGNsYXNzZXMgIElzc3VlOiBJTy0yNzUuIFRoYW5rcyB0byBDSiBBc3Byb21nb3MuIAoKRml4ZWQgQnVnczoKbyBJT1V0aWxzLnJlYWQoSW5wdXRTdHJlYW0vUmVhZGVyKSBpZ25vcmVzIHRoZSBvZmZzZXQgcGFyYW1ldGVyICBJc3N1ZTogSU8tMzExLiBUaGFua3MgdG8gUm9iZXJ0IE11aXIuIApvIENoYXJTZXF1ZW5jZUlucHV0U3RyZWFtKENoYXJTZXF1ZW5jZSBzLCBDaGFyc2V0IGNoYXJzZXQsIGludCBidWZmZXJTaXplKSBpZ25vcmVzIGJ1ZmZlclNpemUgIElzc3VlOiBJTy0zMTIuIApvIEZpbGVVdGlscy5tb3ZlRGlyZWN0b3J5VG9EaXJlY3RvcnkgcmVtb3ZlcyBzb3VyY2UgZGlyZWN0b3J5IGlmIGRlc3RpbmF0aW9uIGlzIGEgc3ViZGlyZWN0b3J5ICBJc3N1ZTogSU8tMzAwLiAKbyBSZWFkZXJJbnB1dFN0cmVhbSNyZWFkKGJ5dGVbXSBiLCBpbnQgb2ZmLCBpbnQgbGVuKSBzaG91bGQgY2hlY2sgZm9yIHZhbGlkIHBhcmFtZXRlcnMgIElzc3VlOiBJTy0zMDcuIApvIFJlYWRlcklucHV0U3RyZWFtI3JlYWQoYnl0ZVtdIGIsIGludCBvZmYsIGludCBsZW4pIHNob3VsZCBhbHdheXMgcmV0dXJuIDAgZm9yIGxlbmd0aCA9PSAwICBJc3N1ZTogSU8tMzA2LiAKbyAiRmlsZVV0aWxzI2RlbGV0ZURpcmVjdG9yeU9uRXhpdChGaWxlKSIgZG9lcyBub3Qgd29yayAgSXNzdWU6IElPLTI3Ni4gVGhhbmtzIHRvIG5rYW1pLiAKbyBCb3VuZGVkSW5wdXRTdHJlYW0ucmVhZCgpIHRyZWF0cyBtYXggZGlmZmVyZW50bHkgZnJvbSBCb3VuZGVkSW5wdXRTdHJlYW0ucmVhZChieXRlW10uLi4pICBJc3N1ZTogSU8tMjczLiBUaGFua3MgdG8gc2ViYi4gCm8gVmFyaW91cyBtZXRob2RzIG9mIGNsYXNzICdvcmcuYXBhY2hlLmNvbW1vbnMuaW8uRmlsZVV0aWxzJyBpbmNvcnJlY3RseSBzdXBwcmVzcyAnamF2YS5pby5JT0V4Y2VwdGlvbicgIElzc3VlOiBJTy0yOTguIFRoYW5rcyB0byBDaHJpc3RpYW4gU2NodWx0ZS4gCgpDaGFuZ2VzOgpvIFJlYWRlcklucHV0U3RyZWFtIG9wdGltaXphdGlvbjogbW9yZSBlZmZpY2llbnQgcmVhZGluZyBvZiBzbWFsbCBjaHVua3Mgb2YgZGF0YSAgSXNzdWU6IElPLTI5Ni4gVGhhbmtzIHRvIE9sZWcgS2FsbmljaGV2c2tpLiAKCgpDb21wYXRpYmlsaXR5IHdpdGggMi4xIGFuZCAxLjQ6CkJpbmFyeSBjb21wYXRpYmxlOiBZZXMKU291cmNlIGNvbXBhdGlibGU6IFllcwpTZW1hbnRpYyBjb21wYXRpYmxlOiBZZXMuIENoZWNrIHRoZSBidWcgZml4ZXMgc2VjdGlvbiBmb3Igc2VtYW50aWMgYnVnIGZpeGVzCgpDb21tb25zIElPIDIuMiByZXF1aXJlcyBhIG1pbmltdW0gb2YgSkRLIDEuNS4gCkNvbW1vbnMgSU8gMS40IHJlcXVpcmVzIGEgbWluaW11bSBvZiBKREsgMS4zLiAKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDb21tb25zIElPIFBhY2thZ2UgVmVyc2lvbiAyLjEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpOZXcgZmVhdHVyZXM6Cm8gVXNlIHN0YW5kYXJkIE1hdmVuIGRpcmVjdG9yeSBsYXlvdXQgIElzc3VlOiBJTy0yODUuIFRoYW5rcyB0byBnZ3JlZ29yeS4gCm8gQWRkIElPVXRpbHMgQVBJIHRvU3RyaW5nIGZvciBVUkwgYW5kIFVSSSB0byBnZXQgY29udGVudHMgIElzc3VlOiBJTy0yODQuIFRoYW5rcyB0byBnZ3JlZ29yeS4gCm8gQWRkIEFQSSBGaWxlVXRpbHMuY29weUZpbGUoRmlsZSBpbnB1dCwgT3V0cHV0U3RyZWFtIG91dHB1dCkgIElzc3VlOiBJTy0yODIuIFRoYW5rcyB0byBnZ3JlZ29yeS4gCm8gRmlsZUFsdGVyYXRpb25PYnNlcnZlciBoYXMgbm8gZ2V0dGVyIGZvciBGaWxlRmlsdGVyICBJc3N1ZTogSU8tMjYyLiAKbyBBZGQgRmlsZVV0aWxzLmdldEZpbGUgQVBJIHdpdGggdmFyYXJncyBwYXJhbWV0ZXIgIElzc3VlOiBJTy0yNjEuIApvIEFkZCBuZXcgQVBQRU5EIHBhcmFtZXRlciBmb3Igd3JpdGluZyBzdHJpbmcgaW50byBmaWxlcyAgSXNzdWU6IElPLTE4Mi4gCm8gQWRkIG5ldyByZWFkIG1ldGhvZCAidG9CeXRlQXJyYXkiIHRvIGhhbmRsZSBJbnB1dFN0cmVhbSB3aXRoIGtub3duIHNpemUuICBJc3N1ZTogSU8tMjUxLiBUaGFua3MgdG8gTWFyY28gQWxiaW5pLiAKCkZpeGVkIEJ1Z3M6Cm8gRHViaW91cyB1c2Ugb2YgbWtkaXJzKCkgcmV0dXJuIGNvZGUgIElzc3VlOiBJTy0yODAuIFRoYW5rcyB0byBzZWJiLiAKbyBSZWFkZXJJbnB1dFN0cmVhbSBlbnRlcnMgaW5maW5pdGUgbG9vcCB3aGVuIGl0IGVuY291bnRlcnMgYW4gdW5tYXBwYWJsZSBjaGFyYWN0ZXIgIElzc3VlOiBJTy0yNzcuIApvIEZpbGVVdGlscy5tb3ZlRmlsZSgpIEphdmFEb2Mgc2hvdWxkIHNwZWNpZnkgRmlsZUV4aXN0c0V4Y2VwdGlvbiB0aHJvd24gIElzc3VlOiBJTy0yNjQuIApvIENsYXNzTG9hZGVyT2JqZWN0SW5wdXRTdHJlYW0gZG9lcyBub3QgaGFuZGxlIFByb3h5IGNsYXNzZXMgIElzc3VlOiBJTy0yNjAuIApvIFRhaWxlciByZXR1cm5pbmcgcGFydGlhbCBsaW5lcyB3aGVuIHJlYWNoaW5nIEVPRiBiZWZvcmUgRU9MICBJc3N1ZTogSU8tMjc0LiBUaGFua3MgdG8gRnJhbmsgR3JpbWVzLiAKbyBGaWxlVXRpbHMuY29weUZpbGUoKSB0aHJvd3MgSU9FeGNlcHRpb24gd2hlbiBjb3B5aW5nIGxhcmdlIGZpbGVzIHRvIGEgc2hhcmVkIGRpcmVjdG9yeSAob24gV2luZG93cykgIElzc3VlOiBJTy0yNjYuIFRoYW5rcyB0byBJZ29yIFNtZXJla2EuIApvIEZpbGVTeXN0ZW1VdGlscy5mcmVlU3BhY2VLYiB0aHJvd3MgZXhjZXB0aW9uIGZvciBXaW5kb3dzIHZvbHVtZXMgd2l0aCBubyB2aXNpYmxlIGZpbGVzLgogICAgICAgIEltcHJvdmUgY292ZXJhZ2UgYnkgYWxzbyBsb29raW5nIGZvciBoaWRkZW4gZmlsZXMuICBJc3N1ZTogSU8tMjYzLiBUaGFua3MgdG8gR2lsIEFkYW0uIAoKQ2hhbmdlczoKbyBGaWxlQWx0ZXJhdGlvbk1vbml0b3Iuc3RvcChib29sZWFuIGFsbG93SW50ZXJ2YWxUb0ZpbmlzaCkgIElzc3VlOiBJTy0yNTkuIAoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNvbW1vbnMgSU8gUGFja2FnZSBWZXJzaW9uIDIuMC4xCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKQ29tcGF0aWJpbGl0eSB3aXRoIDIuMCBhbmQgMS40Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpCaW5hcnkgY29tcGF0aWJsZSAtIFllcwoKU291cmNlIGNvbXBhdGlibGUgLSBZZXMKClNlbWFudGljIGNvbXBhdGlibGUgLSBZZXMKICBDaGVjayB0aGUgYnVnIGZpeGVzIHNlY3Rpb24gZm9yIHNlbWFudGljIGJ1ZyBmaXhlcwoKQ29tbW9ucyBJTyAyLjAuMSByZXF1aXJlcyBhIG1pbmltdW0gb2YgSkRLIDEuNQogKENvbW1vbnMgSU8gMS40IGhhZCBhIG1pbmltdW0gb2YgSkRLIDEuMykgCgpFbmhhbmNlbWVudHMgZnJvbSAyLjAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAqIFtJTy0yNTZdIC0gUHJvdmlkZSB0aHJlYWQgZmFjdG9yeSBmb3IgRmlsZUFsdGVybmF0aW9uTW9uaXRvcgoKQnVnIGZpeGVzIGZyb20gMi4wCi0tLS0tLS0tLS0tLS0tLS0tLQoKICAgKiBbSU8tMjU3XSAtIEJPTUlucHV0U3RyZWFtLnJlYWQoYnl0ZVtdKSBjYW4gcmV0dXJuIDAgd2hpY2ggaXQgc2hvdWxkIG5vdAogICAqIFtJTy0yNThdIC0gWG1sU3RyZWFtUmVhZGVyIGNvbnN1bWVzIHRoZSBzdHJlYW0gZHVyaW5nIGVuY29kaW5nIGRldGVjdGlvbgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNvbW1vbnMgSU8gUGFja2FnZSBWZXJzaW9uIDIuMAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCkNvbXBhdGliaWxpdHkgd2l0aCAxLjQKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpCaW5hcnkgY29tcGF0aWJsZSAtIFllcwoKU291cmNlIGNvbXBhdGlibGUgLSBZZXMKClNlbWFudGljIGNvbXBhdGlibGUgLSBZZXMKICBDaGVjayB0aGUgYnVnIGZpeGVzIHNlY3Rpb24gZm9yIHNlbWFudGljIGJ1ZyBmaXhlcwoKQ29tbW9ucyBJTyAyLjAgcmVxdWlyZXMgYSBtaW5pbXVtIG9mIEpESyAxLjUKIChDb21tb25zIElPIDEuNCBoYWQgYSBtaW5pbXVtIG9mIEpESyAxLjMpIAoKRGVwcmVjYXRpb25zIGZyb20gMS40Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLSBJT1V0aWxzCiAgLSB3cml0ZShTdHJpbmdCdWZmZXIsIFdyaXRlcikgaW4gZmF2b3VyIG9mIHdyaXRlKENoYXJTZXF1ZW5jZSwgV3JpdGVyKQogIC0gd3JpdGUoU3RyaW5nQnVmZmVyLCBPdXRwdXRTdHJlYW0pICBpbiBmYXZvdXIgb2Ygd3JpdGUoQ2hhclNlcXVlbmNlLCBPdXRwdXRTdHJlYW0pCiAgLSB3cml0ZShTdHJpbmdCdWZmZXIsIE91dHB1dFN0cmVhbSwgU3RyaW5nKSBpbiBmYXZvdXIgb2Ygd3JpdGUoQ2hhclNlcXVlbmNlLCBPdXRwdXRTdHJlYW0sIFN0cmluZykKCi0gRmlsZUZpbHRlclV0aWxzCiAgLSBhbmRGaWxlRmlsdGVyKElPRmlsZUZpbHRlciwgSU9GaWxlRmlsdGVyKSBpbiBmYXZvdXIgb2YgYW5kKElPRmlsZUZpbHRlci4uLikgCiAgLSBvckZpbGVGaWx0ZXIoSU9GaWxlRmlsdGVyLCBJT0ZpbGVGaWx0ZXIpICBpbiBmYXZvdXIgb2Ygb3IoSU9GaWxlRmlsdGVyLi4uKQoKRW5oYW5jZW1lbnRzIGZyb20gMS40Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAqIFtJTy0xNDBdIE1vdmUgbWluaW11bSBKYXZhIHJlcXVpcmVtZW50IGZyb20gSkRLIDEuMyB0byBKREsgMS41CiAgICAgICAgICAgICAtIHVzZSBHZW5lcmljcwogICAgICAgICAgICAgLSBhZGQgbmV3IENoYXJTZXF1ZW5jZSB3cml0ZSgpIGZsYXZvdXIgbWV0aG9kcyB0byBJT1V0aWxzIGFuZCBGaWxlVXRpbHMKICAgICAgICAgICAgIC0gcmVwbGFjZSBTdHJpbmdCdWZmZXIgd2l0aCBTdHJpbmdCdWlsZGVyLCB3aGVyZSBhcHByb3ByaWF0ZQogICAgICAgICAgICAgLSBhZGQgbmV3IFJlYWRlci9Xcml0ZXIgbWV0aG9kcyB0byBQcm94eVJlYWRlciBhbmQgUHJveHlXcml0ZXIKICAgICAgICAgICAgIC0gQW5ub3RhdGUgd2l0aCBAT3ZlcnJpZGUgYW5kIEBEZXByZWNhdGVkCgogICogW0lPLTE3OF0gTmV3IEJPTUlucHV0U3RyZWFtIGFuZCBCeXRlT3JkZXJNYXJrIGltcGxlbWVudGF0aW9ucyAtIHRvIGRldGVjdCBhbmQgb3B0aW9uYWxseSBleGNsdWRlIGFuIGluaXRpYWwgQnl0ZSBPcmRlciBtYXJrIChCT00pCiAgKiBbSU8tMTk3XSBOZXcgQm91bmRlZElucHV0U3RyZWFtIChjb3BpZWQgZnJvbSBmcm9tIEFwYWNoZSBKYWNrUmFiYml0KQogICogW0lPLTE5M10gTmV3IEJyb2tlbiBJbnB1dCBhbmQgT3V0cHV0IHN0cmVhbXMKICAqIFtJTy0xMzJdIE5ldyBGaWxlIExpc3RlbmVyL01vbml0b3IgZmFjaWxpdHkKICAqIFtJTy0xNThdIE5ldyBSZWFkZXJJbnB1dFN0cmVhbSBhbmQgV3JpdGVyT3V0cHV0U3RyZWFtIGltcGxlbWVudGF0aW9ucwogICogW0lPLTEzOV0gTmV3IFN0cmluZ0J1aWxkZXIgV3JpdGVyIGltcGxlbWVudGF0aW9uCiAgKiBbSU8tMTkyXSBOZXcgVGFnZ2VkIElucHV0IGFuZCBPdXRwdXQgc3RyZWFtcwogICogW0lPLTE3N10gTmV3IFRhaWxlciBjbGFzcyAtIHNpbXBsZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVW5peCAidGFpbCAtZiIgZnVuY3Rpb25hbGl0eQogICogW0lPLTE2Ml0gTmV3IFhNTCBTdHJlYW0gUmVhZGVyL1dyaXRlciBpbXBsZW1lbnRhdGlvbnMgKGZyb20gUk9NRSB2aWEgcGxleHVzLXV0aWxzKQoKICAqIFtJTy0xNDJdIENvbXBhcmF0b3JzIC0gYWRkIGZhY2lsaXR5IHRvIHNvcnQgZmlsZSBsaXN0cy9hcnJheXMKICAqIFtJTy0xODZdIENvbXBhcmF0b3JzIC0gbmV3IENvbXBvc2l0ZSBhbmQgRGlyZWN0b3J5IEZpbGUgQ29tcGFyYXRvciBpbXBsZW1lbnRhdGlvbnMKICAqIFtJTy0xNzZdIERpcmVjdG9yeVdhbGtlciAtIGFkZCBmaWx0ZXJEaXJlY3RvcnlDb250ZW50cygpIGNhbGxiYWNrIG1ldGhvZCBmb3IgZmlsdGVyaW5nIGRpcmVjdG9yeSBjb250ZW50cwogICogW0lPLTIxMF0gRmlsZUZpbHRlciAtIG5ldyBNYWdpYyBOdW1iZXIgRmlsZUZpbHRlcgogICogW0lPLTIyMV0gRmlsZUZpbHRlclV0aWxzIC0gYWRkIG1ldGhvZHMgZm9yIHN1ZmZpeCBhbmQgcHJlZml4IGZpbHRlcnMgd2hpY2ggdGFrZSBhbiBJT0Nhc2Ugb2JqZWN0CiAgKiBbSU8tMjMyXSBGaWxlRmlsdGVyVXRpbHMgLSBhZGQgbWV0aG9kIGZvciBuYW1lIGZpbHRlcnMgd2hpY2ggdGFrZSBhbiBJT0Nhc2Ugb2JqZWN0CiAgKiBbSU8tMjI5XSBGaWxlRmlsdGVyVXRpbHMgLSBhZGQgdmFyYXJncyBhbmQoKSBhbmQgb3IoKSBtZXRob2RzCiAgKiBbSU8tMTk4XSBGaWxlRmlsdGVyVXRpbHMgLSBhZGQgYWJpbGl0eSB0byBhcHBseSBmaWxlIGZpbHRlcnMgdG8gY29sbGVjdGlvbnMgYW5kIGFycmF5cwogICogW0lPLTE1Nl0gRmlsZW5hbWVVdGlscyAtIGFkZCBub3JtYWxpemUoKSBhbmQgbm9ybWFsaXplTm9FbmRTZXBhcmF0b3IoKSBtZXRob2RzIHdoaWNoIGFsbG93IHRoZSBzZXBhcmF0b3IgY2hhcmFjdGVyIHRvIGJlIHNwZWNpZmllZAogICogW0lPLTE5NF0gRmlsZVN5c3RlbVV0aWxzIC0gYWRkIGZyZWVTcGFjZUtiKCkgbWV0aG9kIHdpdGggbm8gaW5wdXQgYXJndW1lbnRzCiAgKiBbSU8tMTg1XSBGaWxlU3lzdGVtVXRpbHMgLSBhZGQgZnJlZVNwYWNlS2IoKSBtZXRob2RzIHRoYXQgdGFrZSBhIHRpbWVvdXQgcGFyYW1ldGVyIC0gZml4ZXMgZnJlZVNwYWNlV2luZG93cygpIGJsb2NrcwogICogW0lPLTE1NV0gRmlsZVV0aWxzIC0gdXNlIE5JTyB0byBjb3B5IGZpbGVzCiAgKiBbSU8tMTY4XSBGaWxlVXRpbHMgLSBhZGQgbmV3IGlzU3ltbGluaygpIG1ldGhvZAogICogW0lPLTIxOV0gRmlsZVV0aWxzIC0gdGhyb3cgRmlsZUV4aXN0c0V4Y2VwdGlvbiB3aGVuIG1vdmluZyBhIGZpbGUgb3IgZGlyZWN0b3J5IGlmIHRoZSBkZXN0aW5hdGlvbiBhbHJlYWR5IGV4aXN0cwogICogW0lPLTIzNF0gRmlsZVV0aWxzIC0gYWRkIE1ldGhvZHMgZm9yIHJldHJpZXZpbmcgU3lzdGVtIFVzZXIvVGVtcCBkaXJlY3Rvcmllcy9wYXRocwogICogW0lPLTIwOF0gRmlsZVV0aWxzIC0gYWRkIHRpbWVvdXQgKGNvbm5lY3Rpb24gYW5kIHJlYWQpIHN1cHBvcnQgZm9yIGNvcHlVUkxUb0ZpbGUoKSBtZXRob2QgCiAgKiBbSU8tMjM4XSBGaWxlVXRpbHMgLSBhZGQgc2l6ZU9mKEZpbGUpIG1ldGhvZAogICogW0lPLTE4MV0gTGluZUl0ZXJhdG9yIG5vdyBpbXBsZW1lbnRzIEl0ZXJhYmxlCiAgKiBbSU8tMjI0XSBJT1V0aWxzIC0gYWRkIGNsb3NlUXVpZXRseShDbG9zZWFibGUpIGFuZCBjbG9zZVF1aWV0bHkoU29ja2V0KSBtZXRob2RzCiAgKiBbSU8tMjAzXSBJT1V0aWxzIC0gYWRkIHNraXBGdWxseSgpIG1ldGhvZCBmb3IgSW5wdXRTdHJlYW1zCiAgKiBbSU8tMTM3XSBJT1V0aWxzIGFuZCBCeXRlQXJyYXlPdXRwdXRTdHJlYW0gLSBhZGQgdG9CdWZmZXJlZElucHV0U3RyZWFtKCkgbWV0aG9kIHRvIGF2b2lkIHVubmVjZXNzYXJ5IGFycmF5IGFsbG9jYXRpb24vY29weQogICogW0lPLTE5NV0gUHJveHkgc3RyZWFtcy9SZWFkZXIvV3JpdGVyIC0gcHJvdmlkZSBleGNlcHRpb24gaGFuZGxpbmcgbWV0aG9kcwogICogW0lPLTIxMV0gUHJveHkgSW5wdXQvT3V0cHV0IHN0cmVhbXMgLSBhZGQgcHJlL3Bvc3QgcHJvY2Vzc2luZyBzdXBwb3J0CiAgKiBbSU8tMjQyXSBQcm94eSBSZWFkZXIvV3JpdGVyIC0gYWRkIHByZS9wb3N0IHByb2Nlc3Npbmcgc3VwcG9ydAoKQnVnIGZpeGVzIGZyb20gMS40Ci0tLS0tLS0tLS0tLS0tLS0tLQogICogW0lPLTIxNF0gQnl0ZUFycmF5T3V0cHV0U3RyZWFtIC0gZml4IGluY29uc2lzdGVudCBzeW5jaHJvbml6YXRpb24gb2YgZmllbGRzCiAgKiBbSU8tMjAxXSBDb3VudGluZyBJbnB1dC9PdXRwdXQgc3RyZWFtcyAtIGZpeCBpbmNvbnNpc3RlbnQgc3luY2hyb25pemF0aW9uCiAgKiBbSU8tMTU5XSBGaWxlQ2xlYW5pbmdUcmFja2VyIC0gZml4IHJlbW92ZSgpIG5ldmVyIHJldHVybnMgbnVsbAogICogW0lPLTIyMF0gRmlsZUNsZWFuaW5nVHJhY2tlciAtIGZpeCBWZWN0b3IgcGVyZm9ybXMgYmFkbHkgdW5kZXIgbG9hZAogICogW0lPLTE2N10gRmlsZW5hbWVVdGlscyAtIGZpeCBjYXNlLWluc2Vuc2l0aXZlIHN0cmluZyBoYW5kbGluZyBpbiBGaWxlbmFtZVV0aWxzIGFuZCBGaWxlc3lzdGVtVXRpbHMKICAqIFtJTy0xNzldIEZpbGVuYW1lVXRpbHMgLSBmaXggU3RyaW5nSW5kZXhPdXRPZkJvdW5kcyBleGNlcHRpb24gaW4gZ2V0UGF0aE5vRW5kU2VwYXJhdG9yKCkKICAqIFtJTy0yNDhdIEZpbGVuYW1lVXRpbHMgLSBmaXggZ2V0RnVsbFBhdGhOb0VuZFNlcGFyYXRvcigpIHJldHVybnMgZW1wdHkgd2hpbGUgcGF0aCBpcyBhIG9uZSBsZXZlbCBkaXJlY3RvcnkKICAqIFtJTy0yNDZdIEZpbGVuYW1lVXRpbHMgLSBmaXggd2lsZGNhcmRNYXRjaCBnaXZlcyBpbmNvcnJlY3QgcmVzdWx0cyAKICAqIFtJTy0xODddIEZpbGVTeXN0ZW1VdGlscyAtIGZpeCBmcmVlU3BhY2VLYigpIGRvZXNuJ3Qgd29yayB3aXRoIHJlbGF0aXZlIHBhdGhzIG9uIExpbnV4CiAgKiBbSU8tMTYwXSBGaWxlU3lzdGVtVXRpbHMgLSBmaXggZnJlZVNwYWNlKCkgZmFpbHMgb24gc29sYXJpcwogICogW0lPLTIwOV0gRmlsZVN5c3RlbVV0aWxzIC0gZml4IGZyZWVTcGFjZUtiKCkgZmFpbHMgdG8gcmV0dXJuIGNvcnJlY3Qgc2l6ZSBmb3IgYSB3aW5kb3dzIG1vdW50IHBvaW50CiAgKiBbSU8tMTYzXSBGaWxlVXRpbHMgLSBmaXggdG9VUkxzKCkgdXNpbmcgZGVwcmVjYXRlZCBtZXRob2Qgb2YgY29udmVyc2lvbiB0byBVUkwKICAqIFtJTy0xNjhdIEZpbGVVdGlscyAtIGZpeCBTeW1ib2xpYyBsaW5rcyBmb2xsb3dlZCB3aGVuIGRlbGV0aW5nIGRpcmVjdG9yeQogICogW0lPLTIzMV0gRmlsZVV0aWxzIC0gZml4IHdyb25nIGV4Y2VwdGlvbiBtZXNzYWdlIGdlbmVyYXRlZCBpbiBpc0ZpbGVOZXdlcigpIG1ldGhvZAogICogW0lPLTIwN10gRmlsZVV0aWxzIC0gZml4IHJhY2UgY29uZGl0aW9uIGluIGZvcmNlTWtkaXIoKSBtZXRob2QKICAqIFtJTy0yMTddIEZpbGVVdGlscyAtIGZpeCBjb3B5RGlyZWN0b3J5VG9EaXJlY3RvcnkoKSBtYWtlcyBpbmZpbml0ZSBsb29wcwogICogW0lPLTE2Nl0gRmlsZVV0aWxzIC0gZml4IFVSTCBkZWNvZGluZyBpbiB0b0ZpbGUoVVJMKQogICogW0lPLTE5MF0gRmlsZVV0aWxzIC0gZml4IGNvcHlEaXJlY3Rvcnkgbm90IHByZXNlcnZpbmcgbGFzdG1vZGlmaWVkIGRhdGUgb24gc3ViLWRpcmVjdG9yaWVzCiAgKiBbSU8tMjQwXSBGaWxlRmlsdGVyVXRpbHMgLSBlbnN1cmUgY3ZzRmlsdGVyIGFuZCBzdm5GaWx0ZXIgYXJlIG9ubHkgY3JlYXRlZCBvbmNlLgogICogW0lPLTE3NV0gSU9VdGlscyAtIGZpeCBjb3B5RmlsZSgpIGlzc3VlcyB3aXRoIHZlcnkgbGFyZ2UgZmlsZXMKICAqIFtJTy0xOTFdIEltcHJvdmVtZW50cyBmcm9tIHN0YXRpYyBhbmFseXNpcwogICogW0lPLTIxNl0gTG9ja2FibGVGaWxlV3JpdGVyIC0gZGVsZXRlIGZpbGVzIHF1aWV0bHkgd2hlbiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGR1cmluZyBpbml0aWFsaXphdGlvbgogICogW0lPLTI0M10gU3dhcHBlZERhdGFJbnB1dFN0cmVhbSAtIGZpeCByZWFkQm9vbGVhbiBpcyBpbnZlcnRlZAogICogW0lPLTIzNV0gVGVzdHMgLSByZW1vdmUgdW51c2VkIFllbGxPbkZsdXNoQW5kQ2xvc2VPdXRwdXRTdHJlYW0gZnJvbSBDb3B5VXRpbHNUZXN0CiAgKiBbSU8tMTYxXSBUZXN0cyAtIGZpeCBGaWxlQ2xlYW5pbmdUcmFja2VyVGVzdENhc2UgaGFuZ2luZwoKRG9jdW1lbnRhdGlvbiBjaGFuZ2VzIGZyb20gMS40Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogW0lPLTE4MyBGaWxlbmFtZVV0aWxzLmdldEV4dGVuc2lvbigpIG1ldGhvZCBkb2N1bWVudGF0aW9uIGltcHJvdmVtZW50cwogICogW0lPLTIyNiBGaWxlVXRpbHMuYnl0ZUNvdW50VG9EaXNwbGF5U2l6ZSgpIGRvY3VtZW50YXRpb24gY29ycmVjdGlvbnMKICAqIFtJTy0yMDUgRmlsZVV0aWxzLmZvcmNlTWtkaXIoKSBkb2N1bWVudGF0aW9uIGltcHJvdmVtZW50cwogICogW0lPLTIxNSBGaWxlVXRpbHMgY29weSBmaWxlL2RpcmVjdG9yeSBpbXByb3ZlIGRvY3VtZW50YXRpb24gcmVnYXJkaW5nIHByZXNlcnZpbmcgdGhlIGxhc3QgbW9kaWZpZWQgZGF0ZQogICogW0lPLTE4OSBIZXhEdW1wLmR1bXAoKSBtZXRob2QgZG9jdW1lbnRhdGlvbiBpbXByb3ZlbWVudHMKICAqIFtJTy0xNzEgSU9DYXNlIGRvY3VtZW50IHRoYXQgaXQgYXNzdW1lcyB0aGVyZSBhcmUgb25seSB0d28gT1NlczogV2luZG93cyBhbmQgVW5peAogICogW0lPLTIyMyBJT1V0aWxzLmNvcHkoKSBkb2N1bWVudGF0aW9uIGNvcnJlY3Rpb25zCiAgKiBbSU8tMjQ3IElPVXRpbHMuY2xvc2VRdWlldGx5KCkgaW1wcm92ZSBkb2N1bWVudGF0aW9uIHdpdGggZXhhbXBsZXMKICAqIFtJTy0yMDIgTm90RmlsZUZpbHRlciBkb2N1bWVudGF0aW9uIGNvcnJlY3Rpb25zCiAgKiBbSU8tMjA2IFByb3h5SW5wdXRTdHJlYW0gLSBmaXggbWlzbGVhZGluZyBwYXJhbWV0ZXIgbmFtZXMKICAqIFtJTy0yMTIgUHJveHlJbnB1dFN0cmVhbS5za2lwKCkgZG9jdW1lbnRhdGlvbiBjb3JyZWN0aW9ucwoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNvbW1vbnMgSU8gUGFja2FnZSBWZXJzaW9uIDEuNAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCkNvbXBhdGliaWxpdHkgd2l0aCAxLjMuMgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQmluYXJ5IGNvbXBhdGlibGUgLSBZZXMKClNvdXJjZSBjb21wYXRpYmxlIC0gWWVzCgpTZW1hbnRpYyBjb21wYXRpYmxlIC0gWWVzCiAgQ2hlY2sgdGhlIGJ1ZyBmaXhlcyBzZWN0aW9uIGZvciBzZW1hbnRpYyBidWcgZml4ZXMKCkNvbW1vbnMgSU8gMS40IGludHJvZHVjZXMgZm91ciBuZXcgaW1wbGVtZW50YXRpb25zIHdoaWNoIGRlcGVuZCBvbiBKREsgMS40IGZlYXR1cmVzCihDaGFyU2VxdWVuY2VSZWFkZXIsIEZpbGVXcml0ZXJXaXRoRW5jb2RpbmcsIElPRXhjZXB0aW9uV2l0aENhdXNlIGFuZCBSZWdleEZpbGVGaWx0ZXIpLgpJdCBoYXMgYmVlbiBidWlsdCB3aXRoIHRoZSBKREsgc291cmNlIGFuZCB0YXJnZXQgb3B0aW9ucyBzZXQgdG8gSkRLIDEuMyBhbmQsIGV4Y2VwdCBmb3IKdGhvc2UgaW1wbGVtZW50YXRpb25zLCBjYW4gYmUgdXNlZCB3aXRoIEpESyAxLjMgKHNlZSBJTyBJTy0xMjcpLgoKRGVwcmVjYXRpb25zIGZyb20gMS4zLjIKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBGaWxlQ2xlYW5lciBkZXByZWNhdGVkIGluIGZhdm91ciBvZiBGaWxlQ2xlYW5pbmdUcmFja2VyIFtzZWUgSU8tMTE2XQoKQnVnIGZpeGVzIGZyb20gMS4zLjIKLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBGaWxlVXRpbHMKICAtIGZvcmNlRGVsZXRlIG9mIG9ycGhhbmVkIFNvZnRsaW5rcyBkb2VzIG5vdCB3b3JrIFtJTy0xNDddCiAgLSBJbmZpbml0ZSBsb29wIG9uIEZpbGVVdGlscy5jb3B5RGlyZWN0b3J5IHdoZW4gdGhlIGRlc3RpbmF0aW9uIGRpcmVjdG9yeSBpcyB3aXRoaW4KICAgIHRoZSBzb3VyY2UgZGlyZWN0b3J5IFtJTy0xNDFdCiAgLSBBZGQgYSBjb3B5RGlyZWN0b3J5KCkgbWV0aG9kIHRoYXQgbWFrZXMgdXNlIG9mIEZpbGVGaWx0ZXIgW0lPLTEwNV0KICAtIEFkZCBtb3ZlRGlyZWN0b3J5KCkgYW5kIG1vdmVGaWxlKCkgbWV0aG9kcyBbSU8tNzddCgotIEhleER1bXAKICAtIEhleER1bXAncyB1c2Ugb2Ygc3RhdGljIFN0cmluZ0J1ZmZlcnMgaXNuJ3QgdGhyZWFkLXNhZmUgW0lPLTEzNl0KCkVuaGFuY2VtZW50cyBmcm9tIDEuMy4yCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gRmlsZVV0aWxzCiAgLSBBZGQgYSBkZWxldGVRdWlldGx5IG1ldGhvZCBbSU8tMTM1XQoKLSBGaWxlbmFtZVV0aWxzCiAgLSBBZGQgZmlsZSBuYW1lIGV4dGVuc2lvbiBzZXBhcmF0b3IgY29uc3RhbnRzW0lPLTE0OV0KCi0gSU9FeGNlcHRpb25XaXRoQ2F1c2UgW0lPLTE0OF0KICAtIEFkZCBhIG5ldyBJT0V4Y2VwdGlvbiBpbXBsZW1lbnRhdGlvbiB3aXRoIGNvbnN0cnVjdG9ycyB3aGljaCB0YWtlIGEgY2F1c2UKCi0gVGVlSW5wdXRTdHJlYW0gW0lPLTEyOV0KICAtIEFkZCBuZXcgVGVlIGlucHV0IHN0cmVhbSBpbXBsZW1lbnRhdGlvbgoKLSBGaWxlV3JpdGVyV2l0aEVuY29kaW5nIFtJTy0xNTNdCiAgLSBBZGQgbmV3IEZpbGUgV3JpdGVyIGltcGxlbWVudGF0aW9uIHRoYXQgYWNjZXB0cyBhbiBlbmNvZGluZwoKLSBDaGFyU2VxdWVuY2VSZWFkZXIgW0lPLTEzOF0KICAtIEFkZCBuZXcgUmVhZGVyIGltcGxlbWVudGF0aW9uIHRoYXQgaGFuZGxlcyBhbnkgQ2hhclNlcXVlbmNlIChTdHJpbmcsCiAgICBTdHJpbmdCdWZmZXIsIFN0cmluZ0J1aWxkZXIgb3IgQ2hhckJ1ZmZlcikgCgotIFRoZXNob2xkaW5nT3VwdXRTdHJlYW0gW0lPLTEyMV0KICAtIEFkZCBhIHJlc2V0KCkgbWV0aG9kIHdoaWNoIHNldHMgdGhlIGNvdW50IG9mIHRoZSBieXRlcyB3cml0dGVuIGJhY2sgdG8gemVyby4KCi0gRGVmZXJyZWRGaWxlT3V0cHV0U3RyZWFtIFtJTy0xMzBdCiAgLSBBZGQgc3VwcG9ydCBmb3IgdGVtcG9yYXJ5IGZpbGVzCgotIEJ5dGVBcnJheU91dHB1dFN0cmVhbQogIC0gQWRkIGEgbmV3IHdyaXRlKElucHV0U3RyZWFtKSBtZXRob2QgW0lPLTE1Ml0KCi0gTmV3IENsb3NlZCBJbnB1dC9PdXRwdXQgc3RyZWFtIGltcGxlbWVudGF0aW9ucyBbSU8tMTIyXQogIC0gQXV0b0Nsb3NlSW5wdXRTdHJlYW0gLSBhdXRvbWF0aWNhbGx5IGNsb3NlcyBhbmQgZGlzY2FyZHMgdGhlIHVuZGVybHlpbmcgaW5wdXQgc3RyZWFtCiAgLSBDbG9zZWRJbnB1dFN0cmVhbSAtIHJldHVybnMgLTEgZm9yIGFueSByZWFkIGF0dGVtcHRzCiAgLSBDbG9zZWRPdXRwdXRTdHJlYW0gLSB0aHJvd3MgYW4gSU9FeGNlcHRpb24gZm9yIGFueSB3cml0ZSBhdHRlbXB0cwogIC0gQ2xvc2VTaGllbGRJbnB1dFN0cmVhbSAtIHByZXZlbnRzIHRoZSB1bmRlcmx5aW5nIGlucHV0IHN0cmVhbSBmcm9tIGJlaW5nIGNsb3NlZC4KICAtIENsb3NlU2hpZWxkT3V0cHV0U3RyZWFtIC0gcHJldmVudHMgdGhlIHVuZGVybHlpbmcgb3V0cHV0IHN0cmVhbSBmcm9tIGJlaW5nIGNsb3NlZC4KCi0gQWRkIFNpbmdsZXRvbiBDb25zdGFudHMgdG8gc2V2ZXJhbCBzdHJlYW0gY2xhc3NlcyBbSU8tMTQzXQoKLSBQcmVmaXhGaWxlRmlsdGVyIFtJTy0xMjZdCiAgLSBBZGQgZmFjaWx0aXkgdG8gc3BlY2lmeSBjYXNlIHNlbnNpdGl2aXR5IG9uIHByZWZpeCBtYXRjaGluZwoKLSBTdWZmaXhGaWxlRmlsdGVyIFtJTy0xMjZdCiAgLSBBZGQgZmFjaWx0aXkgdG8gc3BlY2lmeSBjYXNlIHNlbnNpdGl2aXR5IG9uIHN1ZmZpeCBtYXRjaGluZwoKLSBSZWdleEZpbGVGaWx0ZXIgW0lPLTc0XQogIC0gQWRkIG5ldyByZWd1bGFyIGV4cHJlc3Npb24gZmlsZSBmaWx0ZXIgaW1wbGVtZW50YXRpb24KCi0gTWFrZSBJT0ZpbGVGaWx0ZXIgaW1wbGVtZW50YXRpb25zIFNlcmlhbGl6YWJsZSBbSU8tMTMxXQoKLSBJbXByb3ZlIElPRmlsZUZpbHRlciB0b1N0cmluZygpIG1ldGhvZHMgW0lPLTEyMF0KCi0gTWFrZSBmaWVsZHMgZmluYWwgc28gY2xhc3NlcyBhcmUgaW1tdXRhYmxlL3RocmVhZHNhZmUgW0lPLTEzM10KICAtIGNoYW5nZXMgdG8gQWdlLCBEZWxlZ2F0ZSwgTmFtZSwgTm90LCBQcmVmaXgsIFJlZ2V4LCBTaXplLCBTdWZmaXggYW5kIFdpbGRjYXJkIElPRmlsZUZpbHRlcgogICAgaW1wbGVtZW50YXRpb25zLgoKLSBJT0Nhc2UKICAtIEFkZCBhIGNvbXBhcmUgbWV0aG9kIHRvIElPQ2FzZSBbSU8tMTQ0XQoKLSBBZGQgYSBwYWNrYWdlIG9mIGphdmEudXRpbC5Db21wYXJhdG9yIGltcGxlbWVudGF0aW9ucyBmb3IgZmlsZXMgW0lPLTE0NV0KICAtIERlZmF1bHRGaWxlQ29tcGFyYXRvciAtIGNvbXBhcmUgZmlsZXMgdXNpbmcgdGhlIGRlZmF1bHQgRmlsZS5jb21wYXJlVG8oRmlsZSkgbWV0aG9kLgogIC0gRXh0ZW5zaW9uRmlsZUNvbXBhcmF0b3IgLSBjb21wYXJlcyBmaWxlcyB1c2luZyBmaWxlIG5hbWUgZXh0ZW5zaW9ucy4KICAtIExhc3RNb2RpZmllZEZpbGVDb21wYXJhdG9yIC0gY29tcGFyZXMgZmlsZXMgdXNpbmcgdGhlIGxhc3QgbW9kaWZpZWQgZGF0ZS90aW1lLgogIC0gTmFtZUZpbGVDb21wYXJhdG9yIC0gY29tcGFyZXMgZmlsZXMgdXNpbmcgZmlsZSBuYW1lcy4KICAtIFBhdGhGaWxlQ29tcGFyYXRvciAtIGNvbXBhcmVzIGZpbGVzIHVzaW5nIGZpbGUgcGF0aHMuCiAgLSBTaXplRmlsZUNvbXBhcmF0b3IgLSBjb21wYXJlcyBmaWxlcyB1c2luZyBmaWxlIHNpemVzLgogIAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ29tbW9ucyBJTyBQYWNrYWdlIFZlcnNpb24gMS4zLjIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpDb21wYXRpYmlsaXR5IHdpdGggMS4zLjEKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpCaW5hcnkgY29tcGF0aWJsZSAtIFllcwoKU291cmNlIGNvbXBhdGlibGUgLSBZZXMKClNlbWFudGljIGNvbXBhdGlibGUgLSBZZXMKCkNvbXBhdGliaWxpdHkgd2l0aCAxLjMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpCaW5hcnkgY29tcGF0aWJsZSAtIE5vCiAgU2VlIFtJTy0xMTNdCgpTb3VyY2UgY29tcGF0aWJsZSAtIE5vCiAgU2VlIFtJTy0xMTNdCgpTZW1hbnRpYyBjb21wYXRpYmxlIC0gWWVzCgpFbmhhbmNlbWVudHMgc2luY2UgMS4zLjEKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgotIENyZWF0ZWQgdGhlIEZpbGVDbGVhbmluZ1RyYWNrZXIsIGJhc2ljYWxseSBhIG5vbi1zdGF0aWMgdmVyc2lvbiBvZiB0aGUKICBGaWxlQ2xlYW5lciwgd2hpY2ggY2FuIGJlIGNvbnRyb2xsZWQgYnkgdGhlIHVzZXIuIFtJTy0xMTZdCi0gVGhlIEZpbGVDbGVhbmVyIGlzIGRlcHJlY2F0ZWQuCgpCdWcgZml4ZXMgZnJvbSAxLjMuMQotLS0tLS0tLS0tLS0tLS0tLS0tLQoKLSBTb21lIHRlc3RzLCB3aGljaCBhcmUgaW1wbGljaXRseSBhc3N1bWluZyBhIFVuaXgtbGlrZSBmaWxlIHN5c3RlbSwgYXJlCiAgbm93IHNraXBwZWQgb24gV2luZG93cy4gW0lPLTExNV0KLSBFbmRpYW5VdGlscwogIC0gQm90aCByZWFkU3dhcHBlZFVuc2lnbmVkSW50ZWdlciguLi4pIG1ldGhvZHMgY291bGQgcmV0dXJuIG5lZ2F0aXZlIAogICAgbnVtYmVycyBkdWUgdG8gaW50L2xvbmcgY2FzdGluZy4gW0lPLTExN10KCkJ1ZyBmaXhlcyBmcm9tIDEuMwotLS0tLS0tLS0tLS0tLS0tLS0KCi0gRmlsZVV0aWxzCiAgLSBOUEUgaW4gb3Blbk91dHB1dFN0cmVhbShGaWxlKSB3aGVuIGZpbGUgaGFzIG5vIHBhcmVudCBpbiBwYXRoIFtJTy0xMTJdCiAgLSByZWFkRmlsZVRvU3RyaW5nKEZpbGUpIGlzIG5vdCBzdGF0aWMgW0lPLTExM10KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDb21tb25zIElPIFBhY2thZ2UgVmVyc2lvbiAxLjMuMQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCkNvbXBhdGliaWxpdHkgd2l0aCAxLjMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpCaW5hcnkgY29tcGF0aWJsZSAtIE5vCiAgU2VlIFtJTy0xMTNdCgpTb3VyY2UgY29tcGF0aWJsZSAtIE5vCiAgU2VlIFtJTy0xMTNdCgpTZW1hbnRpYyBjb21wYXRpYmxlIC0gWWVzCgpCdWcgZml4ZXMgZnJvbSAxLjMKLS0tLS0tLS0tLS0tLS0tLS0tCgotIEZpbGVVdGlscwogIC0gTlBFIGluIG9wZW5PdXRwdXRTdHJlYW0oRmlsZSkgd2hlbiBmaWxlIGhhcyBubyBwYXJlbnQgaW4gcGF0aCBbSU8tMTEyXQogIC0gcmVhZEZpbGVUb1N0cmluZyhGaWxlKSBpcyBub3Qgc3RhdGljIFtJTy0xMTNdCiAgCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDb21tb25zIElPIFBhY2thZ2UgVmVyc2lvbiAxLjMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpDb21wYXRpYmlsaXR5IHdpdGggMS4yCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQmluYXJ5IGNvbXBhdGlibGUgLSBZZXMKClNvdXJjZSBjb21wYXRpYmxlIC0gWWVzCgpTZW1hbnRpYyBjb21wYXRpYmxlIC0gWWVzCiAgQ2hlY2sgdGhlIGJ1ZyBmaXhlcyBzZWN0aW9uIGZvciBzZW1hbnRpYyBidWcgZml4ZXMKCkRlcHJlY2F0aW9ucyBmcm9tIDEuMgotLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBXaWxkY2FyZEZpbHRlciBkZXByZWNhdGVkLCByZXBsYWNlZCBieSBXaWxkY2FyZEZpbGVGaWx0ZXIKICAtIG9sZCBjbGFzcyBvbmx5IGFjY2VwdGVkIGZpbGVzLCB0aHVzIGhhZCBhIGNvbmZ1c2luZyBkdWFsIHB1cnBvc2UKCi0gRmlsZVN5c3RlbVV0aWxzLmZyZWVTcGFjZSBkZXByZWNhdGVkLCByZXBsYWNlZCBieSBmcmVlU3BhY2VLYgogIC0gZnJlZVNwYWNlIHJldHVybnMgYSByZXN1bHQgdGhhdCB2YXJpZXMgYnkgb3BlcmF0aW5nIHN5c3RlbSBhbmQKICAgIHRodXMgaXNuJ3QgdGhhdCB1c2VmdWwKICAtIGZyZWVTcGFjZUtiIHJldHVybnMgbXVjaCBiZXR0ZXIgYW5kIG1vcmUgY29uc2lzdGVudCByZXN1bHRzCiAgLSBmcmVlU3BhY2VLYiBleGlzdGVkIGluIHYxLjIsIHNvIHRoaXMgaXMgYSBnZW50bGUgY3V0b3ZlcgoKQnVnIGZpeGVzIGZyb20gMS4yCi0tLS0tLS0tLS0tLS0tLS0tLQotIExpbmVJdGVyYXRvciBub3cgaW1wbGVtZW50cyBJdGVyYXRvcgogIC0gSXQgd2FzIGFsd2F5cyBzdXBwb3NlZCB0by4uLgoKLSBGaWxlU3lzdGVtVXRpbHMuZnJlZVNwYWNlL2ZyZWVTcGFjZUtiIFtJTy04M10KICAtIFRoZXNlIHNob3VsZCBub3cgd29yayBvbiBBSVggYW5kIEhQLVVYCgotIEZpbGVTeXN0ZW1VdGlscy5mcmVlU3BhY2UvZnJlZVNwYWNlS2IgW0lPLTkwXQogIC0gQXZvaWQgaW5maW5pdGUgbG9vcGluZyBpbiBXaW5kb3dzCiAgLSBDYXRjaCBtb3JlIGVycm9ycyB3aXRoIG5pY2UgbWVzc2FnZXMKCi0gRmlsZVN5c3RlbVV0aWxzLmZyZWVTcGFjZSBbSU8tOTFdCiAgLSBUaGlzIGlzIG5vdyBkb2N1bWVudGVkIG5vdCB0byB3b3JrIG9uIFN1bk9TIDUKCi0gRmlsZVN5c3RlbVV0aWxzIFtJTy05M10KICAtIEZpeGVkIHJlc291cmNlIGxlYWsgbGVhZGluZyB0byAnVG9vIG1hbnkgb3BlbiBmaWxlcycgZXJyb3IKICAtIFByZXZpb3VzbHkgZGlkIG5vdCBkZXN0cm95IFByb2Nlc3MgaW5zdGFuY2VzIChhcyBKREsgSmF2YWRvYyBpcyBzbyBwb29yKQogIC0gaHR0cDovL2J1Z3Muc3VuLmNvbS9idWdkYXRhYmFzZS92aWV3X2J1Zy5kbz9idWdfaWQ9NDgwMTAyNwoKLSBGaWxlVXRpbHMudG91Y2ggW0lPLTEwMF0KICAtIFRoZSB0b3VjaCBtZXRob2QgcHJldmlvdXNseSBnYXZlIG5vIGluZGljYXRpb24gd2hlbiB0aGUgZmlsZSBjb3VsZCBub3QKICAgIGJlIHRvdWNoZWQgc3VjY2Vzc2Z1bGx5IChzdWNoIGFzIGR1ZSB0byBhY2Nlc3MgcmVzdHJpY3Rpb25zKSAtIGl0IG5vdwogICAgdGhyb3dzIGFuIElPRXhjZXB0aW9uIGlmIHRoZSBsYXN0IG1vZGlmaWVkIGRhdGUgY2Fubm90IGJlIGNoYW5nZWQKCi0gRmlsZUNsZWFuZXIKICAtIFRoaXMgbm93IGhhbmRsZXMgdGhlIHNpdHVhdGlvbiB3aGVyZSBhbiBlcnJvciBvY2N1cnMgd2hlbiBkZWxldGluZyB0aGUgZmlsZQoKLSBJT1V0aWxzLmNvcHkgW0lPLTg0XQogIC0gQ29weSBtZXRob2RzIGNvdWxkIHJldHVybiBpbmFjY3VyYXRlIGJ5dGUvY2hhciBjb3VudCBmb3IgbGFyZ2Ugc3RyZWFtcwogIC0gVGhlIGNvcHkoSW5wdXRTdHJlYW0sIE91dHB1dFN0cmVhbSkgbWV0aG9kIG5vdyByZXR1cm5zIC0xIGlmIHRoZSBjb3VudCBpcyBncmVhdGVyIHRoYW4gYW4gaW50CiAgLSBUaGUgY29weShSZWFkZXIsIFdyaXRlcikgbWV0aG9kIG5vdyB0aHJvd3Mgbm93IHJldHVybnMgLTEgaWYgdGhlIGNvdW50IGlzIGdyZWF0ZXIgdGhhbiBhbiBpbnQKICAtIEFkZGVkIGEgbmV3IGNvcHlMYXJnZShJbnB1dFN0cmVhbSwgT3V0cHV0U3RyZWFtKSBtZXRob2QgdGhhdCByZXR1cm5zIGEgbG9uZwogIC0gQWRkZWQgYSBuZXcgY29weUxhcmdlKFJlYWRlciwgV3JpdGVyKSBtZXRob2QgdGhhdCByZXR1cm5zIGEgbG9uZwoKLSBDb3VudGluZ0lucHV0U3RyZWFtL0NvdW50aW5nT3V0cHV0U3RyZWFtIFtJTy04NF0KICAtIE1ldGhvZHMgd2VyZSBkZWNsYXJlZCBhcyBpbnQgdGh1cyB0aGUgY291bnQgd2FzIGlubmFjdXJhdGUgZm9yIGxhcmdlIHN0cmVhbXMKICAtIG5ldyBsb25nIGJhc2VkIG1ldGhvZHMgZ2V0Qnl0ZUNvdW50KCkvcmVzZXRCeXRlQ291bnQoKSBhZGRlZAogIC0gZXhpc3RpbmcgbWV0aG9kcyBjaGFuZ2VkIHRvIHRocm93IGFuIGV4Y2VwdGlvbiBpZiB0aGUgY291bnQgaXMgZ3JlYXRlciB0aGFuIGFuIGludAoKLSBGaWxlQmFzZWRUZXN0Q2FzZQogIC0gRml4ZWQgYnVnIGluIGNvbXBhcmUgY29udGVudCBtZXRob2RzIGlkZW50aWZpZWQgYnkgR05VIGNsYXNzcGF0aAoKLSBFbmRpYW5VdGlscy53cml0ZVN3YXBwZWRMb25nKGJ5dGVbXSwgaW50KSBbSU8tMTAxXQogIC0gQW4gaW50IG92ZXJydW4gaW4gdGhlIGJpdCBzaGlmdGluZyB3aGVuIGl0IHNob3VsZCBoYXZlIGJlZW4gYSBsb25nCgotIEVuZGlhblV0aWxzLndyaXRlU3dhcHBlZExvbmcoSW5wdXRTdHJlYW0pIFtJTy0xMDJdCiAgLSBUaGUgcmV0dXJuIG9mIGlucHV0LnJlYWQoYnl0ZVtdKSB3YXMgbm90IGJlaW5nIGNoZWNrZWQgdG8gZW5zdXJlIGFsbCA4IGJ5dGVzIHdlcmUgcmVhZAoKRW5oYW5jZW1lbnRzIGZyb20gMS4yCi0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIERpcmVjdG9yeVdhbGtlciBbSU8tODZdCiAgLSBOZXcgY2xhc3MgZGVzaWduZWQgZm9yIHN1YmNsYXNzaW5nIHRvIHdhbGsgdGhyb3VnaCBhIHNldCBvZiBmaWxlcy4KICAgIERpcmVjdG9yeVdhbGtlciBwcm92aWRlcyB0aGUgd2FsayBvZiB0aGUgZGlyZWN0b3JpZXMsIGZpbHRlcmluZyBvZgogICAgZGlyZWN0b3JpZXMgYW5kIGZpbGVzLCBhbmQgY2FuY2VsbGF0aW9uIHN1cHBvcnQuIFRoZSBzdWJjbGFzcyBtdXN0IHByb3ZpZGUKICAgIHRoZSBzcGVjaWZpYyBiZWhhdmlvdXIsIHN1Y2ggYXMgdGV4dCBzZWFyY2hpbmcgb3IgaW1hZ2UgcHJvY2Vzc2luZy4KCi0gSU9DYXNlCiAgLSBOZXcgY2xhc3MvZW51bWVyYXRpb24gZm9yIGNhc2Utc2Vuc2l0aXZpdHkgY29udHJvbAoKLSBGaWxlbmFtZVV0aWxzCiAgLSBOZXcgbWV0aG9kcyB0byBoYW5kbGUgY2FzZS1zZW5zaXRpdml0eQogIC0gd2lsZGNhcmRNYXRjaCAtIG5ldyBtZXRob2QgdGhhdCBoYXMgSU9DYXNlIGFzIGEgcGFyYW1ldGVyCiAgLSBlcXVhbHMgLSBuZXcgbWV0aG9kIHRoYXQgaGFzIElPQ2FzZSBhcyBhIHBhcmFtZXRlcgoKLSBGaWxlVXRpbHMgW0lPLTEwOF0gLSBuZXcgZGVmYXVsdCBlbmNvZGluZyBtZXRob2RzIGZvcjoKICAtIHJlYWRGaWxlVG9TdHJpbmcoRmlsZSkKICAtIHJlYWRMaW5lcyhGaWxlKQogIC0gbGluZUl0ZXJhdG9yKEZpbGUpCiAgLSB3cml0ZVN0cmluZ1RvRmlsZShGaWxlLCBTdHJpbmcpCiAgLSB3cml0ZUxpbmVzKEZpbGUsIENvbGxlY3Rpb24pCiAgLSB3cml0ZUxpbmVzKEZpbGUsIENvbGxlY3Rpb24sIFN0cmluZykKCi0gRmlsZVV0aWxzLm9wZW5PdXRwdXRTdHJlYW0gIFtJTy0xMDddCiAgLSBuZXcgbWV0aG9kIHRvIG9wZW4gYSBGaWxlT3V0cHV0U3RyZWFtLCBjcmVhdGluZyBwYXJlbnQgZGlyZWN0b3JpZXMgaWYgcmVxdWlyZWQKLSBGaWxlVXRpbHMudG91Y2gKLSBGaWxlVXRpbHMuY29weVVSTFRvRmlsZQotIEZpbGVVdGlscy53cml0ZVN0cmluZ1RvRmlsZQotIEZpbGVVdGlscy53cml0ZUJ5dGVBcnJheVRvRmlsZQotIEZpbGVVdGlscy53cml0ZUxpbmVzCiAgLSBlbmhhbmNlZCB0byBjcmVhdGUgcGFyZW50IGRpcmVjdG9yaWVzIGlmIHJlcXVpcmVkCi0gRmlsZVV0aWxzLm9wZW5JbnB1dFN0cmVhbSAgW0lPLTEwN10KICAtIG5ldyBtZXRob2QgdG8gb3BlbiBhIEZpbGVJbnB1dFN0cmVhbSwgcHJvdmlkaW5nIGJldHRlciBlcnJvciBtZXNzYWdlcyB0aGFuIHRoZSBKREsKCi0gRmlsZVV0aWxzLmlzRmlsZU9sZGVyCiAgLSBuZXcgbWV0aG9kcyB0byBjaGVjayBpZiBhIGZpbGUgaXMgb2xkZXIgKGkuZS4gaXNGaWxlT2xkZXIoKSkgLSBjb3VudGVycGFydHMKICAgIHRvIHRoZSBleGlzdGluZyBpc0ZpbGVOZXdlcigpIG1ldGhvZHMuCgotIEZpbGVVdGlscy5jaGVja3N1bSwgRmlsZVV0aWxzLmNoZWNrc3VtQ1JDMzIKICAtIG5ldyBtZXRob2RzIHRvIGNyZWF0ZSBhIGNoZWNrc3VtIG9mIGEgZmlsZQoKLSBGaWxlVXRpbHMuY29weUZpbGVUb0RpcmVjdG9yeSAgW0lPLTEwNF0KICAtIG5ldyB2YXJpYW50IHRoYXQgb3B0aW9uYWxseSByZXRhaW5zIHRoZSBmaWxlIGRhdGUKCi0gRmlsZURlbGV0ZVN0cmF0ZWd5Ci0gRmlsZUNsZWFuZXIgICAgW0lPLTU2LElPLTcwXQogIC0gRmlsZURlbGV0ZVN0cmF0ZWd5IGlzIGEgc3RyYXRlZ3kgZm9yIGhhbmRsaW5nIGZpbGUgZGVsZXRpb24KICAtIFRoaXMgY2FuIGJlIHVzZWQgYXMgYSBjYWxiYWNrIGluIEZpbGVDbGVhbmVyCiAgLSBUb2dldGhlciB0aGVzZSBhbGxvdyBGaWxlQ2xlYW5lciB0byBkbyBhIGZvcmNlRGVsZXRlIHRvIGtpbGwgZGlyZWN0b3JpZXMKCi0gRmlsZUNsZWFuZXIuZXhpdFdoZW5GaW5pc2hlZCBbSU8tOTldCiAgLSBBIG5ldyBtZXRob2QgdGhhdCBhbGxvd3MgdGhlIGludGVybmFsIGNsZWFuZXIgdGhyZWFkIHRvIGJlIGNsZWFubHkgdGVybWluYXRlZAoKLSBXaWxkY2FyZEZpbGVGaWx0ZXIKICAtIFJlcGxhY2VtZW50IGZvciBXaWxkY2FyZEZpbHRlcgogIC0gQWNjZXB0cyBib3RoIGZpbGVzIGFuZCBkaXJlY3RvcmllcwogIC0gQWJpbGl0eSB0byBjb250cm9sIGNhc2Utc2Vuc2l0aXZpdHkKCi0gTmFtZUZpbGVGaWx0ZXIKICAtIEFiaWxpdHkgdG8gY29udHJvbCBjYXNlLXNlbnNpdGl2aXR5CgotIEZpbGVGaWxlRmlsdGVyCiAgLSBOZXcgSU9GaWxlRmlsdGVyIGltcGxlbWVudGF0aW9uCiAgLSBBY2NlcHRzIGZpbGVzIHdoZXJlIEZpbGUuaXNGaWxlKCkgaXMgdHJ1ZQogIC0gSW4gb3RoZXIgd29yZHMgaXQgZmlsdGVycyBvdXQgZGlyZWN0b3JpZXMKICAtIFNpbmdsZXRvbiBpbnN0YW5jZSBwcm92aWRlZCAoRklMRSkKCi0gQ2FuUmVhZEZpbGVGaWx0ZXIKICAtIE5ldyBJT0ZpbGVGaWx0ZXIgaW1wbGVtZW50YXRpb24KICAtIEFjY2VwdHMgZmlsZXMgd2hlcmUgRmlsZS5jYW5SZWFkKCkgaXMgdHJ1ZQogIC0gU2luZ2xldG9uIGluc3RhbmNlcyBwcm92aWRlZCAoQ0FOX1JFQUQvQ0FOTk9UX1JFQUQvUkVBRF9PTkxZKQoKLSBDYW5Xcml0ZUZpbGVGaWx0ZXIKICAtIE5ldyBJT0ZpbGVGaWx0ZXIgaW1wbGVtZW50YXRpb24KICAtIEFjY2VwdHMgZmlsZXMgd2hlcmUgRmlsZS5jYW5Xcml0ZSgpIGlzIHRydWUKICAtIFNpbmdsZXRvbiBpbnN0YW5jZXMgcHJvdmlkZWQgKENBTl9XUklURS9DQU5OT1RfV1JJVEUpCgotIEhpZGRlbkZpbGVGaWx0ZXIKICAtIE5ldyBJT0ZpbGVGaWx0ZXIgaW1wbGVtZW50YXRpb24KICAtIEFjY2VwdHMgZmlsZXMgd2hlcmUgRmlsZS5pc0hpZGRlbigpIGlzIHRydWUKICAtIFNpbmdsZXRvbiBpbnN0YW5jZXMgcHJvdmlkZWQgKEhJRERFTi9WSVNJQkxFKQoKLSBFbXB0eUZpbGVGaWx0ZXIKICAtIE5ldyBJT0ZpbGVGaWx0ZXIgaW1wbGVtZW50YXRpb24KICAtIEFjY2VwdHMgZmlsZXMgb3IgZGlyZWN0b3JpZXMgdGhhdCBhcmUgZW1wdHkKICAtIFNpbmdsZXRvbiBpbnN0YW5jZXMgcHJvdmlkZWQgKEVNUFRZL05PVF9FTVBUWSkKCi0gVHJ1ZUZpbGVGaWx0ZXIvRmFsc2VGaWxlRmlsdGVyL0RpcmVjdG9yeUZpbGVGaWx0ZXIKICAtIE5ldyBzaW5nbGV0b24gaW5zdGFuY2UgY29uc3RhbnRzIChUUlVFL0ZBTFNFL0RJUkVDVE9SWSkKICAtIFRoZSBuZXcgY29uc3RhbnRzIGFyZSBtb3JlIEpESyAxLjUgZnJpZW5kbHkgd2l0aCByZWdhcmRzIHRvIHN0YXRpYyBpbXBvcnRzCiAgICAod2hlcmVhcyBpZiBldmVyeXRoaW5nIHVzZXMgSU5TVEFOQ0UsIHRoZW4gdGhleSBqdXN0IGNsYXNoKQogIC0gVGhlIG9sZCBJTlNUQU5DRSBjb25zdGFudHMgYXJlIHN0aWxsIHByZXNlbnQgYW5kIGhhdmUgbm90IGJlZW4gZGVwcmVjYXRlZAoKLSBGaWxlRmlsdGVyVXRpbHMuc2l6ZVJhbmdlRmlsZUZpbHRlcgogIC0gbmV3IHNpemVSYW5nZUZpbGVGaWx0ZXIobG9uZyBtaW5pbXVtU2l6ZSwgbG9uZyBtYXhpbXVtU2l6ZSkgbWV0aG9kIHdoaWNoIAogICAgY3JlYXRlcyBhIGZpbHRlciB0aGF0IGFjY2VwdHMgZmlsZXMgd2l0aGluIHRoZSBzcGVjaWZpZWQgc2l6ZSByYW5nZS4KCi0gRmlsZUZpbHRlclV0aWxzLm1ha2VEaXJlY3RvcnlPbmx5L21ha2VGaWxlT25seQogIC0gdHdvIG5ldyBtZXRob2RzIHRoYXQgZGVjb3JhdGUgYSBmaWxlIGZpbHRlciB0byBtYWtlIGl0IGFwcGx5IHRvCiAgICBkaXJlY3RvcmllcyBvbmx5IG9yIGZpbGVzIG9ubHkKCi0gTnVsbFdyaXRlcgogIC0gTmV3IHdyaXRlciB0aGF0IGFjdHMgYXMgYSBzaW5rIGZvciBhbGwgZGF0YSwgYXMgcGVyIC9kZXYvbnVsbAoKLSBOdWxsSW5wdXRTdHJlYW0KICAtIE5ldyBpbnB1dCBzdHJlYW0gdGhhdCBlbXVsYXRlcyBhIHN0cmVhbSBvZiBhIHNwZWNpZmllZCBzaXplCgotIE51bGxSZWFkZXIKICAtIE5ldyByZWFkZXIgdGhhdCBlbXVsYXRlcyBhIHJlYWRlciBvZiBhIHNwZWNpZmllZCBzaXplCgotIEJ5dGVBcnJheU91dHB1dFN0cmVhbSAgW0lPLTk3XQogIC0gUGVyZm9ybWFuY2UgZW5oYW5jZW1lbnRzCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ29tbW9ucyBJTyBQYWNrYWdlIFZlcnNpb24gMS4yCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKQ29tcGF0aWJpbGl0eSB3aXRoIDEuMQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkJpbmFyeSBjb21wYXRpYmxlIC0gWWVzCgpTb3VyY2UgY29tcGF0aWJsZSAtIFllcwoKU2VtYW50aWMgY29tcGF0aWJsZSAtIFllcwoKRGVwcmVjYXRpb25zIGZyb20gMS4xCi0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKQnVnIGZpeGVzIGZyb20gMS4xCi0tLS0tLS0tLS0tLS0tLS0tLQotIEZpbGVTeXN0ZW1VdGlscy5mcmVlU3BhY2UoZHJpdmUpCiAgRml4IHRvIGFsbG93IFdpbmRvd3MgYmFzZWQgY29tbWFuZCB0byBmdW5jdGlvbiBpbiBGcmVuY2ggbG9jYWxlCgotIEZpbGVVdGlscy5yZWFkKgogIEluY3JlYXNlIGNlcnRhaW50eSB0aGF0IGZpbGVzIGFyZSBjbG9zZWQgaW4gY2FzZSBvZiBlcnJvcgoKLSBMb2NrYWJsZUZpbGVXcml0ZXIKICBMb2NraW5nIG1lY2hhbmlzbSB3YXMgYnJva2VuIGFuZCBvbmx5IHByb3ZpZGVkIGxpbWl0ZWQgcHJvdGVjdGlvbiBbMzg5NDJdCiAgRmlsZSBkZWxldGlvbiBhbmQgbG9ja2luZyBpbiBjYXNlIG9mIGNvbnN0cnVjdG9yIGVycm9yIHdhcyBicm9rZW4KCkVuaGFuY2VtZW50cyBmcm9tIDEuMQotLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBBZ2VGaWxlRmlsdGVyL1NpemVGaWxlRmlsdGVyCiAgTmV3IGZpbGUgZmlsdGVycyB0aGF0IGNvbXBhcmVzIGFnYWluc3QgdGhlIGFnZSBhbmQgc2l6ZSBvZiB0aGUgZmlsZQoKLSBGaWxlU3lzdGVtVXRpbHMuZnJlZVNwYWNlS2IoZHJpdmUpCiAgTmV3IG1ldGhvZCB0aGF0IHVuaWZpZXMgcmVzdWx0IHRvIGJlIGluIGtpbG9ieXRlcyBbMzg1NzRdCgotIEZpbGVVdGlscy5jb250ZW50RXF1YWxzKEZpbGUsRmlsZSkKICBQZXJmb3JtYW5jZSBpbXByb3ZlZCBieSBhZGRpbmcgbGVuZ3RoIGFuZCBmaWxlIGxvY2F0aW9uIGNoZWNraW5nCgotIEZpbGVVdGlscy5pdGVyYXRlRmlsZXMKICBUd28gbmV3IG1ldGhvZCB0byBwcm92aWRlIGRpcmVjdCBhY2Nlc3MgdG8gaXRlcmF0b3JzIG92ZXIgZmlsZXMKCi0gRmlsZVV0aWxzLmxpbmVJdGVyYXRvcgogIElPVXRpbHMubGluZUl0ZXJhdG9yCiAgTmV3IG1ldGhvZHMgdG8gcHJvdmlkZSBhbiBpdGVyYXRvciBvdmVyIHRoZSBsaW5lcyBpbiBhIGZpbGUgWzM4MDgzXQoKLSBGaWxlVXRpbHMuY29weURpcmVjdG9yeVRvRGlyZWN0b3J5CiAgTmV3IG1ldGhvZCB0byBjb3B5IGEgZGlyZWN0b3J5IHRvIHdpdGhpbiBhbm90aGVyIGRpcmVjdG9yeSBbMzYzMTVdCiAgCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDb21tb25zIElPIFBhY2thZ2UgVmVyc2lvbiAxLjEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpJbmNvbXBhdGlibGUgY2hhbmdlcyBmcm9tIDEuMAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpCaW5hcnkgY29tcGF0aWJsZSAtIFllcwoKU291cmNlIGNvbXBhdGlibGUgLSBZZXMKClNlbWFudGljIGNvbXBhdGlibGUgLSBZZXMsIGV4Y2VwdDoKLSBGaWxlVXRpbHMud3JpdGVTdHJpbmdUb0ZpbGUoKQogICAgQSBudWxsIGVuY29kaW5nIHByZXZpb3VzbHkgdXNlZCAnSVNPLTg4NTktMScsIG5vdyBpdCB1c2VzIHRoZSBwbGF0Zm9ybSBkZWZhdWx0CiAgICBHZW5lcmFsbHkgdGhpcyB3aWxsIG1ha2Ugbm8gZGlmZmVyZW5jZQoKLSBMb2NrYWJsZUZpbGVXcml0ZXIKICAgIEltcHJvdmVkIHZhbGlkYXRpb24gYW5kIG5vdyBjcmVhdGUgZGlyZWN0b3JpZXMgaWYgbmVjZXNzc2FyeQoKcGx1cyB0aGVzZSBidWcgZml4ZXMgbWF5IGFmZmVjdCB5b3Ugc2VtYW50aWNhbGx5OgotIEZpbGVVdGlscy50b3VjaCgpICAoQnVnIGZpeCAyOTgyMSkKICAgIE5vdyBjcmVhdGVzIHRoZSBmaWxlIGlmIGl0IGRpZCBub3QgcHJldmlvdXNseSBleGlzdAoKLSBGaWxlVXRpbHMudG9GaWxlKFVSTCkgKEJ1ZyBmaXggMzI1NzUpCiAgICBOb3cgaGFuZGxlcyBlc2NhcGUgc3ludGF4IHN1Y2ggYXMgJTIwCgotIEZpbGVVdGlscy5zaXplT2ZEaXJlY3RvcnkoKSAgKEJ1ZyBmaXggMzY4MDEpCiAgICBNYXkgbm93IHJldHVybiBhIHNpemUgb2YgMCBpZiB0aGUgZGlyZWN0b3J5IGlzIHNlY3VyaXR5IHJlc3RyaWN0ZWQKCkRlcHJlY2F0aW9ucyBmcm9tIDEuMAotLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBDb3B5VXRpbHMgaGFzIGJlZW4gZGVwcmVjYXRlZC4KICAgIEl0cyBtZXRob2RzIGhhdmUgYmVlbiBtb3ZlZCB0byBJT1V0aWxzLgogICAgVGhlIG5ldyBJT1V0aWxzIG1ldGhvZHMgaGFuZGxlIG51bGxzIGJldHRlciwgYW5kIGhhdmUgY2xlYXJlciBuYW1lcy4KCi0gSU9VdGlscy50b0J5dGVBcnJheShTdHJpbmcpIC0gVXNlIHtAbGluayBTdHJpbmcjZ2V0Qnl0ZXMoKX0KLSBJT1V0aWxzLnRvU3RyaW5nKGJ5dGVbXSkgLSBVc2Uge0BsaW5rIFN0cmluZyNTdHJpbmcoYnl0ZVtdKX0KLSBJT1V0aWxzLnRvU3RyaW5nKGJ5dGVbXSxTdHJpbmcpIC0gVXNlIHtAbGluayBTdHJpbmcjU3RyaW5nKGJ5dGVbXSxTdHJpbmcpfQoKQnVnIGZpeGVzIGZyb20gMS4wCi0tLS0tLS0tLS0tLS0tLS0tLQotIEZpbGVVdGlscyAtIHRvdWNoKCkgIFsyOTgyMV0KICAgIE5vdyBjcmVhdGVzIHRoZSBmaWxlIGlmIGl0IGRpZCBub3QgcHJldmlvdXNseSBleGlzdAoKLSBGaWxlVXRpbHMgLSB0b0ZpbGUoVVJMKSAgWzMyNTc1XQogICAgTm93IGhhbmRsZXMgZXNjYXBlIHN5bnRheCBzdWNoIGFzICUyMAoKLSBGaWxlRmlsdGVyVXRpbHMgLSBtYWtlQ1ZTQXdhcmUoSU9GaWxlRmlsdGVyKSAgWzMzMDIzXQogICAgRml4ZWQgYnVnIHRoYXQgY2F1c2VkIG1ldGhvZCB0byBiZSBjb21wbGV0ZWx5IGJyb2tlbgoKLSBDb3VudGluZ0lucHV0U3RyZWFtICBbMzMzMzZdCiAgICBGaXhlZCBidWcgdGhhdCBjYXVzZWQgdGhlIGNvdW50IHRvIHJlZHVjZSBieSBvbmUgYXQgdGhlIGVuZCBvZiB0aGUgc3RyZWFtCgotIENvdW50aW5nSW5wdXRTdHJlYW0gLSBza2lwKGxvbmcpICBbMzQzMTFdCiAgICBCeXRlcyBmcm9tIGNhbGxzIHRvIHRoaXMgbWV0aG9kIHdlcmUgbm90IHByZXZpb3VzbHkgY291bnRlZAoKLSBOdWxsT3V0cHV0U3RyZWFtICBbMzM0ODFdCiAgICBSZW1vdmUgdW5lY2Vzc2FyeSBzeW5jaHJvbml6YXRpb24KCi0gQWJzdHJhY3RGaWxlRmlsdGVyIC0gYWNjZXB0KEZpbGUsIFN0cmluZykgIFszMDk5Ml0KICAgIEZpeGVkIGJyb2tlbiBpbXBsZW1lbnRhdGlvbgoKLSBGaWxlVXRpbHMgIFszNjgwMV0KICAgIFByZXZpb3VzbHkgdGhyZXcgTlBFIHdoZW4gbGlzdGluZyBmaWxlcyBpbiBhIHNlY3VyaXR5IHJlc3RyaWN0ZWQgZGlyZWN0b3J5CiAgICBOb3cgdGhyb3cgSU9FeGNlcHRpb24gd2l0aCBhIGJldHRlciBtZXNzYWdlCgotIEZpbGVVdGlscyAtIHdyaXRlU3RyaW5nVG9GaWxlKCkKICAgIE51bGwgZW5jb2Rpbmcgbm93IGNvcnJlY3RseSB1c2VzIHRoZSBwbGF0Zm9ybSBkZWZhdWx0CgpFbmhhbmNlbWVudHMgZnJvbSAxLjAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gRmlsZW5hbWVVdGlscyAtIG5ldyBjbGFzcyAgWzMzMzAzLDI5MzUxXQogICAgQSBzdGF0aWMgdXRpbGl0eSBjbGFzcyBmb3Igd29ya2luZyB3aXRoIGZpbGVuYW1lcwogICAgU2Vla3MgdG8gZWFzZSB0aGUgcGFpbiBvZiBkZXZlbG9waW5nIG9uIFdpbmRvd3MgYW5kIGRlcGxveWluZyBvbiBVbml4CgotIEZpbGVTeXN0ZW1VdGlscyAtIG5ldyBjbGFzcyAgWzMyOTgyLDM2MzI1XQogICAgQSBzdGF0aWMgdXRpbGl0eSBjbGFzcyBmb3Igd29ya2luZyB3aXRoIGZpbGUgc3lzdGVtcwogICAgUHJvdmlkZXMgb25lIG1ldGhvZCBhdCBwcmVzZW50LCB0byBnZXQgdGhlIGZyZWUgc3BhY2Ugb24gdGhlIGZpbGluZyBzeXN0ZW0KCi0gSU9VdGlscyAtIG5ldyBwdWJsaWMgY29uc3RhbnRzCiAgICBDb25zdGFudHMgZm9yIGRpcmVjdG9yeSBhbmQgbGluZSBzZXBhcmF0b3JzIG9uIFdpbmRvd3MgYW5kIFVuaXgKCi0gSU9VdGlscyAtIHRvQnl0ZUFycmF5KFJlYWRlcixlbmNvZGluZykKICAgIEhhbmRsZXMgZW5jb2RpbmdzIHdoZW4gcmVhZGluZyB0byBhIGJ5dGUgYXJyYXkKCi0gSU9VdGlscyAtIHRvQ2hhckFycmF5KElucHV0U3RyZWFtKSAgWzI4OTc5XQogICAgICAgICAgLSB0b0NoYXJBcnJheShJbnB1dFN0cmVhbSxlbmNvZGluZykKICAgICAgICAgIC0gdG9DaGFyQXJyYXkoUmVhZGVyKQogICAgUmVhZHMgYSBzdHJlYW0vcmVhZGVyIGludG8gYSBjaGFyYXRjdGVyIGFycmF5CgotIElPVXRpbHMgLSByZWFkTGluZXMoSW5wdXRTdHJlYW0pICBbMzYyMTRdCiAgICAgICAgICAtIHJlYWRMaW5lcyhJbnB1dFN0cmVhbSxlbmNvZGluZykKICAgICAgICAgIC0gcmVhZExpbmVzKFJlYWRlcikKICAgIFJlYWRzIGEgc3RyZWFtL3JlYWRlciBsaW5lIGJ5IGxpbmUgaW50byBhIExpc3Qgb2YgU3RyaW5ncwoKLSBJT1V0aWxzIC0gdG9JbnB1dFN0cmVhbShTdHJpbmcpICBbMzI5NThdCiAgICAgICAgICAtIHRvSW5wdXRTdHJlYW0oU3RyaW5nLGVuY29kaW5nKQogICAgQ3JlYXRlcyBhbiBpbnB1dCBzdHJlYW0gdGhhdCB1c2VzIHRoZSBzdHJpbmcgYXMgYSBzb3VyY2Ugb2YgZGF0YQoKLSBJT1V0aWxzIC0gd3JpdGVMaW5lcyhDb2xsZWN0aW9uLGxpbmVFbmRpbmcsT3V0cHV0U3RyZWFtKSAgWzM2MjE0XQogICAgICAgICAgLSB3cml0ZUxpbmVzKENvbGxlY3Rpb24sbGluZUVuZGluZyxPdXRwdXRTdHJlYW0sZW5jb2RpbmcpCiAgICAgICAgICAtIHdyaXRlTGluZXMoQ29sbGVjdGlvbixsaW5lRW5kaW5nLFdyaXRlcikKICAgIFdyaXRlcyBhIGNvbGxlY3Rpb24gdG8gYSBzdHJlYW0vd3JpdGVyIGxpbmUgYnkgbGluZQoKLSBJT1V0aWxzIC0gd3JpdGUoLi4uKQogICAgV3JpdGUgZGF0YSB0byBhIHN0cmVhbS93cml0ZXIgKG1vdmVkIGZyb20gQ29weVV0aWxzIHdpdGggYmV0dGVyIG51bGwgaGFuZGxpbmcpCgotIElPVXRpbHMgLSBjb3B5KC4uLikKICAgIENvcHkgZGF0YSBiZXR3ZWVuIHN0cmVhbXMgKG1vdmVkIGZyb20gQ29weVV0aWxzIHdpdGggYmV0dGVyIG51bGwgaGFuZGxpbmcpCgotIElPVXRpbHMgLSBjb250ZW50RXF1YWxzKFJlYWRlcixSZWFkZXIpCiAgICBNZXRob2QgdG8gY29tcGFyZSB0aGUgY29udGVudHMgb2YgdHdvIHJlYWRlcnMKCi0gRmlsZVV0aWxzIC0gdG9GaWxlcyhVUkxbXSkKICAgIENvbnZlcnRzIGFuIGFycmF5IG9mIFVSTHMgdG8gYW4gYXJyYXkgb2YgRmlsZXMKCi0gRmlsZVV0aWxzIC0gY29weURpcmVjdG9yeSgpICBbMzI5NDRdCiAgICBOZXcgbWV0aG9kcyB0byBjb3B5IGEgZGlyZWN0b3J5CgotIEZpbGVVdGlscyAtIHJlYWRGaWxlVG9CeXRlQXJyYXkoRmlsZSkKICAgIFJlYWRzIGFuIGVudGlyZSBmaWxlIGludG8gYSBieXRlIGFycmF5CgotIEZpbGVVdGlscyAtIHdyaXRlQnl0ZUFycmF5VG9GaWxlKEZpbGUsYnl0ZVtdKQogICAgV3JpdGVzIGEgYnl0ZSBhcnJheSB0byBhIGZpbGUKCi0gRmlsZVV0aWxzIC0gcmVhZExpbmVzKEZpbGUsZW5jb2RpbmcpICBbMzYyMTRdCiAgICBSZWFkcyBhIGZpbGUgbGluZSBieSBsaW5lIGludG8gYSBMaXN0IG9mIFN0cmluZ3MKCi0gRmlsZVV0aWxzIC0gd3JpdGVMaW5lcyhGaWxlLGVuY29kaW5nLExpc3QpCiAgICAgICAgICAgICAgd3JpdGVMaW5lcyhGaWxlLGVuY29kaW5nLExpc3QsbGluZUVuZGluZykKICAgIFdyaXRlcyBhIGNvbGxlY3Rpb24gdG8gYSBmaWxlIGxpbmUgYnkgbGluZQoKLSBGaWxlVXRpbHMgLSBFTVBUWV9GSUxFX0FSUkFZCiAgICBDb25zdGFudCBmb3IgYW4gZW1wdHkgYXJyYXkgb2YgRmlsZSBvYmplY3RzCgotIENvbmRpdGlvbmFsRmlsZUZpbHRlciAtIG5ldyBpbnRlcmZhY2UgIFszMDcwNV0KICAgIERlZmluZXMgdGhlIGJlaGF2aW91ciBvZiBsaXN0IGJhc2VkIGZpbHRlcnMKCi0gQW5kRmlsZUZpbHRlciwgT3JGaWxlRmlsdGVyICBbMzA3MDVdCiAgICBOb3cgc3VwcG9ydCBhIGxpc3Qgb2YgZmlsdGVycyB0byBhbmQvb3IKCi0gV2lsZGNhcmRGaWx0ZXIgIFszMTExNV0KICAgIE5ldyBmaWx0ZXIgdGhhdCBjYW4gbWF0Y2ggdXNpbmcgd2lsZGNhcmQgZmlsZSBuYW1lcwoKLSBGaWxlRmlsdGVyVXRpbHMgLSBtYWtlU1ZOQXdhcmUoSU9GaWxlRmlsdGVyKQogICAgTmV3IG1ldGhvZCwgbGlrZSBtYWtlQ1ZTQXdhcmUsIHRoYXQgaWdub3JlcyBTdWJ2ZXJzaW9uIHNvdXJjZSBjb250cm9sIGRpcmVjdG9yaWVzCgotIENsYXNzTG9hZGVyT2JqZWN0SW5wdXRTdHJlYW0KICAgIEFuIE9iamVjdElucHV0U3RyZWFtIHRoYXQgc3VwcG9ydHMgYSBDbGFzc0xvYWRlcgoKLSBDb3VudGluZ0lucHV0U3RyZWFtLENvdW50aW5nT3V0cHV0U3RyZWFtIC0gcmVzZXRDb3VudCgpICBbMjg5NzZdCiAgICBBZGRzIHRoZSBhYmlsaXR5IHRvIHJlc2V0IHRoZSBjb3VudCBwYXJ0IHdheSB0aHJvdWdoIHJlYWRpbmcvd3JpdGluZyB0aGUgc3RyZWFtCgotIERlZmVycmVkRmlsZU91dHB1dFN0cmVhbSAtIHdyaXRlVG8oT3V0cHV0U3RyZWFtKSAgWzM0MTczXQogICAgTmV3IG1ldGhvZCB0byBhbGxvdyBjdXJyZW50IGNvbnRlbnRzIHRvIGJlIHdyaXR0ZW4gdG8gYSBzdHJlYW0KCi0gRGVmZXJyZWRGaWxlT3V0cHV0U3RyZWFtICBbMzQxNDJdCiAgICBQZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zIGF2b2lkaW5nIGRvdWJsZSBidWZmZXJpbmcKCi0gTG9ja2FibGVGaWxlV3JpdGVyIC0gZW5jb2Rpbmcgc3VwcG9ydCBbMzY4MjVdCiAgICBBZGQgc3VwcG9ydCBmb3IgY2hhcmFjdGVyIGVuY29kaW5ncyB0byBMb2NrYWJsZUZpbGVXcml0ZXIKICAgIEltcHJvdmUgdGhlIHZhbGlkYXRpb24KICAgIENyZWF0ZSBkaXJlY3RvcmllcyBpZiBuZWNlc3NzYXJ5CgotIElPVXRpbHMgYW5kIEVuZGlhblV0aWxzIGFyZSBubyBsb25nZXIgZmluYWwgIFsyODk3OF0KICAgIEFsbG93cyBkZXZlbG9wZXJzIHRvIGhhdmUgc3ViY2xhc3NlcyBpZiBkZXNpcmVkICAgCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KRmVlZGJhY2sKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpPcGVuIHNvdXJjZSB3b3JrcyBiZXN0IHdoZW4geW91IGdpdmUgZmVlZGJhY2s6Cmh0dHA6Ly9jb21tb25zLmFwYWNoZS5vcmcvaW8vCgpQbGVhc2UgZGlyZWN0IGFsbCBidWcgcmVwb3J0cyB0byBKSVJBCmh0dHA6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9JTwoKT3Igc3Vic2NyaWJlIHRvIHRoZSBjb21tb25zLXVzZXIgbWFpbGluZyBsaXN0IChwcmVmaXggZW1haWxzIGJ5IFtpb10pCmh0dHA6Ly9jb21tb25zLmFwYWNoZS5vcmcvbWFpbC1saXN0cy5odG1sCgpUaGUgQ29tbW9ucy1JTyBUZWFtCg==