LyoKICogTG9jYWxlIGRlZmluaXRpb25zIGZvciBJcmlzaCBHYWVsaWMKICoKICogQ29weXJpZ2h0IDE5OTggTWFyY2VsIEJhdXIKICogQ29weXJpZ2h0IDIwMDIgQWxleGFuZHJlIEp1bGxpYXJkIGZvciBDb2RlV2VhdmVycwogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgojcHJhZ21hIGNvZGVfcGFnZSgxMjUyKQoKU1RSSU5HVEFCTEUgTEFOR1VBR0UgTEFOR19HQUVMSUMsIFNVQkxBTkdfR0FFTElDCnsKICBMT0NBTEVfRk9OVFNJR05BVFVSRSBMIlx4MDAyZlx4ODAwMFx4MzgwOFx4MDAwMFx4MDAwMFx4MDAwMFx4MDAwMFx4MDAwMFx4MDAwMVx4MDAwMFx4MDAwMFx4NDAwMFx4MDFmZlx4MDAzZlx4ODAwMFx4ZmZmZiIKICBMT0NBTEVfSUNBTEVOREFSVFlQRSAiMSIKICBMT0NBTEVfSUNFTlRVUlkgIjAiCiAgTE9DQUxFX0lDT1VOVFJZICIzNTMiCiAgTE9DQUxFX0lDVVJSRElHSVRTICIyIgogIExPQ0FMRV9JQ1VSUkVOQ1kgIjAiCiAgTE9DQUxFX0lEQVRFICIwIgogIExPQ0FMRV9JREFZTFpFUk8gIjAiCiAgTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFICIxMjUyIgogIExPQ0FMRV9JREVGQVVMVENPREVQQUdFICI0MzciCiAgTE9DQUxFX0lERUZBVUxUQ09VTlRSWSAiMzUzIgogIExPQ0FMRV9JREVGQVVMVEVCQ0RJQ0NPREVQQUdFICIyMDI4NSIKICBMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSAiMDQzYyIKICBMT0NBTEVfSURFRkFVTFRNQUNDT0RFUEFHRSAiMTAwMDAiCiAgTE9DQUxFX0lERUZBVUxUVU5JWENPREVQQUdFICIyODYwNSIKICBMT0NBTEVfSURJR0lUUyAiMiIKICBMT0NBTEVfSURJR0lUU1VCU1RJVFVUSU9OICIxIgogIExPQ0FMRV9JRklSU1REQVlPRldFRUsgIjYiCiAgTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIgIjAiCiAgTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUyAiMiIKICBMT0NBTEVfSUxBTkdVQUdFICIwNDNjIgogIExPQ0FMRV9JTERBVEUgIjAiCiAgTE9DQUxFX0lMWkVSTyAiMSIKICBMT0NBTEVfSU1FQVNVUkUgIjEiCiAgTE9DQUxFX0lNT05MWkVSTyAiMCIKICBMT0NBTEVfSU5FR0NVUlIgIjAiCiAgTE9DQUxFX0lORUdOVU1CRVIgIjEiCiAgTE9DQUxFX0lORUdTRVBCWVNQQUNFICIwIgogIExPQ0FMRV9JTkVHU0lHTlBPU04gIjAiCiAgTE9DQUxFX0lORUdTWU1QUkVDRURFUyAiMSIKICBMT0NBTEVfSU5FVVRSQUwgIjAiCiAgTE9DQUxFX0lPUFRJT05BTENBTEVOREFSICIwIgogIExPQ0FMRV9JUEFQRVJTSVpFICI5IgogIExPQ0FMRV9JUE9TU0VQQllTUEFDRSAiMCIKICBMT0NBTEVfSVBPU1NJR05QT1NOICIzIgogIExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMgIjEiCiAgTE9DQUxFX0lSRUFESU5HTEFZT1VUICIwIgogIExPQ0FMRV9JVElNRSAiMCIKICBMT0NBTEVfSVRJTUVNQVJLUE9TTiAiMCIKICBMT0NBTEVfSVRMWkVSTyAiMCIKICBMT0NBTEVfUzExNTkgIkFNIgogIExPQ0FMRV9TMjM1OSAiUE0iCiAgTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSAiSVJMIgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTEgIkx1YSIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUUyICJN4WkiCiAgTE9DQUxFX1NBQkJSRVZEQVlOQU1FMyAiQ+lhIgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTQgIkTpYSIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUU1ICJBb2kiCiAgTE9DQUxFX1NBQkJSRVZEQVlOQU1FNiAiU2F0IgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTcgIkRvbSIKICBMT0NBTEVfU0FCQlJFVkxBTkdOQU1FICJHQUUiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxICJFYW4iCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyICJGZWEiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzICJN4XIiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0ICJBaWIiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1ICJCZWEiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2ICJNZWkiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU3ICJJ+mkiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU4ICJM+m4iCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5ICJNRvMiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMCAiREbzIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEgIlNhbSIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyICJOb2wiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMyAiIgogIExPQ0FMRV9TQ09VTlRSWSAiSXJlbGFuZCIKICBMT0NBTEVfU0NVUlJFTkNZICKAIgogIExPQ0FMRV9TREFURSAiLyIKICBMT0NBTEVfU0RBWU5BTUUxICJE6SBMdWFpbiIKICBMT0NBTEVfU0RBWU5BTUUyICJE6SBN4WlydCIKICBMT0NBTEVfU0RBWU5BTUUzICJE6SBD6WFkYW9pbiIKICBMT0NBTEVfU0RBWU5BTUU0ICJE6WFyZGFvaW4iCiAgTE9DQUxFX1NEQVlOQU1FNSAiROkgaEFvaW5lIgogIExPQ0FMRV9TREFZTkFNRTYgIkTpIFNhdGhhaXJuIgogIExPQ0FMRV9TREFZTkFNRTcgIkRlIERvbWhuYWlnaCIKICBMT0NBTEVfU0RFQ0lNQUwgIi4iCiAgTE9DQUxFX1NFTkdDT1VOVFJZICJJcmVsYW5kIgogIExPQ0FMRV9TRU5HQ1VSUk5BTUUgIkV1cm8iCiAgTE9DQUxFX1NFTkdMQU5HVUFHRSAiSXJpc2giCiAgTE9DQUxFX1NHUk9VUElORyAiMzswIgogIExPQ0FMRV9TSU5UTFNZTUJPTCAiRVVSIgogIExPQ0FMRV9TSVNPMzE2NkNUUllOQU1FICJJRSIKICBMT0NBTEVfU0lTTzYzOUxBTkdOQU1FICJnYSIKICBMT0NBTEVfU0xBTkdVQUdFICJHYWVpbGdlICjJaXJlKSIKICBMT0NBTEVfU0xJU1QgIiwiCiAgTE9DQUxFX1NMT05HREFURSAiZGRkZCwgTU1NTSBkZCwgeXl5eSIKICBMT0NBTEVfU01PTkRFQ0lNQUxTRVAgIi4iCiAgTE9DQUxFX1NNT05HUk9VUElORyAiMzswIgogIExPQ0FMRV9TTU9OVEhOQU1FMSAiRWFu4WlyIgogIExPQ0FMRV9TTU9OVEhOQU1FMiAiRmVhYmhyYSIKICBMT0NBTEVfU01PTlRITkFNRTMgIk3hcnRhIgogIExPQ0FMRV9TTU9OVEhOQU1FNCAiQWlicmXhbiIKICBMT0NBTEVfU01PTlRITkFNRTUgIk3tIG5hIEJlYWx0YWluZSIKICBMT0NBTEVfU01PTlRITkFNRTYgIk1laXRoZWFtaCIKICBMT0NBTEVfU01PTlRITkFNRTcgIkn6aWwiCiAgTE9DQUxFX1NNT05USE5BTUU4ICJM+m5hc2EiCiAgTE9DQUxFX1NNT05USE5BTUU5ICJNZeFuIEbzbWhhaXIiCiAgTE9DQUxFX1NNT05USE5BTUUxMCAiRGVpcmVhZGggRvNtaGFpciIKICBMT0NBTEVfU01PTlRITkFNRTExICJN7SBuYSBTYW1obmEiCiAgTE9DQUxFX1NNT05USE5BTUUxMiAiTe0gbmEgTm9sbGFnIgogIExPQ0FMRV9TTU9OVEhOQU1FMTMgIiIKICBMT0NBTEVfU01PTlRIT1VTQU5EU0VQICIsIgogIExPQ0FMRV9TTkFNRSAiZ2EtSUUiCiAgTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSAiyWlyZSIKICBMT0NBTEVfU05BVElWRUNVUlJOQU1FICJFdXJvIgogIExPQ0FMRV9TTkFUSVZFRElHSVRTICIwMTIzNDU2Nzg5IgogIExPQ0FMRV9TTkFUSVZFRElTUExBWU5BTUUgIkdhZWlsZ2UgKMlpcmUpIgogIExPQ0FMRV9TTkFUSVZFTEFOR05BTUUgIkdhZWlsZ2UiCiAgTE9DQUxFX1NORUdBVElWRVNJR04gIi0iCiAgTE9DQUxFX1NQT1NJVElWRVNJR04gIiIKICBMT0NBTEVfU1NDUklQVFMgIkxhdG47IgogIExPQ0FMRV9TU0hPUlREQVRFICJkL00veXkiCiAgTE9DQUxFX1NTT1JUTkFNRSAiRGVmYXVsdCIKICBMT0NBTEVfU1RIT1VTQU5EICIsIgogIExPQ0FMRV9TVElNRSAiOiIKICBMT0NBTEVfU1RJTUVGT1JNQVQgImg6bW06c3MgdHQiCiAgTE9DQUxFX1NZRUFSTU9OVEggIk1NTU0geXl5eSIKCiAgTEdSUElEX1dFU1RFUk5fRVVST1BFK0xHUlBJRF9SRVNfQkFTRSAiSWFydGhhciBuYSBoRW9ycGEgYWd1cyBuYSBTdOFpdCBBb250YWl0aGUiCiAgTEdSUElEX0NFTlRSQUxfRVVST1BFK0xHUlBJRF9SRVNfQkFTRSAiTOFyIG5hIGhFb3JwYSIKICBMR1JQSURfQkFMVElDK0xHUlBJRF9SRVNfQkFTRSAiTWh1aXIgQmhhaWx0IgogIExHUlBJRF9HUkVFSytMR1JQSURfUkVTX0JBU0UgIkdy6WlnaXMiCiAgTEdSUElEX0NZUklMTElDK0xHUlBJRF9SRVNfQkFTRSAiQ29pcmVhbGxhY2giCiAgTEdSUElEX1RVUktJU0grTEdSUElEX1JFU19CQVNFICJUdWlyY2ljZSIKICBMR1JQSURfSkFQQU5FU0UrTEdSUElEX1JFU19CQVNFICJTZWFw4WluaXMiCiAgTEdSUElEX0tPUkVBTitMR1JQSURfUkVTX0JBU0UgIkPzaXLpaXMiCiAgTEdSUElEX1RSQURJVElPTkFMX0NISU5FU0UrTEdSUElEX1JFU19CQVNFICJT7W5pcyBUcmFpZGlzafpudGEiCiAgTEdSUElEX1NJTVBMSUZJRURfQ0hJTkVTRStMR1JQSURfUkVTX0JBU0UgIlPtbmlzIHNpbXBsaXRoZSIKICBMR1JQSURfVEhBSStMR1JQSURfUkVTX0JBU0UgIlTpYWxhaW5uaXMiCiAgTEdSUElEX0hFQlJFVytMR1JQSURfUkVTX0JBU0UgIkVhYmhyYWlzIgogIExHUlBJRF9BUkFCSUMrTEdSUElEX1JFU19CQVNFICJBcmFpYmlzIgogIExHUlBJRF9WSUVUTkFNRVNFK0xHUlBJRF9SRVNfQkFTRSAiVu10bmVhaW1pcyIKICBMR1JQSURfSU5ESUMrTEdSUElEX1JFU19CQVNFICJJbmRpYyIKICBMR1JQSURfR0VPUkdJQU4rTEdSUElEX1JFU19CQVNFICJTZW9pcnNpcyIKICBMR1JQSURfQVJNRU5JQU4rTEdSUElEX1JFU19CQVNFICJBaXJt6WluaXMiCn0K