LyoKICogQ2xvY2sgKFN3ZWRpc2ggcmVzb3VyY2VzKQogKgogKiBDb3B5cmlnaHQgMjAwNywgMjAwOCBEYW5pZWwgTnlsYW5kZXIKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKI2luY2x1ZGUgImNsb2NrX3Jlcy5oIgoKTEFOR1VBR0UgTEFOR19TV0VESVNILCBTVUJMQU5HX05FVVRSQUwKCk1BSU5fTUVOVSBNRU5VCnsKIFBPUFVQICImRWdlbnNrYXBlciIgewogIE1FTlVJVEVNICJBbmEmbG9nIiwgSURNX0FOQUxPRwogIE1FTlVJVEVNICJEaWdpJnRhbCIsIElETV9ESUdJVEFMCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZUeXBzbml0dC4uLiIsIElETV9GT05UCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZVdGFuIHRpdGVsbGlzdCIsIElETV9OT1RJVExFCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZTZWt1bmRlciIsIElETV9TRUNPTkRTCiAgTUVOVUlURU0gIiZEYXR1bSIsIElETV9EQVRFCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZBbGx0aWQg9nZlcnN0IiwgSURNX09OVE9QCiB9CiBQT1BVUCAiSW5mJm8iIHsKICBNRU5VSVRFTSAiJkxpY2Vucy4uLiIsIElETV9MSUNFTlNFCiAgTUVOVUlURU0gIiZJTkdFTiBHQVJBTlRJLi4uIiwgSURNX05PV0FSUkFOVFkKICBNRU5VSVRFTSAiJk9tIEtsb2NrYS4uLiIsIElETV9BQk9VVAogfQp9CgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CklEU19DTE9DSywgIktsb2NrYSIKfQoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUgTEFOR1VBR0UgTEFOR19TV0VESVNILCBTVUJMQU5HX05FVVRSQUwKewpJRFNfTElDRU5TRV9DQVBUSU9OLCAgICAgICAgICAgICJMSUNFTlMiCklEU19MSUNFTlNFLAoiRGV0dGEgcHJvZ3JhbSDkciBmcmkgcHJvZ3JhbXZhcmEuIER1IGthbiBkaXN0cmlidWVyYSBkZXQgb2NoL2VsbGVyIFwKbW9kaWZpZXJhIGRldCB1bmRlciB2aWxsa29yZW4gaSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgcHVibGljZXJhZCBcCmF2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW50aW5nZW4gdmVyc2lvbiAyLjEgZWxsZXIgKG9tIGR1IHPlIHZpbGwpIFwKbuVnb24gc2VuYXJlIHZlcnNpb24uIERldHRhIHByb2dyYW0gZGlzdHJpYnVlcmFzIGkgaG9wcCBvbSBhdHQgZGV0IHNrYSBcCnZhcmEgYW525G5kYmFydCxtZW4gVVRBTiBOxUdPTiBTT00gSEVMU1QgR0FSQU5USSwg5HZlbiB1dGFuIFwKdW5kZXJm9nJzdOVkZCBnYXJhbnRpIG9tIFPETEpCQVJIRVQgZWxsZXIgTMRNUExJR0hFVCBG1lIgTsVHT1QgXApTUEVDSUVMTFQgxE5EQU3FTC4gU2UgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZvZyIHl0dGVybGlnYXJlIFwKaW5mb3JtYXRpb24uXG5cCkR1IGL2ciBoYSBm5XR0IGVuIGtvcGlhIGF2IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHRpbGxzYW1tYW5zIFwKbWVkIGRldHRhIHByb2dyYW0uIE9tIGludGUsIHNrcml2IHRpbGwgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBcCkluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EiCgpJRFNfV0FSUkFOVFlfQ0FQVElPTiwgIklOR0VOIEdBUkFOVEkiCklEU19XQVJSQU5UWSwKIkRldHRhIHByb2dyYW0gZGlzdHJpYnVlcmFzIGkgaG9wcCBvbSBhdHQgZGV0IHNrYSB2YXJhIGFuduRuZGJhcnQsIFwKbWVuIFVUQU4gTsVHT04gU09NIEhFTFNUIEdBUkFOVEksIOR2ZW4gdXRhbiB1bmRlcmb2cnN05WRkIGdhcmFudGkgXApvbSBTxExKQkFSSEVUIGVsbGVyIEzETVBMSUdIRVQgRtZSIE7FR09UIFNQRUNJRUxMVCDETkRBTcVMLiBcClNlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGb2ciB5dHRlcmxpZ2FyZSBpbmZvcm1hdGlvbi4iCn0K