LyoKICogV2luZUZpbGUKICogSXRhbGlhbiBMYW5ndWFnZSBTdXBwb3J0CiAqCiAqIENvcHlyaWdodCAyMDAwIE1hcnRpbiBGdWNocwogKiBDb3B5cmlnaHQgMjAwMiBTdGV2ZW4gRWR3YXJkcwogKiBDb3B5cmlnaHQgMjAwMiBBbGV4YW5kcmUgSnVsbGlhcmQKICogQ29weXJpZ2h0IDIwMDQgSXZhbiBMZW8gUHVvdGkKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKI2luY2x1ZGUgInJlc291cmNlLmgiCgpMQU5HVUFHRSBMQU5HX0lUQUxJQU4sIFNVQkxBTkdfTkVVVFJBTAoKLyogTWVudSAqLwoKSURNX1dJTkVGSUxFIE1FTlUgRklYRUQgSU1QVVJFCnsKICAgIFBPUFVQICImRmlsZSIgIHsKICAgICAgICBNRU5VSVRFTSAiJkFwcmlcdEludmlvIiwgICAgICAgICAgICAgICAgSURfQUNUSVZBVEUKICAgICAgICBNRU5VSVRFTSAiJlNwb3N0YS4uLlx0RjciLCAgICAgICAgICAgICAgSURfRklMRV9NT1ZFCiAgICAgICAgTUVOVUlURU0gIiZDb3BpYS4uLlx0RjgiLCAgICAgICAgICAgICAgIElEX0ZJTEVfQ09QWQogICAgICAgIE1FTlVJVEVNICImTmVnbGkgQXBwdW50aS4uLlx0RjkiLCAgICAgICAxMTgKICAgICAgICBNRU5VSVRFTSAiJkNhbmNlbGxhXHREZWwiLCAgICAgICAgICAgICAgSURfRklMRV9ERUxFVEUKICAgICAgICBNRU5VSVRFTSAiUmkmbm9taW5hLi4uIiwgICAgICAgICAgICAgICAgMTA5CiAgICAgICAgTUVOVUlURU0gIlByb3ByaSZldOAuLi5cdEFsdCtJbnZpbyIsICAgIElEX0VESVRfUFJPUEVSVElFUwogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJDJm9tcHJpbWkuLi4iLCAgICAgICAgICAgICAgICAxMTkKICAgICAgICBNRU5VSVRFTSAiRGVjJm9tcHJpbWkuLi4iLCAgICAgICAgICAgICAgMTIwCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZFc2VndWkuLi4iLCAgICAgICAgICAgICAgICAgIElEX1JVTgogICAgICAgIE1FTlVJVEVNICImU3RhbXBhLi4uIiwgICAgICAgICAgICAgICAgICAxMDIKICAgICAgICBNRU5VSVRFTSAiQXNzb2NpYS4uLiIsICAgICAgICAgICAgICAgICAgMTAzCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIkNyJmVhIERpcmVjdG9yeS4uLiIsICAgICAgICAgIDExMQogICAgICAgIE1FTlVJVEVNICJDZXJjJmEuLi4iLCAgICAgICAgICAgICAgICAgICAxMDQKICAgICAgICBNRU5VSVRFTSAiJlNlbGV6aW9uYSBpIGZpbGUuLi4iLCAgICAgICAgMTE2CiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiNpZm5kZWYgX05PX0VYVEVOU0lPTlMKICAgICAgICBNRU5VSVRFTSAiRSZzY2lcdEFsdCtYIiwgICAgICAgICAgICAgICAgSURfRklMRV9FWElUCiNlbHNlCiAgICAgICAgTUVOVUlURU0gIkUmc2NpIiwgICAgICAgICAgICAgICAgICAgICAgIElEX0ZJTEVfRVhJVAojZW5kaWYKICAgIH0KCiAgICBQT1BVUCAiJkRpc2NvIiAgewogICAgICAgIE1FTlVJVEVNICImQ29waWEgRGlzY28uLi4iLCAgICAgICAgICAgICAyMDEKICAgICAgICBNRU5VSVRFTSAiJkV0aWNoZXR0YSBEaXNjby4uLiIsICAgICAgICAgMjAyCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZGb3JtYXR0YSBEaXNjby4uLiIsICAgICAgICAgIElEX0ZPUk1BVF9ESVNLCiNpZmRlZiBfV0lOOTUKICAgICAgICBNRU5VSVRFTSAiJkNyZWEgRGlzY28gZGkgU2lzdGVtYS4uLiIsIC0xICAgIC8qVE9ETyovCiNlbmRpZgogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJDb25uZXR0aSAmIERyaXZlIGRpIFJldGUiLCAgICBJRF9DT05ORUNUX05FVFdPUktfRFJJVkUKICAgICAgICBNRU5VSVRFTSAiJkRpc2Nvbm5ldHRpIERyaXZlIGRpIFJldGUiLCAgSURfRElTQ09OTkVDVF9ORVRXT1JLX0RSSVZFCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIkNvbmRpdmlkaSBjb21lLi4uIiwgICAgICAgICAgIDI1NAogICAgICAgIE1FTlVJVEVNICImUmltdW92aSBjb25kaXZpc2lvbmUuLi4iLCAgICAyNTUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJlNlbGV6aW9uYSBEcml2ZS4uLiIsICAgICAgICAgMjUxCiAgICB9CgogICAgUE9QVVAgIiZEaXJlY3RvcnkiICB7CiAgICAgICAgTUVOVUlURU0gIiZMaXZlbGxvIFN1Y2Vzc2l2b1x0KyIsICAgICAgIDMwMQogICAgICAgIE1FTlVJVEVNICJFc3BhbmRpICZBbGJlcm9cdCoiLCAgICAgICAgICAzMDIKICAgICAgICBNRU5VSVRFTSAiRXNwYW5kaSAmdHV0dG9cdFN0cmcrKiIsICAgICAgMzAzCiAgICAgICAgTUVOVUlURU0gIlJpZHVjaSAmQWxiZXJvXHQtIiwgICAgICAgICAgIDMwNAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImU2VsZXppb25hIHVuaXTgIiwgICAgICAgICAgICA1MDUKICAgIH0KCiAgICBQT1BVUCAiJlZpc3VhbGl6emEiICB7CiAgICAgICAgTUVOVUlURU0gIkEmbGJlcm8gZSBEaXJlY3RvcnkiLCAgICAgICAgIDQxMwogICAgICAgIE1FTlVJVEVNICJTbyZsbyBBbGJlcm8iLCAgICAgICAgICAgICAgICA0MTEKICAgICAgICBNRU5VSVRFTSAiJlNvbG8gRGlyZWN0b3J5IiwgICAgICAgICAgICAgNDEyCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIkRpJnZpZGkiLCAgICAgICAgICAgICAgICAgICAgIElEX1ZJRVdfU1BMSVQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJk5vbWUiLCAgICAgICAgICAgICAgICAgICAgICAgSURfVklFV19OQU1FCiAgICAgICAgTUVOVUlURU0gIiZNb3N0cmEgdHV0dGkgaSBkZXR0YWdsaSBzdWkgZmlsZSIsSURfVklFV19BTExfQVRUUklCVVRFUywgQ0hFQ0tFRAogICAgICAgIE1FTlVJVEVNICImTW9zdHJhIGRldHRhZ2xpIHBhcnppYWxpLi4uIixJRF9WSUVXX1NFTEVDVEVEX0FUVFJJQlVURVMKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJk9yZGluYSBwZXIgTm9tZSIsICAgICAgICAgICAgSURfVklFV19TT1JUX05BTUUKICAgICAgICBNRU5VSVRFTSAiJk9yZGluYSBwZXIgVGlwbyIsICAgICAgICAgICAgSURfVklFV19TT1JUX1RZUEUKICAgICAgICBNRU5VSVRFTSAiJk9yZGluYSBwZXIgRGltZW5zaW9uZSIsICAgICAgSURfVklFV19TT1JUX1NJWkUKICAgICAgICBNRU5VSVRFTSAiJk9yZGluYSBwZXIgRGF0YSIsICAgICAgICAgICAgSURfVklFV19TT1JUX0RBVEUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiT3JkaW5hIHBlciAmLi4uIiwgICAgICAgICAgICAgSURfVklFV19GSUxURVIKICAgIH0KCiAgICBQT1BVUCAiJk9wemlvbmkiICB7CiAgICAgICAgTUVOVUlURU0gIiZDb25mZXJtYXppb25lLi4uIiwgICAgICAgICAgIDUwMQogICAgICAgIE1FTlVJVEVNICImRm9udC4uLiIsICAgICAgICAgICAgICAgICAgICBJRF9TRUxFQ1RfRk9OVAogICAgICAgIE1FTlVJVEVNICImUGVyc29uYWxpenphIGJhcnJhIGRlZ2xpIHN0cnVtZW50aS4uLiIsIDUxMgogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImQmFycmEgZGVnbGkgc3RydW1lbnRpIiwgICAgICBJRF9WSUVXX1RPT0xfQkFSLCBDSEVDS0VECiAgICAgICAgTUVOVUlURU0gIiZCYXJyYSBkZWkgRHJpdmUiLCAgICAgICAgICAgIElEX1ZJRVdfRFJJVkVfQkFSLCBDSEVDS0VECiAgICAgICAgTUVOVUlURU0gIiZCYXJyYSBkaSBzdGF0byIsICAgICAgICAgICAgIElEX1ZJRVdfU1RBVFVTQkFSLCBDSEVDS0VECiNpZm5kZWYgX05PX0VYVEVOU0lPTlMKICAgICAgICBNRU5VSVRFTSAiQSYgdHV0dG8gc2NoZXJtb1x0Q3RybCtTaGlmdCtTIixJRF9WSUVXX0ZVTExTQ1JFRU4KI2VuZGlmCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZFc2VndWkgbWluaW1penphdG8iLCAgICAgICAgIDUwNAogICAgICAgIE1FTlVJVEVNICImU2FsdmEgaW1wb3N0YXppb25pIGFsbCd1c2NpdGEiLDUxMQogICAgfQoKCiAgICBQT1BVUCAiJlNpY3VyZXp6YSIgIHsKICAgICAgICBNRU5VSVRFTSAiJkFjY2Vzc2kuLi4iLCAgICAgICAgICAgICAgICAgNjA1CiAgICAgICAgTUVOVUlURU0gIiZMb2dnaW5nLi4uIiwgICAgICAgICAgICAgICAgIDYwNgogICAgICAgIE1FTlVJVEVNICImUHJvcHJpZXRhcmlvLi4uIiwgICAgICAgICAgICA2MDcKICAgIH0KCiAgICBQT1BVUCAiJkZpbmVzdHJhIiAgewogICAgICAgIE1FTlVJVEVNICJOdW92YSAmRmluZXN0cmEiLCAgICAgICAgICAgICBJRF9XSU5ET1dfTkVXCiAgICAgICAgTUVOVUlURU0gIkZpbmVzdHJlIGEgY2FzY2F0YVx0Q3RybCtGNSIsIElEX1dJTkRPV19DQVNDQURFCiAgICAgICAgTUVOVUlURU0gIk9yZGluYSAmT3Jpem9udGFsbWVudGUiLCAgICAgIElEX1dJTkRPV19USUxFX0hPUloKICAgICAgICBNRU5VSVRFTSAiT3JkaW5hICZWZXJ0aWNsbWVudGVcdEN0cmwrRjQiLElEX1dJTkRPV19USUxFX1ZFUlQKI2lmbmRlZiBfTk9fRVhURU5TSU9OUwogICAgICAgIE1FTlVJVEVNICJEaXNwb25pIGF1dG9tYXRpY2FtZW50ZSIsICAgICBJRF9XSU5ET1dfQVVUT1NPUlQKI2VuZGlmCiAgICAgICAgTUVOVUlURU0gIkRpc3BvbmkgJlNpbWJvbGkiLCAgICAgICAgICAgIElEX1dJTkRPV19BUlJBTkdFCiAgICAgICAgTUVOVUlURU0gIiZBZ2dpb3JuYVx0RjUiLCAgICAgICAgICAgICAgIElEX1JFRlJFU0gKICAgIH0KCiAgICBQT1BVUCAiJkd1aWRhIiAgewogICAgICAgIE1FTlVJVEVNICImU29tbWFyaW8gZGVsbGEgR3VpZGFcdEYxIiwgICBJRF9IRUxQCiAgICAgICAgTUVOVUlURU0gIiZDZXJjYSBuZWxsYSBHdWlkYS4uLlx0RjEiLCAgIElEX0hFTFAKICAgICAgICBNRU5VSVRFTSAiJlVzbyBkZWxsIEd1aWRhXHRGMSIsICAgICAgICAgSURfSEVMUF9VU0lORwogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImSW5mb3JtYXppb25pIHN1IFdpbmVmaWxlLi4uIixJRF9BQk9VVAogICAgfQp9CgpJRERfU0VMRUNUX0RFU1RJTkFUSU9OIERJQUxPRyBGSVhFRCBJTVBVUkUgMTUsIDEzLCAyMTAsIDYzClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIlNlbGV6aW9uYSBkZXN0aW5hemlvbmUiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewogICAgQ09OVFJPTCAgICAgICAgICIiLCAxMDEsICJTdGF0aWMiLCBTU19TSU1QTEV8U1NfTk9QUkVGSVgsIDMsIDYsIDE2MiwgMTAKICAgIENPTlRST0wgICAgICAgICAiJlBlcmNvcnNvOiIsIC0xLCAiU3RhdGljIiwgU1NfTEVGVE5PV09SRFdSQVB8V1NfR1JPVVAsIDMsIDE4LCA2MCwgMTAKICAgIEVESVRURVhUICAgICAgICAyMDEsIDMsIDI5LCAxMzQsIDEyLCBFU19BVVRPSFNDUk9MTAogICAgREVGUFVTSEJVVFRPTiAgICJPSyIsIDEsIDE1OCwgNiwgNDcsIDE0CiAgICBQVVNIQlVUVE9OICAgICAgIkFubnVsbGEiLCAyLCAxNTgsIDIzLCA0NywgMTQKICAgIFBVU0hCVVRUT04gICAgICAiJk5hdmlnYSIsIDI1NCwgMTU4LCA0MywgNDcsIDE0Cn0KClNUUklOR1RBQkxFCnsKICAgIElEU19GT05UX1NFTF9ETEdfTkFNRSAgICJBcHBsaWNhIGxlIGltcG9zdGF6aW9uaSBkZWkgY2FyYXR0ZXJpIgogICAgSURTX0ZPTlRfU0VMX0VSUk9SICAgICAgIlNpIOggdmVyaWZpY2F0byB1biBlcnJvcmUgZHVyYW50ZSBsYSBzZWxlemlvbmUgZGVsIG51b3ZvIGNhcmF0dGVyZS4iCn0K