LyoKICogVXNlcgogKiBGcmVuY2ggbGFuZ3VhZ2Ugc3VwcG9ydAogKgogKiBDb3B5cmlnaHQgMTk5NSBBbGV4YW5kcmUgSnVsbGlhcmQKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19GUkVOQ0gsIFNVQkxBTkdfTkVVVFJBTAoKU1lTTUVOVSBNRU5VIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUKewogTUVOVUlURU0gIiZSZXN0YXVyYXRpb24iLCA2MTcyOAogTUVOVUlURU0gIiZE6XBsYWNlbWVudCIsIDYxNDU2CiBNRU5VSVRFTSAiRGkmbWVuc2lvbiIsIDYxNDQwCiBNRU5VSVRFTSAiUulkdWN0JmlvbiIsIDYxNDcyCiBNRU5VSVRFTSAiJkFncmFuZGlzc2VtZW50IiwgNjE0ODgKIE1FTlVJVEVNIFNFUEFSQVRPUgogTUVOVUlURU0gIiZGZXJtZXR1cmVcdEFsdC1GNCIsIDYxNTM2CiBNRU5VSVRFTSBTRVBBUkFUT1IKIE1FTlVJVEVNICImQmFzY3VsZXIgdmVycyAuLi5cdEN0cmwtRWNoYXAiLCA2MTc0NAogTUVOVUlURU0gU0VQQVJBVE9SCiBNRU5VSVRFTSAiwCBwcm9wb3MgZGUgJldpbmUgLi4uIiwgNjE3NjEKIE1FTlVJVEVNIFNFUEFSQVRPUgogTUVOVUlURU0gIkluc+lyZXIgJ0RlYnVnIG1hcmsnIGRhbnMgbGUgZmx1eCBkZSBk6WJvZ3VhZ2UiLCA2MTc2Mgp9CgpFRElUTUVOVSBNRU5VIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUKewoJUE9QVVAgIiIKCUJFR0lOCgkJTUVOVUlURU0gIiZBbm51bGVyIiwgRU1fVU5ETwoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICJDb3VwZSZyIiwgV01fQ1VUCgkJTUVOVUlURU0gIiZDb3BpZXIiLCBXTV9DT1BZCgkJTUVOVUlURU0gIkMmb2xsZXIiLCBXTV9QQVNURQoJCU1FTlVJVEVNICJFJmZmYWNlciIsIFdNX0NMRUFSCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIlRvdXQgJnPpbGVjdGlvbm5lciIsIEVNX1NFVFNFTAoJRU5ECn0KCk1TR0JPWCBESUFMT0cgMTAwLCA4MCwgMjE2LCAxNjgKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkJFR0lOCiAgICAgICAgSUNPTiAiIiwgMTA4OCwgOCwgMjAsIDE2LCAxNiwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFCiAgICAgICAgTFRFWFQgIiIsIDEwMCwgMzIsIDQsIDE3NiwgNDgsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX0dST1VQCiAgICAgICAgUFVTSEJVVFRPTiAiJk9rIiwgMSwgMTYsIDU2LCA0MCwgMTQsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX1RBQlNUT1AKICAgICAgICBQVVNIQlVUVE9OICImQW5udWxlciIsIDIsIDY0LCA1NiwgNDAsIDE0LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QCiAgICAgICAgUFVTSEJVVFRPTiAiJkFubnVsZXIiLCAzLCAxMTIsIDU2LCA0MCwgMTQsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX1RBQlNUT1AKICAgICAgICBQVVNIQlVUVE9OICImUulw6XRlciIsIDQsIDE2MCwgNTYsIDQwLCAxNCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUAogICAgICAgIFBVU0hCVVRUT04gIiZJZ25vcmVyIiwgNSwgMjA4LCA1NiwgNDAsIDE0LCBXU19DSElMRCB8IFdTX1ZJU0lCTEUgfCBXU19UQUJTVE9QCiAgICAgICAgUFVTSEJVVFRPTiAiJk91aSIsIDYsIDI1NiwgNTYsIDQwLCAxNCwgV1NfQ0hJTEQgfCBXU19WSVNJQkxFIHwgV1NfVEFCU1RPUAogICAgICAgIFBVU0hCVVRUT04gIiZOb24iLCA3LCAzMDQsIDU2LCA0MCwgMTQsIFdTX0NISUxEIHwgV1NfVklTSUJMRSB8IFdTX1RBQlNUT1AKRU5ECgpNRElfTU9SRVdJTkRPV1MgRElBTE9HIEZJWEVEIElNUFVSRSAyMCwgMjAsIDIzMiwgMTIyClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIlPpbGVjdGlvbiBkZSBmZW7qdHJlIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCkJFR0lOCiAgICBMSVNUQk9YICAgICAgICAgTURJX0lEQ19MSVNUQk9YLCA1LCA3LCAyMjIsIDkwLCBXU19WU0NST0xMIHwgV1NfSFNDUk9MTCAvKiBkZWZpbmVkIGluIG1kaS5oICovCiAgICBERUZQVVNIQlVUVE9OICAgIk9LIiwgSURPSywgNzUsIDEwMCwgMzUsIDE0CiAgICBQVVNIQlVUVE9OICAgICAgIkFubnVsZXIiLCBJRENBTkNFTCwgMTIwLCAxMDAsIDM1LCAxNApFTkQKCgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CiAgICBJRFNfRVJST1IgIkVycmV1ciIKICAgIElEU19NRElfTU9SRVdJTkRPV1MgIiZQbHVzIGRlIGZlbup0cmVzLi4uIgp9Cg==