LyogSGV5LCBFbWFjcywgb3BlbiB0aGlzIGZpbGUgd2l0aCAtKi0gY29kaW5nOiBjcDEyNTAgLSotCiAqCiAqIFdpbmVDZmcgcmVzb3VyY2VzCiAqIEVuZ2xpc2ggTGFuZ3VhZ2UgU3VwcG9ydAogKgogKiBDb3B5cmlnaHQgMjAwMiBKYWNvIEdyZWVmZgogKiBDb3B5cmlnaHQgMjAwMyBEaW1pdHJpZSBPLiBQYXVuCiAqIENvcHlyaWdodCAyMDAzLTIwMDQgTWlrZSBIZWFybgogKiBDb3B5cmlnaHQgMjAwNCBEYXZpZCBLcmVkYmEKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqCiAqLwoKTEFOR1VBR0UgTEFOR19DWkVDSCwgU1VCTEFOR19ERUZBVUxUCgovKiBDemVjaCBzdHJpbmdzIGluIENQMTI1MCAqLwoKSUREX0FCT1VUQ0ZHIERJQUxPR0VYIDAsIDAsIDI2MCwgMjUwClNUWUxFIFdTX0NISUxECkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQkVHSU4KICAgIExURVhUICAgICAgICAgICAiVmVyemUgV2luZToiLElEQ19TVEFUSUMsMTE5LDE3LDU1LDgKICAgIExURVhUICAgICAgICAgICAiQ1ZTIixJRENfV0lORVZFUiwxNzksMTcsNTYsOAogICAgQ09OVFJPTCAgICAgICAgIElEQl9XSU5FLElEQ19TVEFUSUMsIlN0YXRpYyIsU1NfQklUTUFQIHwgU1NfQ0VOVEVSSU1BR0UgfCAKICAgICAgICAgICAgICAgICAgICBTU19SRUFMU0laRUlNQUdFIHwgV1NfQk9SREVSLDE1LDE3LDE1NywxMTEsIFdTX0VYX1RSQU5TUEFSRU5UCiAgICBMVEVYVCAgICAgICAgICAgImh0dHA6Ly93d3cud2luZWhxLm9yZy8iLElEQ19TVEFUSUMsMTE5LDMxLDEwNiw4CiAgICBHUk9VUEJPWCAgICAgICAgIkluZm9ybWFjZSIsSURDX1NUQVRJQyw4LDQsMjQ0LDEwNgogICAgQ1RFWFQgICAgICAgICAgICJUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiIsCiAgICAgICAgICAgICAgICAgICAgSURDX1NUQVRJQywxMTksNDQsMTI0LDcyCkVORAoKSUREX0FQUENGRyBESUFMT0cgRElTQ0FSREFCTEUgIDAsIDAsIDI2MCwgMjUwClNUWUxFIFdTX0NISUxEIHwgV1NfRElTQUJMRUQKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpCRUdJTgogICAgR1JPVVBCT1ggICAgICAgICJOYXN0YXZlbu0gYXBsaWthY+0iLElEQ19TVEFUSUMsIDgsNCwyNDQsMjQwCiAgICBMVEVYVCAgICAgICAgICAgIldpbmUgdW3tIHD4ZWRzdO1yYXQgcvl6bukgdmVyemUgV2luZG93cyBwcm8ga2GeZG91IGplZG51IGFwcGxpa2FjaS4iLAogICAgICAgICAgICAgICAgICAgIElEQ19TVEFUSUMsMTUsMjAsMjI3LDIwCiAgICBDT05UUk9MICAgICAgICAgIkFwbGlrYWNlIixJRENfQVBQX0xJU1RWSUVXLCJTeXNMaXN0VmlldzMyIixXU19CT1JERVIgfCBXU19UQUJTVE9QIHwgTFZTX0xJU1QgfCBMVlNfU0lOR0xFU0VMIHwgTFZTX1NIT1dTRUxBTFdBWVMsCiAgICAgICAgICAgICAgICAgICAgMTUsNDAsMjMwLDE0MAogICAgUFVTSEJVVFRPTgkgICAgIlD4aWQmYXQgYXBsaWthY2kuLi4iLElEQ19BUFBfQUREQVBQLCA5MCwxODQsNzUsMTQKICAgIFBVU0hCVVRUT04JICAgICJPZGViJnJhdCBhcGxpa2FjaSIsSURDX0FQUF9SRU1PVkVBUFAsIDE3MCwxODQsNzUsMTQKICAgIExURVhUICAgICAgICAgICAiVmVyemUgJldpbmRvd3M6IixJRENfU1RBVElDLDE3LDIwNCw1OCw4CiAgICBDT01CT0JPWCAgICAgICAgSURDX1dJTlZFUiw4MywyMDIsMTYzLDU2LENCU19EUk9QRE9XTkxJU1QgfCBXU19WU0NST0xMIHwgV1NfVEFCU1RPUCAgICAKICAgIExURVhUICAgICAgICAgICAiVmVyc2UgJkRPUzoiLElEQ19TVEFUSUMsMTcsMjIzLDU3LDgKICAgIENPTUJPQk9YICAgICAgICBJRENfRE9TVkVSLDgzLDIyNCwxNjMsNTYsQ0JTX0RST1BET1dOTElTVCB8IFdTX1ZTQ1JPTEwgfCBXU19UQUJTVE9QCkVORAoKSUREX0dSQVBIQ0ZHIERJQUxPRyBESVNDQVJEQUJMRSAgMCwgMCwgMjYwLCAyNTAKU1RZTEUgV1NfQ0hJTEQgfCBXU19ESVNBQkxFRApGT05UIDgsICJNUyBTaGVsbCBEbGciCkJFR0lOCiAgICBDT05UUk9MCSAgICAiUG92b2xpdCBhcGxpa2Fj7W0gRGlyZWN0WCBkcp5ldCB1a2F6YXRlbCBteZppIHZlIHN26W0gb2tu7CA/IixJRENfRFhfTU9VU0VfR1JBQiwiQnV0dG9uIixCU19BVVRPQ0hFQ0tCT1ggfCBXU19UQUJTVE9QLDE1LDM1LDIzMCw4CiAgICAKICAgIEdST1VQQk9YICAgICAgICAiIE5hc3RhdmVu7SBva2VuICIsSURDX1NUQVRJQyw4LDI1LDI0NCwxMjAKCiAgICAvKiBGSVhNRTogdGhlIHdvcmRpbmcgb2YgdGhpcyBleHBsYW5hdGlvbiBjb3VsZCBiZSBhIGxvdCBiZXR0ZXIgKi8KICAgIExURVhUICAgICAgICAgICAiTfmeZXRlIHNpIHZ5YnJhdCBlbXVsYWNpIHBsb2NoeSB3aW5kb3dzLCBrZGUganNvdSBva25hIGFwbGlrYWPtIHV6YXb4ZW5hIHYgamVkbukgJ3ZpcnR14Wxu7SBvYnJhem92Y2UnIG5lYm8gbW9ob3UgYv10IHVt7XN07G5hIG5hIHN0YW5kYXJkbu1tIGRlc2t0b3B1LiIsCiAgICAgICAgICAgICAgICAgICAgSURDX1NUQVRJQywxNSw3MywyMjgsMjgKICAgIExURVhUICAgICAgICAgICAiVmVsaWtvc3QgZGVza3RvcHU6IixJRENfREVTS1RPUF9TSVpFLDE1LDExNSw0NCw4LFdTX0RJU0FCTEVECiAgICBMVEVYVCAgICAgICAgICAgIlgiLElEQ19ERVNLVE9QX0JZLDEwOCwxMTUsOCw4LFdTX0RJU0FCTEVECiAgICBDT05UUk9MICAgICAgICAgIkVtdWxhY2UgdmlydHXhbG7taG8gZGVza3RvcHUiLElEQ19FTkFCTEVfREVTS1RPUCwiQnV0dG9uIiwKICAgICAgICAgICAgICAgICAgICBCU19BVVRPQ0hFQ0tCT1ggfCBXU19UQUJTVE9QLDE1LDEwMCwyMzAsMTAKCQkgICAgCiAgICBFRElUVEVYVCAgICAgICAgSURDX0RFU0tUT1BfV0lEVEgsNjQsMTE1LDQwLDEyLEVTX0FVVE9IU0NST0xMIHwgRVNfTlVNQkVSIHwgV1NfRElTQUJMRUQKICAgIEVESVRURVhUICAgICAgICBJRENfREVTS1RPUF9IRUlHSFQsMTE3LDExNSw0MCwxMixFU19BVVRPSFNDUk9MTCB8IEVTX05VTUJFUiB8IFdTX0RJU0FCTEVECkVORAoKSUREX0RMTENGRyBESUFMT0cgRElTQ0FSREFCTEUgIDAsIDAsIDI2MCwgMjUwClNUWUxFIFdTX0NISUxEIHwgV1NfRElTQUJMRUQKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpCRUdJTgogICAgR1JPVVBCT1ggICAgICAgICJO4WhyYWR5IERMTCIsSURDX1NUQVRJQyw4LDQsMjQ0LDI0MAogICAgTFRFWFQgICAgICAgICAgICJN+Z5ldGUgdnlicmF0IHpkYSBidWRvdSBwb3WeaXR5IGR5bmFtaWNreSBsaW5rb3Zhbukga25paG92bnkgdmVzdGF27G7pIHZlIFdpbmUgbmVibyBuYXRpdm7tICh2emF06SB6IFdpbmRvd3MgbmVibyBwb3NreXRudXTpIGFwbGlrYWPtKS4iCiAgICAgICAgICAgICAgICAgICAgLCAgSURDX1NUQVRJQywxNSwxNywyMjgsMzIKICAgIExJU1RCT1ggICAgICAgICBJRENfRExMU19MSVNULDE1LDUwLDE0MiwxODcsV1NfQk9SREVSIHwgV1NfVEFCU1RPUCB8IFdTX1ZTQ1JPTEwKICAgIExURVhUICAgICAgICAgICAiUG/4YWTtIG5haHJhduFu7ToiLElEQ19TVEFUSUMsMTYzLDUwLDM3LDgKICAgIENPTlRST0wgICAgICAgICAiJlZlc3Rhduxu4SAoV2luZSkiLElEQ19SQURfQlVJTFRJTiwiQnV0dG9uIiwgQlNfQVVUT1JBRElPQlVUVE9OIHwgV1NfR1JPVVAsMTYzLDY1LDc1LDEwCiAgICBDT05UUk9MICAgICAgICAgIiZOYXRpdm7tIChXaW5kb3dzKSIsSURDX1JBRF9OQVRJVkUsIkJ1dHRvbiIsIEJTX0FVVE9SQURJT0JVVFRPTiwxNjMsODAsNzUsMTAKICAgIENPTlRST0wgICAgICAgICAiVmVzdGF27CZu4SBhIHBhayBuYXRpdm7tIixJRENfUkFEX0JVSUxUSU5fTkFUSVZFLCJCdXR0b24iLCBCU19BVVRPUkFESU9CVVRUT04sMTYzLDk1LDc1LDEwCiAgICBDT05UUk9MICAgICAgICAgIk5hdGkmdm7tIGEgcGFrIHZlc3Rhduxu4SIsSURDX1JBRF9OQVRJVkVfQlVJTFRJTiwiQnV0dG9uIiwgQlNfQVVUT1JBRElPQlVUVE9OLDE2MywxMTAsNzUsMTAKICAgIENPTlRST0wgICAgICAgICAiJlpha+F6YXQiLElEQ19SQURfRElTQUJMRSwiQnV0dG9uIiwgQlNfQVVUT1JBRElPQlVUVE9OLDE2MywxMjUsNzUsMTAKICAgIFBVU0hCVVRUT04JICAgICJQ+GlkJmF0IG7haHJhZHUgRExMIHBybzoiLElEQ19ETExTX0FERERMTCwgMTYzLDE4NCw4MiwxNAogICAgQ09NQk9CT1ggICAgICAgIElEQ19ETExDT01CTywxNjMsMjA0LDgyLDE0LENCU19EUk9QRE9XTiB8IFdTX1ZTQ1JPTEwgfCBXU19UQUJTVE9QIHwgQ0JTX1NPUlQgfCBDQlNfTE9XRVJDQVNFCiAgICBQVVNIQlVUVE9OCSAgICAiT2RlYiZyYXQgRExMIG7haHJhZHUiLElEQ19ETExTX1JFTU9WRURMTCwxNjMsMjI0LDgyLDE0CkVORAoKSUREX1NZU1RFTUNGRyBESUFMT0cgRElTQ0FSREFCTEUgIDAsIDAsIDI2MCwgMjUwClNUWUxFIFdTX0NISUxECkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQkVHSU4KICAgIEdST1VQQk9YICAgICAgICAiSmVkbm90a3kiLElEQ19TVEFUSUMsOCw0LDI0NCwxMjAKICAgIExJU1RCT1ggICAgICAgICBJRENfTElTVF9EUklWRVMsMTUsMjMsMTc5LDkwLFdTX1ZTQ1JPTEwKICAgIFBVU0hCVVRUT04gICAgICAiUPhpZCZhdCIsSURDX0RSSVZFX0FERCwxOTcsMjIsNTAsMjIKICAgIFBVU0hCVVRUT04gICAgICAiT2RlYiZyYXQiLElEQ19EUklWRV9SRU1PVkUsMTk3LDUxLDUwLDIyCiAgICBQVVNIQlVUVE9OICAgICAgIlVwcmEmdml0IixJRENfRFJJVkVfRURJVCwxOTcsODAsNTAsMjIKRU5ECgpJRERfRFJJVkVDRkcgRElBTE9HIERJU0NBUkRBQkxFICAwLCAwLCAyNjAsIDI1MApTVFlMRSBXU19DSElMRCB8IFdTX0RJU0FCTEVECkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQkVHSU4KICAgIEdST1VQQk9YICAgICAgICAiTWFwb3bhbu0gZGlza/kiLElEQ19TVEFUSUMsNywxMDcsMjQ2LDExMgogICAgTElTVEJPWCAgICAgICAgIElEQ19MSVNUX0RSSVZFUywxNCwxMTgsMjMyLDc2LExCU19TT1JUIHwgTEJTX05PSU5URUdSQUxIRUlHSFQgfCBXU19WU0NST0xMIHwgV1NfVEFCU1RPUAogICAgUFVTSEJVVFRPTiAgICAgICJQ+GlkYXQuLi4iLElEQ19CVVRUT05fQURELDE0LDE5OSwzNywxNAogICAgUFVTSEJVVFRPTiAgICAgICJPZGVicmF0IixJRENfQlVUVE9OX1JFTU9WRSw1NSwxOTksMzcsMTQKICAgIFBVU0hCVVRUT04gICAgICAiVXByYXZpdC4uLiIsSURDX0JVVFRPTl9FRElULDk3LDE5OSwzNywxNAogICAgUFVTSEJVVFRPTiAgICAgICJBdXRvZGV0ZWtvdmF0Li4uIixJRENfQlVUVE9OX0FVVE9ERVRFQ1QsMTk3LDE5OSw0OSwxNAogICAgTFRFWFQJICAgICJWYXJvduFu7TogVnlwYWThIHRvLCCeZSBkaXNrIEMgbmVu7SBkZWZpbm924W4uIEtsaWtu7HRlIG5hICdQ+GlkYXQuLi4nIGEgdnl0dm/4dGUgaG8uIiwgSURTX0RSSVZFX05PX0MsIDcsMjIzLDI1MCwxMTAKRU5ECgpJRERfQVVESU9DRkcgRElBTE9HIERJU0NBUkRBQkxFICAwLCAwLCAyNjAsIDI1MApTVFlMRSBXU19DSElMRCB8IFdTX0RJU0FCTEVECkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQkVHSU4KICAgIExURVhUCSJPdmxhZGHoIHp2dWtvdukga2FydHk6ICIsSURDX1NUQVRJQywxMCwyMCw2MCw4CiAgICBDT01CT0JPWAlJRENfQVVESU9fRFJJVkVSLDcwLDE4LDg1LDg1LENCU19EUk9QRE9XTkxJU1QgfCBXU19WU0NST0xMIHwgV1NfVEFCU1RPUAogICAgUFVTSEJVVFRPTgkiQXV0b2RldGVrY2UiLElEQ19BVURJT19BVVRPREVURUNULDE3MCwyMCw0OSwxNApFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICBJRFNfV0lORV9WRVJTSU9OICAgICAgICAiQ1ZTIgogICAgSURTX1RBQl9HRU5FUkFMICAgICAgICAgIlaaZW9iZWNu6SIKICAgIElEU19UQUJfRExMUyAgICAgICAgICAgICJLbmlob3ZueSIKICAgIElEU19UQUJfRFJJVkVTICAgICAgICAgICJEaXNreSIKRU5ECg==