LyoKICogTG9jYWxlIGRlZmluaXRpb25zIGZvciBDcm9hdGlhbgogKgogKiBDb3B5cmlnaHQgMjAwMiBBbGV4YW5kcmUgSnVsbGlhcmQgZm9yIENvZGVXZWF2ZXJzCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCiNwcmFnbWEgY29kZV9wYWdlKDEyNTApCgpTVFJJTkdUQUJMRSBMQU5HVUFHRSBMQU5HX1NFUkJJQU4sIFNVQkxBTkdfREVGQVVMVAp7CiAgTE9DQUxFX0ZPTlRTSUdOQVRVUkUgTCJceDAwMjdceDgwMDBceDM4MDhceDAwMDBceDAwMDBceDAwMDBceDAwMDBceDAwMDBceDAwMDJceDAwMDBceDAwMDBceDA0MDBceDAwMTJceDAwMDBceDAwMDBceGM1ZDQiCiAgTE9DQUxFX0lDQUxFTkRBUlRZUEUgIjEiCiAgTE9DQUxFX0lDRU5UVVJZICIxIgogIExPQ0FMRV9JQ09VTlRSWSAiMzg1IgogIExPQ0FMRV9JQ1VSUkRJR0lUUyAiMiIKICBMT0NBTEVfSUNVUlJFTkNZICIzIgogIExPQ0FMRV9JREFURSAiMSIKICBMT0NBTEVfSURBWUxaRVJPICIwIgogIExPQ0FMRV9JREVGQVVMVEFOU0lDT0RFUEFHRSAiMTI1MCIKICBMT0NBTEVfSURFRkFVTFRDT0RFUEFHRSAiODUyIgogIExPQ0FMRV9JREVGQVVMVENPVU5UUlkgIjM4NSIKICBMT0NBTEVfSURFRkFVTFRFQkNESUNDT0RFUEFHRSAiNTAwIgogIExPQ0FMRV9JREVGQVVMVExBTkdVQUdFICIwNDFhIgogIExPQ0FMRV9JREVGQVVMVE1BQ0NPREVQQUdFICIxMDA4MiIKICBMT0NBTEVfSURFRkFVTFRVTklYQ09ERVBBR0UgIjI4NTkyIgogIExPQ0FMRV9JRElHSVRTICIyIgogIExPQ0FMRV9JRElHSVRTVUJTVElUVVRJT04gIjEiCiAgTE9DQUxFX0lGSVJTVERBWU9GV0VFSyAiMCIKICBMT0NBTEVfSUZJUlNUV0VFS09GWUVBUiAiMCIKICBMT0NBTEVfSUlOVExDVVJSRElHSVRTICIyIgogIExPQ0FMRV9JTEFOR1VBR0UgIjA0MWEiCiAgTE9DQUxFX0lMREFURSAiMSIKICBMT0NBTEVfSUxaRVJPICIxIgogIExPQ0FMRV9JTUVBU1VSRSAiMCIKICBMT0NBTEVfSU1PTkxaRVJPICIwIgogIExPQ0FMRV9JTkVHQ1VSUiAiOCIKICBMT0NBTEVfSU5FR05VTUJFUiAiMiIKICBMT0NBTEVfSU5FR1NFUEJZU1BBQ0UgIjEiCiAgTE9DQUxFX0lORUdTSUdOUE9TTiAiMSIKICBMT0NBTEVfSU5FR1NZTVBSRUNFREVTICIwIgogIExPQ0FMRV9JTkVVVFJBTCAiMCIKICBMT0NBTEVfSU9QVElPTkFMQ0FMRU5EQVIgIjAiCiAgTE9DQUxFX0lQQVBFUlNJWkUgIjkiCiAgTE9DQUxFX0lQT1NTRVBCWVNQQUNFICIxIgogIExPQ0FMRV9JUE9TU0lHTlBPU04gIjEiCiAgTE9DQUxFX0lQT1NTWU1QUkVDRURFUyAiMCIKICBMT0NBTEVfSVJFQURJTkdMQVlPVVQgIjAiCiAgTE9DQUxFX0lUSU1FICIxIgogIExPQ0FMRV9JVElNRU1BUktQT1NOICIwIgogIExPQ0FMRV9JVExaRVJPICIwIgogIExPQ0FMRV9TMTE1OSAiIgogIExPQ0FMRV9TMjM1OSAiIgogIExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUgIkhSViIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUUxICJwb24iCiAgTE9DQUxFX1NBQkJSRVZEQVlOQU1FMiAidXRvIgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTMgInNyaSIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUU0ICLoZXQiCiAgTE9DQUxFX1NBQkJSRVZEQVlOQU1FNSAicGV0IgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTYgInN1YiIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUU3ICJuZWQiCiAgTE9DQUxFX1NBQkJSRVZMQU5HTkFNRSAiSFJWIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMSAic2lqIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMiAidmxqIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMyAib551IgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNCAidHJhIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSAic3ZpIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNiAibGlwIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNyAic3JwIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCAia29sIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOSAicnVqIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTAgImxpcyIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTExICJzdHUiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMiAicHJvIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMgIiIKICBMT0NBTEVfU0NPVU5UUlkgIkNyb2F0aWEiCiAgTE9DQUxFX1NDVVJSRU5DWSAia24iCiAgTE9DQUxFX1NEQVRFICIuIgogIExPQ0FMRV9TREFZTkFNRTEgInBvbmVkamVsamFrIgogIExPQ0FMRV9TREFZTkFNRTIgInV0b3JhayIKICBMT0NBTEVfU0RBWU5BTUUzICJzcmlqZWRhIgogIExPQ0FMRV9TREFZTkFNRTQgIuhldHZydGFrIgogIExPQ0FMRV9TREFZTkFNRTUgInBldGFrIgogIExPQ0FMRV9TREFZTkFNRTYgInN1Ym90YSIKICBMT0NBTEVfU0RBWU5BTUU3ICJuZWRqZWxqYSIKICBMT0NBTEVfU0RFQ0lNQUwgIiwiCiAgTE9DQUxFX1NFTkdDT1VOVFJZICJDcm9hdGlhIgogIExPQ0FMRV9TRU5HQ1VSUk5BTUUgIkNyb2F0aWFuIEt1bmEiCiAgTE9DQUxFX1NFTkdMQU5HVUFHRSAiQ3JvYXRpYW4iCiAgTE9DQUxFX1NHUk9VUElORyAiMzswIgogIExPQ0FMRV9TSU5UTFNZTUJPTCAiSFJLIgogIExPQ0FMRV9TSVNPMzE2NkNUUllOQU1FICJIUiIKICBMT0NBTEVfU0lTTzYzOUxBTkdOQU1FICJociIKICBMT0NBTEVfU0xBTkdVQUdFICJDcm9hdGlhbiIKICBMT0NBTEVfU0xJU1QgIjsiCiAgTE9DQUxFX1NMT05HREFURSAiZC4gTU1NTSB5eXl5IgogIExPQ0FMRV9TTU9OREVDSU1BTFNFUCAiLCIKICBMT0NBTEVfU01PTkdST1VQSU5HICIzOzAiCiAgTE9DQUxFX1NNT05USE5BTUUxICJzaWpl6GFuaiIKICBMT0NBTEVfU01PTlRITkFNRTIgInZlbGph6GEiCiAgTE9DQUxFX1NNT05USE5BTUUzICJvnnVqYWsiCiAgTE9DQUxFX1NNT05USE5BTUU0ICJ0cmF2YW5qIgogIExPQ0FMRV9TTU9OVEhOQU1FNSAic3ZpYmFuaiIKICBMT0NBTEVfU01PTlRITkFNRTYgImxpcGFuaiIKICBMT0NBTEVfU01PTlRITkFNRTcgInNycGFuaiIKICBMT0NBTEVfU01PTlRITkFNRTggImtvbG92b3oiCiAgTE9DQUxFX1NNT05USE5BTUU5ICJydWphbiIKICBMT0NBTEVfU01PTlRITkFNRTEwICJsaXN0b3BhZCIKICBMT0NBTEVfU01PTlRITkFNRTExICJzdHVkZW5pIgogIExPQ0FMRV9TTU9OVEhOQU1FMTIgInByb3NpbmFjIgogIExPQ0FMRV9TTU9OVEhOQU1FMTMgIiIKICBMT0NBTEVfU01PTlRIT1VTQU5EU0VQICIuIgogIExPQ0FMRV9TTkFNRSAiaHItSFIiCiAgTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSAiSHJ2YXRza2EiCiAgTE9DQUxFX1NOQVRJVkVDVVJSTkFNRSAiaHJ2YXRza2Ega3VuYSIKICBMT0NBTEVfU05BVElWRURJR0lUUyAiMDEyMzQ1Njc4OSIKICBMT0NBTEVfU05BVElWRURJU1BMQVlOQU1FICJocnZhdHNraSAoSHJ2YXRza2EpIgogIExPQ0FMRV9TTkFUSVZFTEFOR05BTUUgImhydmF0c2tpIgogIExPQ0FMRV9TTkVHQVRJVkVTSUdOICItIgogIExPQ0FMRV9TUE9TSVRJVkVTSUdOICIiCiAgTE9DQUxFX1NTQ1JJUFRTICJMYXRuOyIKICBMT0NBTEVfU1NIT1JUREFURSAiZC5NLnl5eXkiCiAgTE9DQUxFX1NTT1JUTkFNRSAiRGVmYXVsdCIKICBMT0NBTEVfU1RIT1VTQU5EICIuIgogIExPQ0FMRV9TVElNRSAiOiIKICBMT0NBTEVfU1RJTUVGT1JNQVQgIkg6bW06c3MiCiAgTE9DQUxFX1NZRUFSTU9OVEggIk1NTU0sIHl5eXkiCgogIExHUlBJRF9XRVNURVJOX0VVUk9QRStMR1JQSURfUkVTX0JBU0UgIldlc3Rlcm4gRXVyb3BlIGFuZCBVbml0ZWQgU3RhdGVzIgogIExHUlBJRF9DRU5UUkFMX0VVUk9QRStMR1JQSURfUkVTX0JBU0UgIkNlbnRyYWwgRXVyb3BlIgogIExHUlBJRF9CQUxUSUMrTEdSUElEX1JFU19CQVNFICJCYWx0aWMiCiAgTEdSUElEX0dSRUVLK0xHUlBJRF9SRVNfQkFTRSAiR3JlZWsiCiAgTEdSUElEX0NZUklMTElDK0xHUlBJRF9SRVNfQkFTRSAiQ3lyaWxsaWMiCiAgTEdSUElEX1RVUktJU0grTEdSUElEX1JFU19CQVNFICJUdXJraWMiCiAgTEdSUElEX0pBUEFORVNFK0xHUlBJRF9SRVNfQkFTRSAiSmFwYW5lc2UiCiAgTEdSUElEX0tPUkVBTitMR1JQSURfUkVTX0JBU0UgIktvcmVhbiIKICBMR1JQSURfVFJBRElUSU9OQUxfQ0hJTkVTRStMR1JQSURfUkVTX0JBU0UgIlRyYWRpdGlvbmFsIENoaW5lc2UiCiAgTEdSUElEX1NJTVBMSUZJRURfQ0hJTkVTRStMR1JQSURfUkVTX0JBU0UgIlNpbXBsaWZpZWQgQ2hpbmVzZSIKICBMR1JQSURfVEhBSStMR1JQSURfUkVTX0JBU0UgIlRoYWkiCiAgTEdSUElEX0hFQlJFVytMR1JQSURfUkVTX0JBU0UgIkhlYnJldyIKICBMR1JQSURfQVJBQklDK0xHUlBJRF9SRVNfQkFTRSAiQXJhYmljIiAKICBMR1JQSURfVklFVE5BTUVTRStMR1JQSURfUkVTX0JBU0UgIlZpZXRuYW1lc2UiCiAgTEdSUElEX0lORElDK0xHUlBJRF9SRVNfQkFTRSAiSW5kaWMiCiAgTEdSUElEX0dFT1JHSUFOK0xHUlBJRF9SRVNfQkFTRSAiR2VvcmdpYW4iCiAgTEdSUElEX0FSTUVOSUFOK0xHUlBJRF9SRVNfQkFTRSAiQXJtZW5pYW4iCn0K