LyoKICogTG9jYWxlIGRlZmluaXRpb25zIGZvciBBemVyaSAoQ3lyaWxsaWMpCiAqCiAqIENvcHlyaWdodCAyMDAyIEFsZXhhbmRyZSBKdWxsaWFyZCBmb3IgQ29kZXdlYXZlcnMKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqLwoKI3ByYWdtYSBjb2RlX3BhZ2UoMTI1MSkKClNUUklOR1RBQkxFIExBTkdVQUdFIExBTkdfQVpFUkksIFNVQkxBTkdfQVpFUklfQ1lSSUxMSUMKewogIExPQ0FMRV9GT05UU0lHTkFUVVJFIEwiXHgwMjAzXHg4MDAwXHgzODQ4XHgwMDAwXHgwMDAwXHgwMDAwXHgwMDAwXHgwMDAwXHgwMDA0XHgwMDAwXHgwMDAwXHgwMDAyXHgwMDA0XHgwMDAwXHgwMDAwXHgwMjAyIgogIExPQ0FMRV9JQ0FMRU5EQVJUWVBFICIxIgogIExPQ0FMRV9JQ0VOVFVSWSAiMSIKICBMT0NBTEVfSUNPVU5UUlkgIjk5NCIKICBMT0NBTEVfSUNVUlJESUdJVFMgIjIiCiAgTE9DQUxFX0lDVVJSRU5DWSAiMyIKICBMT0NBTEVfSURBVEUgIjEiCiAgTE9DQUxFX0lEQVlMWkVSTyAiMSIKICBMT0NBTEVfSURFRkFVTFRBTlNJQ09ERVBBR0UgIjEyNTEiCiAgTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UgIjg2NiIKICBMT0NBTEVfSURFRkFVTFRDT1VOVFJZICI5OTQiCiAgTE9DQUxFX0lERUZBVUxURUJDRElDQ09ERVBBR0UgIjIwODgwIgogIExPQ0FMRV9JREVGQVVMVExBTkdVQUdFICIwODJjIgogIExPQ0FMRV9JREVGQVVMVE1BQ0NPREVQQUdFICIxMDAwNyIKICBMT0NBTEVfSURJR0lUUyAiMiIKICBMT0NBTEVfSURJR0lUU1VCU1RJVFVUSU9OICIxIgogIExPQ0FMRV9JRklSU1REQVlPRldFRUsgIjAiCiAgTE9DQUxFX0lGSVJTVFdFRUtPRllFQVIgIjAiCiAgTE9DQUxFX0lJTlRMQ1VSUkRJR0lUUyAiMiIKICBMT0NBTEVfSUxBTkdVQUdFICIwODJjIgogIExPQ0FMRV9JTERBVEUgIjEiCiAgTE9DQUxFX0lMWkVSTyAiMSIKICBMT0NBTEVfSU1FQVNVUkUgIjAiCiAgTE9DQUxFX0lNT05MWkVSTyAiMSIKICBMT0NBTEVfSU5FR0NVUlIgIjgiCiAgTE9DQUxFX0lORUdOVU1CRVIgIjEiCiAgTE9DQUxFX0lORUdTRVBCWVNQQUNFICIxIgogIExPQ0FMRV9JTkVHU0lHTlBPU04gIjEiCiAgTE9DQUxFX0lORUdTWU1QUkVDRURFUyAiMCIKICBMT0NBTEVfSU9QVElPTkFMQ0FMRU5EQVIgIjAiCiAgTE9DQUxFX0lQQVBFUlNJWkUgIjkiCiAgTE9DQUxFX0lQT1NTRVBCWVNQQUNFICIxIgogIExPQ0FMRV9JUE9TU0lHTlBPU04gIjEiCiAgTE9DQUxFX0lQT1NTWU1QUkVDRURFUyAiMCIKICBMT0NBTEVfSVRJTUUgIjEiCiAgTE9DQUxFX0lUSU1FTUFSS1BPU04gIjAiCiAgTE9DQUxFX0lUTFpFUk8gIjAiCiAgTE9DQUxFX1MxMTU5ICIiCiAgTE9DQUxFX1MyMzU5ICIiCiAgTE9DQUxFX1NBQkJSRVZDVFJZTkFNRSAiQVpFIgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTEgIsHlIgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTIgItfgIgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTMgItciCiAgTE9DQUxFX1NBQkJSRVZEQVlOQU1FNCBMIlx4MDRiOFx4MDQzMCIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUU1IEwiXHgwNGI4IgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTYgItgiCiAgTE9DQUxFX1NBQkJSRVZEQVlOQU1FNyAiwSIKICBMT0NBTEVfU0FCQlJFVkxBTkdOQU1FICJBWkUiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxICKj4O0iCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyICLU5eIiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUzICLM4PAiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU0ICLA7/AiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU1ICLM4LwiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU2ICLIvPPtIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNyAiyLzz6yIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTggIsDi4yIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTkgItHl7SIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwICLO6vIiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSAize7/IgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIgIsTl6iIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzICIiCiAgTE9DQUxFX1NDT1VOVFJZICJBemVyYmFpamFuIgogIExPQ0FMRV9TQ1VSUkVOQ1kgIuzg7S4iCiAgTE9DQUxFX1NEQVRFICIuIgogIExPQ0FMRV9TREFZTkFNRTEgTCJceDA0MTFceDA0MzBceDA0MzdceDA0MzBceDA0NDBceDAwYTBceDA0MzVceDA0NDBceDA0NDJceDA0ZDlceDA0NDFceDA0MzgiCiAgTE9DQUxFX1NEQVlOQU1FMiBMIlx4MDQyN1x4MDRkOVx4MDQ0MFx4MDQ0OFx4MDRkOVx4MDQzZFx4MDQzMVx4MDRkOVx4MDBhMFx4MDQzMFx4MDQ0NVx4MDQ0OFx4MDQzMFx4MDQzY1x4MDQ0YiIKICBMT0NBTEVfU0RBWU5BTUUzIEwiXHgwNDI3XHgwNGQ5XHgwNDQwXHgwNDQ4XHgwNGQ5XHgwNDNkXHgwNDMxXHgwNGQ5IgogIExPQ0FMRV9TREFZTkFNRTQgTCJceDA0YjhceDA0YWZceDA0M2NceDA0ZDlceDAwYTBceDA0MzBceDA0NDVceDA0NDhceDA0MzBceDA0M2NceDA0NGIiCiAgTE9DQUxFX1NEQVlOQU1FNSBMIlx4MDRiOFx4MDRhZlx4MDQzY1x4MDRkOSIKICBMT0NBTEVfU0RBWU5BTUU2IEwiXHgwNDI4XHgwNGQ5XHgwNDNkXHgwNDMxXHgwNGQ5IgogIExPQ0FMRV9TREFZTkFNRTcgIsHg5+DwIgogIExPQ0FMRV9TREVDSU1BTCAiLCIKICBMT0NBTEVfU0VOR0NPVU5UUlkgIkF6ZXJiYWlqYW4iCiAgTE9DQUxFX1NFTkdDVVJSTkFNRSAiQXplcmJhaWphbmlhbiBNYW5hdCIKICBMT0NBTEVfU0VOR0xBTkdVQUdFICJBemVyaSAoQ3lyaWxsaWMpIgogIExPQ0FMRV9TR1JPVVBJTkcgIjM7MCIKICBMT0NBTEVfU0lOVExTWU1CT0wgIkFaTSIKICBMT0NBTEVfU0lTTzMxNjZDVFJZTkFNRSAiQVoiCiAgTE9DQUxFX1NJU082MzlMQU5HTkFNRSAiYXoiCiAgTE9DQUxFX1NMQU5HVUFHRSAiQXplcmkgKEN5cmlsbGljKSIKICBMT0NBTEVfU0xJU1QgIjsiCiAgTE9DQUxFX1NMT05HREFURSAiZCBNTU1NIHl5eXkiCiAgTE9DQUxFX1NNT05ERUNJTUFMU0VQICIsIgogIExPQ0FMRV9TTU9OR1JPVVBJTkcgIjM7MCIKICBMT0NBTEVfU01PTlRITkFNRTEgIqPg7eLg8CIKICBMT0NBTEVfU01PTlRITkFNRTIgItTl4vDg6yIKICBMT0NBTEVfU01PTlRITkFNRTMgIszg8PIiCiAgTE9DQUxFX1NNT05USE5BTUU0ICLA7/Dl6yIKICBMT0NBTEVfU01PTlRITkFNRTUgIszgvCIKICBMT0NBTEVfU01PTlRITkFNRTYgIsi88+0iCiAgTE9DQUxFX1NNT05USE5BTUU3ICLIvPPrIgogIExPQ0FMRV9TTU9OVEhOQU1FOCAiwOLj8/HyIgogIExPQ0FMRV9TTU9OVEhOQU1FOSAi0eXt8rzg4fAiCiAgTE9DQUxFX1NNT05USE5BTUUxMCAizuryvODh8CIKICBMT0NBTEVfU01PTlRITkFNRTExICLN7rzg4fAiCiAgTE9DQUxFX1NNT05USE5BTUUxMiAixOXq4OHwIgogIExPQ0FMRV9TTU9OVEhOQU1FMTMgIiIKICBMT0NBTEVfU01PTlRIT1VTQU5EU0VQICKgIgogIExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUgTCJceDA0MTBceDA0MzdceDA0ZDlceDA0NDBceDA0MzFceDA0MzBceDA0NThceDA0YjlceDA0MzBceDA0M2QiCiAgTE9DQUxFX1NOQVRJVkVDVVJSTkFNRSAi8PPh6/wiCiAgTE9DQUxFX1NOQVRJVkVESUdJVFMgIjAxMjM0NTY3ODkiCiAgTE9DQUxFX1NOQVRJVkVMQU5HTkFNRSBMIlx4MDQxMFx4MDQzN1x4MDRkOVx4MDQ0MFx4MDQzMVx4MDQzMFx4MDQ1OFx4MDRiOVx4MDQzMFx4MDQzZCIKICBMT0NBTEVfU05FR0FUSVZFU0lHTiAiLSIKICBMT0NBTEVfU1BPU0lUSVZFU0lHTiAiIgogIExPQ0FMRV9TU0hPUlREQVRFICJkZC5NTS55eXl5IgogIExPQ0FMRV9TU09SVE5BTUUgIkRlZmF1bHQiCiAgTE9DQUxFX1NUSE9VU0FORCAioCIKICBMT0NBTEVfU1RJTUUgIjoiCiAgTE9DQUxFX1NUSU1FRk9STUFUICJIOm1tOnNzIgogIExPQ0FMRV9TWUVBUk1PTlRIICJNTU1NIHl5eXkiCn0K