From mboxrd@z Thu Jan 1 00:00:00 1970 From: Kai Huang Subject: [RFC PATCH 00/15] RFC: SGX virtualization design and draft patches Date: Sun, 9 Jul 2017 20:03:10 +1200 Message-ID: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xen.org Cc: kevin.tian@intel.com, sstabellini@kernel.org, wei.liu2@citrix.com, George.Dunlap@eu.citrix.com, andrew.cooper3@citrix.com, ian.jackson@eu.citrix.com, tim@xen.org, jbeulich@suse.com List-Id: xen-devel@lists.xenproject.org SGkgYWxsLAoKVGhpcyBzZXJpZXMgaXMgUkZDIFhlbiBTR1ggdmlydHVhbGl6YXRpb24gc3VwcG9y dCBkZXNpZ24gYW5kIFJGQyBkcmFmdCBwYXRjaGVzLgoKSW50ZWwgU0dYIChTb2Z0d2FyZSBHdWFy ZCBFeHRlbnNpb25zKSBpcyBhIG5ldyBzZXQgb2YgaW5zdHJ1Y3Rpb25zIGFuZCBtZW1vcnkKYWNj ZXNzIG1lY2hhbmlzbXMgdGFyZ2V0dGluZyBmb3IgYXBwbGljYXRpb24gZGV2ZWxvcGVycyBzZWVr aW5nIHRvIHByb3RlY3QKc2VsZWN0IGNvZGUgYW5kIGRhdGEgZnJvbSBkaXNjbG9zdXJlIG9yIG1v ZGlmaWNhdGlvbi4KClRoZSBTR1ggc3BlY2lmaWNhdGlvbiBjYW4gYmUgZm91bmQgaW4gbGF0ZXN0 IEludGVsIFNETSBhcyBWb2x1bWUgM0Q6CgpodHRwczovL3NvZnR3YXJlLmludGVsLmNvbS9zaXRl cy9kZWZhdWx0L2ZpbGVzL21hbmFnZWQvN2MvZjEvMzMyODMxLXNkbS12b2wtM2QucGRmCgpTR1gg aXMgcmVsYXRpdmVseSBtb3JlIGNvbXBsaWNhdGVkIG9uIHNwZWNpZmljYXRpb24gKGVudGlyZSBW b2x1bWUgRCkgc28gaXQgaXMKdW5yZWFsaXN0aWMgdG8gbGlzdCBhbGwgaGFyZHdhcmUgZGV0YWls cyBoZXJlLiBGaXJzdCBwYXJ0IG9mIHRoZSBkZXNpZ24gaXMgdGhlCmJyaWVmIFNHWCBpbnRyb2R1 Y3Rpb24sIHdoaWNoIEkgdGhpbmsgaXMgbWFuZGF0b3J5IGZvciBpbnRyb2R1Y2luZyBTR1gKdmly dHVhbGl6YXRpb24gc3VwcG9ydC4gUGFydCAyIGlzIGRlc2lnbiBpdHNlbGYuIEFuZCBJIHB1dCBz b21lIHJlZmVyZW5jZSBhdApsYXN0LgoKSW4gZmlyc3QgcGFydCBJIG9ubHkgaW50cm9kdWNlZCB0 aGUgaW5mbyByZWxhdGVkIHZpcnR1YWxpemF0aW9uIHN1cHBvcnQsCmFsdGhvdWdoIHRoaXMgaXMg ZGVmaW5pdGVseSBub3QgdGhlIG1vc3QgaW1wb3J0YW50IHBhcnQgb2YgU0dYLiBPdGhlciBwYXJ0 cyBvZgpTR1ggKG1vc3QgcmVsYXRlZCB0byBjcnlwdG9ncmFwaHkpLCBpZSwgZW5jbGF2ZSBtZWFz dXJlbWVudCwgU0dYIGtleQphcmNoaXRlY3R1cmUsIFNlYWxpbmcgJiBBdHRlc3Rpb24gKHdoaWNo IGlzIGNyaXRpY2FsIGZlYXR1cmUgYWN0dWFsbHkpIGFyZQpvbW1pdGVkLiBQbGVhc2UgcmVmZXIg dG8gU0dYIHNwZWNpZmljYXRpb24gZm9yIGRldGFpbGVkIGluZm8uCgpJbiB0aGUgZGVzaWduIHRo ZXJlIGFyZSBzb21lIHBhcnRpY3VhbHIgcG9pbnRzIHRoYXQgSSBkb24ndCBrbm93IHdoaWNoCmlt cGxlbWVudGF0aW9uIGlzIGJldHRlci4gRm9yIHRob3NlIEkgYWRkZWQgYSBxdWVzdGlvbiBtYXJr ICg/KSBhdCB0aGUgcmlnaHQKb2YgdGhlIG1lbnUuIFlvdXIgY29tbWVudHMgb24gdGhvc2UgcGFy dHMgKGFuZCBvdGhlciBjb21tZW50cyBhcyB3ZWxsLCBvZgpjb3Vyc2UpIGFyZSBoaWdobHkgYXBw cmVjaWF0ZWQuCgpCZWNhdXNlIFNHWCBoYXMgbG90cyBvZiBkZXRhaWxzLCBzbyBJIHRoaW5rIHRo ZSBkZXNpZ24gaXRzZWxmIGNhbiBvbmx5IGJlIGhpZ2gKbGV2ZWwsIGFuZCBJIGFsc28gaW5jbHVk ZWQgdGhlIFJGQyBwYXRjaGVzIHdoaWNoIGNvbnRhaW5zIGxvdHMgb2YgZGV0YWlscy4KWW91ciBj b21tZW50cyBvbiB0aGUgcGF0Y2hlcyBhcmUgYWxzbyBoaWdobHkgYXBwcmVjaWF0ZWQuCgpUaGUg Y29kZSBjYW4gYWxzbyBiZSBmb3VuZCBhdCBiZWxvdyBnaXRodWIgcmVwbyBmb3IgeW91ciBhY2Nl c3M6CgogICAgIyBnaXQgY2xvbmUgaHR0cHM6Ly9naXRodWIuY29tLzAxb3JnL3hlbi1zZ3ggLWIg cmZjLXYxCgpBbmQgdGhlcmUgaXMgYW5vdGhlciBicmFuY2ggbmFtZWQgNC42LXNneCBpcyBhbm90 aGVyIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uClhlbiA0LjYsIGl0IGlzIG9sZCBidXQgaXQgaGFz IHNvbWUgZGlmZmVyZW50IGltcGxlbWVudGF0aW9uIHdpdGggdGhpcyByZmMtdjEKcGF0Y2hlcyBp biB0ZXJtcyBvZiBkZXNpZ24gY2hvaWNlIChleCwgaXQgYWRkcyBhIGRlZGljYXRlZCBoeXBlcmNh bGwpLgoKUGxlYXNlIGhlbHAgdG8gcmV2aWV3IGFuZCBnaXZlIGNvbW1lbnRzLiBUaGFua3MgaW4g YWR2YW5jZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKMS4gU0dYIEludHJvZHVjdGlvbgogICAg MS4xIE92ZXJ2aWV3CiAgICAgICAgMS4xLjEgRW5jbGF2ZQogICAgICAgIDEuMS4yIEVQQyAoRW5j bGF2ZSBQYWFnZSBDYWNoZSkKICAgICAgICAxLjEuMyBFTkNMUyBhbmQgRU5DTFUKICAgIDEuMiBE aXNjb3ZlcmluZyBTR1ggQ2FwYWJpbGl0eQogICAgICAgIDEuMi4xIEVudW1lcmF0ZSBTR1ggdmlh IENQVUlECiAgICAgICAgMS4yLjIgSW50ZWwgU0dYIE9wdC1pbiBDb25maWd1cmF0aW9uCiAgICAx LjMgRW5jbGF2ZSBMaWZlIEN5Y2xlCiAgICAgICAgMS4zLjEgQ29uc3RydWN0aW5nICYgRGVzdHJv eWluZyBFbmNsYXZlCiAgICAgICAgMS4zLjIgRW5jbGF2ZSBFbnRyeSBhbmQgRXhpdAogICAgICAg ICAgICAxLjMuMi4xIFN5bmNob25vdXMgRW50cnkgYW5kIEV4aXQKICAgICAgICAgICAgMS4zLjIu MiBBc3luY2hvdW5vdXMgRW5jbGF2ZSBFeGl0CiAgICAgICAgMS4zLjMgRVBDIEV2aWN0aW9uIGFu ZCBSZWxvYWQKICAgIDEuNCBTR1ggTGF1bmNoIENvbnRyb2wKICAgIDEuNSBTR1ggSW50ZXJhY3Rp b24gd2l0aCBJQTMyIGFuZCBJQTY0IEFyY2hpdGVjdHVyZQoyLiBTR1ggVmlydHVhbGl6YXRpb24g RGVzaWduCiAgICAyLjEgSGlnaCBMZXZlbCBUb29sc3RhY2sgQ2hhbmdlcwogICAgICAgIDIuMS4x IE5ldyAnZXBjJyBwYXJhbWV0ZXIKICAgICAgICAyLjEuMiBOZXcgWEwgY29tbWFuZHMgKD8pCiAg ICAgICAgMi4xLjMgTm90aWZ5IGRvbWFpbidzIHZpcnR1YWwgRVBDIGJhc2UgYW5kIHNpemUgdG8g WGVuCiAgICAgICAgMi4xLjQgTGF1bmNoIENvbnRyb2wgU3VwcG9ydCAoPykKICAgIDIuMiBIaWdo IExldmVsIEh5cGVydmlzb3IgQ2hhbmdlcwogICAgICAgIDIuMi4xIEVQQyBNYW5hZ2VtZW50ICg/ KQogICAgICAgIDIuMi4yIEVQQyBWaXJ0dWFsaXphdGlvbiAoPykKICAgICAgICAyLjIuMyBQb3B1 bGF0ZSBFUEMgZm9yIEd1ZXN0CiAgICAgICAgMi4yLjQgTmV3IERlZGljYXRlZCBIeXBlcmNhbGwg KD8pCiAgICAgICAgMi4yLjUgTGF1bmNoIENvbnRyb2wgU3VwcG9ydAogICAgICAgIDIuMi42IENQ VUlEIEVtdWxhdGlvbgogICAgICAgIDIuMi43IE1TUiBFbXVsYXRpb24KICAgICAgICAyLjIuOCBF UFQgVmlvbGF0aW9uICYgRU5DTFMgVHJhcHBpbmcgSGFuZGxpbmcKICAgICAgICAyLjIuOSBHdWVz dCBTdXNwZW5kICYgUmVzdW1lCiAgICAgICAgMi4yLjEwIERlc3Ryb3lpbmcgRG9tYWluCiAgICAy LjMgQWRkaXRpb25hbCBQb2ludDogTGl2ZSBNaWdyYXRpb24sIFNuYXBzaG90IFN1cHBvcnQgKD8p CjMuIFJlZmVyZW5jZQoKMS4gU0dYIEludHJvZHVjdGlvbgoKMS4xIE92ZXJ2aWV3CgoxLjEuMSBF bmNsYXZlCgpJbnRlbCBTb2Z0d2FyZSBHdWFyZCBFeHRlbnNpb25zIChTR1gpIGlzIGEgc2V0IG9m IGluc3RydWN0aW9ucyBhbmQgbWVjaGFuaXNtcwpmb3IgbWVtb3J5IGFjY2Vzc2VzIGluIG9yZGVy IHRvIHByb3ZpZGUgc2VjdXJpdHkgYWNjZXNzZXMgZm9yIHNlbnNpdGl2ZQphcHBsaWNhdGlvbnMg YW5kIGRhdGEuIFNHWCBhbGxvd3MgYW4gYXBwbGljYXRpb24gdG8gdXNlIGl0J3MgcGFyaXRpY3Vs YXIgYWRkcmVzcwpzcGFjZSBhcyBhbiAqZW5jbGF2ZSosIHdoaWNoIGlzIGEgcHJvdGVjdGVkIGFy ZWEgcHJvdmlkZXMgY29uZmlkZW50aWFsaXR5IGFuZAppbnRlZ3JpdHkgZXZlbiBpbiB0aGUgcHJl c2VuY2Ugb2YgcHJpdmlsZWdlZCBtYWx3YXJlLiBBY2Nlc3NlcyB0byB0aGUgZW5jbGF2ZQptZW1v cnkgYXJlYSBmcm9tIGFueSBzb2Z0d2FyZSBub3QgcmVzaWRlbnQgaW4gdGhlIGVuY2xhdmUgYXJl IHByZXZlbnRlZCwKaW5jbHVkaW5nIHRob3NlIGZyb20gcHJpdmlsZWdlZCBzb2Z0d2FyZS4gQmVs b3cgZGlhZ3JhbSBpbGx1c3RyYXRlcyB0aGUgcHJlc2VuY2UKb2YgRW5jbGF2ZSBpbiBhcHBsaWNh dGlvbi4KCiAgICAgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgIHwgICAgICAg ICAgICAgICAgICAgICAgIHwKICAgICAgICB8ICAgfC0tLS0tLS0tLS0tLS0tLXwgICB8CiAgICAg ICAgfCAgIHwgICBPUyBrZXJuZWwgICB8ICAgfCAgICAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0t LS18CiAgICAgICAgfCAgIHwtLS0tLS0tLS0tLS0tLS18ICAgfCAgICAgICB8ICAgICAgICAgICAg ICAgICAgICAgICB8CiAgICAgICAgfCAgIHwgICAgICAgICAgICAgICB8ICAgfCAgICAgICB8ICAg fC0tLS0tLS0tLS0tLS0tLXwgICB8CiAgICAgICAgfCAgIHwtLS0tLS0tLS0tLS0tLS18ICAgfCAg ICAgICB8ICAgfCBFbnRyeSB0YWJsZSAgIHwgICB8CiAgICAgICAgfCAgIHwgICBFbmNsYXZlICAg ICB8LS0tfC0tLS0tPiB8ICAgfC0tLS0tLS0tLS0tLS0tLXwgICB8CiAgICAgICAgfCAgIHwtLS0t LS0tLS0tLS0tLS18ICAgfCAgICAgICB8ICAgfCBFbmNsYXZlIHN0YWNrIHwgICB8CiAgICAgICAg fCAgIHwgICBBcHAgY29kZSAgICB8ICAgfCAgICAgICB8ICAgfC0tLS0tLS0tLS0tLS0tLXwgICB8 CiAgICAgICAgfCAgIHwtLS0tLS0tLS0tLS0tLS18ICAgfCAgICAgICB8ICAgfCBFbmNsYXZlIGhl YXAgIHwgICB8CiAgICAgICAgfCAgIHwgICBFbmNsYXZlICAgICB8ICAgfCAgICAgICB8ICAgfC0t LS0tLS0tLS0tLS0tLXwgICB8CiAgICAgICAgfCAgIHwtLS0tLS0tLS0tLS0tLS18ICAgfCAgICAg ICB8ICAgfCBFbmNsYXZlIGNvZGUgIHwgICB8CiAgICAgICAgfCAgIHwgICBBcHAgY29kZSAgICB8 ICAgfCAgICAgICB8ICAgfC0tLS0tLS0tLS0tLS0tLXwgICB8CiAgICAgICAgfCAgIHwtLS0tLS0t LS0tLS0tLS18ICAgfCAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgfCAg ICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAg ICAgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAoKU0dYIHN1cHBvcnRzIFNHWDEgYW5kIFNH WDIgZXh0ZW5zaW9ucy4gU0dYMSBwcm92aWRlcyBiYXNpYyBlbmNsYXZlIHN1cHBvcnQsCmFuZCBT R1gyIGFsbG93cyBhZGRpdGlvbmFsIGZsZXhpYmlsaXR5IGluIHJ1bnRpbWUgbWFuYWdlbWVudCBv ZiBlbmNsYXZlCnJlc291cmNlcyBhbmQgdGhyZWFkIGV4ZWN1dGlvbiB3aXRoaW4gYW4gZW5jbGF2 ZS4KCjEuMS4yIEVQQyAoRW5jbGF2ZSBQYWdlIENhY2hlKQoKSnVzdCBsaWtlIG5vcm1hbCBhcHBs aWNhdGlvbiBtZW1vcnkgbWFuYWdlbWVudCwgZW5jbGF2ZSBtZW1vcnkgbWFuYWdlbWVudCBjYW4g YmUKZGV2aWRlZCBpbnRvIHR3byBwYXJ0czogYWRkcmVzcyBzcGFjZSBhbGxvY2F0aW9uIGFuZCBt ZW1vcnkgY29tbWl0bWVudC4gQWRkcmVzcwpzcGFjZSBhbGxvY2F0aW9uIGlzIGFsbG9jYXRpbmcg cGFydGljdWxhciByYW5nZSBvZiBsaW5lYXIgYWRkcmVzcyBzcGFjZSBmb3IKZW5jbGF2ZS4gTWVt b3J5IGNvbW1pdG1lbnQgaXMgYXNzaWduaW5nIGFjdHVhbCByZXNvdXJjZSBmb3IgdGhlIGVuY2xh dmUuCgpFbmNsYXZlIFBhZ2UgQ2FjaGUgKEVQQykgaXMgdGhlIHBoeXNpY2FsIHJlc291cmNlIHVz ZWQgdG8gY29tbWl0IHRvIGVuY2xhdmUuCkVQQyBpcyBkaXZpZGVkIHRvIDRLIHBhZ2VzLiBBbiBF UEMgcGFnZSBpcyA0SyBpbiBzaXplIGFuZCBhbHdheXMgYWxpZ25lZCB0byA0Swpib3VuZGFyeS4g SGFyZHdhcmUgcGVyZm9ybXMgYWRkaXRpb25hbCBhY2Nlc3MgY29udHJvbCBjaGVja3MgdG8gcmVz dHJpY3QgYWNjZXNzCnRvIHRoZSBFUEMgcGFnZS4gVGhlIEVuY2xhdmUgUGFnZSBDYWNoZSBNYXAg KEVQQ00pIGlzIGEgc2VjdXJlIHN0cnVjdHVyZSB3aGljaApob2xkcyBvbmUgZW50cnkgZm9yIGVh Y2ggRVBDIHBhZ2UsIGFuZCBpcyB1c2VkIGJ5IGhhcmR3YXJlIHRvIHRyYWNrIHRoZSBzdGF0dXMK b2YgZWFjaCBFUEMgcGFnZSAoaW52aXNpYmUgdG8gc29mdHdhcmUpLiBUeXBpY2FsbHkgRVBDIGFu ZCBFUENNIGFyZSByZXNlcnZlZApieSBCSU9TIGFzIFByb2Nlc3NvciBSZXNlcnZlZCBNZW1vcnkg YnV0IHRoZSBhY3R1YWwgYW1vdW50LCBzaXplLCBhbmQgbGF5b3V0Cm9mIEVQQyBhcmUgbW9kZWwt c3BlY2lmaWMsIGFuZCBkZXBlbmRlbnQgb24gQklPUyBzZXR0aW5ncy4gRVBDIGlzIGVudW1lcmF0 ZWQKdmlhIG5ldyBTR1ggQ1BVSUQsIGFuZCBpcyByZXBvcnRlZCBhcyByZXNlcnZlZCBtZW1vcnku CgpFUEMgcGFnZXMgY2FuIGVpdGhlciBiZSBpbnZhbGlkIG9yIHZhbGlkLiBUaGVyZSBhcmUgNCB2 YWxpZCBFUEMgdHlwZXMgaW4gU0dYMToKcmVndWxhciBFUEMgcGFnZSwgU0dYIEVuY2xhdmUgQ29u dHJvbCBTdHJ1Y3R1cmUgKFNFQ1MpIHBhZ2UsIFRocmVhZCBDb250cm9sClN0cnVjdHVyZSAoVENT KSBwYWdlLCBhbmQgVmVyc2lvbiBBcnJheSAoVkEpIHBhZ2UuIFNHWDIgYWRkcyBUcmltbWVkIEVQ QyBwYWdlLgpFYWNoIGVuY2xhdmUgaXMgYXNzb2NpYXRlZCB3aXRoIG9uZSBTRUNTIHBhZ2UuIEVh Y2ggdGhyZWFkIGluIGVuY2xhdmUgaXMKYXNzb2NpYXRlZCB3aXRoIG9uZSBUQ1MgcGFnZS4gVkEg cGFnZSBpcyB1c2VkIGluIEVQQyBwYWdlIGV2aWN0aW9uIGFuZCByZWxvYWQuClRyaW1tZWQgRVBD IHBhZ2UgaXMgaW50cm9kdWNlZCBpbiBTR1gyIHdoZW4gcGFydGljdWxhciA0SyBwYWdlIGluIGVu Y2xhdmUgaXMKZ29pbmcgdG8gYmUgZnJlZWQgKHRyaW1tZWQpIGF0IHJ1bnRpbWUgYWZ0ZXIgZW5j bGF2ZSBpcyBpbml0aWFsaXplZC4KCjEuMS4zIEVOQ0xTIGFuZCBFTkNMVQoKVHdvIG5ldyBpbnN0 cnVjdGlvbnMgRU5DTFMgYW5kIEVOQ0xVIGFyZSBpbnRyb2R1Y2VkIHRvIG1hbmFnZSBlbmNsYXZl IGFuZCBFUEMuCkVOQ0xTIGNhbiBvbmx5IHJ1biBpbiByaW5nIDAsIHdoaWxlIEVOQ0xVIGNhbiBv bmx5IHJ1biBpbiByaW5nIDMuIEJvdGggRU5DTFMgYW5kCkVOQ0xVIGhhdmUgbXVsdGlwbGUgbGVh ZiBmdW5jdGlvbnMsIHdpdGggRUFYIGluZGljYXRpbmcgdGhlIHNwZWNpZmljIGxlYWYKZnVuY3Rp b24uCgpTR1gxIHN1cHBvcnRzIGJlbG93IEVOQ0xTIGFuZCBFTkNMVSBsZWF2ZXM6CgogICAgRU5D TFM6CiAgICAtIEVDUkVBVEUsIEVBREQsIEVFWFRFTkQsIEVJTklULCBFUkVNT1ZFIChFbmNsYXZl IGJ1aWxkIGFuZCBkZXN0cm95KQogICAgLSBFUEEsIEVCTE9DSywgRVRSQUNLLCBFV0IsIEVMRFUv RUxEQiAoRVBDIGV2aWN0aW9uICYgcmVsb2FkKQoKICAgIEVOQ0xVOgogICAgLSBFRU5URVIsIEVF WElULCBFUkVTVU1FIChFbmNsYXZlIGVudHJ5LCBleGl0LCByZS1lbnRlcikKICAgIC0gRUdFVEtF WSwgRVJFUE9SVCAoU0dYIGtleSBkZXJpdmF0aW9uLCBhdHRlc3RhdGlvbikKCkFkZGl0aW9uYWxs eSwgU0dYMiBzdXBwb3J0cyBiZWxvdyBFTkNMUyBhbmQgRU5DTFUgbGVhdmVzIGZvciBydW50aW1l IGFkZC9yZW1vdmUKRVBDIHBhZ2UgdG8gZW5jbGF2ZSBhZnRlciBlbmNsYXZlIGlzIGluaXRpYWxp emVkLCBhbG9uZyB3aXRoIHBlcm1pc3Npb24gY2hhbmdlLgoKICAgIEVOQ0xTOgogICAgLSBFQVVH LCBFTU9EVCwgRU1PRFBSCiAgICAKICAgIEVOQ0xVOgogICAgLSBFQUNDRVBULCBFQUNDRVBUQ09Q WSwgRU1PRFBFCgpWTU0gaXMgYWJsZSB0byBpbnRlcmZlcmUgd2l0aCBFTkNMUyBydW5uaW5nIGlu IGd1ZXN0IChzZWUgMS4yLnggU0dYIGludGVyYWN0aW9uCndpdGggVk1YKSBidXQgaXMgdW5hYmxl IHRvIGludGVyZmVyZSB3aXRoIEVOQ0xVLgoKMS4yIERpc2NvdmVyaW5nIFNHWCBDYXBhYmlsaXR5 CgoxLjIuMSBFbnVtZXJhdGUgU0dYIHZpYSBDUFVJRAoKSWYgQ1BVSUQuMHg3LjA6RUJYLlNHWCAo Yml0IDIpIGlzIDEsIHRoZW4gcHJvY2Vzc29yIHN1cHBvcnRzIFNHWCBhbmQgU0dYCmNhcGFiaWxp dHkgYW5kIHJlc291cmNlIGNhbiBiZSBlbnVtZXJhdGVkIHZpYSBuZXcgU0dYIENQVUlEICgweDEy KS4KQ1BVSUQuMHgxMi4weDAgcmVwb3J0cyBTR1ggY2FwYWJpbGl0eSwgc3VjaCBhcyB0aGUgcHJl c2VuY2Ugb2YgU0dYMSwgU0dYMiwKZW5jbGF2ZSdzIG1heGltdW0gc2l6ZSBmb3IgYm90aCAzMi1i aXQgYW5kIDY0LWJpdCBhcHBsaWNhdGlvbi4gQ1BVSUQuMHgxMi4weDEKcmVwb3J0cyB0aGUgYXZh aWxhYmlsaXR5IG9mIGJpdHMgdGhhdCBjYW4gYmUgc2V0IGZvciBTRUNTLkFUVFJJQlVURVMuCkNQ VUlELjB4MTIuMHgyIHJlcG9ydHMgdGhlIEVQQyByZXNvdXJjZSdzIGJhc2UgYW5kIHNpemUuIFBs YXRmb3JtIG1heSBzdXBwb3J0Cm11bHRpcGxlIEVQQyBzZWN0aW9ucywgYW5kIENQVUlELjB4MTIu MHgzIGFuZCBmdXJ0aGVyIHN1Yi1sZWF2ZXMgY2FuIGJlIHVzZWQKdG8gZGV0ZWN0IHRoZSBleGlz dGVuY2Ugb2YgbXVsdGlwbGUgRVBDIHNlY3Rpb25zICh1bnRpbCBDUFVJRCByZXBvcnRzIGludmFs aWQKRVBDKS4KClJlZmVyIHRvIDM3LjcuMiBJbnRlbCBTR1ggUmVzb3VyY2UgRW51bWVyYXRpb24g TGVhdmVzIGZvciBmdWxsIGRlc2NyaXB0aW9uIG9mClNHWCBDUFVJRCAweDEyLgoKMS4yLjIgSW50 ZWwgU0dYIE9wdC1pbiBDb25maWd1cmF0aW9uCgpPbiBwcm9jZXNzb3JzIHRoYXQgc3VwcG9ydCBJ bnRlbCBTR1gsIElBMzJfRkVBVFVSRV9DT05UUk9MIGFsc28gcHJvdmlkZXMgdGhlClNHWF9FTkFC TEUgYml0IChiaXQgMTgpIHRvIHR1cm4gb24vb2ZmIFNHWC4gQmVmb3JlIHN5c3RlbSBzb2Z0d2Fy ZSBjYW4gZW5hYmxlCmFuZCB1c2UgU0dYLCBCSU9TIGlzIHJlcXVpcmVkIHRvIHNldCBJQTMyX0ZF QVRVUkVfQ09OVFJPTC5TR1hfRU5BQkxFID0gMSB0bwpvcHQtaW4gU0dYLgoKU2V0dGluZyBTR1hf RU5BQkxFIGZvbGxvd3MgdGhlIHJ1bGVzIG9mIElBMzJfRkVBVFVSRV9DT05UUk9MLkxPQ0sgKGJp dCAwKS4KU29mdHdhcmUgaXMgY29uc2lkZXJlZCB0byBoYXZlIG9wdGVkIGludG8gSW50ZWwgU0dY IGlmIGFuZCBvbmx5IGlmCklBMzJfRkVBVFVSRV9DT05UUk9MLlNHWF9FTkFCTEUgYW5kIElBMzJf RkVBVFVSRV9DT05UUk9MLkxPQ0sgYXJlIHNldCB0byAxLgoKVGhlIHNldHRpbmcgb2YgSUEzMl9G RUFUVVJFX0NPTlRST0wuU0dYX0VOQUJMRSAoYml0IDE4KSBpcyBub3QgcmVmbGVjdGVkIGJ5ClNH WCBDUFVJRC4gRW5jbGF2ZSBpbnN0cnVjdGlvbnMgd2lsbCBiZWhhdmlvciBkaWZmZXJlbnRseSBh Y2NvcmRpbmcgdG8gdmFsdWUKb2YgQ1BVSUQuMHg3LjB4MDpFQlguU0dYIGFuZCB3aGV0aGVyIEJJ T1MgaGFzIG9wdGVkLWluIFNHWC4KClJlZmVyIHRvIDM3LjcuMSBJbnRlbCBTR1ggT3B0LWluIENv bmZpZ3VyYXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCgoxLjMgRW5jbGF2ZSBMaWZlIEN5Y2xl CgoxLjMuMSBDb25zdHJ1Y3RpbmcgJiBEZXN0cm95aW5nIEVuY2xhdmUKCkVuY2xhdmUgaXMgY3Jl YXRlZCB2aWEgRU5DTFNbRUNSRUFURV0gbGVhZiBieSBwcmV2aWxlZ2VkIHNvZnR3YXJlLiBCYXNp Y2FsbHkKRUNSRUFURSBjb252ZXJ0cyBhbiBpbnZhbGlkIEVQQyBwYWdlIGludG8gU0VDUyBwYWdl LCBhY2NvcmRpbmcgdG8gYSBzb3VyY2UgU0VDUwpzdHJ1Y3R1cmUgcmVzaWRlcyBpbiBub3JtYWwg bWVtb3J5LiBUaGUgc291cmNlIFNFQ1MgY29udGFpbnMgZW5jbGF2ZSdzIGluZm8Kc3VjaCBhcyBi YXNlIChsaW5lYXIpIGFkZHJlc3MsIHNpemUsIGVuY2xhdmUgYXR0cmlidXRlcywgZW5jbGF2ZSdz IG1lYXN1cmVtZW50LApldGMuCgpBZnRlciBFQ1JFQVRFLCBmb3IgZWFjaCA0SyBsaW5lYXIgYWRk cmVzcyBzcGFjZSBwYWdlLCBwcml2aWxlZGdlZCBzb2Z0d2FyZSB1c2VzCkVBREQgYW5kIEVFWFRF TkQgdG8gYWRkIG9uZSBFUEMgcGFnZSB0byBpdC4gRW5jbGF2ZSBjb2RlL2RhdGEgKHJlc2lkZXMg aW4gbm9ybWFsCm1lbW9yeSkgaXMgbG9hZGVkIHRvIGVuY2xhdmUgZHVyaW5nIEVBREQgZm9yIGVu Y2xhdmUncyBlYWNoIDRLIHBhZ2UuIEFmdGVyIGFsbApFUEMgcGFnZXMgYXJlIGFkZGVkIHRvIGVu Y2xhdmUsIHByaXZpbGVkZ2VkIHNvZnR3YXJlIGNhbGxzIEVJTklUIHRvIGluaXRpYWxpemUKdGhl IGVuY2xhdmUsIGFuZCB0aGVuIGVuY2xhdmUgaXMgcmVhZHkgdG8gcnVuLgoKRHVyaW5nIGVuY2xh dmUgaXMgY29uc3RydWN0ZWQsIGVuY2xhdmUgbWVhc3VyZW1lbnQsIHdoaWNoIGlzIGEgU0hBMjU2 IGhhc2gKdmFsdWUsIGlzIGFsc28gYnVpbHQgYWNjb3JkaW5nIHRvIGVuY2xhdmUncyBzaXplLCBj b2RlL2RhdGEgaXRzZWxmIGFuZCBpdHMKbG9jYXRpb24gaW4gZW5jbGF2ZSwgZXRjLiBUaGUgbWVh c3VyZW1lbnQgY2FuIGJlIHVzZWQgdG8gdW5pcXVlbHkgaWRlbnRpZnkgdGhlCmVuY2xhdmUuIFNJ R1NUUlVDVCBpbiBFSU5JVCBsZWFmIGFsc28gY29udGFpbnMgdGhlIG1lYXN1cmVtZW50IHNwZWNp ZmllZCBieQp1bnRydXN0ZWQgc29mdHdhcmUsIHZpYSBNUkVOQ0xBVkUuIEVJTklUIHdpbGwgY2hl Y2sgdGhlIHR3byBtZWFzdXJlbWVudHMgYW5kCndpbGwgb25seSBzdWNjZWVkIHdoZW4gdGhlIHR3 byBtYXRjaGVzLgoKRW5jbGF2ZSBpcyBkZXN0cm95ZWQgYnkgcnVubmluZyBFUkVNT1ZFIGZvciBh bGwgRW5jbGF2ZSdzIEVQQyBwYWdlLCBhbmQgdGhlbgpmb3IgZW5jbGF2ZSdzIFNFQ1MuIEVSRU1P VkUgd2lsbCByZXBvcnQgU0dYX0NISUxEX1BSRVNFTlQgZXJyb3IgaWYgaXQgaXMgY2FsbGVkCmZv ciBTRUNTIHdoZW4gdGhlcmUncyBzdGlsbCByZWd1bGFyIEVQQyBwYWdlcyB0aGF0IGhhdmVuJ3Qg YmVlbiByZW1vdmVkIGZyb20KZW5jbGF2ZS4KClBsZWFzZSByZWZlciB0byBTRE0gY2hhcHRlciAz OS4xIENvbnN0cnVjdGluZyBhbiBFbmNsYXZlIGZvciBtb3JlIGluZm9tYXRpb24uCgoxLjMuMiBF bmNsYXZlIEVudHJ5IGFuZCBFeGl0CgoxLjMuMi4xIFN5bmNob25vdXMgRW50cnkgYW5kIEV4aXQK CkFmdGVyIGVuY2xhdmUgaXMgY29uc3RydWN0ZWQsIG5vbi1wcml2aWxlZGdlZCBzb2Z0d2FyZSB1 c2UgRU5DTFVbRUVOVEVSXSB0bwplbnRlciBlbmNsYXZlIHRvIHJ1bi4gV2hpbGUgcHJvY2VzcyBy dW5zIGluIGVuY2xhdmUsIG5vbi1wcml2aWxlZGdlZCBzb2Z0d2FyZQpjYW4gdXNlIEVOQ0xVW0VF WElUXSB0byBleGl0IGZyb20gZW5jbGF2ZSBhbmQgcmV0dXJuIHRvIG5vcm1hbCBtb2RlLgoKMS4z LjIuMiBBc3luY2hvdW5vdXMgRW5jbGF2ZSBFeGl0CgpBc3luY2hyb25vdXMgYW5kIHN5bmNocm9u b3VzIGV2ZW50cywgc3VjaCBhcyBleGNlcHRpb25zLCBpbnRlcnJ1cHRzLCB0cmFwcywKU01Jcywg YW5kIFZNIGV4aXRzIG1heSBvY2N1ciB3aGlsZSBleGVjdXRpbmcgaW5zaWRlIGFuIGVuY2xhdmUu IFRoZXNlIGV2ZW50cwphcmUgcmVmZXJyZWQgdG8gYXMgRW5jbGF2ZSBFeGl0aW5nIEV2ZW50cyAo RUVFKS4gVXBvbiBhbiBFRUUsIHRoZSBwcm9jZXNzb3IKc3RhdGUgaXMgc2VjdXJlbHkgc2F2ZWQg aW5zaWRlIHRoZSBlbmNsYXZlIGFuZCB0aGVuIHJlcGxhY2VkIGJ5IGEgc3ludGhldGljCnN0YXRl IHRvIHByZXZlbnQgbGVha2FnZSBvZiBzZWNyZXRzLiBUaGUgcHJvY2VzcyBvZiBzZWN1cmVseSBz YXZpbmcgc3RhdGUgYW5kCmVzdGFibGlzaGluZyB0aGUgc3ludGhldGljIHN0YXRlIGlzIGNhbGxl ZCBhbiBBc3luY2hyb25vdXMgRW5jbGF2ZSBFeGl0IChBRVgpLgoKQWZ0ZXIgQUVYLCBub24tcHJp dmlsZWRnZWQgc29mdHdhcmUgdXNlcyBFTkNMVVtFUkVTVU1FXSB0byByZS1lbnRlciBlbmNsYXZl LgpUaGUgU0dYIHVzZXJzcGFjZSBzb2Z0d2FyZSBtYWludGFpbnMgYSBzbWFsbCBwaWVjZSBvZiBj b2RlIChyZXNpZGVzIGluIG5vcm1hbAptZW1vcnkpIHdoaWNoIGJhc2ljYWxseSBjYWxscyBFUkVT VU1FIHRvIHJlLWVudGVyIGVuY2xhdmUuIFRoZSBhZGRyZXNzIG9mIHRoaXMKcGllY2Ugb2YgY29k ZSBpcyBjYWxsZWQgQXN5bmNocm9ub3VzIEV4aXQgUG9pbnRlciAoQUVQKS4gQUVQIGlzIHNwZWNp ZmllZCBhcwpwYXJhbWV0ZXIgaW4gRUVOVEVSIGFuZCB3aWxsIGJlIGtlcHQgaW50ZXJuYWxseSBp biBlbmNsYXZlLiBVcG9uIEFFWCwgQUVQIHdpbGwKYmUgcHVzaGVkIHRvIHN0YWNrIGFuZCB1cG9u IHJldHVybmluZyBmcm9tIEVFRSBoYW5kbGluZywgc3VjaCBhcyBJUkVULCBBRVAgd2lsbApiZSBs b2FkZWQgdG8gUklQIGFuZCBFUkVTVU1FIHdpbGwgYmUgY2FsbGVkIHN1YnNlcXVlbnRseSB0byBy ZS1lbnRlciBlbmNsYXZlLgoKRHVyaW5nIEFFWCB0aGUgcHJvY2Vzc29yIHdpbGwgZG8gY29udGV4 dCBzYXZpbmcgYW5kIHJlc3RvcmUgYXV0b21hdGljYWxseQp0aGVyZWZvcmUgbm8gY2hhbmdlIHRv IGludGVycnVwdCBoYW5kbGluZyBvZiBPUyBrZXJuZWwgYW5kIFZNTSBpcyByZXF1aXJlZC4gSXQK aXMgU0dYIHVzZXJzcGFjZSBzb2Z0d2FyZSdzIHJlc3BvbnNpYmlsaXR5IHRvIHNldHVwIEFFUCBj b3JyZWN0bHkuCgpQbGVhc2UgcmVmZXIgdG8gU0RNIGNoYXB0ZXIgMzkuMiBFbmNsYXZlIEVudHJ5 IGFuZCBFeGl0IGZvciBtb3JlIGluZm9tYXRpb24uCgoxLjMuMyBFUEMgRXZpY3Rpb24gYW5kIFJl bG9hZAoKU0dYIGFsc28gYWxsb3dzIHByaXZpbGVkZ2VkIHNvZnR3YXJlIHRvIGV2aWN0IGFueSBF UEMgcGFnZXMgdGhhdCBhcmUgdXNlZCBieQplbmNsYXZlLiBUaGUgaWRlYSBpcyB0aGUgc2FtZSBh cyBub3JtYWwgbWVtb3J5IHN3YXBwaW5nLiBCZWxvdyBpcyB0aGUgZGV0YWlsCmluZm8gb2YgaG93 IHRvIGV2aWN0IEVQQyBwYWdlcy4KCkJlbG93IGlzIHRoZSBzZXF1ZW5jZSB0byBldmljdCByZWd1 bGFyIEVQQyBwYWdlOgoKCTEpIFNlbGVjdCBvbmUgb3IgbXVsdGlwbGUgcmVndWxhciBFUEMgcGFn ZXMgZnJvbSBvbmUgZW5jbGF2ZQoJMikgUmVtb3ZlIEVQVC9QVCBtYXBwaW5nIGZvciBzZWxlY3Rl ZCBFUEMgcGFnZXMKCTMpIFNlbmQgSVBJcyB0byByZW1vdGUgQ1BVcyB0byBmbHVzaCBUTEIgb2Yg c2VsZWN0ZWQgRVBDIHBhZ2VzCgk0KSBFQkxPQ0sgb24gc2VsZWN0ZWQgRVBDIHBhZ2VzCgk1KSBF VFJBQ0sgb24gZW5jbGF2ZSdzIFNFQ1MgcGFnZQoJNikgYWxsb2NhdGUgb25lIGF2YWlsYWJsZSBz bG90ICg4LWJ5dGUpIGluIFZBIHBhZ2UKCTcpIEVXQiBvbiBzZWxlY3RlZCBFUEMgcGFnZXMKCldp dGggRVdCIHRha2luZzoKCgktIFZBIHNsb3QsIHRvIHJlc3RvcmUgZXZpY3Rpb24gdmVyc2lvbiBp bmZvLgoJLSBvbmUgbm9ybWFsIDRLIHBhZ2UgaW4gbWVtb3J5LCB0byBzdG9yZSBlbmNyeXB0ZWQg Y29udGVudCBvZiBFUEMgcGFnZS4KCS0gb25lIHN0cnVjdCBQQ01EIGluIG1lbW9yeSwgdG8gc3Rv cmUgbWV0YSBkYXRhLgoKICAgIChWQSBzbG90IGlzIGEgOC1ieXRlIHNsb3QgaW4gVkEgcGFnZSwg d2hpY2ggaXMgYSBwYXJ0aWN1YWxyIEVQQyBwYWdlLikKCkFuZCBiZWxvdyBpcyB0aGUgc2VxdWVu Y2UgdG8gZXZpY3QgYW4gU0VDUyBwYWdlIG9yIFZBIHBhZ2U6CgoJMSkgbG9jYXRlIFNFQ1MgKG9y IFZBKSBwYWdlCgkyKSByZW1vdmUgRVBUL1BUIG1hcHBpbmcgZm9yIFNFQ1MgKG9yIFZBKSBwYWdl CgkzKSBTZW5kIElQSXMgdG8gcmVtb3RlIENQVXMKCTYpIGFsbG9jYXRlIG9uZSBhdmFpbGFibGUg c2xvdCAoOC1ieXRlKSBpbiBWQSBwYWdlCgk0KSBFV0Igb24gU0VDUyAob3IpIHBhZ2UKCkFuZCBm b3IgZXZpY3RpbmcgU0VDUyBwYWdlLCBhbGwgcmVndWxhciBFUEMgcGFnZXMgdGhhdCBiZWxvbmdz IHRvIHRoYXQgU0VDUwptdXN0IGJlIGV2aWN0ZWQgb3V0IHByaW9yLCBvdGhlcndpc2UgRVdCIHJl dHVybnMgU0dYX0NISUxEX1BSRVNFTlQgZXJyb3IuCgpBbmQgdG8gcmVsb2FkIGFuIEVQQyBwYWdl OgoKCTEpIEVMRFUvRUxEQiBvbiBFUEMgcGFnZQoJMikgc2V0dXAgRVBUL1BUIG1hcHBpbmcKCldp dGggRUxEVS9FTERCIHRha2luZzoKCgktIGxvY2F0aW9uIG9mIFNFQ1MgcGFnZQoJLSBsaW5lYXIg YWRkcmVzcyBvZiBlbmNsYXZlJ3MgNEsgcGFnZSAodGhhdCB3ZSBhcmUgZ29pbmcgdG8gcmVsb2Fk IHRvKQoJLSBWQSBzbG90ICh1c2VkIGluIEVXQikKCS0gNEsgcGFnZSBpbiBtZW1vcnkgKHVzZWQg aW4gRVdCKQoJLSBzdHJ1Y3QgUENNRCBpbiBtZW1vcnkgKHVzZWQgaW4gRVdCKQoKUGxlYXNlIHJl ZmVyIHRvIFNETSBjaGFwdGVyIDM5LjUgRVBDIGFuZCBNYW5hZ2VtZW50IG9mIEVQQyBwYWdlcyBm b3IgbW9yZQppbmZvcm1hdGlvbi4KCioqKioqKioqKioqIEluc3RydWN0aW9uIEJlaGF2aW9yIGNo YW5nZXMgaW4gRW5jbGF2ZQoKLSBJbGxlZ2FsIGluc3RydWN0aW9ucyBpbnNpZGUgZW5jbGF2ZQoK ICAgICAgICAgICAgSW5zdHJ1Y3Rpb24gICAgICAgICAgICAgICAgIFJlc3VsdCAgICAgICAgICAg ICAgQ29tbWVudAoKICAgIENQVUlELEdFVFNFQyxSRFBNQyxTR0RULFNJRFQsU0xEVCxTVFIsVk1D QUxMLAoKMS40IFNHWCBMYXVuY2ggQ29udHJvbAoKU0dYIHJlcXVpcmVzIHJ1bm5pbmcgIkxhdW5j aCBFbmNsYXZlIiAoTEUpIGJlZm9yZSBydW5uaW5nIGFueSBvdGhlciBlbmNsYXZlcy4KVGhpcyBp cyBiZWNhdXNlIExFIGlzIHRoZSBvbmx5IGVuY2xhdmUgdGhhdCBkb2VzIG5vdCByZXF1aXJlcyBF SU5JVFRPS0VOIGluCkVJTklULiBSdW5uaW5nIGFueSBvdGhlciBlbmNsYXZlIHJlcXVpcmVzIGEg dmFsaWQgRUlOSVRUT0tFTiwgd2hpY2ggY29udGFpbnMKTUFDIG9mIHRoZSAoZmlyc3QgMTkyIGJ5 dGVzKSBFSU5JVFRPS0VOIGNhbGN1bGF0ZWQgYnkgRUlOSVRUT0tFTiBrZXkuIEVJTklUCndpbGwg dmVyaWZ5IHRoZSBNQUMgdmlhIGludGVybmFsbHkgZGVyaXZpbmcgdGhlIEVJTklUVE9LRU4ga2V5 LCBhbmQgb25seSB0aGUKRUlOSVRUT0tFTiB0aGF0IGhhcyBtYXRjaGVkIE1BQyB3aWxsIGJlIGFj Y2VwdGVkIGJ5IEVJTklULiBUaGUgRUlOSVRUT0tFTiBrZXkKZGVyaXZhdGlvbiBkZXBlbmRzIG9u IHNvbWUgaW5mbyBmcm9tIExFLiBUaGUgdHlwaWNhbCBwcm9jZXNzIGlzIExFIGdlbmVyYXRlcwpF SU5JVFRPS0VOIGZvciBvdGhlciBlbmNsYXZlIGFjY29yZGluZyB0byBMRSBpdHNlbGYgYW5kIHRo ZSB0YXJnZXQgZW5jbGF2ZSwKYW5kIGNhbGN1YWx0ZXMgdGhlIE1BQyBieSB1c2luZyBFTkNMVVtF R0VUS0VZXSB0byBnZXQgdGhlIEVJTklUVE9LRU4ga2V5LiBPbmx5CkxFIGlzIGFibGUgdG8gZ2V0 IHRoZSBFSU5JVFRPS0VOIGtleS4KClJ1bm5pbmcgTEUgcmVxdWllcyB0aGUgU0hBMjU2IGhhc2gg b2YgTEUgc2lnbmVyJ3MgUlNBIHB1YmxpYyBrZXkgKFNIQTI1NiBvZgpzaWdzdHJ1Y3QtPm1vZHVs dXMpIHRvIGVxdWFsIHRvIElBMzJfU0dYTEVQVUJLRVlIQVNIWzAtM10gTVNScyAodGhlIDQgTVNS cwp0b2dldGhlciBtYWtlcyB1cCAyNTYtYml0IFNIQTI1NiBoYXNoIHZhbHVlKS4KCklmIENQVUlE LjB4Ny4weDA6RUJYLlNHWCBpcyBzZXQsIHRoZW4gSUEzMl9TR1hMRVBVQktFWUhBU0huIGFyZSBy ZWFkYWJsZS4gSWYKQ1BVSUQuMHg3LjB4MDpFQ1guU0dYX0xBVU5DSF9DT05UUk9MW2JpdCAzMF0g aXMgc2V0LCB0aGVuIElBMzJfRkVBVFVSRV9DT05UUk9MCk1TUiBoYXMgU0dYX0xBVU5DSF9DT05U Uk9MX0VOQUJMRSBiaXQgKGJpdCAxNykgYXZhaWxhYmxlLiAxLXNldHRpbmcgb2YKU0dYX0xBVU5D SF9DT05UUk9MX0VOQUJMRSBiaXQgZW5hYmxlcyBydW50aW1lIGNoYW5nZSBvZiBJQTMyX1NHWExF UFVCS0VZSEFTSG4KYWZ0ZXIgSUEzMl9GRUFUVVJFX0NPTlRST0wgaXMgbG9ja2VkLiBPdGhlcndp c2UsIElBMzJfU0dYTEVQVUJLRVlIQVNIbiBhcmUKcmVhZC1vbmx5IGFmdGVyIElBMzJfRkVBVFVS RV9DT05UUk9MIGlzIGxvY2tlZC4gSUEzMl9TR1hMRVBVQktFWUhBU0huIHdpbGwgYmUKc2V0IHRv IFNIQTI1NiBoYXNoIG9mIEludGVsJ3MgZGVmYXVsdCBSU0EgcHVibGljIGtleS4KCkFib3ZlIG1l Y2hhbmlzbSBhbGxvd3MgM3JkIHBhcnR5IHRvIHJ1biB0aGVpciBvd24gTEUuCgpPbiBwaHlzaWNh bCBtYWNoaW5lLCB0eXBpY2FsbHkgQklPUyB3aWxsIHByb3ZpZGUgb3B0aW9uIHRvICpsb2NrKiBv ciAqdW5sb2NrKgpJQTMyX1NHWExFUFVCS0VZSEFTSG4gYmVmb3JlIHRyYW5zZmVyaW5nIHRvIE9T LiBCSU9TIG1heSBhbHNvIHByb3ZpZGUgaW50ZXJmYWNlCmZvciB1c2VyIHRvIGNoYW5nZSBkZWZh dWx0IHZhbHVlIG9mIElBMzJfU0dYTEVQVUJLRVlIQVNIbiwgYnV0IHdoYXQgaW50ZXJmYWNlcwp3 aWxsIGJlIHByb3ZpZGVkIGJ5IEJJT1MgaXMgQklPUyBpbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQu CgoxLjUgU0dYIEludGVyYWN0aW9uIHdpdGggSUEzMiBhbmQgSUE2NCBBcmNoaXRlY3R1cmUKClNE TSBDaGFwdGVyIDQyIGRlc2NyaWJlcyBTR1ggaW50ZXJhY3Rpb24gd2l0aCB2YXJpb3VzIGZlYXR1 cmVzIGluIElBMzIgYW5kIElBNjQKYXJjaGl0ZWN0dXJlLiBCZWxvdyBvdXRsaW5lcyB0aGUgbWFq b3Igb25lcy4gUmVmZXIgdG8gQ2hhcHRlciA0MiBmb3IgZnVsbApkZXNjcmlwdGlvbiBvZiBTR1gg aW50ZXJhY3Rpb24gd2l0aCB2YXJpb3VzIElBMzIgYW5kIElBNjQgZmVhdHVyZXMuCgoxLjUuMSBW TVggQ2hhbmdlcyBmb3IgU3VwcG9ydGluZyBTR1ggVmlydHVhbGl6YXRpb24KCkEgbmV3IDY0LWJp dCBFTkNMUy1leGl0aW5nIGJpdG1hcCBjb250cm9sIGZpZWxkIGlzIGFkZGVkIHRvIFZNQ1MgKGVu Y29kaW5nCjAyMDJFSCkgdG8gY29udHJvbCBWTUVYSVQgb24gRU5DTFMgbGVhZiBmdW5jdGlvbnMu IEFuZCBhIG5ldyAiRW5hYmxlIEVOQ0xTCmV4aXRpbmciIGNvbnRyb2wgYml0IChiaXQgMTUpIGlz IGRlZmluZWQgaW4gc2Vjb25kYXJ5IHByb2Nlc3NvciBiYXNlZCB2bQpleGVjdXRpb24gY29udHJv bC4gMS1TZXR0aW5nIG9mICJFbmFibGUgRU5DTFMgZXhpdGluZyIgZW5hYmxlcyBFTkNMUy1leGl0 aW5nCmJpdG1hcCBjb250cm9sLiBFTkNMUy1leGl0aW5nIGJpdG1hcCBjb250cm9scyB3aGljaCBF TkNMUyBsZWF2ZXMgd2lsbCB0cmlnZ2VyClZNRVhJVC4KCkFkZGl0aW9uYWxseSB0d28gbmV3IGJp dHMgYXJlIGFkZGVkIHRvIGluZGljYXRlIHdoZXRoZXIgVk1FWElUIChhbnkpIGlzIGZyb20KZW5j bGF2ZS4gQmVsb3cgdHdvIGJpdHMgd2lsbCBiZSBzZXQgaWYgVk1FWElUIGlzIGZyb20gZW5jbGF2 ZToKICAgIC0gQml0IDI3IGluIHRoZSBFeGl0IHJlYXNvbiBmaWxlZCBvZiBCYXNpYyBWTS1leGl0 IGluZm9ybWF0aW9uLgogICAgLSBCaXQgNCBpbiB0aGUgSW50ZXJydXB0aWJpbGl0eSBTdGF0ZSBv ZiBHdWVzdCBOb24tUmVnaXN0ZXIgU3RhdGUgb2YgVk1DUy4KClJlZmVyIHRvIDQyLjUgSW50ZXJh Y3Rpb25zIHdpdGggVk1YLCAyNy4yLjEgQmFzaWMgVk0tRXhpdCBJbmZvcm1hdGlvbiwgYW5kCjI3 LjMuNCBTYXZpbmcgTm9uLVJlZ2lzdGVyLgoKMS41LjIgSW50ZXJhY3Rpb24gd2l0aCBYU0FWRQoK U0dYIGRlZmluZXMgYSBzdWItZmllbGQgY2FsbGVkIFgtRmVhdHVyZSBSZXF1ZXN0IE1hc2sgKFhG Uk0pIGluIHRoZSBhdHRyaWJ1dGVzCmZpZWxkIG9mIFNFQ1MuIE9uIGVuY2xhdmUgZW50cnksIFNH WCBIVyB2ZXJpZmllcyBYRlJNIGluIFNFQ1MuQVRUUklCVVRFUyBhcmUKYWxyZWFkeSBlbmFibGVk IGluIFhDUjAuCgpVcG9uIEFFWCwgU0dYIHNhdmVzIHRoZSBwcm9jZXNzb3IgZXh0ZW5kZWQgc3Rh dGUgYW5kIG1pc2NlbGxhbmVvdXMgc3RhdGUgdG8KZW5jbGF2ZSdzIHN0YXRlLXNhdmUgYXJlYSAo U1NBKSwgYW5kIGNsZWFyIHRoZSBzZWNyZXRzIGZyb20gcHJvY2Vzc29yIGV4dGVuZGVkCnN0YXRl IHRoYXQgaXMgdXNlZCBieSBlbmNsYXZlIChmcm9tIGxlYWtpbmcgc2VjcmV0cykuCgpSZWZlciB0 byA0Mi43IEludGVyYWN0aW9uIHdpdGggUHJvY2Vzc29yIEV4dGVuZGVkIFN0YXRlIGFuZCBNaXNj ZWxsYW5lb3VzIFN0YXRlCgoxLjUuMyBJbnRlcmFjdGlvbiB3aXRoIFMgc3RhdGUKCldoZW4gcHJv Y2Vzc29yIGdvZXMgaW50byBTMy1TNSBzdGF0ZSwgRVBDIGlzIGRlc3Ryb3llZCwgdGh1cyBhbGwg ZW5jbGF2ZXMgYXJlCmRlc3Ryb3llZCBhcyB3ZWxsIGNvbnNlcXVlbnRseS4KClJlZmVyIHRvIDQy LjE0IEludGVyYWN0aW9uIHdpdGggUyBTdGF0ZXMuCgoyLiBTR1ggVmlydHVhbGl6YXRpb24gRGVz aWduCgoyLjEgSGlnaCBMZXZlbCBUb29sc3RhY2sgQ2hhbmdlczoKCjIuMS4xIE5ldyAnZXBjJyBw YXJhbWV0ZXIKCkVQQyBpcyBsaW1pdGVkIHJlc291cmNlLiBJbiBvcmRlciB0byB1c2UgRVBDIGVm ZmljaWVudGx5IGFtb25nIGFsbCBkb21haW5zLAp3aGVuIGNyZWF0aW5nIGd1ZXN0LCBhZG1pbmlz dHJhdG9yIHNob3VsZCBiZSBhYmxlIHRvIHNwZWNpZnkgZG9tYWluJ3MgdmlydHVhbApFUEMgc2l6 ZS4gQW5kIGFkbWluCmFsYW8gc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGFsbCBkb21haW4ncyB2aXJ0 dWFsIEVQQyBzaXplLgoKRm9yIHRoaXMgcHVycG9zZSwgYSBuZXcgJ2VwYyA9IDxzaXplPicgcGFy YW1ldGVyIGlzIGFkZGVkIHRvIFhMIGNvbmZpZ3VyYXRpb24KZmlsZS4gVGhpcyBwYXJhbWV0ZXIg c3BlY2lmaWVzIGd1ZXN0J3MgdmlydHVhbCBFUEMgc2l6ZS4gVGhlIEVQQyBiYXNlIGFkZHJlc3MK d2lsbCBiZSBjYWxjdWxhdGVkIGJ5IHRvb2xzdGFjayBpbnRlcm5hbGx5LCBhY2NvcmRpbmcgdG8g Z3Vlc3QncyBtZW1vcnkgc2l6ZSwKTU1JTyBzaXplLCBldGMuICdlcGMnIGlzIE1CIGluIHVuaXQg YW5kIGFueSAxTUIgYWxpZ25lZCB2YWx1ZSB3aWxsIGJlIGFjY2VwdGVkLgoKMi4xLjIgTmV3IFhM IGNvbW1hbmRzICg/KQoKQWRtaW5pc3RyYXRvciBzaG91bGQgYmUgYWJsZSB0byBnZXQgcGh5c2lj YWwgRVBDIHNpemUsIGFuZCBhbGwgZG9tYWluJ3MgdmlydHVhbApFUEMgc2l6ZS4gRm9yIHRoaXMg cHVycG9zZSwgd2UgY2FuIGludHJvZHVjZSAyIGFkZGl0aW9uYWwgY29tbWFuZHM6CgogICAgIyB4 bCBzZ3hpbmZvCgpXaGljaCB3aWxsIHByaW50IG91dCBwaHlzaWNhbCBFUEMgc2l6ZSwgYW5kIG90 aGVyIFNHWCBpbmZvIChzdWNoIGFzIFNHWDEsIFNHWDIsCmV0YykgaWYgbmVjZXNzYXJ5LgoKICAg ICMgeGwgc2d4bGlzdCA8ZGlkPgoKV2hpY2ggd2lsbCBwcmludCBvdXQgcGFydGljdWxhciBkb21h aW4ncyB2aXJ0dWFsIEVQQyBzaXplLCBvciBsaXN0IGFsbCB2aXJ0dWFsCkVQQyBzaXplcyBmb3Ig YWxsIHN1cHBvcnRlZCBkb21haW5zLgoKQWx0ZXJuYXRpdmVseSwgd2UgY2FuIGFsc28gZXh0ZW5k IGV4aXN0aW5nIFhMIGNvbW1hbmRzIGJ5IGFkZGluZyBuZXcgb3B0aW9uCgogICAgIyB4bCBpbmZv IC1zZ3gKCldoaWNoIHdpbGwgcHJpbnQgb3V0IHBoeXNpY2FsIEVQQyBzaXplIGFsb25nIHdpdGgg b3RoZXIgcGh5c2luZm8uIEFuZAoKICAgICMgeGwgbGlzdCA8ZGlkPiAtc2d4CgpXaGljaCB3aWxs IHByaW50IG91dCBkb21haW4ncyB2aXJ0dWFsIEVQQyBzaXplLgoKQ29tbWVudHM/CgpJbiBteSBS RkMgcGF0Y2hlcyBJIGRpZG4ndCBpbXBsZW1lbnQgdGhlIGNvbW1hbmRzIGFzIEkgZG9uJ3Qga25v dyB3aGljaAppcyBiZXR0ZXIuIEluIHRoZSBnaXRodWIgcmVwbyBJIG1lbnRpb25lZCBhdCB0aGUg YmVnaW5uaW5nLCB0aGVyZSdzIGFuIG9sZApicmFuY2ggaW4gd2hpY2ggSSBpbXBsZW1lbnRlZCAn eGwgc2d4aW5mbycgYW5kICd4bCBzZ3hsaXN0JywgYnV0IHRoZXkgYXJlCmltcGxlbWVudGVkIHZp YSBkZWRpY2F0ZWQgaHlwZXJjYWxsIGZvciBTR1gsIHdoaWNoIEkgYW0gbm90IHN1cmUgd2hldGhl ciBpcyBhCmdvb2Qgb3B0aW9uIHNvIEkgZGlkbid0IGluY2x1ZGUgaXQgaW4gbXkgUkZDIHBhdGNo ZXMuCgoyLjEuMyBOb3RpZnkgZG9tYWluJ3MgdmlydHVhbCBFUEMgYmFzZSBhbmQgc2l6ZSB0byBY ZW4KClhlbiBuZWVkcyB0byBrbm93IGd1ZXN0J3MgRVBDIGJhc2UgYW5kIHNpemUgaW4gb3JkZXIg dG8gcG9wdWxhdGUgRVBDIHBhZ2VzIGZvcgppdC4gVG9vbHN0YWNrIG5vdGlmaWVzIEVQQyBiYXNl IGFuZCBzaXplIHRvIFhlbiB2aWEgWEVOX0RPTUNUTF9zZXRfY3B1aWQuCgoyLjEuNCBMYXVuY2gg Q29udHJvbCBTdXBwb3J0ICg/KQoKWGVuIExhdW5jaCBDb250cm9sIFN1cHBvcnQgaXMgYWJvdXQg dG8gc3VwcG9ydCBydW5uaW5nIG11bHRpcGxlIGRvbWFpbnMgd2l0aAplYWNoIHJ1bm5pbmcgaXRz IG93biBMRSBzaWduZWQgYnkgZGlmZmVyZW50IG93bmVycyAoaWYgSFcgYWxsb3dzLCBleHBsYWlu ZWQKYmVsb3cpLiBBcyBleHBsYWluZWQgaW4gMS40IFNHWCBMYXVuY2ggQ29udHJvbCwgRUlOSVQg Zm9yIExFIChMYXVuY2ggRW5jbGF2ZSkKb25seSBzdWNjZWVkcyB3aGVuIFNIQTI1NihTSUdTVFJV Q1QubW9kdWx1cykgbWF0Y2hlcyBJQTMyX1NHWExFUFVCS0VZSEFTSG4sCmFuZCBFSU5JVCBmb3Ig b3RoZXIgZW5jbGF2ZXMgd2lsbCBkZXJpdmUgRUlOSVRUT0tFTiBrZXkgYWNjb3JkaW5nIHRvIApJ QTMyX1NHWExFUFVCS0VZSEFTSG4uIFRoZXJlZm9yZSwgdG8gc3VwcG9ydCB0aGlzLCBndWVzdCdz IHZpcnR1YWwKSUEzMl9TR1hMRVBVQktFWUhBU0huIG11c3QgYmUgdXBkYXRlZCB0byBwaHlpc2Nh bCBNU1JzIGJlZm9yZSBFSU5JVCAod2hpY2gKYWxzbyBtZWFucyB0aGUgcGh5c2ljYWwgSUEzMl9T R1hMRVBVQktFWUhBU0huIG5lZWQgdG8gYmUgKnVubG9ja2VkKiBpbiBCSU9TCmJlZm9yZSBib290 aW5nIHRvIE9TKS4KCkZvciBwaHlzaWNhbCBtYWNoaW5lLCBpdCBpcyBCSU9TJ3Mgd3JpdGVyJ3Mg ZGVjaXNpb24gdGhhdCB3aGV0aGVyIEJJT1Mgd291bGQKcHJvdmlkZSBpbnRlcmZhY2UgZm9yIHVz ZXIgdG8gc3BlY2lmeSBjdXN0b21lcml6ZWQgSUEzMl9TR1hMRVBVQktFWUhBU0huIChpdAppcyBk ZWZhdWx0IHRvIGRpZ2VzdCBvZiBJbnRlbCdzIHNpZ25pbmcga2V5IGFmdGVyIHJlc2V0KS4gSW4g cmVhbGl0eSwgT1MncyBTR1gKZHJpdmVyIG1heSByZXF1aXJlIEJJT1MgdG8gbWFrZSBNU1JzICp1 bmxvY2tlZCogYW5kIGFjdGl2ZWx5IHdyaXRlIHRoZSBoYXNoCnZhbHVlIHRvIE1TUnMgaW4gb3Jk ZXIgdG8gcnVuIEVJTklUIHN1Y2Nlc3NmdWxseSwgYXMgaW4gdGhpcyBjYXNlLCB0aGUgZHJpdmVy CndpbGwgbm90IGRlcGVuZCBvbiBCSU9TJ3MgY2FwYWJpbGl0eSAod2hldGhlciBpdCBhbGxvd3Mg dXNlciB0byBjdXN0b21lcml6ZQpJQTMyX1NHWExFUFVCS0VZSEFTSG4gdmFsdWUpLgoKVGhlIHBy b2JsZW0gaXMgZm9yIFhlbiwgZG8gd2UgbmVlZCBhIG5ldyBwYXJhbWV0ZXIsIHN1Y2ggYXMgJ2xl aGFzaD08U0hBMjU2PicKdG8gc3BlY2lmeSB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBndXNldCdzIHZp cnR1YWwgSUEzMl9TR1hMRVBVQktFWUhBU0huPyBBbmQgZG8Kd2UgbmVlZCBhIG5ldyBwYXJhbWV0 ZXIsIHN1Y2ggYXMgJ2xld3InIHRvIHNwZWNpZnkgd2hldGhlciBndWVzdCdzIHZpcnR1YWwgTVNS cwphcmUgbG9ja2VkIG9yIG5vdCBiZWZvcmUgaGFuZGxpbmcgdG8gZ3Vlc3QncyBPUz8KCkkgdGVu ZHMgdG8gbm90IGludHJvZHVjZSAnbGVoYXNoJywgYXMgaXQgc2VlbXMgU0dYIGRyaXZlciB3b3Vs ZCBhY3RpdmVseSB1cGRhdGUKdGhlIE1TUnMuIEFuZCBuZXcgcGFyYW1ldGVyIHdvdWxkIGFkZCBh ZGRpdGlvbmFsIGNoYW5nZXMgZm9yIHVwcGVyIGxheWVyCnNvZnR3YXJlIChzdWNoIGFzIG9wZW5z dGFjaykuIEFuZCAnbGV3cicgaXMgbm90IG5lZWRlZCBlaXRoZXIgYXMgWGVuIGNhbiBhbHdheXMK KnVubG9jayogdGhlIE1TUnMgdG8gZ3Vlc3QuCgpQbGVhc2UgZ2l2ZSBjb21tZW50cz8KCkN1cnJl bnRseSBpbiBteSBSRkMgcGF0Y2hlcyBhYm92ZSB0d28gcGFyYW1ldGVycyBhcmUgbm90IGltcGxl bWVudGVkLgpYZW4gaHlwZXJ2aXNvciB3aWxsIGFsd2F5cyAqdW5sb2NrKiB0aGUgTVNScy4gV2hl dGhlciB0aGVyZSBpcyAnbGVoYXNoJwpwYXJhbWV0ZXIgb3Igbm90IGRvZXNuJ3QgaW1wYWN0IFhl biBoeXBlcnZpc29yJ3MgZW11bGF0aW9uIG9mCklBMzJfU0dYTEVQVUJLRVlIQVNIbi4gU2VlIGJl bG93IFhlbiBoeXBlcnZpc29yIGNoYW5nZXMgZm9yIGRldGFpbHMuCgoyLjIgSGlnaCBMZXZlbCBY ZW4gSHlwZXJ2aXNvciBDaGFuZ2VzOgoKMi4yLjEgRVBDIE1hbmFnZW1lbnQgKD8pCgpYZW4gaHlw ZXJ2aXNvciBuZWVkcyB0byBkZXRlY3QgU0dYLCBkaXNjb3ZlciBFUEMsIGFuZCBtYW5hZ2UgRVBD IGJlZm9yZQpzdXBwb3J0aW5nIFNHWCB0byBndWVzdC4gRVBDIGlzIGRldGVjdGVkIHZpYSBTR1gg Q1BVSUQgMHgxMi4weDIuIEl0J3MgcG9zc2libGUKdGhhdCB0aGVyZSBhcmUgbXVsdGlwbGUgRVBD IHNlY3Rpb25zIChlbnVtZXJhdGVkIHZpYSBzdWItbGVhdmVzIDB4MyBhbmQgc28gb24sCnVudGls IGludmFpZCBFUEMgaXMgcmVwb3J0ZWQpLCBidXQgdGhpcyBpcyBvbmx5IHRydWUgb24gbXVsdGlw bGUtc29ja2V0IHNlcnZlcgptYWNoaW5lcy4gRm9yIHNlcnZlciBtYWNoaW5lcyB0aGVyZSBhcmUg YWRkaXRpb25hbCB0aGluZ3MgYWxzbyBuZWVkcyB0byBiZSBkb25lLApzdWNoIGFzIE5VTUEgRVBD LCBzY2hlZHVsaW5nLCBldGMuIFdlIHdpbGwgc3VwcG9ydCBzZXJ2ZXIgbWFjaGluZSBpbiB0aGUg ZnV0dXJlCmJ1dCBjdXJyZW50bHkgd2Ugb25seSBzdXBwb3J0IG9uZSBFUEMuCgpFUEMgaXMgcmVw b3J0ZWQgYXMgcmVzZXJ2ZWQgbWVtb3J5IChzbyBpdCBpcyBub3QgcmVwb3J0ZWQgYXMgbm9ybWFs IG1lbW9yeSkuCkVQQyBtdXN0IGJlIG1hbmFnZWQgaW4gNEsgcGFnZXMuIENQVSBoYXJkd2FyZSB1 c2VzIEVQQ00gdG8gdHJhY2sgc3RhdHVzIG9mIGVhY2gKRVBDIHBhZ2VzLiBYZW4gbmVlZHMgdG8g bWFuYWdlIEVQQyBhbmQgcHJvdmlkZSBmdW5jdGlvbnMgdG8sIGllLCBhbGxvYyBhbmQgZnJlZQpF UEMgcGFnZXMgZm9yIGd1ZXN0LgoKVGhlcmUgYXJlIHR3byB3YXlzIHRvIG1hbmFnZSBFUEM6IE1h bmFnZSBFUEMgc2VwYXJhdGVseTsgb3IgSW50ZWdyYXRlIGl0IHRvCmV4aXN0aW5nIG1lbW9yeSBt YW5hZ2VtZW50IGZyYW1ld29yay4KCkl0IGlzIGVhc3kgdG8gbWFuYWdlIEVQQyBzZXBhcmF0ZWx5 LCBhcyBjdXJyZW50bHkgRVBDIGlzIHByZXR0eSBzbWFsbCAofjEwME1CKSwKYW5kIHdlIGNhbiBl dmVuIHB1dCB0aGVtIGluIGEgc2luZ2xlIGxpc3QuIEhvd2V2ZXIgaXQgaXMgbm90IGZsZXhpYmxl LCBmb3IKZXhhbXBsZSwgeW91IHdpbGwgaGF2ZSB0byB3cml0ZSBuZXcgYWxnb3JpdGhtcyB3aGVu IEVQQyBiZWNvbWVzIGxhcmdlciwgZXgsIEdCLgpBbmQgeW91IGhhdmUgdG8gd3JpdGUgbmV3IGNv ZGUgdG8gc3VwcG9ydCBOVU1BIEVQQyAoYWx0aG91Z2ggdGhpcyB3aWxsIG5vdCBjb21lCmluIHNo b3J0IHRpbWUpLgoKSW50ZWdyYXRpbmcgRVBDIHRvIGV4aXN0aW5nIG1lbW9yeSBtYW5hZ2VtZW50 IGZyYW1ld29yayBzZWVtcyBtb3JlIHJlYXNvbmFibGUsCmFzIGluIHRoaXMgd2F5IHdlIGNhbiBy ZXN1bWUgbWVtb3J5IG1hbmFnZW1lbnQgZGF0YSBzdHJ1Y3R1cmVzL2FsZ29yaXRobXMsIGFuZApp dCB3aWxsIGJlIG1vcmUgZmxleGlibGUgdG8gc3VwcG9ydCBsYXJnZXIgRVBDIGFuZCBwb3RlbnRp YWxseSBOVU1BIEVQQy4gQnV0Cm1vZGlmeWluZyBNTSBmcmFtZXdvcmsgaGFzIGEgaGlnaGVyIHJp c2sgdG8gYnJlYWsgZXhpc3RpbmcgbWVtb3J5IG1hbmFnZW1lbnQKY29kZSAocG90ZW50aWFsbHkg bW9yZSBidWdzKS4KCkluIG15IFJGQyBwYXRjaGVzIGN1cnJlbnRseSB3ZSBjaG9vc2UgdG8gbWFu YWdlIEVQQyBzZXBhcmF0ZWx5LiBBIG5ldwpzdHJ1Y3R1cmUgZXBjX3BhZ2UgaXMgYWRkZWQgdG8g cmVwcmVzZW50IGEgc2luZ2xlIDRLIEVQQyBwYWdlLiBBIHdob2xlIGFycmF5Cm9mIHN0cnVjdCBl cGNfcGFnZSB3aWxsIGJlIGFsbG9jYXRlZCBkdXJpbmcgRVBDIGluaXRpYWxpemF0aW9uLCBzbyB0 aGF0IGdpdmVuCnRoZSBvdGhlciwgb25lIG9mIFBGTiBvZiBFUEMgcGFnZSBhbmQgJ3N0cnVjdCBl cGNfcGFnZScgY2FuIGJlIGdvdCBieSBhZGRpbmcKb2Zmc2V0LgoKQnV0IG1heWJlIGludGVncmF0 aW5nIEVQQyB0byBNTSBmcmFtZXdvcmsgaXMgbW9yZSByZWFzb25hYmxlLiBDb21tZW50cz8KCjIu Mi4yIEVQQyBWaXJ0dWFsaXphdGlvbiAoPykKClRoaXMgcGFydCBpcyBob3cgdG8gcG9wdWxhdGUg RVBDIGZvciBndWVzdHMuIFdlIGhhdmUgMyBjaG9pY2VzOgogICAgLSBTdGF0aWMgUGFydGl0aW9u aW5nCiAgICAtIE92ZXJzdWJzY3JpcHRpb24KICAgIC0gQmFsbG9vbmluZwoKU3RhdGljIFBhcnRp dGlvbmluZyBtZWFucyBhbGwgRVBDIHBhZ2VzIHdpbGwgYmUgYWxsb2NhdGVkIGFuZCBtYXBwZWQg dG8gZ3Vlc3QKd2hlbiBpdCBpcyBjcmVhdGVkLCBhbmQgdGhlcmUncyBubyBydW50aW1lIGNoYW5n ZSBvZiBwYWdlIHRhYmxlIG1hcHBpbmdzIGZvciBFUEMKcGFnZXMuIE92ZXJzdWJzY3JpcHRpb24g bWVhbnMgWGVuIGh5cGVydmlzb3Igc3VwcG9ydHMgRVBDIHBhZ2Ugc3dhcHBpbmcgYmV0d2Vlbgpk b21haW5zLCBtZWFuaW5nIFhlbiBpcyBhYmxlIHRvIGV2aWN0IEVQQyBwYWdlIGZyb20gYW5vdGhl ciBkb21haW4gYW5kIGFzc2lnbiBpdAp0byB0aGUgZG9tYWluIHRoYXQgbmVlZHMgdGhlIEVQQy4g V2l0aCBvdmVyc3Vic2NyaXB0aW9uLCBFUEMgY2FuIGJlIGFzc2lnbmVkIHRvCmRvbWFpbiBvbiBk ZW1hbmQsIHdoZW4gRVBUIHZpb2xhdGlvbiBoYXBwZW5zLiBCYWxsb29uaW5nIGlzIHNpbWlsYXIg dG8gbWVtb3J5CmJhbGxvb25pbmcuIEl0IGlzIGJhc2ljYWxseSAiU3RhdGljIFBhcnRpdGlvbmlu ZyIgKyAiQmFsbG9vbiBkcml2ZXIiIGluIGd1ZXN0LgoKU3RhdGljIFBhcnRpdGlvbmluZyBpcyB0 aGUgZWFzaWVzdCB3YXkgaW4gdGVybXMgb2YgaW1wbGVtZW50YXRpb24sIGFuZCB0aGVyZQp3aWxs IGJlIG5vIGh5cGVydmlzb3Igb3ZlcmhlYWQgKGV4Y2VwdCBFUFQgb3ZlcmhlYWQgb2YgY291cnNl KSwgYmVjYXVzZSBpbgoiU3RhdGljIHBhcnRpdGlvbmluZyIsIHRoZXJlIGlzIG5vIEVQVCB2aW9s YXRpb24gZm9yIEVQQywgYW5kIFhlbiBkb2Vzbid0IG5lZWQKdG8gdHVybiBvbiBFTkNMUyBWTUVY SVQgZm9yIGd1ZXN0IGFzIEVOQ0xTIHJ1bnMgcGVyZmVjdGx5IGluIG5vbi1yb290IG1vZGUuCgpC YWxsb29uaW5nIGlzICJTdGF0aWMgUGFydGl0aW9uaW5nIiArICJCYWxsb29uIGRyaXZlciIgaW4g Z3Vlc3QuIExpa2UgIlN0YXRpYwpQYXJhdGl0aW9uaW5nIiwgYmFsbG9vbmluZyBkb2Vzbid0IG5l ZWQgdG8gdHVybiBvbiBFTkNMUyBWTUVYSVQsIGFuZCBkb2Vzbid0CmhhdmUgRVBUIHZpb2xhdGlv biBmb3IgRVBDIGVpdGhlci4gVG8gc3VwcG9ydCBiYWxsb29uaW5nLCB3ZSBuZWVkIGJhbGxvb25p bmcKZHJpdmVyIGluIGd1ZXN0IHRvIGlzc3VlIGh5cGVyY2FsbCB0byBnaXZlIHVwIG9yIHJlY2xh aW0gRVBDIHBhZ2VzLiBJbiB0ZXJtcyBvZgpoeXBlcmNhbGwsIHdlIGhhdmUgdHdvIGNob2ljZXM6 IDEpIEFkZCBuZXcgaHlwZXJjYWxsIGZvciBFUEMgYmFsbG9vbmluZzsgMikKVXNpbmcgZXhpc3Rp bmcgWEVOTUVNX3tpbmNyZWFzZS9kZWNyZWFzZX1fcmVzZXJ2YXRpb24gd2l0aCBuZXcgbWVtb3J5 IGZsYWcsIGllLApYRU5NRU1GX2VwYy4gSSdsbCBkaXNjdXNzIG1vcmUgcmVnYXJkaW5nIHRvIGFk ZGluZyBkZWRpY2F0ZWQgaHlwZXJjYWxsIG9yIG5vdApsYXRlci4KCk92ZXJzdWJzY3JpcHRpb24g bG9va3MgbmljZSBidXQgaXQgcmVxdWlyZXMgbW9yZSBjb21wbGljYXRlZCBpbXBsZW1ldGF0aW9u LgpGaXJzdGx5LCBhcyBleHBsYWluZWQgaW4gMS4zLjMgRVBDIEV2aWN0aW9uICYgUmVsb2FkLCB3 ZSBuZWVkIHRvIGZvbGxvdyBzcGVjaWZpYwpzdGVwcyB0byBldmljdCBFUEMgcGFnZXMsIGFuZCBp biBvcmRlciB0byBkbyB0aGF0LCBiYXNpY2FsbHkgWGVuIG5lZWRzIHRvIHRyYXAKRU5DTFMgZnJv bSBndWVzdCBhbmQga2VlcCB0cmFjayBvZiBFUEMgcGFnZSBzdGF0dXMgYW5kIGVuY2xhdmUgaW5m byBmcm9tIGFsbApndWVzdC4gVGhpcyBpcyBiZWNhdXNlOgogICAgLSBUbyBldmljdCByZWd1bGFy IEVQQyBwYWdlLCBYZW4gbmVlZHMgdG8ga25vdyBTRUNTIGxvY2F0aW9uCiAgICAtIFhlbiBuZWVk cyB0byBrbm93IEVQQyBwYWdlIHR5cGU6IGV2aWN0aW5nIHJlZ3VsYXIgRVBDIGFuZCBldmljdGlu ZyBTRUNTLAogICAgICBWQSBwYWdlIGhhdmUgZGlmZmVyZW50IHN0ZXBzLgogICAgLSBYZW4gbmVl ZHMgdG8ga25vdyBFUEMgcGFnZSBzdGF0dXM6IHdoZXRoZXIgdGhlIHBhZ2UgaXMgYmxvY2tlZCBv ciBub3QuCgpUaG9zZSBpbmZvIGNhbiBvbmx5IGJlIGdvdCBieSB0cmFwcGluZyBFTkNMUyBmcm9t IGd1ZXN0LCBhbmQgcGFyc2luZyBpdHMKcGFyYW1ldGVycyAodG8gaWRlbnRpZnkgU0VDUyBwYWdl LCBldGMpLiBQYXJzaW5nIEVOQ0xTIHBhcmFtZXRlcnMgbWVhbnMgd2UgbmVlZAp0byBrbm93IHdo aWNoIEVOQ0xTIGxlYWYgaXMgYmVpbmcgdHJhcHBlZCwgYW5kIHdlIG5lZWQgdG8gdHJhbnNsYXRl IGd1ZXN0J3MKdmlydHVhbCBhZGRyZXNzIHRvIGdldCBwaHlzaWNhbCBhZGRyZXNzIGluIG9yZGVy IHRvIGxvY2F0ZSBFUEMgcGFnZS4gQW5kIG9uY2UKRU5DTFMgaXMgdHJhcHBlZCwgd2UgaGF2ZSB0 byBlbXVsYXRlIEVOQ0xTIGluIFhlbiwgd2hpY2ggbWVhbnMgd2UgbmVlZCB0bwpyZWNvbnN0cnVj dCBFTkNMUyBwYXJhbWV0ZXJzIGJ5IHJlbWFwcGluZyBhbGwgZ3Vlc3QncyB2aXJ0dWFsIGFkZHJl c3MgdG8gWGVuJ3MKdmlydHVhbCBhZGRyZXNzIChndmEtPmdwYS0+cGEtPnhlbl92YSksIGFzIEVO Q0xTIGFsd2F5cyB1c2UgKmVmZmVjdGl2ZSBhZGRyZXNzKgp3aGljaCBpcyBhYmxlIHRvIGJlIHRy YXNsYXRlZCBieSBwcm9jZXNzb3Igd2hlbiBydW5uaW5nIEVOQ0xTLgoKICAgIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAg ICAgICAgICAgICB8ICAgRU5DTFMgICB8CiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgfCAgICAg ICAgICAvfFwKICAgIEVOQ0xTIFZNRVhJVHwgICAgICAgICAgIHwgVk1FTlRSWQogICAgICAgICAg ICAgICAgfCAgICAgICAgICAgfAogICAgICAgICAgICAgICBcfC8gICAgICAgICAgfAoKCQkxKSBw YXJzZSBFTkNMUyBwYXJhbWV0ZXJzCgkJMikgcmVjb25zdHJ1Y3QocmVtYXApIGd1ZXN0J3MgRU5D TFMgcGFyYW1ldGVycwoJCTMpIHJ1biBFTkNMUyBvbiBiZWhhbGYgb2YgZ3Vlc3QgKGFuZCBza2lw IEVOQ0xTKQoJCTQpIG9uIHN1Y2Nlc3MsIHVwZGF0ZSBFUEMvZW5jbGF2ZSBpbmZvLCBvciBpbmpl Y3QgZXJyb3IKCkFuZCBYZW4gbmVlZHMgdG8gbWFpbnRhaW4gZWFjaCBFUEMgcGFnZSdzIHN0YXR1 cyAodHlwZSwgYmxvY2tlZCBvciBub3QsIGluCmVuY2xhdmUgb3Igbm90LCBldGMpLiBYZW4gYWxz byBuZWVkcyB0byBtYWludGFpbiBhbGwgRW5jbGF2ZSdzIGluZm8gZnJvbSBhbGwKZ3Vlc3RzLCBp biBvcmRlciB0byBmaW5kIHRoZSBjb3JyZWN0IFNFQ1MgZm9yIHJlZ3VsYXIgRVBDIHBhZ2UsIGFu ZCBlbmNsYXZlJ3MKbGluZWFyIGFkZHJlc3MgYXMgd2VsbC4KClNvIGluIGdlbmVyYWwsICJTdGF0 aWMgUGFydGl0aW9uaW5nIiBoYXMgc2ltcGxlc3QgaW1wbGVtZW50YXRpb24sIGJ1dCBvYnZpb3Vz bHkKbm90IHRoZSBiZXN0IHdheSB0byB1c2UgRVBDIGVmZmljaWVudGx5OyAiQmFsbG9vbmluZyIg aGFzIGFsbCBwcm9zIG9mIFN0YXRpYwpQYXJ0aXRpb25pbmcgYnV0IHJlcXVpZXMgZ3Vlc3QgYmFs bG9vbiBkcml2ZXI7ICJPdmVyc3Vic2NyaXB0aW9uIiBpcyBiZXN0IGluCnRlcm1zIG9mIGZsZXhp YmlsaXR5IGJ1dCByZXF1aXJlcyBjb21wbGljYXRlZCBoeXBlcnZpc29yIGltcGxlbWV0YXRpb24u CgpXZSBoYXZlIGltcGxlbWVudGVkICJTdGF0aWMgUGFydGl0aW9uaW5nIiBpbiBSRkMgcGF0Y2hl cywgYnV0IG5lZWRzIHlvdXIKZmVlZGJhY2sgb24gd2hldGhlciBpdCBpcyBlbm91Z2guIElmIG5v dCwgd2hpY2ggb25lIHNob3VsZCB3ZSBkbyBhdCBuZXh0IHN0YWdlCi0tIEJhbGxvb25pbmcgb3Ig T3ZlcnN1YnNjcmlwdGlvbi4gSU1PIEJhbGxvb25pbmcgbWF5IGJlIGdvb2QgZW5vdWdoLCBnaXZl biBmYWN0CnRoYXQgY3VycmVudGx5IG1lbW9yeSBpcyBhbHNvICJTdGF0aWMgUGFydGl0aW9uaW5n IiArICJCYWxsb29uaW5nIi4KCkNvbW1lbnRzPwoKMi4yLjMgUG9wdWxhdGUgRVBDIGZvciBHdWVz dAoKVG9vbHN0YWNrIG5vdGlmaWVzIFhlbiBhYm91dCBkb21haW4ncyBFUEMgYmFzZSBhbmQgc2l6 ZSBieSBYRU5fRE9NQ1RMX3NldF9jcHVpZCwKc28gY3VycmVudGx5IFhlbiBwb3B1bGF0ZXMgYWxs IEVQQyBwYWdlcyBmb3IgZ3Vlc3QgaW4gWEVOX0RPTUNUTF9zZXRfY3B1aWQsCnBhcnRpY3VsYXJs eSwgaW4gaGFuZGxpbmcgWEVOX0RPTUNUTF9zZXRfY3B1aWQgZm9yIENQVUlELjB4MTIuMHgyLiBP bmNlIFhlbgpjaGVja3MgdGhlIHZhbHVlcyBwYXNzZWQgZnJvbSB0b29sc3RhY2sgaXMgdmFsaWQs IFhlbiB3aWxsIGFsbG9jYXRlIGFsbCBFUEMKcGFnZXMgYW5kIHNldHVwIEVQVCBtYXBwaW5ncyBm b3IgZ3Vlc3QuCgoyLjIuNCBOZXcgRGVkaWNhdGVkIEh5cGVyY2FsbCAoPykKClNvIGZhciBmb3Ig YWxsIHRoZSBjaGFuZ2VzIG1lbnRpb25lZCBhYm92ZSwgaWYgd2l0aG91dCBhIGRlZGljYXRlZCBu ZXcKaHlwZXJjYWxsLCB3ZSBoYXZlIHRvIGltcGxlbWVudCB0aG9zZSBjaGFuZ2VzIGluOgoKICAg IC0geGwgc2d4aWZvIChvciB4bCBpbmZvIC1zZ3gpCgogICAgVG9vbHN0YWNrIGNhbiBkbyB0aGlz IGJ5IHJ1bm5pbmcgU0dYIENQVUlEIGRpcmVjdGx5LCBhbG9uZyB3aXRoIGNoZWNraW5nCiAgICBo b3N0IGNwdSBmZWF0dXJlc2V0LgoKICAgIC0geGwgc2d4bGlzdCAob3IgeGwgbGlzdCAtc2d4KQoK ICAgIFRoaXMgaXMgbm90IHF1aXRlIHN0cmFpZ2h0Zm9yd2FyZC4gTG9va3Mgd2UgaGF2ZSB0byBl eHRlbmQKICAgIHhlbl9kb21jdGxfZ2V0ZG9tYWluaW5mby4gSG93ZXZlciBTR1ggaXMgSW50ZWwg c3BlY2lmaWMgZmVhdHVyZSwgc28gSSBhbQogICAgbm90IHN1cmUgaXQncyBhIGdvb2QgaWRlYSB0 byBleHRlbmQgeGVuX2RvbWN0bF9nZXRkb21haW5pbmZvLgoKICAgIC0gIFBvcHVsYXRlIEVQQyBm b3IgZ3Vlc3QKCiAgICBJbiBYRU5fRE9NQ1RMX3NldF9jcHVpZCwgWGVuIHBvcHVsYXRlcyBFUEMg cGFnZXMgZm9yIGd1ZXN0IGFmdGVyIHJlY2VpdmluZwogICAgRVBDIGJhc2UgYW5kIHNpemUgZnJv bSB0b29sc3RhY2suCgogICAgLSBQb3RlbnRpYWwgRVBDIEJhbGxvb25pbmcKCiAgICBOZWVkIHRv IGFkZCBuZXcgWEVOTUVNRl9lcGMgYW5kIHVzZSBleGlzdGluZwogICAgWEVOTUVNX3tpbmNyZWFz ZS9kZWNyZWFzZX1fcmVzZXJ2YXRpb24uCgpXaXRoIG5ldyBoeXBlcmNhbGwgZm9yIFNHWCAoaWUs IFhFTl9zZ3hfb3ApLCBhbGwgb2YgYWJvdmUgY2FuIGJlIGNvbnNvbGlkYXRlZAppbnRvIHRoZSBo eXBlcmNhbGwuIFdlIGNhbiBhbHNvIGV4dGVuZCBpdCB0byBtb3JlIGdlbmVyaWMgaHlwZXJjYWxs IGZvciBJbnRlbApwbGF0Zm9ybSBnZW5yYWxseSAoaWUsIFhFTl9pbnRlbF9vcCkuIEZvciBleGFt cGxlLCB0aGUgbmV3IGh5cGVyY2FsbCB3b3VsZCBsb29rCmxpa2U6CgogICAgI2RlZmluZSBYRU5f SU5URUxfU0dYX3BoeXNpbmZvICAweDEKICAgIHN0cnVjdCB4ZW5fc2d4X3BoeXNpbmZvIHsKICAg ICAgICAvKiBPVVQgKi8KICAgICAgICB1bnNpZ25lZCBsb25nIHRvdGFsX2VwY19wYWdlczsKICAg ICAgICB1bnNpZ25lZCBsb25nIGZyZWVfZXBjX3BhZ2VzOwogICAgfTsKICAgIHR5cGVkZWYgc3Ry dWN0IHhlbl9zZ3hfcGh5c2luZm8geGVuX3NneF9waHlzaW5mb190OwogICAgREVGSU5FX1hFTl9H VUVTVF9IQU5ETEUoeGVuX3NneF9waHlzaW5mb190KTsKCiAgICAjZGVmaW5lIFhFTl9JTlRFTF9T R1hfc2V0dXBfZXBjIDB4MgogICAgc3RydWN0IHhlbl9zZ3hfc2V0dXBfZXBjIHsKICAgICAgICAv KiBJTiAqLwogICAgICAgIGRvbWlkX3QgZG9taWQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyBlcGNf YmFzZV9nZm47CiAgICAgICAgdW5zaWduZWQgbG9uZyB0b3RhbF9lcGNfcGFnZXM7CiAgICB9Owog ICAgdHlwZWRlZiBzdHJ1Y3QgeGVuX3NneF9zZXR1cF9lcGMgeGVuX3NneF9zZXR1cF9lcGNfdDsK ICAgIERFRklORV9YRU5fR1VFU1RfSEFORExFKHhlbl9zZ3hfc2V0dXBfZXBjX3QpOwoKICAgICNk ZWZpbmUgWEVOX0lOVEVMX1NHWF9kb21pbmZvICAgMHgzCiAgICBzdHJ1Y3QgeGVuX3NneF9kb21p bmZvIHsKICAgICAgICAvKiBJTiAqLwogICAgICAgIGRvbWlkX3QgZG9taWQ7CiAgICAgICAgLyog T1VUICovCiAgICAgICAgdW5zaWduZWQgbG9uZyBlcGNfYmFzZV9nZm47CiAgICAgICAgdW5zaWdu ZWQgbG9uZyB0b3RhbF9lcGNfcGFnZXM7CiAgICB9OwogICAgREVGSU5FX1hFTl9HVUVTVF9IQU5E TEUoeGVuX3NneF9kb21pbmZvKTsKCiAgICBzdHJ1Y3QgeGVuX3NneF9vcCB7CiAgICAgICAgLyog WEVOX0lOVEVMX1NHWF8qICovCiAgICAgICAgaW50IGNtZDsKICAgICAgICB1bmlvbiB7CiAgICAg ICAgICAgIHN0cnVjdCB4ZW5fc2d4X3BoeXNpbmZvIHBoeXNpbmZvOwogICAgICAgICAgICBzdHJ1 Y3QgeGVuX3NneF9zZXR1cF9lcGMgc2V0dXBfZXBjOwogICAgICAgICAgICBzdHJ1Y3QgeGVuX3Nn eF9kb21pbmZvIGRvbWluZm87CiAgICAgICAgfSB1OwogICAgfTsgICAgCiAgICB0eXBlZGVmIHN0 cnVjdCB4ZW5fc2d4X29wIHhlbl9zZ3hfb3BfdDsKICAgIERFRklORV9YRU5fR1VFU1RfSEFORExF KHhlbl9zZ3hfb3ApOwoKICAgIC8qIE5ldyBhcmNoIHNwZWNpZmljIGh5cGVyY2FsbCBmb3IgSW50 ZWwgcGxhdGZvcm0gc3BlY2lmaWMgb3BlcmF0aW9ucywKICAgICAqIF9fSFlQRVJWSVNPUl9hcmNo XzAgaXMgdXNlZCBieSBYZW4geDg2IG1hY2hpbmUgY2hlY2suLi4gKi8KICAgICNkZWZpbmUgX19I WVBFUlZJU09SX2ludGVsX29wICBfX0hZUEVSVklTT1JfYXJjaF8xCiAgICAvKiBDdXJyZW50bHkg b25seSBTR1ggdXNlcyB0aGlzICovCiAgICAjZGVmaW5lIFhFTl9JTlRFTF9PUF9zZ3ggICAgICAg ICAgICAgICAgKDB4MSA8PCAxKQogICAgc3RydWN0IHhlbl9pbnRlbF9vcCB7CiAgICAgICAgaW50 IGNtZDsgICAgLyogWEVOX0lOVEVMX09QXyoqKiAqLwogICAgICAgIHVuaW9uIHsKICAgICAgICAg ICAgc3RydWN0IHhlbl9zZ3hfb3Agc2d4X29wOwogICAgICAgIH0gdTsKICAgIH0KICAgIHR5cGVk ZWYgc3RydWN0IHhlbl9pbnRlbF9vcCB4ZW5faW50ZWxfb3BfdDsKICAgIERFRklORV9YRU5fR1VF U1RfSEFORExFKHhlbl9pbnRlbF9vcF90KTsKCgpJbiBteSBSRkMgcGF0Y2hlcywgdGhlIG5ldyBo eXBlcmNhbGwgaXMgbm90IGltcGxlbWVudGVkIGFzIEkgYW0gbm90IHN1cmUKd2hldGhlciBpdCBp cyBhIGdvb2QgaWRlYS4KCkNvbW1lbnRzPwoKMi4yLjUgTGF1bmNoIENvbnRyb2wgU3VwcG9ydAoK VG8gc3VwcG9ydCBydW5uaW5nIG11bHRpcGxlIGRvbWFpbnMgd2l0aCBlYWNoIHJ1bm5pbmcgaXRz IG93biBMRSBzaWduZWQgYnkKZGlmZmVyZW50IG93bmVycywgcGh5c2ljYWwgbWFjaGluZSdzIEJJ T1MgbXVzdCBsZWF2ZSBJQTMyX1NHWExFUFVCS0VZSEFTSG4KKnVubG9ja2VkKiBiZWZvcmUgaGFu ZGluZyB0byBYZW4uIFhlbiB3aWxsIHRyYXAgZG9tYWluJ3Mgd3JpdGUgdG8KSUEzMl9TR1hMRVBV QktFWUhBU0huIGFuZCBrZWVwIHRoZSB2YWx1ZSBpbiB2Y3B1IGludGVybmFsbHksIGFuZCB1cGRh dGUgdGhlCnZhbHVlIHRvIHBoeXNpY2FsIE1TUnMgd2hlbiB2Y3B1IGlzIHNjaGVkdWxlZCBpbi4g VGhpcyBjYW4gZ3VhcmFudGVlIHRoYXQKd2hlbiBFSU5JVCBydW5zIGluIGd1ZXN0LCBndWVzdCdz IHZpcnR1YWwgSUEzMl9TR1hMRVBVQktFWUhBU0huIGhhdmUgYmVlbgp3cml0dGVuIHRvIHBoeXNp Y2FsIE1TUnMuCgpTR1hfTEFVTkNIX0NPTlRST0xfRU5BQkxFIGJpdCB3aWxsIGFsd2F5cyBiZSBz ZXQgaW4gZ3Vlc3QncwpJQTMyX0ZFQVRVUkVfQ09OVFJPTCBNU1IgKHNlZSAyLjEuNCBMYXVuY2gg Q29udHJvbCBTdXBwb3J0KS4KCklmIHBoeXNpY2FsIElBMzJfU0dYTEVQVUJLRVlIQVNIbiBhcmUg KmxvY2tlZCogaW4gbWFjaGluZSdzIEJJT1MsIHRoZW4gb25seSBNU1IKcmVhZCBpcyBhbGxvd2Vk IGZyb20gZ3Vlc3QsIGFuZCBYZW4gd2lsbCBpbmplY3QgZXJyb3IgZm9yIGd1ZXN0J3MgTVNSIHdy aXRlcy4KCklmIENQVUlELjB4Ny4weDA6RUNYLlNHWF9MQVVIQ05fQ09OVFJPTCBpcyBub3QgcHJl c2VudCwgdGhlbiB0aGlzIGZlYXR1cmUgd2lsbApub3QgYmUgZXhwb3NlZCB0byBndWVzdCBhcyB3 ZWxsLCBhbmQgU0dYX0xBVU5DSF9DT05UUk9MX0VOQUJMRSBiaXQgaXMgc2V0IHRvIDAKKGFzIGl0 IGlzIGludmFsaWQpLgoKMi4yLjYgQ1BVSUQgRW11bGF0aW9uCgpNb3N0IG9mIG5hdGl2ZSBTR1gg Q1BVSUQgaW5mbyBjYW4gYmUgZXhwb3NlZCB0byBndWVzdCwgZXhwZWN0IGJlbG93IHR3byBwYXJ0 czoKICAgIC0gU3ViLWxlYWYgMHgyIG5lZWRzIHRvIHJlcG9ydCBkb21haW4ncyB2aXJ0dWFsIEVQ QyBiYXNlIGFuZCBzaXplLCBpbnN0ZWFkCiAgICAgIG9mIHBoeXNpY2FsIEVQQyBpbmZvLgogICAg LSBTdWItbGVhZiAweDEgbmVlZHMgdG8gYmUgY29uc2lzdGVudCB3aXRoIGd1ZXN0J3MgWENSMC4g Rm9yIHRoZSByZWFzb24gb2YKICAgICAgdGhpcyBwYXJ0IHBsZWFzZSByZWZlciB0byAxLjUuMiBJ bnRlcmFjdGlvbiB3aXRoIFhTQVZFLgoKMi4yLjcgTVNSIEVtdWxhdGlvbgoKU0dYX0VOQUJMRSBp dCBpbiBJQTMyX0ZFQVRVUkVfQ09OVFJPTCBpcyBhbHdheXMgc2V0IGlmIFNHWCBpcyBleHBvc2Vk IHRvIGd1ZXN0LApTR1hfTEFVTkNIX0NPTlRST0xfRU5BQkxFIGJpdCBpcyBoYW5kbGVkIGFzIGlu IDIuMi40LiBBbnkgd3JpdGUgZnJvbSBndWVzdCB0bwpJQTMyX0ZFQVRVUkVfQ09OVFJPTCBpcyBp Z25vcmVkLgoKSUEzMl9TR1hMRVBVQktFWUhBU0huIGVtdWxhdGlvbiBpcyBkZXNjcmliZWQgaW4g Mi4yLjQuCgoyLjIuOCBFUFQgVmlvbGF0aW9uICYgRU5DTFMgVHJhcHBpbmcgSGFuZGxpbmcKCk9u bHkgbmVlZGVkIHdoZW4gWGVuIHN1cHBvcnRzIEVQQyBPdmVyc3Vic2NyaXB0aW9uLCBhcyBleHBs YWluZWQgYWJvdmUuCgoyLjIuOSBHdWVzdCBTdXNwZW5kICYgUmVzdW1lCgpPbiBoYXJkd2FyZSwg RVBDIGlzIGRlc3Ryb3llZCB3aGVuIHBvd2VyIGdvZXMgdG8gUzMtUzUuIFNvIFhlbiB3aWxsIGRl c3Ryb3kKZ3Vlc3QncyBFUEMgd2hlbiBndWVzdCdzIHBvd2VyIGdvZXMgaW50byBTMy1TNS4gQ3Vy cmVudGx5IFhlbiBpcyBub3RpZmllZCBieQpRZW11IGluIHRlcm1zIG9mIFMgU3RhdGUgY2hhbmdl IHZpYSBIVk1fUEFSQU1fQUNQSV9TX1NUQVRFLCB3aGVyZSBYZW4gd2lsbApkZXN0cm95IEVQQyBp ZiBTIFN0YXRlIGlzIFMzLVM1LgoKU3BlY2lmaWNhbGx5LCBYZW4gd2lsbCBydW4gRVJFTU9WRSBm b3IgZ3Vlc3QncyBlYWNoIEVQQyBwYWdlLCBhcyBndWVzdCBtYXkKbm90IGhhbmRsZSBFUEMgc3Vz cGVuZCAmIHJlc3VtZSBjb3JyZWN0bHksIGluIHdoaWNoIGNhc2UgcGh5c2ljYWxseSBndWVzdCdz IEVQQwpwYWdlcyBtYXkgc3RpbGwgYmUgdmFsaWQsIHNvIFhlbiBuZWVkcyB0byBydW4gRVJFTU9W RSB0byBtYWtlIHN1cmUgYWxsIEVQQwpwYWdlcyBhcmUgYmVjb21pbmcgaW52YWxpZC4gT3RoZXJ3 aXNlIGZ1cnRoZXIgb3BlcmF0aW9uIGluIGd1ZXN0IG9uIEVQQyBtYXkKZmF1bHQgYXMgaXQgYXNz dW1lcyBhbGwgRVBDIHBhZ2VzIGFyZSBpbnZhbGlkIGFmdGVyIGd1ZXN0IGlzIHJlc3VtZWQuCgpG b3IgU0VDUyBwYWdlLCBFUkVNT1ZFIG1heSBmYXVsdCB3aXRoIFNHWF9DSElMRF9QUkVTRU5ULCBp biB3aGljaCBjYXNlIFhlbiB3aWxsCmtlZXAgdGhpcyBTRUNTIHBhZ2UgaW50byBhIGxpc3QsIGFu ZCBjYWxsIEVSRU1PVkUgZm9yIHRoZW0gYWdhaW4gYWZ0ZXIgYWxsIEVQQwpwYWdlcyBoYXZlIGJl ZW4gY2FsbGVkIHdpdGggRVJFTU9WRS4gVGhpcyB0aW1lIHRoZSBFUkVNT1ZFIG9uIFNFQ1Mgd2ls bCBzdWNjZWVkCmFzIGFsbCBjaGlsZHJlbiAocmVndWxhciBFUEMgcGFnZXMpIGhhdmUgYWxyZWFk eSBiZWVuIHJlbW92ZWQuCgoyLjIuMTAgRGVzdHJveWluZyBEb21haW4KCk5vcm1hbGx5IFhlbiBq dXN0IGZyZWVzIGFsbCBFUEMgcGFnZXMgZm9yIGRvbWFpbiB3aGVuIGl0IGlzIGRlc3Ryb3llZC4g QnV0IFhlbgp3aWxsIGFsc28gZG8gRVJFTU9WRSBvbiBhbGwgZ3Vlc3QncyBFUEMgcGFnZXMgKGRl c2NyaWJlZCBpbiBhYm92ZSAyLjIuNykgYmVmb3JlCmZyZWUgdGhlbSwgYXMgZ3Vlc3QgbWF5IHNo dXRkb3duIHVuZXhwZWN0ZWQgKGV4LCB1c2VyIGtpbGxzIGd1ZXN0KSwgYW5kIGluIHRoaXMKY2Fz ZSwgZ3Vlc3QncyBFUEMgbWF5IHN0aWxsIGJlIHZhbGlkLgoKMi4zIEFkZGl0aW9uYWwgUG9pbnQ6 IExpdmUgTWlncmF0aW9uLCBTbmFwc2hvdCBTdXBwb3J0ICg/KQoKQWN0dWFsbHkgZnJvbSBoYXJk d2FyZSdzIHBvaW50IG9mIHZpZXcsIFNHWCBpcyBub3QgbWlncmF0YWJsZS4gVGhlcmUgYXJlIHR3 bwpyZWFzb25zOgoKICAgIC0gU0dYIGtleSBhcmNoaXRlY3R1cmUgY2Fubm90IGJlIHZpcnR1YWxp emVkLgoKICAgIEZvciBleGFtcGxlLCBzb21lIGtleXMgYXJlIGJvdW5kIHRvIENQVS4gRm9yIGV4 YW1wbGUsIFNlYWxpbmcga2V5LCBFUkVQT1JUCiAgICBrZXksIGV0Yy4gSWYgVk0gaXMgbWlncmF0 ZWQgdG8gYW5vdGhlciBtYWNoaW5lLCB0aGUgc2FtZSBlbmNsYXZlIHdpbGwgZGVyaXZlCiAgICB0 aGUgZGlmZmVyZW50IGtleXMuIFRha2luZyBTZWFsaW5nIGtleSBhcyBhbiBleGFtcGxlLCBTZWFs aW5nIGtleSBpcwogICAgdHlwaWNhbGx5IHVzZWQgYnkgZW5jbGF2ZSAoZW5jbGF2ZSBjYW4gZ2V0 IHNlYWxpbmcga2V5IGJ5IEVHRVRLRVkpIHRvICpzZWFsKgogICAgaXRzIHNlY3JldHMgdG8gb3V0 c2lkZSAoZXgsIHBlcnNpc3RlbnQgc3RvcmFnZSkgZm9yIGZ1cnRoZXIgdXNlLiBJZiBTZWFsaW5n CiAgICBrZXkgY2hhbmdlcyBhZnRlciBWTSBtaWdyYXRpb24sIHRoZW4gdGhlIGVuY2xhdmUgY2Fu IG5ldmVyIGdldCB0aGUgc2VhbGVkCiAgICBzZWNyZXRzIGJhY2sgYnkgdXNpbmcgc2VhbGluZyBr ZXksIGFzIGl0IGhhcyBjaGFuZ2VkLCBhbmQgb2xkIHNlYWxpbmcga2V5CiAgICBjYW5ub3QgYmUg Z290IGJhY2suCgogICAgLSBUaGVyZSdzIG5vIEVOQ0xTIHRvIGV2aWN0IEVQQyBwYWdlIHRvIG5v cm1hbCBtZW1vcnksIGJ1dCBhdCB0aGUgbWVhbmluZwogICAgdGltZSwgc3RpbGwga2VlcCBjb250 ZW50IGluIEVQQy4gQ3VycmVudGx5IG9uY2UgRVBDIHBhZ2UgaXMgZXZpY3RlZCwgdGhlIEVQQwog ICAgcGFnZSBiZWNvbWVzIGludmFsaWQuIFNvIHRlY2huaWNhbGx5LCB3ZSBhcmUgdW5hYmxlIHRv IGltcGxlbWVudCBsaXZlCiAgICBtaWdyYXRpb24gKG9yIGNoZWNrIHBvaW50aW5nLCBvciBzbmFw c2hvdCkgZm9yIGVuY2xhdmUuCgpCdXQsIHdpdGggc29tZSB3b3JrYXJvdW5kLCBhbmQgc29tZSBm YWN0cyBvZiBleGlzdGluZyBTR1ggZHJpdmVyLCB0ZWNobmljYWxseQp3ZSBhcmUgYWJsZSB0byBz dXBwb3J0IExpdmUgbWlncmF0aW9uIChvciBldmVuIGNoZWNrIHBvaW50aW5nLCBzbmFwc2hvdCku IFRoaXMKaXMgYmVjYXVzZToKCiAgICAtIENoYW5naW5nIGtleSAod2hpY2ggaXMgYm91bmQgdG8g Q1BVKSBpcyBub3QgYSBwcm9ibGVtIGluIHJlYWxpdHkKCiAgICBUYWtlIFNlYWxpbmcga2V5IGFz IGFuIGV4YW1wbGUuIExvc2luZyBzZWFsZWQgZGF0YSBpcyBub3QgYSBwcm9ibGVtLCBiZWNhdXNl CiAgICBzZWFsaW5nIGtleSBpcyBvbmx5IHN1cHBvc2VkIHRvIGVuY3J5cHQgc2VjcmV0cyB0aGF0 IGNhbiBiZSBwcm92aXNpb25lZAogICAgYWdhaW4uIFRoZSB0eXBpY2FsIHdvcmsgbW9kZWwgaXMs IGVuY2xhdmUgZ2V0cyBzZWNyZXRzIHByb3Zpc2lvbmVkIGZyb20KICAgIHJlbW90ZSAoc2Vydmlj ZSBwcm92aWRlciksIGFuZCB1c2Ugc2VhbGluZyBrZXkgdG8gc3RvcmUgaXQgZm9yIGZ1cnRoZXIg dXNlLgogICAgV2hlbiBlbmNsYXZlIHRyaWVzIHRvICp1bnNlYWwqIHVzZSBzZWFsaW5nIGtleSwg aWYgdGhlIHNlYWxpbmcga2V5IGlzCiAgICBjaGFuZ2VkLCBlbmNsYXZlIHdpbGwgZmluZCB0aGUg ZGF0YSBpcyBzb21lIGtpbmQgb2YgY29ycnVwdGVkIChpbnRlZ3JpdHkKICAgIGNoZWNrIGZhaWx1 cmUpLCBzbyBpdCB3aWxsIGFzayBzZWNyZXRzIHRvIGJlIHByb3Zpc2lvbmVkIGFnYWluIGZyb20g cmVtb3RlLgogICAgQW5vdGhlciByZWFzb24gaXMsIGluIGRhdGEgY2VudGVyLCBWTSdzIHR5cGlj YWxseSBzaGFyZSBsb3RzIG9mIGRhdGEsIGFuZCBhcwogICAgc2VhbGluZyBrZXkgaXMgYm91bmQg dG8gQ1BVLCBpdCBtZWFucyB0aGUgZGF0YSBlbmNyeXB0ZWQgYnkgb25lIGVuY2xhdmUgb24KICAg IG9uZSBtYWNoaW5lIGNhbm5vdCBiZSBzaGFyZWQgYnkgYW5vdGhlciBlbmNsYXZlIG9uIGFub3Ro ZXIgbWFoY2luZS4gU28gZnJvbQogICAgU0dYIGFwcCB3cml0ZXIncyBwb2ludCBvZiB2aWV3LCBk ZXZlbG9wZXIgc2hvdWxkIHRyZWF0IFNlYWxpbmcga2V5IGFzIGEKICAgIGNoYW5nZWFibGUga2V5 LCBhbmQgc2hvdWxkIGhhbmRsZSBsb3NlIG9mIHNlYWxpbmcgZGF0YSBhbnl3YXkuIFNlYWxpbmcg a2V5CiAgICBzaG91bGQgb25seSBiZSB1c2VkIHRvIHNlYWwgc2VjcmV0cyB0aGF0IGNhbiBiZSBl YXNpbHkgcHJvdmlzaW9uZWQgYWdhaW4uCgogICAgRm9yIG90aGVyIGtleXMgc3VjaCBhcyBFUkVQ T1JUIGtleSBhbmQgcHJvdmlzaW9uaW5nIGtleSwgd2hpY2ggYXJlIHVzZWQgZm9yCiAgICBsb2Nh bCBhdHRlc3RhdGlvbiBhbmQgcmVtb3RlIGF0dGVzdGF0aW9uLCBkdWUgdG8gdGhlIHNlY29uZCBy ZWFzb24gYmVsb3csCiAgICBsb3NpbmcgdGhlbSBpcyBub3QgYSBwcm9ibGVtIGVpdGhlci4KCiAg ICAtIFN1ZGRlbiBsb3NlIG9mIEVQQyBpcyBub3QgYSBwcm9ibGVtLgoKICAgIE9uIGhhcmR3YXJl LCBFUEMgd2lsbCBiZSBsb3N0IGlmIHN5c3RlbSBnb2VzIHRvIFMzLVM1LCBvciByZXNldCwgb3IK ICAgIHNodXRkb3duLCBhbmQgU0dYIGRyaXZlciBuZWVkIHRvIGhhbmRsZSBsb3NlIG9mIEVQQyBk dWUgdG8gcG93ZXIgdHJhbnNpdGlvbi4KICAgIFRoaXMgaXMgZG9uZSBieSBjb29wZXJhdGlvbiBi ZXR3ZWVuIFNHWCBkcml2ZXIgYW5kIHVzZXJzcGFjZSBTR1ggU0RLL2FwcHMuCiAgICBIb3dldmVy IGR1cmluZyBsaXZlIG1pZ3JhdGlvbiwgdGhlcmUgbWF5IG5vdCBiZSBwb3dlciB0cmFuc2l0aW9u IGluIGd1ZXN0LAogICAgc28gdGhlcmUgbWF5IG5vdCBiZSBFUEMgbG9zZSBkdXJpbmcgbGl2ZSBt aWdyYXRpb24uIEFuZCB0ZWNobmljYWxseSB3ZQogICAgY2Fubm90ICpyZWFsbHkqIGxpdmUgbWln cmF0ZSBlbmNsYXZlIChleHBsYWluZWQgYWJvdmUpLCBzbyBsb29rcyBpdCdzIG5vdAogICAgZmVh c2libGUuIEJ1dCB0aGUgZmFjdCBpcyB0aGF0IGJvdGggTGludXggU0dYIGRyaXZlciBhbmQgV2lu ZG93cyBTR1ggZHJpdmVyCiAgICBoYXZlIGFscmVhZHkgc3VwcG9ydGVkICpzdWRkZW4qIGxvc2Ug b2YgRVBDIChub3QgRVBDIGxvc2UgZHVyaW5nIHBvd2VyCiAgICB0cmFuc2l0aW9uKSwgd2hpY2gg bWVhbnMgYm90aCBkcml2ZXIgYXJlIGFibGUgdG8gcmVjb3ZlciBpbiBjYXNlIEVQQyBpcyBsb3N0 CiAgICBhdCBhbnkgcnVudGltZS4gV2l0aCB0aGlzLCB0ZWNobmljYWxseSB3ZSBhcmUgYWJsZSB0 byBzdXBwb3J0IGxpdmUgbWlncmF0aW9uCiAgICBieSBzaW1wbHkgaWdub3JpbmcgRVBDLiBBZnRl ciBWTSBpcyBtaWdyYXRlZCwgdGhlIGRlc3RpbmF0aW9uIFZNIHdpbGwgb25seQogICAgc3VmZmVy ICpzdWRkZW4qIGxvc2Ugb2YgRVBDLCB3aGljaCBib3RoIFdpbmRvd3MgU0dYIGRyaXZlciBhbmQg TGludXggU0dYCiAgICBkcml2ZXIgYXJlIGFscmVhZHkgYWJsZSB0byBoYW5kbGUuCgogICAgQnV0 IHdlIG11c3QgcG9pbnQgb3V0IHN1Y2ggKnN1ZGRlbiogbG9zZSBvZiBFUEMgaXMgbm90IGhhcmR3 YXJlIGJlaGF2aW9yLAogICAgYW5kIG90aGVyIFNHWCBkcml2ZXIgZm9yIG90aGVyIE9TZXMgKHN1 Y2ggYXMgRnJlZUJTRCkgbWF5IG5vdCBpbXBsZW1lbnQKICAgIHRoaXMsIHNvIGZvciB0aG9zZSBn dWVzdHMsIGRlc3RpbmF0aW9uIFZNIHdpbGwgYmVoYXZpb3IgaW4gdW5leHBlY3RlZAogICAgbWFu bmVyLiBCdXQgSSBhbSBub3Qgc3VyZSB3ZSBuZWVkIHRvIGNhcmUgYWJvdXQgb3RoZXIgT1Nlcy4K CkZvciB0aGUgc2FtZSByZWFzb24sIHdlIGFyZSBhYmxlIHRvIHN1cHBvcnQgY2hlY2sgcG9pbnRp bmcgZm9yIFNHWCBndWVzdCAob25seQpMaW51eCBhbmQgV2luZG93cyk7CgpGb3Igc25hcHNob3Qs IHdlIGNhbiBzdXBwb3J0IHNuYXBzaG90IFNHWCBndWVzdCBieSBlaXRoZXI6CgogICAgLSBTdXNw ZW5kIGd1ZXN0IGJlZm9yZSBzbmFwc2hvdCAoczMtczUpLiBUaGlzIHdvcmtzIGZvciBhbGwgZ3Vl c3RzIGJ1dAogICAgICByZXF1aXJlcyB1c2VyIHRvIG1hbnVhbGx5IHN1c3BwZW5kIGd1ZXN0Lgog ICAgLSBJc3N1ZSBhbiBoeXBlcmNhbGwgdG8gZGVzdHJveSBndWVzdCdzIEVQQyBpbiBzYXZlX3Zt LiBUaGlzIG9ubHkgd29ya3MgZm9yCiAgICAgIExpbnV4IGFuZCBXaW5kb3dzIGJ1dCBkb2Vzbid0 IHJlcXVpcmUgdXNlciBpbnRlcnZlbnRpb24uCgpXaGF0J3MgeW91ciBjb21tZW50cz8KCjMuIFJl ZmVyZW5jZQoKICAgIC0gSW50ZWwgU0dYIEhvbWVwYWdlCiAgICBodHRwczovL3NvZnR3YXJlLmlu dGVsLmNvbS9lbi11cy9zZ3gKCiAgICAtIExpbnV4IFNHWCBTREsKICAgIGh0dHBzOi8vMDEub3Jn L2ludGVsLXNvZnR3YXJlLWd1YXJkLWV4dGVuc2lvbnMKCiAgICAtIExpbnV4IFNHWCBkcml2ZXIg Zm9yIHVwc3RyZWFtaW5nCiAgICBodHRwczovL2dpdGh1Yi5jb20vMDFvcmcvbGludXgtc2d4Cgog ICAgLSBJbnRlbCBTR1ggU3BlY2lmaWNhdGlvbiAoU0RNIFZvbCAzRCkKICAgIGh0dHBzOi8vc29m dHdhcmUuaW50ZWwuY29tL3NpdGVzL2RlZmF1bHQvZmlsZXMvbWFuYWdlZC83Yy9mMS8zMzI4MzEt c2RtLXZvbC0zZC5wZGYKCiAgICAtIFBhcGVyOiBJbnRlbCBTR1ggRXhwbGFpbmVkCiAgICBodHRw czovL2VwcmludC5pYWNyLm9yZy8yMDE2LzA4Ni5wZGYKCiAgICAtIElTQ0EgMjAxNSB0dXRvcmlh bCBzbGlkZXMgZm9yIEludGVswq4gU0dYIC0gSW50ZWzCriBTb2Z0d2FyZQogICAgaHR0cHM6Ly9z b2Z0d2FyZS5pbnRlbC5jb20vc2l0ZXMvZGVmYXVsdC9maWxlcy8zMzI2ODAtMDAyLnBkZgoKS2Fp IEh1YW5nICgxNSk6CiAgeGVuOiB4ODY6IGV4cG9zZSBTR1ggdG8gSFZNIGRvbWFpbiBpbiBDUFUg ZmVhdHVyZXNldAogIHhlbjogdm14OiBkZXRlY3QgRU5DTFMgVk1FWElUCiAgeGVuOiB4ODY6IGFk ZCBlYXJseSBzdGFnZSBTR1ggZmVhdHVyZSBkZXRlY3Rpb24KICB4ZW46IG1tOiBhZGQgaW9yZW1h cF9jYWNoZQogIHhlbjogcDJtOiBuZXcgJ3AybV9lcGMnIHR5cGUgZm9yIEVQQyBtYXBwaW5nCiAg eGVuOiB4ODY6IGFkZCBTR1ggYmFzaWMgRVBDIG1hbmFnZW1lbnQKICB4ZW46IHg4NjogYWRkIGZ1 bmN0aW9ucyB0byBwb3B1bGF0ZSBhbmQgZGVzdHJveSBFUEMgZm9yIGRvbWFpbgogIHhlbjogeDg2 OiBhZGQgU0dYIGNwdWlkIGhhbmRsaW5nIHN1cHBvcnQuCiAgeGVuOiB2bXg6IGhhbmRsZSBTR1gg cmVsYXRlZCBNU1JzCiAgeGVuOiB2bXg6IGhhbmRsZSBFTkNMUyBWTUVYSVQKICB4ZW46IHZteDog aGFuZGxlIFZNRVhJVCBmcm9tIFNHWCBlbmNsYXZlCiAgeGVuOiB4ODY6IHJlc2V0IEVQQyB3aGVu IGd1ZXN0IGdvdCBzdXNwZW5kZWQuCiAgeGVuOiB0b29sczogYWRkIG5ldyAnZXBjJyBwYXJhbWV0 ZXIgc3VwcG9ydAogIHhlbjogdG9vbHM6IGFkZCBTR1ggdG8gYXBwbHlpbmcgQ1BVSUQgcG9saWN5 CiAgeGVuOiB0b29sczogZXhwb3NlIEVQQyBpbiBBQ1BJIHRhYmxlCgogdG9vbHMvZmlybXdhcmUv aHZtbG9hZGVyL3V0aWwuYyAgICAgICAgICAgICB8ICAyMyArCiB0b29scy9maXJtd2FyZS9odm1s b2FkZXIvdXRpbC5oICAgICAgICAgICAgIHwgICAzICsKIHRvb2xzL2xpYmFjcGkvYnVpbGQuYyAg ICAgICAgICAgICAgICAgICAgICAgfCAgIDMgKwogdG9vbHMvbGliYWNwaS9kc2R0LmFzbCAgICAg ICAgICAgICAgICAgICAgICB8ICA0OSArKwogdG9vbHMvbGliYWNwaS9kc2R0X2FjcGlfaW5mby5h c2wgICAgICAgICAgICB8ICAgNiArLQogdG9vbHMvbGliYWNwaS9saWJhY3BpLmggICAgICAgICAg ICAgICAgICAgICB8ICAgMSArCiB0b29scy9saWJ4Yy9pbmNsdWRlL3hjX2RvbS5oICAgICAgICAg ICAgICAgIHwgICA0ICsKIHRvb2xzL2xpYnhjL2luY2x1ZGUveGVuY3RybC5oICAgICAgICAgICAg ICAgfCAgMTAgKwogdG9vbHMvbGlieGMveGNfY3B1aWRfeDg2LmMgICAgICAgICAgICAgICAgICB8 ICA2OCArKy0KIHRvb2xzL2xpYnhsL2xpYnhsLmggICAgICAgICAgICAgICAgICAgICAgICAgfCAg IDMgKy0KIHRvb2xzL2xpYnhsL2xpYnhsX2NwdWlkLmMgICAgICAgICAgICAgICAgICAgfCAgMTUg Ky0KIHRvb2xzL2xpYnhsL2xpYnhsX2NyZWF0ZS5jICAgICAgICAgICAgICAgICAgfCAgIDkgKwog dG9vbHMvbGlieGwvbGlieGxfZG9tLmMgICAgICAgICAgICAgICAgICAgICB8ICAzNiArLQogdG9v bHMvbGlieGwvbGlieGxfaW50ZXJuYWwuaCAgICAgICAgICAgICAgICB8ICAgMiArCiB0b29scy9s aWJ4bC9saWJ4bF9ub2NwdWlkLmMgICAgICAgICAgICAgICAgIHwgICA0ICstCiB0b29scy9saWJ4 bC9saWJ4bF90eXBlcy5pZGwgICAgICAgICAgICAgICAgIHwgICA2ICsKIHRvb2xzL2xpYnhsL2xp YnhsX3g4Ni5jICAgICAgICAgICAgICAgICAgICAgfCAgMTIgKwogdG9vbHMvbGlieGwvbGlieGxf eDg2X2FjcGkuYyAgICAgICAgICAgICAgICB8ICAgMyArCiB0b29scy9vY2FtbC9saWJzL3hjL3hl bmN0cmxfc3R1YnMuYyAgICAgICAgIHwgIDExICstCiB0b29scy9weXRob24veGVuL2xvd2xldmVs L3hjL3hjLmMgICAgICAgICAgIHwgIDExICstCiB0b29scy94bC94bF9wYXJzZS5jICAgICAgICAg ICAgICAgICAgICAgICAgIHwgICA1ICsKIHhlbi9hcmNoL3g4Ni9jcHVpZC5jICAgICAgICAgICAg ICAgICAgICAgICAgfCAgODcgKystCiB4ZW4vYXJjaC94ODYvZG9tY3RsLmMgICAgICAgICAgICAg ICAgICAgICAgIHwgIDQ3ICstCiB4ZW4vYXJjaC94ODYvaHZtL2h2bS5jICAgICAgICAgICAgICAg ICAgICAgIHwgICAzICsKIHhlbi9hcmNoL3g4Ni9odm0vdm14L01ha2VmaWxlICAgICAgICAgICAg ICAgfCAgIDEgKwogeGVuL2FyY2gveDg2L2h2bS92bXgvc2d4LmMgICAgICAgICAgICAgICAgICB8 IDg3MSArKysrKysrKysrKysrKysrKysrKysrKysrKysrCiB4ZW4vYXJjaC94ODYvaHZtL3ZteC92 bWNzLmMgICAgICAgICAgICAgICAgIHwgIDIxICsKIHhlbi9hcmNoL3g4Ni9odm0vdm14L3ZteC5j ICAgICAgICAgICAgICAgICAgfCAgNzMgKysrCiB4ZW4vYXJjaC94ODYvaHZtL3ZteC92dm14LmMg ICAgICAgICAgICAgICAgIHwgIDExICsKIHhlbi9hcmNoL3g4Ni9tbS5jICAgICAgICAgICAgICAg ICAgICAgICAgICAgfCAgMTUgKy0KIHhlbi9hcmNoL3g4Ni9tbS9wMm0tZXB0LmMgICAgICAgICAg ICAgICAgICAgfCAgIDMgKwogeGVuL2FyY2gveDg2L21tL3AybS5jICAgICAgICAgICAgICAgICAg ICAgICB8ICA0MSArKwogeGVuL2luY2x1ZGUvYXNtLXg4Ni9jcHVmZWF0dXJlLmggICAgICAgICAg ICB8ICAgNCArCiB4ZW4vaW5jbHVkZS9hc20teDg2L2NwdWlkLmggICAgICAgICAgICAgICAgIHwg IDI2ICstCiB4ZW4vaW5jbHVkZS9hc20teDg2L2h2bS9odm0uaCAgICAgICAgICAgICAgIHwgICAz ICsKIHhlbi9pbmNsdWRlL2FzbS14ODYvaHZtL3ZteC9zZ3guaCAgICAgICAgICAgfCAxMDAgKysr KwogeGVuL2luY2x1ZGUvYXNtLXg4Ni9odm0vdm14L3ZtY3MuaCAgICAgICAgICB8ICAxMCArCiB4 ZW4vaW5jbHVkZS9hc20teDg2L2h2bS92bXgvdm14LmggICAgICAgICAgIHwgICAzICsKIHhlbi9p bmNsdWRlL2FzbS14ODYvbXNyLWluZGV4LmggICAgICAgICAgICAgfCAgIDYgKwogeGVuL2luY2x1 ZGUvYXNtLXg4Ni9wMm0uaCAgICAgICAgICAgICAgICAgICB8ICAxMiArLQogeGVuL2luY2x1ZGUv cHVibGljL2FyY2gteDg2L2NwdWZlYXR1cmVzZXQuaCB8ICAgMyArLQogeGVuL2luY2x1ZGUveGVu L3ZtYXAuaCAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiB4ZW4vdG9vbHMvZ2VuLWNwdWlk LnB5ICAgICAgICAgICAgICAgICAgICAgIHwgICAzICsKIDQzIGZpbGVzIGNoYW5nZWQsIDE2MDcg aW5zZXJ0aW9ucygrKSwgMjEgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgeGVuL2Fy Y2gveDg2L2h2bS92bXgvc2d4LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCB4ZW4vaW5jbHVkZS9hc20t eDg2L2h2bS92bXgvc2d4LmgKCi0tIAoyLjExLjAKCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBs aXN0cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK