LyoKICogIE5vdGVwYWQgKEZpbm5pc2ggcmVzb3VyY2VzKQogKgogKiAgQ29weXJpZ2h0IDE5OTkgYnkgSnVra2EgSWl2b25lbiA8aWl2b25lbkBpa2kuZmk+CiAqICBDb3B5cmlnaHQgMjAwMiBTeWx2YWluIFBldHJlb2xsZSA8c3BldHJlb2xsZUB5YWhvby5mcj4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqLwoKTUFJTl9NRU5VIE1FTlUgTEFOR1VBR0UgTEFOR19GSU5OSVNILCBTVUJMQU5HX05FVVRSQUwKewogUE9QVVAgIiZUaWVkb3N0byIgewogIE1FTlVJVEVNICImVXVzaS4uLiIsIDB4MTAwCiAgTUVOVUlURU0gIiZBdmFhIiwgMHgxMDEKICBNRU5VSVRFTSAiVGEmbGxldGEiLCAweDEwMgogIE1FTlVJVEVNICJUYWxsZXRhICZuaW1lbGzkLi4uIiwgMHgxMDMKICBNRU5VSVRFTSAiVCZ1bG9zdGEiLCAweDEwNAogIE1FTlVJVEVNICImU2l2dW4gYXNldHVrc2V0Li4uIiwgMHgxMDUKICBNRU5VSVRFTSAiJktpcmpvaXR0aW1lbiBhc2V0dWtzZXQuLi4iLCAweDEwNgogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImUG9pc3R1IiwgMHgxMDgKIH0KUE9QVVAgIiZNdW9ra2FhIiB7CiAgTUVOVUlURU0gIiZQYWxhdXRhXHRDdHJsK1oiLCAweDExMAogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImTGVpa2thYVx0Q3RybCtYIiwgMHgxMTEKICBNRU5VSVRFTSAiJktvcGlvaVx0Q3RybCtDIiwgMHgxMTIKICBNRU5VSVRFTSAiTCZpaXTkXHRDdHJsK1YiLCAweDExMwogIE1FTlVJVEVNICJQJm9pc3RhXHREZWwiLCAweDExNAogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImVmFsaXRzZSBrYWlra2kiLCAweDExNgogIE1FTlVJVEVNICImQWlrYS9Q5Gl25G3k5HLkXHRGNSIsIDB4MTE3CiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIkthJnRrYWlzZSBwaXRr5CByaXZpIiwgMHgxMTkKIH0KUE9QVVAgIiZFdHNpIiB7CiAgTUVOVUlURU0gIkV0c2kuLi4iLCAweDEyMAogIE1FTlVJVEVNICJFdHNpICZzZXVyYWF2YVx0RjMiLCAweDEyMQogfQpQT1BVUCAiJkFwdWEiIHsKICBNRU5VSVRFTSAiJlNpc+RsdPYiLCAweDEzMAogIE1FTlVJVEVNICImRXRzaS4uLiIsIDB4MTMxCiAgTUVOVUlURU0gIkFwdWEgJk9wYXN0dWtzZXN0YSIsIDB4MTMyCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgUE9QVVAgIkluZiZvLi4uIiB7CiAgIE1FTlVJVEVNICImTGlzZW5zc2kiLCAweDEzNQogICBNRU5VSVRFTSAiJkVJIFRBS1VVVEEiLCAweDEzNgogICBNRU5VSVRFTSAiJlRpZXRvamEgV2luZTppc3RhIiwgMHgxMzcKICB9CiB9Cn0KCi8qIERpYWxvZyBgUGFnZSBzZXR1cCcgKi8KCkRJQUxPR19QQUdFU0VUVVBfIERJQUxPRyAwLCAwLCAyMjUsIDk1CkxBTkdVQUdFIExBTkdfRklOTklTSCwgU1VCTEFOR19ORVVUUkFMClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpGT05UIDgsICJIZWx2IgpDQVBUSU9OICJTaXZ1biBhc2V0dWtzZXQiCnsKTFRFWFQgICAgIiZZbORvdHNpa2tvOiIsICAweDE0MCwgICAxMCwgMDcsIDQwLCAxNQpFRElUVEVYVCAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MSwgICAgICAgNjAsIDA1LDExMCwgMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIkFsYW8mdHNpa2tvOiIsICAweDE0MiwgICAxMCwgMjQsIDQwLCAxNQpFRElUVEVYVCAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MywgICAgICAgNjAsIDIyLDExMCwgMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKCkdST1VQQk9YICImTWFyZ2luYWFsaToiLCAgICAgIDB4MTQ0LCAgICAgMTAsIDQzLDE2MCwgNDUKTFRFWFQgICAgIiZWYXNlbjoiLCAgICAgICAgMHgxNDUsICAgMjAsIDU1LCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIC8qU1RSSU5HX1BBR0VTRVRVUF9MRUZUVkFMVUUsKi8gICAweDE0NywgICAgICAgNTAsIDU1LCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiWSZs5DoiLCAgICAgICAgIDB4MTQ4LCAgICAyMCwgNzMsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgLypTVFJJTkdfUEFHRVNFVFVQX1RPUFZBTFVFLCovICAgIDB4MTRBLCAgICAgICAgNTAsIDczLCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJk9pa2VhOiIsICAgICAgIDB4MTRCLCAxMDAsIDU1LCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIC8qU1RSSU5HX1BBR0VTRVRVUF9SSUdIVFZBTFVFLCovICAweDE0RCwgICAgIDEzMCwgNTUsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICImQWxhOiIsICAgICAgMHgxNEUsMTAwLCA3MywgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCAvKlNUUklOR19QQUdFU0VUVVBfQk9UVE9NVkFMVUUsKi8gMHgxNTAsICAgIDEzMCwgNzMsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCgpERUZQVVNIQlVUVE9OICJPSyIsICAgICAgICAgMHgxNTEsICAgICAgICAgICAgICAgICAgIDE4MCwgIDMsIDQwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICJQZXJ1dXRhIiwgICAgIDB4MTUyLCAgICAgICAgICAgICAgIDE4MCwgMjEsIDQwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICImQXB1YSIsICAgICAgIDB4MTUzLCAgICAgICAgICAgICAgICAxODAsIDM5LCA0MCwgMTUsIFdTX1RBQlNUT1AKfQoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUgTEFOR1VBR0UgTEFOR19GSU5OSVNILCBTVUJMQU5HX05FVVRSQUwKewpTVFJJTkdfUEFHRVNFVFVQX0hFQURFUlZBTFVFLAkiJm4iICAgICAgICAvKiBGSVhNRSAqLwpTVFJJTkdfUEFHRVNFVFVQX0ZPT1RFUlZBTFVFLAkiU2l2dSAmcyIgICAvKiBGSVhNRSAqLwpTVFJJTkdfUEFHRVNFVFVQX0xFRlRWQUxVRSwJCSIyMCBtbSIgICAgIC8qIEZJWE1FICovClNUUklOR19QQUdFU0VUVVBfUklHSFRWQUxVRSwJIjIwIG1tIiAgICAgLyogRklYTUUgKi8KU1RSSU5HX1BBR0VTRVRVUF9UT1BWQUxVRSwJCSIyNSBtbSIgICAgIC8qIEZJWE1FICovClNUUklOR19QQUdFU0VUVVBfQk9UVE9NVkFMVUUsCSIyNSBtbSIgICAgIC8qIEZJWE1FICovCgpTVFJJTkdfTk9URVBBRCwJCQkJCSJOb3RlcGFkIgpTVFJJTkdfRVJST1IsCQkJCQkiVklSSEUiClNUUklOR19XQVJOSU5HLAkJCQkJIlZBUk9JVFVTIgpTVFJJTkdfSU5GTywJCQkJCSJUaWVkb2l0dXMiCgpTVFJJTkdfVU5USVRMRUQsCQkJCSIob3RzaWtvaW1hdG9uKSIKClNUUklOR19BTExfRklMRVMsCQkJCSJLYWlra2kgdGllZG9zdG90ICgqLiopIgpTVFJJTkdfVEVYVF9GSUxFU19UWFQsCQkJIlRla3N0aSB0aWVkb3N0b3QgKCoudHh0KSIKClNUUklOR19UT09MQVJHRSwJCQkJIlRpZWRvc3RvICclcycgb24gbGlpYW4gc3V1cmkuXG4gXApQbGVhc2UgdXNlIGEgZGlmZmVyZW50IGVkaXRvci4iClNUUklOR19OT1RFWFQsCQkJCQkiRXQgc3n2dHTkbnl0IGxhaW5rYWFuIHRla3N0aeQuIFwKXG5LaXJqb2l0YSBqb3RhaW4gamEgeXJpdOQgdXVkZWxsZWVuIgpTVFJJTkdfRE9FU05PVEVYSVNULAkJCQkiRmlsZSAnJXMnXG5kb2VzIG5vdCBleGlzdFxuXG4gXApEbyB5b3Ugd2FudCB0byBjcmVhdGUgYSBuZXcgZmlsZSA/IgpTVFJJTkdfTk9UU0FWRUQsCQkJCSJGaWxlICclcydcbmhhcyBiZWVuIG1vZGlmaWVkXG5cbiBcCldvdWxkIHlvdSBsaWtlIHRvIHNhdmUgdGhlIGNoYW5nZXMgPyIKU1RSSU5HX05PVEZPVU5ELAkJCQkJIiclcycgZWkgbPZ5ZHkuIgpTVFJJTkdfT1VUX09GX01FTU9SWSwJCQkiTXVpc3RpYSBlaSBvbGUgcmlpdHTkduRzdGkgdORt5G4gXApcbnRlaHTkduRuIHRla2VtaXNla3NpLiBTdWxqZSBqb2tpbiBzb3ZlbGx1cyB2YXBhdXR0YWFrc2VzaVxuIFwKbXVpc3RpYS4iCgp9Cg==