LyoKICogQ29weXJpZ2h0IDIwMDIgQW5kcmVhcyBNb2hyCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfR0VSTUFOLCBTVUJMQU5HX05FVVRSQUwKClNUUklOR1RBQkxFCkJFR0lOCklEU19FRElULAkJIkVkaSZ0aWVyZW4iCklEU19ERUZBVUxULAkJIlN0YW4mZGFyZCIKSURTX1BST1BFUlRJRVMsCQkiJkVpZ2Vuc2NoYWZ0ZW4iCklEU19NQVJLLAkJIiZNYXJraWVyZW4iCklEU19DT1BZLAkJIiZLb3BpZXJlbiIKSURTX1BBU1RFLAkJIiZFaW5m/GdlbiIKSURTX1NFTEVDVEFMTCwJCSImQWxsZXMgYXVzd+RobGVuIgpJRFNfU0NST0xMLAkJIlNjJnJvbGxlbiIKSURTX1NFQVJDSCwJCSImU3VjaGVuIgpJRFNfRk5UX0RJU1BMQVksCSJKZWRlciBCdWNoc3RhYmUgaXN0ICVsZCBQaXhlbCBicmVpdCB1bmQgJWxkIFBpeGVsIGhvY2giCklEU19GTlRfUFJFVklFV18xLAkiRGllcyBpc3QgZWluIFRlc3QiCklEU19GTlRfUFJFVklFV18yLAkiIgpJRFNfRExHX1RJVF9ERUZBVUxULCAgICAiU2V0dXAgLSBTdGFuZGFyZGVpbnN0ZWxsdW5nZW4iCklEU19ETEdfVElUX0NVUlJFTlQsICAgICJTZXR1cCAtIGFrdHVlbGxlIEVpbnN0ZWxsdW5nZW4iCklEU19ETEdfVElUX0VSUk9SLCAgICAgICJLb25maWd1cmF0aW9uc2ZlaGxlciIKSURTX0RMR19FUlJfU0JXSU5TSVpFLCAgIkRpZSBCaWxkc2NoaXJtZ3L232UgbXXfIGdy9t9lciBvZGVyIGdsZWljaCBkZXIgZGVzIEZlbnN0ZXJzIHNlaW4iCgpJRFNfQ01EX0lOVkFMSURfRVZFTlRfSUQgICAid2luZWNvbnNvbGU6IEthbm4gRXZlbnQtSUQgbmljaHQgcGFyc2VuXG4iCklEU19DTURfSU5WQUxJRF9CQUNLRU5EICAgICJ3aW5lY29uc29sZTogVW5n/Gx0aWdlcyBiYWNrZW5kXG4iCklEU19DTURfSU5WQUxJRF9PUFRJT04gICAgICJ3aW5lY29uc29sZTogTmljaHQgZXJrYW5udGUgQmVmZWhsc3plaWxlbm9wdGlvblxuIgpJRFNfQ01EX0FCT1VUICAgICAgICAgICAgICAiU3RhcnRlZCBlaW4gUHJvZ3JhbW0gaW4gZWluZXIgV2luZS1Db25zb2xlLlxuIgpJRFNfQ01EX0xBVU5DSF9GQUlMRUQgICAgICAid2luZWNvbnNvbGU6IFN0YXJ0ZW4gZGVzIFByb2dyYW1tcyAlcyBmZWhsZ2VzY2hsYWdlbi5cbiJcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJEZXIgQmVmZWhsIGlzdCB1bmf8bHRpZy5cbiIKCklEU19VU0FHRV9IRUFERVIgICAgICAgICAgICJcbkF1ZnJ1ZjpcbiAgd2luZWNvbnNvbGUgW09wdGlvbmVuXSA8QmVmZWhsPlxuXG5PcHRpb25lbjpcbiIKSURTX1VTQUdFX0JBQ0tFTkQgICAgICAgICAgIiAgLS1iYWNrZW5kPXt1c2VyfG5jdXJzZXN9ICBBdXN3YWhsIHZvbiCCdXNlcpEgZXJzdGVsbHQgZWluIG5ldWVzIEZlbnN0ZXIsXG4iXAogICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgIIJuY3Vyc2VzkSB2ZXJzdWNodCBkYXMgYWt0dWVsbGUgVGVybWluYWwgYWxzIFdpbmUtXG4iXAogICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtvbnNvbGUgZWluenVyaWNodGVuXG4iCklEU19VU0FHRV9DT01NQU5EICAgICAgICAgICIgIDxCZWZlaGw+ICAgICAgICAgICAgICAgICAgRGFzIGluIGRlciBLb25zb2xlIHp1IHN0YXJ0ZW5kZSBXaW5lLVByb2dyYW1tXG4iCklEU19VU0FHRV9GT09URVIgICAgICAgICAgICJcbkJlc3BpZWw6XG4gIHdpbmVjb25zb2xlIGNtZFxuU3RhcnRldCBkaWUgV2luZS1CZWZlaGxzemVpbGUgaW4gZWluZXIgV2luZS1Lb25zb2xlXG5cbiIKRU5ECgpJRERfT1BUSU9OIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMTQwLCAxMDUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiIE9wdGlvbmVuICIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CglHUk9VUEJPWCAiQ3Vyc29yZ3L232UiLCAtMSwgMTAsIDExLCA2MCwgNDQsIEJTX0dST1VQQk9YCglBVVRPUkFESU9CVVRUT04gIiZLbGVpbiIsIElEQ19PUFRfQ1VSU09SX1NNQUxMLCAxNCwgMjMsIDQ0LCAxMCwgV1NfVEFCU1RPUAoJQVVUT1JBRElPQlVUVE9OICImTWl0dGVsIiwgSURDX09QVF9DVVJTT1JfTUVESVVNLCAxNCwgMzMsIDQ0LCAxMCwgV1NfVEFCU1RPUAoJQVVUT1JBRElPQlVUVE9OICImR3Jv3yIsIElEQ19PUFRfQ1VSU09SX0xBUkdFLCAxNCwgNDMsIDQ0LCAxMCwgV1NfVEFCU1RPUAoKCUdST1VQQk9YICJTdGV1ZXJ1bmciLCAtMSwgNzUsIDExLCAxMjUsIDQ0LCBCU19HUk9VUEJPWAoJTFRFWFQgIlBvcHVwLU1lbvwiLCAtMSwgNzksIDIzLCA1MCwgMTAKCUFVVE9DSEVDS0JPWCAiJlN0cmciLCBJRENfT1BUX0NPTkZfQ1RSTCwgMTI5LCAyMywgNjAsIDEwLCBXU19UQUJTVE9QCglBVVRPQ0hFQ0tCT1ggIiZVbXNjaGFsdCIsIElEQ19PUFRfQ09ORl9TSElGVCwgMTI5LCAzMywgNjAsIDEwLCBXU19UQUJTVE9QCglMVEVYVCAiUXVpY2tFZGl0LU1vZHVzIiwgLTEsIDc5LCA0MywgNTAsIDEwCglBVVRPQ0hFQ0tCT1ggIiZha3RpdiIsIElEQ19PUFRfUVVJQ0tfRURJVCwgMTI5LCA0MywgNjAsIDEwLCBXU19UQUJTVE9QCgoJR1JPVVBCT1ggIkJlZmVobHNzcGVpY2hlciIsIC0xLCAxMCwgNTcsIDE5MCwgMzUsIEJTX0dST1VQQk9YCglMVEVYVCAiJkFuemFobCBkZXIgUHVmZmVyOiIsIC0xLCAxNCwgNjcsIDc4LCAxOAoJRURJVFRFWFQgSURDX09QVF9ISVNUX1NJWkUsIDkyLCA2OSwgMzEsIDEyLCBXU19UQUJTVE9QfFdTX0JPUkRFUnxFU19OVU1CRVIKCUNPTlRST0wgIiIsIElEQ19PUFRfSElTVF9TSVpFX1VELCAibXNjdGxzX3VwZG93bjMyIiwgVURTX1NFVEJVRERZSU5UfFVEU19BTElHTlJJR0hUfFVEU19BVVRPQlVERFl8VURTX0FSUk9XS0VZU3xVRFNfTk9USE9VU0FORFMsIDAsIDAsIDAsIDAKCUFVVE9DSEVDS0JPWCAiQWx0ZSAmRHVwbGlrYXRlIGz2c2NoZW4iLCBJRENfT1BUX0hJU1RfTk9ET1VCTEUsIDEzMCwgNjcsIDUwLCAxOCwgV1NfVEFCU1RPUHxCU19NVUxUSUxJTkUKfQoKSUREX0ZPTlQgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMzYsIDI0LCAxNDAsIDEwNQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICIgU2NocmlmdGFydCAiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewoJTFRFWFQgIlNjaHJpZnQmYXJ0IiwgLTEsIDUsIDUsIDI0LCA4CglMSVNUQk9YIElEQ19GTlRfTElTVF9GT05ULCA1LCAxOCwgOTAsIDQyLCBMQlNfU09SVHxXU19WU0NST0xMCglMVEVYVCAiRiZhcmJlIiwgLTEsIDEwMCwgNSwgNTAsIDgKCUNPTlRST0wgIiIsIElEQ19GTlRfQ09MT1JfRkcsICJXaW5lQ29uQ29sb3JQcmV2aWV3IiwgMEwsIDEwMCwgMTgsIDQ4LCAxNgoJQ09OVFJPTCAiIiwgSURDX0ZOVF9DT0xPUl9CSywgIldpbmVDb25Db2xvclByZXZpZXciLCAwTCwgMTAwLCA0MCwgNDgsIDE2CglMVEVYVCAiJkdyYWQiLCAtMSwgMTU4LCA1LCA0MCwgOAoJTElTVEJPWCBJRENfRk5UX0xJU1RfU0laRSwgMTU4LCAxOCwgNDAsIDYwLCBXU19WU0NST0xMCglDT05UUk9MICIiLCBJRENfRk5UX1BSRVZJRVcsICJXaW5lQ29uRm9udFByZXZpZXciLCAwTCwgNSwgNjAsIDEwOSwgNDAKCUxURVhUICIiLCBJRENfRk5UX0ZPTlRfSU5GTywgMTI4LCA3NiwgODAsIDE4Cn0KCklERF9DT05GSUcgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMzYsIDI0LCAxNDAsIDEwNQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICIgS29uZmlndXJhdGlvbiAiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewoJR1JPVVBCT1ggIkZlbnN0ZXJwdWZmZXJncvbfZSIsIC0xLCAxMCwgMTEsIDEwMCwgNDIsIEJTX0dST1VQQk9YCglMVEVYVCAiJkJyZWl0ZSA6IiwgLTEsIDE0LCAyNSwgNTQsIDkKCUVESVRURVhUIElEQ19DTkZfU0JfV0lEVEgsIDY4LCAyMywgMzYsIDEyLCBXU19UQUJTVE9QfFdTX0JPUkRFUnxFU19OVU1CRVIKCUNPTlRST0wgIiIsIElEQ19DTkZfU0JfV0lEVEhfVUQsICJtc2N0bHNfdXBkb3duMzIiLCBVRFNfU0VUQlVERFlJTlR8VURTX0FMSUdOUklHSFR8VURTX0FVVE9CVUREWXxVRFNfQVJST1dLRVlTfFVEU19OT1RIT1VTQU5EUywgMCwgMCwgMCwgMAoJTFRFWFQgIiZI9mhlIDoiLCAtMSwgMTQsIDM5LCA1NCwgOQoJRURJVFRFWFQgSURDX0NORl9TQl9IRUlHSFQsIDY4LCAzNywgMzYsIDEyLCBXU19UQUJTVE9QfFdTX0JPUkRFUnxFU19OVU1CRVIKCUNPTlRST0wgIiIsIElEQ19DTkZfU0JfSEVJR0hUX1VELCAibXNjdGxzX3VwZG93bjMyIiwgVURTX1NFVEJVRERZSU5UfFVEU19BTElHTlJJR0hUfFVEU19BVVRPQlVERFl8VURTX0FSUk9XS0VZU3xVRFNfTk9USE9VU0FORFMsIDAsIDAsIDAsIDAKCglHUk9VUEJPWCAiRmVuc3Rlcmdy9t9lIiwgLTEsIDEwLCA1NSwgMTAwLCA0MgoJTFRFWFQgIkImcmVpdGUgOiIsIC0xLCAxNCwgNjksIDU0LCA5CglFRElUVEVYVCBJRENfQ05GX1dJTl9XSURUSCwgNjgsIDY3LCAzNiwgMTIsIFdTX1RBQlNUT1B8V1NfQk9SREVSfEVTX05VTUJFUgoJQ09OVFJPTCAiIiwgSURDX0NORl9XSU5fV0lEVEhfVUQsICJtc2N0bHNfdXBkb3duMzIiLCBVRFNfU0VUQlVERFlJTlR8VURTX0FMSUdOUklHSFR8VURTX0FVVE9CVUREWXxVRFNfQVJST1dLRVlTfFVEU19OT1RIT1VTQU5EUywgMCwgMCwgMCwgMAoJTFRFWFQgIkj2aCZlIDoiLCAtMSwgMTQsIDgzLCA1NCwgOQoJRURJVFRFWFQgSURDX0NORl9XSU5fSEVJR0hULCA2OCwgODEsIDM2LCAxMiwgV1NfVEFCU1RPUHxXU19CT1JERVJ8RVNfTlVNQkVSCglDT05UUk9MICIiLCBJRENfQ05GX1dJTl9IRUlHSFRfVUQsICJtc2N0bHNfdXBkb3duMzIiLCBVRFNfU0VUQlVERFlJTlR8VURTX0FMSUdOUklHSFR8VURTX0FVVE9CVUREWXxVRFNfQVJST1dLRVlTfFVEU19OT1RIT1VTQU5EUywgMCwgMCwgMCwgMAoKCUdST1VQQk9YICJQcm9ncmFtbWVuZGUiLCAtMSwgMTE1LCAxMSwgODAsIDQyLCBCU19HUk9VUEJPWAoJQVVUT0NIRUNLQk9YICJLb25zb2xlICZzY2hsaWXfZW4iLCBJRENfQ05GX0NMT1NFX0VYSVQsIDExOSwgMjUsIDc1LCAyMCwgV1NfVEFCU1RPUAoJCglHUk9VUEJPWCAiRWRpdGlvbiIsIC0xLCAxMTUsIDU1LCA4MCwgNDIKCUNPTUJPQk9YIElEQ19DTkZfRURJVElPTl9NT0RFLCAxMTksIDY5LCA3NSwgMjAsIENCU19EUk9QRE9XTkxJU1R8V1NfVlNDUk9MTHxXU19UQUJTVE9QCn0KCklERF9TQVZFX1NFVFRJTkdTIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDIwLCAyMCwgMTQwLCA2MApTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OCkNBUFRJT04gIktvbnNvbGVucGFyYW1ldGVyIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKCUdST1VQQk9YICIiLCAtMSwgMTAsIDEwLCAxMjAsIDMxLCBCU19HUk9VUEJPWAoJQVVUT1JBRElPQlVUVE9OICLcYmVybmVobWUgZGllc2UgRWluc3RlbGx1bmdlbiBm/HIgc3DkdGVyZSBTaXR6dW5nZW4iLCBJRENfU0FWX1NBVkUsIDE0LCAxNSwgMTEwLCAxMCwgV1NfVEFCU1RPUAoJQVVUT1JBRElPQlVUVE9OICJWZXLkbmRlcmUgbnVyIGRpZSBha3R1ZWxsZSBTaXR6dW5nIiwgSURDX1NBVl9TRVNTSU9OLCAxNCwgMjcsIDExMCwgMTAsIFdTX1RBQlNUT1AKCglQVVNIQlVUVE9OICJPSyIsIElET0ssIDIwLCA0NSwgMzUsIDEyCglQVVNIQlVUVE9OICJBYmJyZWNoZW4iLCBJRENBTkNFTCwgNjUsIDQ1LCAzNSwgMTIKfQo=