LyoKICogUHJvZ3JhbSBNYW5hZ2VyCiAqCiAqIENvcHlyaWdodCAxOTk2IFVscmljaCBTY2htaWQKICogRnJlbmNoIEZyLnJjIGJ5IFBhYmxvIFNhcmF0eGFnYQogKiBDb3B5cmlnaHQgMjAwMiBTeWx2YWluIFBldHJlb2xsZQogKiBDb3B5cmlnaHQgMjAwNiBKb25hdGhhbqBFcm5zdAogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgpMQU5HVUFHRSBMQU5HX0ZSRU5DSCwgU1VCTEFOR19ORVVUUkFMCgovKiBNZW51ICovCgpNQUlOX01FTlUgTUVOVQp7CiBQT1BVUCAiJkZpY2hpZXIiIHsKICAgTUVOVUlURU0gIiZOb3V2ZWF1Li4uIiwgICAgICAgICAgICAgIFBNX05FVwogICBNRU5VSVRFTSAiTyZ1dnJpclx0RW50cullIiwgICAgICAgICAgICAgUE1fT1BFTgogICBNRU5VSVRFTSAiJkTpcGxhY2VyLi4uXHRGNyIsICAgICAgICAgICAgIFBNX01PVkUsICAgICAgR1JBWUVECiAgIE1FTlVJVEVNICImQ29waWVyLi4uXHRGOCIsICAgICAgICAgICAgIFBNX0NPUFksICAgICAgR1JBWUVECiAgIE1FTlVJVEVNICImU3VwcHJpbWVyXHRTdXBwciIsICAgICAgICAgICBQTV9ERUxFVEUKICAgTUVOVUlURU0gIiZQcm9wcmnpdOlzLi4uXHRBbHQrRW50cullIiwgICAgICAgUE1fQVRUUklCVVRFUwogICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgTUVOVUlURU0gIkUmeOljdXRlci4uLiIsICAgICAgICAgIFBNX0VYRUNVVEUKICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgIE1FTlVJVEVNICImUXVpdHRlciBXaW5kb3dzLi4uIiwgICAgICAgICAgICAgUE1fRVhJVAogfQogUE9QVVAgIiZPcHRpb25zIiB7CiAgIE1FTlVJVEVNICJS6W9yZyZhbmlzYXRpb24gYXV0b21hdGlxdWUiLCAgUE1fQVVUT19BUlJBTkdFCiAgIE1FTlVJVEVNICImUulkdWlyZSDgIGwndXRpbGlzYXRpb24iLCAgICBQTV9NSU5fT05fUlVOCiAgIE1FTlVJVEVNICImRW5yZWdpc3RyZXIgbGEgY29uZmlndXJhdGlvbiBlbiBxdWl0dGFudCIsIFBNX1NBVkVfU0VUVElOR1MKIH0KIFBPUFVQICJGJmVu6nRyZXMiIHsKICAgTUVOVUlURU0gIiZDYXNjYWRlXHRNYWorRjUiLCAgICAgICBQTV9PVkVSTEFQCiAgIE1FTlVJVEVNICImTW9zYe9xdWVcdE1haitGNCIsICBQTV9TSURFX0JZX1NJREUKICAgTUVOVUlURU0gIiZS6W9yZ2FuaXNlciBsZXMgaWP0bmVzIiwgICAgICAgUE1fQVJSQU5HRQogfQogCiBQT1BVUCAiQWlkJmUiIHsKICAgTUVOVUlURU0gIiZTb21tYWlyZSIsICAgICAgICAgUE1fQ09OVEVOVFMKICAgTUVOVUlURU0gIiZSZWNoZXJjaGVyLi4uIiwgICAgICAgICAgIFBNX1NFQVJDSAogICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgTUVOVUlURU0gIiZVdGlsaXNlciBsJ2FpZGUiLCAgICAgUE1fSEVMUE9OSEVMUAogICBNRU5VSVRFTSAiRGlkYWN0aWNpZWwgJldpbmRvd3MiLCAgICAgICAgIFBNX1RVVE9SSUFMCiAgIE1FTlVJVEVNIFNFUEFSQVRPUgoKICAgUE9QVVAgIiZJbmZvLi4uIiB7CiAgICAgTUVOVUlURU0gIiZMaWNlbmNlIiwgICAgICAgIFBNX0xJQ0VOU0UKICAgICBNRU5VSVRFTSAiQVVDVU5FICZHQVJBTlRJRSIsICAgIFBNX05PX1dBUlJBTlRZCiAgICAgTUVOVUlURU0gIsAgJnByb3BvcyBkZSBXaW5lIiwgICAgIFBNX0FCT1VUX1dJTkUKICAgfQogfQp9CgovKiBEaWFsb2cgYE5ldycgKi8KCkRJQUxPR19ORVcgRElBTE9HIDAsIDAsIDE3MCwgNjUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiTm91dmVhdSIKewpSQURJT0JVVFRPTiAgICIiLCAgICAgICAgICAgICAgICAgUE1fTkVXX0dST1VQLCAgICAxMCwgMTUsICAxMCwgMTUKTFRFWFQgICAgICAgICAiJkdyb3VwZSBkZSBwcm9ncmFtbWVzIiwgICBQTV9ORVdfR1JPVVAsICAgIDIwLCAxOCwgIDgwLCAxNQpSQURJT0JVVFRPTiAgICIiLCAgICAgICAgICAgICAgICAgUE1fTkVXX1BST0dSQU0sICAxMCwgMzUsICAxMCwgMTUKTFRFWFQgICAgICAgICAiJlByb2dyYW1tZSIsIFBNX05FV19QUk9HUkFNLCAgMjAsIDM4LCAgODAsIDE1CkRFRlBVU0hCVVRUT04gIk9LIiwgICAgICAgICAgSURPSywgICAgICAgICAgIDEwNSwgIDUsICA2MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiQW5udWxlciIsICAgICAgSURDQU5DRUwsICAgICAgIDEwNSwgMjUsICA2MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiQWlkJmUiLCAgICAgICAgUE1fSEVMUCwgICAgICAgIDEwNSwgNDUsICA2MCwgMTUsIFdTX1RBQlNUT1AKfQoKLyogRGlhbG9nIGBNb3ZlJyAqLwoKRElBTE9HX01PVkUgRElBTE9HIDAsIDAsIDI1MCwgNjUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiROlwbGFjZXIgdW4gcHJvZ3JhbW1lIgp7CkxURVhUICAgICAgICAgIkTpcGxhY2VyIGxlIHByb2dyYW1tZaA6IiwgICAgSURJR05PUkUsICAgICAgICAgICAgNSwgIDUsICA5MCwgMTUKTFRFWFQgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICBQTV9QUk9HUkFNLCAgICAgICAgIDk1LCAgNSwgIDkwLCAxNQpMVEVYVCAgICAgICAgICLAIHBhcnRpciBkdSBncm91cGWgOiIsIElESUdOT1JFLCAgICAgICAgICAgIDUsIDEzLCAgOTAsIDE1CkxURVhUICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgUE1fRlJPTV9HUk9VUCwgICAgICA5NSwgMTMsICA5MCwgMTUKTFRFWFQgICAgICAgICAiJlZlcnMgbGUgZ3JvdXBloDoiLCAgIFBNX1RPX0dST1VQX1RYVCwgICAgIDUsIDI4LCAxNDAsIDE1CkNPTUJPQk9YICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUE1fVE9fR1JPVVAsICAgICAgICAgNSwgMzgsIDE0MCwgNTAsIFdTX1RBQlNUT1AgfCBDQlNfRFJPUERPV05MSVNUCkRFRlBVU0hCVVRUT04gIk9LIiwgICAgICAgICAgICAgIElET0ssICAgICAgICAgICAgICAxODUsICA1LCAgNjAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIkFubnVsZXIiLCAgICAgICAgICBJRENBTkNFTCwgICAgICAgICAgMTg1LCAyNSwgIDYwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICJBaWQmZSIsICAgICAgICAgICAgUE1fSEVMUCwgICAgICAgICAgIDE4NSwgNDUsICA2MCwgMTUsIFdTX1RBQlNUT1AKfQoKLyogRGlhbG9nIGBDb3B5JyAqLwoKRElBTE9HX0NPUFkgRElBTE9HIDAsIDAsIDI1MCwgNjUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiQ29waWVyIHVuIHByb2dyYW1tZSIKewpMVEVYVCAgICAgICAgICJDb3BpZXIgbGUgcHJvZ3JhbW1loDoiLCAgICBJRElHTk9SRSwgICAgICAgICAgICA1LCAgNSwgIDkwLCAxNQpMVEVYVCAgICAgICAgICIiLCAgICAgICAgICAgICAgICAgICAgIFBNX1BST0dSQU0sICAgICAgICAgOTUsICA1LCAgOTAsIDE1CkxURVhUICAgICAgICAgIsAgcGFydGlyIGR1IGdyb3VwZaA6IiwgSURJR05PUkUsICAgICAgICAgICAgNSwgMTMsICA5MCwgMTUKTFRFWFQgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICBQTV9GUk9NX0dST1VQLCAgICAgIDk1LCAxMywgIDkwLCAxNQpMVEVYVCAgICAgICAgICImVmVycyBsZSBncm91cGWgOiIsICAgUE1fVE9fR1JPVVBfVFhULCAgICAgNSwgMjgsIDE0MCwgMTUKQ09NQk9CT1ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQTV9UT19HUk9VUCwgICAgICAgICA1LCAzOCwgMTQwLCA1MCwgV1NfVEFCU1RPUCB8IENCU19EUk9QRE9XTkxJU1QKREVGUFVTSEJVVFRPTiAiT0siLCAgICAgICAgICAgICAgSURPSywgICAgICAgICAgICAgIDE4NSwgIDUsICA2MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiQW5udWxlciIsICAgICAgICAgIElEQ0FOQ0VMLCAgICAgICAgICAxODUsIDI1LCAgNjAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIkFpZCZlIiwgICAgICAgICAgICBQTV9IRUxQLCAgICAgICAgICAgMTg1LCA0NSwgIDYwLCAxNSwgV1NfVEFCU1RPUAp9CgovKiBEaWFsb2cgYEdyb3VwIGF0dHJpYnV0ZXMnICovCgpESUFMT0dfR1JPVVAgRElBTE9HIDAsIDAsIDIzMCwgNjUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiUHJvcHJp6XTpcyBkZSBncm91cGUiCnsKTFRFWFQgICAgICImTm9tIDoiLCBQTV9ERVNDUklQVElPTl9UWFQsICAgMDUsIDE4LCAgNTAsIDEwCkVESVRURVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBNX0RFU0NSSVBUSU9OLCAgICAgICA2MCwgMTgsICA5MCwgMTUsIFdTX1RBQlNUT1AKTFRFWFQgICAgICImRmljaGllciBkdSBncm91cGWgOiIsICAgICAgICBQTV9GSUxFX1RYVCwgICAgICAgICAgMDUsIDM4LCAgNTAsIDEwCkVESVRURVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBNX0ZJTEUsICAgICAgICAgICAgICA2MCwgMzgsICA5MCwgMTUsIFdTX1RBQlNUT1AKREVGUFVTSEJVVFRPTiAiT0siLCAgICAgICAgICAgIElET0ssICAgICAgICAgICAgICAgIDE1NSwgIDUsICA2MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiQW5udWxlciIsICAgICAgICBJRENBTkNFTCwgICAgICAgICAgICAxNTUsIDI1LCAgNjAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIkFpZCZlIiwgICAgICAgICAgUE1fSEVMUCwgICAgICAgICAgICAgMTU1LCA0NSwgIDYwLCAxNSwgV1NfVEFCU1RPUAp9CgovKiBEaWFsb2cgYFByb2dyYW0gYXR0cmlidXRlcycgKi8KCkRJQUxPR19QUk9HUkFNIERJQUxPRyAwLCAwLCAyNTAsIDEwNQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJQcm9wcmnpdOlzIGRlIHByb2dyYW1tZSIKewpMVEVYVCAgICAgICAgICImTm9toDoiLCAgUE1fREVTQ1JJUFRJT05fVFhULCAgIDA1LCAxMCwgIDYwLCAxMApFRElUVEVYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUE1fREVTQ1JJUFRJT04sICAgICAgIDgwLCAxMCwgIDkwLCAxNSwgV1NfVEFCU1RPUApMVEVYVCAgICAgICAgICImTGlnbmUgZGUgY29tbWFuZGWgOiIsIFBNX0NPTU1BTkRfTElORV9UWFQsICAwNSwgMjUsICA2MCwgMTAKRURJVFRFWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBNX0NPTU1BTkRfTElORSwgICAgICA4MCwgMjUsICA5MCwgMTUsIFdTX1RBQlNUT1AKTFRFWFQgICAgICAgICAiUulwZXJ0b2lyZSBkZSB0cmEmdmFpbKA6IiwgICAgUE1fRElSRUNUT1JZX1RYVCwgICAgIDA1LCA0MCwgIDYwLCAxMApFRElUVEVYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUE1fRElSRUNUT1JZLCAgICAgICAgIDgwLCA0MCwgIDkwLCAxNSwgV1NfVEFCU1RPUApMVEVYVCAgICAgICAgICImVG91Y2hlIGRlIHJhY2NvdXJjaaA6IiwgICAgICBQTV9IT1RfS0VZX1RYVCwgICAgICAgMDUsIDU1LCAgNjAsIDEwCkVESVRURVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQTV9IT1RfS0VZLCAgICAgICAgICAgODAsIDU1LCAgOTAsIDE1LCBXU19UQUJTVE9QCklDT04gICAgICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICBQTV9JQ09OLCAgICAgICAgICAgICAgMjAsIDcwCkNIRUNLQk9YICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICBQTV9TWU1CT0wsICAgICAgICAgICAgODAsIDc1LCAgMTAsIDEwLCBXU19UQUJTVE9QCkxURVhUICAgICAgICAgIlLpZHVpcmUg4CBsJyZ1dGlsaXNhdGlvbiIsICAgICAgIElESUdOT1JFLCAgICAgICAgICAgICA5NSwgNzUsICA3NSwgMTAKREVGUFVTSEJVVFRPTiAiT0siLCAgICAgICAgICAgICAgICAgICBJRE9LLCAgICAgICAgICAgICAgICAxODUsICA1LCAgNjAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIkFubnVsZXIiLCAgICAgICAgICAgICAgIElEQ0FOQ0VMLCAgICAgICAgICAgIDE4NSwgMjUsICA2MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiUGEmcmNvdXJpci4uLiIsICAgICAgICAgICAgICAgUE1fQlJPV1NFLCAgICAgICAgICAgMTg1LCA0NSwgIDYwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICImQ2hhbmdlciBsJ2lj9G5lLi4uIiwgUE1fT1RIRVJfU1lNQk9MLCAgICAgMTg1LCA2NSwgIDYwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICJBaWQmZSIsICAgICAgICAgICAgICAgICBQTV9IRUxQLCAgICAgICAgICAgICAxODUsIDg1LCAgNjAsIDE1LCBXU19UQUJTVE9QCn0KCi8qIERpYWxvZyBgU3ltYm9sJyAqLwoKRElBTE9HX1NZTUJPTCBESUFMT0cgMCwgMCwgMjAwLCA4NQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJDaGFuZ2VyIGwnaWP0bmUiCnsKTFRFWFQgICAgICImTm9tIGR1IGZpY2hpZXKgOiIsICAgIFBNX0lDT05fRklMRV9UWFQsICAgIDUsIDE1LCAgNDAsIDEwCkVESVRURVhUICAgICAgICAgICAgICAgICAgICAgICAgIFBNX0lDT05fRklMRSwgICAgICAgNDUsIDE1LCAgODUsIDE1LCBXU19UQUJTVE9QCkxURVhUICAgICAiSWP0bmUgYSZjdHVlbGxloDoiLCBQTV9TWU1CT0xfTElTVF9UWFQsICA1LCAzMCwgMTI1LCAxMApDT01CT0JPWCAgICAgICAgICAgICAgICAgICAgICAgICBQTV9TWU1CT0xfTElTVCwgICAgICA1LCA0MCwgMTI1LCA1MCwKICAgQ0JTX0RST1BET1dOTElTVCB8IENCU19BVVRPSFNDUk9MTCB8IENCU19PV05FUkRSQVdGSVhFRCB8IFdTX1RBQlNUT1AKREVGUFVTSEJVVFRPTiAiT0siLCAgICAgICAgIElET0ssICAgICAgICAgICAgICAxMzUsICA1LCAgNjAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIkFubnVsZXIiLCAgICAgSURDQU5DRUwsICAgICAgICAgIDEzNSwgMjUsICA2MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiUGEmcmNvdXJpci4uLiIsICAgIFBNX0JST1dTRSwgICAgICAgICAxMzUsIDQ1LCAgNjAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIkFpZCZlIiwgICAgICAgUE1fSEVMUCwgICAgICAgICAgIDEzNSwgNjUsICA2MCwgMTUsIFdTX1RBQlNUT1AKfQoKLyogRGlhbG9nIGBFeGVjdXRlJyAqLwoKRElBTE9HX0VYRUNVVEUgRElBTE9HIDAsIDAsIDIwMCwgODUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiRXjpY3V0ZXIgdW4gcHJvZ3JhbW1lIgp7CkxURVhUICAgICAiJkxpZ25lIGRlIGNvbW1hbmRloDoiLCBJRElHTk9SRSwgICAwNSwgMTUsIDEyMCwgMTAKRURJVFRFWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUE1fQ09NTUFORCwgMDUsIDI1LCAxMjAsIDE1LCBXU19UQUJTVE9QCkNIRUNLQk9YICAgICAgIiIsICAgICAgICAgICAgICAgICAgICAgIFBNX1NZTUJPTCwgIDA1LCA0NSwgIDEwLCAxMCwgV1NfVEFCU1RPUApMVEVYVCAgICAgICAgICJS6WR1aXJlIOAgbCcmdXRpbGlzYXRpb24iLCAgIElESUdOT1JFLCAgIDIwLCA0NSwgMTIwLCAxMApERUZQVVNIQlVUVE9OICJPSyIsICAgICAgICAgICAgICAgSURPSywgICAgICAxMzUsICA1LCAgNjAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIkFubnVsZXIiLCAgICAgICAgICAgSURDQU5DRUwsICAxMzUsIDI1LCAgNjAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIlBhJnJjb3VyaXIuLi4iLCAgICAgICAgICBQTV9CUk9XU0UsIDEzNSwgNDUsICA2MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiQWlkJmUiLCAgICAgICAgICAgICBQTV9IRUxQLCAgIDEzNSwgNjUsICA2MCwgMTUsIFdTX1RBQlNUT1AKfQoKLyogU3RyaW5ncyAqLwoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKewpJRFNfUFJPR1JBTV9NQU5BR0VSLAkJIkdlc3Rpb25haXJlIGRlIHByb2dyYW1tZXMiCklEU19FUlJPUiwJCQkiRVJSRVVSIgpJRFNfV0FSTklORywJCQkiQVRURU5USU9OIgpJRFNfSU5GTywJCQkiSW5mb3JtYXRpb24iCklEU19ERUxFVEUsCQkJIlN1cHByaW1lciIKSURTX0RFTEVURV9HUk9VUF9zLAkJIlZvdWxlei12b3VzIHN1cHByaW1lciBsZSBncm91cGUgq6Alc6C7oD8iCklEU19ERUxFVEVfUFJPR1JBTV9zLAkJIlZvdWxlei12b3VzIHN1cHByaW1lciBsZSBwcm9ncmFtbWUgq6Alc6C7oD8iCklEU19OT1RfSU1QTEVNRU5URUQsCQkiTm9uIGltcGxlbWVudOkiCklEU19GSUxFX1JFQURfRVJST1JfcywJCSJJbXBvc3NpYmxlIGQnb3V2cmlyIKugJXOguy4iCklEU19GSUxFX1dSSVRFX0VSUk9SX3MsCQkiSW1wb3NzaWJsZSBkJ2VucmVnaXN0cmVyIKugJXOguy4iCklEU19HUlBGSUxFX1JFQURfRVJST1JfcywJIlwKSW1wb3NzaWJsZSBkJ291dnJpciBsZSBncm91cGUgq6Alc6C7LlxuXApWb3VsZXotdm91cyBxdWUgbGUgR2VzdGlvbm5haXJlIGRlIHByb2dyYW1tZXMgZXNzYWllXG5cCmRlIGwnb3V2cmlyIGRhbnMgbGVzIHByb2NoYWluZXMgc2Vzc2lvbnOgPyIKSURTX09VVF9PRl9NRU1PUlksCQkiTeltb2lyZSBpbnN1ZmZpc2FudGUuIgpJRFNfV0lOSEVMUF9FUlJPUiwJCSJJbXBvc3NpYmxlIGQnYWZmaWNoZXIgbCdhaWRlLiIKSURTX1VOS05PV05fRkVBVFVSRV9zLAkJIkNhcmFjdOlyaXN0aXF1ZSBpbmNvbm51ZSBkYW5zICVzIgpJRFNfRklMRV9OT1RfT1ZFUldSSVRURU5fcywJIkxlIGZpY2hpZXIgq6Alc6C7IGV4aXN0ZS4gTm9uIOljcmFz6S4iCklEU19TQVZFX0dST1VQX0FTX3MsCQkiR3JvdXBlIGVucmVnaXN0cukgc291cyCroCVzoLsgcG91ciDpdml0ZXIgbCfpY3Jhc2VtZW50IGR1IGZpY2hpZXIgb3JpZ2luYWwuIgpJRFNfTk9fSE9UX0tFWSwJCQkiQXVjdW4iCklEU19BTExfRklMRVMsCQkJIlRvdXMgZmljaGllcnMgKCouKikiCklEU19QUk9HUkFNUywJCQkiUHJvZ3JhbW1lcyIKSURTX0xJQlJBUklFU19ETEwsCQkiQmlibGlvdGjocXVlcyAoKi5kbGwpIgpJRFNfU1lNQk9MX0ZJTEVTLAkJIklj9G5lcyIKSURTX1NZTUJPTFNfSUNPLAkJIklj9G5lcyAoKi5pY28pIgp9CgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRSBMQU5HVUFHRSBMQU5HX0ZSRU5DSCwgU1VCTEFOR19ORVVUUkFMCnsKSURTX0xJQ0VOU0VfQ0FQVElPTiwgICAgICAgICAgICAiTElDRU5DRSIKSURTX0xJQ0VOU0UsCiJDZSBwcm9ncmFtbWUgZXN0IHVuIGxvZ2ljaWVsIGxpYnJloDsgdm91cyBwb3V2ZXogbGUgcmVkaXN0cmlidWVyIGV0L291IFwKbGUgbW9kaWZpZXIgc3VpdmFudCBsZXMgdGVybWVzIGRlIGxhIExpY2VuY2UgR+lu6XJhbGUgUHVibGlxdWUgTGltaXTpZSBHTlUgXAp0ZWxsZSBxdWUgcHVibGnpZSBwYXIgbGEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uoDsgc29pdCBsYSB2ZXJzaW9uIDIuMSBcCmRlIGxhIExpY2Vuc2UsIHNvaXQgKOAgdm90cmUgZ3LpKSB0b3V0ZSB2ZXJzaW9uIHVsdOlyaWV1cmUuXG5cCkNlIHByb2dyYW1tZSBlc3QgZGlzdHJpYnXpIGRhbnMgbCdlc3BvaXIgcXUnaWwgc2VyYSB1dGlsZSwgbWFpcyBcClNBTlMgQVVDVU5FIEdBUkFOVElFoDogc2FucyBt6m1lIGxhIGdhcmFudGllIGltcGxpY2l0ZSBkZSBcCkNPTU1FUkNJQUxJU0FCSUxJVMkgb3UgZCdBRMlRVUFUSU9OIMAgVU4gT0JKRUNUSUYgUEFSVElDVUxJRVIuIENvbnN1bHRleiBcCmxhIExpY2VuY2UgR+lu6XJhbGUgUHVibGlxdWUgTGltaXTpZSBwb3VyIHBsdXMgZGUgZOl0YWlscy5cblwKVm91cyBkZXZyaWV6IGF2b2lyIHJl53UgdW5lIGNvcGllIGRlIGxhIExpY2VuY2UgR+lu6XJhbGUgUHVibGlxdWUgTGltaXTpZSBcCkdOVSBhdmVjIGNlIHByb2dyYW1tZaA7IHNpIGNlIG4nZXN0IHBhcyBsZSBjYXMsIOljcml2ZXog4CBsYaA6IFwKRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgXApNQSAwMjExMC0xMzAxLCBVU0EuIgoKSURTX1dBUlJBTlRZX0NBUFRJT04sICJBVUNVTkUgR0FSQU5USUUiCklEU19XQVJSQU5UWSwKIkNlIHByb2dyYW1tZSBlc3QgZGlzdHJpYnXpIGRhbnMgbCdlc3BvaXIgcXUnaWwgc2VyYSB1dGlsZSwgbWFpcyBcClNBTlMgQVVDVU5FIEdBUkFOVElFoDogc2FucyBt6m1lIGxhIGdhcmFudGllIGltcGxpY2l0ZSBkZSBcCkNPTU1FUkNJQUxJU0FCSUxJVMkgb3UgZCdBRMlRVUFUSU9OIMAgVU4gT0JKRUNUSUYgUEFSVElDVUxJRVIuIENvbnN1bHRleiBcCmxhIExpY2VuY2UgR+lu6XJhbGUgUHVibGlxdWUgTGltaXTpZSBwb3VyIHBsdXMgZGUgZOl0YWlscy4iCn0K