LyoKICogIE5vdGVwYWQgKEN6ZWNoIHJlc291cmNlcykKICoKICogIENvcHlyaWdodCAxOTk3LDk4IE1hcmNlbCBCYXVyCiAqICBQcm9vZnJlYWQgMTk5OCBieSBEYXZpZCBMZWUgTGFtYmVydAogKiAgQ29weXJpZ2h0IDIwMDIgU3lsdmFpbiBQZXRyZW9sbGUKICogIENvcHlyaWdodCAyMDA0IERhdmlkIEtyZWRiYQogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICovCgpMQU5HVUFHRSBMQU5HX0NaRUNILCBTVUJMQU5HX0RFRkFVTFQKCk1BSU5fTUVOVSBNRU5VCnsKIFBPUFVQICImU291Ym9yIiB7CiAgTUVOVUlURU0gIiZOb3b9Li4uIiwgICAgICAgICAgIENNRF9ORVcKICBNRU5VSVRFTSAiJk90ZXb47XRcdEN0cmwrTyIsICAgICBDTURfT1BFTgogIE1FTlVJVEVNICImVWxvvml0XHRDdHJsK1MiLCAgICAgQ01EX1NBVkUKICBNRU5VSVRFTSAiVWxvvml0IGomYWtvLi4uIiwgICAgICAgQ01EX1NBVkVfQVMKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJlRpc2siLCAgICAgICAgICAgIENNRF9QUklOVAogIE1FTlVJVEVNICJOYXMmdGF2ZW7tIHN0cuFua3kuLi4iLCAgICBDTURfUEFHRV9TRVRVUAogIE1FTlVJVEVNICJOYXN0YXZlbu0gdGlza+Emcm55Li4uIiwgQ01EX1BSSU5URVJfU0VUVVAKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJktvbmVjIiwgICAgICAgICAgICAgQ01EX0VYSVQKIH0KUE9QVVAgIlUmcHJhdml0IiB7CiAgTUVOVUlURU0gIiZacOx0XHRDdHJsK1oiLCAgICAgQ01EX1VORE8KICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiVnlqbW91JnRcdEN0cmwrWCIsICAgICAgQ01EX0NVVAogIE1FTlVJVEVNICImS29w7XJvdmF0XHRDdHJsK0MiLCAgICAgQ01EX0NPUFkKICBNRU5VSVRFTSAiJlZsb75pdFx0Q3RybCtWIiwgICAgQ01EX1BBU1RFCiAgTUVOVUlURU0gIiZTbWF6YXRcdERlbCIsICAgICAgQ01EX0RFTEVURQogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICJWeWJyYXQgdrkmZVx0Q3RybCtBIiwgICAgICAgQ01EX1NFTEVDVF9BTEwKICBNRU5VSVRFTSAiyCZhcy9EYXR1bVx0RjUiLCAgICBDTURfVElNRV9EQVRFCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIlphbG8mbWl0IGRsb3Vo6SD44WRreSIsICBDTURfV1JBUAogIE1FTlVJVEVNICImUO1zbW8uLi4iLCAgICAgICAgICBDTURfRk9OVAogfQpQT1BVUCAiJkhsZWThbu0iIHsKICBNRU5VSVRFTSAiJkhsZWRlalx0Q3RybCtGIiwgICBDTURfU0VBUkNICiAgTUVOVUlURU0gIiZOYWpkaSBkYWy57Vx0RjMiLCAgQ01EX1NFQVJDSF9ORVhUCiB9ClBPUFVQICImTuFwb3bsZGEiIHsKICBNRU5VSVRFTSAiJk9ic2FoIiwgICAgICAgICBDTURfSEVMUF9DT05URU5UUwogIE1FTlVJVEVNICImTmFq7XQuLi4iLCAgICAgICAgQ01EX0hFTFBfU0VBUkNICiAgTUVOVUlURU0gIiZQb21vYyBrIG7hcG927GTsIiwgICAgIENNRF9IRUxQX09OX0hFTFAKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBQT1BVUCAiSW5mJm8uLi4iIHsKICAgTUVOVUlURU0gIiZMaWNlbmNlIiwgICAgICAgICBDTURfTElDRU5TRQogICBNRU5VSVRFTSAiJkJFWiBawVJVS1kiLCAgICAgQ01EX05PX1dBUlJBTlRZCiAgIE1FTlVJVEVNICImTyBXaW5lIiwgICAgICBDTURfQUJPVVRfV0lORQogIH0KIH0KfQoKLyogRGlhbG9nIGBQYWdlIHNldHVwJyAqLwoKRElBTE9HX1BBR0VTRVRVUCBESUFMT0cgMCwgMCwgMjI1LCA5NQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpDQVBUSU9OICJOYXN0YXZlbu0gc3Ry4W5reSIKewpMVEVYVCAgICAiWuEmaGxhdu06IiwgIDB4MTQwLCAgIDEwLCAwNywgNDAsIDE1CkVESVRURVhUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQxLCAgICAgICA2MCwgMDUsMTEwLCAxMiwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJlrhcGF07ToiLCAgMHgxNDIsICAgMTAsIDI0LCA0MCwgMTUKRURJVFRFWFQgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDMsICAgICAgIDYwLCAyMiwxMTAsIDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QCgpHUk9VUEJPWCAiJk9rcmFqZToiLCAgICAgIDB4MTQ0LCAgICAgMTAsIDQzLDE2MCwgNDUKTFRFWFQgICAgIiZMZXb9OiIsICAgICAgICAweDE0NSwgICAyMCwgNTUsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgLypTVFJJTkdfUEFHRVNFVFVQX0xFRlRWQUxVRSwqLyAgIDB4MTQ3LCAgICAgICA1MCwgNTUsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICImSG9ybu06IiwgICAgICAgICAweDE0OCwgICAgMjAsIDczLCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIC8qU1RSSU5HX1BBR0VTRVRVUF9UT1BWQUxVRSwqLyAgICAweDE0QSwgICAgICAgIDUwLCA3MywgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIlAmcmF2/ToiLCAgICAgICAweDE0QiwgMTAwLCA1NSwgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCAvKlNUUklOR19QQUdFU0VUVVBfUklHSFRWQUxVRSwqLyAgMHgxNEQsICAgICAxMzAsIDU1LCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJkRvbG7tOiIsICAgICAgMHgxNEUsMTAwLCA3MywgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCAvKlNUUklOR19QQUdFU0VUVVBfQk9UVE9NVkFMVUUsKi8gMHgxNTAsICAgIDEzMCwgNzMsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCgpERUZQVVNIQlVUVE9OICJPSyIsICAgICAgICAgMHgxNTEsICAgICAgICAgICAgICAgICAgIDE4MCwgIDMsIDQwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICJTdG9ybm8iLCAgICAgMHgxNTIsICAgICAgICAgICAgICAgMTgwLCAyMSwgNDAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIiZO4XBvduxkYSIsICAgICAgIDB4MTUzLCAgICAgICAgICAgICAgICAxODAsIDM5LCA0MCwgMTUsIFdTX1RBQlNUT1AKfQoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKewpTVFJJTkdfUEFHRVNFVFVQX0hFQURFUlZBTFVFLCAgICImbiIgICAgICAgIC8qIEZJWE1FICovClNUUklOR19QQUdFU0VUVVBfRk9PVEVSVkFMVUUsICAgIlN0cmFuYSAmcyIgICAvKiBGSVhNRSAqLwpTVFJJTkdfUEFHRVNFVFVQX0xFRlRWQUxVRSwgICAgICAgICAgICAgIjIwIG1tIiAgICAgLyogRklYTUUgKi8KU1RSSU5HX1BBR0VTRVRVUF9SSUdIVFZBTFVFLCAgICAiMjAgbW0iICAgICAvKiBGSVhNRSAqLwpTVFJJTkdfUEFHRVNFVFVQX1RPUFZBTFVFLCAgICAgICAgICAgICAgIjI1IG1tIiAgICAgLyogRklYTUUgKi8KU1RSSU5HX1BBR0VTRVRVUF9CT1RUT01WQUxVRSwgICAiMjUgbW0iICAgICAvKiBGSVhNRSAqLwoKU1RSSU5HX05PVEVQQUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vdGVwYWQiClNUUklOR19FUlJPUiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDSFlCQSIKU1RSSU5HX1dBUk5JTkcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlZBUk9WwU7NIgpTVFJJTkdfSU5GTywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5mb3JtYWNlIgoKU1RSSU5HX1VOVElUTEVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihiZXogbuF6dnUpIgoKU1RSSU5HX0FMTF9GSUxFUywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIla5ZWNobnkgc291Ym9yeSAoKi4qKSIKU1RSSU5HX1RFWFRfRklMRVNfVFhULCAgICAgICAgICAgICAgICAgICJUZXh0b3bpIHNvdWJvcnkgKCoudHh0KSIKClNUUklOR19UT09MQVJHRSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTb3Vib3IgJyVzJyBqZSBwcm8gbm90ZXBhZCBw+O1sabkgdmVsa/0uXG4gXApQb3W+aWp0ZSBqaW79IGVkaXRvciwgcHJvc+1tLiIKU1RSSU5HX05PVEVYVCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5lYnlsIHphZOFuIL7hZG79IHRleHQuIFwKXG5QbGVhc2UgdHlwZSBzb21ldGhpbmcgYW5kIHRyeSBhZ2FpbiIKU1RSSU5HX0RPRVNOT1RFWElTVCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNvdWJvciAnJXMnXG5uZWV4aXN0dWplLlxuXG4gXApDaGNldGUgaG8gdnl0dm/4aXQgPyIKU1RSSU5HX05PVFNBVkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNvdWJvciAnJXMnXG5ieWwgem3sbuxuLlxuXG4gXApDaGNldGUgdWxvvml0IHpt7G55ID8iClNUUklOR19OT1RGT1VORCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiclcycgbmVieWwgbmFsZXplbi4iClNUUklOR19PVVRfT0ZfTUVNT1JZLCAgICAgICAgICAgICAgICAgICAiTmVu7SBkb3N0IHBhbex0aSBuYSBkb2tvbuhlbu0gdOl0byD6bG9oeS4gXApcblV6YXb4ZXRlIGplZG51IOhpIHbtY2UgYXBsaWthY+0gYWJ5c3RlIHrtc2thbGkgdu1jZSAgXG52b2xu6SBcCnBhbex0aS4iCgp9Cg==