LyoKICogTG9jYWxlIGRlZmluaXRpb25zIGZvciBBcmFiaWMgKFR1bmlzaWEpCiAqCiAqIENvcHlyaWdodCAyMDAyIEFsZXhhbmRyZSBKdWxsaWFyZCBmb3IgQ29kZVdlYXZlcnMKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqLwoKI3ByYWdtYSBjb2RlX3BhZ2UoMTI1NikKClNUUklOR1RBQkxFIExBTkdVQUdFIExBTkdfQVJBQklDLCBTVUJMQU5HX0FSQUJJQ19UVU5JU0lBCnsKICBMT0NBTEVfRk9OVFNJR05BVFVSRSBMIlx4NjBhZlx4ODAwMFx4Mzg0OFx4MTAwMFx4MDAwOFx4MDAwMFx4MDAwMFx4MDgwMFx4MDA0MFx4MDAwMFx4MDAwMFx4MjAwMFx4MDA0MFx4MDAwMFx4MDAwMFx4MjAwOCIKICBMT0NBTEVfSUNBTEVOREFSVFlQRSAiMSIKICBMT0NBTEVfSUNFTlRVUlkgIjEiCiAgTE9DQUxFX0lDT1VOVFJZICIyMTYiCiAgTE9DQUxFX0lDVVJSRElHSVRTICIzIgogIExPQ0FMRV9JQ1VSUkVOQ1kgIjIiCiAgTE9DQUxFX0lEQVRFICIxIgogIExPQ0FMRV9JREFZTFpFUk8gIjEiCiAgTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFICIxMjU2IgogIExPQ0FMRV9JREVGQVVMVENPREVQQUdFICI3MjAiCiAgTE9DQUxFX0lERUZBVUxUQ09VTlRSWSAiMjE2IgogIExPQ0FMRV9JREVGQVVMVEVCQ0RJQ0NPREVQQUdFICIyMDQyMCIKICBMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSAiMWMwMSIKICBMT0NBTEVfSURFRkFVTFRNQUNDT0RFUEFHRSAiMTAwMDQiCiAgTE9DQUxFX0lERUZBVUxUVU5JWENPREVQQUdFICIyODU5NiIKICBMT0NBTEVfSURJR0lUUyAiMyIKICBMT0NBTEVfSURJR0lUU1VCU1RJVFVUSU9OICIwIgogIExPQ0FMRV9JRklSU1REQVlPRldFRUsgIjAiCiAgTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIgIjAiCiAgTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUyAiMyIKICBMT0NBTEVfSUxBTkdVQUdFICIxYzAxIgogIExPQ0FMRV9JTERBVEUgIjEiCiAgTE9DQUxFX0lMWkVSTyAiMSIKICBMT0NBTEVfSU1FQVNVUkUgIjAiCiAgTE9DQUxFX0lNT05MWkVSTyAiMSIKICBMT0NBTEVfSU5FR0NVUlIgIjMiCiAgTE9DQUxFX0lORUdOVU1CRVIgIjMiCiAgTE9DQUxFX0lORUdTRVBCWVNQQUNFICIwIgogIExPQ0FMRV9JTkVHU0lHTlBPU04gIjIiCiAgTE9DQUxFX0lORUdTWU1QUkVDRURFUyAiMSIKICBMT0NBTEVfSU9QVElPTkFMQ0FMRU5EQVIgIjYiCiAgTE9DQUxFX0lQQVBFUlNJWkUgIjkiCiAgTE9DQUxFX0lQT1NTRVBCWVNQQUNFICIxIgogIExPQ0FMRV9JUE9TU0lHTlBPU04gIjIiCiAgTE9DQUxFX0lQT1NTWU1QUkVDRURFUyAiMSIKICBMT0NBTEVfSVRJTUUgIjEiCiAgTE9DQUxFX0lUSU1FTUFSS1BPU04gIjAiCiAgTE9DQUxFX0lUTFpFUk8gIjAiCiAgTE9DQUxFX1MxMTU5ICLVIgogIExPQ0FMRV9TMjM1OSAi4yIKICBMT0NBTEVfU0FCQlJFVkNUUllOQU1FICJUVU4iCiAgTE9DQUxFX1NBQkJSRVZEQVlOQU1FMSAix+HHy+Tt5CIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUUyICLH4cvhx8vHwSIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUUzICLH4cfRyNrHwSIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUU0ICLH4c7j7dMiCiAgTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSAix+HM49rJIgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTYgIsfh08jKIgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTcgIsfhx83PIgogIExPQ0FMRV9TQUJCUkVWTEFOR05BTUUgIkFSVCIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEgIszH5N3tIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiAi3e3d0e0iCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzICLjx9HTIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCAix93R7eEiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1ICLjx+0iCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2ICLM5sfkIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNyAizObt4e3JIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCAix8jKIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSAi08jK48jRIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAgIsffyubI0SIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExICLk5t3jyNEiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiAiz+3T48jRIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMgIiIKICBMT0NBTEVfU0NPVU5UUlkgIlR1bmlzaWEiCiAgTE9DQUxFX1NDVVJSRU5DWSAizy7KLv4iCiAgTE9DQUxFX1NEQVRFICItIgogIExPQ0FMRV9TREFZTkFNRTEgIsfhx8vk7eQiCiAgTE9DQUxFX1NEQVlOQU1FMiAix+HL4cfLx8EiCiAgTE9DQUxFX1NEQVlOQU1FMyAix+HH0cjax8EiCiAgTE9DQUxFX1NEQVlOQU1FNCAix+HO4+3TIgogIExPQ0FMRV9TREFZTkFNRTUgIsfhzOPaySIKICBMT0NBTEVfU0RBWU5BTUU2ICLH4dPIyiIKICBMT0NBTEVfU0RBWU5BTUU3ICLH4cfNzyIKICBMT0NBTEVfU0RFQ0lNQUwgIi4iCiAgTE9DQUxFX1NFTkdDT1VOVFJZICJUdW5pc2lhIgogIExPQ0FMRV9TRU5HQ1VSUk5BTUUgIlR1bmlzaWFuIERvbGxhciIKICBMT0NBTEVfU0VOR0xBTkdVQUdFICJBcmFiaWMiCiAgTE9DQUxFX1NHUk9VUElORyAiMzswIgogIExPQ0FMRV9TSU5UTFNZTUJPTCAiVE5EIgogIExPQ0FMRV9TSVNPMzE2NkNUUllOQU1FICJUTiIKICBMT0NBTEVfU0lTTzYzOUxBTkdOQU1FICJhciIKICBMT0NBTEVfU0xBTkdVQUdFICJBcmFiaWMgKFR1bmlzaWEpIgogIExPQ0FMRV9TTElTVCAiOyIKICBMT0NBTEVfU0xPTkdEQVRFICJkZCBNTU1NLCB5eXl5IgogIExPQ0FMRV9TTU9OREVDSU1BTFNFUCAiLiIKICBMT0NBTEVfU01PTkdST1VQSU5HICIzOzAiCiAgTE9DQUxFX1NNT05USE5BTUUxICLMx+Td7SIKICBMT0NBTEVfU01PTlRITkFNRTIgIt3t3dHtIgogIExPQ0FMRV9TTU9OVEhOQU1FMyAi48fR0yIKICBMT0NBTEVfU01PTlRITkFNRTQgIsfd0e3hIgogIExPQ0FMRV9TTU9OVEhOQU1FNSAi48ftIgogIExPQ0FMRV9TTU9OVEhOQU1FNiAizObH5CIKICBMT0NBTEVfU01PTlRITkFNRTcgIszm7eHtySIKICBMT0NBTEVfU01PTlRITkFNRTggIsfIyiIKICBMT0NBTEVfU01PTlRITkFNRTkgItPIyuPI0SIKICBMT0NBTEVfU01PTlRITkFNRTEwICLH38rmyNEiCiAgTE9DQUxFX1NNT05USE5BTUUxMSAi5Obd48jRIgogIExPQ0FMRV9TTU9OVEhOQU1FMTIgIs/t0+PI0SIKICBMT0NBTEVfU01PTlRITkFNRTEzICIiCiAgTE9DQUxFX1NNT05USE9VU0FORFNFUCAiLCIKICBMT0NBTEVfU05BVElWRUNUUllOQU1FICLK5uTTIgogIExPQ0FMRV9TTkFUSVZFQ1VSUk5BTUUgIs/m4cfRoMrm5NPtIgogIExPQ0FMRV9TTkFUSVZFRElHSVRTICIwMTIzNDU2Nzg5IgogIExPQ0FMRV9TTkFUSVZFTEFOR05BTUUgIsfh2tHI7ckiCiAgTE9DQUxFX1NORUdBVElWRVNJR04gIi0iCiAgTE9DQUxFX1NQT1NJVElWRVNJR04gIiIKICBMT0NBTEVfU1NIT1JUREFURSAiZGQtTU0teXl5eSIKICBMT0NBTEVfU1NPUlROQU1FICJEZWZhdWx0IgogIExPQ0FMRV9TVEhPVVNBTkQgIiwiCiAgTE9DQUxFX1NUSU1FICI6IgogIExPQ0FMRV9TVElNRUZPUk1BVCAiSDptbTpzcyIKICBMT0NBTEVfU1lFQVJNT05USCAiTU1NTSwgeXl5eSIKCiAgTEdSUElEX1dFU1RFUk5fRVVST1BFK0xHUlBJRF9SRVNfQkFTRSAiV2VzdGVybiBFdXJvcGUgYW5kIFVuaXRlZCBTdGF0ZXMiCiAgTEdSUElEX0NFTlRSQUxfRVVST1BFK0xHUlBJRF9SRVNfQkFTRSAiQ2VudHJhbCBFdXJvcGUiCiAgTEdSUElEX0JBTFRJQytMR1JQSURfUkVTX0JBU0UgIkJhbHRpYyIKICBMR1JQSURfR1JFRUsrTEdSUElEX1JFU19CQVNFICJHcmVlayIKICBMR1JQSURfQ1lSSUxMSUMrTEdSUElEX1JFU19CQVNFICJDeXJpbGxpYyIKICBMR1JQSURfVFVSS0lTSCtMR1JQSURfUkVTX0JBU0UgIlR1cmtpYyIKICBMR1JQSURfSkFQQU5FU0UrTEdSUElEX1JFU19CQVNFICJKYXBhbmVzZSIKICBMR1JQSURfS09SRUFOK0xHUlBJRF9SRVNfQkFTRSAiS29yZWFuIgogIExHUlBJRF9UUkFESVRJT05BTF9DSElORVNFK0xHUlBJRF9SRVNfQkFTRSAiVHJhZGl0aW9uYWwgQ2hpbmVzZSIKICBMR1JQSURfU0lNUExJRklFRF9DSElORVNFK0xHUlBJRF9SRVNfQkFTRSAiU2ltcGxpZmllZCBDaGluZXNlIgogIExHUlBJRF9USEFJK0xHUlBJRF9SRVNfQkFTRSAiVGhhaSIKICBMR1JQSURfSEVCUkVXK0xHUlBJRF9SRVNfQkFTRSAiSGVicmV3IgogIExHUlBJRF9BUkFCSUMrTEdSUElEX1JFU19CQVNFICJBcmFiaWMiIAogIExHUlBJRF9WSUVUTkFNRVNFK0xHUlBJRF9SRVNfQkFTRSAiVmlldG5hbWVzZSIKICBMR1JQSURfSU5ESUMrTEdSUElEX1JFU19CQVNFICJJbmRpYyIKICBMR1JQSURfR0VPUkdJQU4rTEdSUElEX1JFU19CQVNFICJHZW9yZ2lhbiIKICBMR1JQSURfQVJNRU5JQU4rTEdSUElEX1JFU19CQVNFICJBcm1lbmlhbiIKfQo=