From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?utf-8?q?Arve=20Hj=C3=B8nnev=C3=A5g?= Subject: [PATCH 03/10] PM: wakelock: Add driver to access wakelocks from user-space Date: Tue, 10 Feb 2009 17:49:08 -0800 Message-ID: <1234316955-31304-4-git-send-email-arve@android.com> References: <1234316955-31304-1-git-send-email-arve@android.com> <1234316955-31304-2-git-send-email-arve@android.com> <1234316955-31304-3-git-send-email-arve@android.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1234316955-31304-3-git-send-email-arve@android.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: linux-pm-bounces@lists.linux-foundation.org Errors-To: linux-pm-bounces@lists.linux-foundation.org To: linux-pm@lists.linux-foundation.org Cc: ncunningham@crca.org.au, u.luckas@road.de, swetland@google.com List-Id: linux-pm@vger.kernel.org QWRkcyBpb2N0bHMgdG8gY3JlYXRlIGEgd2FrZWxvY2ssIGFuZCB0byBsb2NrIGFuZCB1bmxvY2sg dGhlIHdha2Vsb2NrLgpUbyBkZWxldGUgdGhlIHdha2Vsb2NrLCBjbG9zZSB0aGUgZGV2aWNlLgoK U2lnbmVkLW9mZi1ieTogQXJ2ZSBIasO4bm5ldsOlZyA8YXJ2ZUBhbmRyb2lkLmNvbT4KLS0tCiBE b2N1bWVudGF0aW9uL3Bvd2VyL3dha2Vsb2Nrcy50eHQgfCAgIDI0ICsrKysrKwogaW5jbHVkZS9s aW51eC93YWtlbG9jay1kZXYuaCAgICAgIHwgICAyNiArKysrKysrCiBrZXJuZWwvcG93ZXIvS2Nv bmZpZyAgICAgICAgICAgICAgfCAgICA5ICsrKwoga2VybmVsL3Bvd2VyL01ha2VmaWxlICAgICAg ICAgICAgIHwgICAgMSArCiBrZXJuZWwvcG93ZXIvdXNlcndha2Vsb2NrLmMgICAgICAgfCAgMTQ1 ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDUgZmlsZXMgY2hhbmdlZCwg MjA1IGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgaW5j bHVkZS9saW51eC93YWtlbG9jay1kZXYuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGtlcm5lbC9wb3dl ci91c2Vyd2FrZWxvY2suYwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXIvd2FrZWxv Y2tzLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXIvd2FrZWxvY2tzLnR4dAppbmRleCA4OTNhNDM4 Li45Mzk5MDhmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Bvd2VyL3dha2Vsb2Nrcy50eHQK KysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlci93YWtlbG9ja3MudHh0CkBAIC03OCwzICs3OCwyNyBA QCBzdGlsbCBuZWVkIHRvIHJ1bi4gQXZvaWQgdGhpcyB3aGVuIHBvc3NpYmxlLCBzaW5jZSBpdCB3 aWxsIHdhc3RlIHBvd2VyCiBpZiB0aGUgdGltZW91dCBpcyBsb25nIG9yIG1heSBmYWlsIHRvIGZp bmlzaCBuZWVkZWQgd29yayBpZiB0aGUgdGltZW91dCBpcwogc2hvcnQuCiAKK1VzZXItc3BhY2Ug QVBJCis9PT09PT09PT09PT09PQorCitUbyBjcmVhdGUgYSB3YWtlbG9jayBmcm9tIHVzZXItc3Bh Y2UsIG9wZW4gdGhlIHdha2Vsb2NrIGRldmljZToKKyAgICBmZCA9IG9wZW4oIi9kZXYvd2FrZWxv Y2siLCBPX1JEV1IgfCBPX0NMT0VYRUMpOwordGhlbiBjYWxsOgorICAgIGlvY3RsKGZkLCBXQUtF TE9DS19JT0NUTF9JTklUKHN0cmxlbihuYW1lKSksIG5hbWUpOworCitUbyBsb2NrIGEgd2FrZWxv Y2sgY2FsbDoKKyAgICBpb2N0bChmZCwgV0FLRUxPQ0tfSU9DVExfTE9DSyk7CitvcgorICAgIGlv Y3RsKGZkLCBXQUtFTE9DS19JT0NUTF9MT0NLX1RJTUVPVVQsICZ0aW1lc3BlY190aW1lb3V0KTsK KworVG8gdW5sb2NrIGNhbGw6CisgICAgaW9jdGwoZmQsIFdBS0VMT0NLX0lPQ1RMX1VOTE9DSyk7 CisKK1RvIGRlc3Ryb3kgdGhlIHdha2Vsb2NrLCBjbG9zZSB0aGUgZGV2aWNlOgorICAgIGNsb3Nl KGZkKTsKKworQSBtb2R1bGUgcGFyYW1ldGVyLCB1bmNsZWFuX2V4aXRfZ3JhY2VfcGVyaW9kLCBj YW4gYmUgc2V0IHRvIGFsbG93IHNlcnZlcnMKK3NvbWUgdGltZSB0byByZXN0YXJ0IGlmIHRoZXkg Y3Jhc2ggd2l0aCBhIHdha2Vsb2NrIGhlbGQuIElmIHRoZSBwcm9jZXNzIGRpZXMgb3IKK3RoZSBk ZXZpY2UgaXMgY2xvc2VkIHdoaWxlIHRoZSB3YWtlbG9jayBpcyBsb2NrZWQsIGEgd2FrZWxvY2sg d2lsbCBiZSBoZWxkIGZvcgordGhlIG51bWJlciBvZiBzZWNvbmRzIHNwZWNpZmllZC4KKwpkaWZm IC0tZ2l0IGEvaW5jbHVkZS9saW51eC93YWtlbG9jay1kZXYuaCBiL2luY2x1ZGUvbGludXgvd2Fr ZWxvY2stZGV2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRmYjFjNgot LS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvd2FrZWxvY2stZGV2LmgKQEAgLTAsMCAr MSwyNiBAQAorLyogaW5jbHVkZS9saW51eC93YWtlbG9jay1kZXYuaAorICoKKyAqIENvcHlyaWdo dCAoQykgMjAwOSBHb29nbGUsIEluYy4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2Vk IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZl cnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFu ZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9z ZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaWZuZGVmIF9M SU5VWF9XQUtFTE9DS19ERVZfSAorI2RlZmluZSBfTElOVVhfV0FLRUxPQ0tfREVWX0gKKworI2lu Y2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisKKyNkZWZpbmUgV0FLRUxPQ0tfSU9DVExfSU5JVChsZW4p CV9JT0MoX0lPQ19XUklURSwndycsMCxsZW4pCisjZGVmaW5lIFdBS0VMT0NLX0lPQ1RMX0xPQ0sJ CV9JTygndycsIDEpCisjZGVmaW5lIFdBS0VMT0NLX0lPQ1RMX0xPQ0tfVElNRU9VVAlfSU9XKCd3 JywgMiwgc3RydWN0IHRpbWVzcGVjKQorI2RlZmluZSBXQUtFTE9DS19JT0NUTF9VTkxPQ0sJCV9J TygndycsIDMpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL0tjb25maWcgYi9r ZXJuZWwvcG93ZXIvS2NvbmZpZwppbmRleCA5YWJkOTdlLi42YWJkNWYyIDEwMDY0NAotLS0gYS9r ZXJuZWwvcG93ZXIvS2NvbmZpZworKysgYi9rZXJuZWwvcG93ZXIvS2NvbmZpZwpAQCAtMTMzLDYg KzEzMywxNSBAQCBjb25maWcgV0FLRUxPQ0tfU1RBVAogCS0tLWhlbHAtLS0KIAkgIFJlcG9ydCB3 YWtlIGxvY2sgc3RhdHMgaW4gL3Byb2Mvd2FrZWxvY2tzCiAKK2NvbmZpZyBVU0VSX1dBS0VMT0NL CisJYm9vbCAiVXNlcnNwYWNlIHdha2UgbG9ja3MiCisJZGVwZW5kcyBvbiBXQUtFTE9DSworCWRl ZmF1bHQgeQorCS0tLWhlbHAtLS0KKwkgIFVzZXItc3BhY2Ugd2FrZSBsb2NrIGFwaS4gQ3JlYXRl cyBhIG1pc2MgZGV2aWNlIHdpdGggaW9jdGxzCisJICB0byBjcmVhdGUsIGxvY2sgYW5kIHVubG9j ayBhIHdha2Vsb2NrLiBUaGUgd2FrZWxvY2sgd2lsbCBiZQorCSAgZGVsZXRlZCB3aGVuIHRoZSBk ZXZpY2UgaXMgY2xvc2VkLgorCiBjb25maWcgSElCRVJOQVRJT04KIAlib29sICJIaWJlcm5hdGlv biAoYWthICdzdXNwZW5kIHRvIGRpc2snKSIKIAlkZXBlbmRzIG9uIFBNICYmIFNXQVAgJiYgQVJD SF9ISUJFUk5BVElPTl9QT1NTSUJMRQpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL01ha2VmaWxl IGIva2VybmVsL3Bvd2VyL01ha2VmaWxlCmluZGV4IDhkODY3MmIuLjYzZDMwZGIgMTAwNjQ0Ci0t LSBhL2tlcm5lbC9wb3dlci9NYWtlZmlsZQorKysgYi9rZXJuZWwvcG93ZXIvTWFrZWZpbGUKQEAg LTcsNiArNyw3IEBAIG9iai15CQkJCTo9IG1haW4ubwogb2JqLSQoQ09ORklHX1BNX1NMRUVQKQkJ Kz0gY29uc29sZS5vCiBvYmotJChDT05GSUdfRlJFRVpFUikJCSs9IHByb2Nlc3Mubwogb2JqLSQo Q09ORklHX1dBS0VMT0NLKQkJKz0gd2FrZWxvY2subworb2JqLSQoQ09ORklHX1VTRVJfV0FLRUxP Q0spCSs9IHVzZXJ3YWtlbG9jay5vCiBvYmotJChDT05GSUdfSElCRVJOQVRJT04pCSs9IHN3c3Vz cC5vIGRpc2subyBzbmFwc2hvdC5vIHN3YXAubyB1c2VyLm8KIAogb2JqLSQoQ09ORklHX01BR0lD X1NZU1JRKQkrPSBwb3dlcm9mZi5vCmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvdXNlcndha2Vs b2NrLmMgYi9rZXJuZWwvcG93ZXIvdXNlcndha2Vsb2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uYzI3YzJmNwotLS0gL2Rldi9udWxsCisrKyBiL2tlcm5lbC9wb3dlci91 c2Vyd2FrZWxvY2suYwpAQCAtMCwwICsxLDE0NSBAQAorLyoga2VybmVsL3Bvd2VyL3VzZXJ3YWtl bG9jay5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSwgSW5jLgorICoKKyAqIFRo aXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwg YW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu CisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L21pc2Nk ZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNj ZXNzLmg+CisjaW5jbHVkZSA8bGludXgvd2FrZWxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC93YWtl bG9jay1kZXYuaD4KKworZW51bSB7CisJREVCVUdfRkFJTFVSRQk9IEJJVCgwKSwKK307CitzdGF0 aWMgaW50IGRlYnVnX21hc2sgPSBERUJVR19GQUlMVVJFOworbW9kdWxlX3BhcmFtX25hbWVkKGRl YnVnX21hc2ssIGRlYnVnX21hc2ssIGludCwgU19JUlVHTyB8IFNfSVdVU1IgfCBTX0lXR1JQKTsK Kworc3RhdGljIGludCB1bmNsZWFuX2V4aXRfZ3JhY2VfcGVyaW9kID0gMDsKK21vZHVsZV9wYXJh bV9uYW1lZCh1bmNsZWFuX2V4aXRfZ3JhY2VfcGVyaW9kLCB1bmNsZWFuX2V4aXRfZ3JhY2VfcGVy aW9kLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSIHwgU19JV0dSUCk7CisKK3N0YXRpYyBERUZJTkVf TVVURVgoaW9jdGxfbG9jayk7CitzdGF0aWMgc3RydWN0IHdha2VfbG9jayB1bmNsZWFuX2V4aXRf d2FrZV9sb2NrOworCitzdHJ1Y3QgdXNlcl93YWtlX2xvY2sgeworCXN0cnVjdCB3YWtlX2xvY2sJ d2FrZV9sb2NrOworCWNoYXIJCQluYW1lWzBdOworfTsKKworc3RhdGljIGludCBjcmVhdGVfdXNl cl93YWtlX2xvY2soc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgX191c2VyICpuYW1lLAorCQkJCSBz aXplX3QgbmFtZV9sZW4pCit7CisJc3RydWN0IHVzZXJfd2FrZV9sb2NrICpsOworCWlmIChmaWxl LT5wcml2YXRlX2RhdGEpCisJCXJldHVybiAtRUJVU1k7CisJbCA9IGt6YWxsb2Moc2l6ZW9mKCps KSArIG5hbWVfbGVuICsgMSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFsKQorCQlyZXR1cm4gLUVOT01F TTsKKwlpZiAoY29weV9mcm9tX3VzZXIobC0+bmFtZSwgbmFtZSwgbmFtZV9sZW4pKQorCQlnb3Rv IGVycl9mYXVsdDsKKwl3YWtlX2xvY2tfaW5pdCgmbC0+d2FrZV9sb2NrLCBXQUtFX0xPQ0tfU1VT UEVORCwgbC0+bmFtZSk7CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gbDsKKwlyZXR1cm4gMDsKKwor ZXJyX2ZhdWx0OgorCWtmcmVlKGwpOworCXJldHVybiAtRUZBVUxUOworfQorCitzdGF0aWMgbG9u ZyB1c2VyX3dha2Vsb2NrX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21k LAorCQkJCXVuc2lnbmVkIGxvbmcgX2FyZykKK3sKKwl2b2lkIF9fdXNlciAqYXJnID0gKHZvaWQg X191c2VyICopX2FyZzsKKwlzdHJ1Y3QgdXNlcl93YWtlX2xvY2sgKmw7CisJc3RydWN0IHRpbWVz cGVjIHRzOworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKwlsb25nIHJldDsKKworCW11dGV4X2xv Y2soJmlvY3RsX2xvY2spOworCWlmICgoY21kICYgfklPQ1NJWkVfTUFTSykgPT0gV0FLRUxPQ0tf SU9DVExfSU5JVCgwKSkgeworCQlyZXQgPSBjcmVhdGVfdXNlcl93YWtlX2xvY2soZmlsZSwgYXJn LCBfSU9DX1NJWkUoY21kKSk7CisJCWdvdG8gZG9uZTsKKwl9CisJbCA9IGZpbGUtPnByaXZhdGVf ZGF0YTsKKwlpZiAoIWwpIHsKKwkJcmV0ID0gLUVOT0VOVDsKKwkJZ290byBkb25lOworCX0KKwlz d2l0Y2ggKGNtZCkgeworCWNhc2UgV0FLRUxPQ0tfSU9DVExfTE9DSzoKKwkJd2FrZV9sb2NrKCZs LT53YWtlX2xvY2spOworCQlyZXQgPSAwOworCQlicmVhazsKKwljYXNlIFdBS0VMT0NLX0lPQ1RM X0xPQ0tfVElNRU9VVDoKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZ0cywgYXJnLCBzaXplb2YodHMp KSkgeworCQkJcmV0ID0gLUVGQVVMVDsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCQl0aW1lb3V0ICA9 IHRpbWVzcGVjX3RvX2ppZmZpZXMoJnRzKTsKKwkJd2FrZV9sb2NrX3RpbWVvdXQoJmwtPndha2Vf bG9jaywgdGltZW91dCk7CisJCXJldCA9IDA7CisJCWJyZWFrOworCWNhc2UgV0FLRUxPQ0tfSU9D VExfVU5MT0NLOgorCQl3YWtlX3VubG9jaygmbC0+d2FrZV9sb2NrKTsKKwkJcmV0ID0gMDsKKwkJ YnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVOT1RTVVBQOworCX0KK2RvbmU6CisJaWYgKHJl dCAmJiBkZWJ1Z19tYXNrICYgREVCVUdfRkFJTFVSRSkKKwkJcHJfZXJyKCJ1c2VyX3dha2Vsb2Nr X2lvY3RsOiBjbWQgJXggZmFpbGVkLCAlbGRcbiIsIGNtZCwgcmV0KTsKKwltdXRleF91bmxvY2so JmlvY3RsX2xvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdXNlcl93YWtlbG9j a19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0 cnVjdCB1c2VyX3dha2VfbG9jayAqbCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlpZiAoIWwpCisJ CXJldHVybiAwOworCWlmICh3YWtlX2xvY2tfYWN0aXZlKCZsLT53YWtlX2xvY2spICYmIHVuY2xl YW5fZXhpdF9ncmFjZV9wZXJpb2QpCisJCXdha2VfbG9ja190aW1lb3V0KCZ1bmNsZWFuX2V4aXRf d2FrZV9sb2NrLAorCQkJCSAgdW5jbGVhbl9leGl0X2dyYWNlX3BlcmlvZCAqIEhaKTsKKwl3YWtl X2xvY2tfZGVzdHJveSgmbC0+d2FrZV9sb2NrKTsKKwlrZnJlZShsKTsKKwlyZXR1cm4gMDsKK30K KworY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1c2VyX3dha2Vsb2NrX2ZvcHMgPSB7CisJ LnJlbGVhc2UgPSB1c2VyX3dha2Vsb2NrX3JlbGVhc2UsCisJLnVubG9ja2VkX2lvY3RsID0gdXNl cl93YWtlbG9ja19pb2N0bCwKK307CisKK3N0cnVjdCBtaXNjZGV2aWNlIHVzZXJfd2FrZWxvY2tf ZGV2aWNlID0geworCS5taW5vciA9IE1JU0NfRFlOQU1JQ19NSU5PUiwKKwkubmFtZSA9ICJ3YWtl bG9jayIsCisJLmZvcHMgPSAmdXNlcl93YWtlbG9ja19mb3BzLAorfTsKKworc3RhdGljIGludCBf X2luaXQgdXNlcl93YWtlbG9ja19pbml0KHZvaWQpCit7CisJd2FrZV9sb2NrX2luaXQoJnVuY2xl YW5fZXhpdF93YWtlX2xvY2ssIFdBS0VfTE9DS19TVVNQRU5ELAorCQkgICAgICAgInVzZXItdW5j bGVhbi1leGl0Iik7CisJcmV0dXJuIG1pc2NfcmVnaXN0ZXIoJnVzZXJfd2FrZWxvY2tfZGV2aWNl KTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHVzZXJfd2FrZWxvY2tfZXhpdCh2b2lkKQorewor CW1pc2NfZGVyZWdpc3RlcigmdXNlcl93YWtlbG9ja19kZXZpY2UpOworCXdha2VfbG9ja19kZXN0 cm95KCZ1bmNsZWFuX2V4aXRfd2FrZV9sb2NrKTsKK30KKworbW9kdWxlX2luaXQodXNlcl93YWtl bG9ja19pbml0KTsKK21vZHVsZV9leGl0KHVzZXJfd2FrZWxvY2tfZXhpdCk7Ci0tIAoxLjYuMQoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtcG0g bWFpbGluZyBsaXN0CmxpbnV4LXBtQGxpc3RzLmxpbnV4LWZvdW5kYXRpb24ub3JnCmh0dHBzOi8v bGlzdHMubGludXgtZm91bmRhdGlvbi5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1wbQ==