IC8qCiAqIENvcHlyaWdodCAyMDA0IGJ5IEtyenlzenRvZiBGb2x0bWFuCiAqIENvcHlyaWdodCAyMDA2LDIwMDcgYnkgWXVuU29uZyBId2FuZwogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgoKTEFOR1VBR0UgTEFOR19LT1JFQU4sIFNVQkxBTkdfTkVVVFJBTAoKSURNX01BSU5NRU5VIE1FTlUgRElTQ0FSREFCTEUKQkVHSU4KICAgIFBPUFVQICLGxMDPKCZGKSIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIrv1IMbEwM8oJk4pLi4uXHRDdHJsK04iLCAgICAgICAgICBJRF9GSUxFX05FVwogICAgICAgIE1FTlVJVEVNICK/rbHiKCZPKS4uLlx0Q3RybCtPIiwgICAgICBJRF9GSUxFX09QRU4KICAgICAgICBNRU5VSVRFTSAiwPrA5SgmUylcdEN0cmwrUyIsICAgICAgICAgSURfRklMRV9TQVZFCiAgICAgICAgTUVOVUlURU0gIrTZuKUgwMy4p8C4t84gwPrA5SgmQSkuLi4iLCBJRF9GSUxFX1NBVkVBUwogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICLAzrziKCZQKSAuIC4gLlx0Q3RybCtQIiwgICAgSURfUFJJTlQKICAgICAgICBNRU5VSVRFTSAiwM684iC5zLiuurix4igmVykgLiAuIC4iLCAgICBJRF9QUkVWSUVXCiAgICAgICAgTUVOVUlURU0gIiDAzrziILyzwaQoJkUpIC4gLiAuIiwgICAgICAgSURfUFJJTlRTRVRVUAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICKzqrChseIoJlgpIiwgICAgICAgICBJRF9GSUxFX0VYSVQKICAgIEVORAogICAgUE9QVVAgIsbtwf0oJkUpIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAitce1ubiuseIoJlUpXHRDdHJsK1oiLCAgICAgICAgICAgICAgIElEX0VESVRfVU5ETwogICAgICAgIE1FTlVJVEVNICK02b3DIL3Hx+AoJkUpXHRDdHJsK1kiLCAgICAgICAgICAgICAgIElEX0VESVRfUkVETwogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICLA37bzs7ux4igmVClcdEN0cmwrWCIsICAgICAgICAgICAgICAgIElEX0VESVRfQ1VUCiAgICAgICAgTUVOVUlURU0gIrq5u+coJkMpXHRDdHJsK0MiLCAgICAgICAgICAgICAgIElEX0VESVRfQ09QWQogICAgICAgIE1FTlVJVEVNICK62b+ps9ax4igmUClcdEN0cmwrViIsICAgICAgICAgICAgICBJRF9FRElUX1BBU1RFCiAgICAgICAgTUVOVUlURU0gIsH2v+yx4igmQylcdERFTCIsICAgICAgICAgICAgICAgICBJRF9FRElUX0NMRUFSCiAgICAgICAgTUVOVUlURU0gIrjwtc4gvLHFwygmUylcdEN0cmwrQSIsICAgICAgICAgSURfRURJVF9TRUxFQ1RBTEwKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiw6Ox4igmRikuIC4gLlx0Q3J0bCtGIiwgICAgICAgICBJRF9GSU5ECiAgICAgICAgTUVOVUlURU0gIrTZwL0gw6Ox4igmTilcdEYzIiwgICAgICAgICAgICAgIElEX0ZJTkRfTkVYVAoJTUVOVUlURU0gIiC52bLZseIoJlIpIC4gLiAuXHRDdHJsK0giLCAgICAgIElEX1JFUExBQ0UKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiwNCx4iDA/L/rKCZPKSIsICAgICAgICAgICAgICAgICAgSURfRURJVF9SRUFET05MWQogICAgICAgIE1FTlVJVEVNICK89sGkILChtMkoJk0pIiwgICAgICAgICAgICAgICAgICAgSURfRURJVF9NT0RJRklFRAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIFBPUFVQICKx4sW4KCZYKSIKICAgICAgICBCRUdJTgogICAgICAgICAgICBNRU5VSVRFTSAivLHFwyC/tb+qIMGkurgoJkkpIiwgICAgICAgICAgICAgSURfRURJVF9TRUxFQ1RJT05JTkZPCiAgICAgICAgICAgIE1FTlVJVEVNICK5rsDaIMf8vcQoJkYpIiwgICAgICAgICAgIElEX0VESVRfQ0hBUkZPUk1BVAogICAgICAgICAgICBNRU5VSVRFTSAiwaTAx7XIILmuwNq/rSDH/L3EKCZEKSIsICAgICAgICAgICBJRF9FRElUX0RFRkNIQVJGT1JNQVQKICAgICAgICAgICAgTUVOVUlURU0gIrTctvQgx/y9xCgmSCkiLCAgICAgICAgICAgSURfRURJVF9QQVJBRk9STUFUCiAgICAgICAgICAgIE1FTlVJVEVNICLF2L26xq4gvvKx4igmRykiLCAgICAgICAgICAgICAgICAgICBJRF9FRElUX0dFVFRFWFQKICAgICAgICBFTkQKICAgIEVORAogICAgUE9QVVAgIrq4seIoJlYpIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAitbWxuLnZKCZUKSIsICAgICAgICBJRF9UT0dHTEVfVE9PTEJBUgogICAgICAgIE1FTlVJVEVNICLH/L3EudkoJkYpIiwgICAgICBJRF9UT0dHTEVfRk9STUFUQkFSCiAgICAgICAgTUVOVUlURU0gIiZSdWxlciIsICAgICAgICAgIElEX1RPR0dMRV9SVUxFUgogICAgICAgIE1FTlVJVEVNICK788XCudkoJlMpIiwgICAgICBJRF9UT0dHTEVfU1RBVFVTQkFSCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiC/ybzHKCZPKSAuIC4gLiIsICBJRF9WSUVXUFJPUEVSVElFUwogICAgRU5ECiAgICBQT1BVUCAiwf2+7rPWseIoJkkpIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAis6/Cpb/NIL3DsKMoJkQpIC4gLiAuIiwgIElEX0RBVEVUSU1FCiAgICBFTkQKICAgIFBPUFVQICLH/L3EKCZPKSIKICAgIEJFR0lOCglNRU5VSVRFTSAisduywygmRikgLiAuIC4iLCAgICAgICAgICAgICAgICAgIElEX0ZPTlRTRVRUSU5HUwogICAgICAgIE1FTlVJVEVNICKwrcG2IMGhKCZVKSIgICAgICAgICAgICAgICAgSURfQlVMTEVUCiAgICAgICAgTUVOVUlURU0gIrTctvQoJlApIC4gLiAuIiAgICAgICAgICAgICAgSURfUEFSQUZPUk1BVAogICAgICAgIE1FTlVJVEVNICLFxygmVCkgLiAuIC4iICAgICAgICAgICAgICAgICAgIElEX1RBQlNUT1BTCiAgICAgICAgUE9QVVAgIrnosOYoJkIpIgogICAgICAgIEJFR0lOCiAgICAgICAgICAgIE1FTlVJVEVNICK9w726xdsoJlMpXHRDdHJsKzEiLCAgICAgICAgIElEX0JBQ0tfMQogICAgICAgICAgICBNRU5VSVRFTSAis+u2+7v2wLi3zigmUClcdEN0cmwrMiIsICAgICAgICAgICBJRF9CQUNLXzIKICAgICAgICBFTkQKICAgIEVORAogICAgUE9QVVAgIrW1v/K4uygmSCkiCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICK/9rXlxtC15SDBpLq4KCZBKSIgICAgICAgSURfQUJPVVQKICAgIEVORApFTkQKCklETV9QT1BVUCBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCiAgICBQT1BVUCAiIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiwN+287O7seIoJlQpIiwgICAgICAgICAgSURfRURJVF9DVVQKICAgICAgICBNRU5VSVRFTSAiurm75ygmQykiLCAgICAgICAgICAgICBJRF9FRElUX0NPUFkKICAgICAgICBNRU5VSVRFTSAiutm/qbPWseIoJlApIiwgICAgICAgICAgSURfRURJVF9QQVNURQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICKwrcG2waEoJkIpIiAgICAgICAgSURfQlVMTEVUCiAgICAgICAgTUVOVUlURU0gIrTctvQoJlApIC4gLiAuIiAgICAgIElEX1BBUkFGT1JNQVQKICAgIEVORApFTkQKCklERF9EQVRFVElNRSBESUFMT0cgRElTQ0FSREFCTEUgMzAsIDIwLCAxMzAsIDgwClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICKzr8Klv80gvcOwoyIKRk9OVCAxMCwgIk1TIFNoZWxsIERsZyIKQkVHSU4KICAgIExURVhUICAgICAgICAisKG0ycfRIMf8vcQiLDAsMywyLDEwMCwxNQogICAgTElTVEJPWCAgICAgIElEQ19EQVRFVElNRSwzLDEyLDgwLDY1LExCU19OT0lOVEVHUkFMSEVJR0hUCiAgICBQVVNIQlVUVE9OICAgIsiuwM4oJk8pIixJRE9LLDg3LDEyLDQwLDEyCiAgICBQVVNIQlVUVE9OICAgIsPrvNIoJkMpIixJRENBTkNFTCw4NywyNiw0MCwxMgpFTkQKCklERF9ORVdGSUxFIERJQUxPRyBESVNDQVJEQUJMRSAzMCwgMjAsIDE0MCwgODAKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIrv1ILmuvK0iCkZPTlQgMTAsICJNUyBTaGVsbCBEbGciCkJFR0lOCiAgICBMVEVYVCAgICAgICAgIrv1ILmuvK0gx/y9xCIsMCwzLDIsMTAwLDE1CiAgICBMSVNUQk9YICAgICAgSURDX05FV0ZJTEUsMywxMiw5MCw2NSxMQlNfTk9JTlRFR1JBTEhFSUdIVAogICAgUFVTSEJVVFRPTiAgICLIrsDOKCZPKSIsSURPSyw5NywxMiw0MCwxMgogICAgUFVTSEJVVFRPTiAgICLD67zSKCZDKSIsSURDQU5DRUwsOTcsMjYsNDAsMTIKRU5ECgpJRERfUEFSQUZPUk1BVCBESUFMT0cgRElTQ0FSREFCTEUgMzAsIDIwLCAyMDAsIDExMApTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ2FwdGlvbiAitNy29CDH/L3EIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCkJFR0lOCiAgICBHUk9VUEJPWCAitem/qb6yseIiLCAwLCAxMCwgMTAsIDEyMCwgNjgKICAgIExURVhUICK/3sLKIiwgMCwgMTUsIDIyLCA0MCwgMTMKICAgIEVESVRURVhUIElEQ19QQVJBX0xFRlQsIDU1LCAyMCwgNjAsIDEzCiAgICBMVEVYVCAiv8C4pcLKIiwgMCwgMTUsIDQwLCA0MCwgMTMKICAgIEVESVRURVhUIElEQ19QQVJBX1JJR0hULCA1NSwgMzgsIDYwLCAxMwogICAgTFRFWFQgIsO5wrAgwdkiLCAwLCAxNSwgNTgsIDQwLCAxMwogICAgRURJVFRFWFQgSURDX1BBUkFfRklSU1QsIDU1LCA1NiwgNjAsIDEzCiAgICBMVEVYVCAiwaS3xCIsIDAsIDE1LCA4NywgNDAsIDEzCiAgICBDT01CT0JPWCBJRENfUEFSQV9BTElHTiwgNTUsIDg1LCA2MCwgMTMsIENCU19EUk9QRE9XTkxJU1QKICAgIFBVU0hCVVRUT04gIsiuwM4oJk8pIiwgSURPSywgMTM3LCAxNSwgNTAsIDE1CiAgICBQVVNIQlVUVE9OICLD67zSKCZDKSIsIElEQ0FOQ0VMLCAxMzcsIDMzLCA1MCwgMTUKRU5ECgpJRERfVEFCU1RPUFMgRElBTE9HIERJU0NBUkRBQkxFIDMwLCAyMCwgMjAwLCAxMTAKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNhcHRpb24gIsXHIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCkJFR0lOCiAgICBHUk9VUEJPWCAixccgwaTB9iIsIDAsIDEwLCAxMCwgMTIwLCA5MAogICAgQ09NQk9CT1ggSURDX1RBQlNUT1BTLCAyMCwgMjAsIDEwMCwgNjAsIENCU19TSU1QTEUgfCBDQlNfU09SVAogICAgREVGUFVTSEJVVFRPTiAitPXHz7HiKCZBKSIsIElEX1RBQl9BREQsIDIwLCA4MCwgNDUsIDE1CiAgICBQVVNIQlVUVE9OICLB9r/sseIoJlIpIiwgSURfVEFCX0RFTCwgNzIsIDgwLCA0NSwgMTUKICAgIFBVU0hCVVRUT04gIsiuwM4oJk8pIiwgSURPSywgMTM3LCAxNSwgNTAsIDE1CiAgICBQVVNIQlVUVE9OICLD67zSKCZDKSIsIElEQ0FOQ0VMLCAxMzcsIDMzLCA1MCwgMTUKICAgIFBVU0hCVVRUT04gIrjwtc4gwfa/7LHiKCZMKSIsIElEX1RBQl9FTVBUWSwgMTM3LCA1MSwgNTAsIDE1CkVORAoKSUREX0ZPUk1BVE9QVFMgRElBTE9HIERJU0NBUkRBQkxFIDAsIDAsIDI4MCwgMTEwClNUWUxFIERTX1NZU01PREFMCkNhcHRpb24gIiIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpCRUdJTgogICAgR1JPVVBCT1ggIsHZILPRseKx4iIsIDAsIDEwLCAxMCwgMTMwLCA4NQogICAgUkFESU9CVVRUT04gIsOiILChwOXA2riuvK0gILHbILPRseKx4igmVykiLCBJRENfUEFHRUZNVF9XVywgMTgsIDI1LCAxMTcsIDE1CiAgICBSQURJT0JVVFRPTiAisKHA5cDauK6/obytIMHZILPRseKx4igmTSkiLCBJRENfUEFHRUZNVF9XTSwgMTgsIDQ1LCAxMTcsIDE1CiAgICBHUk9VUEJPWCAiILW1sbi52SIsIDAsIDE1MCwgMTAsIDEyMCwgODUKICAgIENIRUNLQk9YICK1tbG4udkoJlQpIiwgSURDX1BBR0VGTVRfVEIsIDE2MCwgMjAsIDgwLCAxNQogICAgQ0hFQ0tCT1ggIsf8vcS52SgmRikiLCBJRENfUEFHRUZNVF9GQiwgMTYwLCAzOCwgODAsIDE1CiAgICBDSEVDS0JPWCAiJlJ1bGVyIiwgSURDX1BBR0VGTVRfUlUsIDE2MCwgNTYsIDgwLCAxNQogICAgQ0hFQ0tCT1ggIrvzxcK52SgmUykiLCBJRENfUEFHRUZNVF9TQiwgMTYwLCA3NCwgODAsIDE1CiAgICBMVEVYVCAiIiwgSURDX1BBR0VGTVRfSUQsIDAsMCwwLDAKRU5ECgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQpCRUdJTgogICAgU1RSSU5HX1JJQ0hURVhUX0ZJTEVTX1JURiwgICAgICK4rsShIMXYvbrGriDGxMDPx/y9xCAoKi5ydGYpIgogICAgU1RSSU5HX1RFWFRfRklMRVNfVFhULCAgICAgICAgICLF2L26xq4gxsTAzyAoKi50eHQpIgogICAgU1RSSU5HX1RFWFRfRklMRVNfVU5JQ09ERV9UWFQsICLAr7TPxNq15SDF2L26xq4gua68rSgqLnR4dCkiCiAgICBTVFJJTkdfQUxMX0ZJTEVTLCAgICAgICAgICAgICAgIrjwtecgua68rSAoKi4qKSIKRU5ECgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQpCRUdJTgogICAgU1RSSU5HX0FMSUdOX0xFRlQsICAgICAgICAgICAgIr/ewsoiCiAgICBTVFJJTkdfQUxJR05fUklHSFQsICAgICAgICAgICAiv8C4pcLKIgogICAgU1RSSU5HX0FMSUdOX0NFTlRFUiwgICAgICAgICAgIrChv+61pSIKRU5ECgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQpCRUdJTgogICAgU1RSSU5HX1BSSU5URVJfRklMRVNfUFJOLCAgICAgICAgIsfBuLDFzSDGxMDPICgqLlBSTikiCkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIFNUUklOR19WSUVXUFJPUFNfVElUTEUsICAgICAgICAgICK/ybzHIgogICAgU1RSSU5HX1ZJRVdQUk9QU19URVhULCAgICAgICAgICAgIsXYvbrGriIKICAgIFNUUklOR19WSUVXUFJPUFNfUklDSFRFWFQsICAgICAgICK4rsShIMXYvbrGriIKRU5ECgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQpCRUdJTgogICAgU1RSSU5HX1BSRVZJRVdfUFJJTlQsICAgICAgICAgICAgIsDOvOIiCiAgICBTVFJJTkdfUFJFVklFV19ORVhUUEFHRSwgICAgICAgICAitNnAvSDG5MDMwfYiCiAgICBTVFJJTkdfUFJFVklFV19QUkVWUEFHRSwgICAgICAgICAiwMzA/CDG5MDMwfYiCiAgICBTVFJJTkdfUFJFVklFV19DTE9TRSwgICAgICAgICAgICAitN2x4iIKRU5ECgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQpCRUdJTgogICAgU1RSSU5HX1VOSVRTX0NNLCAgICAgICAgICAgICAiY20iCkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIFNUUklOR19ERUZBVUxUX0ZJTEVOQU1FLCAgICAgIrmuvK0iCiAgICBTVFJJTkdfUFJPTVBUX1NBVkVfQ0hBTkdFUywgICInJXMnwMcgudmy7yCwzcC7IMD6wOXHz7DavcC0z7HuPyIKICAgIFNUUklOR19TRUFSQ0hfRklOSVNIRUQsICAgICAgIrmuvK2/obytIMOjseIgs6EuIgogICAgU1RSSU5HX0xPQURfUklDSEVEX0ZBSUxFRCwgICAiuK7EocXYvbrGriC288DMuuq3r7iuILrSt6+/wLHiIL3HxtAuIgogICAgU1RSSU5HX1NBVkVfTE9TRUZPUk1BVFRJTkcsICAitOe9xcC6ILq4xesgxdi9usauIMf8vcTAuLfOIMD6wOXHz7HiuKYgvLHFw8ffvcC0z7TZLCAiIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIsDMsM3AuiDGr7z2x9Egstm50sC7IL74v6QgsM3A1LTPtNkuICIgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAitOe9xcC6IMGkuLu3ziDA+sDlx8+x4rimIL/4x9W0z7HuPyIKICAgIFNUUklOR19JTlZBTElEX05VTUJFUiwgICAgICAgIr/Dudm4o8H2IL7KwLogvPYgx/y9xCIKICAgIFNUUklOR19PTEVfU1RPUkFHRV9OT1RfU1VQUE9SVEVELCAiT0xFIMD6wOUgua68rbTCIMH2v/i1x8H2IL7KvcC0z7TZIgpFTkQK