LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICAgICAgICAgICAKICogRmlsZW5hbWU6ICAgICAgaXJzeXNjdGwuYwogKiBWZXJzaW9uOiAgICAgICAxLjAKICogRGVzY3JpcHRpb246ICAgU3lzY3RsIGludGVyZmFjZSBmb3IgSXJEQQogKiBTdGF0dXM6ICAgICAgICBFeHBlcmltZW50YWwuCiAqIEF1dGhvcjogICAgICAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KICogQ3JlYXRlZCBhdDogICAgU3VuIE1heSAyNCAyMjoxMjowNiAxOTk4CiAqIE1vZGlmaWVkIGF0OiAgIEZyaSBKdW4gIDQgMDI6NTA6MTUgMTk5OQogKiBNb2RpZmllZCBieTogICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CiAqIAogKiAgICAgQ29weXJpZ2h0IChjKSAxOTk3LCAxOTk5IERhZyBCcmF0dGxpLCBBbGwgUmlnaHRzIFJlc2VydmVkLgogKiAgICAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDEgSmVhbiBUb3VycmlsaGVzIDxqdEBocGwuaHAuY29tPgogKiAgICAgIAogKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIAogKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgCiAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICogIAogKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc/ggYWRtaXQgbGlhYmlsaXR5IG5vcgogKiAgICAgcHJvdmlkZSB3YXJyYW50eSBmb3IgYW55IG9mIHRoaXMgc29mdHdhcmUuIFRoaXMgbWF0ZXJpYWwgaXMgCiAqICAgICBwcm92aWRlZCAiQVMtSVMiIGFuZCBhdCBubyBjaGFyZ2UuCiAqICAgICAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgojaW5jbHVkZSA8bGludXgvbW0uaD4KI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KCiNpbmNsdWRlIDxuZXQvaXJkYS9pcmRhLmg+CQkvKiBpcmRhX2RlYnVnICovCiNpbmNsdWRlIDxuZXQvaXJkYS9pcmlhc19vYmplY3QuaD4KCiNkZWZpbmUgTkVUX0lSREEgNDEyIC8qIFJhbmRvbSBudW1iZXIgKi8KZW51bSB7IERJU0NPVkVSWT0xLCBERVZOQU1FLCBERUJVRywgRkFTVF9QT0xMLCBESVNDT1ZFUllfU0xPVFMsCiAgICAgICBESVNDT1ZFUllfVElNRU9VVCwgU0xPVF9USU1FT1VULCBNQVhfQkFVRF9SQVRFLCBNSU5fVFhfVFVSTl9USU1FLAogICAgICAgTUFYX1RYX0RBVEFfU0laRSwgTUFYX1RYX1dJTkRPVywgTUFYX05PUkVQTFlfVElNRSwgV0FSTl9OT1JFUExZX1RJTUUsCiAgICAgICBMQVBfS0VFUEFMSVZFX1RJTUUgfTsKCmV4dGVybiBpbnQgIHN5c2N0bF9kaXNjb3Zlcnk7CmV4dGVybiBpbnQgIHN5c2N0bF9kaXNjb3Zlcnlfc2xvdHM7CmV4dGVybiBpbnQgIHN5c2N0bF9kaXNjb3ZlcnlfdGltZW91dDsKZXh0ZXJuIGludCAgc3lzY3RsX3Nsb3RfdGltZW91dDsKZXh0ZXJuIGludCAgc3lzY3RsX2Zhc3RfcG9sbF9pbmNyZWFzZTsKZXh0ZXJuIGNoYXIgc3lzY3RsX2Rldm5hbWVbXTsKZXh0ZXJuIGludCAgc3lzY3RsX21heF9iYXVkX3JhdGU7CmV4dGVybiBpbnQgIHN5c2N0bF9taW5fdHhfdHVybl90aW1lOwpleHRlcm4gaW50ICBzeXNjdGxfbWF4X3R4X2RhdGFfc2l6ZTsKZXh0ZXJuIGludCAgc3lzY3RsX21heF90eF93aW5kb3c7CmV4dGVybiBpbnQgIHN5c2N0bF9tYXhfbm9yZXBseV90aW1lOwpleHRlcm4gaW50ICBzeXNjdGxfd2Fybl9ub3JlcGx5X3RpbWU7CmV4dGVybiBpbnQgIHN5c2N0bF9sYXBfa2VlcGFsaXZlX3RpbWU7CgovKiB0aGlzIGlzIG5lZWRlZCBmb3IgdGhlIHByb2NfZG9pbnR2ZWNfbWlubWF4IC0gSmVhbiBJSSAqLwpzdGF0aWMgaW50IG1heF9kaXNjb3Zlcnlfc2xvdHMgPSAxNjsJCS8qID8/PyAqLwpzdGF0aWMgaW50IG1pbl9kaXNjb3Zlcnlfc2xvdHMgPSAxOwovKiBJckxBUCA2LjEzLjIgc2F5cyAyNW1zIHRvIDEwKzcwbXMgLSBhbGxvdyBoaWdoZXIgc2luY2Ugc29tZSBkZXZpY2VzCiAqIHNlZW1zIHRvIHJlcXVpcmUgaXQuIChmcm9tIERhZydzIGNvbW1lbnQpICovCnN0YXRpYyBpbnQgbWF4X3Nsb3RfdGltZW91dCA9IDE2MDsKc3RhdGljIGludCBtaW5fc2xvdF90aW1lb3V0ID0gMjA7CnN0YXRpYyBpbnQgbWF4X21heF9iYXVkX3JhdGUgPSAxNjAwMDAwMDsJLyogU2VlIHFvcy5jIC0gSXJMQVAgc3BlYyAqLwpzdGF0aWMgaW50IG1pbl9tYXhfYmF1ZF9yYXRlID0gMjQwMDsKc3RhdGljIGludCBtYXhfbWluX3R4X3R1cm5fdGltZSA9IDEwMDAwOwkvKiBTZWUgcW9zLmMgLSBJckxBUCBzcGVjICovCnN0YXRpYyBpbnQgbWluX21pbl90eF90dXJuX3RpbWU7CnN0YXRpYyBpbnQgbWF4X21heF90eF9kYXRhX3NpemUgPSAyMDQ4OwkJLyogU2VlIHFvcy5jIC0gSXJMQVAgc3BlYyAqLwpzdGF0aWMgaW50IG1pbl9tYXhfdHhfZGF0YV9zaXplID0gNjQ7CnN0YXRpYyBpbnQgbWF4X21heF90eF93aW5kb3cgPSA3OwkJLyogU2VlIHFvcy5jIC0gSXJMQVAgc3BlYyAqLwpzdGF0aWMgaW50IG1pbl9tYXhfdHhfd2luZG93ID0gMTsKc3RhdGljIGludCBtYXhfbWF4X25vcmVwbHlfdGltZSA9IDQwOwkJLyogU2VlIHFvcy5jIC0gSXJMQVAgc3BlYyAqLwpzdGF0aWMgaW50IG1pbl9tYXhfbm9yZXBseV90aW1lID0gMzsKc3RhdGljIGludCBtYXhfd2Fybl9ub3JlcGx5X3RpbWUgPSAzOwkJLyogM3MgPT0gc3RhbmRhcmQgKi8Kc3RhdGljIGludCBtaW5fd2Fybl9ub3JlcGx5X3RpbWUgPSAxOwkJLyogMXMgPT0gbWluIFdEX1RJTUVSICovCnN0YXRpYyBpbnQgbWF4X2xhcF9rZWVwYWxpdmVfdGltZSA9IDEwMDAwOwkvKiAxMHMgKi8Kc3RhdGljIGludCBtaW5fbGFwX2tlZXBhbGl2ZV90aW1lID0gMTAwOwkvKiAxMDB1cyAqLwovKiBGb3Igb3RoZXIgc3lzY3RsLCBJJ3ZlIG5vIGlkZWEgb2YgdGhlIHJhbmdlLiBNYXliZSBEYWcgY291bGQgaGVscAogKiB1cyBvbiB0aGF0IC0gSmVhbiBJSSAqLwoKc3RhdGljIGludCBkb19kZXZuYW1lKGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwgc3RydWN0IGZpbGUgKmZpbHAsCgkJICAgICAgdm9pZCBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpCnsKCWludCByZXQ7CgoJcmV0ID0gcHJvY19kb3N0cmluZyh0YWJsZSwgd3JpdGUsIGZpbHAsIGJ1ZmZlciwgbGVucCwgcHBvcyk7CglpZiAocmV0ID09IDAgJiYgd3JpdGUpIHsKCQlzdHJ1Y3QgaWFzX3ZhbHVlICp2YWw7CgoJCXZhbCA9IGlyaWFzX25ld19zdHJpbmdfdmFsdWUoc3lzY3RsX2Rldm5hbWUpOwoJCWlmICh2YWwpCgkJCWlyaWFzX29iamVjdF9jaGFuZ2VfYXR0cmlidXRlKCJEZXZpY2UiLCAiRGV2aWNlTmFtZSIsIHZhbCk7Cgl9CglyZXR1cm4gcmV0Owp9CgovKiBPbmUgZmlsZSAqLwpzdGF0aWMgY3RsX3RhYmxlIGlyZGFfdGFibGVbXSA9IHsKCXsKCQkuY3RsX25hbWUJPSBESVNDT1ZFUlksCgkJLnByb2NuYW1lCT0gImRpc2NvdmVyeSIsCgkJLmRhdGEJCT0gJnN5c2N0bF9kaXNjb3ZlcnksCgkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKCQkubW9kZQkJPSAwNjQ0LAoJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYwoJfSwKCXsKCQkuY3RsX25hbWUJPSBERVZOQU1FLAoJCS5wcm9jbmFtZQk9ICJkZXZuYW1lIiwKCQkuZGF0YQkJPSBzeXNjdGxfZGV2bmFtZSwKCQkubWF4bGVuCQk9IDY1LAoJCS5tb2RlCQk9IDA2NDQsCgkJLnByb2NfaGFuZGxlcgk9ICZkb19kZXZuYW1lLAoJCS5zdHJhdGVneQk9ICZzeXNjdGxfc3RyaW5nCgl9LAojaWZkZWYgQ09ORklHX0lSREFfREVCVUcKICAgICAgICB7CgkJLmN0bF9uYW1lCT0gREVCVUcsCgkJLnByb2NuYW1lCT0gImRlYnVnIiwKCQkuZGF0YQkJPSAmaXJkYV9kZWJ1ZywKCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLAoJCS5tb2RlCQk9IDA2NDQsCgkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjCgl9LAojZW5kaWYKI2lmZGVmIENPTkZJR19JUkRBX0ZBU1RfUlIKICAgICAgICB7CgkJLmN0bF9uYW1lCT0gRkFTVF9QT0xMLAoJCS5wcm9jbmFtZQk9ICJmYXN0X3BvbGxfaW5jcmVhc2UiLAoJCS5kYXRhCQk9ICZzeXNjdGxfZmFzdF9wb2xsX2luY3JlYXNlLAoJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCgkJLm1vZGUJCT0gMDY0NCwKCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMKCX0sCiNlbmRpZgoJewoJCS5jdGxfbmFtZQk9IERJU0NPVkVSWV9TTE9UUywKCQkucHJvY25hbWUJPSAiZGlzY292ZXJ5X3Nsb3RzIiwKCQkuZGF0YQkJPSAmc3lzY3RsX2Rpc2NvdmVyeV9zbG90cywKCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLAoJCS5tb2RlCQk9IDA2NDQsCgkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX21pbm1heCwKCQkuc3RyYXRlZ3kJPSAmc3lzY3RsX2ludHZlYywKCQkuZXh0cmExCQk9ICZtaW5fZGlzY292ZXJ5X3Nsb3RzLAoJCS5leHRyYTIJCT0gJm1heF9kaXNjb3Zlcnlfc2xvdHMKCX0sCgl7CgkJLmN0bF9uYW1lCT0gRElTQ09WRVJZX1RJTUVPVVQsCgkJLnByb2NuYW1lCT0gImRpc2NvdmVyeV90aW1lb3V0IiwKCQkuZGF0YQkJPSAmc3lzY3RsX2Rpc2NvdmVyeV90aW1lb3V0LAoJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCgkJLm1vZGUJCT0gMDY0NCwKCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMKCX0sCgl7CgkJLmN0bF9uYW1lCT0gU0xPVF9USU1FT1VULAoJCS5wcm9jbmFtZQk9ICJzbG90X3RpbWVvdXQiLAoJCS5kYXRhCQk9ICZzeXNjdGxfc2xvdF90aW1lb3V0LAoJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCgkJLm1vZGUJCT0gMDY0NCwKCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfbWlubWF4LAoJCS5zdHJhdGVneQk9ICZzeXNjdGxfaW50dmVjLAoJCS5leHRyYTEJCT0gJm1pbl9zbG90X3RpbWVvdXQsCgkJLmV4dHJhMgkJPSAmbWF4X3Nsb3RfdGltZW91dAoJfSwKCXsKCQkuY3RsX25hbWUJPSBNQVhfQkFVRF9SQVRFLAoJCS5wcm9jbmFtZQk9ICJtYXhfYmF1ZF9yYXRlIiwKCQkuZGF0YQkJPSAmc3lzY3RsX21heF9iYXVkX3JhdGUsCgkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKCQkubW9kZQkJPSAwNjQ0LAoJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY19taW5tYXgsCgkJLnN0cmF0ZWd5CT0gJnN5c2N0bF9pbnR2ZWMsCgkJLmV4dHJhMQkJPSAmbWluX21heF9iYXVkX3JhdGUsCgkJLmV4dHJhMgkJPSAmbWF4X21heF9iYXVkX3JhdGUKCX0sCgl7CgkJLmN0bF9uYW1lCT0gTUlOX1RYX1RVUk5fVElNRSwKCQkucHJvY25hbWUJPSAibWluX3R4X3R1cm5fdGltZSIsCgkJLmRhdGEJCT0gJnN5c2N0bF9taW5fdHhfdHVybl90aW1lLAoJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCgkJLm1vZGUJCT0gMDY0NCwKCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfbWlubWF4LAoJCS5zdHJhdGVneQk9ICZzeXNjdGxfaW50dmVjLAoJCS5leHRyYTEJCT0gJm1pbl9taW5fdHhfdHVybl90aW1lLAoJCS5leHRyYTIJCT0gJm1heF9taW5fdHhfdHVybl90aW1lCgl9LAoJewoJCS5jdGxfbmFtZQk9IE1BWF9UWF9EQVRBX1NJWkUsCgkJLnByb2NuYW1lCT0gIm1heF90eF9kYXRhX3NpemUiLAoJCS5kYXRhCQk9ICZzeXNjdGxfbWF4X3R4X2RhdGFfc2l6ZSwKCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLAoJCS5tb2RlCQk9IDA2NDQsCgkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX21pbm1heCwKCQkuc3RyYXRlZ3kJPSAmc3lzY3RsX2ludHZlYywKCQkuZXh0cmExCQk9ICZtaW5fbWF4X3R4X2RhdGFfc2l6ZSwKCQkuZXh0cmEyCQk9ICZtYXhfbWF4X3R4X2RhdGFfc2l6ZQoJfSwKCXsKCQkuY3RsX25hbWUJPSBNQVhfVFhfV0lORE9XLAoJCS5wcm9jbmFtZQk9ICJtYXhfdHhfd2luZG93IiwKCQkuZGF0YQkJPSAmc3lzY3RsX21heF90eF93aW5kb3csCgkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKCQkubW9kZQkJPSAwNjQ0LAoJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY19taW5tYXgsCgkJLnN0cmF0ZWd5CT0gJnN5c2N0bF9pbnR2ZWMsCgkJLmV4dHJhMQkJPSAmbWluX21heF90eF93aW5kb3csCgkJLmV4dHJhMgkJPSAmbWF4X21heF90eF93aW5kb3cKCX0sCgl7CgkJLmN0bF9uYW1lCT0gTUFYX05PUkVQTFlfVElNRSwKCQkucHJvY25hbWUJPSAibWF4X25vcmVwbHlfdGltZSIsCgkJLmRhdGEJCT0gJnN5c2N0bF9tYXhfbm9yZXBseV90aW1lLAoJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCgkJLm1vZGUJCT0gMDY0NCwKCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfbWlubWF4LAoJCS5zdHJhdGVneQk9ICZzeXNjdGxfaW50dmVjLAoJCS5leHRyYTEJCT0gJm1pbl9tYXhfbm9yZXBseV90aW1lLAoJCS5leHRyYTIJCT0gJm1heF9tYXhfbm9yZXBseV90aW1lCgl9LAoJewoJCS5jdGxfbmFtZQk9IFdBUk5fTk9SRVBMWV9USU1FLAoJCS5wcm9jbmFtZQk9ICJ3YXJuX25vcmVwbHlfdGltZSIsCgkJLmRhdGEJCT0gJnN5c2N0bF93YXJuX25vcmVwbHlfdGltZSwKCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLAoJCS5tb2RlCQk9IDA2NDQsCgkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX21pbm1heCwKCQkuc3RyYXRlZ3kJPSAmc3lzY3RsX2ludHZlYywKCQkuZXh0cmExCQk9ICZtaW5fd2Fybl9ub3JlcGx5X3RpbWUsCgkJLmV4dHJhMgkJPSAmbWF4X3dhcm5fbm9yZXBseV90aW1lCgl9LAoJewoJCS5jdGxfbmFtZQk9IExBUF9LRUVQQUxJVkVfVElNRSwKCQkucHJvY25hbWUJPSAibGFwX2tlZXBhbGl2ZV90aW1lIiwKCQkuZGF0YQkJPSAmc3lzY3RsX2xhcF9rZWVwYWxpdmVfdGltZSwKCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLAoJCS5tb2RlCQk9IDA2NDQsCgkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX21pbm1heCwKCQkuc3RyYXRlZ3kJPSAmc3lzY3RsX2ludHZlYywKCQkuZXh0cmExCQk9ICZtaW5fbGFwX2tlZXBhbGl2ZV90aW1lLAoJCS5leHRyYTIJCT0gJm1heF9sYXBfa2VlcGFsaXZlX3RpbWUKCX0sCgl7IC5jdGxfbmFtZSA9IDAgfQp9OwoKLyogT25lIGRpcmVjdG9yeSAqLwpzdGF0aWMgY3RsX3RhYmxlIGlyZGFfbmV0X3RhYmxlW10gPSB7Cgl7CgkJLmN0bF9uYW1lCT0gTkVUX0lSREEsCgkJLnByb2NuYW1lCT0gImlyZGEiLAoJCS5tYXhsZW4JCT0gMCwKCQkubW9kZQkJPSAwNTU1LAoJCS5jaGlsZAkJPSBpcmRhX3RhYmxlCgl9LAoJeyAuY3RsX25hbWUgPSAwIH0KfTsKCi8qIFRoZSBwYXJlbnQgZGlyZWN0b3J5ICovCnN0YXRpYyBjdGxfdGFibGUgaXJkYV9yb290X3RhYmxlW10gPSB7Cgl7CgkJLmN0bF9uYW1lCT0gQ1RMX05FVCwKCQkucHJvY25hbWUJPSAibmV0IiwKCQkubWF4bGVuCQk9IDAsCgkJLm1vZGUJCT0gMDU1NSwKCQkuY2hpbGQJCT0gaXJkYV9uZXRfdGFibGUKCX0sCgl7IC5jdGxfbmFtZSA9IDAgfQp9OwoKc3RhdGljIHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICppcmRhX3RhYmxlX2hlYWRlcjsKCi8qCiAqIEZ1bmN0aW9uIGlyZGFfc3lzY3RsX3JlZ2lzdGVyICh2b2lkKQogKgogKiAgICBSZWdpc3RlciBvdXIgc3lzY3RsIGludGVyZmFjZQogKgogKi8KaW50IF9faW5pdCBpcmRhX3N5c2N0bF9yZWdpc3Rlcih2b2lkKQp7CglpcmRhX3RhYmxlX2hlYWRlciA9IHJlZ2lzdGVyX3N5c2N0bF90YWJsZShpcmRhX3Jvb3RfdGFibGUsIDApOwoJaWYgKCFpcmRhX3RhYmxlX2hlYWRlcikKCQlyZXR1cm4gLUVOT01FTTsKCglyZXR1cm4gMDsKfQoKLyoKICogRnVuY3Rpb24gaXJkYV9zeXNjdGxfdW5yZWdpc3RlciAodm9pZCkKICoKICogICAgVW5yZWdpc3RlciBvdXIgc3lzY3RsIGludGVyZmFjZQogKgogKi8Kdm9pZCBfX2V4aXQgaXJkYV9zeXNjdGxfdW5yZWdpc3Rlcih2b2lkKSAKewoJdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUoaXJkYV90YWJsZV9oZWFkZXIpOwp9CgoKCg==