LyoKICogIE5vdGVwYWQgKFdhbG9uIHJlc291cmNlcykKICoKICogIENvcHlyaWdodCAxOTk3LDk4IE1hcmNlbCBCYXVyIDxtYmF1ckBnMjYuZXRoei5jaD4KICogIFByb29mcmVhZCAxOTk4IGJ5IERhdmlkIExlZSBMYW1iZXJ0IDxsYW1iZXI0NUBlZ3IubXN1LmVkdT4KICogIENvcHlyaWdodCAyMDAyIFN5bHZhaW4gUGV0cmVvbGxlIDxzcGV0cmVvbGxlQHlhaG9vLmZyPgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICovCgpMQU5HVUFHRSBMQU5HX1dBTE9OLCBTVUJMQU5HX0RFRkFVTFQKCk1BSU5fTUVOVSBNRU5VCnsKIFBPUFVQICImRml0Y2juIiB7CiAgTUVOVUlURU0gIiZOb3ZlYS4uLiIsICAgICAgICAgQ01EX05FVwogIE1FTlVJVEVNICImRHJvdu4iLCAgICAgICAgICAgIENNRF9PUEVOCiAgTUVOVUlURU0gIiZTY2hhcGVyIiwgICAgICAgICAgQ01EX1NBVkUKICBNRU5VSVRFTSAiU2NoYXBlciDodCByJmxvbWVyLi4uIiwgICAgIENNRF9TQVZFX0FTCiAgTUVOVUlURU0gIiZSZXhoZSIsICAgICAgICAgICAgQ01EX1BSSU5UCiAgTUVOVUlURU0gIkFycmFuZGptaW50IGRlbCAmUOVkamUuLi4iLCBDTURfUEFHRV9TRVRVUAogIE1FTlVJVEVNICImQXBvbnRpYWVkamUgZGVsIHNjcmlyZWNlLi4uIiwgICAgICBDTURfUFJJTlRFUl9TRVRVUAogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICJNb3Vzc+4gJkZv+yIsICAgICAgIENNRF9FWElUCiB9ClBPUFVQICImQ2FuZGruIiB7CiAgTUVOVUlURU0gIiZEaXNm6Vx0Q3RybCtaIiwgICAgQ01EX1VORE8KICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiQ/QmcGVyXHRDdHJsK1giLCAgICBDTURfQ1VUCiAgTUVOVUlURU0gIiZDb3B57lx0Q3RybCtDIiwgICAgQ01EX0NPUFkKICBNRU5VSVRFTSAiQyZsYXBlclx0Q3RybCtWIiwgICBDTURfUEFTVEUKICBNRU5VSVRFTSAiJlJhZmFjZXJcdERlbCIsICAgICBDTURfREVMRVRFCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZUY2h3ZXppIHRvdGFmd2FpdCIsICAgICAgICBDTURfU0VMRUNUX0FMTAogIE1FTlVJVEVNICImRXVyZS9EYXRlXHRGNSIsICAgIENNRF9USU1FX0RBVEUKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiQ/RwZXIgbGVzIHJvJnllcyIsICBDTURfV1JBUAogfQpQT1BVUCAiQyZ3ZXLuIiB7CiAgTUVOVUlURU0gIkN3ZXLuLi4uIiwgICAgICAgICAgQ01EX1NFQVJDSAogIE1FTlVJVEVNICImU2j7dmFudFx0RjMiLCAgICAgIENNRF9TRUFSQ0hfTkVYVAogfQpQT1BVUCAiJkFpZGUiIHsKICBNRU5VSVRFTSAixSZkdmlucyIsICAgICAgICAgICBDTURfSEVMUF9DT05URU5UUwogIE1FTlVJVEVNICJDJndlcu4uLi4iLCAgICAgICAgIENNRF9IRUxQX1NFQVJDSAogIE1FTlVJVEVNICImQWlkZSBzbyBsJyBBaWRlIiwgIENNRF9IRUxQX09OX0hFTFAKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBQT1BVUCAiJkluZm9ybeVjaW9uLi4uIiB7CiAgIE1FTlVJVEVNICImTGljaW5zZSIsICAgICAgICAgQ01EX0xJQ0VOU0UKICAgTUVOVUlURU0gIiZOT0xFIFdBUkFOVEVZRSIsICBDTURfTk9fV0FSUkFOVFkKICAgTUVOVUlURU0gIsUgJmRmYWl0IGRpIFdpbmUiLCBDTURfQUJPVVRfV0lORQogIH0KIH0KfQoKLyogRGlhbG9nIGBQYWdlIHNldHVwJyAqLwoKRElBTE9HX1BBR0VTRVRVUCBESUFMT0cgMCwgMCwgMjI1LCA5NQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKRk9OVCA4LCAiSGVsdiIKQ0FQVElPTiAiQXJpbmRqbWludCBkZWwgUOVkamUiCnsKTFRFWFQgICAgIiZUaXRlOiIsICAweDE0MCwgICAxMCwgMDcsIDQwLCAxNQpFRElUVEVYVCAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MSwgICAgICAgNjAsIDA1LDExMCwgMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIiZQ7m5vdGU6IiwgIDB4MTQyLCAgIDEwLCAyNCwgNDAsIDE1CkVESVRURVhUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQzLCAgICAgICA2MCwgMjIsMTEwLCAxMiwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUAoKR1JPVVBCT1ggIiZNYXJkamVzOiIsICAgICAgMHgxNDQsICAgICAxMCwgNDMsMTYwLCA0NQpMVEVYVCAgICAiJkhpbnRjaGU6IiwgICAgICAgIDB4MTQ1LCAgIDIwLCA1NSwgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCAvKlNUUklOR19QQUdFU0VUVVBfTEVGVFZBTFVFLCovICAgMHgxNDcsICAgICAgIDUwLCA1NSwgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIiZDb3BldGU6IiwgICAgICAgICAweDE0OCwgICAgMjAsIDczLCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIC8qU1RSSU5HX1BBR0VTRVRVUF9UT1BWQUxVRSwqLyAgICAweDE0QSwgICAgICAgIDUwLCA3MywgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIiZEcm9ldGU6IiwgICAgICAgMHgxNEIsIDEwMCwgNTUsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgLypTVFJJTkdfUEFHRVNFVFVQX1JJR0hUVkFMVUUsKi8gIDB4MTRELCAgICAgMTMwLCA1NSwgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIiZCYXM6IiwgICAgICAweDE0RSwxMDAsIDczLCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIC8qU1RSSU5HX1BBR0VTRVRVUF9CT1RUT01WQUxVRSwqLyAweDE1MCwgICAgMTMwLCA3MywgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKCkRFRlBVU0hCVVRUT04gIkkgVmEiLCAgICAgICAgIDB4MTUxLCAgICAgICAgICAgICAgICAgICAxODAsICAzLCA0MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiUmlub25j7iIsICAgICAweDE1MiwgICAgICAgICAgICAgICAxODAsIDIxLCA0MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiJkFpZGUiLCAgICAgICAweDE1MywgICAgICAgICAgICAgICAgMTgwLCAzOSwgNDAsIDE1LCBXU19UQUJTVE9QCn0KClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKU1RSSU5HX1BBR0VTRVRVUF9IRUFERVJWQUxVRSwgICAiJm4iICAgICAgICAvKiBGSVhNRSAqLwpTVFJJTkdfUEFHRVNFVFVQX0ZPT1RFUlZBTFVFLCAgICJQ5WRqZSAmcyIgICAvKiBGSVhNRSAqLwpTVFJJTkdfUEFHRVNFVFVQX0xFRlRWQUxVRSwgICAgICAgICAgICAgIjIwIG1tIiAgICAgLyogRklYTUUgKi8KU1RSSU5HX1BBR0VTRVRVUF9SSUdIVFZBTFVFLCAgICAiMjAgbW0iICAgICAvKiBGSVhNRSAqLwpTVFJJTkdfUEFHRVNFVFVQX1RPUFZBTFVFLCAgICAgICAgICAgICAgIjI1IG1tIiAgICAgLyogRklYTUUgKi8KU1RSSU5HX1BBR0VTRVRVUF9CT1RUT01WQUxVRSwgICAiMjUgbW0iICAgICAvKiBGSVhNRSAqLwoKU1RSSU5HX05PVEVQQUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vdGVwYWQiClNUUklOR19FUlJPUiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBUk9LRSIKU1RSSU5HX1dBUk5JTkcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFEVkVSVElYSE1JTlQiClNUUklOR19JTkZPLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmZvcm3lY2lvbiIKClNUUklOR19VTlRJVExFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoc2luIHRpdGUpIgoKU1RSSU5HX0FMTF9GSUxFUywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRvcyBsZXMgZml0Y2jucyAoKi4qKSIKU1RSSU5HX1RFWFRfRklMRVNfVFhULCAgICAgICAgICAgICAgICAgICJGaXRjaO5zIHRla3NlICgqLnR4dCkiCgpTVFJJTkdfVE9PTEFSR0UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTGkgZml0Y2juICclcycgZXN0IHRyb3AgZ3JvcyBwb2wgbm90ZXBhZC5cbiBcCkVwbG95b3ogb24g9HRlIGFzcG91Z25ldSBkaSB0ZWtzZS4iClNUUklOR19OT1RFWFQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJWb3MgbicgYXZveiBy6W4gc2ljcu50LiBcClxuVGFwZXogZW5lIHNhY3dlIOh0IHJhc2F5ZXoiClNUUklOR19ET0VTTk9URVhJU1QsICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGaWxlICclcydcbmRvZXMgbm90IGV4aXN0XG5cbiBcCkRvIHlvdSB3YW50IHRvIGNyZWF0ZSBhIG5ldyBmaWxlID8iClNUUklOR19OT1RTQVZFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJMaSBmaXRjaO4gJyVzJ1xuYSBjYW5kau5cblxuIFwKRWwgdm9sb3ogc2NoYXBlciA/IgpTVFJJTkdfTk9URk9VTkQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICInJXMnIHBvdXQgbuluIGVzc2UgdHJvdukuIgpTVFJJTkdfT1VUX09GX01FTU9SWSwgICAgICAgICAgICAgICAgICAgIkxpIG1lbXdlcmUgZXN0IHBsaW5uZS4gXG5cCkNsb3lveiBvbiBwcm9ncmFtZSBvdSBwdXMgcG8gbW9udGVyIGxpIG1lbXdlcmUgbGliZS4iCgp9Cg==