From mboxrd@z Thu Jan 1 00:00:00 1970 Message-ID: <5188F546.5090001@gmail.com> Date: Tue, 07 May 2013 08:36:22 -0400 From: Sebastian Pavez MIME-Version: 1.0 References: <5187F3AA.6040801@xenomai.org> <51880134.1000208@gmail.com> <5188059C.9030106@xenomai.org> <51881CC0.5060300@gmail.com> <5188E58D.7070304@xenomai.org> In-Reply-To: <5188E58D.7070304@xenomai.org> Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Subject: Re: [Xenomai] Doubts about priorities with periodic tasks (Posix Skin) List-Id: Discussions about the Xenomai project List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Gilles Chanteperdrix Cc: Xenomai SGkgR2lsbGVzLAoKU29ycnkgZm9yIHRoZSBtZXNzIDotKSBJIGhvcGUgdGhpcyBpcyBtb3JlIGNs ZWFyOgoKPiBIaSBHaWxsZXMsCj4KPiBUaGFua3MgZm9yIHlvdXIgYW5zd2VyLiBBYm91dCB0aGUg ZXhlY3V0aW9uIHRpbWUgaXNzdWUgSSdsbCBleHBsYWluIGJldHRlcjoKPiAtIEhvdyBJIHNlZSB0 aGUgY29kZSB3b3JrczoKPiAgICAgICAtIEkgc2V0IHRoZSBwZXJpb2Qgb2YgZWFjaCB0aHJlYWQg J2NvbnRyb2wnIGFuZCAncGVydDEnCj4gICAgICAgLSBBZnRlciB0aGUgaW5pdGlhbGl6YXRpb24g b2YgdmFyaWFibGVzIGFuZCBEQVEgY2FyZCB0aGUgY29kZQo+IGluc2lkZSAnd2hpbGUoMSknIGlz IGV4ZWN1dGVkIHBlcmlvZGljYWxseQo+ICAgICAgIC0gSSBkZXRlcm1pbmVkIHRoZSB0aW1lIHRh a2UgaXQgYnkgdGhpcyAnd2hpbGUoMSknIHZpYSBkaXJlY3QKPiBtZWFzdXJlIChhY3RpdmF0aW5n IGEgc2lnbmFsIGJlZm9yZSB0aGUgY29kZSBhbmQgZGlzYmxpbmcgaXQgYWZ0ZXIsIGFuZAo+IG1l YXN1cmluZyB0aGUgd2lkdGggb2YgdGhlICdwdWxzZScpCj4gICAgICAgLSBJIGdldCBzb21ldGhp bmcgbGlrZSAxOHVzIGZvciB0aGUgY29udHJvbCB0aHJlYWQuIFNvIEluIHRoZSBwZXJ0MQo+IHRo cmVhZCBJIHVzZSBhICdmb3InIGxvb3AgaW5zaWRlIHRoZSB3aGlsZSgxKSwgd2hlbiBJIGluY3Jl bWVudCB0aGUKPiBpbnRlcmF0aW9ucyBudW1iZXIgSSBnZXQgYSBoaWdoZXIgZXhlY3V0aW9uIHRp bWUKPiAtIFdoYXQgSSdtIHRyeWluZyB0byB0ZXN0Ogo+ICAgICAgIC0gRm9yIHRoZSBzYW1lIHBl cmlvZCBmb3IgYm90aCB0YXNrcyBhbmQgdGhlIGhpZ2hlciBwcmlvcml0eSBmb3IKPiB0aGUgcGVy dDEgdGhyZWFkIEkgaW5jcmVtZW50ZSB0aGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgaW5zaWRlIHRo ZSBmb3IgbG9vcAo+ICAgICAgIC0gSSBleHBlY3QsIHdpdGggYSBleGVjdXRpb24gdGltZSBvZiBw ZXJ0MSBvdmVyIDM1dXMsIHRvIHNlZSBhCj4gbWFsZnVuY3Rpb25pbmcgaW4gdGhlIERDIG1vdG9y IGZvbGxvd2luZyB0aGUgcmVmZXJlbmNlICh2aWEgc29tZSBzaWduYWxzCj4gSSBnZXQgaW4gdGhl IG9zY2lsbG8pIGJlY2F1c2UgdGhlIGNvbnRyb2wgd2lsbCBub3QgaGF2ZQo+ICAgICAgICAgZW5v dWdoIHRpbWUgdG8gYmUgZXhlY3V0ZWQgcHJvcGVybHkgYmVmb3JlIHRoZSBuZXh0IHBlcmlvZCBp bgo+IHdpY2ggdGhlIHBlcnQxIHRocmVhZCB3aWxsIHJlc3VtZSBoaXMgZXhlY3V0aW9uIC4uLiAo aXMgdGhpcyBjb3JyZWN0PykKPiAgICAgICAtIEFsbCB0aGlzIGlzIGRvbmUgdG8gY29uZmlybSB0 aGUgcmVzdWx0cyBvYnRhaW5lZCBpbiBzaW11bGF0aW9uCj4KPiBOb3csIHdoYXQgSSdtIGRvaW5n ICh0aGUgc3RydWN0dXJlIG9mIG15IGNvZGUpIGlzIGluIG9yZGVyIHdpdGggdGhlCj4gcmVzdWx0 cyBJIHdvdWxkIGxpa2UgdG8gdGVzdD8gb3IgSSdtIG1pc2ludGVycHJldGluZyBzb21ldGhpbmcu IEkgd291bGQKPiBsaWtlIHRvIGNsYXJpZnkgdGhpcyBpbiBvcmRlciB0byBrbm93IGlmIHRoZSBw cm9ibGVtcyBhcmUgYWJvdXQgdGhlCj4gdGhlb3J5IG9yIHRoZSBpbXBsZW1lbnRhdGlvbiAuLi4g b3IsIHNhZGx5LCBib3RoLgo+PiBJIGRvIG5vdCBzZWUgYWxsIHRoaXMgaW4gdGhlIGNvZGUgeW91 IHNlbnQgdG8gdGhlIGxpc3QsIHdoYXQgSSBzZWUgaXMKPj4gdHdvIHRocmVhZHMgd2hpY2ggc2xl ZXAgb24gcHRocmVhZF93YWl0X25wIGFuZCBkbyBub3RoaW5nIGVsc2UuIFNvLAo+PiBleGVjdXRp b24gdGltZSB2aXJ0dWFsbHkgMC4gWW91IGNhbiB1c2UgcnRfdGltZXJfc3BpbiB0byBzaW11bGF0 ZSBzb21lCj4+IGxvYWQuIFNvbWUgcG9pbnQgeW91IG1heSBoYXZlIG1pc3NlZCB0b28sIGlzIHRo YXQgWGVub21haSB0aW1lciBydW5zIGluCj4+IG9uZS1zaG90IG1vZGUgYnkgZGVmYXVsdCwgd2hp Y2ggbWVhbnMgdGhlIHRocmVhZCBwZXJpb2RzIHdpbGwgbm90IGVsYXBzZQo+PiBhdCB0aGUgc2Ft ZSB0aW1lLCBleGNlcHQgaWYgeW91IHN5bmNocm9uaXplIHRoZW0gYnkgdXNpbmcgdGhlIGZpcnN0 Cj4+IGFyZ3VtZW50IG9mIHB0aHJlYWRfbWFrZV9wZXJpb2RpY19ucC4KPgpTb3JyeSBmb3IgdGhh dCwgSSBub3cgYXR0YWNoZWQgdGhlIGNvZGUgLi4uIEl0J3MgcXVpdGUgcmF3IGF0IHRoZSBtb21l bnQgCmJ1dCBpdCBkb2VzIHdoYXQgaXMgc3VwcG9zZSB0bywgY29udHJvbCB0aGUgREMgbW90b3Iu ClJlZ2FyZGluZyB0aGUgZmlyc3QgYXJndW1lbnQgb2YgcHRocmVhZF9tYWtlX3BlcmlvZGljX25w LCBJIHVzZSAKcHRocmVhZF9zZWxmKCkgdG8gYXNzaWduIHRvIHRoZSBjYWxsaW5nIHRocmVhZCwg d2h0IGRvIHlvdSBwcmVjaXNlbHkgCm1lYW4gd2l0aCAidXNpbmcgdGhlIGZpcnN0CmFyZ3VtZW50 IG9mIHB0aHJlYWRfbWFrZV9wZXJpb2RpY19ucCI/Cgo+PiBJbiBnZW5lcmFsLCBob3dldmVyLCBh IFhlbm9tYWkgc3lzdGVtIHdoZXJlIGEgcmVhbC10aW1lIHRhc2sgY29uc3VtZXMgYQo+PiBsb3Qg b2YgY3B1IGRvZXMgdGVuZCB0byBjcmFzaCwgaXQgaXMgcmVjb21tZW5kZWQgdG8gbGV0IGxpbnV4 IHJ1biAoYnkKPj4gaGF2aW5nIGFsbCB5b3VyIHJlYWwtdGltZSB0YXNrcyBzdXNwZW5kZWQgYXQg c29tZSBwb2ludCkgZnJvbSB0aW1lIHRvCj4+IHRpbWUuIEEgc2FmZSBzb2x1dGlvbiBpcyB0byBs ZXQgaXQgcnVuIGF0IGxlYXN0IGZvciBpdHMgdGltZXIgdGljaywgc28KPj4gZXZlcnkgbWlsbGlz ZWNvbmQsIDQgbWlsbGlzZWNvbmRzLCBvciAxMCBtaWxsaXNlY29uZHMgZGVwZW5kaW5nIG9uCj4+ IENPTkZJR19IWiB2YWx1ZS4KPj4KPj4gSG93IGNvdWxkIEkgZG8gdGhpcz8KPiBBcnJhbmdlIGZv ciBldmVyeSB0aHJlYWQgdG8gbm90IHJ1biBtb3JlIHRoYW4gdGhlIHRpbWUgb2YgdGhlIHBlcmlv ZAo+IGNvcnJlc3BvbmRpbmcgdG8gQ09ORklHX0haLgo+CgpUaGlzIG1lYW4sIGRvbid0IHNldCBh IHBlcmlvZCBtb3JlIHRoYW4gNG1zIGZvciBlYWNoIHRocmVhZD8gKEkgaGF2ZSBhIApjb25maWd1 cmF0aW9uIG9mIDI1MGh6KQpJIHRyaWVkIHRvIHN0YXJ0IGluIHRleHQgbW9kZSBieSBjaGFuZ2lu ZyAicXVpdGUgc3BsYXNoIiB0byAicXVpdGUgCnNwbGFzaCB0ZXh0IiBpbiB0aGUgZ3J1YiAuLi4g SSBvbmx5IGdldCBhIGJsYWNrIHNjcmVlbiBhdCB0aGUgc3RhcnQuCgpPbmUgbW9yZSBxdWVzdGlv biwgdGhlIHJlc3VsdHMgSSBnZXQgd2l0aCAnY2F0IC9wcm9jL3hlbm9tYWkvc3RhdCcgYW5kIAon Y2F0IC9wcm9jL3hlbm9tYWkvc2NoZWQnIHByb3ZlIHRoYXQgdGhlIHRocmVhZHMgYXJlIGJlaW5n IGV4ZWN1dGVkIGluIGEgCnJlbC10aW1lIG1vZGU/Cm9yIHRoZXJlJ3Mgc29tZXRoaW5nICJ3ZWly ZCIgYWJvdXQgdGhlbT8gb3IgVGhhdCdzIG5vdCBlbm91Z2ggaW5mbz8KCkJlc3QgcmVnYXJkcywK U2ViYS4gUC4KCgoKCi0tLS0tLS0tLS0tLS0tIG5leHQgcGFydCAtLS0tLS0tLS0tLS0tLQojaW5j bHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHNpZ25hbC5oPgojaW5jbHVkZSA8dW5pc3RkLmg+CiNp bmNsdWRlIDxzeXMvbW1hbi5oPgojaW5jbHVkZSA8c3lzL2lvLmg+CiNpbmNsdWRlIDxtYXRoLmg+ CiNpbmNsdWRlIDx0aW1lLmg+CiNpbmNsdWRlIDxzY2hlZC5oPgoKLy8gTGxhbWFkYSBhbCBhcmNo aXZvIGRlIGNhYmVjZXJhIGRlIGxvcyB0aHJlYWRzIGRlIFBPU0lYCiNpbmNsdWRlIDxwdGhyZWFk Lmg+CgovLyBMbGFtYWRhIGFsIGFyY2hpdm8gZGUgY2FiZWNlcmEgcXVlIGNvbnRpZW5lIGxvcyBy ZWdpc3Ryb3MgZGUgbGEgdGFyamV0YQojaW5jbHVkZSAiUkVHX1BDSTE3MTEuaCIKCi8vIERlZmlu aWNpw4PCs24gZGUgbGEgZGlyZWNjacODwrNuIGJhc2UgZGUgbGEgdGFyamV0YSBQQ0ktMTcxMVUK I2RlZmluZSBQQ0lfQkFTRV9BRFJFU1NfMTcxMSAweGMwMDAKCi8vIFNlIGRlZmluZW4gbG9zIHBl cmlvZG9zIHBhcmEgbGFzIGRvcyB0YXJlYXMgICAgICAgICAgICAgCiAjZGVmaW5lIFBFUklPRCAg NTAwMDAgICAgICAgICAgICAvLzEwMDAwMDAgIAogI2RlZmluZSBQRVJJT0QyIDUwMDAwCgovLyBF c3RydWN0dXJhIGRlIGRhdG9zIG5lY2VzYXJpYXMgcGFyYSBsYSBjcmVhY2nDg8KzbiBkZSBsb3Mg dGhyZWFkcwpwdGhyZWFkX3QgdGhyZWFkX2NvbnRyb2w7CnB0aHJlYWRfdCB0aHJlYWRfcGVydDE7 CgovLyBFc3RydWN0dXJhIGRlIGRhdG9zIG5lY2VzYXJpYXMgcGFyYSBsYSBhc2lnbmFjacODwrNu IGRlIHByaW9yaWRhZGVzCnN0cnVjdCBzY2hlZF9wYXJhbSBwX2NvbnRyb2w7CnN0cnVjdCBzY2hl ZF9wYXJhbSBwX3BlcnQxOwoKdm9pZCAqIGNvbnRyb2wodm9pZCAqYXJnKXsKdW5zaWduZWQgaW50 IHZhbG9yLGRhdG9zLHksZCxiZXRhLE4scmU7CnVuc2lnbmVkIGxvbmcgb3ZlcnJ1bnNfcjsKaW50 IG91dCxpbixvLG91dHBvczsgICAgICAgICAgICAgICAgICAgICAgIC8vIFZhcmlhYmxlcyBwYXJh IGVsIGNvbnRyb2wKZG91YmxlIHQsdyxncmFkb3MsZyxtOwpmbG9hdCByZWYsVnRhY28sVnBvdCxl cnIsY3RyLGN0cnBvczsKZmxvYXQgZXJyMD0wLjA7CmZsb2F0IFZ0YWNvMD0wLjA7CmZsb2F0IFZw b3QwPTAuMDsKZmxvYXQgcmVmMD0wLjA7CmZsb2F0IGE9MC4wNzM3OwkJICAgICAgICAgICAgLy8g Q29uc3RhbnRlcyBkZWwgUEkgcGFyYSB2ZWxvY2lkYWQgYT1LcCAgOyAgYj10aQpmbG9hdCBiPTAu MDQ4NzsKaW50IHBvc2ljaW9uID0gMDsgICAgICAgICAgICAgICAgICAgLy8gU2VsZWNjacODwrNu IGRlIGNvbnRyb2wsIDEgPSBwb3NpY2nDg8KzbiA7IDAgPSB2ZWxvY2lkYWQKZG91YmxlIHJlZmVy ZW5jaWE9MjAuMjsgICAgICAgICAgICAvLyBSZWZlcmVuY2lhIGNvbnRyb2wgZGUgcG9zaWNpb24g ZW4gZ3JhZG8KZmxvYXQgeCxyLGdyZWY7CmZsb2F0IGg7CmZsb2F0IFAsSSxELCBQcG9zLCBEcG9z OwpmbG9hdCBrcD0yLjg4OyAgICAgLy8gMi44OCAgICAgICAgICAgICAgICAgICAgLy8gQ29uc3Rh bnRlcyBkZWwgUEQgcGFyYSBwb3NpY2lvbgpmbG9hdCB0ZD0wLjAyNDsgICAvLyAwLjAyNApmbG9h dCBEb2xkPTAuMDsKZmxvYXQgRG9sZHBvcz0wLjA7CmZsb2F0IElvbGQ9MC4wOwoKLy8gRXN0cnVj dHVyYSBwYXJhIGVsIG1hbmVqbyB0ZW1wb3JhbApzdHJ1Y3QgdGltZXNwZWMgbm93LHBlcmlvZDsK aW50IGR1bW15Owp3PTEuODsgLy8gMnJhZC9zCgovLyBTZSBzZXRlYW4gbG9zIHZhbG9yZXMgcGFy YSBsbGV2YXIgdW4gY29udGVvIGRlbCB0aWVtcG8gdHJhbnNjdXJyaWRvCi8vIEVzdG8gc2UgaGFj ZSBzZWfDg8K6biBlbCByZWxvaiBDTE9DS19SRUFMVElNRSAKCiAgICAgICBwZXJpb2QudHZfc2Vj PTA7CiAgICAgICBwZXJpb2QudHZfbnNlYz1QRVJJT0Q7CgogICAgICAgY2xvY2tfZ2V0dGltZSAg CSggQ0xPQ0tfUkVBTFRJTUUsICZub3cpOwogICAgICAgbm93LnR2X25zZWM9bm93LnR2X25zZWMr UEVSSU9EOwoKLy8gU2UgbWFyY2EgZWwgdGhyZWFkIGNvbW8gdW5vIHBlcmlvZGljbyB5IHNlIHZl cmlmaWNhIHNpIG5vIHNlIHByb2R1Y2UgYWxndW4gZXJyb3IKICAgICAgIGR1bW15PXB0aHJlYWRf bWFrZV9wZXJpb2RpY19ucCAocHRocmVhZF9zZWxmKCksICZub3csJnBlcmlvZCk7CiAgICAgICBz d2l0Y2goZHVtbXkpewogICAgICAgICBjYXNlIDAgOiAKCSAgICAgIGJyZWFrOwogICAgICAgICBj YXNlIEVTUkNIOiAKCQlwcmludGYoInRocmVhZCBpcyBpbnZhbGlkIFxuIik7IAoJCXB0aHJlYWRf ZXhpdCAoKHZvaWQgKiktMSk7ICAKCSAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEVUSU1FRE9V VCA6IAoJCXByaW50ZigidGhlIHN0YXJ0IHRpbWUgaGFzIGFscmVhZHkgcGFzc2VkXG4iKTsgCgkJ cHRocmVhZF9leGl0ICgodm9pZCAqKS0xKTsgCgkgICAgICBicmVhazsKICAgICAgICAgZGVmYXVs dCA6IAoJCXByaW50ZigiIG91dHB1dCB2YWx1ZSBub3QgZGVmaW5lZCBcbiIpOyAKCSAgICAgICAg cHRocmVhZF9leGl0ICgodm9pZCAqKS0xKTsgCgl9CiAKLy8gU2UgZmlqYSBsYSByZWZlcmVuY2lh IGludGVybmEgZGUgbGEgdGFyamV0YSBwYXJhIGxhIHNhbGlkYSBhbsODwqFsb2dhIDAgeSAxIGVu IDEwW1ZdCiAgIG91dHcoNSxQQ0lfQkFTRV9BRFJFU1NfMTcxMSArIFBDSTE3MXhfREFSRUYpOyAK Ci8vIFNlIHNlbGVjY2lvbmEgZWwgbW9kbyBkZWwgZnVuY2lvbmFtaWVudG8gZGUgbGEgdGFyamV0 YSB5IHNlIGxpbXBpYSBsYQovLyBpbmZvcm1hY2nDg8KzbiBxdWUgcHVlZGEgcXVlZGFyIGVuIGVs IGJ1ZmZlci4gU2UgaW5pY2lhbGl6YSBlbCBjb252ZXJzb3IgQS9ECiAgIG91dHcoQ29udHJvbF9D TlQwfENvbnRyb2xfU1csIFBDSV9CQVNFX0FEUkVTU18xNzExK1BDSTE3MXhfQ09OVFJPTCk7CiAg IG91dGIoMCwgUENJX0JBU0VfQURSRVNTXzE3MTErUENJMTcxeF9DTFJGSUZPKTsKICAgb3V0Yigw LCBQQ0lfQkFTRV9BRFJFU1NfMTcxMStQQ0kxNzF4X0NMUklOVCk7CgogICBvdXR3KDEsIFBDSV9C QVNFX0FEUkVTU18xNzExK1BDSTE3MXhfQ09OVFJPTCk7CiAgIG91dGIoMCwgUENJX0JBU0VfQURS RVNTXzE3MTErUENJMTcxeF9DTFJGSUZPKTsKICAgb3V0YigwLCBQQ0lfQkFTRV9BRFJFU1NfMTcx MStQQ0kxNzF4X0NMUklOVCk7CgovLyBTZSBzZWxlY2Npb25hIGxhIGdhbmFuY2lhIGRlbCBhbXBs aWZpY2Fkb3IsIGFzw4PCrSBjb21vIGVsIGNhbmFsIGRlIGVudHJhZGEsIEFJMAogICBvdXR3KDAs IFBDSV9CQVNFX0FEUkVTU18xNzExK1BDSTE3MXhfUkFOR0UpOwoKCndoaWxlKDEpIHsKCmlmKHBv c2ljaW9uID09IDEpeyAvLyBDb250cm9sIGRlIHBvc2ljaW9uLCBsZWN0dXJhIGRlc2RlIGxhIGVu dHJhZGEgQUkxCiAgIG91dGIoMSwgUENJX0JBU0VfQURSRVNTXzE3MTErUENJMTcxeF9NVVhfc3Rh KTsgIC8vIEVtcGV6YXIgZW4gZWwgY2FuYWwgQUkwCiAgIG91dGIoMSwgUENJX0JBU0VfQURSRVNT XzE3MTErUENJMTcxeF9NVVhfc3RvKTsgIC8vIFRlcm1pbmFyIGVuIGVsIGNhbmFsIEFJMCAgIAoJ CQoKCQljbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FLCZub3cpOyAgICAgLy8gVmFyaWFjaW9u IGRlIGxhIHJlZmVyZW5jaWEgZW4gZWwgdGllbXBvCgkJdD0oZG91YmxlKW5vdy50dl9uc2VjKjEu MEUtOSsoZG91YmxlKW5vdy50dl9zZWM7CgkJcj0oZG91YmxlKTIrKGRvdWJsZSkyKnNpbiggdyp0 KTsJCQogICAgICAgICAgICAgICAgaWYocjwyKXsKCQlncmFkb3M9cmVmZXJlbmNpYTsKCQl9CgkJ aWYocj4yKXsKCQlncmFkb3M9cmVmZXJlbmNpYSsxOC4wOTsKCQl9CgovLyBDb252ZXJzaW9uIGRl IGdyYWRvcyBlbiB0ZW5zaW9uCmlmKCgwPD1ncmFkb3MpJiYoZ3JhZG9zPDE2MCkpewogZ3JlZj1n cmFkb3MqMC4wNTUzLTAuMTI1NTsKLy8gcHJpbnRmKCJ4OiAlZltWXSAgIiwgeCk7Cn0KaWYoKDIx NTxncmFkb3MpJiYoZ3JhZG9zPDM2MCkpewpncmVmPWdyYWRvcyowLjA1NTUtMjAuMTYxOwp9Cgov LyBab25hIG11ZXJ0YSBkZWwgcG90ZW5jaW9tZXRybwppZigoMTYwPD1ncmFkb3MpJiYoZ3JhZG9z PD0yMTUpKXsKZ3JlZj0tMC4xMjU1Owp9CgovLyBDb252ZXJzaW9uIGRlIGxhIHRlbnNpb24gcGFy YSBsYSBzYWxpZGEgZGUgbGEgdGFyamV0YSBjb25zaWRlcmFuZG8gbGEgZXRhcGEgZGUgYWRhcHRh Y2lvbiBkZSBuaXZlbGVzCmlmKCgtMTA8PWdyZWYpJiYoZ3JlZjwwKSl7CmluPShncmVmKzEwKS8w LjAwNDg4Owp9CmlmKCgwPD1ncmVmKSYmKGdyZWY8PTEwKSl7CmluPWdyZWYvMC4wMDI0NDsKfQoK Ly8gTGltaXRhY2lvbiBkZWwgdmFsb3IgZGUgbGEgc2FsaWRhCmlmKGluPDApewppbj0wOwp9ZWxz ZSBpZihpbj40MDk1KXsKaW49NDA5NTsKfQoKLy8gU2Ugc2FjYSBsYSBzZcODwrFhbCBkZSByZWZl cmVuY2lhIHBvciBsYSBzYWxpZGEgREEwCm91dHcoaW4sUENJX0JBU0VfQURSRVNTXzE3MTEgKyBQ Q0kxNzF4X0RBMCk7CgovLyBMZWN0dXJhIGRlIGxhIHNhbGlkYQogICAgdmFsb3I9MTsgICAgICAg IAoKLy9Db21lbnphciBlbCBwcm9jZXNvIGRlIGNvbnZlcnNpw4PCs24KICAgIG91dHcoMCwgUENJ X0JBU0VfQURSRVNTXzE3MTErUENJMTcxeF9TT0ZUVFJHKTsKCiAgICB3aGlsZSAodmFsb3IpIHsK Ly8gVmVyaWZpY2FyIHNpIGxhIGNvbnZlcnNpw4PCs24gaGEgZmluYWxpemFkbwogICAgdmFsb3I9 KGluYihQQ0lfQkFTRV9BRFJFU1NfMTcxMStQQ0kxNzF4X1NUQVRVUykgJiBTdGF0dXNfRkUpOwoJ ICAgICAgICB9Ci8vIExlZXIgbG9zIGRhdG9zCiAgICBkYXRvcz1pbncoUENJX0JBU0VfQURSRVNT XzE3MTErUENJMTcxeF9BRF9EQVRBKTsgLy8gT2J0ZW5lciBkYXRvcyBkZSBsYSBjb2xhCiAgICBk PWRhdG9zJjB4MGZmZjsKCi8vIFRyYW5zZm9ybWFjaW9uIGVuIHRlbnNpb24gZGUgbGEgbGVjdHVy YQpWcG90PWQqMC4wMDI0NDI7ClZwb3Q9KFZwb3QtNSkqMjsKCi8vIENPbnZlcnNpb24gZGUgbGEg dGVuc2lvbiBlbiBncmFkb3MKaWYoKC0wLjEyNTU8PVZwb3QpJiYoVnBvdDw4LjY4KSl7Cmc9KFZ0 YWNvKzAuMTI1NSkvMC4wNTUzOwp9CmlmKCgtOC4yNTxWcG90KSYmKFZwb3Q8LTAuMTI1NSkpewpn PShWcG90KzIwLjE2MSkvMC4wNTU1Owp9CgovLyBBbGdvcml0bW8gZGVsIFBEIHBhcmEgY29udHJv bCBkZSBwb3NpY2nDg8KzbgpiZXRhPTE7Ck49MTA7Cmg9UEVSSU9EKjAuMDAwMDAwMDAxOwpQcG9z PWtwKihiZXRhKmdyZWYtVnBvdCk7CkRwb3M9dGQvKE4qaCt0ZCkqRG9sZCArIE4qa3AqdGQvKE4q aCt0ZCkqKFZwb3QwLVZwb3QpOwpjdHJwb3MgPSBQcG9zICsgRHBvczsKRG9sZHBvcyA9IERwb3M7 ClZwb3QwID0gVnBvdDsKCi8vIExpbWl0YWNpb24gZW4gdGVuc2lvbiBkZSBsYSBzZcODwrFhbCBk ZSBjb250cm9sCmlmKGN0cnBvcz4xMCl7CmN0cnBvcz0xMDsKfQppZihjdHJwb3M8LTEwKXsKY3Ry cG9zPS0xMDsKfQoKLy8gQ29udmVyc2lvbiBkZSBsYSBzZcODwrFhbCBkZSBjb250cm9sIHBhcmEg c2VyIGVzY3JpdGEgZW4gbGEgdGFyamV0YQppZigoLTEwPD1jdHJwb3MpJiYoY3RycG9zPDApKXsK b3V0cG9zPShjdHJwb3MrMTApLzAuMDA0ODg7Cn0KaWYoKDA8PWN0cnBvcykmJihjdHJwb3M8PTEw KSl7Cm91dHBvcz1jdHJwb3MvMC4wMDQ4OCsyMDQ2Owp9CgovLyBMaW1pdGFjaW9uIGRlIGxhIHNh bGlkYQppZihvdXRwb3M8MCl7Cm91dHBvcz0wOwp9ZWxzZSBpZihvdXRwb3M+NDA5NSl7Cm91dHBv cz00MDk1Owp9CgovLyBTZSBzYWNhIGxhIHNlw4PCsWFsIGRlIGNvbnRyb2wgcG9yIGxhIHNhbGlk YSBhbmFsb2dhIERBMSB5IHNlIGFwbGljYSBhbCBwdWVudGUgSCBkZWwgbW90b3IKb3V0dyhvdXRw b3MsUENJX0JBU0VfQURSRVNTXzE3MTEgKyBQQ0kxNzF4X0RBMSk7CgoKfWVsc2UgaWYocG9zaWNp b24gPT0gMCl7IC8vIENvbnRyb2wgZGUgdmVsb2NpZGFkLCBsZWN0dXJhIGRlc2RlIGxhIGVudHJh ZGEgQUkwCiAgIG91dGIoMCwgUENJX0JBU0VfQURSRVNTXzE3MTErUENJMTcxeF9NVVhfc3RhKTsg IC8vIEVtcGV6YXIgZW4gZWwgY2FuYWwgQUkwCiAgIG91dGIoMCwgUENJX0JBU0VfQURSRVNTXzE3 MTErUENJMTcxeF9NVVhfc3RvKTsgIC8vIFRlcm1pbmFyIGVuIGVsIGNhbmFsIEFJMCAgCgoJCWNs b2NrX2dldHRpbWUoQ0xPQ0tfUkVBTFRJTUUsJm5vdyk7ICAgICAvLyBWYXJpYWNpb24gZGUgbGEg cmVmZXJlbmNpYSBlbiBlbCB0aWVtcG8KCQl0PShkb3VibGUpbm93LnR2X25zZWMqMS4wRS05Kyhk b3VibGUpbm93LnR2X3NlYzsKCQl4PShkb3VibGUpMisoZG91YmxlKTIqc2luKCB3KnQpOwoJCWlm KHg8Mil7CgkJeD0wLjU7CgkJfQoJCWlmKHg+Mil7CgkJeD0xLjU7CgkJfQoJCWlmKCgwPD14KSYm KHg8PTEwKSl7ICAvLyBDb252ZXJzaW9uIGRlIGxhIHRlbnNpb24gZW4gdmFsb3JlcyBkZSBsYSB0 YXJqZXRhCiAgICAgICAgICAgICAgICBpbj14LzAuMDAyNDQ7CiAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgICAgICBvdXR3KGluLFBDSV9CQVNFX0FEUkVTU18xNzExICsgUENJMTcxeF9EQTAp OyAvLyBTZSBzYWNhIGxhIHJlZmVyZW5jaWEgcG9yIGVsIGNhbmFsIERBMAoKLy8gTGVjdHVyYSBk ZSBsYSBzYWxpZGEKICAgIHZhbG9yPTE7ICAgICAgICAKCi8vQ29tZW56YXIgZWwgcHJvY2VzbyBk ZSBjb252ZXJzacODwrNuCiAgICBvdXR3KDAsIFBDSV9CQVNFX0FEUkVTU18xNzExK1BDSTE3MXhf U09GVFRSRyk7CgogICAgd2hpbGUgKHZhbG9yKSB7Ci8vIFZlcmlmaWNhciBzaSBsYSBjb252ZXJz acODwrNuIGhhIGZpbmFsaXphZG8KICAgIHZhbG9yPShpbmIoUENJX0JBU0VfQURSRVNTXzE3MTEr UENJMTcxeF9TVEFUVVMpICYgU3RhdHVzX0ZFKTsKCSAgICAgICAgfQovLyBMZWVyIGxvcyBkYXRv cwogICAgZGF0b3M9aW53KFBDSV9CQVNFX0FEUkVTU18xNzExK1BDSTE3MXhfQURfREFUQSk7IC8v IE9idGVuZXIgZGF0b3MgZGUgbGEgY29sYQogICAgeT1kYXRvcyYweDBmZmY7CgovLyBUcmFuc2Zv cm1hY2lvbiBlbiB0ZW5zaW9uIGRlIGxhIGxlY3R1cmEKVnRhY289eSowLjAwMjQ0OwpWdGFjbz0o VnRhY28tNSkqMjsKCi8vIEFsZ29yaXRtbyBkZWwgUEkgcGFyYSBjb250cm9sIGRlIHZlbG9jaWRh ZApiZXRhPTE7Ck49MTA7Cmg9UEVSSU9EKjAuMDAwMDAwMDAxOwpQPWEqKGJldGEqeC1WdGFjbyk7 Ckk9SW9sZDsKY3RyID0gUCtJOwpJb2xkID0gSW9sZCArIGEqaC9iKih4LVZ0YWNvKTsKVnRhY28w ID0gVnRhY287CgovLyBMaW1pdGFjaW9uIGVuIHRlbnNpb24gZGUgbGEgc2XDg8KxYWwgZGUgY29u dHJvbAppZihjdHI+MTApewpjdHI9MTA7Cn0KaWYoY3RyPC0xMCl7CmN0cj0tMTA7Cn0KCi8vIENv bnZlcnNpb24gZGUgbGEgc2XDg8KxYWwgZGUgY29udHJvbCBwYXJhIHNlciBlc2NyaXRhIGVuIGxh IHRhcmpldGEKaWYoKC0xMDw9Y3RyKSYmKGN0cjwwKSl7Cm91dD0oY3RyKzEwKS8wLjAwNDg4Owp9 CmlmKCgwPD1jdHIpJiYoY3RyPD0xMCkpewpvdXQ9Y3RyLzAuMDA0ODgrMjA0NjsKfQoKLy8gTGlt aXRhY2lvbiBkZSBsYSBzYWxpZGEKaWYob3V0PDApewpvdXQ9MDsKfWVsc2UgaWYob3V0PjQwOTUp ewpvdXQ9NDA5NTsKfQoKLy8gU2Ugc2FjYSBsYSBzZcODwrFhbCBkZSBjb250cm9sIHBvciBsYSBz YWxpZGEgYW5hbG9nYSBEQTEgeSBzZSBhcGxpY2EgYWwgcHVlbnRlIEggZGVsIG1vdG9yCiAgICAg b3V0dyhvdXQsUENJX0JBU0VfQURSRVNTXzE3MTEgKyBQQ0kxNzF4X0RBMSk7Cgp9CgovLyBQYXVz YXIgbGEgZWplY3VjacODwrNuIGhhc3RhIGVsIHByw4PCs3hpbW8gcGVyaW9kbwogIHB0aHJlYWRf d2FpdF9ucCAoJm92ZXJydW5zX3IpOwogIAp9CgovLyBTZcODwrFhbGEgZWwgdGVybWlubyBkZWwg dGhyZWFkCiBwdGhyZWFkX2V4aXQgKCh2b2lkICopMCk7Cn0KCgp2b2lkICogcGVydDEodm9pZCAq YXJnKXsKdW5zaWduZWQgaW50IHZhbG9yLGxlY3QsbHQ7CmludCBpLGosazsKZG91YmxlIHU7CnVu c2lnbmVkIGxvbmcgb3ZlcnJ1bnNfcjsKc3RydWN0IHRpbWVzcGVjIG5vdyxwZXJpb2Q7CmludCBk dW1teTsKCiAgICAgICBwZXJpb2QudHZfc2VjPTA7ICAgICAgICAgICAgICAgIC8vSW5pY2lhbGl6 byBsb3MgY29udGFkb3JlcyBkZWwgdGllbXBvIHRyYW5zY3VycmlkbwogICAgICAgcGVyaW9kLnR2 X25zZWM9UEVSSU9EMjsgICAgICAgICAgLy8gZW4gMC4wMDEgc2VnCiAgICAgICBjbG9ja19nZXR0 aW1lICAJKCBDTE9DS19SRUFMVElNRSwgJm5vdyk7CiAgICAgICBub3cudHZfbnNlYz1ub3cudHZf bnNlYytQRVJJT0QyOwogICAgICAgZHVtbXk9cHRocmVhZF9tYWtlX3BlcmlvZGljX25wIChwdGhy ZWFkX3NlbGYoKSwgJm5vdywmcGVyaW9kKTsKICAgICAgIHN3aXRjaChkdW1teSl7CiAgICAgICAg IGNhc2UgMCA6IAoJICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRVNSQ0g6IAoJCXByaW50Zigi dGhyZWFkIGlzIGludmFsaWQgXG4iKTsgCgkJcHRocmVhZF9leGl0ICgodm9pZCAqKS0xKTsgIAoJ ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRVRJTUVET1VUIDogCgkJcHJpbnRmKCJ0aGUgc3Rh cnQgdGltZSBoYXMgYWxyZWFkeSBwYXNzZWRcbiIpOyAKCQlwdGhyZWFkX2V4aXQgKCh2b2lkICop LTEpOyAKCSAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0IDogCgkJcHJpbnRmKCIgb3V0cHV0 IHZhbHVlIG5vdCBkZWZpbmVkIFxuIik7IAoJICAgICAgICBwdGhyZWFkX2V4aXQgKCh2b2lkICop LTEpOyAKCX0KCiAgIHdoaWxlICgxKSB7CgoJZm9yKGk9MDtpPDIxMDtpKyspewovLyAgICAgICAg Zm9yKGo9MDtqPDEwMDtqKyspewogICAgICAgIGsrKzsKCXU9c2luKChkb3VibGUpayk7Ci8vICAg ICAgICB9CiAgICB9CgogICAgcHRocmVhZF93YWl0X25wICgmb3ZlcnJ1bnNfcik7CiAgICAJfQog cHRocmVhZF9leGl0ICgodm9pZCAqKTApOwp9CgppbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJn dltdKXsKCi8vIFJlc2VydmEgZGUgbWVtb3JpYSB5IHBlcm1pc28gcGFyYSBhY2Nlc28gYSBsYSB0 YXJqZXRhCiAgICBtbG9ja2FsbChNQ0xfQ1VSUkVOVHxNQ0xfRlVUVVJFKTsKICAgIGlvcGVybShQ Q0lfQkFTRV9BRFJFU1NfMTcxMSw1MCwyKTsgICAgCgovLyBDcmVhIGVsIHRocmVhZCAiY29udHJv bCIgeSBzZSBsZSBhc2lnbmEgc3UgcHJpb3JpZGFkICAgIAogICAgcHRocmVhZF9jcmVhdGUgKCZ0 aHJlYWRfcGVydDEsIE5VTEwsIHBlcnQxLCAwKTsKICAgIHBfcGVydDEuc2NoZWRfcHJpb3JpdHkg PSAxOwogICAgcHRocmVhZF9zZXRzY2hlZHBhcmFtICh0aHJlYWRfcGVydDEsIFNDSEVEX0ZJRk8s ICZwX3BlcnQxKTsgICAgCgovLyBDcmVhIGVsIHRocmVhZCAiY29udHJvbCIgeSBzZSBsZSBhc2ln bmEgc3UgcHJpb3JpZGFkICAKICAgIHB0aHJlYWRfY3JlYXRlICgmdGhyZWFkX2NvbnRyb2wsIE5V TEwsIGNvbnRyb2wsIDApOwogICAgcF9jb250cm9sLnNjaGVkX3ByaW9yaXR5ID0gMjsKICAgIHB0 aHJlYWRfc2V0c2NoZWRwYXJhbSAodGhyZWFkX2NvbnRyb2wsIFNDSEVEX0ZJRk8sICZwX2NvbnRy b2wpOyAKCi8vIENvb3JkaW5hIGVsIHRlcm1pbm8gZGUgbGEgZWplY3VjacODwrNuIGRlIGxvcyB0 aHJlYWRzCiAgICBwdGhyZWFkX2pvaW4gICAodGhyZWFkX2NvbnRyb2wsTlVMTCk7CiAgICBwdGhy ZWFkX2pvaW4gICAodGhyZWFkX3BlcnQxLE5VTEwpOwoKICAgIHJldHVybigwKTsKfQo=