LyoKICogTG9jYWxlIGRlZmluaXRpb25zIGZvciBNb25nb2xpYW4gKEN5cmlsbGljKQogKgogKiBDb3B5cmlnaHQgMjAwMiBBbGV4YW5kcmUgSnVsbGlhcmQgZm9yIENvZGVXZWF2ZXJzCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCiNwcmFnbWEgY29kZV9wYWdlKDEyNTEpCgpTVFJJTkdUQUJMRSBMQU5HVUFHRSBMQU5HX01PTkdPTElBTiwgU1VCTEFOR19ERUZBVUxUCnsKICBMT0NBTEVfRk9OVFNJR05BVFVSRSBMIlx4MDIwM1x4ODAwMFx4Mzg0OFx4MDAwMFx4MDAwMFx4MDAwMFx4MDAwMFx4MDAwMFx4MDAwNFx4MDAwMFx4MDAwMFx4MDAwMlx4MDAwNFx4MDAwMFx4MDAwMFx4MDIwMiIKICBMT0NBTEVfSUNBTEVOREFSVFlQRSAiMSIKICBMT0NBTEVfSUNFTlRVUlkgIjAiCiAgTE9DQUxFX0lDT1VOVFJZICI5NzYiCiAgTE9DQUxFX0lDVVJSRElHSVRTICIyIgogIExPQ0FMRV9JQ1VSUkVOQ1kgIjEiCiAgTE9DQUxFX0lEQVRFICIyIgogIExPQ0FMRV9JREFZTFpFUk8gIjEiCiAgTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFICIxMjUxIgogIExPQ0FMRV9JREVGQVVMVENPREVQQUdFICI4NjYiCiAgTE9DQUxFX0lERUZBVUxUQ09VTlRSWSAiOTc2IgogIExPQ0FMRV9JREVGQVVMVEVCQ0RJQ0NPREVQQUdFICIyMDg4MCIKICBMT0NBTEVfSURFRkFVTFRMQU5HVUFHRSAiNDUwIgogIExPQ0FMRV9JREVGQVVMVE1BQ0NPREVQQUdFICIxMDAwNyIKICBMT0NBTEVfSURFRkFVTFRVTklYQ09ERVBBR0UgIjI4NTk1IgogIExPQ0FMRV9JRElHSVRTICIyIgogIExPQ0FMRV9JRElHSVRTVUJTVElUVVRJT04gIjAiCiAgTE9DQUxFX0lGSVJTVERBWU9GV0VFSyAiMCIKICBMT0NBTEVfSUZJUlNUV0VFS09GWUVBUiAiMCIKICBMT0NBTEVfSUlOVExDVVJSRElHSVRTICIyIgogIExPQ0FMRV9JTEFOR1VBR0UgIjA0NTAiCiAgTE9DQUxFX0lMREFURSAiMiIKICBMT0NBTEVfSUxaRVJPICIxIgogIExPQ0FMRV9JTUVBU1VSRSAiMCIKICBMT0NBTEVfSU1PTkxaRVJPICIxIgogIExPQ0FMRV9JTkVHQ1VSUiAiNSIKICBMT0NBTEVfSU5FR05VTUJFUiAiMSIKICBMT0NBTEVfSU5FR1NFUEJZU1BBQ0UgIjAiCiAgTE9DQUxFX0lORUdTSUdOUE9TTiAiMSIKICBMT0NBTEVfSU5FR1NZTVBSRUNFREVTICIwIgogIExPQ0FMRV9JTkVVVFJBTCAiMCIKICBMT0NBTEVfSU9QVElPTkFMQ0FMRU5EQVIgIjAiCiAgTE9DQUxFX0lQQVBFUlNJWkUgIjkiCiAgTE9DQUxFX0lQT1NTRVBCWVNQQUNFICIwIgogIExPQ0FMRV9JUE9TU0lHTlBPU04gIjEiCiAgTE9DQUxFX0lQT1NTWU1QUkVDRURFUyAiMCIKICBMT0NBTEVfSVJFQURJTkdMQVlPVVQgIjMiCiAgTE9DQUxFX0lUSU1FICIxIgogIExPQ0FMRV9JVElNRU1BUktQT1NOICIwIgogIExPQ0FMRV9JVExaRVJPICIwIgogIExPQ0FMRV9TMTE1OSAiIgogIExPQ0FMRV9TMjM1OSAiIgogIExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUgIk1ORyIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUUxICLE4CIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUUyICLM/yIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUUzICLL9SIKICBMT0NBTEVfU0FCQlJFVkRBWU5BTUU0IEwiXHgwNDFmXHgwNGFmIgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTUgIsHgIgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTYgIsH/IgogIExPQ0FMRV9TQUJCUkVWREFZTkFNRTcgIs3/IgogIExPQ0FMRV9TQUJCUkVWTEFOR05BTUUgIk1PTiIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEgIkkiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUUyICJJSSIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTMgIklJSSIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTQgIklWIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNSAiViIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTYgIlZJIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FNyAiVklJIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FOCAiVtgiCiAgTE9DQUxFX1NBQkJSRVZNT05USE5BTUU5ICJJWCIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEwICJYIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTEgIlhJIgogIExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTIgIlhJSSIKICBMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEzICIiCiAgTE9DQUxFX1NDT1VOVFJZICJNb25nb2xpYSIKICBMT0NBTEVfU0NVUlJFTkNZIEwiXHgyMGFlIgogIExPQ0FMRV9TREFURSAiLiIKICBMT0NBTEVfU0RBWU5BTUUxICLE4OLg4CIKICBMT0NBTEVfU0RBWU5BTUUyICLM/+Ps4PAiCiAgTE9DQUxFX1NEQVlOQU1FMyAiy/Xg4+LgIgogIExPQ0FMRV9TREFZTkFNRTQgTCJceDA0MWZceDA0YWZceDA0NDBceDA0NGRceDA0MzIiCiAgTE9DQUxFX1NEQVlOQU1FNSAiweDg8eDtIgogIExPQ0FMRV9TREFZTkFNRTYgIsH/7OHgIgogIExPQ0FMRV9TREFZTkFNRTcgIs3/7CIKICBMT0NBTEVfU0RFQ0lNQUwgIiwiCiAgTE9DQUxFX1NFTkdDT1VOVFJZICJNb25nb2xpYSIKICBMT0NBTEVfU0VOR0NVUlJOQU1FICJUdWdyaWsiCiAgTE9DQUxFX1NFTkdMQU5HVUFHRSAiTW9uZ29saWFuIgogIExPQ0FMRV9TR1JPVVBJTkcgIjM7MCIKICBMT0NBTEVfU0lOVExTWU1CT0wgIk1OVCIKICBMT0NBTEVfU0lTTzMxNjZDVFJZTkFNRSAiTU4iCiAgTE9DQUxFX1NJU082MzlMQU5HTkFNRSAibW4iCiAgTE9DQUxFX1NMQU5HVUFHRSAiTW9uZ29saWFuIChDeXJpbGxpYykiCiAgTE9DQUxFX1NMSVNUICI7IgogIExPQ0FMRV9TTE9OR0RBVEUgInl5eXkgJ+7t+ycgTU1NTSBkIgogIExPQ0FMRV9TTU9OREVDSU1BTFNFUCAiLCIKICBMT0NBTEVfU01PTkdST1VQSU5HICIzOzAiCiAgTE9DQUxFX1NNT05USE5BTUUxIEwiMVx4MDBhMFx4MDQzNFx4MDRhZlx4MDQzM1x4MDQ0ZFx4MDQ0ZFx4MDQ0MFx4MDBhMFx4MDQ0MVx4MDQzMFx4MDQ0MCIKICBMT0NBTEVfU01PTlRITkFNRTIgIjKg5PPj4ODwoPHg8CIKICBMT0NBTEVfU01PTlRITkFNRTMgIjOg5PPj4ODwoPHg8CIKICBMT0NBTEVfU01PTlRITkFNRTQgTCI0XHgwMGEwXHgwNDM0XHgwNGFmXHgwNDMzXHgwNDRkXHgwNDRkXHgwNDQwXHgwMGEwXHgwNDQxXHgwNDMwXHgwNDQwIgogIExPQ0FMRV9TTU9OVEhOQU1FNSAiNaDk8+Pg4PCg8eDwIgogIExPQ0FMRV9TTU9OVEhOQU1FNiAiNqDk8+Pg4PCg8eDwIgogIExPQ0FMRV9TTU9OVEhOQU1FNyAiN6Dk8+Pg4PCg8eDwIgogIExPQ0FMRV9TTU9OVEhOQU1FOCAiOKDk8+Pg4PCg8eDwIgogIExPQ0FMRV9TTU9OVEhOQU1FOSBMIjlceDAwYTBceDA0MzRceDA0YWZceDA0MzNceDA0NGRceDA0NGRceDA0NDBceDAwYTBceDA0NDFceDA0MzBceDA0NDAiCiAgTE9DQUxFX1NNT05USE5BTUUxMCAiMTCg5PPj4ODwoPHg8CIKICBMT0NBTEVfU01PTlRITkFNRTExIEwiMTFceDAwYTBceDA0MzRceDA0YWZceDA0MzNceDA0NGRceDA0NGRceDA0NDBceDAwYTBceDA0NDFceDA0MzBceDA0NDAiCiAgTE9DQUxFX1NNT05USE5BTUUxMiAiMTKg5PPj4ODwoPHg8CIKICBMT0NBTEVfU01PTlRITkFNRTEzICIiCiAgTE9DQUxFX1NNT05USE9VU0FORFNFUCAioCIKICBMT0NBTEVfU05BTUUgIm1uLU1OIgogIExPQ0FMRV9TTkFUSVZFQ1RSWU5BTUUgIszu7ePu66Dz6/EiCiAgTE9DQUxFX1NOQVRJVkVDVVJSTkFNRSBMIlx4MDQyMlx4MDRlOVx4MDQzM1x4MDQ0MFx4MDRlOVx4MDQzMyIKICBMT0NBTEVfU05BVElWRURJR0lUUyAiMDEyMzQ1Njc4OSIKICBMT0NBTEVfU05BVElWRURJU1BMQVlOQU1FICLM7u3j7uug9f3rICjM7u3j7uug8+vxKSIKICBMT0NBTEVfU05BVElWRUxBTkdOQU1FICLM7u3j7uug9f3rIgogIExPQ0FMRV9TTkVHQVRJVkVTSUdOICItIgogIExPQ0FMRV9TT1BFTlRZUEVMQU5HVUFHRVRBRyAiTU5HICIKICBMT0NBTEVfU1BPU0lUSVZFU0lHTiAiIgogIExPQ0FMRV9TU0NSSVBUUyAiQ3lybDsiCiAgTE9DQUxFX1NTSE9SVERBVEUgInl5Lk1NLmRkIgogIExPQ0FMRV9TU0hPUlRUSU1FICJIOm1tIgogIExPQ0FMRV9TU09SVE5BTUUgIkRlZmF1bHQiCiAgTE9DQUxFX1NUSE9VU0FORCAioCIKICBMT0NBTEVfU1RJTUUgIjoiCiAgTE9DQUxFX1NUSU1FRk9STUFUICJIOm1tOnNzIgogIExPQ0FMRV9TWUVBUk1PTlRIICJ5eXl5ICfu7ScgTU1NTSIKCiAgTEdSUElEX1dFU1RFUk5fRVVST1BFK0xHUlBJRF9SRVNfQkFTRSAiV2VzdGVybiBFdXJvcGUgYW5kIFVuaXRlZCBTdGF0ZXMiCiAgTEdSUElEX0NFTlRSQUxfRVVST1BFK0xHUlBJRF9SRVNfQkFTRSAiQ2VudHJhbCBFdXJvcGUiCiAgTEdSUElEX0JBTFRJQytMR1JQSURfUkVTX0JBU0UgIkJhbHRpYyIKICBMR1JQSURfR1JFRUsrTEdSUElEX1JFU19CQVNFICJHcmVlayIKICBMR1JQSURfQ1lSSUxMSUMrTEdSUElEX1JFU19CQVNFICJDeXJpbGxpYyIKICBMR1JQSURfVFVSS0lTSCtMR1JQSURfUkVTX0JBU0UgIlR1cmtpYyIKICBMR1JQSURfSkFQQU5FU0UrTEdSUElEX1JFU19CQVNFICJKYXBhbmVzZSIKICBMR1JQSURfS09SRUFOK0xHUlBJRF9SRVNfQkFTRSAiS29yZWFuIgogIExHUlBJRF9UUkFESVRJT05BTF9DSElORVNFK0xHUlBJRF9SRVNfQkFTRSAiVHJhZGl0aW9uYWwgQ2hpbmVzZSIKICBMR1JQSURfU0lNUExJRklFRF9DSElORVNFK0xHUlBJRF9SRVNfQkFTRSAiU2ltcGxpZmllZCBDaGluZXNlIgogIExHUlBJRF9USEFJK0xHUlBJRF9SRVNfQkFTRSAiVGhhaSIKICBMR1JQSURfSEVCUkVXK0xHUlBJRF9SRVNfQkFTRSAiSGVicmV3IgogIExHUlBJRF9BUkFCSUMrTEdSUElEX1JFU19CQVNFICJBcmFiaWMiIAogIExHUlBJRF9WSUVUTkFNRVNFK0xHUlBJRF9SRVNfQkFTRSAiVmlldG5hbWVzZSIKICBMR1JQSURfSU5ESUMrTEdSUElEX1JFU19CQVNFICJJbmRpYyIKICBMR1JQSURfR0VPUkdJQU4rTEdSUElEX1JFU19CQVNFICJHZW9yZ2lhbiIKICBMR1JQSURfQVJNRU5JQU4rTEdSUElEX1JFU19CQVNFICJBcm1lbmlhbiIKfQo=