IExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQogY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAogKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CgogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKCiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCgpDb3BpZWQgZnJvbQpodHRwOi8vd3d3Lm1haWwtYXJjaGl2ZS5jb20vbG9nNGotdXNlckBqYWthcnRhLmFwYWNoZS5vcmcvbXNnMDA0NDUuaHRtbAoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KUkU6IGRpdmVydGluZyBTeXN0ZW0uc3RkZXJyL3N0ZG91dCBpbnRvIGxvZzRqCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpGcm9tOiBNaWNoYWVsIFNtaXRoIApTdWJqZWN0OiBSRTogZGl2ZXJ0aW5nIFN5c3RlbS5zdGRlcnIvc3Rkb3V0IGludG8gbG9nNGogCkRhdGU6IFR1ZSwgMTMgTWFyIDIwMDEgMDY6NDY6MDQgLTA4MDAgCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKVGhlcmUgaXMgYW5vdGhlciB3YXkhCgpJbiBMb2dMb2csIGNvbXBsZXRlbHkgaWdub3JlIFN5c3RlbS5lcnIuICBJbnN0ZWFkLCB1c2UgdGhlIGZvbGxvd2luZyB0byBnZXQKdGhlIHN0YW5kYXJkIGVycm9yIHN0cmVhbToKClByaW50U3RyZWFtIGVyciA9CiAgbmV3IFByaW50U3RyZWFtKG5ldyBGaWxlT3V0cHV0U3RyZWFtKEZpbGVEZXNjcmlwdG9yLmVycikpOwoKV2hlbiB5b3UgdXNlIFN5c3RlbS5zZXRFcnIsIGl0IGNoYW5nZXMgU3lzdGVtLmVyciwgYnV0IG5vdApGaWxlRGVzY3JpcHRvci5lcnIsIHdoaWNoIG1haW50YWlucyBhIGRlc2NyaXB0b3IgZm9yIHRoZSBvcmlnaW5hbCBlcnJvcgpzdHJlYW0uCgptaWNoYWVsCgpGb3IgYSBzYW1wbGUgcHJvZ3JhbSB0byB0ZXN0IHRoaXMsIHNlZSBiZWxvdzoKCmltcG9ydCBqYXZhLmlvLio7CgpwdWJsaWMgY2xhc3MgU3RkZXJyIHsKCiAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewoKICAgIC8vIGNyZWF0ZSBhIHByaW50IHN0cmVhbSB0byByZXByZXNlbnQgYSByZWRpcmVjdAogICAgUHJpbnRTdHJlYW0gbm9uU3RhbmRhcmRFcnIgPSAKICAgICAgbmV3IFByaW50U3RyZWFtKG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKSk7CiAgICAKICAgIC8vIFJlZGlyZWN0IHN0YW5kYXJkIG91dCBhbmQgc3RhbmRhcmQgZXJyCiAgICBTeXN0ZW0uc2V0T3V0KG5vblN0YW5kYXJkRXJyKTsKICAgIFN5c3RlbS5zZXRFcnIobm9uU3RhbmRhcmRFcnIpOwogICAgCiAgICAvLyBhdHRlbXB0IHRvIHByaW50IHNvbWV0aGluZwogICAgU3lzdGVtLmVyci5wcmludGxuKCJZb3Ugc2hvdWxkICpub3QqIHNlZSB0aGlzIG9uIHRoZSBjb25zb2xlISIpOwoJCiAgICAvLyB0aGUgc3R1ZmYgdGhhdCB3b3VsZCBhcHBlYXIgaW4gTG9nTG9nCiAgICBQcmludFN0cmVhbSBsb2dMb2dPdXQgPSAKICAgICAgbmV3IFByaW50U3RyZWFtKG5ldyBGaWxlT3V0cHV0U3RyZWFtKEZpbGVEZXNjcmlwdG9yLmVycikpOwogICAgCiAgICAvLyBhdHRlbXB0IHRvIHByaW50IHNvbWV0aGluZwogICAgbG9nTG9nT3V0LnByaW50bG4oIllvdSAqc2hvdWxkKiBzZWUgdGhpcyBvbiB0aGUgY29uc29sZSEiKTsKICB9Cn0KCgoKPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQo+IEZyb206IENla2kgR/xsY/wgW21haWx0bzpjZ3VAcW9zLmNoXQo+IFNlbnQ6IE1vbmRheSwgTWFyY2ggMTIsIDIwMDEgNzoxOCBQTQo+IFRvOiBMT0c0SiBVc2VycyBNYWlsaW5nIExpc3QKPiBTdWJqZWN0OiBSRTogZGl2ZXJ0aW5nIFN5c3RlbS5zdGRlcnIvc3Rkb3V0IGludG8gbG9nNGoKPgo+Cj4KPiBIYXRlIHRvIGZvbGxvdyB1cCBvbiBteXNlbGYsIGJ1dCB0aGUgU3lzdGVtLnNldEVyciBtZXRob2QKPiByZWFzc2lnbnMgdGhlIFN5c3RlbS5lcnIgdmFyaWFibGUuIFRoaXMgY2FuIGJlIGRlZHVjZWQgd2l0aG91dAo+IGV4cGVyaW1lbnRhdGlvbiBiZWNhdXNlIHRoZSB1c2VyIGNhbGxzIHRoZSBTeXN0ZW0uZXJyIHZhcmlhYmxlCj4gZGlyZWN0bHkgdG8gcHJpbnQgdG8gdGhlIGNvbnNvbGUsIHdoYXRldmVyIGl0IG1pZ2h0IGJlLiBUaHVzLCB0aGUKPiByZWZlcmVuY2UgaXRzZWxmIG11c3QgY2hhbmdlIHRvIGFsbG93IHRoZSBTeXN0ZW0uZXJyIHZhcmlhYmxlIHRvCj4gcG9pbnQgdG8gdGhlIG5ldyB0YXJnZXQgc3RyZWFtLgo+Cj4gVGhlIGZ1bm55IHBhcnQgaXMgdGhhdCB0aGUgZXJyIHZhcmlhYmxlIGlzIGRlY2xhcmVkICdwdWJsaWMKPiBmaW5hbCcgaW4gdGhlIEpESyBzb3VyY2UgY29kZS4gVGhlIHNldEVyciBtZXRob2QgbWFrZXMgYSBjYWxsIHRvCj4gc2V0RXJyMCB3aGljaCBpcyBkZWNsYXJlZCBhcyBiZWluZyAnbmF0aXZlJy4gSXQgbG9va3MgbGlrZSB0aGUKPiBuYXRpdmUgcGFydCBpcyBjaXJjdW12ZW50aW5nIHRoZSBKREsgcmVzdHJpY3Rpb25zLiBJIGZpbmQgdGhpcwo+IHF1aXRlIGVudGVydGFpbmluZy4gQ2VraQo+Cj4gQXQgMDA6NTggMTMuMDMuMjAwMSArMDEwMCwgQ2VraSBH/Gxj/CB3cm90ZToKPgo+ID5SdW5uaW5nIHRoZSByaXNrIG9mIGRpc2FwcG9pbnRpbmcgeW91IGhlcmUsIGFsdGhvdWdoIG5vdCBmdWxsIG9mCj4gYnVncywgbG9nNGogaXMgbm90IGJ1Zy1mcmVlIGFzIGJ1Z3MgY3JlZXAgb3V0IHJlZ3VsYXJseS4gVGhleQo+IGp1c3QgZ2V0IGNvcnJlY3RlZCBxdWlja2x5IGJlZm9yZSBtYW55IHBlb3BsZSBhcmUgYWZmZWN0ZWQgYnkgdGhlbS4KPiA+Cj4gPlRoZSBQcmludFN0cmVhbSBzZSA9IFN5c3RlbS5lcnI7IExvZ0xvZy5zZXRQcmludFN0cmVhbShzZWUpOwo+IGNvbWJpbmF0aW9uIGlzIHNpbXBsZSBhbmQgcmF0aGVyIGJyaWdodC4gSSBpbml0aWFsbHkgb3Zlcmxvb2tlZAo+IHRoZSAgUHJpbnRTdHJlYW0gc2UgPSBTeXN0ZW0uZXJyOyBwYXJ0LCBtYWtpbmcgbWUgdGhpbmsgdGhhdCBhCj4gbG90IG9mIGNvZGUgbmVlZGVkIHRvIGJlIG1vZGlmaWVkIHRvIGNhdGVyICBmb3IgdGhlIHJlZGlyZWN0ZWQKPiBjb25zb2xlIGNhc2UuIFRoZSByZW1lZHkgbG9va2VkIHdvcnNlIHRoYW4gdGhlIGlsbG5lc3MuIE15IGZlYXJzCj4gYXJlIGxhcmdlbHkgdW5mb3VuZGVkIGFuZCB0aGUgc29sdXRpb24gc2hvdWxkIHdvcmsgcXVpdGUgd2VsbCBpZgo+IG9uZSBpcyBjYXJlZnVsLgo+ID4KPiA+UmVnYXJkcywgQ2VraQo+ID4KPiA+cHM6IEkgd29uZGVyIGlmIFN5c3RlbS5lcnIgYWx3YXlzIHJlZmVycyB0byB0aGUgcmVhbCBTVERFUlIgb3IKPiBpZiByZWFsbHkgZ2V0cyByZWFzc2lnbmVkIHdpdGggdGhlIHNldEVyciBjYWxsLiBJdCdzICBlYXN5IHRvIGZpbmQgb3V0Li4uCj4gPgo+ID5BdCAyMzoyMCAxMi4wMy4yMDAxICswMDAwLCBKb3NlcGggUGFuaWNvIHdyb3RlOgo+ID4+T2YgY291cnNlIGxvZzRqIGlzIGNvbXBsZXRlbHkgYnVnIGZyZWUsIGJ1dCB0aGF0IGRvZXNuJ3QKPiBwcmVjbHVkZSB1c2VyIGVycm9yLiBGb3IgaW5zdGFuY2UsIEkgbmVnbGVjdGVkIHRvIGFkZCBhcHBlbmRlcnMKPiBpbiBteSBjb25maWcgZmlsZSAoYWN0dWFsbHkgSSBpbnRlbnRpb25hbGx5IGxlZnQgdGhlbSBvdXQsCj4gdGhpbmtpbmcgdGhhdCB3b3VsZCBzaW1wbHkgdHVybiBvZmYgbG9nZ2luZykgYW5kIHRoZW4gbG9nNGogd2VudAo+IGludG8gYW4gaW5maW5pdGUgbG9vcC4gVGhlIHNldFByaW50U3RyZWFtIG1ha2VzIHNlbnNlIHRvIG1lLgo+ID4+Cj4gPj5qb2UKPiA+Pgo+ID4+Cj4gPj4+RnJvbTogSmltIE1vb3JlIDxqaW0ubW9vcmVAdmVyaXRhcy5jb20+Cj4gPj4+UmVwbHktVG86ICJMT0c0SiBVc2VycyBNYWlsaW5nIExpc3QiIDxsb2c0ai11c2VyQGpha2FydGEuYXBhY2hlLm9yZz4KPiA+Pj5UbzogJ0xPRzRKIFVzZXJzIE1haWxpbmcgTGlzdCcgPGxvZzRqLXVzZXJAamFrYXJ0YS5hcGFjaGUub3JnPgo+ID4+PlN1YmplY3Q6IFJFOiBkaXZlcnRpbmcgU3lzdGVtLnN0ZGVyci9zdGRvdXQgaW50byBsb2c0ago+ID4+PkRhdGU6IE1vbiwgMTIgTWFyIDIwMDEgMTg6MTA6MzcgLTA1MDAKPiA+Pj4KPiA+Pj5JdCBkb2Vzbid0LiAgSSBoYXZlbid0IHdvcnJpZWQgYWJvdXQgaXQsIHNpbmNlIGxvZzRqIGRvZXNuJ3QKPiBjb250YWluIGFueQo+ID4+PmJ1Z3MgYW5kIHRoZXJlZm9yZSBpdCB3b3VsZCBuZXZlciBoYXBwZW4uLi4gOikKPiA+Pj4KPiA+Pj5Qcm9iYWJseSB0aGUgYmVzdCB3YXkgdG8gaGFuZGxlIGl0IGlzIHRvIGFkZCBhCj4gPj4+TG9nTG9nLnNldFByaW50U3RyZWFtKFByaW50U3RyZWFtKSBtZXRob2QsIHNvIHlvdSBjYW4gZG8KPiBzb21ldGhpbmcgbGlrZToKPiA+Pj4KPiA+Pj4vLyByZW1lbWJlciBTVERFUlIKPiA+Pj5QcmludFN0cmVhbSBzZSA9IFN5c3RlbS5lcnI7Cj4gPj4+Cj4gPj4+Ly8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgc2VudCB0byBTeXN0ZW0uZXJyIGlzIGxvZ2dlZAo+ID4+PlN5c3RlbS5zZXRFcnIobmV3IFByaW50U3RyZWFtKG5ldwo+IExvZ2dpbmdPdXRwdXRTdHJlYW0oQ2F0ZWdvcnkuZ2V0Um9vdCgpLAo+ID4+PiAgICAgICAgICAgICAgUHJpb3JpdHkuV0FSTiksIHRydWUpKTsKPiA+Pj4KPiA+Pj4vLyBtYWtlIHN1cmUgZXZlcnl0aGluZyBzZW50IHRvIFN5c3RlbS5vdXQgaXMgYWxzbyBsb2dnZWQKPiA+Pj5TeXN0ZW0uc2V0T3V0KG5ldyBQcmludFN0cmVhbShuZXcKPiBMb2dnaW5nT3V0cHV0U3RyZWFtKENhdGVnb3J5LmdldFJvb3QoKSwKPiA+Pj4gICAgICAgICAgICAgIFByaW9yaXR5LklORk8pLCB0cnVlKSk7Cj4gPj4+Cj4gPj4+Ly8gcHJldmVudCBpbmZpbmF0ZSByZWN1cnNpb24gaW4gTG9nTG9nCj4gPj4+TG9nTG9nLnNldFByaW50U3RyZWFtKHNlKTsKPiA+Pj4KPiA+Pj4KPiA+Pj5JIGNhbid0IHRoaW5rIG9mIGFueSBvdGhlciB3YXkgdG8gZG8gaXQgaW4gdGhlIGN1cnJlbnQgdmVyc2lvbiBiZXNpZGVzCj4gPj4+Z2V0dGluZyBleHRyZW1lbHkga2x1ZGdleSBieSBjaGVja2luZyB0aGUgc3RhY2sgdG8gc2VlIGlmIGl0J3MKPiBiZWluZyBjYWxsZWQKPiA+Pj5mcm9tIExvZ0xvZyBhbmQgbG9nZ2luZyBvdXQgdGhlIHRoZSAicmVhbCIgU1RERVJSIHRoZW4gaW4gdGhlCj4gPj4+TG9nZ2luZ091dHB1dFN0cmVhbS4gIEl0IGNhbiBiZSBkb25lIG9uIHRoZSB0aGVvcnkgdGhhdCBMb2dMb2cKPiB3b3VsZG4ndCBiZQo+ID4+PmNhbGxlZCB2ZXJ5IG9mdGVuLCBidXQgc3RpbGwuLi4KPiA+Pj4KPiA+Pj4tSmltIE1vb3JlCj4gPj4+Cj4gPj4+Cj4gPj4+LS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0KPiA+Pj5Gcm9tOiBDZWtpIEf8bGP8IFttYWlsdG86Y2d1QHFvcy5jaF0KPiA+Pj5TZW50OiBNb25kYXksIE1hcmNoIDEyLCAyMDAxIDU6MTUgUE0KPiA+Pj5UbzogTE9HNEogVXNlcnMgTWFpbGluZyBMaXN0Cj4gPj4+U3ViamVjdDogUkU6IGRpdmVydGluZyBTeXN0ZW0uc3RkZXJyL3N0ZG91dCBpbnRvIGxvZzRqCj4gPj4+Cj4gPj4+Cj4gPj4+SmltLCBKb3NlcGgsCj4gPj4+Cj4gPj4+SGVyZSBpcyBhIGxpbmsgY29udGFpbmluZyBKaW0ncyBjb2RlOgo+ID4+Pgo+ID4+Pmh0dHA6Ly9tYXJjLnRoZWFpbXNncm91cC5jb20vP2w9bG9nNGotdXNlciZtPTk4MDk3NjY5MjE4NTcxJnc9Mgo+ID4+Pgo+ID4+PkhvdyBkb2VzIHRoaXMgY29kZSBoYW5kbGUgdGhlIGluZmluaXRlIHJlY3Vyc2lvbiBwcm9ibGVtIG1lbnRpb25lZCBieQo+ID4+Pkpvc2VwaD8gQ2VraQo+ID4+Pgo+ID4+PkF0IDE3OjAzIDEyLjAzLjIwMDEgLTA1MDAsIEppbSBNb29yZSB3cm90ZToKPiA+Pj4+R28gdG8gdGhlIG1haWxpbmcgbGlzdCBhcmNoaXZlcyAodGhlQWltc0dyb3VwLmNvbSBpcyB0aGUKPiBiZXN0KSBhbmQgc2VhcmNoCj4gPj4+PmZvciB0aGUgdGhyZWFkIHdpdGggdGhlIHN1YmplY3Qgb2YgIkNhcHR1cmluZyBTeXN0ZW0uZXJyIgo+ID4+Pj4KPiA+Pj4+LUppbSBNb29yZQo+ID4+Pj4iSSB0aGluayBzbywgQnJhaW47IGJ1dCBpZiB3ZSBnYXZlIHBlYXMgYSBjaGFuY2UsIHdvbid0IHRoZQo+IGxpbWEgYmVhbnMgZ2V0Cj4gPj4+PmplYWxvdXM/IiAtIFBpbmt5Cj4gPj4+Pgo+ID4+Pj4KPiA+Pj4+LS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0KPiA+Pj4+RnJvbTogSm9zZXBoIFBhbmljbyBbbWFpbHRvOmpvZV9wYW5pY29AaG90bWFpbC5jb21dCj4gPj4+PlNlbnQ6IE1vbmRheSwgTWFyY2ggMTIsIDIwMDEgNDo0MyBQTQo+ID4+Pj5UbzogbG9nNGotdXNlckBqYWthcnRhLmFwYWNoZS5vcmcKPiA+Pj4+U3ViamVjdDogZGl2ZXJ0aW5nIFN5c3RlbS5zdGRlcnIvc3Rkb3V0IGludG8gbG9nNGoKPiA+Pj4+Cj4gPj4+Pgo+ID4+Pj5Gb2xrcywKPiA+Pj4+Cj4gPj4+PldlIHVzZSBhIG51bWJlciBvZiB0aGlyZC1wYXJ0eSBwYWNrYWdlcyB0aGF0IGRvCj4gc3RkZXJyLnByaW50Li4uIGF0IHZhcmlvdXMKPiA+Pj4+cmFuZG9tIHBsYWNlcyBpbiB0aGVpciBjb2RlLiBJJ20gZmluZGluZyBpdCBxdWl0ZSB1c2VmdWwgdG8KPiBkaXZlcnQgdGhlc2UKPiA+Pj4+bWVzc2FnZXMgaW50byBvdXIgbG9nNGogaGVpcmFyY2h5LiBJIGRvIHRoaXMgYnkgcmVwbGFjaW5nCj4gc3RkZXJyL3N0ZG91dAo+ID4+PndpdGgKPiA+Pj4+Cj4gPj4+Pm15IG93biBQcmludFN0cmVhbXMgdGhhdCBsb2cgdGhlIGxpbmVzIHRvIGEgc3BlY2lhbCBsb2c0ago+IENhdGVnb3J5LS0gYXMKPiA+Pj4+c3VnZ2VzdGVkIG9uIHRoaXMgbGlzdCBhIHdoaWxlIGJhY2suIFRoZSBvbmx5Cj4gZmx5LWluLXRoZS1vaW50bWVudCB3aXRoIHRoaXMKPiA+Pj4KPiA+Pj4+c2NoZW1lIGlzIExvZ0xvZy4gSWYgdGhlcmUgaXMgYSBwcm9ibGVtIHdpdGggbG9nNGogc3VjaCB0aGF0Cj4gaXQgY2Fubm90IGxvZwo+ID4+Pj5mb3Igc29tZSByZWFzb24sIHRoZW4gbG9nNGogaW50ZXJuYWxzIHVzZSBMb2dMb2cgdG8gYXR0ZW1wdAo+IHRvIHByaW50IGFuCj4gPj4+PmVycm9yIG1lc3NhZ2UuIFRoaXMgb2J2aW91c2x5IGxlYWRzIHRvIGFuIGluZmluaXRlIHJlY3Vyc2lvbi4KPiBIYXMgYW55b25lCj4gPj4+PmVsc2UgYmVlbiBib3RoZXJlZCBieSB0aGlzPyBXb3VsZCBpdCBtYWtlIHNlbnNlIHRvIGFkZAo+IGludGVyZmFjZSB0byBMb2dMb2cKPiA+Pj4+d2hpY2ggd291bGQgc2V0IHRoZSBQcmludFN0cmVhbSBpdCB1c2VzIHRvIGxvZyBpdHMgZXJyb3IgbWVzc2FnZXMgdG8/Cj4gPj4+Pgo+ID4+Pj50aGFua3MgZm9yIGFueSBpZGVhcwo+ID4+Pj4KPiA+Pj4+am9lCgoK