IyBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQuICBTZWUKIyB0aGUgTmV0LVNOTVAncyBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgZGV0YWlscyBhbmQgb3RoZXIgY29weXJpZ2h0cwojIHRoYXQgbWF5IGFwcGx5OgojCiMgUG9ydGlvbnMgQ29weXJpZ2h0IKkgMjAwMyBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiMgVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcyBzcGVjaWZpZWQgaW4gdGhlIENPUFlJTkcgZmlsZQojIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCiMKCiMKIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9jb25mIHRvIHByb2R1Y2UgYSBjb25maWd1cmUgc2NyaXB0LgojCkFDX0lOSVQoW05ldC1TTk1QXSwgWzUuNy4zLnByZTNdLCBbbmV0LXNubXAtY29kZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldF0pCkFDX1BSRVJFUShbMi42M10pCkFDX0NPTkZJR19TUkNESVIoW2FnZW50L3NubXBkLmNdKQpBQ19SRVZJU0lPTihbJFJldmlzaW9uJF0pCgpBQ19DT05GSUdfTUFDUk9fRElSKFttNF0pCkFDX0NPTkZJR19IRUFERVIoaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCkKCkFDX01TR19DQUNIRV9JTklUKCkKCiMKIyBzYXZlIHRoZSBjb25maWd1cmUgYXJndW1lbnRzCiMKQUNfREVGSU5FX1VOUVVPVEVEKE5FVFNOTVBfQ09ORklHVVJFX09QVElPTlMsIiRhY19jb25maWd1cmVfYXJncyIsCiAgW2NvbmZpZ3VyZSBvcHRpb25zIHNwZWNpZmllZF0pCkNPTkZJR1VSRV9PUFRJT05TPSJcIiRhY19jb25maWd1cmVfYXJnc1wiIgpBQ19TVUJTVChDT05GSUdVUkVfT1BUSU9OUykKCiMjCiMjIFJlY29tbWVuZGVkIHN0cnVjdHVyZToKIyMKIyAgICAgaW5mb3JtYXRpb24gb24gdGhlIHBhY2thZ2UKIyAgICAgY2hlY2tzIGZvciBwcm9ncmFtcwojICAgICBjaGVja3MgZm9yIGxpYnJhcmllcwojICAgICBjaGVja3MgZm9yIGhlYWRlciBmaWxlcwojICAgICBjaGVja3MgZm9yIHR5cGVzCiMgICAgIGNoZWNrcyBmb3Igc3RydWN0dXJlcwojICAgICBjaGVja3MgZm9yIGNvbXBpbGVyIGNoYXJhY3RlcmlzdGljcwojICAgICBjaGVja3MgZm9yIGxpYnJhcnkgZnVuY3Rpb25zCiMgICAgIGNoZWNrcyBmb3Igc3lzdGVtIHNlcnZpY2VzCgptNF9pbmNsdWRlKFtjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF93aXRoX2VuYWJsZV0pCm00X2luY2x1ZGUoW2NvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X21hbnVhbF0pCm00X2luY2x1ZGUoW2NvbmZpZ3VyZS5kL2NvbmZpZ19vc19wcm9nc10pCm00X2luY2x1ZGUoW2NvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3BhdGhzXSkKbTRfaW5jbHVkZShbY29uZmlndXJlLmQvY29uZmlnX29zX2hlYWRlcnNdKQpBQ19DQUNIRV9TQVZFCm00X2luY2x1ZGUoW2NvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X2lwdjZfdHlwZXNdKQptNF9pbmNsdWRlKFtjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWJdKQpBQ19DQUNIRV9TQVZFCm00X2luY2x1ZGUoW2NvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzMV0pCm00X2luY2x1ZGUoW2NvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2FnZW50XSkKbTRfaW5jbHVkZShbY29uZmlndXJlLmQvY29uZmlnX29zX21pc2MxXSkKbTRfaW5jbHVkZShbY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMyXSkKQUNfQ0FDSEVfU0FWRQptNF9pbmNsdWRlKFtjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9wZXJsX3B5dGhvbl0pCm00X2luY2x1ZGUoW2NvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjMl0pCm00X2luY2x1ZGUoW2NvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3R5cGVzXSkKbTRfaW5jbHVkZShbY29uZmlndXJlLmQvY29uZmlnX29zX21pc2MzXSkKQUNfQ0FDSEVfU0FWRQptNF9pbmNsdWRlKFtjb25maWd1cmUuZC9jb25maWdfb3NfZnVuY3Rpb25zXSkKbTRfaW5jbHVkZShbY29uZmlndXJlLmQvY29uZmlnX29zX3N0cnVjdF9tZW1iZXJzXSkKbTRfaW5jbHVkZShbY29uZmlndXJlLmQvY29uZmlnX29zX21pc2M0XSkKQUNfQ0FDSEVfU0FWRQoKIwojIGRlZmluZSB0aGUgYWdlbnQgbGlicmFyaWVzIHZhcmlhYmxlcwojCkFDX1NVQlNUKExNSUJMSUJTKQpBQ19TVUJTVChBR0VOVExJQlMpCkFDX1NVQlNUKE9USEVSQUdFTlRMSUJPQkpTKQpBQ19TVUJTVChPVEhFUkFHRU5UTElCTE9CSlMpCkFDX1NVQlNUKE9USEVSQUdFTlRMSUJMRlRTKQoKQUNfU1VCU1QoRExMSUJTKQoKQUNfU1VCU1QoUEFSVElBTFRBUkdFVEZMQUdTKQpBQ19TVUJTVChhY19jdl9ORVRTTk1QX1NZU1RFTV9JTkNMVURFX0ZJTEUpCgpBQ19DT05GSUdfRklMRVMoW01ha2VmaWxlOk1ha2VmaWxlLnRvcDpNYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlc10pCkFDX0NPTkZJR19GSUxFUyhbc25tcGxpYi9NYWtlZmlsZTpNYWtlZmlsZS50b3A6c25tcGxpYi9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlczpzbm1wbGliL01ha2VmaWxlLmRlcGVuZF0pCkFDX0NPTkZJR19GSUxFUyhbYXBwcy9NYWtlZmlsZTpNYWtlZmlsZS50b3A6YXBwcy9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlczphcHBzL01ha2VmaWxlLmRlcGVuZF0pCkFDX0NPTkZJR19GSUxFUyhbYXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZTpNYWtlZmlsZS50b3A6YXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlczphcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmRlcGVuZF0pCkFDX0NPTkZJR19GSUxFUyhbYWdlbnQvTWFrZWZpbGU6TWFrZWZpbGUudG9wOmFnZW50L01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzOmFnZW50L01ha2VmaWxlLmRlcGVuZF0pCkFDX0NPTkZJR19GSUxFUyhbYWdlbnQvaGVscGVycy9NYWtlZmlsZTpNYWtlZmlsZS50b3A6YWdlbnQvaGVscGVycy9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlczphZ2VudC9oZWxwZXJzL01ha2VmaWxlLmRlcGVuZF0pCkFDX0NPTkZJR19GSUxFUyhbYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGU6TWFrZWZpbGUudG9wOmFnZW50L21pYmdyb3VwL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzOmFnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZF0pCkFDX0NPTkZJR19GSUxFUyhbbG9jYWwvTWFrZWZpbGU6TWFrZWZpbGUudG9wOmxvY2FsL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzXSkKQUNfQ09ORklHX0ZJTEVTKFt0ZXN0aW5nL01ha2VmaWxlOk1ha2VmaWxlLnRvcDp0ZXN0aW5nL01ha2VmaWxlLmluXSkKQUNfQ09ORklHX0ZJTEVTKFttYW4vTWFrZWZpbGU6TWFrZWZpbGUudG9wOm1hbi9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlc10pCkFDX0NPTkZJR19GSUxFUyhbbWlicy9NYWtlZmlsZTpNYWtlZmlsZS50b3A6bWlicy9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlc10pCkFDX0NPTkZJR19GSUxFUyhbbmV0LXNubXAtY29uZmlnOm5ldC1zbm1wLWNvbmZpZy5pbl0sCgkJW2NobW9kICt4IG5ldC1zbm1wLWNvbmZpZ10pCkFDX0NPTkZJR19GSUxFUyhbbmV0LXNubXAtY3JlYXRlLXYzLXVzZXI6bmV0LXNubXAtY3JlYXRlLXYzLXVzZXIuaW5dLAoJCVtjaG1vZCAreCBuZXQtc25tcC1jcmVhdGUtdjMtdXNlcl0pCkFDX0NPTkZJR19GSUxFUyhbZGlzdC9nZW5lcmF0aW9uLXNjcmlwdHMvZ2VuLXZhcmlhYmxlczpkaXN0L2dlbmVyYXRpb24tc2NyaXB0cy9nZW4tdmFyaWFibGVzLmluXSkKQUNfQ09ORklHX0ZJTEVTKFtsb2NhbC9zbm1wY29uZl0pCgpBQ19DT05GSUdfQ09NTUFORFMoW2RlZmF1bHRdLCBlY2hvIHRpbWVzdGFtcCA+IHN0YW1wLWgpCgojCiMgcHJvdGVjdCBQQUNLQUdFXyogdmFyaWFibGVzCiMKQUhfVkVSQkFUSU0oW1BBQ0tBR0VfQlVHUkVQT1JUXSxbLyogRGVmaW5lIHRvIHRoZSBhZGRyZXNzIHdoZXJlIGJ1ZyByZXBvcnRzIGZvciB0aGlzIHBhY2thZ2Ugc2hvdWxkIGJlIHNlbnQuICovCiNpZm5kZWYgUEFDS0FHRV9CVUdSRVBPUlQKI3VuZGVmIFBBQ0tBR0VfQlVHUkVQT1JUCiNlbmRpZl0pCkFIX1ZFUkJBVElNKFtQQUNLQUdFX05BTUVdLFsvKiBEZWZpbmUgdG8gdGhlIGZ1bGwgbmFtZSBvZiB0aGlzIHBhY2thZ2UuICovCiNpZm5kZWYgUEFDS0FHRV9OQU1FCiN1bmRlZiBQQUNLQUdFX05BTUUKI2VuZGlmXSkKQUhfVkVSQkFUSU0oW1BBQ0tBR0VfU1RSSU5HXSxbLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgYW5kIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLwojaWZuZGVmIFBBQ0tBR0VfU1RSSU5HCiN1bmRlZiBQQUNLQUdFX1NUUklORwojZW5kaWZdKQpBSF9WRVJCQVRJTShbUEFDS0FHRV9UQVJOQU1FXSxbLyogRGVmaW5lIHRvIHRoZSBvbmUgc3ltYm9sIHNob3J0IG5hbWUgb2YgdGhpcyBwYWNrYWdlLiAqLwojaWZuZGVmIFBBQ0tBR0VfVEFSTkFNRQojdW5kZWYgUEFDS0FHRV9UQVJOQU1FCiNlbmRpZl0pCkFIX1ZFUkJBVElNKFtQQUNLQUdFX1ZFUlNJT05dLFsvKiBEZWZpbmUgdG8gdGhlIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLwojaWZuZGVmIFBBQ0tBR0VfVkVSU0lPTgojdW5kZWYgUEFDS0FHRV9WRVJTSU9OCiNlbmRpZl0pCgpBQ19PVVRQVVQKCkFDX01TR19DQUNIRV9ESVNQTEFZKCkKIyBMb2NhbCBWYXJpYWJsZXM6CiMgbW9kZTogQXV0b2NvbmYKIyBjb21tZW50LXN0YXJ0OiAiIyIKIyBFbmQ6Cg==