LyoKICogIE5vdGVwYWQgKE5vcndlZ2lhbiBCb2tt5WwgcmVzb3VyY2VzKQogKgogKiAgQ29weXJpZ2h0IDIwMDUtMjAwNiBBbGV4YW5kZXIgTi4gU/hybmVzIDxhbGV4QHRoZWhhbmRvZmFnb255LmNvbT4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKI2luY2x1ZGUgIm5vdGVwYWRfcmVzLmgiCgpMQU5HVUFHRSBMQU5HX05PUldFR0lBTiwgU1VCTEFOR19OT1JXRUdJQU5fQk9LTUFMCgpNQUlOX01FTlUgTUVOVQp7CiBQT1BVUCAiJkZpbCIgewogIE1FTlVJVEVNICImTnlcdEN0cmwrTiIsICAgICAgICAgICBDTURfTkVXCiAgTUVOVUlURU0gIibFcG5lLi4uXHRDdHJsK08iLCAgICAgQ01EX09QRU4KICBNRU5VSVRFTSAiJkxhZ3JlXHRDdHJsK1MiLCAgICAgQ01EX1NBVkUKICBNRU5VSVRFTSAiTGFnciZlIHNvbS4uLiIsICAgICAgIENNRF9TQVZFX0FTCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZTa3JpdiB1dC4uLlx0Q3RybCtQIiwgICAgICAgICAgICBDTURfUFJJTlQKICBNRU5VSVRFTSAiU2lkZW9wcHNlJnR0Li4uIiwgICAgQ01EX1BBR0VfU0VUVVAKICBNRU5VSVRFTSAiU2smcml2ZXJvcHBzZXR0Li4uIiwgQ01EX1BSSU5URVJfU0VUVVAKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJkF2c2x1dHQiLCAgICAgICAgICAgICBDTURfRVhJVAogfQpQT1BVUCAiUiZlZGlnZXIiIHsKICBNRU5VSVRFTSAiJkFuZ3JlXHRDdHJsK1oiLCAgICAgQ01EX1VORE8KICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiS2xpcHAgdSZ0XHRDdHJsK1giLCAgICAgIENNRF9DVVQKICBNRU5VSVRFTSAiJktvcGllclx0Q3RybCtDIiwgICAgIENNRF9DT1BZCiAgTUVOVUlURU0gIiZMaW0gaW5uXHRDdHJsK1YiLCAgICBDTURfUEFTVEUKICBNRU5VSVRFTSAiJlNsZXR0XHREZWwiLCAgICAgIENNRF9ERUxFVEUKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiTWVyayAmYWx0XHRDdHJsK0EiLCAgICAgICBDTURfU0VMRUNUX0FMTAogIE1FTlVJVEVNICImVGlkL0RhdG9cdEY1IiwgICAgQ01EX1RJTUVfREFURQogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICJUZWtzdGJyeXRpbiZnIiwgIENNRF9XUkFQCiAgTUVOVUlURU0gIlNrciZpZnQuLi4iLCAgICAgICAgICBDTURfRk9OVAogfQpQT1BVUCAiJlP4ayIgewogIE1FTlVJVEVNICImU/hrLi4uXHRDdHJsK0YiLCAgIENNRF9TRUFSQ0gKICBNRU5VSVRFTSAiJlP4ayBldHRlciBuZXN0JmVcdEYzIiwgIENNRF9TRUFSQ0hfTkVYVAogfQpQT1BVUCAiJkhqZWxwIiB7CiAgTUVOVUlURU0gIiZJbm5ob2xkIiwgICAgICAgICBDTURfSEVMUF9DT05URU5UUwogIE1FTlVJVEVNICImU/hrLi4uIiwgICAgICAgIENNRF9IRUxQX1NFQVJDSAogIE1FTlVJVEVNICImSGplbHAgb20gaGplbHAiLCAgICAgQ01EX0hFTFBfT05fSEVMUAogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImT20gTm90ZXBhZCIsIENNRF9IRUxQX0FCT1VUX05PVEVQQUQKIH0KfQoKLyogRGlhbG9nIGBQYWdlIHNldHVwJyAqLwoKRElBTE9HX1BBR0VTRVRVUCBESUFMT0cgMCwgMCwgMjI1LCA5NQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpDQVBUSU9OICJTaWRlb3Bwc2V0dCIKewpMVEVYVCAgICAiJlRvcHB0ZWtzdDoiLCAgMHgxNDAsICAgMTAsIDA3LCA0MCwgMTUKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9IRUFERVJWQUxVRSwgICA2MCwgMDUsMTEwLCAxMiwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJkJ1bm50ZWtzdDoiLCAgMHgxNDIsICAgMTAsIDI0LCA0MCwgMTUKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9GT09URVJWQUxVRSwgICA2MCwgMjIsMTEwLCAxMiwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUAoKR1JPVVBCT1ggIiZNYXJnIChtbSk6IiwgICAgICAweDE0NCwgICAxMCwgNDMsMTYwLCA0NQpMVEVYVCAgICAiJlZlbnN0cmU6IiwgICAgICAgIDB4MTQ1LCAgIDIwLCA1NSwgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCBJRENfUEFHRVNFVFVQX0xFRlRWQUxVRSwgICAgIDUwLCA1NSwgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIiZUb3BwOiIsICAgICAgICAgMHgxNDgsICAgIDIwLCA3MywgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCBJRENfUEFHRVNFVFVQX1RPUFZBTFVFLCAgICAgIDUwLCA3MywgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIkj4eSZyZToiLCAgICAgICAweDE0QiwgMTAwLCA1NSwgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCBJRENfUEFHRVNFVFVQX1JJR0hUVkFMVUUsICAgMTMwLCA1NSwgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIiZCdW5uOiIsICAgICAgMHgxNEUsMTAwLCA3MywgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCBJRENfUEFHRVNFVFVQX0JPVFRPTVZBTFVFLCAgMTMwLCA3MywgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKCkRFRlBVU0hCVVRUT04gIk9LIiwgICAgICAgICBJRE9LLCAgICAgICAgICAgICAgICAgICAxODAsICAzLCA0MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiQXZicnl0IiwgICAgIElEQ0FOQ0VMLCAgICAgICAgICAgICAgIDE4MCwgMjEsIDQwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICImSGplbHAiLCAgICAgICBJREhFTFAsICAgICAgICAgICAgICAgIDE4MCwgMzksIDQwLCAxNSwgV1NfVEFCU1RPUAp9CgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7ClNUUklOR19QQUdFU0VUVVBfSEVBREVSVkFMVUUsICAgIiZmIgpTVFJJTkdfUEFHRVNFVFVQX0ZPT1RFUlZBTFVFLCAgICJTaWRlICZzIgoKU1RSSU5HX05PVEVQQUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vdGlzYmxva2siClNUUklOR19FUlJPUiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGRUlMIgpTVFJJTkdfV0FSTklORywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQURWQVJTRUwiClNUUklOR19JTkZPLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmZvcm1hc2pvbiIKClNUUklOR19VTlRJVExFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoVXRlbiBuYXZuKSIKClNUUklOR19BTExfRklMRVMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGxlIGZpbGVyICgqLiopIgpTVFJJTkdfVEVYVF9GSUxFU19UWFQsICAgICAgICAgICAgICAgICAgIlRla3N0ZmlsZXIgKCoudHh0KSIKClNUUklOR19UT09MQVJHRSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGaWxlbiCrJXO7IGVyIGZvciBzdG9yIGZvciBOb3Rpc2Jsb2trLlxuIFwKQnJ1ayBlbiBhbm5lbiByZWRpZ2VyZXIuIgpTVFJJTkdfTk9URVhULCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRHUgc2tyZXYgaWtrZSBpbm4gbm9lIHRla3N0LiBcClxuU2tyaXYgbm9lIG9nIHBy+HYgaWdqZW4uIgpTVFJJTkdfRE9FU05PVEVYSVNULCAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmlsZW4gqyVzuyBmaW5uZXMgaWtrZS5cblxuIFwKT3BwcmV0dGUgZW4gbnkgZmlsPyIKU1RSSU5HX05PVFNBVkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZpbGVuIKslc7sgZXIgZW5kcmV0LlxuXG4gXApMYWdyZSBlbmRyaW5nZW5lPyIKU1RSSU5HX05PVEZPVU5ELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiS2xhcnRlIGlra2UgZmlubmUgqyVzuy4iClNUUklOR19PVVRfT0ZfTUVNT1JZLCAgICAgICAgICAgICAgICAgICAiSWtrZSBub2sgbWlubmUgZm9yIOUgZnVsbGb4cmUgXApvcGVyYXNqb25lbi5cbkx1a2sgZXQgZWxsZXIgZmxlcmUgcHJvZ3JhbW1lciBmb3Ig5SBmcmlnavhyZVxubWVyIFwKbWlubmUuIgoKfQo=