LyogCiAqIFByb2dyYW0gTWFuYWdlcgogKgogKiBDb3B5cmlnaHQgMjAwMCBWYXNpbHkgVm9sY2hlbmtvCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogKi8KLyogVGhlcmUgaXMgYSBkaWZmaWN1bHR5IHRvIHVzZSBjb3JyZWN0IGNvZGVwYWdlIGZvciBtZXNzYWdlcywgbWVudXMgZXRjLi4uIFNvIEkgaGF2ZSBhZGRlZCB0aGUgZm9sbG93aW5nIGxpbmUuIApNYXkgYmUsIHN1Y2ggbGluZSBzaG91bGQgYmUgcHJlc2VudCBpbiBFVkVSWSA/Py5yYyBmaWxlLCBidXQuLi4gSSBjYW4ndCB0ZXN0IGFueSBsYW5ndWFnZSBleGNlcHQgUnVzc2lhbiBhbmQgRW5nbGlzaCA6LSkgClNvLCBldmVyeW9uZSwgdGVzdCB5b3VyIG5hdGl2ZSBsYW5ndWFnZXMhISEKKi8KTEFOR1VBR0UgTEFOR19SVVNTSUFOLCBTVUJMQU5HX0RFRkFVTFQKI2RlZmluZSBMQU5HVUFHRV9JRCAgICAgICAgICAgICAgICAgIFJ1CiNkZWZpbmUgTEFOR1VBR0VfTlVNQkVSICAgICAgICAgICAgICA4CiNkZWZpbmUgTEFOR1VBR0VfTUVOVV9JVEVNICAgICAgICAgICAiJtDz8fHq6OkiCgovKiBNZW51ICovCgojZGVmaW5lIE1FTlVfRklMRSAgICAgICAgICAgICAgICAgICAgIibU4OnrIgojZGVmaW5lIE1FTlVfRklMRV9ORVcgICAgICAgICAgICAgICAgIibR7ufk4PL8Li4uIgojZGVmaW5lIE1FTlVfRklMRV9PUEVOICAgICAgICAgICAgICAgIs4m8urw+/L8XHRFbnRlciIKI2RlZmluZSBNRU5VX0ZJTEVfTU9WRSAgICAgICAgICAgICAgICImz+Xw5ezl8fLo8vwuLi5cdEY3IgojZGVmaW5lIE1FTlVfRklMRV9DT1BZICAgICAgICAgICAgICAgIibK7u/o8O7i4PL8Li4uXHRGOCIKI2RlZmluZSBNRU5VX0ZJTEVfREVMRVRFICAgICAgICAgICAgICIm0+Tg6+jy/Fx0RW50ZiIKI2RlZmluZSBNRU5VX0ZJTEVfQVRUUklCVVRFUyAgICAgICAgICImwPLw6OHz8vsuLi5cdEFsdCtFbnRlciIKI2RlZmluZSBNRU5VX0ZJTEVfRVhFQ1VURSAgICAgICAgICAgICImx+Dv8/Hy6PL8Li4uIgojZGVmaW5lIE1FTlVfRklMRV9FWElUICAgICAgICAgICAgICAgIsL7JvXu5CDo5yBXaW5kb3dzLi4uIgoKI2RlZmluZSBNRU5VX09QVElPTlMgICAgICAgICAgICAgICAgICImz+Dw4Ozl8vD7IgojZGVmaW5lIE1FTlVfT1BUSU9OU19BVVRPX0FSUkFOR0UgICAgIibA4vLu8+/u8P/k7vfl7ejlIgojZGVmaW5lIE1FTlVfT1BUSU9OU19NSU5fT05fUlVOICAgICAgIibR4uXw7fPy/CDv8Ogg5+Dv8/Hq5SIKI2RlZmluZSBNRU5VX09QVElPTlNfU0FWRV9TRVRUSU5HUyAgICIm0e718ODt//L8IO3g8fLw7unq6CDv8Ogg4vv17uTlIgoKI2RlZmluZSBNRU5VX1dJTkRPV1MgICAgICAgICAgICAgICAgICImzurt4CIKI2RlZmluZSBNRU5VX1dJTkRPV1NfT1ZFUkxBUCAgICAgICAgICImyuDx6uDkXHRTaGlmdCtGNSIKI2RlZmluZSBNRU5VX1dJTkRPV1NfU0lERV9CWV9TSURFICAgICImzO7n4Ojq4Fx0U2hpZnQrRjQiCiNkZWZpbmUgTUVOVV9XSU5ET1dTX0FSUkFOR0UgICAgICAgICAiJtPv7vD/5O736PL8IO/w6CDi+/Xu5OUiCgojZGVmaW5lIE1FTlVfTEFOR1VBR0UgICAgICAgICAgICAgICAgIibf5/vqIgoKI2RlZmluZSBNRU5VX0hFTFAgICAgICAgICAgICAgICAgICAgICIm0e/w4OLq4CIKI2RlZmluZSBNRU5VX0hFTFBfQ09OVEVOVFMgICAgICAgICAgICIm0e7k5fDm4O3o5SIKI2RlZmluZSBNRU5VX0hFTFBfU0VBUkNIICAgICAgICAgICAgICImz+7o8eouLi4iCiNkZWZpbmUgTUVOVV9IRUxQX0hFTFBfT05fSEVMUCAgICAgICAiJsPo7+Xw8e/w4OLq4CIKI2RlZmluZSBNRU5VX0hFTFBfVFVUT1JJQUwgICAgICAgICAgICIm0/fl4e3o6iIKCiNkZWZpbmUgTUVOVV9JTkZPICAgICAgICAgICAgICAgICAgICAiJtHi5eTl7ej/Li4uIgojZGVmaW5lIE1FTlVfSU5GT19MSUNFTlNFICAgICAgICAgICAgIibL6Pbl7efo/yIKI2RlZmluZSBNRU5VX0lORk9fTk9fV0FSUkFOVFkgICAgICAgICImzejq4Oru6SDDwNDAzdLIyCIKI2RlZmluZSBNRU5VX0lORk9fQUJPVVRfV0lORSAgICAgICAgICImziBXSU5FIgoKLyogRGlhbG9ncyAqLwoKI2RlZmluZSBESUFMT0dfT0sgICAgICAgICAgICAgICAgICAgICJPSyIKI2RlZmluZSBESUFMT0dfQ0FOQ0VMICAgICAgICAgICAgICAgICLO8uzl7eAiCiNkZWZpbmUgRElBTE9HX0JST1dTRSAgICAgICAgICAgICAgICAiJs7h5+7wIgojZGVmaW5lIERJQUxPR19IRUxQICAgICAgICAgICAgICAgICAgIibR7/Dg4urgIgoKI2RlZmluZSBESUFMT0dfTkVXX0NBUFRJT04gICAgICAgICAgICLR7ufk4PL8IO/w7uPw4Ozs7fvpIO7h+uXq8iIKI2RlZmluZSBESUFMT0dfTkVXX05FVyAgICAgICAgICAgICAgICLR7ufk4PL8IgojZGVmaW5lIERJQUxPR19ORVdfR1JPVVAgICAgICAgICAgICAgIibD8PPv7/Mg7/Du4/Dg7OwiCiNkZWZpbmUgRElBTE9HX05FV19QUk9HUkFNICAgICAgICAgICAiJs/w7uPw4Ozs7fvpIP3r5ezl7fIiCgojZGVmaW5lIERJQUxPR19NT1ZFX0NBUFRJT04gICAgICAgICAgIs/l8OXs5fHy6PL8IO/w7uPw4Ozs8yIKI2RlZmluZSBESUFMT0dfTU9WRV9QUk9HUkFNICAgICAgICAgICLP5fDl7OXx8ujy/CDv8O7j8ODs7PM6IgojZGVmaW5lIERJQUxPR19NT1ZFX0ZST01fR1JPVVAgICAgICAgIsjnIOPw8+/v+zoiCiNkZWZpbmUgRElBTE9HX01PVkVfVE9fR1JPVVAgICAgICAgICAiJsIg4/Dz7+/zOiIKCiNkZWZpbmUgRElBTE9HX0NPUFlfQ0FQVElPTiAgICAgICAgICAiyu7v6PDu4uDy/CDv8O7j8ODs7PMiCiNkZWZpbmUgRElBTE9HX0NPUFlfUFJPR1JBTSAgICAgICAgICAiyu7v6PDu4uDy/CDv8O7j8ODs7PM6IgojZGVmaW5lIERJQUxPR19DT1BZX0ZST01fR1JPVVAgICAgICAgRElBTE9HX01PVkVfRlJPTV9HUk9VUAojZGVmaW5lIERJQUxPR19DT1BZX1RPX0dST1VQICAgICAgICAgRElBTE9HX01PVkVfVE9fR1JPVVAKCiNkZWZpbmUgRElBTE9HX0dST1VQX0NBUFRJT04gICAgICAgICAiwPLw6OHz8vsg7/Du4/Dg7Ozt7ukg4/Dz7+/7IgojZGVmaW5lIERJQUxPR19HUk9VUF9ERVNDUklQVElPTiAgICAgIibO7+jx4O3o5ToiCiNkZWZpbmUgRElBTE9HX0dST1VQX0ZJTEUgICAgICAgICAgICAiJtTg6esg4/Dz7+/7OiIKCiNkZWZpbmUgRElBTE9HX1BST0dSQU1fQ0FQVElPTiAgICAgICAiwPLy8Ojh8/L7IO/w7uPw4Ozs+yIKI2RlZmluZSBESUFMT0dfUFJPR1JBTV9ERVNDUklQVElPTiAgIERJQUxPR19HUk9VUF9ERVNDUklQVElPTgojZGVmaW5lIERJQUxPR19QUk9HUkFNX0NPTU1BTkRfTElORSAgIibK7uzg7eTt4P8g8fLw7urgOiIKI2RlZmluZSBESUFMT0dfUFJPR1JBTV9ESVJFQ1RPUlkgICAgICIm0ODh7vfo6SDq4PLg6+7jOiIKI2RlZmluZSBESUFMT0dfUFJPR1JBTV9IT1RfS0VZICAgICAgICImyu7s4ejt4Pbo/yDq6+Di6Pg6IgojZGVmaW5lIERJQUxPR19QUk9HUkFNX1NZTUJPTCAgICAgICAgIsIg4ujk5SAmx+3g9+rgIgojZGVmaW5lIERJQUxPR19QUk9HUkFNX09USEVSX1NZTUJPTCAgIibE8PPj7ukg5+3g9+7qLi4uIgoKI2RlZmluZSBESUFMT0dfU1lNQk9MX0NBUFRJT04gICAgICAgICLC++Hw4PL8IOft4Pfu6iIKI2RlZmluZSBESUFMT0dfU1lNQk9MX0ZJTEUgICAgICAgICAgICImyOz/IPTg6evgOiIKI2RlZmluZSBESUFMT0dfU1lNQk9MX0NVUlJFTlQgICAgICAgICIm0uXq8/no6SDn7eD37uo6IgoKI2RlZmluZSBESUFMT0dfRVhFQ1VURV9DQVBUSU9OICAgICAgICLH4O/z8fLo8vwg7/Du4/Dg7OzzIgojZGVmaW5lIERJQUxPR19FWEVDVVRFX0NPTU1BTkRfTElORSAgRElBTE9HX1BST0dSQU1fQ09NTUFORF9MSU5FCiNkZWZpbmUgRElBTE9HX0VYRUNVVEVfU1lNQk9MICAgICAgICBESUFMT0dfUFJPR1JBTV9TWU1CT0wKCi8qIFN0cmluZ3MgKi8KCiNkZWZpbmUgU1RSSU5HX1BST0dSQU1fTUFOQUdFUiAgICAgICAgICAgICLE6PHv5fL35fAg7/Du4/Dg7OwiCiNkZWZpbmUgU1RSSU5HX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICLO2MjBysAiCiNkZWZpbmUgU1RSSU5HX1dBUk5JTkcgICAgICAgICAgICAgICAgICAgICLP0MXE08/QxcbExc3IxSIKI2RlZmluZSBTVFJJTkdfSU5GTyAgICAgICAgICAgICAgICAgICAgICAgItHi5eTl7ej/IgojZGVmaW5lIFNUUklOR19ERUxFVEUgICAgICAgICAgICAgICAgICAgICAi0+Tg6+jy/CIKI2RlZmluZSBTVFJJTkdfREVMRVRFX0dST1VQX3MgICAgICAgICAgICAgItPk4Ovo8vwg4/Dz7+/zIGAlcycgPyIKI2RlZmluZSBTVFJJTkdfREVMRVRFX1BST0dSQU1fcyAgICAgICAgICAgItPk4Ovo8vwg7/Du4/Dg7OzzIGAlcycgPyIKI2RlZmluZSBTVFJJTkdfTk9UX0lNUExFTUVOVEVEICAgICAgICAgICAgIsX5uCDt5SDw5eDr6Ofu4uDt7iIKI2RlZmluZSBTVFJJTkdfRklMRV9SRUFEX0VSUk9SX3MgICAgICAgICAgIs746OHq4CD38uXt6P8gYCVzJyAiCiNkZWZpbmUgU1RSSU5HX0ZJTEVfV1JJVEVfRVJST1JfcyAgICAgICAgICLO+Ojh6uAg5+Dv6PHoIGAlcycgIgoKI2RlZmluZSBTVFJJTkdfR1JQRklMRV9SRUFEX0VSUk9SX3MgICAgICAgIlzU4OnrIOPw8+/v+yBgJXMnIO3lIOzu5uXyIOH78vwg7vLq8PvyLlxuXM3g5O4g6+gg4iDx6+Xk8/756Okg8ODnIO/78uDy/PH/IP3y7iDx5OXr4PL8PyIKCiNkZWZpbmUgU1RSSU5HX09VVF9PRl9NRU1PUlkgICAgICAgICAgICAgICLM4OvuIO/g7P/y6CIKI2RlZmluZSBTVFJJTkdfV0lOSEVMUF9FUlJPUiAgICAgICAgICAgICAgItHv8ODi6uAg7eUg5O7x8vPv7eAiCiNkZWZpbmUgU1RSSU5HX1VOS05PV05fRkVBVFVSRV9zICAgICAgICAgICLN5ejn4uXx8u3u5SDx4u7p8fLi7iAlcyIKI2RlZmluZSBTVFJJTkdfRklMRV9OT1RfT1ZFUldSSVRURU5fcyAgICAgItTg6esgYCVzJyDx8/nl8fLi8+XyLiDO7SDt5SDh++sg7+Xw5efg7+jx4O0uIgojZGVmaW5lIFNUUklOR19TQVZFX0dST1VQX0FTX3MgICAgICAgICAgICAiw/Dz7+/gIPHu9fDg7f/l8vH/IO/u5CDo7OXt5ewgYCVzJyDi7iDo5+Hl5uDt6OUg7+Xw5efg7+jx6CDu8Ojj6O3g6+AiCgojZGVmaW5lIFNUUklOR19OT19IT1RfS0VZICAgICAgICAgICAgICAgICAizeXyIgoKI2RlZmluZSBTVFJJTkdfQUxMX0ZJTEVTICAgICAgICAgICAgICAgICAgIsLx5SD04Onr+yAoKi4qKSIKI2RlZmluZSBTVFJJTkdfUFJPR1JBTVMgICAgICAgICAgICAgICAgICAgIs/w7uPw4Ozs+yIKI2RlZmluZSBTVFJJTkdfTElCUkFSSUVTX0RMTCAgICAgICAgICAgICAgIsHo4evo7vLl6uggKCouZGxsKSIKI2RlZmluZSBTVFJJTkdfU1lNQk9MX0ZJTEVTICAgICAgICAgICAgICAgItTg6ev7IOft4Pfq7uIiCi8qIFdobyBoYXMgd3JpdHRlbiAnU3ltYm9sIGZpbGVzJz8gVGhpcyBoYXMgZG91YmxlIG1lYW5pbmchISEqLwojZGVmaW5lIFNUUklOR19TWU1CT0xTX0lDTyAgICAgICAgICAgICAgICAix+3g9+roICgqLmljbykiCgojaW5jbHVkZSAiWHgucmMiCg==