LyoKICogQ29weXJpZ2h0IDIwMDQgSWx5YSBLb3JuaXlrbwogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgojaW5jbHVkZSAicmVzb3VyY2VzLmgiCgpMQU5HVUFHRSBMQU5HX1VLUkFJTklBTiwgU1VCTEFOR19ERUZBVUxUCgpTWVNNRU5VIE1FTlUgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRQp7CiBNRU5VSVRFTSAiz+4m4uXw7fPy6CIsIDYxNzI4CiBNRU5VSVRFTSAiJs/l8OXx8+3z8ugiLCA2MTQ1NgogTUVOVUlURU0gItDu5ybss/AiLCA2MTQ0MAogTUVOVUlURU0gIibH4+7w7fPy6CIsIDYxNDcyCiBNRU5VSVRFTSAiJtDu5+Pu8O3z8ugiLCA2MTQ4OAogTUVOVUlURU0gU0VQQVJBVE9SCiBNRU5VSVRFTSAiJsfg6vDo8uhcdEFsdC1GNCIsIDYxNTM2CiBNRU5VSVRFTSBTRVBBUkFUT1IKIE1FTlVJVEVNICLP8CbuIO/w7uXq8iBXaW5lLi4uIiwgNjE3NjEKfQoKRURJVE1FTlUgTUVOVSBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFCnsKCVBPUFVQICIiCglCRUdJTgoJCU1FTlVJVEVNICLC5Sbw7fPy6CIsIEVNX1VORE8KCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiJsLo8LPn4PLoIiwgV01fQ1VUCgkJTUVOVUlURU0gIibK7u+z/uLg8ugiLCBXTV9DT1BZCgkJTUVOVUlURU0gIsLx8ibg4ujy6CIsIFdNX1BBU1RFCgkJTUVOVUlURU0gIibO9+jx8ujy6CIsIFdNX0NMRUFSCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIsLo5LPr6PLoIOIm8eUiLCBFTV9TRVRTRUwKCUVORAp9CgpNU0dCT1ggRElBTE9HIDEwMCwgODAsIDIxNiwgMTY4ClNUWUxFIERTX01PREFMRlJBTUUgfCBEU19OT0lETEVNU0cgfCBXU19QT1BVUCB8IFdTX1ZJU0lCTEUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpCRUdJTgogICAgICAgIElDT04gIiIsIDEwODgsIDgsIDIwLCAxNiwgMTYsIFdTX0NISUxEIHwgV1NfVklTSUJMRQogICAgICAgIExURVhUICIiLCAxMDAsIDMyLCA0LCAxNzYsIDQ4LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19HUk9VUCB8IFNTX05PUFJFRklYCiAgICAgICAgUFVTSEJVVFRPTiAiJk9LIiwgMSwgMTYsIDU2LCA0MCwgMTQsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX1RBQlNUT1AKICAgICAgICBQVVNIQlVUVE9OICLCJrPk7LPt4CIsIDIsIDY0LCA1NiwgNDAsIDE0LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QCiAgICAgICAgUFVTSEJVVFRPTiAiJsKz5Oyz7ejy6CIsIDMsIDExMiwgNTYsIDQwLCAxNCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUAogICAgICAgIFBVU0hCVVRUT04gIs/uJuLy7vAiLCA0LCAxNjAsIDU2LCA0MCwgMTQsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX1RBQlNUT1AKICAgICAgICBQVVNIQlVUVE9OICImz/Du7/Px8ujy6CIsIDUsIDIwOCwgNTYsIDQwLCAxNCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUAogICAgICAgIFBVU0hCVVRUT04gIibS4OoiLCA2LCAyNTYsIDU2LCA0MCwgMTQsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX1RBQlNUT1AKICAgICAgICBQVVNIQlVUVE9OICImzbMiLCA3LCAzMDQsIDU2LCA0MCwgMTQsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX1RBQlNUT1AKICAgICAgICBQVVNIQlVUVE9OICImVHJ5IEFnYWluIiwgMTAsIDM1MiwgNTYsIDQwLCAxNCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUAogICAgICAgIFBVU0hCVVRUT04gIiZDb250aW51ZSIsIDExLCA0MDAsIDU2LCA0MCwgMTQsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX1RBQlNUT1AKICAgICAgICBQVVNIQlVUVE9OICJIZWxwIiwgOSwgNDQ4LCA1NiwgNDAsIDE0LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QCkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKewogICAgSURTX0VSUk9SICLPzszIy8rAIgogICAgSURTX01ESV9NT1JFV0lORE9XUyAiJtnlIOKz6u3gLi4uIgp9Cg==