LyoKICogV2luZU1pbmUKICogUG9saXNoIExhbmd1YWdlIFN1cHBvcnQKICoKICogQ29weXJpZ2h0IDIwMDAgSm9zaHVhIFRoaWVsZW4KICogQ29weXJpZ2h0IDIwMDMgTWFyY2VsbyBEdWFydGUKICogQ29weXJpZ2h0IDIwMDQgSmFjZWsgQ2FiYW4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19QT0xJU0gsIFNVQkxBTkdfREVGQVVMVAoKU1RSSU5HVEFCTEUgewogICAgIElEU19BUFBOQU1FLCAiV2luZU1pbmUiCiAgICAgSURTX05PQk9EWSwgICJBbm9uaW0iCn0KCk1FTlVfV0lORU1JTkUgTUVOVSBESVNDQVJEQUJMRQp7CiAgICBQT1BVUCAiJk9wY2plIiB7CiAgICAgICAgTUVOVUlURU0gIiZOb3dhXHRGMiIsICAgICAgICAgSURNX05FVwogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImWm5hY3puaWtpIiwgICAgICAgIElETV9NQVJLUQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImUG9jerl0a3VquWN5IiwgICAgIElETV9CRUdJTk5FUgogICAgICAgIE1FTlVJVEVNICJaJmFhd2Fuc293YW55IiwgICAgIElETV9BRFZBTkNFRAogICAgICAgIE1FTlVJVEVNICImRWtzcGVydCIsICAgICAgICAgIElETV9FWFBFUlQKICAgICAgICBNRU5VSVRFTSAiJlW/eXRrb3duaWthIiwgICAgICBJRE1fQ1VTVE9NCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIlcmeWqcY2llXHRBbHQrWCIsICAgSURNX0VYSVQKICAgIH0KICAgIFBPUFVQICImSW5mbyIgewogICAgICAgIE1FTlVJVEVNICImTmFqbGVwc3plIFd5bmlraSIsIElETV9USU1FUwogICAgICAgIE1FTlVJVEVNICImTyBQcm9ncmFtaWUiLCAgICAgIElETV9BQk9VVAogICAgfQp9CgpETEdfVElNRVMgRElBTE9HIERJU0NBUkRBQkxFIDAsIDAsIDE3MCwgODAKU1RZTEUgIERTX01PREFMRlJBTUUgfCBEU18zRExPT0sgfAogICAgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VIHwgV1NfUE9QVVAKQ0FQVElPTiAiTmFqbGVwc3plIFd5bmlraSIKewogICAgR1JPVVBCT1ggICAgICAgICJOYWpsZXBzemUgV3luaWtpIiwgSURJR05PUkUsICAxMCwgIDEwLCAxNTAsICA0NQogICAgTFRFWFQgICAgICAgICAgICJQb2N6uXRrdWq5Y3kiLCAgICAgIElESUdOT1JFLCAgMjAsICAyMCwgIDUwLCAgIDgKICAgIExURVhUICAgICAgICAgICAiWmFhd2Fuc293YW55IiwgICAgICBJRElHTk9SRSwgIDIwLCAgMzAsICA1MCwgICA4CiAgICBMVEVYVCAgICAgICAgICAgIkVrc3BlcnQiLCAgICAgICAgSURJR05PUkUsICAyMCwgIDQwLCAgNTAsICAgOAogICAgTFRFWFQgICAgICAgICAgICI5OTkiLCAgICAgICAgICBJRENfVElNRTEsICA4MCwgIDIwLCAgMTUsICAgOAogICAgTFRFWFQgICAgICAgICAgICI5OTkiLCAgICAgICAgICBJRENfVElNRTIsICA4MCwgIDMwLCAgMTUsICAgOAogICAgTFRFWFQgICAgICAgICAgICI5OTkiLCAgICAgICAgICBJRENfVElNRTMsICA4MCwgIDQwLCAgMTUsICAgOAogICAgTFRFWFQgICAgICAgICAgICIiLCAgICAgICAgICAgICBJRENfTkFNRTEsICAxMDAsICAyMCwgIDU1LCAgIDgKICAgIExURVhUICAgICAgICAgICAiIiwgICAgICAgICAgICAgSURDX05BTUUyLCAgMTAwLCAgMzAsICA1NSwgICA4CiAgICBMVEVYVCAgICAgICAgICAgIiIsICAgICAgICAgICAgIElEQ19OQU1FMywgIDEwMCwgIDQwLCAgNTUsICAgOAogICAgREVGUFVTSEJVVFRPTiAgICJPSyIsICAgICAgICAgICAgICAgIElET0ssICA2MCwgIDYwLCAgNTAsICAxNQp9CgpETEdfQ09OR1JBVFMgRElBTE9HIERJU0NBUkRBQkxFICAwLCAwLCAxNjAsIDYwClNUWUxFICBEU19NT0RBTEZSQU1FIHwgRFNfM0RMT09LIHwKICAgIFdTX1ZJU0lCTEUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVSB8IFdTX1BPUFVQCkNBUFRJT04gIkdyYXR1bGFjamUhIgp7CiAgICBMVEVYVCAgICAgICAgICAgIlBvZGFqIHN3b2plIGltaeoiLCBJRElHTk9SRSwgIDEwLCAgMTAsIDE1MCwgIDEwCiAgICBFRElUVEVYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElEQ19FRElUTkFNRSwgIDI1LCAgMjAsIDExMCwgIDEyCiAgICBERUZQVVNIQlVUVE9OICAgIk9LIiwgICAgICAgICAgICAgICAgICAgICAgICAgSURPSywgIDYwLCAgNDAsICA0MCwgIDE1Cn0KCkRMR19DVVNUT00gRElBTE9HIERJU0NBUkRBQkxFICAwLCAwLCAxMDAsIDEwMApTVFlMRSAgRFNfTU9EQUxGUkFNRSB8IERTXzNETE9PSyB8CiAgICBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUgfCBXU19QT1BVUApDQVBUSU9OICJVc3Rhd2llbmlhIFW/eXRrb3duaWthIgp7CiAgICBMVEVYVCAgICAgICAgICAgIldpZXJzemUiLCAgIElESUdOT1JFLCAgIDUsICAgNSwgIDMwLCAgMTAKICAgIExURVhUICAgICAgICAgICAiS29sdW1ueSIsICAgSURJR05PUkUsICAgNSwgIDM1LCAgMzAsICAxMAogICAgTFRFWFQgICAgICAgICAgICJNaW55IiwgIElESUdOT1JFLCAgIDUsICA2NSwgIDMwLCAgMTAKICAgIEVESVRURVhUICAgICAgICAgICAgICBJRENfRURJVFJPV1MsICAgNSwgIDE1LCAgMjAsICAxMiwgRVNfTlVNQkVSCiAgICBFRElUVEVYVCAgICAgICAgICAgICAgSURDX0VESVRDT0xTLCAgIDUsICA0NSwgIDIwLCAgMTIsIEVTX05VTUJFUgogICAgRURJVFRFWFQgICAgICAgICAgICAgSURDX0VESVRNSU5FUywgICA1LCAgNzUsICAyMCwgIDEyLCBFU19OVU1CRVIKICAgIERFRlBVU0hCVVRUT04gICAiT0siLCAgICAgSURPSywgICAgICA0MCwgIDMwLCAgNTAsICAxNQogICAgUFVTSEJVVFRPTiAgICAgICJBbnVsdWoiLCBJRENBTkNFTCwgIDQwLCAgNTAsICA1MCwgIDE1Cn0KCkRMR19BQk9VVCBESUFMT0cgRElTQ0FSREFCTEUgIDAsIDAsIDE2MCwgODAKU1RZTEUgIERTX01PREFMRlJBTUUgfCBEU18zRExPT0sgfAogICAgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VIHwgV1NfUE9QVVAKQ0FQVElPTiAiTyBQcm9ncmFtaWUiCnsKICAgIExURVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXaW5lbWluZSIsIElESUdOT1JFLCAgMTAsICAxMCwgIDUwLCAgMTAKICAgIExURVhUICAgICAgICAgIkNvcHlyaWdodCAyMDAwLCBKb3NodWEgVGhpZWxlbiIsIElESUdOT1JFLCAgMzUsICAyNSwgMTE1LCAgMTAKICAgIExURVhUICAgICAgICAgICAgICAgICAiTmEgbGljZW5jamkgTEdQTCIsIElESUdOT1JFLCAgMzUsICAzNSwgMTE1LCAgMTAKICAgIElDT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXSU5FTUlORSIsIElESUdOT1JFLCAgMTAsICAyNSwgIDIwLCAgMjAKICAgIERFRlBVU0hCVVRUT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPSyIsIElET0ssICAgICAgNTAsICA2MCwgIDYwLCAgMTUKfQo=