LyoKICogTG9jYWxlIGRlZmluaXRpb25zIGZvciBGWVJPIE1hY2Vkb25pYW4KICoKICogQ29weXJpZ2h0IDIwMDIgQWxleGFuZHJlIEp1bGxpYXJkIGZvciBDb2RlV2VhdmVycwogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgojcHJhZ21hIGNvZGVfcGFnZSgxMjUxKQoKU1RSSU5HVEFCTEUgTEFOR1VBR0UgTEFOR19NQUNFRE9OSUFOLCBTVUJMQU5HX0RFRkFVTFQKewogIExPQ0FMRV9GT05UU0lHTkFUVVJFIEwiXHgwMjAzXHg4MDAwXHgzODQ4XHgwMDAwXHgwMDAwXHgwMDAwXHgwMDAwXHgwMDAwXHgwMDA0XHgwMDAwXHgwMDAwXHgwMDAyXHgwMDA0XHgwMDAwXHgwMDAwXHgwMjAyIgogIExPQ0FMRV9JQ0FMRU5EQVJUWVBFICIxIgogIExPQ0FMRV9JQ0VOVFVSWSAiMSIKICBMT0NBTEVfSUNPVU5UUlkgIjM4OSIKICBMT0NBTEVfSUNVUlJESUdJVFMgIjIiCiAgTE9DQUxFX0lDVVJSRU5DWSAiMyIKICBMT0NBTEVfSURBVEUgIjEiCiAgTE9DQUxFX0lEQVlMWkVSTyAiMSIKICBMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UgIjEyNTEiCiAgTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UgIjg2NiIKICBMT0NBTEVfSURFRkFVTFRDT1VOVFJZICIzODkiCiAgTE9DQUxFX0lERUZBVUxURUJDRElDQ09ERVBBR0UgIjUwMCIKICBMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSAiMDQyZiIKICBMT0NBTEVfSURFRkFVTFRNQUNDT0RFUEFHRSAiMTAwMDciCiAgTE9DQUxFX0lERUZBVUxUVU5JWENPREVQQUdFICIyODU5NSIKICBMT0NBTEVfSURJR0lUUyAiMiIKICBMT0NBTEVfSURJR0lUU1VCU1RJVFVUSU9OICIxIgogIExPQ0FMRV9JRklSU1REQVlPRldFRUsgIjAiCiAgTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIgIjIiCiAgTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUyAiMiIKICBMT0NBTEVfSUxBTkdVQUdFICIwNDJmIgogIExPQ0FMRV9JTERBVEUgIjEiCiAgTE9DQUxFX0lMWkVSTyAiMSIKICBMT0NBTEVfSU1FQVNVUkUgIjAiCiAgTE9DQUxFX0lNT05MWkVSTyAiMSIKICBMT0NBTEVfSU5FR0NVUlIgIjgiCiAgTE9DQUxFX0lORUdOVU1CRVIgIjEiCiAgTE9DQUxFX0lORUdTRVBCWVNQQUNFICIxIgogIExPQ0FMRV9JTkVHU0lHTlBPU04gIjEiCiAgTE9DQUxFX0lORUdTWU1QUkVDRURFUyAiMCIKICBMT0NBTEVfSU5FVVRSQUwgIjAiCiAgTE9DQUxFX0lPUFRJT05BTENBTEVOREFSICIwIgogIExPQ0FMRV9JUEFQRVJTSVpFICI5IgogIExPQ0FMRV9JUE9TU0VQQllTUEFDRSAiMSIKICBMT0NBTEVfSVBPU1NJR05QT1NOICIxIgogIExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMgIjAiCiAgTE9DQUxFX0lSRUFESU5HTEFZT1VUICIwIgogIExPQ0FMRV9JVElNRSAiMSIKICBMT0NBTEVfSVRJTUVNQVJLUE9TTiAiMCIKICBMT0NBTEVfSVRMWkVSTyAiMSIKICBMT0NBTEVfUzExNTkgIiIKICBMT0NBTEVfUzIzNTkgIiIKICBMT0NBTEVfU0FCQlJFVkNUUllOQU1FICJNS0QiCiAgTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSAi7+7tIgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTIgIuLy8CIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUUzICLx8OQiCiAgTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCAi9+XyIgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTUgIu/l8iIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUU2ICLx4OEiCiAgTE9DQUxFX1NBQkJSRVZEQVlOQU1FNyAi7eXkIgogIExPQ0FMRV9TQUJCUkVWTEFOR05BTUUgIk1LSSIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEgIrzg7SIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTIgIvTl4iIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMgIuzg8CIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQgIuDv8CIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTUgIuzgvCIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYgIrzz7SIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTcgIrzz6yIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTggIuDi4yIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTkgIvHl7yIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwICLu6vIiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSAi7e7lIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIgIuTl6iIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzICIiCiAgTE9DQUxFX1NDT1VOVFJZICJGb3JtZXIgWXVnb3NsYXYgUmVwdWJsaWMgb2YgTWFjZWRvbmlhIgogIExPQ0FMRV9TQ1VSUkVOQ1kgIuTl7S4iCiAgTE9DQUxFX1NEQVRFICIuIgogIExPQ0FMRV9TREFZTkFNRTEgIu/u7eXk5evt6OoiCiAgTE9DQUxFX1NEQVlOQU1FMiAi4vLu8O3o6iIKICBMT0NBTEVfU0RBWU5BTUUzICLx8OXk4CIKICBMT0NBTEVfU0RBWU5BTUU0ICL35fLi8PLu6iIKICBMT0NBTEVfU0RBWU5BTUU1ICLv5fLu6iIKICBMT0NBTEVfU0RBWU5BTUU2ICLx4OHu8uAiCiAgTE9DQUxFX1NEQVlOQU1FNyAi7eXk5evgIgogIExPQ0FMRV9TREVDSU1BTCAiLCIKICBMT0NBTEVfU0VOR0NPVU5UUlkgIkZvcm1lciBZdWdvc2xhdiBSZXB1YmxpYyBvZiBNYWNlZG9uaWEiCiAgTE9DQUxFX1NFTkdDVVJSTkFNRSAiTWFjZWRvbmlhbiBEZW5hciIKICBMT0NBTEVfU0VOR0xBTkdVQUdFICJGWVJPIE1hY2Vkb25pYW4iCiAgTE9DQUxFX1NHUk9VUElORyAiMzswIgogIExPQ0FMRV9TSU5UTFNZTUJPTCAiTUtEIgogIExPQ0FMRV9TSVNPMzE2NkNUUllOQU1FICJNSyIKICBMT0NBTEVfU0lTTzYzOUxBTkdOQU1FICJtayIKICBMT0NBTEVfU0xBTkdVQUdFICJGWVJPIE1hY2Vkb25pYW4iCiAgTE9DQUxFX1NMSVNUICI7IgogIExPQ0FMRV9TTE9OR0RBVEUgImRkZGQsIGRkIE1NTU0geXl5eSIKICBMT0NBTEVfU01PTkRFQ0lNQUxTRVAgIiwiCiAgTE9DQUxFX1NNT05HUk9VUElORyAiMzswIgogIExPQ0FMRV9TTU9OVEhOQU1FMSAivODt8+Dw6CIKICBMT0NBTEVfU01PTlRITkFNRTIgIvTl4vDz4PDoIgogIExPQ0FMRV9TTU9OVEhOQU1FMyAi7ODw8iIKICBMT0NBTEVfU01PTlRITkFNRTQgIuDv8OjrIgogIExPQ0FMRV9TTU9OVEhOQU1FNSAi7OC8IgogIExPQ0FMRV9TTU9OVEhOQU1FNiAivPPt6CIKICBMT0NBTEVfU01PTlRITkFNRTcgIrzz6+giCiAgTE9DQUxFX1NNT05USE5BTUU4ICLg4uPz8fIiCiAgTE9DQUxFX1NNT05USE5BTUU5ICLx5e/y5ezi8OgiCiAgTE9DQUxFX1NNT05USE5BTUUxMCAi7ury7uzi8OgiCiAgTE9DQUxFX1NNT05USE5BTUUxMSAi7e7l7OLw6CIKICBMT0NBTEVfU01PTlRITkFNRTEyICLk5erl7OLw6CIKICBMT0NBTEVfU01PTlRITkFNRTEzICIiCiAgTE9DQUxFX1NNT05USE9VU0FORFNFUCAiLiIKICBMT0NBTEVfU05BTUUgIm1rLU1LIgogIExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUgIszg6uXk7u3ovOAiCiAgTE9DQUxFX1NOQVRJVkVDVVJSTkFNRSAi5OXt4PAiCiAgTE9DQUxFX1NOQVRJVkVESUdJVFMgIjAxMjM0NTY3ODkiCiAgTE9DQUxFX1NOQVRJVkVESVNQTEFZTkFNRSAi7ODq5eTu7fHq6CC84Ofo6iAozODq5eTu7ei84CkiCiAgTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSAi7ODq5eTu7fHq6CC84Ofo6iIKICBMT0NBTEVfU05FR0FUSVZFU0lHTiAiLSIKICBMT0NBTEVfU09QRU5UWVBFTEFOR1VBR0VUQUcgIk1LRCAiCiAgTE9DQUxFX1NQT1NJVElWRVNJR04gIiIKICBMT0NBTEVfU1NDUklQVFMgIkN5cmw7IgogIExPQ0FMRV9TU0hPUlREQVRFICJkZC5NTS55eXl5IgogIExPQ0FMRV9TU0hPUlRUSU1FICJISDptbSIKICBMT0NBTEVfU1NPUlROQU1FICJEZWZhdWx0IgogIExPQ0FMRV9TVEhPVVNBTkQgIi4iCiAgTE9DQUxFX1NUSU1FICI6IgogIExPQ0FMRV9TVElNRUZPUk1BVCAiSEg6bW06c3MiCiAgTE9DQUxFX1NZRUFSTU9OVEggIk1NTU0geXl5eSIKCiAgTEdSUElEX1dFU1RFUk5fRVVST1BFK0xHUlBJRF9SRVNfQkFTRSAiV2VzdGVybiBFdXJvcGUgYW5kIFVuaXRlZCBTdGF0ZXMiCiAgTEdSUElEX0NFTlRSQUxfRVVST1BFK0xHUlBJRF9SRVNfQkFTRSAiQ2VudHJhbCBFdXJvcGUiCiAgTEdSUElEX0JBTFRJQytMR1JQSURfUkVTX0JBU0UgIkJhbHRpYyIKICBMR1JQSURfR1JFRUsrTEdSUElEX1JFU19CQVNFICJHcmVlayIKICBMR1JQSURfQ1lSSUxMSUMrTEdSUElEX1JFU19CQVNFICJDeXJpbGxpYyIKICBMR1JQSURfVFVSS0lTSCtMR1JQSURfUkVTX0JBU0UgIlR1cmtpYyIKICBMR1JQSURfSkFQQU5FU0UrTEdSUElEX1JFU19CQVNFICJKYXBhbmVzZSIKICBMR1JQSURfS09SRUFOK0xHUlBJRF9SRVNfQkFTRSAiS29yZWFuIgogIExHUlBJRF9UUkFESVRJT05BTF9DSElORVNFK0xHUlBJRF9SRVNfQkFTRSAiVHJhZGl0aW9uYWwgQ2hpbmVzZSIKICBMR1JQSURfU0lNUExJRklFRF9DSElORVNFK0xHUlBJRF9SRVNfQkFTRSAiU2ltcGxpZmllZCBDaGluZXNlIgogIExHUlBJRF9USEFJK0xHUlBJRF9SRVNfQkFTRSAiVGhhaSIKICBMR1JQSURfSEVCUkVXK0xHUlBJRF9SRVNfQkFTRSAiSGVicmV3IgogIExHUlBJRF9BUkFCSUMrTEdSUElEX1JFU19CQVNFICJBcmFiaWMiIAogIExHUlBJRF9WSUVUTkFNRVNFK0xHUlBJRF9SRVNfQkFTRSAiVmlldG5hbWVzZSIKICBMR1JQSURfSU5ESUMrTEdSUElEX1JFU19CQVNFICJJbmRpYyIKICBMR1JQSURfR0VPUkdJQU4rTEdSUElEX1JFU19CQVNFICJHZW9yZ2lhbiIKICBMR1JQSURfQVJNRU5JQU4rTEdSUElEX1JFU19CQVNFICJBcm1lbmlhbiIKfQo=