LyoKICogQ29weXJpZ2h0IDIwMDggVml0YWxpeSBNYXJnb2xlbgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgojaW5jbHVkZSAicmVzb3VyY2UuaCIKCkxBTkdVQUdFIExBTkdfUlVTU0lBTiwgU1VCTEFOR19ERUZBVUxUCgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CiAgICBJRFNfSFRNTERJU0FCTEVEICAgICLCIO3g8fLu//nl5SDi8OXs/yDu8u7h8ODm5e3o5SBIVE1MIOL76uv+9+Xt7e4uIgogICAgSURTX0hUTUxET0NVTUVOVCAgICAixO7q8+zl7fIgSFRNTCIKICAgIElEU19ET1dOTE9BRElORyAgICAgIsfg4/Dz5+rgLi4uIgogICAgSURTX0lOU1RBTExJTkcgICAgICAi0/Hy4O3u4urgLi4uIgp9CgpJRF9EV0xfRElBTE9HIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFICAwLCAwLCAyNjEsIDg1ClNUWUxFIERTX01PREFMRlJBTUUgfCBEU19DRU5URVIgfCBXU19QT1BVUCB8IFdTX1ZJU0lCTEUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICLT8fLg7e7i6uAgV2luZSBHZWNrbyIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CiAgICBMVEVYVCAi3fLgIO/w7uPw4Ozs4CDv+/Lg5fLx/yDu8u7h8ODn6PL8IEhUTUwg8fLw4O3o9vMuIMTr/yDluCDu8u7h8ODm5e3o/yBXaW5lIO3l7uH17uTo7O4gIiBcCiAgICAgICAgICAi8/Hy4O3u4ujy/CBHZWNrbyAoTW96aWxsYSBIVE1MIGVuZ2luZSkuIM3g5uzo8uUg6u3u7+rzIPPx8uDt7uLo8vwg5fHr6CDi+yD17vLo8uUsIPfy7iDh+yBXaW5lICIgXAogICAgICAgICAgIuDi8u7s4PLo9+Xx6ugg5+Dj8PPn6Osg6CDz8fLg7e7i6OsgR2Vja28uIiwgSURfRFdMX1NUQVRVUywgMTAsIDEwLCAyNDAsIDMzLCBTU19MRUZUCiAgICBDT05UUk9MICLP8O7j8OXx8SIsIElEX0RXTF9QUk9HUkVTUywgUFJPR1JFU1NfQ0xBU1NBLCBXU19CT1JERVJ8UEJTX1NNT09USCwgMTAsIDQ2LCAyNDAsIDEyCiAgICBERUZQVVNIQlVUVE9OICIm0/Hy4O3u4ujy/CIsIElEX0RXTF9JTlNUQUxMLCAyMDAsIDYzLCA1MCwgMTUsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAogICAgUFVTSEJVVFRPTiAiJs7y7OXt4CIsIElEQ0FOQ0VMLCAxNDAsIDYzLCA1MCwgMTUsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAp9CgpJRERfSFlQRVJMSU5LIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDAsIDAsIDI1MCwgNjUKU1RZTEUgRFNfQ0VOVEVSIHwgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAi0fH76+rgIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKICAgIEdST1VQQk9YICLI7fTu8Ozg9uj/IO4g8fH76+rlIiwgLTEsIDUsIDUsIDE5MCwgNTUKICAgIExURVhUICIm0ujvOiIsIC0xLCAxMCwgMjIsIDIwLCAxMAogICAgQ09NQk9CT1ggSURDX1RZUEUsIDM1LCAyMCwgNDUsIDEwMCwgV1NfVEFCU1RPUCB8IFdTX0dST1VQIHwgV1NfVlNDUk9MTCB8IENCU19EUk9QRE9XTkxJU1QgfCBDQlNfSEFTU1RSSU5HUwogICAgTFRFWFQgIibA5PDl8ToiLCAtMSwgMTAsIDQyLCAyMCwgMTAKICAgIEVESVRURVhUIElEQ19VUkwsIDM1LCA0MCwgMTUwLCAxNCwgRVNfQVVUT0hTQ1JPTEwgfCBXU19CT1JERVIgfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKICAgIFBVU0hCVVRUT04gIk9LIiwgSURPSywgMjAwLCAxMCwgNDUsIDE0LCBCU19ERUZQVVNIQlVUVE9OIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCiAgICBQVVNIQlVUVE9OICLO8uzl7eAiLCBJRENBTkNFTCwgMjAwLCAyOCwgNDUsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKfQo=