LyoKICogQ29weXJpZ2h0IDIwMDEgRXJpYyBQb3VlY2gKICogQ29weXJpZ2h0IDIwMDQgUGlvdHIgQ2FiYW4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19QT0xJU0gsIFNVQkxBTkdfREVGQVVMVAoKU1RSSU5HVEFCTEUKQkVHSU4KSURTX0VESVQsCQkiJkVkeXR1aiIKSURTX0RFRkFVTFQsCQkiVXN0YXcgJmRvbXmcbG5lIgpJRFNfUFJPUEVSVElFUywJCSImVXN0YXdpZW5pYSIKSURTX01BUkssCQkiJlphem5hY3oiCklEU19DT1BZLAkJIiZLb3BpdWoiCklEU19QQVNURSwJCSImV2tsZWoiCklEU19TRUxFQ1RBTEwsCQkiWiZhem5hY3ogd3N6eXN0a28iCklEU19TQ1JPTEwsCQkiJlByemV3aWphaiIKSURTX1NFQVJDSCwJCSJTeiZ1a2FqIgpJRFNfRk5UX0RJU1BMQVksCSJLYb9keSB6bmFrIG1hIHN6ZXJva2+c5iAlbGQgaSB3eXNva2+c5iAlbGQgcHVua3TzdyIKSURTX0ZOVF9QUkVWSUVXXzEsCSJUbyBqZXN0IHRlc3QiCklEU19GTlRfUFJFVklFV18yLAkiIgpJRFNfRExHX1RJVF9ERUZBVUxULCAgICAiU2V0dXAgLSBEb215nGxuZSB1c3Rhd2llbmlhIgpJRFNfRExHX1RJVF9DVVJSRU5ULCAgICAiU2V0dXAgLSBXeWJyYW5lIHVzdGF3aWVuaWEiCklEU19ETEdfVElUX0VSUk9SLAkiQrO5ZCBrb25maWd1cmFjamkiCklEU19ETEdfRVJSX1NCV0lOU0laRSwJIldpZWxrb5zmIGJ1Zm9yYSBla3JhbnUgbXVzaSBieeYgd2nqa3N6YSBuab8gd2llbGtvnOYgYnVmb3JhIG9rbmEuIgoKSURTX0NNRF9JTlZBTElEX0VWRU5UX0lEICAgIndpbmVjb25zb2xlOiBas3kgZm9ybWF0ICdldmVudCBpZCdcbiIKSURTX0NNRF9JTlZBTElEX0JBQ0tFTkQgICAgIndpbmVjb25zb2xlOiBOaWV3s2GcY2l3YSB3YXJ0b5zmIG9wY2ppICdiYWNrZW5kJ1xuIgpJRFNfQ01EX0lOVkFMSURfT1BUSU9OICAgICAid2luZWNvbnNvbGU6IE5pZXpuYW5hIG9wY2phIG5hIGxpbmlpIHBvbGVjZfFcbiIKSURTX0NNRF9BQk9VVCAgICAgICAgICAgICAgIlVydWNoYW1pYSBwcm9ncmFtIHcga29uc29saSBXaW5lXG4iCklEU19DTURfTEFVTkNIX0ZBSUxFRCAgICAgICJ3aW5lY29uc29sZTogTmllIHVkYbNvIHNp6iB1cnVjaG9taeYgcHJvZ3JhbXUgJXMuXG4iXAogICAgICAgICAgICAgICAgICAgICAgICAgICAiUG9sZWNlbmllIGplc3Qgbmlld7NhnGNpd2UuXG4iCgpJRFNfVVNBR0VfSEVBREVSICAgICAgICAgICAiXG5Vv3ljaWU6XG4gIHdpbmVjb25zb2xlIFtvcGNqZV0gPHBvbGVjZW5pZT5cblxuT3BjamU6XG4iCklEU19VU0FHRV9CQUNLRU5EICAgICAgICAgICIgIC0tYmFja2VuZD17dXNlcnxuY3Vyc2VzfSAgV3li83IgJ3VzZXInIHNwb3dvZHVqZSB3eZx3aWV0bGVuaWUgbm93ZWdvIG9rbmEsICduY3Vyc2VzJ1xuIlwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcHLzYnVqZSBwcnplcm9iaeYgYWt0dWFsbmllIHW/eXdhbnkgdGVybWluYWwgbmEga29uc29s6iBXaW5lXG4iCklEU19VU0FHRV9DT01NQU5EICAgICAgICAgICIgIDxwb2xlY2VuaWU+ICAgICAgICAgICAgICAgUHJvZ3JhbSBXaW5lIGt083J5IG5hbGW/eSB1cnVjaG9taeZcbiIKSURTX1VTQUdFX0ZPT1RFUiAgICAgICAgICAgIlxuUHJ6eWuzYWQ6XG4gIHdpbmVjb25zb2xlIGNtZFxuVXJ1Y2hhbWlhIHdpZXJzeiBwb2xlY2XxIFdpbmUgdyBrb25zb2xpIFdpbmVcblxuIgoKRU5ECgpJRERfT1BUSU9OIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMTQwLCAxMTEKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiIE9wY2plICIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CglHUk9VUEJPWCAiV2llbGtvnOYga3Vyc29yYSIsIC0xLCAxMCwgMTEsIDYwLCA1MCwgQlNfR1JPVVBCT1gKCUFVVE9SQURJT0JVVFRPTiAiJk1hs2EiLCBJRENfT1BUX0NVUlNPUl9TTUFMTCwgMTcsIDIzLCA0NCwgMTAsIFdTX1RBQlNUT1AKCUFVVE9SQURJT0JVVFRPTiAijCZyZWRuaWEiLCBJRENfT1BUX0NVUlNPUl9NRURJVU0sIDE3LCAzMywgNDQsIDEwLCBXU19UQUJTVE9QCglBVVRPUkFESU9CVVRUT04gIiZEdb9hIiwgSURDX09QVF9DVVJTT1JfTEFSR0UsIDE3LCA0MywgNDQsIDEwLCBXU19UQUJTVE9QCgoJR1JPVVBCT1ggIktvbnRyb2xhIiwgLTEsIDc1LCAxMSwgMTI1LCA1MCwgQlNfR1JPVVBCT1gKCUxURVhUICJNZW51IGtvbnRla3N0b3dlIiwgLTEsIDc5LCAyMywgNDUsIDIwCglBVVRPQ0hFQ0tCT1ggIiZDb250cm9sIiwgSURDX09QVF9DT05GX0NUUkwsIDEyOSwgMjMsIDYwLCAxMCwgV1NfVEFCU1RPUAoJQVVUT0NIRUNLQk9YICJTJmhpZnQiLCBJRENfT1BUX0NPTkZfU0hJRlQsIDEyOSwgMzMsIDYwLCAxMCwgV1NfVEFCU1RPUAoJTFRFWFQgIlN6eWJrYSBlZHljamEiLCAtMSwgNzgsIDQ5LCA1MCwgMTAKCUFVVE9DSEVDS0JPWCAiJlVkb3N06nBuaWoiLCBJRENfT1BUX1FVSUNLX0VESVQsIDEyOCwgNDksIDYwLCAxMCwgV1NfVEFCU1RPUAoKCUdST1VQQk9YICJIaXN0b3JpYSBwb2xlY2XxIiwgLTEsIDEwLCA2MywgMTkwLCAzNSwgQlNfR1JPVVBCT1gKCUxURVhUICImSWxvnOYgcG9sZWNl8Swga3TzcmUgbW+/bmEgcHJ6eXdvs2HmOiIsIC0xLCAxNCwgNzMsIDY4LCAxOAoJRURJVFRFWFQgSURDX09QVF9ISVNUX1NJWkUsIDgyLCA3NywgMzEsIDEyLCBXU19UQUJTVE9QfFdTX0JPUkRFUnxFU19OVU1CRVIKCUNPTlRST0wgIiIsIElEQ19PUFRfSElTVF9TSVpFX1VELCAibXNjdGxzX3VwZG93bjMyIiwgVURTX1NFVEJVRERZSU5UfFVEU19BTElHTlJJR0hUfFVEU19BVVRPQlVERFl8VURTX0FSUk9XS0VZU3xVRFNfTk9USE9VU0FORFMsIDAsIDAsIDAsIDAKCUFVVE9DSEVDS0JPWCAiJlVzdfEgcG93dPNya2kiLCBJRENfT1BUX0hJU1RfTk9ET1VCTEUsIDEzMCwgNzMsIDYwLCAxOCwgV1NfVEFCU1RPUHxCU19NVUxUSUxJTkUKfQoKSUREX0ZPTlQgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMzYsIDI0LCAxNDAsIDEwNQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICIgQ3pjaW9ua2EgIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKCUxURVhUICImQ3pjaW9ua2EiLCAtMSwgNSwgNSwgMjQsIDgKCUxJU1RCT1ggSURDX0ZOVF9MSVNUX0ZPTlQsIDUsIDE4LCA5MCwgNDIsIExCU19TT1JUfFdTX1ZTQ1JPTEwKCUxURVhUICImS29sb3IiLCAtMSwgMTAwLCA1LCA1MCwgOAoJQ09OVFJPTCAiIiwgSURDX0ZOVF9DT0xPUl9GRywgIldpbmVDb25Db2xvclByZXZpZXciLCAwTCwgMTAwLCAxOCwgNDgsIDE2CglDT05UUk9MICIiLCBJRENfRk5UX0NPTE9SX0JLLCAiV2luZUNvbkNvbG9yUHJldmlldyIsIDBMLCAxMDAsIDQwLCA0OCwgMTYKCUxURVhUICImV2llbGtvnOYiLCAtMSwgMTU4LCA1LCA0MCwgOAoJTElTVEJPWCBJRENfRk5UX0xJU1RfU0laRSwgMTU4LCAxOCwgNDAsIDYwLCBXU19WU0NST0xMCglDT05UUk9MICIiLCBJRENfRk5UX1BSRVZJRVcsICJXaW5lQ29uRm9udFByZXZpZXciLCAwTCwgNSwgNjAsIDEwOSwgNDAKCUxURVhUICIiLCBJRENfRk5UX0ZPTlRfSU5GTywgMTI4LCA3NiwgODAsIDE4Cn0KCklERF9DT05GSUcgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMzYsIDI0LCAxNDAsIDEwNQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICIgS29uZmlndXJhY2phICIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CglHUk9VUEJPWCAiS29uZmlndXJhY2phIGJ1Zm9y83ciIC0xLCAxMCwgMTEsIDEwMCwgNDIsIEJTX0dST1VQQk9YCglMVEVYVCAiJlN6ZXJva2+c5iA6IiwgLTEsIDE0LCAyNSwgNTQsIDkKCUVESVRURVhUIElEQ19DTkZfU0JfV0lEVEgsIDY4LCAyMywgMzYsIDEyLCBXU19UQUJTVE9QfFdTX0JPUkRFUnxFU19OVU1CRVIKCUNPTlRST0wgIiIsIElEQ19DTkZfU0JfV0lEVEhfVUQsICJtc2N0bHNfdXBkb3duMzIiLCBVRFNfU0VUQlVERFlJTlR8VURTX0FMSUdOUklHSFR8VURTX0FVVE9CVUREWXxVRFNfQVJST1dLRVlTfFVEU19OT1RIT1VTQU5EUywgMCwgMCwgMCwgMAoJTFRFWFQgIiZXeXNva2+c5iA6IiwgLTEsIDE0LCAzOSwgNTQsIDkKCUVESVRURVhUIElEQ19DTkZfU0JfSEVJR0hULCA2OCwgMzcsIDM2LCAxMiwgV1NfVEFCU1RPUHxXU19CT1JERVJ8RVNfTlVNQkVSCglDT05UUk9MICIiLCBJRENfQ05GX1NCX0hFSUdIVF9VRCwgIm1zY3Rsc191cGRvd24zMiIsIFVEU19TRVRCVUREWUlOVHxVRFNfQUxJR05SSUdIVHxVRFNfQVVUT0JVRERZfFVEU19BUlJPV0tFWVN8VURTX05PVEhPVVNBTkRTLCAwLCAwLCAwLCAwCgoJR1JPVVBCT1ggIldpZWxrb5zmIG9rbmEiLCAtMSwgMTAsIDU1LCAxMDAsIDQyCglMVEVYVCAiUyZ6ZXJva2+c5iA6IiwgLTEsIDE0LCA2OSwgNTQsIDkKCUVESVRURVhUIElEQ19DTkZfV0lOX1dJRFRILCA2OCwgNjcsIDM2LCAxMiwgV1NfVEFCU1RPUHxXU19CT1JERVJ8RVNfTlVNQkVSCglDT05UUk9MICIiLCBJRENfQ05GX1dJTl9XSURUSF9VRCwgIm1zY3Rsc191cGRvd24zMiIsIFVEU19TRVRCVUREWUlOVHxVRFNfQUxJR05SSUdIVHxVRFNfQVVUT0JVRERZfFVEU19BUlJPV0tFWVN8VURTX05PVEhPVVNBTkRTLCAwLCAwLCAwLCAwCglMVEVYVCAiVyZ5c29rb5zmIDoiLCAtMSwgMTQsIDgzLCA1NCwgOQoJRURJVFRFWFQgSURDX0NORl9XSU5fSEVJR0hULCA2OCwgODEsIDM2LCAxMiwgV1NfVEFCU1RPUHxXU19CT1JERVJ8RVNfTlVNQkVSCglDT05UUk9MICIiLCBJRENfQ05GX1dJTl9IRUlHSFRfVUQsICJtc2N0bHNfdXBkb3duMzIiLCBVRFNfU0VUQlVERFlJTlR8VURTX0FMSUdOUklHSFR8VURTX0FVVE9CVUREWXxVRFNfQVJST1dLRVlTfFVEU19OT1RIT1VTQU5EUywgMCwgMCwgMCwgMAoKCUdST1VQQk9YICJOYSB6YWtv8WN6ZW5pZSBwcmFjeSIsIC0xLCAxMTUsIDExLCA4MCwgNDIsIEJTX0dST1VQQk9YCglBVVRPQ0hFQ0tCT1ggIiZaYW1rbmlqIGtvbnNvbOoiLCBJRENfQ05GX0NMT1NFX0VYSVQsIDExOSwgMjUsIDcyLCAyMCwgV1NfVEFCU1RPUAoKCUdST1VQQk9YICJFZHljamEiLCAtMSwgMTE1LCA1NSwgODAsIDQyCglDT01CT0JPWCBJRENfQ05GX0VESVRJT05fTU9ERSwgMTE5LCA2OSwgNzIsIDIwLCBDQlNfRFJPUERPV05MSVNUfFdTX1ZTQ1JPTEx8V1NfVEFCU1RPUAp9CgpJRERfU0FWRV9TRVRUSU5HUyBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAyMCwgMjAsIDE0MCwgNjAKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTgpDQVBUSU9OICJQYXJhbWV0cnkga29uc29saSIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CglHUk9VUEJPWCAiIiwgLTEsIDEwLCAxMCwgMTIwLCAzMSwgQlNfR1JPVVBCT1gKCUFVVE9SQURJT0JVVFRPTiAiWmFjaG93YWogdXN0YXdpZW5pYSIsIElEQ19TQVZfU0FWRSwgMTQsIDE1LCAxMTAsIDEwLCBXU19UQUJTVE9QCglBVVRPUkFESU9CVVRUT04gIlW/eWogdHlsa28gdyBiaWW/uWNlaiBzZXNqaSIsIElEQ19TQVZfU0VTU0lPTiwgMTQsIDI3LCAxMTAsIDEwLCBXU19UQUJTVE9QCgoJUFVTSEJVVFRPTiAiT0siLCBJRE9LLCAyMCwgNDUsIDM1LCAxMgoJUFVTSEJVVFRPTiAiQW51bHVqIiwgSURDQU5DRUwsIDY1LCA0NSwgMzUsIDEyCn0K