LyoKICogV2luZU1pbmUKICogQ3plY2ggTGFuZ3VhZ2UgU3VwcG9ydAogKgogKiBDb3B5cmlnaHQgMjAwMCBKb3NodWEgVGhpZWxlbgogKiBDb3B5cmlnaHQgMjAwMyBNYXJjZWxvIER1YXJ0ZQogKiBDb3B5cmlnaHQgMjAwNCBEYXZpZCBLcmVkYmEKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19DWkVDSCwgU1VCTEFOR19ERUZBVUxUCgpTVFJJTkdUQUJMRSB7CiAgICAgSURTX0FQUE5BTUUsICJXaW5lTWluZSIKICAgICBJRFNfTk9CT0RZLCAgIk5pa2RvIgp9CgpNRU5VX1dJTkVNSU5FIE1FTlUgRElTQ0FSREFCTEUKewogICAgUE9QVVAgIk4mYXN0YXZlbu0iIHsKICAgICAgICBNRU5VSVRFTSAiJk5vduFcdEYyIiwgICAgICAgSURNX05FVwogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImT3puYehvdmF0IG5lcm96aG9kbnV06SIsIElETV9NQVJLUQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImWmHo4XRl6G7tayIsICAgICAgSURNX0JFR0lOTkVSCiAgICAgICAgTUVOVUlURU0gIiZQb2tyb+hpbP0iLCAgICAgIElETV9BRFZBTkNFRAogICAgICAgIE1FTlVJVEVNICImRXhwZXJ0IiwgICAgICAgIElETV9FWFBFUlQKICAgICAgICBNRU5VSVRFTSAiJkRsZSBsaWJvc3RpIiwgICAgICAgIElETV9DVVNUT00KICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJktvbmVjXHRBbHQrSyIsICAgSURNX0VYSVQKICAgIH0KICAgIFBPUFVQICImSW5mb3JtYWNlIiB7CiAgICAgICAgTUVOVUlURU0gIk5lJmpsZXC57SDoYXN5IiwgICAgSURNX1RJTUVTCiAgICAgICAgTUVOVUlURU0gIiZPIGFwbGlrYWNpIiwgICAgICAgICBJRE1fQUJPVVQKICAgIH0KfQoKRExHX1RJTUVTIERJQUxPRyBESVNDQVJEQUJMRSAwLCAwLCAxNjAsIDgwClNUWUxFICBEU19NT0RBTEZSQU1FIHwgRFNfM0RMT09LIHwKICAgIFdTX1ZJU0lCTEUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVSB8IFdTX1BPUFVQCkNBUFRJT04gIk5lamxlcLntIOhhc3kiCnsKICAgIEdST1VQQk9YICAgICAgICAiTmVqbGVwue0g6GFzeSIsIElESUdOT1JFLCAgMTAsICAxMCwgMTQwLCAgNDUKICAgIExURVhUICAgICAgICAgICAiWmHo4XRl6G7tayIsICAgICAgSURJR05PUkUsICAyMCwgIDIwLCAgNDAsICAgOAogICAgTFRFWFQgICAgICAgICAgICJQb2tyb+hpbP0iLCAgICAgIElESUdOT1JFLCAgMjAsICAzMCwgIDQwLCAgIDgKICAgIExURVhUICAgICAgICAgICAiRXhwZXJ0IiwgICAgICAgIElESUdOT1JFLCAgMjAsICA0MCwgIDQwLCAgIDgKICAgIExURVhUICAgICAgICAgICAiOTk5IiwgICAgICAgICAgSURDX1RJTUUxLCAgNzAsICAyMCwgIDE1LCAgIDgKICAgIExURVhUICAgICAgICAgICAiOTk5IiwgICAgICAgICAgSURDX1RJTUUyLCAgNzAsICAzMCwgIDE1LCAgIDgKICAgIExURVhUICAgICAgICAgICAiOTk5IiwgICAgICAgICAgSURDX1RJTUUzLCAgNzAsICA0MCwgIDE1LCAgIDgKICAgIExURVhUICAgICAgICAgICAiIiwgICAgICAgICAgICAgSURDX05BTUUxLCAgOTAsICAyMCwgIDU1LCAgIDgKICAgIExURVhUICAgICAgICAgICAiIiwgICAgICAgICAgICAgSURDX05BTUUyLCAgOTAsICAzMCwgIDU1LCAgIDgKICAgIExURVhUICAgICAgICAgICAiIiwgICAgICAgICAgICAgSURDX05BTUUzLCAgOTAsICA0MCwgIDU1LCAgIDgKICAgIERFRlBVU0hCVVRUT04gICAiT0siLCAgICAgICAgICAgICAgICBJRE9LLCAgNTUsICA2MCwgIDUwLCAgMTUKfQoKRExHX0NPTkdSQVRTIERJQUxPRyBESVNDQVJEQUJMRSAgMCwgMCwgMTYwLCA2MApTVFlMRSAgRFNfTU9EQUxGUkFNRSB8IERTXzNETE9PSyB8CiAgICBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUgfCBXU19QT1BVUApDQVBUSU9OICJHcmF0dWx1amVtZSAhIgp7CiAgICBMVEVYVCAgICAgICAgICAgIlByb3PtbSwgemFkZWp0ZSBzdukgam3pbm8iLCBJRElHTk9SRSwgIDEwLCAgMTAsIDE1MCwgIDEwCiAgICBFRElUVEVYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElEQ19FRElUTkFNRSwgIDI1LCAgMjAsIDExMCwgIDEyCiAgICBERUZQVVNIQlVUVE9OICAgIk9LIiwgICAgICAgICAgICAgICAgICAgICAgICAgSURPSywgIDYwLCAgNDAsICA0MCwgIDE1Cn0KCkRMR19DVVNUT00gRElBTE9HIERJU0NBUkRBQkxFICAwLCAwLCAxMDAsIDEwMApTVFlMRSAgRFNfTU9EQUxGUkFNRSB8IERTXzNETE9PSyB8CiAgICBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUgfCBXU19QT1BVUApDQVBUSU9OICJWbGFzdG7tIGhyYSIKewogICAgTFRFWFQgICAgICAgICAgICLY4WRreSIsICAgSURJR05PUkUsICAgNSwgICA1LCAgMzAsICAxMAogICAgTFRFWFQgICAgICAgICAgICJTbG91cGNlIiwgICBJRElHTk9SRSwgICA1LCAgMzUsICAzMCwgIDEwCiAgICBMVEVYVCAgICAgICAgICAgIk1pbnkiLCAgSURJR05PUkUsICAgNSwgIDY1LCAgMzAsICAxMAogICAgRURJVFRFWFQgICAgICAgICAgICAgIElEQ19FRElUUk9XUywgICA1LCAgMTUsICAyMCwgIDEyLCBFU19OVU1CRVIKICAgIEVESVRURVhUICAgICAgICAgICAgICBJRENfRURJVENPTFMsICAgNSwgIDQ1LCAgMjAsICAxMiwgRVNfTlVNQkVSCiAgICBFRElUVEVYVCAgICAgICAgICAgICBJRENfRURJVE1JTkVTLCAgIDUsICA3NSwgIDIwLCAgMTIsIEVTX05VTUJFUgogICAgREVGUFVTSEJVVFRPTiAgICJPSyIsICAgICBJRE9LLCAgICAgIDQwLCAgMzAsICA1MCwgIDE1CiAgICBQVVNIQlVUVE9OICAgICAgIlN0b3JubyIsIElEQ0FOQ0VMLCAgNDAsICA1MCwgIDUwLCAgMTUKfQoKRExHX0FCT1VUIERJQUxPRyBESVNDQVJEQUJMRSAgMCwgMCwgMTYwLCA4MApTVFlMRSAgRFNfTU9EQUxGUkFNRSB8IERTXzNETE9PSyB8CiAgICBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUgfCBXU19QT1BVUApDQVBUSU9OICJPIGFwbGlrYWNpIgp7CiAgICBMVEVYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiV2luZW1pbmUiLCBJRElHTk9SRSwgIDEwLCAgMTAsICA1MCwgIDEwCiAgICBMVEVYVCAgICAgICAgICJDb3B5cmlnaHQgMjAwMCwgSm9zaHVhIFRoaWVsZW4iLCBJRElHTk9SRSwgIDM1LCAgMjUsIDExNSwgIDEwCiAgICBMVEVYVCAgICAgICAgICAgICAgICAgIkxpY2Vub3bhbiBwb2QgTEdQTCIsIElESUdOT1JFLCAgMzUsICAzNSwgMTE1LCAgMTAKICAgIElDT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXSU5FTUlORSIsIElESUdOT1JFLCAgMTAsICAyNSwgIDIwLCAgMjAKICAgIERFRlBVU0hCVVRUT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPSyIsIElET0ssICAgICAgNTAsICA2MCwgIDYwLCAgMTUKfQo=