LyoKICogQ29weXJpZ2h0IDIwMDEgRXJpYyBQb3VlY2gKICogQ29weXJpZ2h0IDIwMDUsMjAwNyBZdW5Tb25nIEh3YW5nCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCiNpbmNsdWRlICJ3aW5lY29uc29sZV9yZXMuaCIKCkxBTkdVQUdFIExBTkdfS09SRUFOLCBTVUJMQU5HX0RFRkFVTFQKClNUUklOR1RBQkxFCkJFR0lOCklEU19FRElULAkJIsbtwf0oJkUpIgpJRFNfREVGQVVMVCwJCSKx4rq7wLi3ziC8s8GkKCZEKSIKSURTX1BST1BFUlRJRVMsCQkivNO8uigmUCkiCklEU19NQVJLLAkJIiZNYXJrIgpJRFNfQ09QWSwJCSK6ubvnKCZDKSIKSURTX1BBU1RFLAkJIrrZv6mz1rHiKCZQKSIKSURTX1NFTEVDVEFMTCwJCSK48LXOILyxxcMoJlMpIgpJRFNfU0NST0xMLAkJIr26xam30SgmUikiCklEU19TRUFSQ0gsCQkiw6Ox4igmRSkiCklEU19GTlRfRElTUExBWSwJIrCisKLAxyCx28DatMIgJWxkICDHyLy/ILPKuvG/oSAlbGQgx8i8vyCz9MDMuKYgsKHB/bTPtNkiCklEU19GTlRfUFJFVklFVywJIsDMsM3AuiDF1726xq7A1LTPtNkiCklEU19ETEdfVElUX0RFRkFVTFQsICAgICK8s8ShIC0gseK6uyC8s8GkIgpJRFNfRExHX1RJVF9DVVJSRU5ULCAgICAivLPEoSAtIMf2wOcgvLPBpCIKSURTX0RMR19USVRfRVJST1IsCSK8s8GkIL+ht68iCklEU19ETEdfRVJSX1NCV0lOU0laRSwgCSK9usWpuLAgufbG2yDFqbHitMIgud215b3DIMOiuri02SCwsLDFs6ogxL++38fVtM+02S4iCgpJRFNfQ01EX0lOVkFMSURfRVZFTlRfSUQgICJ3aW5lY29uc29sZTogwMy6pcauIGlkuKYgutm/qSCz1sC7ILz2IL74vcC0z7TZXG4iCklEU19DTURfSU5WQUxJRF9CQUNLRU5EICAgICJ3aW5lY29uc29sZTogv8O52bijwfYgvsrAuiC56b+jteVcbiIKSURTX0NNRF9JTlZBTElEX09QVElPTiAgICAid2luZWNvbnNvbGU6IMDMx9jH0rz2IL74tMIguO23ySC288DOIL/JvMdcbiIKSURTX0NNRF9BQk9VVCAgICAgICAgICAgICAgIldpbmUgxNy81r+hvK0gx8G3zrHXt6UgvcPA21xuIgpJRFNfQ01EX0xBVU5DSF9GQUlMRUQgICAgICAid2luZWNvbnNvbGU6IMeusde4siAlcyC9w8DbIL3HxtAuXG4iXAogICAgICAgICAgICAgICAgICAgICAgICAgICAiwMwguO23ycC6IL/Dudm4o8H2IL7KvcC0z7TZLlxuIgoKSURTX1VTQUdFX0hFQURFUiAgICAgICAgICAgIlxuu+e/67n9OlxuICB3aW5lY29uc29sZSBbv8m8x10gPLjtt8k+XG5cbr/JvMc6XG4iCklEU19VU0FHRV9CQUNLRU5EICAgICAgICAgICIgIC0tYmFja2VuZD17dXNlcnxjdXJzZXN9ICC757/rwNqwoSC79SDDosC7IL+tILDNwM7B9ixcbiJcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc2VzsKEgV2luZSDE3LzWw7O3syDH9sDnIMXNucyzzr+hICCzqsW4s74gsM3AzsH2ILyxxcNcbiIKSURTX1VTQUdFX0NPTU1BTkQgICAgICAgICAgIiAgPLjtt8k+ICAgICAgICAgICAgICAgICBUaGUgV2luZSDHwbfOsde3pcC6IMTcvNbAuyDF68fYvK0gvcPA27XKXG4iCklEU19VU0FHRV9GT09URVIgICAgICAgICAgICJcbr+5OlxuICB3aW5lY29uc29sZSBjbWRcbldpbmUgxNy81r+hvK0gV2luZSC47bfJIMfBt9LHwcauIL3DwNtcblxuIgoKRU5ECgpJRERfT1BUSU9OIERJQUxPRyAzNiwgMjQsIDE0MCwgMTA1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIiC/ybzHICIKRk9OVCA5LCAiTVMgU2hlbGwgRGxnIgp7CglHUk9VUEJPWCAixL+8rSDFqbHiIiwgLTEsIDEwLCAxMSwgNjAsIDQ0LCBCU19HUk9VUEJPWAoJQVVUT1JBRElPQlVUVE9OICLA27DUKCZTKSIsIElEQ19PUFRfQ1VSU09SX1NNQUxMLCAxNCwgMjMsIDQ0LCAxMCwgV1NfVEFCU1RPUAoJQVVUT1JBRElPQlVUVE9OICLB37CjKCZNKSIsIElEQ19PUFRfQ1VSU09SX01FRElVTSwgMTQsIDMzLCA0NCwgMTAsIFdTX1RBQlNUT1AKCUFVVE9SQURJT0JVVFRPTiAixamw1CgmTCkiLCBJRENfT1BUX0NVUlNPUl9MQVJHRSwgMTQsIDQzLCA0NCwgMTAsIFdTX1RBQlNUT1AKCglHUk9VUEJPWCAixMHGrrfRIiwgLTEsIDc1LCAxMSwgMTI1LCA0NCwgQlNfR1JPVVBCT1gKCUxURVhUICLGy773ILjetLoiLCAtMSwgNzksIDIzLCA0MCwgMTAKCUFVVE9DSEVDS0JPWCAixMHGrrfRKCZDKSIsIElEQ19PUFRfQ09ORl9DVFJMLCAxMjksIDIzLCA2MCwgMTAsIFdTX1RBQlNUT1AKCUFVVE9DSEVDS0JPWCAivazHwcauKCZIKSIsIElEQ19PUFRfQ09ORl9TSElGVCwgMTI5LCAzMywgNjAsIDEwLCBXU19UQUJTVE9QCglMVEVYVCAiuvy4pSDG7cH9IiwgLTEsIDc5LCA0MywgNTAsIDEwCglBVVRPQ0hFQ0tCT1ggIrChtMkoJkUpIiwgSURDX09QVF9RVUlDS19FRElULCAxMjksIDQzLCA2MCwgMTAsIFdTX1RBQlNUT1AKCglHUk9VUEJPWCAiuO23ySDI9726xeS4riIsIC0xLCAxMCwgNTcsIDE5MCwgMzUsIEJTX0dST1VQQk9YCglMVEVYVCAitNm9wyC6zrijtMIguO23ycDHILC5vPYoJk4pOiIsIC0xLCAxNCwgNjcsIDc4LCAxOAoJRURJVFRFWFQgSURDX09QVF9ISVNUX1NJWkUsIDkyLCA2OSwgMzEsIDEyLCBXU19UQUJTVE9QfFdTX0JPUkRFUnxFU19OVU1CRVIKCUNPTlRST0wgIiIsIElEQ19PUFRfSElTVF9TSVpFX1VELCAibXNjdGxzX3VwZG93bjMyIiwgVURTX1NFVEJVRERZSU5UfFVEU19BTElHTlJJR0hUfFVEU19BVVRPQlVERFl8VURTX0FSUk9XS0VZU3xVRFNfTk9USE9VU0FORFMsIDAsIDAsIDAsIDAKCUFVVE9DSEVDS0JPWCAitc65+CAgwaawxSgmUikiLCBJRENfT1BUX0hJU1RfTk9ET1VCTEUsIDEzMCwgNjcsIDUwLCAxOCwgV1NfVEFCU1RPUHxCU19NVUxUSUxJTkUKfQoKSUREX0ZPTlQgRElBTE9HIDM2LCAyNCwgMTQwLCAxMDUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiILHbssMgIgpGT05UIDksICJNUyBTaGVsbCBEbGciCnsKCUxURVhUICKx27LDKCZGKSIsIC0xLCA1LCA1LCAyNCwgOAoJTElTVEJPWCBJRENfRk5UX0xJU1RfRk9OVCwgNSwgMTgsIDkwLCA0MiwgTEJTX1NPUlR8V1NfVlNDUk9MTAoJTFRFWFQgIrv2u/MoJkMpIiwgLTEsIDEwMCwgNSwgNTAsIDgKCUNPTlRST0wgIiIsIElEQ19GTlRfQ09MT1JfRkcsICJXaW5lQ29uQ29sb3JQcmV2aWV3IiwgMEwsIDEwMCwgMTgsIDQ4LCAxNgoJQ09OVFJPTCAiIiwgSURDX0ZOVF9DT0xPUl9CSywgIldpbmVDb25Db2xvclByZXZpZXciLCAwTCwgMTAwLCA0MCwgNDgsIDE2CglMVEVYVCAixamx4jsoJlMpIiwgLTEsIDE1OCwgNSwgNDAsIDgKCUxJU1RCT1ggSURDX0ZOVF9MSVNUX1NJWkUsIDE1OCwgMTgsIDQwLCA2MCwgV1NfVlNDUk9MTAoJQ09OVFJPTCAiIiwgSURDX0ZOVF9QUkVWSUVXLCAiV2luZUNvbkZvbnRQcmV2aWV3IiwgMEwsIDUsIDYwLCAxMDksIDQwCglMVEVYVCAiIiwgSURDX0ZOVF9GT05UX0lORk8sIDEyOCwgNzYsIDgwLCAxOAp9CgpJRERfQ09ORklHIERJQUxPRyAzNiwgMjQsIDE0MCwgMTA1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIiC8s8GkICIKRk9OVCA5LCAiTVMgU2hlbGwgRGxnIgp7CglHUk9VUEJPWCAiufbG2yDBuCIsIC0xLCAxMCwgMTEsIDEwMCwgNDIsIEJTX0dST1VQQk9YCglMVEVYVCAis8q68SgmVykgOiIsIC0xLCAxNCwgMjUsIDU0LCA5CglFRElUVEVYVCBJRENfQ05GX1NCX1dJRFRILCA2OCwgMjMsIDM2LCAxMiwgV1NfVEFCU1RPUHxXU19CT1JERVJ8RVNfTlVNQkVSCglDT05UUk9MICIiLCBJRENfQ05GX1NCX1dJRFRIX1VELCAibXNjdGxzX3VwZG93bjMyIiwgVURTX1NFVEJVRERZSU5UfFVEU19BTElHTlJJR0hUfFVEU19BVVRPQlVERFl8VURTX0FSUk9XS0VZU3xVRFNfTk9USE9VU0FORFMsIDAsIDAsIDAsIDAKCUxURVhUICKz9MDMKCZIKSA6IiwgLTEsIDE0LCAzOSwgNTQsIDkKCUVESVRURVhUIElEQ19DTkZfU0JfSEVJR0hULCA2OCwgMzcsIDM2LCAxMiwgV1NfVEFCU1RPUHxXU19CT1JERVJ8RVNfTlVNQkVSCglDT05UUk9MICIiLCBJRENfQ05GX1NCX0hFSUdIVF9VRCwgIm1zY3Rsc191cGRvd24zMiIsIFVEU19TRVRCVUREWUlOVHxVRFNfQUxJR05SSUdIVHxVRFNfQVVUT0JVRERZfFVEU19BUlJPV0tFWVN8VURTX05PVEhPVVNBTkRTLCAwLCAwLCAwLCAwCgoJR1JPVVBCT1ggIsOiIMWpseIiLCAtMSwgMTAsIDU1LCAxMDAsIDQyCglMVEVYVCAis8q68SgmSSkgOiIsIC0xLCAxNCwgNjksIDU0LCA5CglFRElUVEVYVCBJRENfQ05GX1dJTl9XSURUSCwgNjgsIDY3LCAzNiwgMTIsIFdTX1RBQlNUT1B8V1NfQk9SREVSfEVTX05VTUJFUgoJQ09OVFJPTCAiIiwgSURDX0NORl9XSU5fV0lEVEhfVUQsICJtc2N0bHNfdXBkb3duMzIiLCBVRFNfU0VUQlVERFlJTlR8VURTX0FMSUdOUklHSFR8VURTX0FVVE9CVUREWXxVRFNfQVJST1dLRVlTfFVEU19OT1RIT1VTQU5EUywgMCwgMCwgMCwgMAoJTFRFWFQgIrP0wMwoJkUpIDoiLCAtMSwgMTQsIDgzLCA1NCwgOQoJRURJVFRFWFQgSURDX0NORl9XSU5fSEVJR0hULCA2OCwgODEsIDM2LCAxMiwgV1NfVEFCU1RPUHxXU19CT1JERVJ8RVNfTlVNQkVSCglDT05UUk9MICIiLCBJRENfQ05GX1dJTl9IRUlHSFRfVUQsICJtc2N0bHNfdXBkb3duMzIiLCBVRFNfU0VUQlVERFlJTlR8VURTX0FMSUdOUklHSFR8VURTX0FVVE9CVUREWXxVRFNfQVJST1dLRVlTfFVEU19OT1RIT1VTQU5EUywgMCwgMCwgMCwgMAoKCUdST1VQQk9YICLHrrHXuLLAxyCzoSIsIC0xLCAxMTUsIDExLCA4MCwgNDIsIEJTX0dST1VQQk9YCglBVVRPQ0hFQ0tCT1ggIsTcvNYgtN2x4igmQykiLCBJRENfQ05GX0NMT1NFX0VYSVQsIDExOSwgMjUsIDcyLCAyMCwgV1NfVEFCU1RPUAoKCUdST1VQQk9YICK/obXwvMciLCAtMSwgMTE1LCA1NSwgODAsIDQyCglDT01CT0JPWCBJRENfQ05GX0VESVRJT05fTU9ERSwgMTE5LCA2OSwgNzIsIDIwLCBDQlNfRFJPUERPV05MSVNUfFdTX1ZTQ1JPTEx8V1NfVEFCU1RPUAp9CgpJRERfU0FWRV9TRVRUSU5HUyBESUFMT0cgMjAsIDIwLCAxNzAsIDYwClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04KQ0FQVElPTiAiIMTcvNYguMWws7qvvPYiCkZPTlQgOSwgIk1TIFNoZWxsIERsZyIKewoJR1JPVVBCT1ggIiIsIC0xLCAxMCwgMTAsIDE1MCwgMzEsIEJTX0dST1VQQk9YCglBVVRPUkFESU9CVVRUT04gIrOqwd/AxyC8vLzHwLsgwKfH2CC8s8GkILq4wbgiLCBJRENfU0FWX1NBVkUsIDE0LCAxNSwgMTQwLCAxMCwgV1NfVEFCU1RPUAoJQVVUT1JBRElPQlVUVE9OICK/wMH3IMf2wOfAxyC8vLzHuLgguq+w5iIsIElEQ19TQVZfU0VTU0lPTiwgMTQsIDI3LCAxNDAsIDEwLCBXU19UQUJTVE9QCgoJUFVTSEJVVFRPTiAiyK7AziIsIElET0ssIDM1LCA0NSwgMzUsIDEyCglQVVNIQlVUVE9OICLD67zSIiwgSURDQU5DRUwsIDgwLCA0NSwgMzUsIDEyCn0K