LyoKICogV2luZUZpbGUgKFJ1c3NpYW4gcmVzb3VyY2VzKQogKgogKiBDb3B5cmlnaHQgMjAwMyBJZ29yIFN0ZXBpbgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICovCgpMQU5HVUFHRSBMQU5HX1JVU1NJQU4sIFNVQkxBTkdfREVGQVVMVAoKLyogTWVudSAqLwoKSURNX1dJTkVGSUxFIE1FTlUgRklYRUQgSU1QVVJFCnsKICAgIFBPUFVQICIm1ODp6yIgIHsKICAgICAgICBNRU5VSVRFTSAiJs7y6vD78vxcdEVudGVyIiwgICAgICAgICAgICAgSURfQUNUSVZBVEUKICAgICAgICBNRU5VSVRFTSAiJs/l8OXs5fHy6PL8Li4uXHRGNyIsICAgICAgICAgSURfRklMRV9NT1ZFCiAgICAgICAgTUVOVUlURU0gIibK7u/o8O7i4PL8Li4uXHRGOCIsICAgICAgICAgIElEX0ZJTEVfQ09QWQogICAgICAgIE1FTlVJVEVNICImwiDh8/Tl8CDu4ezl7eAuLi5cdEY5IiwgICAgICAxMTgKICAgICAgICBNRU5VSVRFTSAiJtPk4Ovo8vxcdERlbCIsICAgICAgICAgICAgICAgSURfRklMRV9ERUxFVEUKICAgICAgICBNRU5VSVRFTSAiz+Xw5ejs5e3u4uDy/C4uLiIsICAgICAgICAgICAgMTA5CiAgICAgICAgTUVOVUlURU0gItHi7unx8uLgLi4uXHRBbHQrRW50ZXIiLCAgICAgIElEX0VESVRfUFJPUEVSVElFUwogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICLA8PXo4ujw7uLg8vwuLi4iLCAgICAgICAgICAgICAxMTkKICAgICAgICBNRU5VSVRFTSAi0ODx7+Dq7uLg8vwuLi4iLCAgICAgICAgICAgICAgMTIwCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIibH4O/z8fLo8vwuLi4iLCAgICAgICAgICAgICAgIElEX0VYRUNVVEUKICAgICAgICBNRU5VSVRFTSAiJs/l9+Dy4PL8Li4uIiwgICAgICAgICAgICAgICAgMTAyCiAgICAgICAgTUVOVUlURU0gIsDx8e726Ojw7uLg8vwuLi4iLCAgICAgICAgICAgIDEwMwogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICLR7ufk4PL8IOTo8OXq8u7w6P4uLi4iLCAgICAgICAxMTEKICAgICAgICBNRU5VSVRFTSAiz+7o8eouLi4iLCAgICAgICAgICAgICAgICAgICAgMTA0CiAgICAgICAgTUVOVUlURU0gIibC++Tl6+jy/CD04Onr+y4uLiIsICAgICAgICAgIDExNgogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgojaWZuZGVmIF9OT19FWFRFTlNJT05TCiAgICAgICAgTUVOVUlURU0gIsL79e7kXHRBbHQrWCIsICAgICAgICAgICAgICAgIElEX0ZJTEVfRVhJVAojZWxzZQogICAgICAgIE1FTlVJVEVNICLC+/Xu5CIsICAgICAgICAgICAgICAgICAgICAgICBJRF9GSUxFX0VYSVQKI2VuZGlmCiAgICB9CgogICAgUE9QVVAgIibE6PHqIiAgewogICAgICAgIE1FTlVJVEVNICImyu7v6PDu4uDy/CDk6PHqLi4uIiwgICAgICAgICAyMDEKICAgICAgICBNRU5VSVRFTSAiJszl8urgIPLu7OAuLi4iLCAgICAgICAgICAgICAgMjAyCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIibU7vDs4PLo8O7i4PL8Li4uIiwgICAgICAgICAgIElEX0ZPUk1BVF9ESVNLCiNpZmRlZiBfV0lOOTUKICAgICAgICBNRU5VSVRFTSAiJtHu5+Tg8vwg8ejx8uXs7fvpIOTo8eouLi4iLCAtMSAgIC8qVE9ETyovCiNlbmRpZgogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICLP7uTq6/4m9+jy/CDx5fLl4u7pIOTo8eoiLCAgICBJRF9DT05ORUNUX05FVFdPUktfRFJJVkUKICAgICAgICBNRU5VSVRFTSAizvLqJuv+9+jy/CDx5fLl4u7pIOTo8eoiLCAgICAgSURfRElTQ09OTkVDVF9ORVRXT1JLX0RSSVZFCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gItHk5evg8vwg7ibh+ejsIOrg6i4uLiIsICAgICAgIDI1NAogICAgICAgIE1FTlVJVEVNICImx+Dq8Pvy/CDu4fno6SDk7vHy8+8uLi4iLCAgICAyNTUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJsL74fDg8vwg5Ojx6i4uLiIsICAgICAgICAgICAgMjUxCiAgICB9CgogICAgUE9QVVAgIibP4O/q6CIgIHsKICAgICAgICBNRU5VSVRFTSAi0Sbr5eTz/vno6SDz8O7i5e38XHQrIiwgICAgICAgMzAxCiAgICAgICAgTUVOVUlURU0gIibQ4Ofi5fDt8/L8IOTl8OXi7lx0KiIsICAgICAgIDMwMgogICAgICAgIE1FTlVJVEVNICLQ4Ofi5fDt8/L8IOIm8eVcdFN0cmcrKiIsICAgICAzMDMKICAgICAgICBNRU5VSVRFTSAiJtHi5fDt8/L8IOTl8OXi7lx0LSIsICAgICAgICAgMzA0CiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIibO8uzl8ujy/CDi5fLi6CIsICAgICAgICAgICAgIDUwNQogICAgfQoKICAgIFBPUFVQICImwujkIiAgewogICAgICAgIE1FTlVJVEVNICLE5fDl4u4gJugg7+Dv6uAiLCAgICAgICAgICAgICA0MTMKICAgICAgICBNRU5VSVRFTSAi0u7r/OruICbk5fDl4u4iLCAgICAgICAgICAgICAgNDExCiAgICAgICAgTUVOVUlURU0gItLu6/zq7iAm7+Dv6uAiLCAgICAgICAgICAgICAgIDQxMgogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICLQ4Ocm4ejy/CIsICAgICAgICAgICAgICAgICAgICBJRF9WSUVXX1NQTElUCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIsgm7P8iLCAgICAgICAgICAgICAgICAgICAgICAgIElEX1ZJRVdfTkFNRQogICAgICAgIE1FTlVJVEVNICLCJvHlIO/u5PDu4e3u8fLoIO4g9ODp6+UiLCAgICBJRF9WSUVXX0FMTF9BVFRSSUJVVEVTLCBDSEVDS0VECiAgICAgICAgTUVOVUlURU0gIibC++Hu8O737e4g7iD04Onr5S4uLiIsICAgICAgIElEX1ZJRVdfU0VMRUNURURfQVRUUklCVVRFUwogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICIm0e7w8ujw7uLg8vwg7+4g6Ozl7egiLCAgICAgICBJRF9WSUVXX1NPUlRfTkFNRQogICAgICAgIE1FTlVJVEVNICLR7vDy6PDu4uDy/CDv7iAm8ujv8yIsICAgICAgICBJRF9WSUVXX1NPUlRfVFlQRQogICAgICAgIE1FTlVJVEVNICLR7vDy6PDu4uDy/CDv7iAm8ODn7OXw8yIsICAgICBJRF9WSUVXX1NPUlRfU0laRQogICAgICAgIE1FTlVJVEVNICLR7vDy6PDu4uDy/CDv7iDkJuDy5SIsICAgICAgICBJRF9WSUVXX1NPUlRfREFURQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICLR7vDy6PDu4uDy/CDv7iAmLi4uIiwgICAgICAgICBJRF9WSUVXX0ZJTFRFUgogICAgfQoKICAgIFBPUFVQICImzeDx8vDu6eroIiAgewogICAgICAgIE1FTlVJVEVNICLP7uQm8uLl8Obk5e3o/y4uLiIsICAgICAgICAgICA1MDEKICAgICAgICBNRU5VSVRFTSAiJtjw6PTyLi4uIiwgICAgICAgICAgICAgICAgICAgSURfU0VMRUNUX0ZPTlQKICAgICAgICBNRU5VSVRFTSAiJs3g8fLw7ujy/CDv4O3l6/wg6O3x8vDz7OXt8u7iLi4uIiwgNTEyCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIibP4O3l6/wg6O3x8vDz7OXt8u7iIiwgICAgICAgIElEX1ZJRVdfVE9PTF9CQVIsIENIRUNLRUQKICAgICAgICBNRU5VSVRFTSAiz+Dt5ev8ICbk6PHq7uIiLCAgICAgICAgICAgICAgSURfVklFV19EUklWRV9CQVIsIENIRUNLRUQKICAgICAgICBNRU5VSVRFTSAiJtHy8O7q4CDx7vHy7v/t6P8iLCAgICAgICAgICAgSURfVklFV19TVEFUVVNCQVIsIENIRUNLRUQKI2lmbmRlZiBfTk9fRVhURU5TSU9OUwogICAgICAgIE1FTlVJVEVNICLPJu7r7fvpIP3q8ODtXHRDdHJsK1NoaWZ0K1MiLCBJRF9WSUVXX0ZVTExTQ1JFRU4KI2VuZGlmCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIibH7eD37uog4iDx7+jx7uog7/Du4/Dg7OwiLCAgIDUwNAogICAgICAgIE1FTlVJVEVNICLR7ib18ODt//L8IO3g8fLw7unq6CDv8Ogg4vv17uTlIiw1MTEKICAgIH0KCgogICAgUE9QVVAgIibB5efu7+Dx7e7x8vwiICB7CiAgICAgICAgTUVOVUlURU0gIibE7vHy8+8uLi4iLCAgICAgICAgICAgICAgICAgIDYwNQogICAgICAgIE1FTlVJVEVNICImz/Du8u7q7uv7Li4uIiwgICAgICAgICAgICAgICA2MDYKICAgICAgICBNRU5VSVRFTSAiJsLr4OTl6+X2Li4uIiwgICAgICAgICAgICAgICAgNjA3CiAgICB9CgogICAgUE9QVVAgIibO6u3uIiAgewogICAgICAgIE1FTlVJVEVNICLN7uLu5SAm7urt7iIsICAgICAgICAgICAgICAgICBJRF9XSU5ET1dfTkVXCiAgICAgICAgTUVOVUlURU0gIs7q7eAgJurg8erg5O7sXHRDdHJsK0Y1IiwgICAgIElEX1dJTkRPV19DQVNDQURFCiAgICAgICAgTUVOVUlURU0gIs7q7eAg8Sbi5fD18yDi7ejnIiwgICAgICAgICAgIElEX1dJTkRPV19USUxFX0hPUloKICAgICAgICBNRU5VSVRFTSAizurt4CDxJuvl4uAg7eDv8ODi7lx0Q3RybCtGNCIsSURfV0lORE9XX1RJTEVfVkVSVAojaWZuZGVmIF9OT19FWFRFTlNJT05TCiAgICAgICAgTUVOVUlURU0gItDg8e/u6+7m6PL8ICbg4vLu7ODy6Pfl8eroIiwgIElEX1dJTkRPV19BVVRPU09SVAojZW5kaWYKICAgICAgICBNRU5VSVRFTSAiJtDg8e/u6+7m6PL8IiwgICAgICAgICAgICAgICAgSURfV0lORE9XX0FSUkFOR0UKICAgICAgICBNRU5VSVRFTSAizibh7e7i6PL8XHRGNSIsICAgICAgICAgICAgICAgSURfUkVGUkVTSAogICAgfQoKICAgIFBPUFVQICIm0e/w4OLq4CIgIHsKICAgICAgICBNRU5VSVRFTSAiJtHu5OXw5uDt6OVcdEYxIiwgICAgICAgICAgICAgSURfSEVMUAogICAgICAgIE1FTlVJVEVNICImz+7o8eouLi5cdEYxIiwgICAgICAgICAgICAgICBJRF9IRUxQCiAgICAgICAgTUVOVUlURU0gIibI8e/u6/zn7uLg7ejlIPHv8ODi6uhcdEYxIiwgIElEX0hFTFBfVVNJTkcKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJs4gV2luZWZpbGUuLi4iLCAgICAgICAgICAgICAgSURfQUJPVVQKI2lmZGVmIF9fV0lORV9fCiAgICAgICAgTUVOVUlURU0gIs4gJldpbmUuLi4iLCAgICAgICAgICAgICAgICAgIElEX0FCT1VUX1dJTkUKI2VuZGlmCiAgICB9Cn0KCgpJRERfRVhFQ1VURSBESUFMT0cgRklYRUQgSU1QVVJFIDE1LCAxMywgMjEwLCA2MwpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICLC++/u6+3o8vwiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewogICAgQ09OVFJPTCAgICAgICAgICIiLCAxMDEsICJTdGF0aWMiLCBTU19TSU1QTEV8U1NfTk9QUkVGSVgsIDMsIDYsIDE2MiwgMTAKICAgIENPTlRST0wgICAgICAgICAiJsru7ODt5OA6IiwgLTEsICJTdGF0aWMiLCBTU19MRUZUTk9XT1JEV1JBUHxXU19HUk9VUCwgMywgMTgsIDYwLCAxMAogICAgRURJVFRFWFQgICAgICAgIDIwMSwgMywgMjksIDEzNCwgMTIsIEVTX0FVVE9IU0NST0xMCiAgICBDT05UUk9MICAgICAgICAgIsrg6iAm8ejs4u7rIiwgMjE0LCAiQnV0dG9uIiwgQlNfQVVUT0NIRUNLQk9YfFdTX1RBQlNUT1AsMywgNDUsIDcxLCAxMgogICAgREVGUFVTSEJVVFRPTiAgICJPSyIsIDEsIDE1OCwgNiwgNDcsIDE0CiAgICBQVVNIQlVUVE9OICAgICAgIs7y7OXt4CIsIDIsIDE1OCwgMjMsIDQ3LCAxNAogICAgUFVTSEJVVFRPTiAgICAgICIm0e/w4OLq4CIsIDI1NCwgMTU4LCA0MywgNDcsIDE0Cn0K