LyoKICogUmVnZWRpdCAoUnVzc2lhbiByZXNvdXJjZXMpCiAqCiAqIENvcHlyaWdodCAyMDAzIElnb3IgU3RlcGluCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfUlVTU0lBTiwgU1VCTEFOR19ERUZBVUxUCgovKgogKiBNZW51CiAqLwoKSURDX1JFR0VESVQgTUVOVSBESVNDQVJEQUJMRQpCRUdJTgogICAgUE9QVVAgIibU4OnrIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiwib79e7kIiwgICAgICAgICAgICAgICAgICAgICAgIElEX1JFR0lTVFJZX0VYSVQKICAgIEVORAogICAgUE9QVVAgIibR7/Dg4urgIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiJs4g7/Du4/Dg7OzlIiwgICAgICAgICAgICAgICAgICBJRF9IRUxQX0FCT1VUCiAgICBFTkQKRU5ECgpJRFJfUkVHRURJVF9NRU5VIE1FTlUgRElTQ0FSREFCTEUKQkVHSU4KICAgIFBPUFVQICIm0OXl8fLwIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiJsjs7+7w8ujw7uLg8vwg9ODp6yDw5eXx8vDgLi4uIiwgICAgSURfUkVHSVNUUllfSU1QT1JUUkVHSVNUUllGSUxFCiAgICAgICAgTUVOVUlURU0gIibd6vHv7vDy6PDu4uDy/CD04OnrIPDl5fHy8OAuLi4iLCAgICBJRF9SRUdJU1RSWV9FWFBPUlRSRUdJU1RSWUZJTEUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJs/u5Orr/vfo8vwg8eXy5eLu6SDw5eXx8vAuLi4iLCBJRF9SRUdJU1RSWV9DT05ORUNUTkVUV09SS1JFR0lTVFJZLCBHUkFZRUQKICAgICAgICBNRU5VSVRFTSAiJs7y6uv+9+jy/CDx5fLl4u7pIPDl5fHy8C4uLiIsICBJRF9SRUdJU1RSWV9ESVNDT05ORUNUTkVUV09SS1JFR0lTVFJZLCBHUkFZRUQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJs/l9+Dy4PxcdEN0cmwrUCIsICAgICAgICAgICAgICBJRF9SRUdJU1RSWV9QUklOVCwgR1JBWUVECiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIsIm+/Xu5CIsICAgICAgICAgICAgICAgICAgICAgICBJRF9SRUdJU1RSWV9FWElUCiAgICBFTkQKICAgIFBPUFVQICImz/Dg4urgIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiJsjn7OXt6PL8IiwgICAgICAgICAgICAgICAgICAgICBJRF9FRElUX01PRElGWQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIFBPUFVQICLR7ufkJuDy/CIKICAgICAgICBCRUdJTgogICAgICAgICAgICBNRU5VSVRFTSAiyusm/vciLCAgICAgICAgICAgICAgICAgICAgICAgIElEX0VESVRfTkVXX0tFWQogICAgICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICAgICAgTUVOVUlURU0gIibR8vDu6u7i7uUg5+3g9+Xt6OUiLCAgICAgICAgICAgICAgIElEX0VESVRfTkVXX1NUUklOR1ZBTFVFCiAgICAgICAgICAgIE1FTlVJVEVNICImwejt4PDt7uUg5+3g9+Xt6OUiLCAgICAgICAgICAgICAgIElEX0VESVRfTkVXX0JJTkFSWVZBTFVFCiAgICAgICAgICAgIE1FTlVJVEVNICImRFdPUkQg5+3g9+Xt6OUiLCAgICAgICAgICAgICAgICBJRF9FRElUX05FV19EV09SRFZBTFVFCiAgICAgICAgRU5ECiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIibT5ODr6PL8XHREZWwiLCAgICAgICAgICAgICAgICBJRF9FRElUX0RFTEVURQogICAgICAgIE1FTlVJVEVNICImz+Xw5ejs5e3u4uDy/Fx0RjIiLCAgICAgICAgICAgSURfRURJVF9SRU5BTUUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAi0Sbq7u/o8O7i4PL8IOjs/yDq6/734CIsICAgICAgICAgICAgICBJRF9FRElUX0NPUFlLRVlOQU1FCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIibN4Ony6Fx0Q3RybCtGIiwgICAgICAgICAgICAgICBJRF9FRElUX0ZJTkQsIEdSQVlFRAogICAgICAgIE1FTlVJVEVNICLN4Ony6CAm5ODr5eVcdEYzIiwgICAgICAgICAgICAgIElEX0VESVRfRklORE5FWFQsIEdSQVlFRAogICAgRU5ECiAgICBQT1BVUCAiJsLo5CIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gItHy8O7q4CAm8e7x8u7/7ej/IiwgICAgICAgICAgICAgICAgIElEX1ZJRVdfU1RBVFVTQkFSCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIibQ4Ofk5evo8vwiLCAgICAgICAgICAgICAgICAgICAgICBJRF9WSUVXX1NQTElUCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIibO4e3u4ujy/Fx0RjUiLCAgICAgICAgICAgICAgICBJRF9WSUVXX1JFRlJFU0gKICAgIEVORAogICAgUE9QVVAgIibI5+Hw4O3t7uUiCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICImxO7h4OLo8vwg4iDo5+Hw4O3t7uUiLCAgICAgICAgICBJRF9GQVZPUklURVNfQUREVE9GQVZPUklURVMKICAgICAgICAsIEdSQVlFRAogICAgICAgIE1FTlVJVEVNICIm0+Tg6+jy/CDo5yDo5+Hw4O3t7uPuIiwgICAgICAgICAgIElEX0ZBVk9SSVRFU19SRU1PVkVGQVZPUklURQogICAgICAgICwgR1JBWUVECiAgICBFTkQKICAgIFBPUFVQICIm0e/w4OLq4CIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIibR7uTl8Obg7ejlIiwgICAgICAgICAgICAgICAgSURfSEVMUF9IRUxQVE9QSUNTCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIibOIPDl5ODq8u7w5SDw5eXx8vDgIiwgICAgICBJRF9IRUxQX0FCT1VUCiAgICBFTkQKRU5ECgoKLyoKICogRGlhbG9nCiAqLwoKSUREX0FCT1VUQk9YIERJQUxPRyBESVNDQVJEQUJMRSAgMjIsIDE3LCAyMzAsIDc1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICLOIO/w7uPw4Ozs5SIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpCRUdJTgogICAgSUNPTiAgICAgICAgICAgIElESV9SRUdFRElULElESV9SRUdFRElULDE0LDksMTYsMTYKICAgIExURVhUICAgICAgICAgICAi0OXk4Ory7vAg8OXl8fLw4CBSZWFjdE9TLiDC5fDx6P8gMS4wIixJRENfU1RBVElDLDQ5LDEwLDExOSw4LAogICAgICAgICAgICAgICAgICAgIFNTX05PUFJFRklYCiAgICBMVEVYVCAgICAgICAgICAgIkNvcHlyaWdodCAoQykgMjAwMiDK7uzg7eTgIFJlYWN0T1MiLElEQ19TVEFUSUMsNDksMjAsMTE5LDgKICAgIERFRlBVU0hCVVRUT04gICAiT0siLElET0ssMTk1LDYsMzAsMTEsV1NfR1JPVVAKRU5ECgovKgogKiBTdHJpbmcgVGFibGUKICovCgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQpCRUdJTgogICAgSURTX0xJU1RfQ09MVU1OX05BTUUgICAgIsjs/yIKICAgIElEU19MSVNUX0NPTFVNTl9UWVBFICAgICLS6O8iCiAgICBJRFNfTElTVF9DT0xVTU5fREFUQSAgICAixODt7fvlIgpFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICBJRFNfQVBQX1RJVExFICAgICAgICAgICAi0OXk4Ory7vAg8OXl8fLw4CIKICAgIElEQ19SRUdFRElUICAgICAgICAgICAgICJSRUdFRElUIgogICAgSURDX1JFR0VESVRfRlJBTUUgICAgICAgIlJFR0VESVRfRlJBTUUiCkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIElEX1JFR0lTVFJZX01FTlUgICAgICAgICLR7uTl8Obo8iDq7uzg7eT7IOTr/yDw4OHu8vsg8SDw5ePo8fLw7uwg4iD25evu7CIKICAgIElEX0VESVRfTUVOVSAgICAgICAgICAgICLR7uTl8Obo8iDq7uzg7eT7IOTr/yDw5eTg6vLo8O7i4O3o/yDn7eD35e3o6SDo6+gg6uv+9+XpIgogICAgSURfVklFV19NRU5VICAgICAgICAgICAgItHu5OXw5ujyIOru7ODt5Psg5Ov/IO3g8fLw7unq6CDu6u3gIPDl5fHy8OAiCiAgICBJRF9GQVZPUklURVNfTUVOVSAgICAgICAi0e7k5fDm6PIg6u7s4O3k+yDk6/8g5O7x8vPv4CDqIPfg8fLuIOjx7+7r/Ofz5ez77CDq6/734OwiCiAgICBJRF9IRUxQX01FTlUgICAgICAgICAgICAi0e7k5fDm6PIg6u7s4O3k+yDk6/8g7vLu4fDg5uXt6P8g8e/w4OLq6CDoIOjt9O7w7OD26Ogg7iDw5eTg6vLu8OUg8OXl8fLw4CIKICAgIElEX0VESVRfTkVXX01FTlUgICAgICAgICLR7uTl8Obo8iDq7uzg7eT7IOTr/yDx7ufk4O3o/yDt7uL79SDq6/735ekg6OvoIOft4Pfl7ejpIgpFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICBJRF9FRElUX01PRElGWSAgICAgICAgICAiTW9kaWZpZXMgdGhlIHZhbHVlJ3MgZGF0YSIKICAgIElEX0VESVRfTkVXX0tFWSAgICAgICAgICLE7uHg4uv/5fIg7e7i++kg6uv+9yIKICAgIElEX0VESVRfTkVXX1NUUklOR1ZBTFVFICLE7uHg4uv/5fIg7e7i7uUg8fLw7uru4u7lIOft4Pfl7ejlIgogICAgSURfRURJVF9ORVdfQklOQVJZVkFMVUUgIsTu4eDi6//l8iDt7uLu5SDh6O3g8O3u5SDn7eD35e3o5SIKICAgIElEX0VESVRfTkVXX0RXT1JEVkFMVUUgICLE7uHg4uv/5fIg7e7i7uUgRFdPUkQt5+3g9+Xt6OUiCiAgICBJRF9SRUdJU1RSWV9JTVBPUlRSRUdJU1RSWUZJTEUgIsjs7+7w8ujw8+XyIPLl6vHy7uLu6SD04OnrIOIg8OXl8fLwIgogICAgSURfUkVHSVNUUllfRVhQT1JUUkVHSVNUUllGSUxFCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAi3erx7+7w8ujw8+XyIOLl8fwg8OXl8fLwIOjr6CDl4+4g9+Dx8vwg4iDy5erx8u7i7ukg9ODp6yIKICAgIElEX1JFR0lTVFJZX0NPTk5FQ1RORVRXT1JLUkVHSVNUUlkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICLP7uTq6/734OXy8f8g6iDw5eXx8vDzIPPk4Ou47e3u4+4g6u7s7/z+8uXw4CIKICAgIElEX1JFR0lTVFJZX0RJU0NPTk5FQ1RORVRXT1JLUkVHSVNUUlkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICLO8urr/vfg5fLx/yDu8iDw5eXx8vDgIPPk4Ou47e3u4+4g6u7s7/z+8uXw4CIKICAgIElEX1JFR0lTVFJZX1BSSU5UICAgICAgICLP5ffg8uDl8iDi5fH8IPDl5fHy8CDo6+gg7uPuIPfg8fL8IgovKiAgICBJRF9IRUxQX0hFTFBUT1BJQ1MgICAgICAiT3BlbnMgcmVnaXN0cnkgZWRpdG9yIGhlbHAiICovCiAgICBJRF9IRUxQX0FCT1VUICAgICAgICAgICAizvLu4fDg5uDl8iDo7fTu8Ozg9uj+IO4g7/Du4/Dg7OzlLCDt7uzl8CDi5fDx6Ogg6CDg4vLu8PHy4u4iCkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIElEX1JFR0lTVFJZX0VYSVQgICAgICAgICLC+/Xu5CDo5yDw5eTg6vLu8OAg8OXl8fLw4CIKICAgIElEX0ZBVk9SSVRFU19BRERUT0ZBVk9SSVRFUyAixO7h4OLo8vwg6uv+9yDiIOjn4fDg7e3u5SIKICAgIElEX0ZBVk9SSVRFU19SRU1PVkVGQVZPUklURSAi0+Tg6+jy/CDq6/73IOjnIOjn4fDg7e3u4+4iCiAgICBJRF9WSUVXX1NUQVRVU0JBUiAgICAgICAiz+7q4Ofg8vwg6OvoIPHq8Pvy/CDx8vDu6vMg8e7x8u7/7ej/IgogICAgSURfVklFV19TUExJVCAgICAgICAgICAgIsjn7OXt6PL8IO/u5+j26P4g8ODn5OXr6PLl6/8g7OXm5PMg5OLz7P8g7+Dt5ev/7OgiCiAgICBJRF9WSUVXX1JFRlJFU0ggICAgICAgICAizuHt7uLr/+XyIO7q7e4iCiAgICBJRF9FRElUX0RFTEVURSAgICAgICAgICAi0+Tg6//l8iDi++Tl6+Xt6OUiCiAgICBJRF9FRElUX1JFTkFNRSAgICAgICAgICAiz+Xw5ejs5e3u4vvi4OXyIOL75OXr5e3o5SIKICAgIElEX0VESVRfQ09QWUtFWU5BTUUgICAgICLK7u/o8PPl8iDo7P8g4vvk5evl7e3u4+4g6uv+9+Ag4iDh8/Tl8CDu4ezl7eAiCiAgICBJRF9FRElUX0ZJTkQgICAgICAgICAgICAiyPnl8iDy5erx8u7i8/4g8fLw7urzIOIg6uv+9+UsIOft4Pfl7ejoIOjr6CDk4O3t+/UiCiAgICBJRF9FRElUX0ZJTkRORVhUICAgICAgICAiyPnl8iDx6+Xk8/755eUg8e7i7+Dk5e3o5SDy5erx8uAsIOfg5ODt7e7j7iDiIO/w5eT75PP55ewg7+7o8erlIgpFTkQKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgovKgogKiBEaWFsb2cKICovCgpJRERfRElBTE9HMSBESUFMT0cgRElTQ0FSREFCTEUgIDUwLCA1MCwgMjY4LCA5OApTVFlMRSBEU18zRExPT0sgfCBEU19DT05UUk9MIHwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfQ0xJUFNJQkxJTkdTIHwKICAgIFdTX0JPUkRFUgpGT05UIDgsICJNUyBTaGVsbCBEbGciCkJFR0lOCkVORAoKSUREX0RJQUxPRzIgRElBTE9HIERJU0NBUkRBQkxFICAwLCAwLCAxODcsIDk1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIsTo4Ovu4yIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpCRUdJTgogICAgREVGUFVTSEJVVFRPTiAgICJPSyIsSURPSywxMzAsNyw1MCwxNAogICAgUFVTSEJVVFRPTiAgICAgICLO8uzl7eAiLElEQ0FOQ0VMLDEzMCwyNCw1MCwxNApFTkQKCgovKgogKiBURVhUSU5DTFVERQogKi8KCjEgVEVYVElOQ0xVREUgRElTQ0FSREFCTEUKQkVHSU4KICAgICJyZXNvdXJjZS5oXDAiCkVORAoKCgovKgogKiBTdHJpbmcgVGFibGUKICovCgovKgogKlNUUklOR1RBQkxFIERJU0NBUkRBQkxFCiAqQkVHSU4KICogICAgSURfSEVMUF9IRUxQVE9QSUNTICAgICAgIk9wZW5zIFJlZ2lzdHJ5IEVkaXRvciBIZWxwLiIKICogICAgSURfSEVMUF9BQk9VVCAgICAgICAgICAgIkRpc3BsYXlzIHByb2dyYW0gaW5mb3JtYXRpb24sIHZlcnNpb24gbnVtYmVyLCBhbmQgY29weXJpZ2h0LiIKICpFTkQKICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCg==