LyoKICogQ29weXJpZ2h0IDIwMDYgRmF0aWggQf79Y/0KICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKI2luY2x1ZGUgInJlc291cmNlcy5oIgoKTEFOR1VBR0UgTEFOR19UVVJLSVNILCBTVUJMQU5HX0RFRkFVTFQKClNZU01FTlUgTUVOVQp7CiBNRU5VSVRFTSAiJkdlcmkgWfxrbGUiLCA2MTcyOAogTUVOVUlURU0gIiZUYf79IiwgNjE0NTYKIE1FTlVJVEVNICImQm95dXRsYW5k/XIiLCA2MTQ0MAogTUVOVUlURU0gIkv8Juf8bHQiLCA2MTQ3MgogTUVOVUlURU0gIkL8Jnn8dCIsIDYxNDg4CiBNRU5VSVRFTSBTRVBBUkFUT1IKIE1FTlVJVEVNICImS2FwYXRcdEFsdC1GNCIsIDYxNTM2CiBNRU5VSVRFTSBTRVBBUkFUT1IKIE1FTlVJVEVNICImV2luZSBIYWtr/W5kYS4uLiIsIDYxNzYxCn0KCkVESVRNRU5VIE1FTlUKewoJUE9QVVAgIiIKCUJFR0lOCgkJTUVOVUlURU0gIiZHZXJpIEFsIiwgRU1fVU5ETwoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICImS2VzIiwgV01fQ1VUCgkJTUVOVUlURU0gIktvcHkmYWxhIiwgV01fQ09QWQoJCU1FTlVJVEVNICJZYSZw/f50/XIiLCBXTV9QQVNURQoJCU1FTlVJVEVNICImU2lsIiwgV01fQ0xFQVIKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiJlT8bfxu/CBTZeciLCBFTV9TRVRTRUwKCUVORAp9CgpNU0dCT1ggRElBTE9HIDEwMCwgODAsIDIxNiwgMTY4ClNUWUxFIERTX01PREFMRlJBTUUgfCBEU19OT0lETEVNU0cgfCBXU19QT1BVUCB8IFdTX1ZJU0lCTEUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpCRUdJTgogICAgICAgIElDT04gIiIsIDEwODgsIDgsIDIwLCAxNiwgMTYsIFdTX0NISUxEIHwgV1NfVklTSUJMRQogICAgICAgIExURVhUICIiLCAxMDAsIDMyLCA0LCAxNzYsIDQ4LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19HUk9VUCB8IFNTX05PUFJFRklYCiAgICAgICAgUFVTSEJVVFRPTiAiJlRhbWFtIiwgMSwgMTYsIDU2LCA0MCwgMTQsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX1RBQlNUT1AKICAgICAgICBQVVNIQlVUVE9OICIm3XB0YWwiLCAyLCA2NCwgNTYsIDQwLCAxNCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUAogICAgICAgIFBVU0hCVVRUT04gIiZWYXpnZeciLCAzLCAxMTIsIDU2LCA0MCwgMTQsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX1RBQlNUT1AKICAgICAgICBQVVNIQlVUVE9OICImWWVuaWRlbiBEZW5lIiwgNCwgMTYwLCA1NiwgNDAsIDE0LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QCiAgICAgICAgUFVTSEJVVFRPTiAiWSZva3NheSIsIDUsIDIwOCwgNTYsIDQwLCAxNCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUAogICAgICAgIFBVU0hCVVRUT04gIiZFdmV0IiwgNiwgMjU2LCA1NiwgNDAsIDE0LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QCiAgICAgICAgUFVTSEJVVFRPTiAiJkhhef1yIiwgNywgMzA0LCA1NiwgNDAsIDE0LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QCiAgICAgICAgUFVTSEJVVFRPTiAiJlRyeSBBZ2FpbiIsIDEwLCAzNTIsIDU2LCA0MCwgMTQsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX1RBQlNUT1AKICAgICAgICBQVVNIQlVUVE9OICImQ29udGludWUiLCAxMSwgNDAwLCA1NiwgNDAsIDE0LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QCiAgICAgICAgUFVTSEJVVFRPTiAiSGVscCIsIDksIDQ0OCwgNTYsIDQwLCAxNCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUApFTkQKCk1ESV9NT1JFV0lORE9XUyBESUFMT0cgMjAsIDIwLCAyMzIsIDEyMgpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJQZW5jZXJlIFNl5yIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpCRUdJTgogICAgTElTVEJPWCAgICAgICAgIE1ESV9JRENfTElTVEJPWCwgNSwgNywgMjIyLCA5MCwgV1NfVlNDUk9MTCB8IFdTX0hTQ1JPTEwgLyogZGVmaW5lZCBpbiBtZGkuaCAqLwogICAgREVGUFVTSEJVVFRPTiAgICJUYW1hbSIsIElET0ssIDc1LCAxMDAsIDM1LCAxNAogICAgUFVTSEJVVFRPTiAgICAgICLdcHRhbCIsIElEQ0FOQ0VMLCAxMjAsIDEwMCwgMzUsIDE0CkVORAoKClNUUklOR1RBQkxFCnsKICAgIElEU19FUlJPUiAiSGF0YSIKICAgIElEU19NRElfTU9SRVdJTkRPV1MgIiZEYWhhIEZhemxhIFBlbmNlcmUuLi4iCn0K