LyoKICogUmVnZWRpdCBCdWxnYXJpYW4gcmVzb3VyY2VzCiAqCiAqIENvcHlyaWdodCAyMDA1IE1pbGtvIEtyYWNob3Vub3YKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKCkxBTkdVQUdFIExBTkdfQlVMR0FSSUFOLCBTVUJMQU5HX0RFRkFVTFQKCi8qU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIElEX0ZBVk9SSVRFU19BRERUT0ZBVk9SSVRFUyAixO7h4OL/IOrr/vfu4uUg6vrsIPHv6PH66uAg8SDu8uzl8uro8uUiCiAgICBJRF9GQVZPUklURVNfUkVNT1ZFRkFWT1JJVEUgIs/w5ezg9eLgIOrr/vfu4uUg7vIg8e/o8frq4CDxIO7y7OXy6ujy5SIKRU5EKi8KCklEUl9SRUdFRElUX01FTlUgTUVOVSBESVNDQVJEQUJMRQpCRUdJTgogICAgUE9QVVAgIibQ5ePo8fL68CIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIibC7Prq7egg9ODp6yDiIPDl4+jx8vrw4C4uLiIsICAgIElEX1JFR0lTVFJZX0lNUE9SVFJFR0lTVFJZRklMRQogICAgICAgIE1FTlVJVEVNICImyOft5fHoIPTg6esg7vIg8OXj6PHy+vDgLi4uIiwgICAgSURfUkVHSVNUUllfRVhQT1JUUkVHSVNUUllGSUxFCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIibR4vrw5ugg8eUg8SDs8OXm7uIg8OXj6PHy+vAuLi4iLCBJRF9SRUdJU1RSWV9DT05ORUNUTkVUV09SS1JFR0lTVFJZLCBHUkFZRUQKICAgICAgICBNRU5VSVRFTSAiyOcm6uv+9+gg7PDl5u7iIPDl4+jx8vrwLi4uIiwgSURfUkVHSVNUUllfRElTQ09OTkVDVE5FVFdPUktSRUdJU1RSWSwgR1JBWUVECiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIibP5ffg8lx0Q3RybCtQIiwgICAgICAgICAgICAgIElEX1JFR0lTVFJZX1BSSU5ULCBHUkFZRUQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiyOcm9e7kIiwgICAgICAgICAgICAgICAgICAgICAgIElEX1JFR0lTVFJZX0VYSVQKICAgIEVORAogICAgUE9QVVAgIibQ5eTg6vLo8ODt5SIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIibP8O7s5e3oIiwgICAgICAgICAgICAgICAgICAgICBJRF9FRElUX01PRElGWQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIFBPUFVQICImze7iIgogICAgICAgIEJFR0lOCiAgICAgICAgICAgIE1FTlVJVEVNICImyuv+9yIsICAgICAgICAgICAgICAgICAgICAgICAgSURfRURJVF9ORVdfS0VZCiAgICAgICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgICAgICBNRU5VSVRFTSAiJtLl6vHy7uLgIPHy7unt7vHyIiwgICAgICAgICAgICAgICBJRF9FRElUX05FV19TVFJJTkdWQUxVRQogICAgICAgICAgICBNRU5VSVRFTSAiJsTi7uj37eAg8fLu6e3u8fIiLCAgICAgICAgICAgICAgIElEX0VESVRfTkVXX0JJTkFSWVZBTFVFCiAgICAgICAgICAgIE1FTlVJVEVNICImRFdPUkQg8fLu6e3u8fIiLCAgICAgICAgICAgICAgICBJRF9FRElUX05FV19EV09SRFZBTFVFCiAgICAgICAgRU5ECiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIibI5/Lw6OlcdERlbCIsICAgICAgICAgICAgICAgIElEX0VESVRfREVMRVRFCiAgICAgICAgTUVOVUlURU0gIs/w5egm7OXt8+Lg6Vx0RjIiLCAgICAgICAgICAgICAgICAgSURfRURJVF9SRU5BTUUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJsru7+jw4Okg6Ozl8u4g7eAg6uv+9+AiLCAgICAgICAgICAgICAgSURfRURJVF9DT1BZS0VZTkFNRQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICIm0vrw8ehcdEN0cmwrRiIsICAgICAgICAgICAgICAgSURfRURJVF9GSU5ELCBHUkFZRUQKICAgICAgICBNRU5VSVRFTSAizeDs5fDoICbx6+Xk4uD5XHRGMyIsICAgICAgICAgICAgICBJRF9FRElUX0ZJTkRORVhULCBHUkFZRUQKICAgIEVORAogICAgUE9QVVAgIibI5+Pr5eQiCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICLL5e3y4CDt4CAm8frx8u7/7ejl8u4iLCAgICAgICAgICAgICAgICAgSURfVklFV19TVEFUVVNCQVIKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJtDg5+Tl6+jy5esiLCAgICAgICAgICAgICAgICAgICAgICBJRF9WSUVXX1NQTElUCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIibO4e3u4uhcdEY1IiwgICAgICAgICAgICAgICAgSURfVklFV19SRUZSRVNICiAgICBFTkQKICAgIFBPUFVQICImzvLs5fLq6CIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIibE7uHg4ugg6vrsIO7y7OXy6ujy5SIsICAgICAgICAgIElEX0ZBVk9SSVRFU19BRERUT0ZBVk9SSVRFUwogICAgICAgIE1FTlVJVEVNICImz/Dl7OD17egg7vLs5fLq4CIsICAgICAgICAgICBJRF9GQVZPUklURVNfUkVNT1ZFRkFWT1JJVEUKICAgIEVORAogICAgUE9QVVAgIibP7uzu+SIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIibP7uzu+e3oIPLl7OhcdEYxIiwgICAgICAgICAgICBJRF9IRUxQX0hFTFBUT1BJQ1MKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJs7y7e7x7e4g8OXk4Ory7vDgIO3gIPHo8fLl7O3o/yDw5ePo8fL68CIsICAgICAgSURfSEVMUF9BQk9VVAogICAgRU5ECkVORAoKSURSX1BPUFVQX01FTlVTIE1FTlUgRElTQ0FSREFCTEUKQkVHSU4KICBQT1BVUCAiIgogIEJFR0lOCglNRU5VSVRFTSAiJs/w7uzl7egiLCAgICAgICAgICAgICAgICAgICAgIElEX0VESVRfTU9ESUZZCglNRU5VSVRFTSAiz/Du7OXt6CDk4u7o9+3o8uUg5ODt7egiLCAgICAgICAgICBJRF9FRElUX01PRElGWV9CSU4KCU1FTlVJVEVNIFNFUEFSQVRPUgoJTUVOVUlURU0gIibI5/Lw6OlcdERlbCIsICAgICAgICAgICAgICAgIElEX0VESVRfREVMRVRFCglNRU5VSVRFTSAiJs/w5ejs5e3z4uDpIiwgICAgICAgICAgICAgICAgICAgICBJRF9FRElUX1JFTkFNRQogIEVORAogIFBPUFVQICIiCiAgQkVHSU4KICAgICAgICBQT1BVUCAiJs3u4iIKICAgICAgICBCRUdJTgogICAgICAgICAgICBNRU5VSVRFTSAiJsrr/vciLCAgICAgICAgICAgICAgICAgICAgICAgIElEX0VESVRfTkVXX0tFWQogICAgICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICAgICAgTUVOVUlURU0gIibS5erx8u7i4CDx8u7p7e7x8iIsICAgICAgICAgICAgICAgSURfRURJVF9ORVdfU1RSSU5HVkFMVUUKICAgICAgICAgICAgTUVOVUlURU0gIibE4u7o9+3gIPHy7unt7vHyIiwgICAgICAgICAgICAgICBJRF9FRElUX05FV19CSU5BUllWQUxVRQogICAgICAgICAgICBNRU5VSVRFTSAiJkRXT1JEIPHy7unt7vHyIiwgICAgICAgICAgICAgICAgSURfRURJVF9ORVdfRFdPUkRWQUxVRQogICAgICAgIEVORAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImyOfy8OjpXHREZWwiLCAgICAgICAgICAgICAgICBJRF9FRElUX0RFTEVURQogICAgICAgIE1FTlVJVEVNICImz/Dl6Ozl7fPi4OlcdEYyIiwgICAgICAgICAgICAgICAgIElEX0VESVRfUkVOQU1FCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIibK7u/o8ODpIOjs5fLuIO3gIOrr/vfgIiwgICAgICAgICAgICAgIElEX0VESVRfQ09QWUtFWU5BTUUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJtL68PHoXHRDdHJsK0YiLCAgICAgICAgICAgICAgIElEX0VESVRfRklORCwgR1JBWUVECiAgRU5ECkVORAoKCi8qCiAqIERpYWxvZwogKi8KCklERF9BQk9VVEJPWCBESUFMT0cgRElTQ0FSREFCTEUgIDIyLCAxNywgMjMwLCA3NQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgRFNfTk9JRExFTVNHIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAizvLt7vHt7iIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpCRUdJTgogICAgSUNPTiAgICAgICAgICAgIElESV9SRUdFRElULElESV9SRUdFRElULDE0LDksMTYsMTYKICAgIExURVhUICAgICAgICAgICAiUmVhY3RPUyDw5eTg6vLu8CDt4CDw5ePo8fL68OAg4uXw8ej/IDEuMCIsSURDX1NUQVRJQyw0OSwxMCwxMTksOCwKICAgICAgICAgICAgICAgICAgICBTU19OT1BSRUZJWAogICAgTFRFWFQgICAgICAgICAgICJDb3B5cmlnaHQgKEMpIDIwMDIgUmVhY3RPUyBUZWFtIixJRENfU1RBVElDLDQ5LDIwLDExOSw4CiAgICBERUZQVVNIQlVUVE9OICAgIk9LIixJRE9LLDE5NSw2LDMwLDExLFdTX0dST1VQCkVORAoKSUREX0ZJTkQgRElBTE9HIERJU0NBUkRBQkxFICAyMiwgMTcsIDIxMCwgODUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gItL68PHl7eUiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQkVHSU4KICAgIExURVhUICAgICAgICAgICAi0vrw8eg6IixJRENfU1RBVElDLDUsNywxMTksOAogICAgRURJVFRFWFQgICAgICAgIElEQ19WQUxVRV9OQU1FLDQwLDUsMTI1LDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QIHwgRVNfQVVUT0hTQ1JPTEwKICAgIExURVhUICAgICAgICAgICAi0vrw8egg4joiLElEQ19TVEFUSUMsNSwgMjIsIDExOSwgOAogICAgQ0hFQ0tCT1ggICAgICAgICLK6/737uLlIiwgSURDX0ZJTkRfS0VZUywgNSwgMzQsIDkwLCAxMCwgV1NfVEFCU1RPUCB8IFdTX0dST1VQIHwgQlNfQVVUT0NIRUNLQk9YCiAgICBDSEVDS0JPWCAgICAgICAgIsjs5e3gIO3gIPHy7unt7vHy6CIsIElEQ19GSU5EX1ZBTFVFUywgNSwgNDYsIDkwLCAxMCwgV1NfVEFCU1RPUCB8IEJTX0FVVE9DSEVDS0JPWAogICAgQ0hFQ0tCT1ggICAgICAgICLR+uT68Obg7ejlIO3gIPHy7unt7vHy6CIsIElEQ19GSU5EX0NPTlRFTlQsIDUsIDU4LCA5MCwgMTAsIFdTX1RBQlNUT1AgfCBCU19BVVRPQ0hFQ0tCT1gKICAgIENIRUNLQk9YICAgICAgICAi0vrw8egg5+Ag9uXr6P8g7ejnIiwgSURDX0ZJTkRfV0hPTEUsIDUsIDcwLCA5MCwgMTAsIFdTX1RBQlNUT1AgfCBCU19BVVRPQ0hFQ0tCT1gKICAgIERFRlBVU0hCVVRUT04gICAi0vrw8egiLElET0ssMTc1LDUsMzAsMTEsV1NfR1JPVVAKICAgIFBVU0hCVVRUT04gICAgICAix+Dy4u7w6CIsSURDQU5DRUwsMTc1LDIyLDMwLDExLCBXU19HUk9VUApFTkQKCklERF9BRERGQVZPUklURSBESUFMT0cgRElTQ0FSREFCTEUgIDIyLCAxNywgMjEwLCA1NQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAixO7h4OLoIO7y7OXy6uAiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQkVHSU4KICAgIExURVhUICAgICAgICAgICAiyOzlOiIsSURDX1NUQVRJQyw1LDUsMTE5LDgKICAgIEVESVRURVhUICAgICAgICBJRENfVkFMVUVfTkFNRSw1LDE1LDIwMCwxMiwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUCB8IEVTX0FVVE9IU0NST0xMCiAgICBERUZQVVNIQlVUVE9OICAgIk9LIixJRE9LLDE0MCw0MCwzMCwxMSxXU19HUk9VUAogICAgUFVTSEJVVFRPTiAgICAgICLO8uzl7egiLElEQ0FOQ0VMLDE3NSw0MCwzMCwxMSwgV1NfR1JPVVAKRU5ECgpJRERfREVMRkFWT1JJVEUgRElBTE9HIERJU0NBUkRBQkxFICAyMiwgMTcsIDIxMCwgOTAKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIs/w5ezg9e3oIO7y7OXy6uAiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQkVHSU4KICAgIExURVhUICAgICAgICAgICAiyOzlOiIsSURDX1NUQVRJQyw1LDUsMTE5LDgKICAgIExJU1RCT1ggICAgICAgICBJRENfTkFNRV9MSVNULDUsMTUsMjAwLDUyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QIHwgTEJTX1NPUlQgfCBMQlNfTk9JTlRFR1JBTEhFSUdIVCB8IFdTX1ZTQ1JPTEwKICAgIERFRlBVU0hCVVRUT04gICAiT0siLElET0ssMTQwLDczLDMwLDExLFdTX0dST1VQCiAgICBQVVNIQlVUVE9OICAgICAgIs7y7OXt6CIsSURDQU5DRUwsMTc1LDczLDMwLDExLCBXU19HUk9VUApFTkQKCklERF9FRElUX1NUUklORyBESUFMT0cgRElTQ0FSREFCTEUgIDIyLCAxNywgMjEwLCA3NQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAi0OXk4Ory6PDg6SDx6Ozi7uvl7SDt6OciCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQkVHSU4KICAgIExURVhUICAgICAgICAgICAiyOzlIO3gIPHy7unt7vHy8uA6IixJRENfU1RBVElDLDUsNSwxMTksOAogICAgRURJVFRFWFQgICAgICAgIElEQ19WQUxVRV9OQU1FLDUsMTUsMjAwLDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QIHwgRVNfQVVUT0hTQ1JPTEx8IFdTX0RJU0FCTEVECiAgICBMVEVYVCAgICAgICAgICAgIsTg7e3oOiIsSURDX1NUQVRJQyw1LDMwLDExOSw4CiAgICBFRElUVEVYVCAgICAgICAgSURDX1ZBTFVFX0RBVEEsNSw0MCwyMDAsMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AgfCBFU19BVVRPSFNDUk9MTAogICAgREVGUFVTSEJVVFRPTiAgICJPSyIsSURPSywxNDAsNjAsMzAsMTEsV1NfR1JPVVAKICAgIFBVU0hCVVRUT04gICAizvLs5e3oIixJRENBTkNFTCwxNzUsNjAsMzAsMTEsV1NfR1JPVVAKRU5ECgpJRERfRURJVF9EV09SRCBESUFMT0cgRElTQ0FSREFCTEUgIDIyLCAxNywgMjIwLCAxMDAKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IERTX05PSURMRU1TRyB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gItDl5ODq8ujw4OkgRFdPUkQiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQkVHSU4KICAgIExURVhUICAgICAgICAgICAiyOzlIO3gIPHy7unt7vHy8uA6IixJRENfU1RBVElDLDUsNSwxMTksOAogICAgRURJVFRFWFQgICAgICAgIElEQ19WQUxVRV9OQU1FLDUsMTUsMjEwLDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QIHwgRVNfQVVUT0hTQ1JPTEx8IFdTX0RJU0FCTEVECiAgICBMVEVYVCAgICAgICAgICAgIsTg7e3oOiIsSURDX1NUQVRJQyw1LDMwLDkwLDgKICAgIEVESVRURVhUICAgICAgICBJRENfVkFMVUVfREFUQSw1LDQwLDkwLDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QCiAgICBHUk9VUEJPWCAgICAgICAgIs7x7e7i4CIsIElEQ19EV09SRF9CQVNFLCAxMjAsIDMwLCA5NSwgMzcsIEJTX0dST1VQQk9YCiAgICBBVVRPUkFESU9CVVRUT04gItjl8fLg7eXk5fHl8uj37eAiLCBJRENfRFdPUkRfSEVYLCAxMzAsIDQwLCA4MCwgMTAsIFdTX1RBQlNUT1AKICAgIEFVVE9SQURJT0JVVFRPTiAixOXx5fLo9+3gIiwgSURDX0RXT1JEX0RFQywgMTMwLCA1MiwgNzAsIDEwLCBXU19UQUJTVE9QCiAgICBERUZQVVNIQlVUVE9OICAgIk9LIixJRE9LLDE1MCw4MCwzMCwxMSxXU19HUk9VUAogICAgUFVTSEJVVFRPTiAgICLO8uzl7egiLElEQ0FOQ0VMLDE4NSw4MCwzMCwxMSxXU19HUk9VUApFTkQKCklERF9FRElUX0JJTkFSWSBESUFMT0cgRElTQ0FSREFCTEUgIDIyLCAxNywgMjEwLCAxMDAKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IERTX05PSURMRU1TRyB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gItDl5ODq8ujw4Okg5OLu6Pft4CDx8u7p7e7x8iIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpCRUdJTgogICAgTFRFWFQgICAgICAgICAgICLI7OUg7eAg8fLu6e3u8fLy4DoiLElEQ19TVEFUSUMsNSw1LDExOSw4CiAgICBFRElUVEVYVCAgICAgICAgSURDX1ZBTFVFX05BTUUsNSwxNSwyMDAsMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AgfCBFU19BVVRPSFNDUk9MTHwgV1NfRElTQUJMRUQKICAgIExURVhUICAgICAgICAgICAixODt7eg6IixJRENfU1RBVElDLDUsMzAsOTAsOAogICAgQ09OVFJPTCAgICAgICAgICIiLElEQ19WQUxVRV9EQVRBLCJIZXhFZGl0IixXU19UQUJTVE9QLDQsNDAsMTYwLDQwCiAgICBERUZQVVNIQlVUVE9OICAgIk9LIixJRE9LLDE0MCw4MCwzMCwxMSxXU19HUk9VUAogICAgUFVTSEJVVFRPTiAgICLO8uzl7egiLElEQ0FOQ0VMLDE3NSw4MCwzMCwxMSxXU19HUk9VUApFTkQKCi8qCiAqIFN0cmluZyBUYWJsZQogKi8KClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICBJRFNfTElTVF9DT0xVTU5fTkFNRSAgICAiyOzlIgogICAgSURTX0xJU1RfQ09MVU1OX1RZUEUgICAgItLo7yIKICAgIElEU19MSVNUX0NPTFVNTl9EQVRBICAgICLE4O3t6CIKRU5ECgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQpCRUdJTgogICAgSURTX0FQUF9USVRMRSAgICAgICAgICAgItDl5ODq8u7wIO3gIPHo8fLl7O3o/yDw5ePo8fL68CIKICAgIElEQ19SRUdFRElUICAgICAgICAgICAgICJSRUdFRElUIgogICAgSURDX1JFR0VESVRfRlJBTUUgICAgICAgIlJFR0VESVRfRlJBTUUiCkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIElEX1JFR0lTVFJZX01FTlUgICAgICAgICLR+uT68ObgIOru7ODt5Ogg5+Ag8+/w4OLr5e3o5SDt4CD25evo/yDw5ePo8fL68CIKICAgIElEX0VESVRfTUVOVSAgICAgICAgICAgICLR+uT68ObgIOru7ODt5Ogg5+Ag8OXk4Ory6PDg7eUg7eAg8fLu6e3u8fLoIOjr6CDq6/737uLlIgogICAgSURfVklFV19NRU5VICAgICAgICAgICAgItH65Prw5uAg6u7s4O3k6CDn4CDv5fDx7u3g6+jn6PDg7eUg7eAg4vrt+O3o/yDi6OQg7eAg8OXk4Ory7vDgIgogICAgSURfRkFWT1JJVEVTX01FTlUgICAgICAgItH65Prw5uAg6u7s4O3k6CDn4CDk7vHy+u8g5O4g9+Xx8u4g6Ofv7uvn4uDt6CDq6/737uLlIgogICAgSURfSEVMUF9NRU5VICAgICAgICAgICAgItH65Prw5uAg6u7s4O3k6CDn4CDo5+Lo6uLg7eUg7eAg7+7s7vkg5+Ag8OXk4Ory7vDgIO3gIPDl4+jx8vrw4CIKICAgIElEX0VESVRfTkVXX01FTlUgICAgICAgICLR+uT68ObgIOru7ODt5Ogg5+Ag8frn5ODi4O3lIO3gIO3u4ugg8fLu6e3u8fLoIOjr6CDq6/737uLlIgpFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICBJRF9FRElUX01PRElGWSAgICAgICAgICAiz/Du7OXt/yDk4O3t6PLlIOIg8fLu6e3u8fLy4CIKICAgIElEX0VESVRfTkVXX0tFWSAgICAgICAgICLE7uHg4v8g7e7iIOrr/vciCiAgICBJRF9FRElUX05FV19TVFJJTkdWQUxVRSAixO7h4OL/IO3u4uAg8fLu6e3u8fIg7vIg8ujvIPHo7OLu6+XtIO3o5yIKICAgIElEX0VESVRfTkVXX0JJTkFSWVZBTFVFICLE7uHg4v8g7e7i4CDk4u7o9+3gIPHy7unt7vHyIgogICAgSURfRURJVF9ORVdfRFdPUkRWQUxVRSAgIsTu4eDi/yDt7uLgIERXT1JEIPHy7unt7vHyIgogICAgSURfUkVHSVNUUllfSU1QT1JUUkVHSVNUUllGSUxFICLC7Prq4uAg8uXq8fLu4iD04OnrIOIg8ejx8uXs7ej/IPDl4+jx8vrwIgogICAgSURfUkVHSVNUUllfRVhQT1JUUkVHSVNUUllGSUxFCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAix+Dv6PHi4CD2/+vu8u4g6OvoIPfg8fIg7vIg8frk+vDm4O3o5fLuIO3gIPHo8fLl7O3o/yDw5ePo8fL68CDi+uIg8uXq8fLu4iD04OnrIgogICAgSURfUkVHSVNUUllfQ09OTkVDVE5FVFdPUktSRUdJU1RSWQogICAgICAgICAgICAgICAgICAgICAgICAgICAgItHi+vDn4uAg8eUg8frxIPHo8fLl7O3o/yDw5ePo8fL68CDt4CDk8PPjIOru7O/+8vrwIgogICAgSURfUkVHSVNUUllfRElTQ09OTkVDVE5FVFdPUktSRUdJU1RSWQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIs/w5erw4PL/4uAg4vD65+rg8uAg8frxIPHo8fLl7O3o/yDw5ePo8fL68CDt4CDk8PPjIOru7O/+8vrwIgogICAgSURfUkVHSVNUUllfUFJJTlQgICAgICAgItDg5+/l9+Dy4uAg9uXr6P8g6OvoIPfg8fIg7vIg8ejx8uXs7ej/IPDl4+jx8vrwIgovKiAgICBJRF9IRUxQX0hFTFBUT1BJQ1MgICAgICAiT3BlbnMgcmVnaXN0cnkgZWRpdG9yIGhlbHAiICovCiAgICBJRF9IRUxQX0FCT1VUICAgICAgICAgICAiz+7q4Ofi4CDo7fTu8Ozg9uj/IOfgIO/w7uPw4OzgLCDi5fDx6P/y4CDoIODi8u7w8ero8uUg7/Dg4uAiCkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIElEX1JFR0lTVFJZX0VYSVQgICAgICAgICLI5+vo5+Ag7vIg8OXk4Ory7vDgIO3gIPHo8fLl7O3o/yDw5ePo8fL68CIKICAgIElEX0ZBVk9SSVRFU19BRERUT0ZBVk9SSVRFUyAixO7h4OL/IOrr/vfu4uUg6vrsIPHv6PH66uAg8SDu8uzl8uro8uUiCiAgICBJRF9GQVZPUklURVNfUkVNT1ZFRkFWT1JJVEUgIs/w5ezg9eLgIOrr/vfu4uUg7vIg8e/o8frq4CDxIO7y7OXy6ujy5SIKICAgIElEX1ZJRVdfU1RBVFVTQkFSICAgICAgICLP7urg5+LgIOjr6CDx6vDo4uAg6+Xt8uDy4CDt4CDx+vHy7v/t6OXy7iIKICAgIElEX1ZJRVdfU1BMSVQgICAgICAgICAgICLP8O7s5e3/IOzl8fLu7+7r7ubl7ejl8u4g7eAg8ODn5OXr6PLl6/8g7OXm5PMg5OLl8uUg7+7r7uLo7egg7eAg8OXk4Ory7vDgIgogICAgSURfVklFV19SRUZSRVNIICAgICAgICAgIs7h7e7i/+LgIPH65Prw5uDt6OXy7iDt4CDv8O7n7vDl9uAiCiAgICBJRF9FRElUX0RFTEVURSAgICAgICAgICAiyOfy8Oji4CDo5+Hw4O3u8u4iCiAgICBJRF9FRElUX1JFTkFNRSAgICAgICAgICAiz/Dl6Ozl7fPi4CDo5+Hw4O3u8u4iCiAgICBJRF9FRElUX0NPUFlLRVlOQU1FICAgICAiyu7v6PDgIOjs5fLuIO3gIOjn4fDg7ej/IOrr/vcg4iDx6PHy5ezt6P8g4fP05fAiCiAgICBJRF9FRElUX0ZJTkQgICAgICAgICAgICAi0vrw8egg5+Ag8uXq8fLu4iDt6Ocg4iDq6/737uLl8uUsIPHy7unt7vHy6PLlIOgg5ODt7ejy5SIKICAgIElEX0VESVRfRklORE5FWFQgICAgICAgICLS+vDx6CDx6+Xk4uD57vLuIOz/8fLuLCDt4CDq7uXy7iDx5SDx8OX54CDy5erx8uAg7vIg7/Dl5Oj47e7y7iDy+vDx5e3lIgpFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICBJRFNfRVJST1IJCSAgICAiw/Dl+OrgIgogICAgSURTX0JBRF9LRVkJCSAgICAix+D/4urg8uAg5+Ag6uv+9yAnJXMnIO3l8/Hv5fjt4CIKICAgIElEU19CQURfVkFMVUUgICAgICAgICAgICLH4P/i6uDy4CDn4CDx8u7p7e7x8iAnJXMnIO3l8/Hv5fjt4CIKICAgIElEU19VTlNVUFBPUlRFRF9UWVBFICAgICLN5SDs7ublIOTgIPDl5ODq8ujw4PLlIOrr/vfu4uUg7vIg8u7n6CDy6O8gKCVsZCkiCiAgICBJRFNfVE9PX0JJR19WQUxVRSAgICAgICAi0fLu6e3u8fLy4CDlIO/w5erg6+Xt7iDj7uv/7OAgKCVsZCkiCiAgICBJRFNfREVMRVRFX0JPWF9USVRMRSAgICAiz+7y4vrw5OXy5SDo5/Lw6OLg7eXy7iDt4CDx8u7p7e7x8vLgIgogICAgSURTX0RFTEVURV9CT1hfVEVYVCAgICAgIs3g6PHy6O3gIOvoIOjx6uDy5SDk4CDo5/Lw6OXy5SDx8u7p7e7x8vLgICclcyc/IgogICAgSURTX05FV0tFWSAgICAgICAgICAgICAgIs3u4iDq6/73ICMlZCIKICAgIElEU19ORVdWQUxVRSAgICAgICAgICAgICLN7uLgIPHy7unt7vHyICMlZCIKRU5ECgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgovKgogKiBURVhUSU5DTFVERQogKi8KCjEgVEVYVElOQ0xVREUgRElTQ0FSREFCTEUKQkVHSU4KICAgICJyZXNvdXJjZS5oXDAiCkVORAoKCgovKgogKiBTdHJpbmcgVGFibGUKICovCgovKgogKlNUUklOR1RBQkxFIERJU0NBUkRBQkxFCiAqQkVHSU4KICogICAgSURfSEVMUF9IRUxQVE9QSUNTICAgICAgIk9wZW5zIFJlZ2lzdHJ5IEVkaXRvciBIZWxwLiIKICogICAgSURfSEVMUF9BQk9VVCAgICAgICAgICAgIkRpc3BsYXlzIHByb2dyYW0gaW5mb3JtYXRpb24sIHZlcnNpb24gbnVtYmVyLCBhbmQgY29weXJpZ2h0LiIKICpFTkQKICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCg==