This is the mail archive of the gcc-prs@gcc.gnu.org mailing list for the GCC project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
>Number: 9596 >Category: ada >Synopsis: Internal compiler error during gtkada compilation >Confidential: no >Severity: critical >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Thu Feb 06 13:46:00 UTC 2003 >Closed-Date: >Last-Modified: >Originator: xavier grave >Release: gcc version 3.2.2 20030131 (Debian prerelease) >Organization: >Environment: Linux ipnnarval 2.4.20-rc3-ben0 #1 SMP lun nov 25 16:04:34 CET 2002 ppc unknown unknown GNU/Linux >Description: >How-To-Repeat: gcc-3.2 -c -I. -O2 -gnatn -gnatwuwl -fPIC -I- gtk-extra-plot_data.adb >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="all_ada_files" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="all_ada_files" LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KLS0gICAgICAgICAgICAgICBHdGtBZGEgLSBBZGE5NSBiaW5kaW5nIGZv ciBHdGsrL0dub21lICAgICAgICAgICAgICAgLS0KLS0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0gICBDb3B5cmln aHQgKEMpIDE5OTgtMjAwMCBFLiBCcmlvdCwgSi4gQnJvYmVja2VyIGFuZCBBLiBDaGFybGV0ICAg LS0KLS0gICAgICAgICAgICAgICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDEgQUNULUV1cm9wZSAg ICAgICAgICAgICAgICAgLS0KLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0gVGhpcyBsaWJyYXJ5IGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAgICAgLS0KLS0gbW9kaWZ5 IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljICAgICAgICAgICAg ICAgLS0KLS0gTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbjsgZWl0aGVyICAgICAgLS0KLS0gdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgLS0KLS0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0gVGhp cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsICAgLS0KLS0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YgICAgLS0KLS0gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgLS0KLS0gR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLS0KLS0gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljICAgICAgICAgLS0KLS0gTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGli cmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgLS0KLS0gRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsICAgICAgLS0K LS0gQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLS0KLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwg aWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUgZ2VuZXJpY3MgZnJvbSAgLS0KLS0gdGhpcyB1bml0 LCBvciB5b3UgbGluayB0aGlzIHVuaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuICAg LS0KLS0gZXhlY3V0YWJsZSwgdGhpcyAgdW5pdCAgZG9lcyBub3QgIGJ5IGl0c2VsZiBjYXVzZSAg dGhlIHJlc3VsdGluZyAgLS0KLS0gZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5IHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gVGhpcyAgLS0KLS0gZXhjZXB0aW9uIGRvZXMgbm90IGhv d2V2ZXIgaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlICAgLS0KLS0gZXhlY3V0 YWJsZSBmaWxlICBtaWdodCBiZSBjb3ZlcmVkIGJ5IHRoZSAgR05VIFB1YmxpYyBMaWNlbnNlLiAg ICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KCi0tICA8ZGVzY3JpcHRpb24+Ci0tCi0tICBQaXhtYXBzIGFy ZSBvZmYtc2NyZWVuIGRyYXdhYmxlcy4gVGhleSBjYW4gYmUgZHJhd24gdXBvbiB3aXRoIHRoZSBz dGFuZGFyZAotLSAgZHJhd2luZyBwcmltaXRpdmVzLCB0aGVuIGNvcGllZCB0byBhbm90aGVyIGRy YXdhYmxlIChzdWNoIGFzIGEgR2RrX1dpbmRvdykKLS0gIHdpdGggR2RrLlBpeG1hcC5EcmF3LiBU aGUgZGVwdGggb2YgYSBwaXhtYXAgaXMgdGhlIG51bWJlciBvZiBiaXRzIHBlcgotLSAgcGl4ZWxz LiBCaXRtYXBzIGFyZSBzaW1wbHkgcGl4bWFwcyB3aXRoIGEgZGVwdGggb2YgMS4gKFRoYXQgaXMs IHRoZXkgYXJlCi0tICBtb25vY2hyb21lIGJpdG1hcHMgLSBlYWNoIHBpeGVsIGNhbiBiZSBlaXRo ZXIgb24gb3Igb2ZmKS4KLS0gIEBweHJlZntQYWNrYWdlX0dkay5QaXhtYXB9IGZvciBtb3JlIGRl dGFpbHMgb24gcGl4bWFwIGhhbmRsaW5nLgotLQotLSAgPC9kZXNjcmlwdGlvbj4KLS0gIDxjX3Zl cnNpb24+MS4yLjc8L2NfdmVyc2lvbj4KCndpdGggR2xpYjsgdXNlIEdsaWI7Cgp3aXRoIEdkay5X aW5kb3c7CgpwYWNrYWdlIEdkay5CaXRtYXAgaXMKCiAgIHN1YnR5cGUgR2RrX0JpdG1hcCBpcyBH ZGsuR2RrX0JpdG1hcDsKICAgLS0gIEEgYmxhY2sgYW5kIHdoaXRlIGltYWdlLgogICAtLSAgVGhp cyB0eXBlIGlzIG1haW5seSB1c2VkIGFzIGEgbWFzayB3aGVuIGRyYXdpbmcgb3RoZXIgY29sb3Jl ZCBpbWFnZXMuCiAgIC0tICBFYWNoIHBpeGVsIGNhbiBoYXZlIHR3byB2YWx1ZXMsIDAgb3IgMS4K CiAgIE51bGxfQml0bWFwIDogY29uc3RhbnQgR2RrX0JpdG1hcDsKCiAgIHByb2NlZHVyZSBHZGtf TmV3IChCaXRtYXAgOiBvdXQgR2RrX0JpdG1hcDsKICAgICAgICAgICAgICAgICAgICAgIFdpbmRv dyA6IGluICBHZGsuV2luZG93Lkdka19XaW5kb3c7CiAgICAgICAgICAgICAgICAgICAgICBXaWR0 aCAgOiBpbiAgR2ludDsKICAgICAgICAgICAgICAgICAgICAgIEhlaWdodCA6IGluICBHaW50KTsK ICAgLS0gIENyZWF0ZSBhIG5ldyBiaXRtYXAgd2l0aCBhIGdpdmVuIHNpemUuCiAgIC0tICBXaW5k b3cgaXMgdXNlZCB0byBkZXRlcm1pbmUgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBuZXcgYml0bWFw LgogICAtLSAgQ2FuIGJlIGV2ZW50dWFsbHkgbnVsbCBpbiB3aGljaCBjYXNlIHRoZSByb290IHdp bmRvdyBpcyB1c2VkLgogICAtLSAgV2lkdGggaXMgdGhlIHdpZHRoIG9mIHRoZSBuZXcgYml0bWFw IGluIHBpeGVscy4KICAgLS0gIEhlaWdodCBpcyB0aGUgaGVpZ2h0IG9mIHRoZSBuZXcgYml0bWFw IGluIHBpeGVscy4KCiAgIHByb2NlZHVyZSBSZWYgKEJpdG1hcCA6IGluIEdka19CaXRtYXApOwog ICAtLSAgQWRkIGEgcmVmZXJlbmNlIHRvIGEgYml0bWFwLgoKICAgcHJvY2VkdXJlIFVucmVmIChC aXRtYXAgOiBpbiBHZGtfQml0bWFwKTsKICAgLS0gIFRoaXMgaXMgdGhlIHVzdWFsIHdheSB0byBk ZXN0cm95IGEgYml0bWFwLiBUaGUgbWVtb3J5IGlzIGZyZWVkIHdoZW4KICAgLS0gIHRoZXJlIGlz IG5vIG1vcmUgcmVmZXJlbmNlCgogICBwcm9jZWR1cmUgQ3JlYXRlX0Zyb21fRGF0YSAoQml0bWFw IDogICAgb3V0IEdka19CaXRtYXA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaW5k b3cgOiBpbiAgICAgR2RrLldpbmRvdy5HZGtfV2luZG93OwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRGF0YSAgIDogaW4gICAgIFN0cmluZzsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFdpZHRoICA6IGluICAgICBHaW50OwogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgSGVpZ2h0IDogaW4gICAgIEdpbnQpOwogICAtLSAgQ3JlYXRlIGEgYml0bWFwIGZyb20gZGF0 YSBpbiBYQk0gZm9ybWF0LgogICAtLSAgV2luZG93IGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGRlZmF1 bHQgdmFsdWVzIGZvciB0aGUgbmV3IGJpdG1hcCwgY2FuIGJlCiAgIC0tICBudWxsIGluIHdoaWNo IGNhc2UgdGhlIHJvb3Qgd2luZG93IGlzIHVzZWQuCiAgIC0tICBEYXRhIGlzIHRoZSBYQk0gZGF0 YS4KICAgLS0gIFdpZHRoIGlzIHRoZSB3aWR0aCBvZiB0aGUgbmV3IGJpdG1hcCBpbiBwaXhlbHMu CiAgIC0tICBIZWlnaHQgaXMgdGhlIGhlaWdodCBvZiB0aGUgbmV3IGJpdG1hcCBpbiBwaXhlbHMu Cgpwcml2YXRlCiAgIE51bGxfQml0bWFwIDogY29uc3RhbnQgR2RrX0JpdG1hcCA6PSBudWxsOwog ICBwcmFnbWEgSW1wb3J0IChDLCBSZWYsICJnZGtfYml0bWFwX3JlZiIpOwogICBwcmFnbWEgSW1w b3J0IChDLCBVbnJlZiwgImdka19iaXRtYXBfdW5yZWYiKTsKZW5kIEdkay5CaXRtYXA7Ci0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCi0tICAgICAgICAgIEd0a0FkYSAtIEFkYTk1IGJpbmRpbmcgZm9yIHRoZSBHaW1w IFRvb2xraXQgICAgICAgICAgICAgIC0tCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tICAgICAgICAgICAgICAg ICAgICAgQ29weXJpZ2h0IChDKSAxOTk4LTIwMDAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0t ICAgICAgICBFbW1hbnVlbCBCcmlvdCwgSm9lbCBCcm9iZWNrZXIgYW5kIEFybmF1ZCBDaGFybGV0 ICAgICAgICAgIC0tCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgICAgIC0tCi0tIG1vZGlmeSBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyAgICAgICAgICAgICAgIC0t Ci0tIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlciAgICAgIC0tCi0tIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gIC0tCi0tICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tIFRoaXMgbGli cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAg IC0tCi0tIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mICAgIC0tCi0tIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIC0tCi0tIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC0tCi0tIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyAgICAgICAgIC0tCi0tIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7 IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgIC0tCi0tIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCAgICAgIC0tCi0tIEJv c3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC0tCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC0tCi0tIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIGlmIG90 aGVyIGZpbGVzIGluc3RhbnRpYXRlIGdlbmVyaWNzIGZyb20gIC0tCi0tIHRoaXMgdW5pdCwgb3Ig eW91IGxpbmsgdGhpcyB1bml0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiAgIC0tCi0t IGV4ZWN1dGFibGUsIHRoaXMgIHVuaXQgIGRvZXMgbm90ICBieSBpdHNlbGYgY2F1c2UgIHRoZSBy ZXN1bHRpbmcgIC0tCi0tIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieSB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UuIFRoaXMgIC0tCi0tIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVy IGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSAgIC0tCi0tIGV4ZWN1dGFibGUg ZmlsZSAgbWlnaHQgYmUgY292ZXJlZCBieSB0aGUgIEdOVSBQdWJsaWMgTGljZW5zZS4gICAgIC0t Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCgotLSAgPGRlc2NyaXB0aW9uPgotLQotLSAgVGhpcyBwYWNrYWdlIHBy b3ZpZGVzIGFuIGludGVyZmFjZSB0byB0aGUgY29sb3IgaGFuZGxpbmcgZmFjaWxpdGllcyBpbgot LSAgZ3RrKy4gSXQgaXMgYWJsZSB0byBoYW5kbGUgYW55IGtpbmQgb2YgdmlzdWFsIChtb25vY2hy b21lLCBncmV5c2NhbGUsCi0tICBjb2xvciB3aXRoIGRpZmZlcmVudCBkZXB0aHMsIC4uLiksIGJ1 dCBwcm92aWRlcyBhIGNvbW1vbiBhbmQgZWFzeQotLSAgaW50ZXJmYWNlIGZvciBhbGwgb2YgdGhl bS4KLS0gIFNvbWUgb2YgdGhlc2UgZnVuY3Rpb25zIGV4cGVjdCBhIENvbG9ybWFwLiBUaGVyZSBh cmUgdHdvIHdheXMgeW91IGNhbgotLSAgZ2V0IHN1Y2ggYSBjb2xvcm1hcCwgZWl0aGVyIGEgc3lz dGVtIGRlZmF1bHQgY29sb3JtYXAgb3IgYSBwZXItd2lkZ2V0Ci0tICBjb2xvcm1hcC4gSXQgaXMg cmVjb21tZW5kZWQsIHVubGVzcyB5b3UgYXJlIHdyaXRpbmcgeW91ciBvd24gbmV3IHdpZGdldCwK LS0gIHRvIGFsd2F5cyB1c2UgdGhlIHN5c3RlbSBkZWZhdWx0IENvbG9ybWFwLiBBbGwgdGhlIGZ1 bmN0aW9ucyB0byBnZXQKLS0gIHRoZXNlIGNvbG9ybWFwcyBhcmUgZm91bmQgaW4gR3RrLldpZGdl dC4KLS0KLS0gIEdldHRpbmcgdGhlIFJlZC9HcmVlbi9CbHVlIGNvbXBvbmVudHMgY2FuIGJlIGRv bmUgdGhyb3VnaCBQYXJzZSwgYW5kIGlzCi0tICBhY3R1YWxseSByZWNvbW1lbmRlZCwgc2luY2Ug dGhlIGV4YWN0IGNvbG9yIGdlbmVyYWxseSBkZXBlbmRzIG9uIHRoZQotLSAgdmlzdWFsIHlvdXIg YXBwbGljYXRpb24gaXMgcnVubmluZyBvbi4KLS0KLS0gIDwvZGVzY3JpcHRpb24+Ci0tICA8Y192 ZXJzaW9uPjEuMi42PC9jX3ZlcnNpb24+Cgp3aXRoIEdsaWI7IHVzZSBHbGliOwp3aXRoIEdkay5W aXN1YWw7CgpwYWNrYWdlIEdkay5Db2xvciBpcwoKICAgdHlwZSBHZGtfQ29sb3IgaXMgcHJpdmF0 ZTsKICAgLS0gIEEgY29sb3IgdG8gYmUgZGlzcGxheWVkIG9uIHRoZSBzY3JlZW4uCiAgIC0tICBD dXJyZW50bHksIEd0a0FkYSBvbmx5IHN1cHBvcnRzIHRoZSBSR0Igc3RhbmRhcmQsIGllIGVhY2gg Y29sb3IgaXMKICAgLS0gIHNldCBieSBpdHMgcmVkLCBncmVlbiBhbmQgYmx1ZSBjb21wb25lbnRz LgogICAtLSAgQW4gZXh0cmEgZmllbGQgKFBpeGVsKSBpcyB0aGUgaW50ZXJuYWwgcmVwcmVzZW50 YXRpb24gb2YgdGhlIGNvbG9yLAogICAtLSAgd2hpY2ggaXMgc2V0IG9uY2UgdGhlIGNvbG9yIGhh cyBiZWVuIGFsbG9jYXRlZC4KCiAgIHR5cGUgR2RrX0NvbG9yX0FycmF5IGlzIGFycmF5IChOYXR1 cmFsIHJhbmdlIDw+KSBvZiBHZGtfQ29sb3I7CiAgIC0tICBBbiBhcnJheSBvZiBjb2xvcnMuCgog ICBOdWxsX0NvbG9yIDogY29uc3RhbnQgR2RrX0NvbG9yOwogICAtLSAgTm8gY29sb3IuIEZvciBt b3N0IGZ1bmN0aW9ucywgdGhpcyB3aWxsIHNlbGVjdCB0aGUgZGVmYXVsdCBjb2xvciBpbiB0aGUK ICAgLS0gIGNvbnRleHQsIGFsdGhvdWdoIHRoaXMgZXhhY3Qgc3BlY2lmaWNhdGlvbiBkZXBlbmRz IG9uIHRoZSBmdW5jdGlvbiB5b3UKICAgLS0gIHdhbnQgdG8gdXNlLgoKICAgdHlwZSBHZGtfQ29s b3JtYXAgaXMgbmV3IENfUHJveHk7CiAgIC0tICBUaGUgc2V0IG9mIGNvbG9ycyB0aGUgY2FuIGJl IGRpc3BsYXllZCBvbiB0aGUgc2NyZWVuLgogICAtLSAgV2hlbiB0aGUgc2NyZWVuIGlzIG5vdCBh IHRydWUtY29sb3Igc2NyZWVuIChpZSB0aGVyZSBpcyBvbmx5IGEgbGltaXRlZAogICAtLSAgbnVt YmVyIG9mIHBvc3NpYmxlIGNvbG9ycywgbGlrZSAyNTYpLCB0aGUgY29sb3JzIGFyZSBpbiBmYWN0 IGluZGV4ZXMKICAgLS0gIGludG8gYSBjb2xvcm1hcCwgd2hpY2ggZ2l2ZXMgdGhlIGNvbXBvbmVu dHMgb2YgdGhlIGNvbG9yLgogICAtLSAgVGhpcyBpcyB0aGUgc2FtZSBjb25jZXB0IGFzIGEgcGFs ZXR0ZS4KCiAgIE51bGxfQ29sb3JtYXAgOiBjb25zdGFudCBHZGtfQ29sb3JtYXA7CgogICBXcm9u Z19Db2xvciA6IGV4Y2VwdGlvbjsKICAgLS0gIEV4Y2VwdGlvbiByYWlzZWQgd2hlbiBzb21lIGZ1 bmN0aW9ucyBiZWxvdyBjb3VsZCBub3QgZmluZCBvciBhbGxvY2F0ZQogICAtLSAgYSBjb2xvciBv biB0aGUgdXNlcidzIHN5c3RlbS4KCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQogICAtLSBDcmVhdGluZyBhbmQgRGVzdHJveWluZyBjb2xvcnMgLS0KICAgLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICBmdW5jdGlvbiBQYXJzZSAoU3BlYyA6IGlu IFN0cmluZykgcmV0dXJuIEdka19Db2xvcjsKICAgLS0gIFBhcnNlIHRoZSBzdHJpbmcgU3BlYywg YW5kIGdldCBpdHMgUmVkL0dyZWVuL0JsdWUgY29tcG9uZW50cy4KICAgLS0gIFRoZSBjb2xvciBp cyBub3QgYWxsb2NhdGVkLCBhbmQgeW91IG5lZWQgdG8gY2FsbCBBbGxvY19Db2xvci4KICAgLS0g IElmIHRoZSBzdHJpbmcgY291bGQgbm90IGJlIHBhcnNlZCB0byBhbiBleGlzdGluZyBjb2xvciwg V3JvbmdfQ29sb3IgaXMKICAgLS0gIHJhaXNlZC4KICAgLS0gIFRoZSBzdHJpbmcgY2FuIGJlIG9u ZSBvZiA6CiAgIC0tCiAgIC0tICAtICJSQkc6RkYvRkYvRkYiIHdoZXJlIHRoZSAiRkYiIHN1YnN0 cmluZ3MgYXJlIHJlc3BlY3RpdmVseSB0aGUgdmFsdWUKICAgLS0gICAgb2YgdGhlIHJlZCwgZ3Jl ZW4gYW5kIGJsdWUgY29tcG9uZW50cy4gU29tZSBvdGhlciBwcmVmaXhlcyB0aGFuIFJHQgogICAt LSAgICBhcmUgZGVmaW5lZCBpbiB0aGUgWDExIGRlZmluaXRpb24sIHBsZWFzZSBzZWUgc29tZSBY MTEgZG9jdW1lbnRhdGlvbgogICAtLSAgICAob3IgdGhlIG1hbiBwYWdlIFhQYXJzZUNvbG9yIG9u IHVuaXggc3lzdGVtcykuCiAgIC0tCiAgIC0tICAtICJjb2xvcl9uYW1lIiB3aGljaCBjYW4gYmUg YW55IGNvbG9yIG5hbWUgZGVmaW5lZCBpbiB0aGUgZmlsZSByZ2IudHh0CiAgIC0tICAgIG9mIHRo ZSB1c2VyJ3Mgc3lzdGVtLiBZb3Ugc2hvdWxkIGFsd2F5cyBjaGVjayB0aGF0IFdyb25nX0NvbG9y IHdhcyBub3QKICAgLS0gICAgcmFpc2VkLCBpbiBjYXNlIHRoZSBjb2xvciB3YXMgbm90IGtub3du IG9uIHRoZSB1c2VyJ3Mgc3lzdGVtLiBUaGlzCiAgIC0tICAgIHN0cmluZyBpcyBjYXNlIGluc2Vu c2l0aXZlLgoKICAgcHJvY2VkdXJlIEFsbG9jX0NvbG9yIChDb2xvcm1hcCAgIDogaW4gICAgIEdk a19Db2xvcm1hcDsKICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvciAgICAgIDogaW4gb3V0 IEdka19Db2xvcjsKICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0ZWFibGUgIDogaW4gICAg IEJvb2xlYW4gOj0gRmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgQmVzdF9NYXRjaCA6 IGluICAgICBCb29sZWFuIDo9IFRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgU3VjY2Vz cyAgICA6ICAgIG91dCBCb29sZWFuKTsKICAgLS0gIEFsbG9jYXRlIGEgbmV3IGNvbG9yLgogICAt LSAgVGhlIGZpZWxkcyBSR0Igc2hvdWxkIGhhdmUgYmVlbiBzZXQgYmVmb3JlIGNhbGxpbmcgdGhp cyBmdW5jdGlvbi4KICAgLS0gIElmIFdyaXRlYWJsZSBpcyBUcnVlLCB0aGUgY29sb3Igd2lsbCBi ZSBhbGxvY2F0ZWQgcmVhZC93cml0ZSwgdGhhdCBjYW4KICAgLS0gIGJlIGNoYW5nZWQgYXQgYW55 IHRpbWUuIE5vdCBhbGwgdmlzdWFscyBzdXBwb3J0IHRoaXMuIE9uIG1vZGVybiBzeXN0ZW1zCiAg IC0tICB0aGlzIHVzYWdlIGhhcyBiZWNvbWUgbGVzcyB1c2VmdWwgdGhhbiBiZWZvcmUsIHNpbmNl IHJlZHJhd2luZyB0aGUKICAgLS0gIHNjcmVlbiB3aXRoIGEgbmV3IGNvbG9yIGlzIGFib3V0IGFz IGZhc3QuCiAgIC0tICBJZiBCZXN0X01hdGNoIGlzIFRydWUsIGFuZCB0aGUgZXhhY3QgY29sb3Ig Y2FuIG5vdCBiZSBhbGxvY2F0ZWQsIEd0a0FkYQogICAtLSAgd2lsbCBmaW5kIHRoZSBjbG9zZXN0 IHBvc3NpYmxlIG1hdGNoLCBhbmQgbW9kaWZ5IHRoZSBmaWVsZHMgUmVkLCBHcmVlbgogICAtLSAg YW5kIEJsdWUgb2YgQ29sb3IuCiAgIC0tICBOb3RlIHRoYXQgdGhlIGFsbG9jYXRpb24gaGFzIG1v cmUgY2hhbmNlcyB0byBzdWNjZWVkIGlmIFdyaXRlYWJsZSBpcwogICAtLSAgRmFsc2UgYW5kIEJl c3RfTWF0Y2ggaXMgVHJ1ZS4KICAgLS0gIFdoZW4geW91IG5vIGxvbmdlciB1c2UgYSBjb2xvciwg eW91IHNob3VsZCBjYWxsIEZyZWUuCgogICBwcm9jZWR1cmUgQWxsb2NfQ29sb3JzIChDb2xvcm1h cCAgIDogaW4gICAgIEdka19Db2xvcm1hcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29s b3JzICAgICA6IGluIG91dCBHZGtfQ29sb3JfQXJyYXk7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgIFdyaXRlYWJsZSAgOiBpbiAgICAgQm9vbGVhbiA6PSBGYWxzZTsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgQmVzdF9NYXRjaCA6IGluICAgICBCb29sZWFuIDo9IFRydWU7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgIFN1Y2Nlc3MgICAgOiAgICBvdXQgQm9vbGVhbl9BcnJheTsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgUmVzdWx0ICAgICA6ICAgIG91dCBHaW50KTsKICAgLS0g IEFsbG9jYXRlIGEgc2V0IG9mIGNvbG9ycy4KICAgLS0gIFRoZSBwYXJhbWV0ZXJzIGFyZSB0aGUg c2FtZSBhcyBmb3IgQWxsb2NfQ29sb3IKICAgLS0gIFJlc3VsdCBpcyB0aGUgbnVtYmVyIG9mIGNv bG9ycyBub3Qgc3VjY2Vzc2Z1bGx5IGFsbG9jYXRlZC4KICAgLS0KICAgLS0gIFRoZSBzaXplIG9m IHRoZSBCb29sZWFuX0FycmF5IGlzIGVxdWFsIHRvIHRoZSBsZW5ndGggb2YgdGhlCiAgIC0tICBD b2xvcnNfQXJyYXkuIFVzYWdlIG9mIGFuIGFycmF5IG9mIGEgZGlmZmVyZW50IHNpemUgd2lsbAog ICAtLSAgcHJvYmFibHkgbGVhZCB0byBhIENvbnN0cmFpbnRfRXJyb3IuCgogICBwcm9jZWR1cmUg QWxsb2MgKENvbG9ybWFwICA6IGluIEdka19Db2xvcm1hcDsKICAgICAgICAgICAgICAgICAgICBD b2xvciAgICAgOiBpbiBvdXQgR2RrX0NvbG9yKTsKICAgLS0gIFNhbWUgZnVuY3Rpb24gYXMgQWxs b2NfQ29sb3JzIGFib3ZlLCBidXQgZm9yIGEgc2luZ2xlIGNvbG9yLgogICAtLSAgVGhlIGNvbG9y IGlzIGFsbG9jYXRlZCBub24td3JpdGVhYmxlLCBhbmQgdGhlIGJlc3QtbWF0Y2ggaXMgdGFrZW4u CiAgIC0tICBSYWlzZXMgV3JvbmdfQ29sb3IgaWYgdGhlIGNvbG9yIGNvdWxkIG5vdCBiZSBhbGxv Y2F0ZWQKCiAgIGZ1bmN0aW9uIFdoaXRlIChDb2xvcm1hcCAgOiBpbiBHZGtfQ29sb3JtYXApIHJl dHVybiBHZGtfQ29sb3I7CiAgIC0tICBSZXR1cm4gdGhlIGRlZmF1bHQgd2hpdGUgY29sb3IgZm9y IHRoZSBjb2xvcm1hcC4KICAgLS0gIElmIHRoaXMgY29sb3Igd2FzIG5vdCBmb3VuZCBvciBjb3Vs ZCBub3QgYmUgYWxsb2NhdGVkLCBXcm9uZ19Db2xvciBpcwogICAtLSAgcmFpc2VkLgoKICAgZnVu Y3Rpb24gQmxhY2sgKENvbG9ybWFwICA6IGluIEdka19Db2xvcm1hcCkgcmV0dXJuIEdka19Db2xv cjsKICAgLS0gIFJldHVybiB0aGUgZGVmYXVsdCBibGFjayBjb2xvcnMgZm9yIHRoZSBjb2xvcm1h cC4KICAgLS0gIElmIHRoaXMgY29sb3IgaXMgbm90IGZvdW5kIG9yIGNvdWxkIG5vdCBiZSBhbGxv Y2F0ZWQsIFdyb25nX0NvbG9yIGlzCiAgIC0tICByYWlzZWQuCgogICBmdW5jdGlvbiBHZXRfU3lz dGVtIHJldHVybiBHZGtfQ29sb3JtYXA7CiAgIC0tICBHZXQgdGhlIGRlZmF1bHQgY29sb3JtYXAg Zm9yIHRoZSBzeXN0ZW0uCiAgIC0tICBUaGlzIGlzIHRoZSBzYW1lIGZ1bmN0aW9uIGFzIEd0ay5X aWRnZXQuR2V0X0RlZmF1bHRfQ29sb3JtYXAuCgogICBwcm9jZWR1cmUgR2V0X1Zpc3VhbCAoQ29s b3JtYXAgOiBpbiAgICAgR2RrX0NvbG9ybWFwOwogICAgICAgICAgICAgICAgICAgICAgICAgVmlz dWFsICAgOiAgICBvdXQgR2RrLlZpc3VhbC5HZGtfVmlzdWFsKTsKICAgLS0gIEdldCB0aGUgdmlz dWFsIGFzc29jaWF0ZWQgd2l0aCBhIGNvbG9ybWFwLgogICAtLSAgVGhlIG1haW4gaW5mb3JtYXRp b24geW91IGNhbiBnZXQgZnJvbSB0aGVyZSBpcyB0aGUgZGVwdGggb2YgdGhlIGRpc3BsYXkuCgog ICBwcm9jZWR1cmUgR2RrX05ldyAoQ29sb3JtYXAgICAgIDogICAgb3V0IEdka19Db2xvcm1hcDsK ICAgICAgICAgICAgICAgICAgICAgIFZpc3VhbCAgICAgICA6IGluICAgICBHZGsuVmlzdWFsLkdk a19WaXN1YWw7CiAgICAgICAgICAgICAgICAgICAgICBQcml2YXRlX0NtYXAgOiBpbiAgICAgQm9v bGVhbik7CiAgIC0tICBDcmVhdGUgYSBuZXcgY29sb3JtYXAgZm9yIHRoZSB2aXN1YWwuCiAgIC0t ICBJZiBQcml2YXRlX0NtYXAgaXMgdHJ1ZSwgdGhlbiB0aGUKICAgLS0gIGNvbG9ybWFwIHdvbid0 IGJlIG1vZGlmaWFibGUgb3V0c2lkZSB0aGlzIHNjb3BlLiBUaGlzIG1pZ2h0IHJlc3VsdCBpbgog ICAtLSAgc29tZSBzdHJhbmdlIGNvbG9ycyBvbiB0aGUgZGlzcGxheS4uLgoKICAgcHJvY2VkdXJl IFVucmVmIChDb2xvcm1hcCA6IGluIEdka19Db2xvcm1hcCk7CiAgIC0tICBVbnJlZiBpcyB0aGUg b25seSB3YXkgdG8gZGVzdHJveSBhIGNvbG9ybWFwIG9uY2UgeW91IG5vIGxvbmdlciBuZWVkIGl0 LgogICAtLSAgTm90ZSB0aGF0IGJlY2F1c2UgZ3RrKyB1c2VzIHJlZmVyZW5jZSBjb3VudHMsIHRo ZSBjb2xvcm1hcCB3aWxsIG5vdAogICAtLSAgYmUgYWN0dWFsbHkgZGVzdHJveWVkIHdoaWxlIGF0 IGxlYXN0IG9uZSBvYmplY3QgaXMgdXNpbmcgaXQuCgogICBwcm9jZWR1cmUgUmVmIChDb2xvcm1h cCA6IGluIEdka19Db2xvcm1hcCk7CiAgIC0tICBJbmNyZW1lbnQgdGhlIHJlZi1jb3VudCBmb3Ig dGhlIGNvbG9yLgogICAtLSAgWW91IHNob3VsZCBub3QgaGF2ZSB0byB1c2UgdGhpcyBmdW5jdGlv bi4KCiAgIGZ1bmN0aW9uIEdldF9TeXN0ZW1fU2l6ZSByZXR1cm4gR2ludDsKICAgLS0gIFJldHVy biB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIGRlZmF1bHQgY29sb3JtYXAgb24gdGhlIHN5 c3RlbS4KCiAgIHByb2NlZHVyZSBGcmVlX0NvbG9ycyAoQ29sb3JtYXAgOiBpbiBHZGtfQ29sb3Jt YXA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3JzICAgOiBpbiBHZGtfQ29sb3JfQXJy YXkpOwogICAtLSAgRnJlZSBDb2xvcnMsIGFzc3VtaW5nIHRoZXkgYXJlIGFsbG9jYXRlZCBpbiBD b2xvcm1hcC4KCiAgIHByb2NlZHVyZSBTdG9yZSAoQ29sb3JtYXAgOiBpbiBHZGtfQ29sb3JtYXA7 CiAgICAgICAgICAgICAgICAgICAgQ29sb3JzICAgOiBpbiBHZGtfQ29sb3JfQXJyYXkpOwogICAt LSAgU3RvcmUgdGhlIENvbG9ycyBpbiB0aGUgQ29sb3JtYXAKCiAgIHByb2NlZHVyZSBBbGxvYyAo Q29sb3JtYXAgICA6IGluIEdka19Db2xvcm1hcDsKICAgICAgICAgICAgICAgICAgICBDb250aWd1 b3VzIDogaW4gQm9vbGVhbjsKICAgICAgICAgICAgICAgICAgICBQbGFuZXMgICAgIDogaW4gICAg IEd1bG9uZ19BcnJheTsKICAgICAgICAgICAgICAgICAgICBQaXhlbHMgICAgIDogaW4gICAgIEd1 bG9uZ19BcnJheTsKICAgICAgICAgICAgICAgICAgICBTdWNjZWVkZWQgIDogICAgb3V0IEJvb2xl YW4pOwogICAtLSAgQWxsb2NhdGUgc29tZSBSZWFkL1dyaXRlIGNvbG9yIGNlbGxzLgogICAtLSAg Q29sb3IgY2VsbHMnIHZhbHVlcyBjYW4gYmUgY2hhbmdlZAogICAtLSAgZHluYW1pY2FsbHkuIFRo ZSBwaXhlbHMgYWxsb2NhdGVkIGFyZSByZXR1cm5lZCBpbiBQaXhlbHMuCiAgIC0tICBTZWUgWEFs bG9jQ29sb3JDZWxscygzKSBvbiBVbml4IHN5c3RlbXMuCiAgIC0tICBUaGUgUGxhbmVzIHBhcmFt ZXRlciBjYW4gYmUgdXNlZCB0byBub25kZXN0cnVjdGl2ZWx5IG92ZXJsYXkgb25lCiAgIC0tICBz ZXQgb2YgZ3JhcGhpY3Mgb3ZlciBhbm90aGVyLiBTZWUgdGhlIFgxMSBtYW51YWwgZm9yIG1vcmUg aW5mby4KICAgLS0gIE5vdGUgdGhhdCB0aGlzIGlzIGEgbG93LWxldmVsIGZ1bmN0aW9uIHdoaWNo IHlvdSBzaG91bGQgcmFyZWx5CiAgIC0tICBoYXZlIHRvIHVzZS4KCiAgIHByb2NlZHVyZSBGcmVl IChDb2xvcm1hcCA6IGluIEdka19Db2xvcm1hcDsKICAgICAgICAgICAgICAgICAgIFBpeGVscyAg IDogaW4gR3Vsb25nX0FycmF5OwogICAgICAgICAgICAgICAgICAgUGxhbmVzICAgOiBpbiBHdWxv bmcpOwogICAtLSAgRnJlZSBzb21lIGNvbG9ycyBpbiB0aGUgY29sb3JtYXAuCiAgIC0tICBTZWUg WEZyZWVDb2xvcnMoMykgb24gVW5peCBzeXN0ZW1zLgoKICAgLS0gIDxkb2NfaWdub3JlPgogICBm dW5jdGlvbiBIYXNoIChDb2xvcl9BIDogaW4gR2RrX0NvbG9yOwogICAgICAgICAgICAgICAgICBD b2xvcl9CIDogaW4gR2RrX0NvbG9yKSByZXR1cm4gR3VpbnQ7CiAgIC0tICBSZXR1cm4gYSBoYXNo IGNvZGUgZm9yIENvbG9yX0EuCiAgIC0tICBUaGlzIHNlZW1zIHRvIGJlIGEgaW50ZXJuYWwgZnVu Y3Rpb24gZm9yIGd0aysgb25seS4KICAgLS0gIDwvZG9jX2lnbm9yZT4KCiAgIHByb2NlZHVyZSBD aGFuZ2UgKENvbG9ybWFwICA6IGluIEdka19Db2xvcm1hcDsKICAgICAgICAgICAgICAgICAgICAg Q29sb3IgICAgIDogaW4gb3V0IEdka19Db2xvcjsKICAgICAgICAgICAgICAgICAgICAgU3VjY2Vl ZGVkIDogICAgb3V0IEJvb2xlYW4pOwogICAtLSAgQ2hhbmdlIHRoZSBSZWFkL1dyaXRlIGNvbG9y bWFwIGNlbGwgY29ycmVzcG9uZGluZyB0byBDb2xvci4KICAgLS0gIFRoZSBuZXcgdmFsdWUgaXMg dGhlIG9uZSBjb250YWluZWQgaW4gdGhlIFJlZCwgR3JlZW4gYW5kIEJsdWUKICAgLS0gIGZpZWxk cyBvZiBDb2xvci4KCiAgIHByb2NlZHVyZSBDaGFuZ2UgKENvbG9ybWFwIDogaW4gR2RrX0NvbG9y bWFwOwogICAgICAgICAgICAgICAgICAgICBOY29sb3JzICA6IGluIEdpbnQpOwogICAtLSAgQ2hh bmdlcyB0aGUgZmlyc3QgTmNvbG9ycyBkZWZpbmVkIGluIENvbG9ybWFwLgoKICAgcHJvY2VkdXJl IENvcHkgKFNvdXJjZSAgICAgIDogaW4gICAgIEdka19Db2xvcjsKICAgICAgICAgICAgICAgICAg IERlc3RpbmF0aW9uIDogICAgb3V0IEdka19Db2xvcik7CiAgIC0tICBDb3B5IHRoZSBTb3VyY2Ug Y29sb3IgdG8gRGVzdGluYXRpb24uCgogICBmdW5jdGlvbiBFcXVhbCAoQ29sb3JhLCBDb2xvcmIg OiBpbiBHZGtfQ29sb3IpIHJldHVybiBCb29sZWFuOwogICAtLSAgVHJ1ZSBpZiB0aGUgUmVkLCBH cmVlbiBhbmQgQmx1ZSBjb21wb25lbnRzIG9mIGJvdGggY29sb3JzIGFyZSBlcXVhbC4KCiAgIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAtLSBTZXR0aW5n L0dldHRpbmcgdGhlIGZpZWxkcyBvZiBHZGtfQ29sb3IgLS0KICAgLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICBwcm9jZWR1cmUgU2V0X1JnYiAoQ29sb3Ig ICA6IG91dCBHZGtfQ29sb3I7CiAgICAgICAgICAgICAgICAgICAgICBSZWQsIEdyZWVuLCBCbHVl IDogaW4gR3VzaG9ydCk7CiAgIC0tICBNb2RpZnkgdGhlIGZpZWxkcyBvZiB0aGUgY29sb3IuCiAg IC0tICBZb3UgdGhlbiBoYXZlIHRvIGFsbG9jYXRlIHRoZSBjb2xvciB3aXRoIG9uZSBvZiB0aGUg QWxsb2MqIGZ1bmN0aW9ucwogICAtLSAgYWJvdmUuCgogICBwcm9jZWR1cmUgU2V0X1BpeGVsIChD b2xvciA6IGluIG91dCBHZGtfQ29sb3I7IFBpeGVsIDogR3Vsb25nKTsKICAgLS0gIFRoaXMgZnVu Y3Rpb24gc2hvdWxkIGFsbW9zdCBuZXZlciBiZSB1c2VkLiBJbnN0ZWFkLCB1c2UgQWxsb2NfQ29s b3IKCiAgIGZ1bmN0aW9uIFJlZCAoQ29sb3IgOiBpbiBHZGtfQ29sb3IpIHJldHVybiBHdXNob3J0 OwogICAtLSAgUmV0dXJuIHRoZSBSZWQgZmllbGQgb2YgQ29sb3IuCgogICBmdW5jdGlvbiBHcmVl biAoQ29sb3IgOiBpbiBHZGtfQ29sb3IpIHJldHVybiBHdXNob3J0OwogICAtLSAgUmV0dXJuIHRo ZSBHcmVlbiBmaWVsZCBvZiBDb2xvci4KCiAgIGZ1bmN0aW9uIEJsdWUgKENvbG9yIDogaW4gR2Rr X0NvbG9yKSByZXR1cm4gR3VzaG9ydDsKICAgLS0gIFJldHVybiB0aGUgQmx1ZSBmaWVsZCBvZiBD b2xvci4KCiAgIGZ1bmN0aW9uIFBpeGVsIChDb2xvciA6IGluIEdka19Db2xvcikgcmV0dXJuIEd1 bG9uZzsKICAgLS0gIFJldHVybiB0aGUgUGl4ZWwgZmllbGQgb2YgQ29sb3IuCgpwcml2YXRlCiAg IE51bGxfQ29sb3JtYXAgOiBjb25zdGFudCBHZGtfQ29sb3JtYXAgOj0gbnVsbDsKCiAgIHR5cGUg R2RrX0NvbG9yIGlzCiAgICAgIHJlY29yZAogICAgICAgICBQaXhlbCA6IEd1bG9uZzsKICAgICAg ICAgUmVkICAgOiBHdXNob3J0OwogICAgICAgICBHcmVlbiA6IEd1c2hvcnQ7CiAgICAgICAgIEJs dWUgIDogR3VzaG9ydDsKICAgICAgZW5kIHJlY29yZDsKICAgLS0gIFRoZSBmaWVsZHMgYXJlIHRv IGJlIGNob3NlbiBiZXR3ZWVuIDAgYW5kIDY1NTM1LCBub3QgMCBhbmQgMjU1ISEhCgogICBOdWxs X0NvbG9yIDogY29uc3RhbnQgR2RrX0NvbG9yIDo9IChHdWxvbmcnTGFzdCwgMSwgMCwgMCk7CiAg IC0tICBOb3RlOiBpbiB0aGUgaW1wbGVtZW50YXRpb24gb2YgR3RrQWRhLCBldmVyeXRpbWUgYSBj b2xvciBpcyB1c2VkLCBpdAogICAtLSAgaXMgaW1wb3J0YW50IHRvIHRlc3Qgd2hldGhlciB0aGlz IGlzIE51bGxfQ29sb3Igb3Igbm90LiBJZiBpdCBpcywgdGhlbgogICAtLSAgU3lzdGVtLk51bGxf QWRkcmVzcyBzaG91bGQgYmUgcGFzc2VkIHRvIEMgaW5zdGVhZCBvZiBOdWxsX0NvbG9yJ0FkZHJl c3MKICAgLS0gIHNvIHRoYXQgZ3RrKyBjYW4gcHJvdmlkZSBhIGRlZmF1bHQgdmFsdWUgZm9yIGNv bG9ycy4KCiAgIHByYWdtYSBJbmxpbmUgKFNldF9SZ2IpOwogICBwcmFnbWEgSW5saW5lIChTZXRf UGl4ZWwpOwogICBwcmFnbWEgSW5saW5lIChSZWQpOwogICBwcmFnbWEgSW5saW5lIChHcmVlbik7 CiAgIHByYWdtYSBJbmxpbmUgKEJsdWUpOwogICBwcmFnbWEgSW5saW5lIChQaXhlbCk7CiAgIHBy YWdtYSBJbXBvcnQgKEMsIEdldF9TeXN0ZW1fU2l6ZSwgImdka19jb2xvcm1hcF9nZXRfc3lzdGVt X3NpemUiKTsKICAgcHJhZ21hIEltcG9ydCAoQywgR2V0X1N5c3RlbSwgImdka19jb2xvcm1hcF9n ZXRfc3lzdGVtIik7CiAgIHByYWdtYSBJbXBvcnQgKEMsIFJlZiwgImdka19jb2xvcm1hcF9yZWYi KTsKICAgcHJhZ21hIEltcG9ydCAoQywgVW5yZWYsICJnZGtfY29sb3JtYXBfdW5yZWYiKTsKZW5k IEdkay5Db2xvcjsKCi0tICA8ZXhhbXBsZT4KLS0gIC0tICBIZXJlIGlzIGFuIGV4YW1wbGUgaG93 IHlvdSBjYW4gYWxsb2NhdGUgYSBuZXcgY29sb3IsIHdoZW4geW91IGtub3cKLS0gIC0tICBpdHMg cmVkL2dyZWVuL2JsdWUgY29tcG9uZW50czogTm90ZSB0aGF0IHdlIGFsbG9jYXRlIHdoaXRlIGlu IGZhY3QKLS0gIC0tICBzaW5jZSB0aGUgbWF4aW1hbCB2YWx1ZSBmb3IgY29sb3IgY29tcG9uZW50 cyBpcyA2NTUzNS4KLS0gICAgIENvbG9yICAgOiBHZGtfQ29sb3I7Ci0tICAgICBTdWNjZXNzIDog Qm9vbGVhbjsKLS0gICAgIFNldF9SYmcgKENvbG9yLCA2NTUzNSwgNjU1MzUsIDY1NTM1KTsKLS0g ICAgIEFsbG9jX0NvbG9yIChDb2xvcm1hcCAgID0+IEd0ay5XaWRnZXQuR2V0X0RlZmF1bHRfQ29s b3JtYXAsCi0tICAgICAgICAgICAgICAgICAgQ29sb3IgICAgICA9PiBDb2xvciwKLS0gICAgICAg ICAgICAgICAgICBXcml0ZWFibGUgID0+IEZhbHNlLAotLSAgICAgICAgICAgICAgICAgIEJlc3Rf TWF0Y2ggPT4gVHJ1ZSwKLS0gICAgICAgICAgICAgICAgICBTdWNjZXNzICAgID0+IFN1Y2Nlc3Mp OwotLSAgICAgaWYgbm90IFN1Y2Nlc3MgdGhlbgotLSAgICAgICAgIC4uLjsgIC0tICBhbGxvY2F0 aW9uIGZhaWxlZAotLSAgICAgZW5kIGlmOwotLSAgPC9leGFtcGxlPgotLQotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQotLSAgICAgICAgICBHdGtBZGEgLSBBZGE5NSBiaW5kaW5nIGZvciB0aGUgR2ltcCBUb29sa2l0 ICAgICAgICAgICAgICAtLQotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLSAgICAgICAgICAgICAgICAgICAgIENv cHlyaWdodCAoQykgMTk5OC0yMDAwICAgICAgICAgICAgICAgICAgICAgICAtLQotLSAgICAgICAg RW1tYW51ZWwgQnJpb3QsIEpvZWwgQnJvYmVja2VyIGFuZCBBcm5hdWQgQ2hhcmxldCAgICAgICAg ICAtLQotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAtLQotLSBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yICAgICAtLQotLSBtb2RpZnkgaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgICAgICAgICAgICAgICAtLQotLSBMaWNl bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIg ICAgICAtLQotLSB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uICAtLQotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLSBUaGlzIGxpYnJhcnkgaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAtLQotLSBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZiAgICAtLQotLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlIEdOVSAtLQotLSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQot LSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgICAgICAgICAtLQotLSBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3Qs IHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAtLQotLSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s IEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgICAgICAtLQotLSBCb3N0b24sIE1B IDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAt LQotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAtLQotLSBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCBpZiBvdGhlciBmaWxl cyBpbnN0YW50aWF0ZSBnZW5lcmljcyBmcm9tICAtLQotLSB0aGlzIHVuaXQsIG9yIHlvdSBsaW5r IHRoaXMgdW5pdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gICAtLQotLSBleGVjdXRh YmxlLCB0aGlzICB1bml0ICBkb2VzIG5vdCAgYnkgaXRzZWxmIGNhdXNlICB0aGUgcmVzdWx0aW5n ICAtLQotLSBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlLiBUaGlzICAtLQotLSBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlciBpbnZhbGlk YXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgICAtLQotLSBleGVjdXRhYmxlIGZpbGUgIG1p Z2h0IGJlIGNvdmVyZWQgYnkgdGhlICBHTlUgUHVibGljIExpY2Vuc2UuICAgICAtLQotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQoKLS0gIDxkZXNjcmlwdGlvbj4KLS0gIFRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUg Y2FwYWJpbGl0eSB0byBjcmVhdGUgcHJlZGVmaW5lZCBtb3VzZSBjdXJzb3JzCi0tICBhcyB3ZWxs IGFzIHVzZXIgZGVmaW5lZCBvbmVzLgotLSAgPC9kZXNjcmlwdGlvbj4KLS0gIDxjX3ZlcnNpb24+ MS4yLjg8L2NfdmVyc2lvbj4KCndpdGggR2xpYjsKd2l0aCBHZGsuVHlwZXM7CndpdGggR2RrLkNv bG9yOwoKcGFja2FnZSBHZGsuQ3Vyc29yIGlzCgogICB0eXBlIEdka19DdXJzb3IgaXMgbmV3IEdk ay5DX1Byb3h5OwogICBOdWxsX0N1cnNvciA6IGNvbnN0YW50IEdka19DdXJzb3I7CgogICBwcm9j ZWR1cmUgR2RrX05ldwogICAgIChXaWRnZXQgICAgICA6IG91dCBHZGtfQ3Vyc29yOwogICAgICBD dXJzb3JfVHlwZSA6IGluICBHZGsuVHlwZXMuR2RrX0N1cnNvcl9UeXBlKTsKICAgLS0gIENyZWF0 ZSBhIG5ldyBzdGFuZGFyZCBjdXJzb3IuCgogICBwcm9jZWR1cmUgR2RrX05ldwogICAgIChXaWRn ZXQgOiBvdXQgR2RrX0N1cnNvcjsKICAgICAgU291cmNlIDogaW4gR2RrLkdka19QaXhtYXA7CiAg ICAgIE1hc2sgICA6IGluIEdkay5HZGtfUGl4bWFwOwogICAgICBGZyAgICAgOiBpbiBHZGsuQ29s b3IuR2RrX0NvbG9yOwogICAgICBCZyAgICAgOiBpbiBHZGsuQ29sb3IuR2RrX0NvbG9yOwogICAg ICBYICAgICAgOiBpbiBHbGliLkdpbnQ7CiAgICAgIFkgICAgICA6IGluIEdsaWIuR2ludCk7CiAg IC0tICBDcmVhdGUgYSBuZXcgY3Vyc29yIGZyb20gYSBnaXZlbiBwaXhtYXAgYW5kIG1hc2suCiAg IC0tICBCb3RoIHRoZSBwaXhtYXAgYW5kIG1hc2sgbXVzdCBoYXZlIGEgZGVwdGggb2YgMSAoaS5l LiBlYWNoIHBpeGVsIGhhcwogICAtLSAgb25seSAyIHZhbHVlcyAtIG9uIG9yIG9mZikuIFRoZSBz dGFuZGFyZCBjdXJzb3Igc2l6ZSBpcyAxNiBieSAxNiBwaXhlbHMuCiAgIC0tICAgLSBTb3VyY2Ug aXMgdGhlIHBpeG1hcCBzcGVjaWZ5aW5nIHRoZSBjdXJzb3IuCiAgIC0tICAgLSBNYXNrIGlzIHRo ZSBwaXhtYXAgc3BlY2lmeWluZyB0aGUgbWFzaywgd2hpY2ggbXVzdCBiZSB0aGUgc2FtZSBzaXpl CiAgIC0tICAgYXMgc291cmNlLgogICAtLSAgIC0gRmcgaXMgdGhlIGZvcmVncm91bmQgY29sb3Is IHVzZWQgZm9yIHRoZSBiaXRzIGluIHRoZSBzb3VyY2Ugd2hpY2ggYXJlCiAgIC0tICAgZW5hYmxl ZC4gVGhlIGNvbG9yIGRvZXMgbm90IGhhdmUgdG8gYmUgYWxsb2NhdGVkIGZpcnN0LgogICAtLSAg IC0gQmcgaXMgdGhlIGJhY2tncm91bmQgY29sb3IsIHVzZWQgZm9yIHRoZSBiaXRzIGluIHRoZSBz b3VyY2Ugd2hpY2ggYXJlCiAgIC0tICAgZGlzYWJsZWQuIFRoZSBjb2xvciBkb2VzIG5vdCBoYXZl IHRvIGJlIGFsbG9jYXRlZCBmaXJzdC4KICAgLS0gICAtIFggaXMgdGhlIGhvcml6b250YWwgb2Zm c2V0IG9mIHRoZSAnaG90c3BvdCcgb2YgdGhlIGN1cnNvci4KICAgLS0gICAtIFkgaXMgdGhlIHZl cnRpY2FsIG9mZnNldCBvZiB0aGUgJ2hvdHNwb3QnIG9mIHRoZSBjdXJzb3IuCgogICBwcm9jZWR1 cmUgRGVzdHJveSAoQ3Vyc29yIDogaW4gR2RrX0N1cnNvcik7CiAgIC0tICBEZXN0cm95IGEgY3Vy c29yLCBmcmVlaW5nIGFueSByZXNvdXJjZXMgYWxsb2NhdGVkIGZvciBpdC4KCnByaXZhdGUKICAg TnVsbF9DdXJzb3IgOiBjb25zdGFudCBHZGtfQ3Vyc29yIDo9IG51bGw7CiAgIHByYWdtYSBJbXBv cnQgKEMsIERlc3Ryb3ksICJnZGtfY3Vyc29yX2Rlc3Ryb3kiKTsKZW5kIEdkay5DdXJzb3I7Ci0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCi0tICAgICAgICAgIEd0a0FkYSAtIEFkYTk1IGJpbmRpbmcgZm9yIHRoZSBH aW1wIFRvb2xraXQgICAgICAgICAgICAgIC0tCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tICAgICAgICAgICAg ICAgICAgICAgQ29weXJpZ2h0IChDKSAxOTk4LTE5OTkgICAgICAgICAgICAgICAgICAgICAgIC0t Ci0tICAgICAgICBFbW1hbnVlbCBCcmlvdCwgSm9lbCBCcm9iZWNrZXIgYW5kIEFybmF1ZCBDaGFy bGV0ICAgICAgICAgIC0tCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgICAgIC0tCi0tIG1vZGlmeSBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyAgICAgICAgICAgICAg IC0tCi0tIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b247IGVpdGhlciAgICAgIC0tCi0tIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gIC0tCi0tICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tIFRoaXMg bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LCAgIC0tCi0tIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mICAgIC0tCi0tIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIC0tCi0tIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC0tCi0tIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyAgICAgICAgIC0tCi0tIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJh cnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgIC0tCi0tIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCAgICAgIC0tCi0t IEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC0tCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIGlm IG90aGVyIGZpbGVzIGluc3RhbnRpYXRlIGdlbmVyaWNzIGZyb20gIC0tCi0tIHRoaXMgdW5pdCwg b3IgeW91IGxpbmsgdGhpcyB1bml0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiAgIC0t Ci0tIGV4ZWN1dGFibGUsIHRoaXMgIHVuaXQgIGRvZXMgbm90ICBieSBpdHNlbGYgY2F1c2UgIHRo ZSByZXN1bHRpbmcgIC0tCi0tIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieSB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UuIFRoaXMgIC0tCi0tIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dl dmVyIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSAgIC0tCi0tIGV4ZWN1dGFi bGUgZmlsZSAgbWlnaHQgYmUgY292ZXJlZCBieSB0aGUgIEdOVSBQdWJsaWMgTGljZW5zZS4gICAg IC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCgotLSAgPGRlc2NyaXB0aW9uPgotLSAgVGhpcyBwYWNrYWdlIHBy b3ZpZGVzIGZ1bmN0aW9ucyBkZWFsaW5nIHdpdGggZXZlbnRzIGZyb20gdGhlIHdpbmRvdyBzeXN0 ZW0uCi0tICBJbiBHdGtBZGEgYXBwbGljYXRpb25zLCB0aGUgZXZlbnRzIGFyZSBoYW5kbGVkIGF1 dG9tYXRpY2FsbHkgaW4KLS0gIEd0ay5NYWluLkRvX0V2ZW50LCBhbmQgcGFzc2VkIG9uIHRvIHRo ZSBhcHByb3ByaWF0ZSB3aWRnZXRzLCBzbyB0aGVzZQotLSAgZnVuY3Rpb25zIGFyZSByYXJlbHkg bmVlZGVkLgotLQotLSAgISEgV2FybmluZyAhISBUaGlzIGlzIG9uZSBvZiB0aGUgb25seSBwYWNr YWdlIHRoYXQgcmVxdWlyZXMgbWFudWFsCi0tICBtZW1vcnkgbWFuYWdlbWVudCBpbiBzb21lIGNh c2VzLiBJZiB5b3UgdXNlIHRoZSBmdW5jdGlvbiBBbGxvY2F0ZSwKLS0gIHlvdSBoYXZlIHRvIHVz ZSB0aGUgZnVuY3Rpb24gRnJlZSB0b28uLi4KLS0gIDwvZGVzY3JpcHRpb24+Cgp3aXRoIFN5c3Rl bTsKd2l0aCBHbGliOyB1c2UgR2xpYjsKd2l0aCBHZGsuUmVjdGFuZ2xlOwp3aXRoIEdkay5UeXBl czsKd2l0aCBHZGsuV2luZG93OwoKcGFja2FnZSBHZGsuRXZlbnQgaXMKCiAgIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQogICAtLSAgRGVmaW5pdGlvbiBvZiB0aGUgdHlwZXMgLS0KICAg LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICB0eXBlIEdka19FdmVudCBpcyBuZXcg R2RrLkNfUHJveHk7CgogICBzdWJ0eXBlIEdka19FdmVudF9BbnkgaXMgR2RrX0V2ZW50OwogICAt LSAgQ2hhbmdlIGZyb20gR3RrQWRhMS4yLjM6IFRoZXJlIGlzIG5vIGxvbmdlciBhIHRhZ2dlZCB0 eXBlCiAgIC0tICBoaWVyYXJjaHksIG9ubHkgb25lIHR5cGUuCiAgIC0tICBIb3dldmVyIHRoZXJl IGFyZSBub3cgYSBmZXcgcnVudGltZSB0ZXN0cyBmb3IgZWFjaCBvZiB0aGUKICAgLS0gIGZ1bmN0 aW9uLCB0byBjaGVjayB3aGV0aGVyIGEgZ2l2ZW4gZmllbGQgaXMgYXZhaWxhYmxlIG9yIG5vdC4K ICAgLS0KICAgLS0gIEZpZWxkcyBjb21tb24gdG8gYWxsIGV2ZW50czogV2luZG93LCBTZW5kX0V2 ZW50LCBFdmVudF9UeXBlCgogICBzdWJ0eXBlIEdka19FdmVudF9CdXR0b24gaXMgR2RrX0V2ZW50 OwogICAtLSAgQSBidXR0b24gd2FzIHByZXNzZWQgb3IgcmVsZWFzZS4gUmVsZXZhbnQgZmllbGRz OgogICAtLSAgVGltZSwgWCwgWSwgUHJlc3N1cmUsIFh0aWx0LCBZdGlsdCwgU3RhdGUsIEJ1dHRv biwgU291cmNlLAogICAtLSAgRGV2aWNlX0lkLCBYX1Jvb3QsIFlfUm9vdCwgV2luZG93LgogICAt LSAgVHlwZTogQnV0dG9uX1ByZXNzLCBHZGtfMkJ1dHRvbl9QcmVzcywgR2RrXzNCdXR0b25fUHJl c3Mgb3IKICAgLS0gIEJ1dHRvbl9SZWxlYXNlLgoKICAgc3VidHlwZSBHZGtfRXZlbnRfQ29uZmln dXJlIGlzIEdka19FdmVudDsKICAgLS0gIFRoZSB3aW5kb3cgY29uZmlndXJhdGlvbiBoYXMgY2hh bmdlZDogZWl0aGVyIGl0IHdhcyByZW1hcHBlZCwKICAgLS0gIHJlc2l6ZWQsIG1vdmVkLCAuLi4K ICAgLS0gIE5vdGUgdGhhdCB5b3UgdXN1YWxseSBkb24ndCBoYXZlIHRvIHJlZHJhdyB5b3VyIHdp bmRvdyB3aGVuIHlvdQogICAtLSAgcmVjZWl2ZSBzdWNoIGFuIGV2ZW50LCBzaW5jZSBpdCBpcyBm b2xsb3dlZCBieSBhbiBHZGtfRXZlbnRfRXhwb3NlLgogICAtLSAgUmVsZXZhbnQgZmllbGRzOiBY LCBZLCBXaWR0aCwgSGVpZ2h0CiAgIC0tICBUeXBlOiBDb25maWd1cmUKCiAgIHN1YnR5cGUgR2Rr X0V2ZW50X0Nyb3NzaW5nIGlzIEdka19FdmVudDsKICAgLS0gIFRoZSBtb3VzZSBoYXMgYmVlbiBt b3ZlZCBpbiBvciBvdXQgb2YgdGhlIHdpbmRvdwogICAtLSAgUmVsZXZhbnQgZmllbGRzOiBUaW1l LCBTdWJXaW5kb3csIFgsIFksIFhfUm9vdCwgWV9Sb290LCBNb2RlLAogICAtLSAgRGV0YWlsLCBG b2N1cywgU3RhdGUKICAgLS0gIFR5cGU6IEVudGVyX05vdGlmeSwgTGVhdmVfTm90aWZ5CgogICBz dWJ0eXBlIEdka19FdmVudF9FeHBvc2UgaXMgR2RrX0V2ZW50OwogICAtLSAgVGhlIHdpbmRvdyBu ZWVkcyB0byBiZSByZWRyYXduLiBGb3IgZWZmaWNpZW5jeSwgZ3RrIGdpdmVzIHlvdSB0aGUKICAg LS0gIHNtYWxsZXN0IGFyZWEgdGhhdCB5b3UgbmVlZCB0byByZWRyYXcKICAgLS0gIFJlbGV2YW50 IGZpZWxkczogQXJlYSwgQ291bnQsIEdyYXBoaWNzX0V4cG9zZQogICAtLSAgVHlwZTogRXhwb3Nl CgogICBzdWJ0eXBlIEdka19FdmVudF9Ob19FeHBvc2UgaXMgR2RrX0V2ZW50OwogICAtLSAgSW5k aWNhdGUgdGhhdCB0aGUgc291cmNlIHJlZ2lvbiB3YXMgY29tcGxldGVseSBhdmFpbGFibGUgd2hl biBwYXJ0cyBvZgogICAtLSAgYSBkcmF3YWJsZSB3ZXJlIGNvcGllZC4KICAgLS0gIFRoaXMgaXMg YWxzbyBlbWl0dGVkIHdoZW4gYSBnYyB3aG9zZSAiZXhwb3N1cmVzIiBhdHRyaWJ1dGUgaXMgc2V0 IHRvCiAgIC0tICBGYWxzZSBpbiBhIGNhbGwgdG8gQ29weV9BcmVhIG9yIERyYXdfUGl4bWFwLiBT ZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yCiAgIC0tICBHZGsuR0MuU2V0X0V4cG9zdXJlcy4KICAg LS0gIE5vIFJlbGV2ZW50IGZpZWxkcyBleGNlcHQgdGhlIGNvbW1vbiBvbmVzCiAgIC0tICBUeXBl OiBOb19FeHBvc2UKCiAgIHN1YnR5cGUgR2RrX0V2ZW50X0ZvY3VzIGlzIEdka19FdmVudDsKICAg LS0gIFRoZSBmb2N1cyBoYXMgY2hhbmdlZCBmb3IgYSB3aW5kb3cuCiAgIC0tICBSZWxldmFudCBm aWVsZHM6IGluCiAgIC0tICBUeXBlOiBGb2N1c19DaGFuZ2UKCiAgIHN1YnR5cGUgR2RrX0V2ZW50 X01vdGlvbiBpcyBHZGtfRXZlbnQ7CiAgIC0tICBUaGUgbW91c2UgaGFzIG1vdmVkCiAgIC0tICBS ZWxldmFudCBmaWVsZHM6IFRpbWUsIFgsIFksIFByZXNzdXJlLCBYdGlsdCwgWXRpbHQsIFN0YXRl LAogICAtLSAgSXNfSGludCwgU291cmNlLCBEZXZpY2VfSWQsIFhfUm9vdCwgWV9Sb290CiAgIC0t ICBUeXBlOiBNb3Rpb25fTm90aWZ5CgogICBzdWJ0eXBlIEdka19FdmVudF9LZXkgaXMgR2RrX0V2 ZW50OwogICAtLSAgQSBrZXlib2FyZCBrZXkgd2FzIHByZXNzZWQKICAgLS0gIFJlbGV2YW50IGZp ZWxkczogVGltZSwgU3RhdGUsIEtleV9WYWwsIFN0cmluZwogICAtLSAgVHlwZTogS2V5X1ByZXNz LCBLZXlfUmVsZWFzZQoKICAgc3VidHlwZSBHZGtfRXZlbnRfUHJvcGVydHkgaXMgR2RrX0V2ZW50 OwogICAtLSAgU29tZSBwcm9wZXJ0eSBvZiB0aGUgd2luZG93IHdhcyBtb2RpZmllZC4gR3RrQWRh IHByb3ZpZGVzIGEgaGlnaGVyCiAgIC0tICBsZXZlbCBpbnRlcmZhY2UsIGFuZCB5b3UgYWxtb3N0 IG5ldmVyIG5lZWQgdG8gdXNlIHRoaXMgZXZlbnQuCiAgIC0tICBSZWxldmVudCBmaWVsZHM6IEF0 b20sIFRpbWUsIFByb3BlcnR5X1N0YXRlCiAgIC0tICBUeXBlOiBQcm9wZXJ0eV9Ob3RpZnkKCiAg IHN1YnR5cGUgR2RrX0V2ZW50X1Byb3hpbWl0eSBpcyBHZGtfRXZlbnQ7CiAgIC0tICBmcm9tIGd0 ays6ICJUaGlzIGV2ZW50IHR5cGUgd2lsbCBiZSB1c2VkIHByZXR0eSByYXJlbHkuIEl0IG9ubHkg aXMKICAgLS0gIGltcG9ydGFudCBmb3IgWElucHV0IGF3YXJlIHByb2dyYW1zIHRoYXQgYXJlIGRy YXdpbmcgdGhlaXIgb3duCiAgIC0tICBjdXJzb3IiLiBUaGlzIGlzIG9ubHkgdXNlZCB3aXRoIG5v biBzdGFuZGFyZCBpbnB1dCBkZXZpY2VzLCBsaWtlCiAgIC0tICBncmFwaGljIHRhYmxldHMuCiAg IC0tICBSZWxldmFudCBmaWVsZHM6IFRpbWUsIFNvdXJjZSwgRGV2aWNlX0lkCiAgIC0tICBUeXBl OiBQcm94aW1pdHlfSW4sIFByb3hpbWl0eV9PdXQKCiAgIHN1YnR5cGUgR2RrX0V2ZW50X1Zpc2li aWxpdHkgaXMgR2RrX0V2ZW50OwogICAtLSAgVGhlIHZpc2liaWxpdHkgc3RhdGUgb2YgdGhlIHdp bmRvdyAocGFydGlhbGx5IHZpc2libHksIGZ1bGx5IHZpc2libGUsCiAgIC0tICBoaWRkZW4pLiBU aGlzIGV2ZW50IGFsbW9zdCBuZXZlciBuZWVkIHRvIGJlIHVzZWQsIHNpbmNlIG90aGVyIGV2ZW50 cwogICAtLSAgYXJlIGdlbmVyYXRlZCBhdCB0aGUgc2FtZSB0aW1lLCBsaWtlIGV4cG9zZV9ldmVu dHMKICAgLS0gIFJlbGV2YW50IGZpZWxkczogVmlzaWJpbGl0eV9TdGF0ZQogICAtLSAgdHlwZTog VmlzaWJpbGl0eV9Ob3RpZnkKCiAgIHN1YnR5cGUgR2RrX0V2ZW50X1NlbGVjdGlvbiBpcyBHZGtf RXZlbnQ7CiAgIC0tICBUaGlzIGlzIGhvdyBYMTEgaW1wbGVtZW50cyBhIHNpbXBsZSBjdXQtYW5k LXBhc3RlIG1lY2hhbmlzbS4gSG93ZXZlciwKICAgLS0gIEd0a0FkYSBwcm92aWRlcyBhIGhpZ2hl ciBsZXZlbCBpbnRlcmZhY2UgdG8gdGhlIHNlbGVjdGlvbiBtZWNoYW5pc20sCiAgIC0tICBzbyB0 aGlzIGV2ZW50IHdpbGwgYWxtb3N0IG5ldmVyIGJlIHVzZWQuCiAgIC0tICBSZWxldmFudCBmaWVs ZHM6IFNlbGVjdGlvbiwgVGFyZ2V0LCBQcm9wZXJ0eSwgUmVxdWVzdG9yLCBUaW1lCiAgIC0tICBU eXBlOiBTZWxlY3Rpb25fQ2xlYXIsIFNlbGVjdGlvbl9SZXF1ZXN0LCBTZWxlY3Rpb25fTm90aWZ5 CgogICBzdWJ0eXBlIEdka19FdmVudF9DbGllbnQgaXMgR2RrX0V2ZW50OwogICAtLSAgVGhpcyBp cyBhbiBldmVudCB1c2VkIHRvIHNlbmQgYXJiaXRyYXJ5IGRhdGEgZnJvbSBvbmUgWCBhcHBsaWNh dGlvbgogICAtLSAgdG8gYW5vdGhlci4gVGhpcyBldmVudCB0b28gaXMgYWxtb3N0IG5ldmVyIHVz ZWQsIGFuZCBpcyBub3QgZG9jdW1lbnRlZAogICAtLSAgaGVyZS4gUGxlYXNlIGNvbnN1bHQgYW4g WDExIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgIC0tICBSZWxldmFudCBm aWVsZHM6IE1lc3NhZ2VfVHlwZSwgRGF0YQogICAtLSAgVHlwZTogQ2xpZW50X0V2ZW50CgogICAt LSAgVGhlIGZvbGxvd2luZyBldmVudCB0eXBlcyBkbyBub3Qgc2VlbSB0byBoYXZlIGFueSBhc3Nv Y2lhdGVkIHR5cGU6CiAgIC0tICBEZWxldGUsIERlc3Ryb3ksIE1hcCwgVW5tYXAsIERyYWdfRW50 ZXIsIERyYWdfTGVhdmUsIERyYWdfTW90aW9uLAogICAtLSAgRHJhZ19TdGF0dXMsIERyYWdfU3Rh cnQsIERyYWdfRmluaXNoZWQKCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KICAgLS0gU3BlY2lmaWMgZGVmaW5pdGlvbiBmb3IgdGhlIGZpZWxkcyAtLQogICAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICB0eXBlIEdka19FdmVudF9D bGllbnRfRGF0YV9Gb3JtYXQgaXMKICAgICAoQ2hhcl9BcnJheSwgU2hvcnRfQXJyYXksIExvbmdf QXJyYXkpOwogICBmb3IgR2RrX0V2ZW50X0NsaWVudF9EYXRhX0Zvcm1hdCB1c2UKICAgICAoQ2hh cl9BcnJheSAgPT4gOCwgU2hvcnRfQXJyYXkgPT4gMTYsIExvbmdfQXJyYXkgID0+IDMyKTsKICAg LS0gIFZhbHVlcyBleHRyYWN0ZWQgZnJvbSB0aGUgWENsaWVudE1lc3NhZ2VFdmVudCBtYW4gcGFn ZS4KCiAgIE51bWJlcl9PZl9DaGFyYWN0ZXJzIDogY29uc3RhbnQgOj0gMjA7CiAgIE51bWJlcl9P Zl9TaG9ydHMgICAgIDogY29uc3RhbnQgOj0gMTA7CiAgIE51bWJlcl9PZl9Mb25ncyAgICAgIDog Y29uc3RhbnQgOj0gNTsKCiAgIHR5cGUgR2RrX0V2ZW50X0NsaWVudF9EYXRhCiAgICAgKEZvcm1h dCA6IEdka19FdmVudF9DbGllbnRfRGF0YV9Gb3JtYXQpIGlzCiAgIHJlY29yZAogICAgICBjYXNl IEZvcm1hdCBpcwogICAgICAgICB3aGVuIENoYXJfQXJyYXkgPT4KICAgICAgICAgICAgQiA6IFN0 cmluZyAoMSAuLiBOdW1iZXJfT2ZfQ2hhcmFjdGVycyk7CiAgICAgICAgIHdoZW4gU2hvcnRfQXJy YXkgPT4KICAgICAgICAgICAgUyA6IEdzaG9ydF9BcnJheSAoMSAuLiBOdW1iZXJfT2ZfU2hvcnRz KTsKICAgICAgICAgd2hlbiBMb25nX0FycmF5ID0+CiAgICAgICAgICAgIEwgOiBHbG9uZ19BcnJh eSAoMSAuLiBOdW1iZXJfT2ZfTG9uZ3MpOwogICAgICBlbmQgY2FzZTsKICAgZW5kIHJlY29yZDsK CiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIC0tIEFjY2VzcyB0byBm aWVsZHMgb2YgdGhlIGV2ZW50IC0tCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCgogICBJbnZhbGlkX0ZpZWxkIDogZXhjZXB0aW9uOwogICAtLSAgSWYgYSBmaWVsZCBkb2Vz IG5vdCBleGlzdCBmb3IgdGhlIGV2ZW50IHlvdSBnYXZlLCBhbiBleGNlcHRpb24KICAgLS0gIElu dmFsaWRfRmllbGQgaXMgcmFpc2VkCgogICBmdW5jdGlvbiBHZXRfRXZlbnRfVHlwZSAoRXZlbnQg OiBpbiBHZGtfRXZlbnQpIHJldHVybiBUeXBlcy5HZGtfRXZlbnRfVHlwZTsKICAgLS0gIFRoZSB0 eXBlIG9mIHRoZSBldmVudC4KCiAgIGZ1bmN0aW9uIEdldF9TZW5kX0V2ZW50IChFdmVudCA6IGlu IEdka19FdmVudCkgcmV0dXJuIEJvb2xlYW47CiAgIC0tICBTZXQgdG8gdHJ1ZSBpZiB0aGUgZXZl bnQgd2FzIGdlbmVyYXRlZCBieSB0aGUgYXBwbGljYXRpb24sIEZhbHNlCiAgIC0tICBpZiBnZW5l cmF0ZWQgYnkgdGhlIFggc2VydmVyL1dpbjMyLgoKICAgZnVuY3Rpb24gR2V0X1dpbmRvdyAgICAo RXZlbnQgOiBpbiBHZGtfRXZlbnQpIHJldHVybiBHZGsuV2luZG93Lkdka19XaW5kb3c7CiAgIC0t ICBUaGUgd2luZG93IHRoZSBldmVudCBvY2N1cmVkIG9uLgoKICAgZnVuY3Rpb24gR2V0X1RpbWUg ICAgICAoRXZlbnQgOiBpbiBHZGtfRXZlbnQpIHJldHVybiBHdWludDMyOwogICAtLSAgVGltZSB3 aGVuIHRoZSBldmVudCBvY2N1cmVkLgoKICAgZnVuY3Rpb24gR2V0X1ggICAgICAgICAoRXZlbnQg OiBpbiBHZGtfRXZlbnQpIHJldHVybiBHZG91YmxlOwogICAtLSAgSG9yaXpvbnRhbCBjb29yZGlu YXRlIG9mIHRoZSBtb3VzZSB3aGVuIHRoZSBldmVudCBvY2N1cmVkLgogICAtLSAgVGhlIGNvb3Jk aW5hdGVzIGFyZSByZWxhdGl2ZSB0byB0aGUgcGFyZW50IHdpbmRvdy4KCiAgIGZ1bmN0aW9uIEdl dF9ZICAgICAgICAgKEV2ZW50IDogaW4gR2RrX0V2ZW50KSByZXR1cm4gR2RvdWJsZTsKICAgLS0g IFZlcnRpY2FsIGNvb3JkaW5hdGUgb2YgdGhlIG1vdXNlIHdoZW4gdGhlIGV2ZW50IG9jY3VyZWQu CiAgIC0tICBUaGUgY29vcmRpbmF0ZXMgYXJlIHJlbGF0aXZlIHRvIHRoZSBwYXJlbnQgd2luZG93 LgoKICAgZnVuY3Rpb24gR2V0X1hfUm9vdCAgICAoRXZlbnQgOiBpbiBHZGtfRXZlbnQpIHJldHVy biBHZG91YmxlOwogICAtLSAgSG9yaXpvbnRhbCBjb29yZGluYXRlIG9mIHRoZSBtb3VzZSB3aGVu IHRoZSBldmVudCBvY2N1cmVkLgogICAtLSAgUmVsYXRpdmUgdG8gdGhlIHJvb3Qgd2luZG93LgoK ICAgZnVuY3Rpb24gR2V0X1lfUm9vdCAgICAoRXZlbnQgOiBpbiBHZGtfRXZlbnQpIHJldHVybiBH ZG91YmxlOwogICAtLSAgVmVydGljYWwgY29vcmRpbmF0ZSBvZiB0aGUgbW91c2Ugd2hlbiB0aGUg ZXZlbnQgb2NjdXJlZC4KICAgLS0gIFJlbGF0aXZlIHRvIHRoZSByb290IHdpbmRvdy4KCiAgIGZ1 bmN0aW9uIEdldF9CdXR0b24gICAgKEV2ZW50IDogaW4gR2RrX0V2ZW50KSByZXR1cm4gR3VpbnQ7 CiAgIC0tICBOdW1iZXIgb2YgdGhlIGJ1dHRvbiB0aGF0IHdhcyBwcmVzc2VkLgoKICAgZnVuY3Rp b24gR2V0X1N0YXRlICAgICAoRXZlbnQgOiBpbiBHZGtfRXZlbnQpCiAgICAgICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuIEdkay5UeXBlcy5HZGtfTW9kaWZpZXJfVHlwZTsKICAgLS0gIFN0YXRl IG9mIHRoZSBtb3VzZSBidXR0b25zIGFuZCBrZXlib2FyZCBrZXlzIGp1c3QgcHJpb3IgdG8gdGhl IGV2ZW50LgoKICAgZnVuY3Rpb24gR2V0X1N1YndpbmRvdyAoRXZlbnQgOiBpbiBHZGtfRXZlbnQp IHJldHVybiBHZGsuV2luZG93Lkdka19XaW5kb3c7CiAgIC0tICBDaGlsZCB3aW5kb3cgZm9yIHRo ZSBldmVudC4KICAgLS0gIEZvciBhbiBFbnRlcl9Ob3RpZnlfRXZlbnQsIHRoaXMgaXMgc2V0IHRv IHRoZSBpbml0aWFsIHdpbmRvdyBmb3IgdGhlCiAgIC0tICBwb2ludGVyOyBmb3IgYW4gTGVhdmVf Tm90aWZ5X0V2ZW50IHRoaXMgaXMgc2V0IHRvIHRoZSB3aW5kb3cgb2NjdXBpZWQKICAgLS0gIGJ5 IHRoZSBwb2ludGVyIGluIGl0cyBsYXN0IHBvc2l0aW9uLgoKICAgZnVuY3Rpb24gR2V0X01vZGUg KEV2ZW50IDogaW4gR2RrX0V2ZW50KSByZXR1cm4gR2RrLlR5cGVzLkdka19Dcm9zc2luZ19Nb2Rl OwogICAtLSAgUmV0dXJuIHRoZSBtb2RlIG9mIGFuIEV2ZW50LgogICAtLSAgU2V0IHRvIGluZGlj YXRlIHdoZXRoZXIgdGhlIGV2ZW50cyBhcmUgbm9ybWFsIGV2ZW50cywgcHNldWRvLW1vdGlvbgog ICAtLSAgZXZlbnRzIHdoZW4gYSBncmFiIGFjdGl2YXRlcyBvciBwc2V1ZG8tbW90aW9uIGV2ZW50 cyB3aGVuIGEgZ3JhYgogICAtLSAgZGVhdGl2YXRlcy4KCiAgIGZ1bmN0aW9uIEdldF9EZXRhaWwg KEV2ZW50IDogaW4gR2RrX0V2ZW50KSByZXR1cm4gR2RrLlR5cGVzLkdka19Ob3RpZnlfVHlwZTsK ICAgLS0gIFNldCB0byBpbmRpY2F0ZSB0aGUgbm90aWZ5IGRldGFpbHMuCiAgIC0tICBNb3N0IGFw cGxpY2F0aW9ucyBjYW4gaWdub3JlIGV2ZW50cyB3aXRoIGEgTm90aWZ5IFZpcnR1YWwgb3IgYQog ICAtLSAgTm90aWZ5X05vbl9MaW5lYXJfVmlydHVhbCBkZXRhaWwuCgogICBmdW5jdGlvbiBHZXRf Rm9jdXMgKEV2ZW50IDogaW4gR2RrX0V2ZW50KSByZXR1cm4gQm9vbGVhbjsKICAgLS0gIFNldCB0 byB0cnVlIGlmIHRoZSB3aW5kb3cgZm9yIHRoZSBldmVudCBpcyB0aGUgZm9jdXMgd2luZG93LgoK ICAgZnVuY3Rpb24gR2V0X1ByZXNzdXJlICAoRXZlbnQgOiBpbiBHZGtfRXZlbnQpIHJldHVybiBH ZG91YmxlOwogICAtLSAgVGhpcyBpcyBzZXQgdG8gYSBjb25zdGFudCBpbiB0aGUgZ3RrKyBjb2Rl IGl0c2VsZiwgc28gaXQKICAgLS0gIGlzIG1vc3QgcHJvYmFibHkgdXNlbGVzcy4uLiBJdHMgdmFs dWUgaXMgMC41LgogICAtLSAgSXQgaXMgb25seSB1c2VkIHdpdGggc29tZSBzcGVjaWFsIGlucHV0 IGRldmljZXMsIGxpa2UgZHJhd2luZwogICAtLSAgdGFibGV0cywuLi4KCiAgIGZ1bmN0aW9uIEdl dF9YdGlsdCAgICAgKEV2ZW50IDogaW4gR2RrX0V2ZW50KSByZXR1cm4gR2RvdWJsZTsKICAgLS0g IFRoaXMgaXMgc2V0IHRvIGEgY29uc3RhbnQgaW4gdGhlIGd0aysgY29kZSBpdHNlbGYsIHNvIGl0 CiAgIC0tICBpcyBtb3N0IHByb2JhYmx5IHVzZWxlc3MuLi4gSXRzIHZhbHVlIGlzIDAuMC4KICAg LS0gIEl0IGlzIG9ubHkgdXNlZCB3aXRoIHNvbWUgc3BlY2lhbCBpbnB1dCBkZXZpY2VzLCBsaWtl IGRyYXdpbmcKICAgLS0gIHRhYmxldHMsLi4uCgogICBmdW5jdGlvbiBHZXRfWXRpbHQgICAgIChF dmVudCA6IGluIEdka19FdmVudCkgcmV0dXJuIEdkb3VibGU7CiAgIC0tICBUaGlzIGlzIHNldCB0 byBhIGNvbnN0YW50IGluIHRoZSBndGsrIGNvZGUgaXRzZWxmLCBzbyBpdAogICAtLSAgaXMgbW9z dCBwcm9iYWJseSB1c2VsZXNzLi4uIEl0cyB2YWx1ZSBpcyAwLjAuCiAgIC0tICBJdCBpcyBvbmx5 IHVzZWQgd2l0aCBzb21lIHNwZWNpYWwgaW5wdXQgZGV2aWNlcywgbGlrZSBkcmF3aW5nCiAgIC0t ICB0YWJsZXRzLC4uLgoKICAgZnVuY3Rpb24gR2V0X1dpZHRoIChFdmVudCA6IGluIEdka19FdmVu dCkgcmV0dXJuIEdpbnQxNjsKICAgLS0gIEdldCB0aGUgd2lkdGggaW4gYSBjb25maWd1cmUgZXZl bnQuCgogICBmdW5jdGlvbiBHZXRfSGVpZ2h0IChFdmVudCA6IGluIEdka19FdmVudCkgcmV0dXJu IEdpbnQxNjsKICAgLS0gIEdldCB0aGUgaGVpZ2h0IGluIGEgY29uZmlndXJlIGV2ZW50LgoKICAg ZnVuY3Rpb24gR2V0X1NvdXJjZQogICAgIChFdmVudCA6IGluIEdka19FdmVudCkgcmV0dXJuIEdk ay5UeXBlcy5HZGtfSW5wdXRfU291cmNlOwogICAtLSAgU2V0IHRvIGEgY29uc3RhbnQgZm9yIG5v dyBpbiB0aGUgZ3RrKyBzb3VyY2UuLi4gUHJvYmFibHkgdXNlbGVzcy4KCiAgIGZ1bmN0aW9uIEdl dF9EZXZpY2VfSWQKICAgICAoRXZlbnQgOiBpbiBHZGtfRXZlbnQpIHJldHVybiBHZGsuVHlwZXMu R2RrX0RldmljZV9JZDsKICAgLS0gIFNldCB0byBhIGNvbnN0YW50IGZvciBub3cgaW4gdGhlIGd0 aysgc291cmNlLi4uIFByb2JhYmx5IHVzZWxlc3MuCiAgIC0tICBTaW5jZSBtdWx0aXBsZSBpbnB1 dCBkZXZpY2VzIGNhbiBiZSB1c2VkIGF0IHRoZSBzYW1lIHRpbWUsIGxpa2UgYSBtb3VzZQogICAt LSAgYW5kIGEgZ3JhcGhpYyB0YWJsZXQsIHRoaXMgaW5kaWNhdGVkIHdoaWNoIG9uZSBnZW5lcmF0 ZWQgdGhlIGV2ZW50LgoKICAgZnVuY3Rpb24gR2V0X0FyZWEgKEV2ZW50IDogaW4gR2RrX0V2ZW50 KSByZXR1cm4gUmVjdGFuZ2xlLkdka19SZWN0YW5nbGU7CiAgIC0tICBUaGUgbWluaW1hbCBhcmVh IG9uIHdoaWNoIHRoZSBldmVudCBhcHBsaWVzLgogICAtLSAgRm9yIEV4cG9zZV9FdmVudHMsIHRo aXMgaXMgdGhlIG1pbmltYWwgYXJlYSB0byByZWRyYXcuCgogICBmdW5jdGlvbiBHZXRfQ291bnQg KEV2ZW50IDogaW4gR2RrX0V2ZW50KSByZXR1cm4gR2ludDsKICAgLS0gIE51bWJlciBvZiBFeHBv c2VfRXZlbnRzIHRoYXQgYXJlIHRvIGZvbGxvdyB0aGlzIG9uZS4KICAgLS0gIE1vc3QgYXBwbGlj YXRpb25zIGNhbiBpZ25vcmUgdGhlIGV2ZW50IGlmIENvdW50IGlzIG5vdCAwLCB3aGljaCBhbHNv CiAgIC0tICBhbGxvd3MgZm9yIG9wdGltaXphdGlvbnMuCgogICBmdW5jdGlvbiBHZXRfSW4gKEV2 ZW50IDogaW4gR2RrX0V2ZW50KSByZXR1cm4gQm9vbGVhbjsKICAgLS0gIFRydWUgaWYgdGhlIHdp bmRvdyBoYXMgZ2FpbmVkIHRoZSBmb2N1cywgRmFsc2Ugb3RoZXJ3aXNlLgoKICAgZnVuY3Rpb24g R2V0X0lzX0hpbnQgKEV2ZW50IDogaW4gR2RrX0V2ZW50KSByZXR1cm4gQm9vbGVhbjsKICAgLS0g ID8/PwoKICAgZnVuY3Rpb24gR2V0X0tleV9WYWwgKEV2ZW50IDogaW4gR2RrX0V2ZW50KSByZXR1 cm4gR2RrLlR5cGVzLkdka19LZXlfVHlwZTsKICAgLS0gIENvZGUgb2YgdGhlIGtleSB0aGF0IHdh cyBwcmVzc2VkIChhbmQgdGhhdCBnZW5lcmF0ZWQgdGhlIGV2ZW50LgoKICAgZnVuY3Rpb24gR2V0 X1N0cmluZyAgKEV2ZW50IDogaW4gR2RrX0V2ZW50KSByZXR1cm4gU3RyaW5nOwogICAtLSAgU3lt Ym9sIG9mIHRoZSBrZXkgdGhhdCB3YXMgcHJlc3NlZCwgYXMgYSBzdHJpbmcuCgogICBmdW5jdGlv biBHZXRfQXRvbSAoRXZlbnQgOiBpbiBHZGtfRXZlbnQpIHJldHVybiBHZGsuVHlwZXMuR2RrX0F0 b207CiAgIC0tICBJbmRpY2F0ZSB3aGljaCBwcm9wZXJ0eSBoYXMgY2hhbmdlZC4KICAgLS0gID8/ PyBBdG9tIHNob3VsZCBub3QgYmUgYSBHdWludAoKICAgZnVuY3Rpb24gR2V0X1Byb3BlcnR5X1N0 YXRlIChFdmVudCA6IGluIEdka19FdmVudCkgcmV0dXJuIEd1aW50OwogICAtLSAgPz8/IFRoZSBy ZXR1cm4gdHlwZSBzaG91bGQgYmUgY2hhbmdlZC4KCiAgIGZ1bmN0aW9uIEdldF9WaXNpYmlsaXR5 X1N0YXRlCiAgICAgKEV2ZW50IDogaW4gR2RrX0V2ZW50KSByZXR1cm4gR2RrLlR5cGVzLkdka19W aXNpYmlsaXR5X1N0YXRlOwogICAtLSAgUmV0dXJuIHRoZSBuZXcgdmlzaWJpbGl0eSBzdGF0ZSBm b3IgdGhlIHdpbmRvdy4KCiAgIGZ1bmN0aW9uIEdldF9TZWxlY3Rpb24gKEV2ZW50IDogaW4gR2Rr X0V2ZW50KSByZXR1cm4gR2RrLlR5cGVzLkdka19BdG9tOwogICAtLSAgV2hhdCB3YXMgc2VsZWN0 ZWQgaW4gdGhlIHdpbmRvdy4uLgoKICAgZnVuY3Rpb24gR2V0X1RhcmdldCAoRXZlbnQgOiBpbiBH ZGtfRXZlbnQpIHJldHVybiBHZGsuVHlwZXMuR2RrX0F0b207CiAgIC0tICA/Pz8KCiAgIGZ1bmN0 aW9uIEdldF9Qcm9wZXJ0eSAoRXZlbnQgOiBpbiBHZGtfRXZlbnQpIHJldHVybiBHZGsuVHlwZXMu R2RrX0F0b207CiAgIC0tICA/Pz8KCiAgIGZ1bmN0aW9uIEdldF9SZXF1ZXN0b3IgKEV2ZW50IDog aW4gR2RrX0V2ZW50KSByZXR1cm4gR3VpbnQzMjsKICAgLS0gID8/PwoKICAgZnVuY3Rpb24gR2V0 X01lc3NhZ2VfVHlwZSAoRXZlbnQgOiBpbiBHZGtfRXZlbnQpIHJldHVybiBHZGsuVHlwZXMuR2Rr X0F0b207CiAgIC0tICA/Pz8KCiAgIGZ1bmN0aW9uIEdldF9EYXRhIChFdmVudCA6IGluIEdka19F dmVudCkgcmV0dXJuIEdka19FdmVudF9DbGllbnRfRGF0YTsKICAgLS0gID8/PwoKICAgLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgLS0gTW9kaWZ5aW5nIHRoZSBmaWVs ZHMgb2YgYW4gZXZlbnQgLS0KICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KCiAgIHByb2NlZHVyZSBTZXRfV2luZG93IChFdmVudCA6IGluIEdka19FdmVudDsgV2luIDog R2RrLldpbmRvdy5HZGtfV2luZG93KTsKICAgLS0gIFNldCB0aGUgV2luZG93IGZpZWxkIG9mIGFu IGV2ZW50LgoKICAgcHJvY2VkdXJlIFNldF9YICAgICAgKEV2ZW50IDogaW4gR2RrX0V2ZW50OyBY IDogR2RvdWJsZSk7CiAgIC0tICBTZXQgdGhlIFggZmllbGQgb2YgYW4gZXZlbnQuCgogICBwcm9j ZWR1cmUgU2V0X1kgICAgICAoRXZlbnQgOiBpbiBHZGtfRXZlbnQ7IFkgOiBHZG91YmxlKTsKICAg LS0gIFNldCB0aGUgWSBmaWVsZCBvZiBhbiBldmVudC4KCiAgIHByb2NlZHVyZSBTZXRfWHJvb3Qg IChFdmVudCA6IGluIEdka19FdmVudDsgWHJvb3QgOiBHZG91YmxlKTsKICAgLS0gIFNldCB0aGUg WHJvb3QgZmllbGQgb2YgYW4gZXZlbnQuCgogICBwcm9jZWR1cmUgU2V0X1lyb290ICAoRXZlbnQg OiBpbiBHZGtfRXZlbnQ7IFlyb290IDogR2RvdWJsZSk7CiAgIC0tICBTZXQgdGhlIFlyb290IGZp ZWxkIG9mIGFuIGV2ZW50LgoKICAgcHJvY2VkdXJlIFNldF9XaWR0aCAgKEV2ZW50IDogaW4gR2Rr X0V2ZW50OyBXaWR0aCA6IEdpbnQxNik7CiAgIC0tICBTZXQgdGhlIFdpZHRoIGZpZWxkIG9mIGFu IGV2ZW50LgoKICAgcHJvY2VkdXJlIFNldF9IZWlnaHQgKEV2ZW50IDogaW4gR2RrX0V2ZW50OyBI ZWlnaHQgOiBHaW50MTYpOwogICAtLSAgU2V0IHRoZSBIZWlnaHQgZmllbGQgb2YgYW4gZXZlbnQu CgogICBwcm9jZWR1cmUgU2V0X0J1dHRvbiAoRXZlbnQgOiBpbiBHZGtfRXZlbnQ7IEJ1dHRvbiA6 IEd1aW50KTsKICAgLS0gIFNldCB0aGUgQnV0dG9uIGZpZWxkIG9mIGFuIGV2ZW50LgoKICAgcHJv Y2VkdXJlIFNldF9UaW1lIChFdmVudCA6IGluIEdka19FdmVudDsgVGltZSA6IEd1aW50MzIpOwog ICAtLSAgU2V0IHRoZSB0aW1lIGZvciB0aGUgZXZlbnQuCiAgIC0tICBJZiBUaW1lIGlzIDAsIHRo ZW4gaXQgaXMgc2V0IHRvIHRoZSBjdXJyZW50IHRpbWUuCgogICBwcm9jZWR1cmUgU2V0X1N0YXRl ICAoRXZlbnQgOiBpbiBHZGtfRXZlbnQ7CiAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSA6 IGluIEdkay5UeXBlcy5HZGtfTW9kaWZpZXJfVHlwZSk7CiAgIC0tICBTZXQgdGhlIFN0YXRlIGZp ZWxkIG9mIGFuIGV2ZW50LgoKICAgcHJvY2VkdXJlIFNldF9TdWJ3aW5kb3cgKEV2ZW50ICA6IGlu IEdka19FdmVudDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpbmRvdyA6IGluIEdkay5X aW5kb3cuR2RrX1dpbmRvdyk7CiAgIC0tICBTZXQgdGhlIFN1YndpbmRvdyBmaWVsZCBvZiBhbiBl dmVudC4KCiAgIHByb2NlZHVyZSBTZXRfTW9kZSAgIChFdmVudCA6IGluIEdka19FdmVudDsKICAg ICAgICAgICAgICAgICAgICAgICAgIE1vZGUgIDogaW4gR2RrLlR5cGVzLkdka19Dcm9zc2luZ19N b2RlKTsKICAgLS0gIFNldCB0aGUgTW9kZSBmaWVsZCBvZiBhbiBldmVudC4KCiAgIHByb2NlZHVy ZSBTZXRfRGV0YWlsIChFdmVudCAgOiBpbiBHZGtfRXZlbnQ7CiAgICAgICAgICAgICAgICAgICAg ICAgICBEZXRhaWwgOiBpbiBHZGsuVHlwZXMuR2RrX05vdGlmeV9UeXBlKTsKICAgLS0gIFNldCB0 aGUgRGV0YWlsIGZpZWxkIG9mIGFuIGV2ZW50LgoKICAgcHJvY2VkdXJlIFNldF9Gb2N1cyAoRXZl bnQgOiBpbiBHZGtfRXZlbnQ7IEhhc19Gb2N1cyA6IEJvb2xlYW4pOwogICAtLSAgU2V0IHRoZSBG b2N1cyBmaWVsZCBvZiBhbiBldmVudC4KCiAgIHByb2NlZHVyZSBTZXRfQXJlYSAgKEV2ZW50IDog aW4gR2RrX0V2ZW50OyBBcmVhIDogUmVjdGFuZ2xlLkdka19SZWN0YW5nbGUpOwogICAtLSAgU2V0 IHRoZSBBcmVhIGZpZWxkIG9mIGFuIGV2ZW50LgoKICAgcHJvY2VkdXJlIFNldF9JbiAgICAoRXZl bnQgOiBpbiBHZGtfRXZlbnQ7IEZvY3VzX0luIDogQm9vbGVhbik7CiAgIC0tICBTZXQgdGhlIElu IGZpZWxkIG9mIGFuIGV2ZW50LgoKICAgcHJvY2VkdXJlIFNldF9Jc19IaW50IChFdmVudCA6IGlu IEdka19FdmVudDsgSXNfSGludCA6IEJvb2xlYW4pOwogICAtLSAgU2V0IHRoZSBJc19IaW50IGZp ZWxkIG9mIGFuIGV2ZW50LgoKICAgcHJvY2VkdXJlIFNldF9LZXlfVmFsIChFdmVudCA6IGluIEdk a19FdmVudDsgS2V5IDogR2RrLlR5cGVzLkdka19LZXlfVHlwZSk7CiAgIC0tICBTZXQgdGhlIEtl eV9WYWwgZmllbGQgb2YgYW4gZXZlbnQuCgogICBwcm9jZWR1cmUgU2V0X0F0b20gKEV2ZW50IDog aW4gR2RrX0V2ZW50OyBBdG9tIDogR2RrLlR5cGVzLkdka19BdG9tKTsKICAgLS0gIFNldCB0aGUg QXRvbSBmaWVsZCBvZiBhbiBldmVudC4KCiAgIHByb2NlZHVyZSBTZXRfUHJvcGVydHlfU3RhdGUg KEV2ZW50IDogaW4gR2RrX0V2ZW50OyBTdGF0ZSA6IEd1aW50KTsKICAgLS0gIFNldCB0aGUgUHJv cGVydHlfU3RhdGUgZmllbGQgb2YgYW4gZXZlbnQuCgogICBwcm9jZWR1cmUgU2V0X1Zpc2liaWxp dHlfU3RhdGUgKEV2ZW50IDogaW4gR2RrX0V2ZW50OwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFN0YXRlIDogR2RrLlR5cGVzLkdka19WaXNpYmlsaXR5X1N0YXRlKTsKICAgLS0g IFNldCB0aGUgVmlzaWJpbGl0eV9TdGF0ZSBmaWVsZCBvZiBhbiBldmVudC4KCiAgIHByb2NlZHVy ZSBTZXRfU2VsZWN0aW9uIChFdmVudCA6IGluIEdka19FdmVudDsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFNlbGVjdGlvbiA6IEdkay5UeXBlcy5HZGtfQXRvbSk7CiAgIC0tICBTZXQgdGhl IFNlbGVjdGlvbiBmaWVsZCBvZiBhbiBldmVudC4KCiAgIHByb2NlZHVyZSBTZXRfVGFyZ2V0IChF dmVudCA6IGluIEdka19FdmVudDsgVGFyZ2V0IDogR2RrLlR5cGVzLkdka19BdG9tKTsKICAgLS0g IFNldCB0aGUgVGFyZ2V0IGZpZWxkIG9mIGFuIGV2ZW50LgoKICAgcHJvY2VkdXJlIFNldF9Qcm9w ZXJ0eSAoRXZlbnQgOiBpbiBHZGtfRXZlbnQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIFBy b3BlcnR5IDogR2RrLlR5cGVzLkdka19BdG9tKTsKICAgLS0gIFNldCB0aGUgUHJvcGVydHkgZmll bGQgb2YgYW4gZXZlbnQuCgogICBwcm9jZWR1cmUgU2V0X1JlcXVlc3RvciAoRXZlbnQgOiBpbiBH ZGtfRXZlbnQ7IFJlcXVlc3RvciA6IEd1aW50MzIpOwogICAtLSAgU2V0IHRoZSBSZXF1ZXN0b3Ig ZmllbGQgb2YgYW4gZXZlbnQuCgogICBwcm9jZWR1cmUgU2V0X01lc3NhZ2VfVHlwZSAoRXZlbnQg OiBpbiBHZGtfRXZlbnQ7IFR5cCA6IEdkay5UeXBlcy5HZGtfQXRvbSk7CiAgIC0tICBTZXQgdGhl IE1lc3NhZ2VfVHlwZSBmaWVsZCBvZiBhbiBldmVudC4KCiAgIHByb2NlZHVyZSBTZXRfU3RyaW5n IChFdmVudCA6IGluIEdka19FdmVudDsgU3RyIDogU3RyaW5nKTsKICAgLS0gIFNldCB0aGUgc3Ry aW5nIGFzc29jaWF0ZWQgd2l0aCBhbiBldmVudC4KCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CiAgIC0tIEdlbmVyYWwgZnVuY3Rpb25zIC0tCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgog ICBwcm9jZWR1cmUgRGVlcF9Db3B5IChGcm9tIDogR2RrX0V2ZW50OyBUbyA6IG91dCBHZGtfRXZl bnQpOwogICAtLSAgRGVlcCBjb3B5IGZvciBhbiBldmVudC4gVGhlIEMgc3RydWN0dXJlIGlzIGl0 c2VsZiBkdXBsaWNhdGVkLgogICAtLSAgWW91IG5lZWQgdG8gZGVhbGxvY2F0ZWQgaXQgeW91cnNl bGYgd2l0aCBhIGNhbGwgdG8gRnJlZSBiZWxvdy4KCiAgIHByb2NlZHVyZSBHZXRfR3JhcGhpY3Nf RXhwb3NlCiAgICAgKEV2ZW50ICA6IG91dCBHZGtfRXZlbnRfRXhwb3NlOwogICAgICBXaW5kb3cg OiBpbiBHZGsuV2luZG93Lkdka19XaW5kb3cpOwogICAtLSAgV2FpdHMgZm9yIGEgR3JhcGhpY3NF eHBvc2Ugb3IgTm9FeHBvc2UgZXZlbnQKICAgLS0gIElmIGl0IGdldHMgYSBHcmFwaGljc0V4cG9z ZSBldmVudCwgaXQgcmV0dXJucyBhIHBvaW50ZXIgdG8gaXQsCiAgIC0tICBvdGhlcndpc2UgaXQg cmV0dXJucyBhbiBldmVudCBmb3Igd2hpY2ggSXNfQ3JlYXRlZCBpcyBGYWxzZS4KICAgLS0KICAg LS0gIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gaW1wbGVtZW50IHNjcm9sbGluZzogeW91 IG11c3QgY2FsbAogICAtLSAgR2RrLkdDLlNldF9FeHBvc3VyZXMgd2l0aCBUcnVlIG9uIHRoZSBH QyB5b3UgYXJlIHVzaW5nIGZvciB0aGUKICAgLS0gIGRyYXdpbmcsIHNvIHRoYXQgYSBldmVudHMg YXJlIGdlbmVyYXRlZCBmb3Igb2JzY3VyZWQgYXJlYXMgYW5kIGV2ZXJ5CiAgIC0tICB0aW1lIGEg bmV3IHBhcnQgb2YgdGhlIHdpZGdldCBpcyBkcmF3bi4gSG93ZXZlciwgdGhlcmUgaXMgYSByYWNl CiAgIC0tICBjb25kaXRpb24gaWYgbXVsdGlwbGUgc2Nyb2xscyBoYXBwZW4gYmVmb3JlIHlvdSBo YXZlIGZpbmlzaGVkCiAgIC0tICBwcm9jZXNzaW5nIHRoZSBmaXJzdCBvbmUuIEEgd29ya2Fyb3Vu ZCBpcyB0byBjYWxsIEdldF9HcmFwaGljc19FeHBvc2UKICAgLS0gIGFmdGVyIGV2ZXJ5IHNjcm9s bCB1bnRpbCBpdCByZXR1cm5zIGEgbnVsbCBldmVudC4KCiAgIGZ1bmN0aW9uIEV2ZW50c19QZW5k aW5nIHJldHVybiBCb29sZWFuOwogICAtLSAgSXMgdGhlcmUgYW55IGV2ZW50IHBlbmRpbmcgb24g dGhlIHF1ZXVlID8KCiAgIHByb2NlZHVyZSBHZXQgKEV2ZW50IDogb3V0IEdka19FdmVudCk7CiAg IC0tICBHZXQgdGhlIG5leHQgZXZlbnQgb24gdGhlIHF1ZXVlLgoKICAgcHJvY2VkdXJlIFBlZWsg KEV2ZW50IDogb3V0IEdka19FdmVudCk7CiAgIC0tICBMb29rIGF0IHRoZSBuZXh0IGV2ZW50IG9u IHRoZSBxdWV1ZSwgYnV0IGxlYXZlIGlmIHRoZXJlLgoKICAgcHJvY2VkdXJlIFB1dCAoRXZlbnQg OiBpbiBHZGtfRXZlbnQpOwogICAtLSAgQWRkIGFuIGV2ZW50IG9uIHRoZSBxdWV1ZSAtIEJldHRl ciB0byB1c2UgR3RrLlNpZ25hbC5FbWl0X0J5X05hbWUKCiAgIHByb2NlZHVyZSBTZXRfU2hvd19F dmVudHMgKFNob3dfRXZlbnRzIDogaW4gQm9vbGVhbiA6PSBUcnVlKTsKICAgLS0gIEZvciBkZWJ1 ZyBwdXJwb3NlcywgeW91IGNhbiBjaG9vc2Ugd2hldGhlciB5b3Ugd2FudCB0byBzZWUgdGhlIGV2 ZW50cwogICAtLSAgR3RrQWRhIHJlY2VpdmVzLgoKICAgZnVuY3Rpb24gR2V0X1Nob3dfRXZlbnRz IHJldHVybiBCb29sZWFuOwogICAtLSAgUmV0dXJuIHRoZSBjdXJyZW50IHN0YXRlIG9mIFNob3df RXZlbnRzLgoKICAgcHJvY2VkdXJlIFNlbmRfQ2xpZW50X01lc3NhZ2VfVG9fQWxsIChFdmVudCA6 IGluIEdka19FdmVudCk7CiAgIC0tICBMb3cgbGV2ZWwgcm91dGluZSB0byBzZW5kIGFuIEV2ZW50 IHRvIGV2ZXJ5IHdpbmRvdy4KCiAgIGZ1bmN0aW9uIFNlbmRfQ2xpZW50X01lc3NhZ2UKICAgICAo RXZlbnQgOiBpbiBHZGtfRXZlbnQ7CiAgICAgIFhpZCAgIDogaW4gR3VpbnQzMikgcmV0dXJuIEJv b2xlYW47CiAgIC0tICBMb3cgbGV2ZWwgcm91dGluZSB0byBzZW5kIGFuIEV2ZW50IHRvIGEgc3Bl Y2lmaWVkIFggd2luZG93LgoKICAgcHJvY2VkdXJlIEFsbG9jYXRlCiAgICAgKEV2ZW50ICAgICAg OiBvdXQgR2RrX0V2ZW50OwogICAgICBFdmVudF9UeXBlIDogaW4gVHlwZXMuR2RrX0V2ZW50X1R5 cGU7CiAgICAgIFdpbmRvdyAgICAgOiBpbiBHZGsuV2luZG93Lkdka19XaW5kb3cpOwogICAtLSAg Q3JlYXRlIGFuIGV2ZW50LCB3aG9zZSBmaWVsZHMgYXJlIHVuaW5pdGlhbGl6ZWQuCiAgIC0tICBZ b3UgbmVlZCB0byB1c2UgdGhlIGZ1bmN0aW9uIFNldF8qIGFib3ZlIHRvIG1vZGlmeSB0aGVtLCBi ZWZvcmUgeW91IGNhbgogICAtLSAgc2VuZCB0aGUgZXZlbnQgd2l0aCBFbWl0X0J5X05hbWUuCiAg IC0tICAhIU5vdGUhITogVGhlIGV2ZW50IGhhcyB0byBiZSBmcmVlZCBpZiB5b3UgaGF2ZSBjYWxs ZWQgdGhpcyBmdW5jdGlvbi4KICAgLS0gIFVzZSB0aGUgZnVuY3Rpb24gRnJlZS4KCiAgIHByb2Nl ZHVyZSBGcmVlIChFdmVudCA6IGluIG91dCBHZGtfRXZlbnQpOwogICAtLSAgRnJlZSB0aGUgbWVt b3J5IChhbmQgQyBzdHJ1Y3R1cmUpIGFzc29jaWF0ZWQgd2l0aCBhbiBldmVudC4KICAgLS0gIFlv dSBuZWVkIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBvbmx5IGlmIHRoZSBldmVudCB3YXMgY3JlYXRl ZCB0aHJvdWdoCiAgIC0tICBBbGxvY2F0ZSwgbm90IGlmIGl0IHdhcyBjcmVhdGVkIGJ5IEd0a0Fk YSBpdHNlbGYgKG9yIHlvdSB3b3VsZCBnZXQKICAgLS0gIGEgc2VnbWVudGF0aW9uIGZhdWx0KS4K CiAgIHR5cGUgRXZlbnRfSGFuZGxlcl9GdW5jIGlzIGFjY2VzcyBwcm9jZWR1cmUKICAgICAoRXZl bnQgOiBTeXN0ZW0uQWRkcmVzczsgRGF0YSA6IFN5c3RlbS5BZGRyZXNzKTsKICAgLS0gIEZ1bmN0 aW9uIHRoYXQgY2FuIGJlIHVzZWQgYXMgYSBuZXcgZXZlbnQgaGFuZGxlci4KICAgLS0gIFVzZSBG cm9tX0FkZHJlc3MgYmVsb3cgdG8gY29udmVydCB0byBhIHJlYWwgZXZlbnQgdHlwZS4KICAgLS0g IFRoaXMgZnVuY3Rpb24gc2hvdWxkIGRpc3BhdGNoIGFsbCB0aGUgZXZlbnRzIHByb3Blcmx5LCBz aW5jZSBpdCByZXBsYWNlcwogICAtLSAgY29tcGxldGx5IHRoZSBkZWZhdWx0IGV2ZW50IGhhbmRs ZXIuIEhvd2V2ZXIsIGl0IGNhbiBjYWxsCiAgIC0tICBHdGsuTWFpbi5Eb19FdmVudCB0byB0YWtl IGNhcmUgb2YgdGhlIGV2ZW50cyBpdCBkb2VzIG5vdCBrbm93IGhvdyB0bwogICAtLSAgaGFuZGxl LgoKICAgcHJvY2VkdXJlIEV2ZW50X0hhbmRsZXJfU2V0CiAgICAgKEZ1bmMgOiBFdmVudF9IYW5k bGVyX0Z1bmM7IERhdGEgOiBTeXN0ZW0uQWRkcmVzcyk7CiAgIC0tICBTZXQgdXAgYSBuZXcgZXZl bnQgaGFuZGxlci4KICAgLS0gIFRoaXMgaGFuZGxlciByZXBsYWNlcyB0aGUgZGVmYXVsdCBHdGtB ZGEgZXZlbnQgaGFuZGxlciwgYW5kIHRodXMgc2hvdWxkCiAgIC0tICBtYWtlIHN1cmUgdGhhdCBh bGwgZXZlbnRzIGFyZSBjb3JyZWN0bHkgaGFuZGxlZC4KICAgLS0KICAgLS0gIE5vdGUgdGhhdCBt YW5hZ2luZyB0aGUgbWVtb3J5IGZvciBEYXRhIGlzIHlvdXIgcmVzcG9uc2FiaWxpdHksIGFuZAog ICAtLSAgRGF0YSBpcyBwYXNzZWQgYXMgaXMgdG8gRnVuYy4KCiAgIGZ1bmN0aW9uIEZyb21fQWRk cmVzcyAoQyA6IFN5c3RlbS5BZGRyZXNzKSByZXR1cm4gR2RrX0V2ZW50OwogICAtLSAgQ29udmVy dCBhIEMgaGFuZGxlciB0byB0aGUgbWF0Y2hpbmcgRXZlbnQgc3RydWN0dXJlLgoKICAgZnVuY3Rp b24gVG9fQWRkcmVzcyAoQyA6IEdka19FdmVudCkgcmV0dXJuIFN5c3RlbS5BZGRyZXNzOwogICAt LSAgQ29udmVydCBhbiBldmVudCB0byB0aGUgdW5kZXJseWluZyBDIGhhbmRsZXIuCgogICBmdW5j dGlvbiBJc19DcmVhdGVkIChFIDogR2RrX0V2ZW50KSByZXR1cm4gQm9vbGVhbjsKICAgLS0gIFJl dHVybiBUcnVlIGlmIHRoZSB1bmRlcmx5aW5nIEMgZXZlbnQgaGFzIGJlZW4gY3JlYXRlZC4KCiAg IC0tLS0tLS0tLS0tLS0tLS0tLS0KICAgLS0gRGVzaWduIGlzc3VlcyAtLQogICAtLS0tLS0tLS0t LS0tLS0tLS0tCiAgIC0tICBTZWUgZ2RrLWV2ZW50LmFkYiBmb3Igc29tZSBvZiB0aGUgZGVzaWdu IGlzc3VlcyBiZWhpbmcgdGhhdCBwYWNrYWdlLgoKcHJpdmF0ZQogICBwcmFnbWEgSW1wb3J0IChD LCBHZXRfRXZlbnRfVHlwZSwgImFkYV9nZGtfZXZlbnRfZ2V0X3R5cGUiKTsKICAgcHJhZ21hIElt cG9ydCAoQywgR2V0X1dpbmRvdywgImFkYV9nZGtfZXZlbnRfZ2V0X3dpbmRvdyIpOwogICBwcmFn bWEgSW1wb3J0IChDLCBHZXRfVGltZSwgImdka19ldmVudF9nZXRfdGltZSIpOwogICBwcmFnbWEg SW1wb3J0IChDLCBQdXQsICJnZGtfZXZlbnRfcHV0Iik7CiAgIHByYWdtYSBJbXBvcnQKICAgICAo QywgU2VuZF9DbGllbnRfTWVzc2FnZV9Ub19BbGwsICJnZGtfZXZlbnRfc2VuZF9jbGllbnRtZXNz YWdlX3RvYWxsIik7CiAgIHByYWdtYSBJbXBvcnQgKEMsIFNldF9XaW5kb3csICJhZGFfZ2RrX2V2 ZW50X3NldF93aW5kb3ciKTsKCmVuZCBHZGsuRXZlbnQ7Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tICAgICAg ICAgIEd0a0FkYSAtIEFkYTk1IGJpbmRpbmcgZm9yIHRoZSBHaW1wIFRvb2xraXQgICAgICAgICAg ICAgIC0tCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC0tCi0tICAgICAgICAgICAgICAgICAgICAgQ29weXJpZ2h0IChD KSAxOTk4LTIwMDAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tICAgICAgICBFbW1hbnVlbCBC cmlvdCwgSm9lbCBCcm9iZWNrZXIgYW5kIEFybmF1ZCBDaGFybGV0ICAgICAgICAgIC0tCi0tICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC0tCi0tIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgICAgIC0tCi0tIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyAgICAgICAgICAgICAgIC0tCi0tIExpY2Vuc2UgYXMgcHVi bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciAgICAgIC0tCi0t IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg dmVyc2lvbi4gIC0tCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgIC0tCi0tIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgIC0t Ci0tIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUgR05VIC0tCi0tIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4gICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyAgICAgICAg IC0tCi0tIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8g dGhlICAgICAgICAgICAgIC0tCi0tIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkg VGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCAgICAgIC0tCi0tIEJvc3RvbiwgTUEgMDIxMTEtMTMw NywgVVNBLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC0tCi0tIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIGlmIG90aGVyIGZpbGVzIGluc3RhbnRp YXRlIGdlbmVyaWNzIGZyb20gIC0tCi0tIHRoaXMgdW5pdCwgb3IgeW91IGxpbmsgdGhpcyB1bml0 IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiAgIC0tCi0tIGV4ZWN1dGFibGUsIHRoaXMg IHVuaXQgIGRvZXMgbm90ICBieSBpdHNlbGYgY2F1c2UgIHRoZSByZXN1bHRpbmcgIC0tCi0tIGV4 ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Uu IFRoaXMgIC0tCi0tIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyIGludmFsaWRhdGUgYW55IG90 aGVyIHJlYXNvbnMgd2h5IHRoZSAgIC0tCi0tIGV4ZWN1dGFibGUgZmlsZSAgbWlnaHQgYmUgY292 ZXJlZCBieSB0aGUgIEdOVSBQdWJsaWMgTGljZW5zZS4gICAgIC0tCi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgot LSAgPGRlc2NyaXB0aW9uPgotLSAgVGhpcyBpcyB0aGUgYmFzZSBwYWNrYWdlIGZvciBoYW5kbGlu ZyBmb250cy4KLS0gIEd0a0FkYSBrbm93cyBhYm91dCBiaXRtYXAgYW5kIHZlY3RvcmlhbCBmb250 cywgYW5kIGNhbiBkcmF3IGJvdGguCi0tICBUaGUgbGlzdCBvZiBmb250cyBhdmFpbGFibGUgdG8g eW91IGRlcGVuZHMgb24gd2hhdCBpcyBpbnN0YWxsZWQgb24KLS0gIHlvdXIgc3lzdGVtLgotLQot LSAgVGhlIG5hbWUgb2YgdGhlIGZvbnQgaXMgaW5kaWNhdGVkIGluIHRoZSBzdGFuZGFyZCBYMTEg ZmFzaGlvbiwgbmFtZWx5OgotLSAgKGV4YW1wbGUgZXh0cmFjdGVkIGZyb20gdGhlIFhsaWIgbWFu dWFsKToKLS0KLS0gIC1hZG9iZS1jb3VyaWVyLWJvbGQtby1ub3JtYWwtLTEwLTEwMC03NS03NS1t LTYwLWlzbzg4NTktMQotLSAgd2hlcmU6Ci0tICAgIC0gYWRvYmUgICAgIDogZm91bmRyeQotLSAg ICAtIGNvdXJpZXIgICA6IGZvbnQgZmFtaWx5Ci0tICAgIC0gYm9sZCAgICAgIDogd2VpZ2h0IChl LmcuIGJvbGQsIG1lZGl1bSkKLS0gICAgLSBvICAgICAgICAgOiBzbGFudCAoZS5nLiByb21hbiwg aXRhbGljLCBvYmxpcXVlKQotLSAgICAtIG5vcm1hbCAgICA6IHNldCB3aWR0aCAoZS5nLiBub3Jt YWwsIGNvbmRlbnNlZCwgbmFycm93LCBkb3VibGUpCi0tICAgIC0gMTAgICAgICAgIDogcGl4ZWxz Ci0tICAgIC0gMTAwICAgICAgIDogcG9pbnRzIChpbiB0ZW50aHMgb2YgYSBwb2ludCkKLS0gICAg LSA3NSAgICAgICAgOiBob3Jpem9udGFsIHJlc29sdXRpb24gaW4gZHBpCi0tICAgIC0gNzUgICAg ICAgIDogdmVydGljYWwgcmVzb2x1dGlvbiBpbiBkcGkKLS0gICAgLSBtICAgICAgICAgOiBzcGFj aW5nIChlLmcuIG1vbm9zcGFjZSBvciBwcm9wb3J0aW9uYWwpCi0tICAgIC0gNjAgICAgICAgIDog YXZlcmFnZSB3aWR0aCAoaW4gdGVudGhzIG9mIGEgcGl4ZWwpCi0tICAgIC0gaXNvODg1OS0xIDog Y2hhcmFjdGVyIHNldAotLQotLSAgQW55IG9mIHRoZSBmaWVsZHMgY2FuIGhhdmUgYSAnKicgaW5z dGVhZCwgc28gdGhhdCB0aGUgc3lzdGVtIHdpbGwKLS0gIGF1dG9tYXRpY2FsbHkgZmluZCBhIGZv bnQgdGhhdCBtYXRjaGVzIHRoZSByZXN0IG9mIHRoZSBzdHJpbmcsIGFuZCB3b24ndAotLSAgY2Fy ZSBhYm91dCB0aGF0IHNwZWNpZmljIGZpZWxkLgotLQotLSAgQnV0IHRoZSBlYXNpZXN0IHdheSB0 byBzZWxlY3QgYSBmb250IGlzIGJ5IHVzaW5nIHNvbWUgZXh0ZXJuYWwgcHJvZ3JhbXMsCi0tICBm b3IgaW5zdGFuY2UgeGZvbnRzZWwsIHhsc2ZvbnQsIGdmb250c2VsLCBvciBldmVuIHRoZSBmb250 IHNlbGVjdGlvbgotLSAgZGlhbG9nIGV4YW1wbGUgaW4gdGhlIHRlc3RndGsvIGRpcmVjdG9yeSBv ZiB0aGUgR3RrQWRhIGRpc3RyaWJ1dGlvbi4KLS0KLS0gIEBweHJlZntQYWNrYWdlX0d0ay5FeHRy YS5Qc0ZvbnR9IGZvciBhIHBhY2thZ2UgdGhhdCBwcm9jZXNzZXMgcG9zdHNjcmlwdAotLSAgZm9u dHMsIHdpdGggdGhlaXIgbW9yZSB1c3VhbCBuYW1lcywgYW5kIGNhbiBlYXNpbHkgY29udmVydCB0 aGVtIHRvIHN0YW5kYXJkCi0tICBHZGtfRm9udCBzdHJ1Y3R1cmVzLgotLQotLSAgU29tZSBvZiB0 aGUgZnVuY3Rpb25zIGJlbG93IHNob3VsZCBiZSB1c2VkIG9ubHkgZm9yIHdpZGUtY2hhcmFjdGVy IHN0cmluZ3MuCi0tICBUaGlzIGlzIG5lZWRlZCBmb3IgbGFuZ3VhZ2VzIHdpdGggbW9yZSB0aGFu IDI1NiBjaGFyYWN0ZXJzLgotLQotLSAgV2lkZSBjaGFyYWN0ZXIgdmFsdWVzIGJldHdlZW4gMCBh bmQgMTI3IGFyZSBhbHdheXMgaWRlbnRpY2FsIGluIG1lYW5pbmcgdG8KLS0gIHRoZSBBU0NJSSBj aGFyYWN0ZXIgY29kZXMuCi0tICBBbiBhbHRlcm5hdGl2ZSB0byB3aWRlIGNoYXJhY3RlcnMgaXMg bXVsdGktYnl0ZSBjaGFyYWN0ZXJzLCB3aGljaCBleHRlbmQKLS0gIG5vcm1hbCBjaGFyIHN0cmlu Z3MgdG8gY29wZSB3aXRoIGxhcmdlciBjaGFyYWN0ZXIgc2V0cy4gQXMgdGhlIG5hbWUKLS0gIHN1 Z2dlc3RzLCBtdWx0aS1ieXRlIGNoYXJhY3RlcnMgdXNlIGEgZGlmZmVyZW50IG51bWJlciBvZiBi eXRlcyB0byBzdG9yZQotLSAgZGlmZmVyZW50IGNoYXJhY3RlciBjb2Rlcy4gRm9yIGV4YW1wbGUg Y29kZXMgMC0xMjcgKGkuZS4gdGhlIEFTQ0lJIGNvZGVzKQotLSAgb2Z0ZW4gdXNlIGp1c3Qgb25l IGJ5dGUgb2YgbWVtb3J5LCB3aGlsZSBvdGhlciBjb2RlcyBtYXkgdXNlIDIsIDMgb3IgZXZlbgot LSAgNCBieXRlcy4gTXVsdGktYnl0ZSBjaGFyYWN0ZXJzIGhhdmUgdGhlIGFkdmFudGFnZSB0aGF0 IHRoZXkgY2FuIG9mdGVuIGJlCi0tICB1c2VkIGluIGFuIGFwcGxpY2F0aW9uIHdpdGggbGl0dGxl IGNoYW5nZSwgc2luY2Ugc3RyaW5ncyBhcmUgc3RpbGwKLS0gIHJlcHJlc2VudGVkIGFzIGFycmF5 cyBvZiBjaGFyIHZhbHVlcy4gSG93ZXZlciBtdWx0aS1ieXRlIHN0cmluZ3MgYXJlIG11Y2gKLS0g IGVhc2llciB0byBtYW5pcHVsYXRlIHNpbmNlIHRoZSBjaGFyYWN0ZXIgYXJlIGFsbCBvZiB0aGUg c2FtZSBzaXplLgotLQotLSAgT24gVW5peCBzeXN0ZW1zLCB0aGUgZXh0ZXJuYWwgdXRpbGl0eSAn eGZkJyBjYW4gYmUgdXNlZCB0byBkaXNwbGF5IGFsbAotLSAgdGhlIGNoYXJhY3RlcnMgaW4gYSBm b250LgotLQotLSAgPC9kZXNjcmlwdGlvbj4KLS0gIDxjX3ZlcnNpb24+MS4yLjc8L2NfdmVyc2lv bj4KLS0gIDxzY3JlZW5zaG90PmZvbnQ8L3NjcmVlbnNob3Q+Cgp3aXRoIEdsaWI7IHVzZSBHbGli Owp3aXRoIEdkay5UeXBlczsKCnBhY2thZ2UgR2RrLkZvbnQgaXMKCiAgIHR5cGUgR2RrX0ZvbnQg aXMgbmV3IEdkay5DX1Byb3h5OwogICAtLSAgQSBmb250IHVzZWQgdG8gZHJhdyB0ZXh0LgogICAt LSAgVGhpcyBjYW4gcmVwcmVzZW50IGEgYml0bWFwIGZvbnQsIGEgc2NhbGFibGUgKHZlY3Rvcmlh bCkgZm9udCwgb3IKICAgLS0gIGEgZm9udHNldC4gQSBmb250c2V0IGlzIGEgbGlzdCBvZiBjb21t YS1zZXBhcmF0ZWQgZm9udHMsIHRoYXQgcGVybWl0cwogICAtLSAgR3RrQWRhIHRvIG9idGFpbiB0 aGUgZm9udHMgbmVlZGVkIGZvciBhIHZhcmlldHkgb2YgbG9jYWxlcyBmcm9tIGEKICAgLS0gIHNp bmdsZSBsb2NhbGUtaW5kZXBlbmRlbnQgYmFzZSBmb250IG5hbWUuIFRoZSBzaW5nbGUgYmFzZSBm b250IG5hbWUKICAgLS0gIHNob3VsZCBuYW1lIGEgZmFtaWx5IG9mIGZvbnRzIHdob3NlIG1lbWJl cnMgYXJlIGVuY29kZWQgaW4gdGhlIHZhcmlvdXMKICAgLS0gIGNoYXJzZXRzIG5lZWRlZCBieSB0 aGUgbG9jYWxlcyBvZiBpbnRlcmVzdC4KICAgLS0gIFRoZSBhbGdvcml0aG0gdXNlZCB0byBzZWxl Y3QgdGhlIGZvbnQgaXMgZGVzY3JpYmVkIGluIHRoZSBtYW51YWwgcGFnZQogICAtLSAgZm9yIFhD cmVhdGVGb250U2V0KDNYKS4KCiAgIE51bGxfRm9udCA6IGNvbnN0YW50IEdka19Gb250OwoKICAg cHJvY2VkdXJlIExvYWQgKEZvbnQgICAgICA6ICAgIG91dCBHZGtfRm9udDsKICAgICAgICAgICAg ICAgICAgIEZvbnRfTmFtZSA6IGluICAgICBTdHJpbmcpOwogICAtLSAgTG9hZCBhIG5ldyBmb250 LCBnaXZlbiBpdHMgbmFtZS4KICAgLS0gIFRoaXMgaXMgdGhlIGZpcnN0IHN0ZXAgYmVmb3JlIHVz aW5nIGEgZm9udC4KICAgLS0gIFRoZSBmb250IGlzIGZpcnN0IGxvb2tlZCB1cCBpbiB0aGUgY2Fj aGUsIGFuZCBpZiBpdCB3YXMgYWxyZWFkeQogICAtLSAgbG9hZGVkLCBpdCBpcyBub3QgcmVsb2Fk ZWQgYWdhaW4uIFRodXMsIGl0IGRvZXMgbm90IGhhcm0gdG8gY2FsbAogICAtLSAgdGhpcyBmdW5j dGlvbiBtdWx0aXBsZSB0aW1lcyB3aXRoIHRoZSBzYW1lIEZvbnRfTmFtZS4KICAgLS0gIE51bGxf Rm9udCBpcyByZXR1cm5lZCBpZiB0aGUgZm9udCBjb3VsZCBub3QgYmUgbG9hZGVkLgoKICAgcHJv Y2VkdXJlIEZvbnRzZXRfTG9hZCAoRm9udCAgICAgICAgIDogICBvdXQgR2RrX0ZvbnQ7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZvbnRzZXRfTmFtZSA6IGluICAgIFN0cmluZyk7CiAgIC0t ICBMb2FkIGEgbmV3IGZvbnQgc2V0LgogICAtLSAgRm9udHNldF9OYW1lIGlzIGEgY29tbWEtc2Vw YXJhdGVkIGxpc3Qgb2YgZm9udHMgdGhhdCB3aWxsIGJlIGxvYWRlZAogICAtLSAgYXMgcGFydCBv ZiB0aGUgZm9udHNldC4KCiAgIHByb2NlZHVyZSBSZWYgKEZvbnQgOiBpbiBHZGtfRm9udCk7CiAg IC0tICBJbmNyZW1lbnQgdGhlIHJlZmVyZW5jZSBjb3VudGVyIGZvciB0aGUgZm9udC4KICAgLS0g IFlvdSBzaG91bGQgbm90IG1ha2UgYW55IGFzc3VtcHRpb24gb2YgdGhlIGluaXRpYWwgdmFsdWUg b2YgdGhlIGZvbnRzCiAgIC0tICByZXR1cm5lZCBieSBMb2FkIG9yIEZvbnRzZXRfTG9hZCwgc2lu Y2UgdGhlc2UgY2FuIGJlIGV4dHJhY3RlZCBmcm9tIGEKICAgLS0gIGNhY2hlLgoKICAgcHJvY2Vk dXJlIFVucmVmIChGb250IDogaW4gR2RrX0ZvbnQpOwogICAtLSAgRGVjcmVtZW50IHRoZSByZWZl cmVuY2UgY291bnRlciBmb3IgdGhlIGZvbnQuCiAgIC0tICBXaGVuIHRoaXMgY291bnRlciByZWFj aGVzIDAsIHRoZSBmb250IGlzIGRlbGV0ZWQgZnJvbSBtZW1vcnkuCgogICBmdW5jdGlvbiBJZCAo Rm9udCA6IGluIEdka19Gb250KSByZXR1cm4gR2ludDsKICAgLS0gIFJldHVybiB0aGUgWCBmb250 IGlkIGZvciB0aGUgZm9udC4KICAgLS0gIFRoaXMgSWQgd2lsbCBvbmx5IGJlIG5lZWRlZCBpZiB5 b3Ugd2FudCB0byBjYWxsIGRpcmVjdGx5IFgxMSBmdW5jdGlvbnMsCiAgIC0tICB5b3Ugd29uJ3Qg bmVlZCBpdCB3aXRoIEd0a0FkYS4KCiAgIGZ1bmN0aW9uIEVxdWFsIChGb250YSwgRm9udGIgOiBp biBHZGtfRm9udCkgcmV0dXJuIEJvb2xlYW47CiAgIC0tICBDb21wYXJlIHR3byBmb250cyBvciB0 d28gZm9udHNldHMgZm9yIGVxdWFsaXR5LgogICAtLSAgVHdvIGZvbnRzIGFyZSBlcXVhbCBpZiB0 aGV5IGhhdmUgdGhlIHNhbWUgZm9udCBJZC4KICAgLS0gIFR3byBmb250c2V0cyBhcmUgZXF1YWwg aWYgdGhlIG5hbWUgZ2l2ZW4gdG8gRm9udHNldF9Mb2FkIHdhcyB0aGUgc2FtZS4KCiAgIGZ1bmN0 aW9uIEdldF9Bc2NlbnQgKEZvbnQgOiBpbiBHZGtfRm9udCkgcmV0dXJuIEdpbnQ7CiAgIC0tICBS ZXR1cm4gdGhlIG1heGltYWwgYXNjZW50IGZvciB0aGUgZm9udC4KICAgLS0gIFRoaXMgaXMgdGhl IGxvZ2ljYWwgZXh0ZW50IGFib3ZlIHRoZSBiYXNlbGluZSBmb3Igc3BhY2luZyBiZXR3ZWVuIHR3 bwogICAtLSAgbGluZXMuCgogICBmdW5jdGlvbiBHZXRfRGVzY2VudCAoRm9udCA6IGluIEdka19G b250KSByZXR1cm4gR2ludDsKICAgLS0gIFJldHVybiB0aGUgbWF4aW1hbCBkZXNjZW50IGZvciB0 aGUgZm9udC4KICAgLS0gIFRoaXMgaXMgdGhlIGxvZ2ljYWwgZXh0ZW50IGJlbG93IHRoZSBiYXNl bGluZSBmb3Igc3BhY2luZyBiZXR3ZWVuIHR3bwogICAtLSAgbGluZXMuCgogICBmdW5jdGlvbiBT dHJpbmdfV2lkdGggKEZvbnQgOiBpbiBHZGtfRm9udDsKICAgICAgICAgICAgICAgICAgICAgICAg ICBTdHIgIDogaW4gU3RyaW5nKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpbnQ7 CiAgIC0tICBSZXR1cm4gdGhlIHdpZHRoIGluIHBpeGVscyB0aGF0IFN0ciB3aWxsIG9jY3VweSBp ZiBkcmF3biB3aXRoIEZvbnQuCiAgIC0tICBUaGUgdmFsdWUgcmV0dXJuZWQgaXMgdGhlIGRpc3Rh bmNlIGJldHdlZW4gdGhlIG9yaWdpbiBvZiB0aGUgdGV4dCBhbmQKICAgLS0gIHRoZSBwb3NpdGlv biBhdCB3aGljaCB0aGUgbmV4dCBzdHJpbmcgc2hvdWxkIGJlIGRyYXduLgoKICAgZnVuY3Rpb24g VGV4dF9XaWR0aCAoRm9udCA6IGluIEdka19Gb250OwogICAgICAgICAgICAgICAgICAgICAgICBU ZXh0IDogaW4gU3RyaW5nKQogICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaW50OwogICAt LSAgVGhpcyBpcyB0aGUgc2FtZSBmdW5jdGlvbiBhcyBTdHJpbmdfV2lkdGguCiAgIC0tICBJbiBD LCB0aGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIHRvIG1lYXN1cmUgb25seSB0aGUgd2lkdGggb2Yg YSBwYXJ0CiAgIC0tICBvZiB0aGUgc3RyaW5nLCBidXQgeW91IGNhbiBzaW1wbHkgcGFzcyBpdCBh IHN1YnN0cmluZyBpbiBBZGEuCgogICBmdW5jdGlvbiBUZXh0X1dpZHRoIChGb250IDogaW4gR2Rr X0ZvbnQ7CiAgICAgICAgICAgICAgICAgICAgICAgIFRleHQgOiBpbiBHZGsuVHlwZXMuR2RrX1dT dHJpbmcpCiAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpbnQ7CiAgIC0tICBSZXR1cm4g dGhlIHdpZHRoIGluIHBpeGVscyB0aGF0IFRleHQgd2lsbCBvY2N1cHkgb24gdGhlIHNjcmVlbi4K ICAgLS0gIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIHVzZWQgd2l0aCBzdHJpbmdzIHRoYXQgY29u dGFpbiBVbmljb2RlCiAgIC0tICBjaGFyYWN0ZXJzCgogICBmdW5jdGlvbiBDaGFyX1dpZHRoIChG b250IDogaW4gR2RrX0ZvbnQ7CiAgICAgICAgICAgICAgICAgICAgICAgIENoYXIgOiBpbiBDaGFy YWN0ZXIpCiAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpbnQ7CiAgIC0tICBSZXR1cm4g dGhlIHdpZHRoIGluIHBpeGVscyBvY2N1cGllZCBieSBhIHNpbmdsZSBjaGFyYWN0ZXIgb24gdGhl IHNjcmVlbi4KICAgLS0gIFRoZSB2YWx1ZSByZXR1cm5lZCBpcyB0aGUgZGlzdGFuY2UgYmV0d2Vl biBDaGFyJ3Mgb3JpZ2luIG9uIHRoZSBzY3JlZW4KICAgLS0gIGFuZCB0aGUgb3JpZ2luIG9mIHRo ZSBuZXh0IGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nLgoKICAgZnVuY3Rpb24gQ2hhcl9XaWR0aCAo Rm9udCA6IGluIEdka19Gb250OwogICAgICAgICAgICAgICAgICAgICAgICBDaGFyIDogaW4gR2Rr LlR5cGVzLkdka19XQ2hhcikKICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2ludDsKICAg LS0gIFJldHVybiB0aGUgd2lkdGggaW4gcGl4ZWxzIG9jY3VwaWVkIGJ5IGEgc2luZ2xlIHdpZGUt Y2hhcmFjdGVyLgoKICAgZnVuY3Rpb24gU3RyaW5nX01lYXN1cmUgKEZvbnQgOiBpbiBHZGtfRm9u dDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0ciAgOiBpbiBTdHJpbmcpCiAgICAgICAg ICAgICAgICAgICAgICAgICAgIHJldHVybiBHaW50OwogICAtLSAgRGV0ZXJtaW5lIHRoZSBkaXN0 YW5jZSBmcm9tIHRoZSBvcmlnaW4gdG8gdGhlIHJpZ2h0bW9zdCBwb3J0aW9uIG9mIFN0ci4KICAg LS0gIFRoaXMgaXMgbm90IHRoZSBjb3JyZWN0IHZhbHVlIGZvciBkZXRlcm1pbmluZyB0aGUgb3Jp Z2luIG9mIHRoZSBuZXh0CiAgIC0tICBwb3J0aW9uIHdoZW4gZHJhd2luZyB0ZXh0IGluIG11bHRp cGxlIHBpZWNlcy4KICAgLS0gIFNlZSBTdHJpbmdfV2lkdGggaW5zdGVhZC4KCiAgIGZ1bmN0aW9u IFRleHRfTWVhc3VyZSAoRm9udCA6IGluIEdka19Gb250OwogICAgICAgICAgICAgICAgICAgICAg ICAgIFRleHQgOiBpbiBTdHJpbmcpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2lu dDsKICAgLS0gIFNhbWUgZnVuY3Rpb24gYSBTdHJpbmdfTWVhc3VyZS4KICAgLS0gIEluIEMsIHRo aXMgZnVuY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWVhc3VyZSBvbmx5IHRoZSB3aWR0aCBvZiBhIHBh cnQgb2YKICAgLS0gIHRoZSBzdHJpbmcsIGJ1dCB5b3UgY2FuIHNpbXBseSBwYXNzIGl0IGEgc3Vi c3RyaW5nIGluIEFkYS4KICAgLS0gIFRoaXMgaXMgYWxzbyBjYWxsZWQgdGhlIHJpZ2h0IGJlYXJp bmcgb2YgdGhlIHN0cmluZy4KCiAgIGZ1bmN0aW9uIENoYXJfTWVhc3VyZSAoRm9udCA6IGluIEdk a19Gb250OwogICAgICAgICAgICAgICAgICAgICAgICAgIENoYXIgOiBpbiBDaGFyYWN0ZXIpCiAg ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2ludDsKICAgLS0gIFJldHVybiB0aGUgd2lk dGggaW4gcGl4ZWxzIG9mIENoYXIuCiAgIC0tICBBcyBvcHBvc2VkIHRvIENoYXJfV2lkdGgsIHRo ZSB2YWx1ZSByZXR1cm5lZCBpcyBub3QgdGhlIGRpc3RhbmNlIGF0CiAgIC0tICB3aGljaCB0aGUg bmV4dCBjaGFyYWN0ZXIgc2hvdWxkIGJlIGRyYXduLgogICAtLSAgVGhpcyBpcyBhbHNvIGNhbGxl ZCB0aGUgcmlnaHQgYmVhcmluZyBvZiB0aGUgY2hhcmFjdGVyLgoKICAgcHJvY2VkdXJlIFN0cmlu Z19FeHRlbnRzIChGb250ICAgICA6IGluICAgICBHZGsuRm9udC5HZGtfRm9udDsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBTdHIgICAgICA6IGluICAgICBTdHJpbmc7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTGJlYXJpbmcgOiAgICBvdXQgR2ludDsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBSYmVhcmluZyA6ICAgIG91dCBHaW50OwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFdpZHRoICAgIDogICAgb3V0IEdpbnQ7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQXNjZW50ICAgOiAgICBvdXQgR2ludDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBEZXNjZW50ICA6ICAgIG91dCBHaW50KTsKICAgLS0gIFJldHVybiB0aGUgbWV0cmljcyBmb3Ig YSBnaXZlbiB0ZXh0LgogICAtLSAgU2VlIHRoZSBwaWN0dXJlIGZvciBtb3JlIGV4cGxhbmF0aW9u cyBvbiBhbGwgdGhlIGZpZWxkcy4KICAgLS0gIExiZWFyaW5nIDogT3JpZ2luIHRvIGxlZnQgZWRn ZSBvZiBjaGFyYWN0ZXIuCiAgIC0tICBSYmVhcmluZyA6IE9yaWdpbiB0byByaWdodCBlZGdlIG9m IGNoYXJhY3Rlci4KICAgLS0gIFdpZHRoICAgIDogQWR2YW5jZSB0byBuZXh0IGNoYXJhY3Rlcidz IG9yaWdpbi4KICAgLS0gIEFzY2VudCAgIDogQmFzZWxpbmUgdG8gdG9wIGVkZ2Ugb2YgY2hhcmFj dGVyLgogICAtLSAgRGVzY2VudCAgOiBCYXNlbGluZSB0byBib3R0b20gZWRnZSBvZiBjaGFyYWN0 ZXIuCgogICBwcm9jZWR1cmUgVGV4dF9FeHRlbnRzIChGb250ICAgICAgICA6IGluICAgICBHZGtf Rm9udDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dCAgICAgICAgOiBpbiAgICAgU3Ry aW5nOwogICAgICAgICAgICAgICAgICAgICAgICAgICBMYmVhcmluZyAgICA6ICAgIG91dCBHaW50 OwogICAgICAgICAgICAgICAgICAgICAgICAgICBSYmVhcmluZyAgICA6ICAgIG91dCBHaW50Owog ICAgICAgICAgICAgICAgICAgICAgICAgICBXaWR0aCAgICAgICA6ICAgIG91dCBHaW50OwogICAg ICAgICAgICAgICAgICAgICAgICAgICBBc2NlbnQgICAgICA6ICAgIG91dCBHaW50OwogICAgICAg ICAgICAgICAgICAgICAgICAgICBEZXNjZW50ICAgICA6ICAgIG91dCBHaW50KTsKICAgLS0gIFJl dHVybiBhbGwgdGhlIG1ldHJpY3MgZm9yIGEgZ2l2ZW4gdGV4dC4KICAgLS0gIFNlZSB0aGUgcGlj dHVyZSBmb3IgbW9yZSBleHBsYW5hdGlvbnMgb24gYWxsIHRoZSBmaWVsZHMuCiAgIC0tICBpbiBD LCB0aGlzIGZ1bmN0aW9uIHdvdWxkIGJlIHVzZWQgZm9yIHBhcnQgb2YgYSBzdHJpbmcsIHdoaWNo IHlvdSBjYW4KICAgLS0gIHNpbXVsYXRlIGluIEFkYSB3aXRoIGEgc3Vic3RyaW5nLgoKICAgcHJv Y2VkdXJlIFRleHRfRXh0ZW50cyAoRm9udCAgICAgICAgOiBpbiAgICAgR2RrX0ZvbnQ7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgIFRleHQgICAgICAgIDogaW4gICAgIEdkay5UeXBlcy5HZGtf V1N0cmluZzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgTGJlYXJpbmcgICAgOiAgICBvdXQg R2ludDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgUmJlYXJpbmcgICAgOiAgICBvdXQgR2lu dDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lkdGggICAgICAgOiAgICBvdXQgR2ludDsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgQXNjZW50ICAgICAgOiAgICBvdXQgR2ludDsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgRGVzY2VudCAgICAgOiAgICBvdXQgR2ludCk7CiAgIC0t ICBSZXR1cm4gYWxsIHRoZSBtZXRyaWNzIGZvciBhIGdpdmVuIHdpZGUtY2hhcmFjdGVyIHN0cmlu Zy4KICAgLS0gIFNlZSB0aGUgcGljdHVyZSBmb3IgbW9yZSBleHBsYW5hdGlvbnMgb24gdGhlIHJl dHVybmVkIHZhbHVlcy4KCiAgIGZ1bmN0aW9uIFN0cmluZ19IZWlnaHQgKEZvbnQgOiBpbiBHZGtf Rm9udDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyICA6IGluIFN0cmluZykKICAgICAg ICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2ludDsKICAgLS0gIFJldHVybiB0aGUgaGVpZ2h0 IGluIHBpeGVscyBvZiB0aGUgc3RyaW5nLgogICAtLSAgVGhpcyBpcyB0aGUgdG90YWwgaGVpZ2h0 LCBhbmQgeW91IGNhbiBub3QgZWFzaWx5IHRlbGwgaG93IHRoaXMgaGVpZ2h0CiAgIC0tICBpcyBz cGxpdCBhcm91bmQgdGhlIGJhc2VsaW5lLgoKICAgZnVuY3Rpb24gVGV4dF9IZWlnaHQgKEZvbnQg OiBpbiBHZGtfRm9udDsKICAgICAgICAgICAgICAgICAgICAgICAgIFN0ciAgOiBpbiBTdHJpbmcp CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaW50OwogICAtLSAgU2FtZSBhcyBTdHJp bmdfSGVpZ2h0LgogICAtLSAgSW4gQywgdGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCB0byBtZWFz dXJlIG9ubHkgdGhlIHdpZHRoIG9mIGEgcGFydCBvZgogICAtLSAgdGhlIHN0cmluZywgYnV0IHlv dSBjYW4gc2ltcGx5IHBhc3MgaXQgYSBzdWJzdHJpbmcgaW4gQWRhLgogICAtLSAgVGhpcyBpcyBh bHNvIGNhbGxlZCB0aGUgcmlnaHQgYmVhcmluZyBvZiB0aGUgc3RyaW5nLgoKICAgZnVuY3Rpb24g Q2hhcl9IZWlnaHQgKEZvbnQgOiBpbiBHZGtfRm9udDsKICAgICAgICAgICAgICAgICAgICAgICAg IENoYXIgOiBpbiBDaGFyYWN0ZXIpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaW50 OwogICAtLSAgUmV0dXJuIHRoZSB0b3RhbCBoZWlnaHQgaW4gcGl4ZWxzIG9mIGEgc2luZ2xlIGNo YXJhY3Rlci4KCgpwcml2YXRlCiAgIE51bGxfRm9udCA6IGNvbnN0YW50IEdka19Gb250IDo9IG51 bGw7CiAgIHByYWdtYSBJbXBvcnQgKEMsIENoYXJfSGVpZ2h0LCAiZ2RrX2NoYXJfaGVpZ2h0Iik7 CiAgIHByYWdtYSBJbXBvcnQgKEMsIElkLCAiZ2RrX2ZvbnRfaWQiKTsKICAgcHJhZ21hIEltcG9y dCAoQywgUmVmLCAiZ2RrX2ZvbnRfcmVmIik7CiAgIHByYWdtYSBJbXBvcnQgKEMsIFVucmVmLCAi Z2RrX2ZvbnRfdW5yZWYiKTsKICAgcHJhZ21hIEltcG9ydCAoQywgR2V0X0FzY2VudCwgImFkYV9n ZGtfZm9udF9nZXRfYXNjZW50Iik7CiAgIHByYWdtYSBJbXBvcnQgKEMsIEdldF9EZXNjZW50LCAi YWRhX2dka19mb250X2dldF9kZXNjZW50Iik7CmVuZCBHZGsuRm9udDsKLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K LS0gICAgICAgICAgR3RrQWRhIC0gQWRhOTUgYmluZGluZyBmb3IgdGhlIEdpbXAgVG9vbGtpdCAg ICAgICAgICAgICAgLS0KLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0gICAgICAgICAgICAgICAgICAgICBDb3B5 cmlnaHQgKEMpIDE5OTgtMjAwMCAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0gICAgICAgIEVt bWFudWVsIEJyaW90LCBKb2VsIEJyb2JlY2tlciBhbmQgQXJuYXVkIENoYXJsZXQgICAgICAgICAg LS0KLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLS0KLS0gVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAgICAgLS0KLS0gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljICAgICAgICAgICAgICAgLS0KLS0gTGljZW5z ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyICAg ICAgLS0KLS0gdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu eSBsYXRlciB2ZXJzaW9uLiAgLS0KLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0gVGhpcyBsaWJyYXJ5IGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgLS0KLS0gYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YgICAgLS0KLS0gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZSBHTlUgLS0KLS0gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0g WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj ICAgICAgICAgLS0KLS0gTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3 cml0ZSB0byB0aGUgICAgICAgICAgICAgLS0KLS0gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ bmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsICAgICAgLS0KLS0gQm9zdG9uLCBNQSAw MjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0K LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLS0KLS0gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgaWYgb3RoZXIgZmlsZXMg aW5zdGFudGlhdGUgZ2VuZXJpY3MgZnJvbSAgLS0KLS0gdGhpcyB1bml0LCBvciB5b3UgbGluayB0 aGlzIHVuaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuICAgLS0KLS0gZXhlY3V0YWJs ZSwgdGhpcyAgdW5pdCAgZG9lcyBub3QgIGJ5IGl0c2VsZiBjYXVzZSAgdGhlIHJlc3VsdGluZyAg LS0KLS0gZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZS4gVGhpcyAgLS0KLS0gZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIgaW52YWxpZGF0 ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlICAgLS0KLS0gZXhlY3V0YWJsZSBmaWxlICBtaWdo dCBiZSBjb3ZlcmVkIGJ5IHRoZSAgR05VIFB1YmxpYyBMaWNlbnNlLiAgICAgLS0KLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KCi0tICA8ZGVzY3JpcHRpb24+Ci0tCi0tICBBIGdyYXBoaWMgY29udGV4dCBpcyBhIHN0 cnVjdHVyZSB0aGF0IGRlc2NyaWJlcyBhbGwgdGhlIGF0dHJpYnV0ZXMKLS0gIHVzZWQgYnkgdGhl IGRyYXdpbmcgZnVuY3Rpb25zIGluIEdkay4KLS0gIFRoZSBjb2xvcnMsIGxpbmUgc3R5bGVzLCBG aWxsIHN0eWxlcyBhbmQgc28gb24gYXJlIGRlZmluZWQgdGhyb3VnaAotLSAgdGhpcyBzdHJ1Y3R1 cmUuCi0tCi0tICBPbiBYMTEgc3lzdGVtcywgdGhpcyBzdHJ1Y3R1cmUgaXMgc3RvcmVkIGRpcmVj dGx5IG9uIHRoZSBYU2VydmVyLAotLSAgd2hpY2ggc3BlZWRzIHVwIHRoZSB0cmFuc2ZlciBvZiB0 aGUgZHJhd2luZyBhdHRyaWJ1dGVzIGEgbG90LiBJbnN0ZWFkCi0tICBvZiB0cmFuc2ZlcnJpbmcg YWxsIG9mIHRoZW0gZXZlcnkgdGltZSB5b3UgY2FsbCBvbmUgb2YgdGhlIGRyYXdpbmcKLS0gIGZ1 bmN0aW9ucywgeW91IHNpbXBseSBzcGVjaWZ5IHdoaWNoIEdDIHlvdSB3YW50IHRvIHVzZS4KLS0K LS0gIFRodXMsIGl0IGlzIHJlY29tbWVuZGVkIHRvIGNyZWF0ZSBhcyBtYW55IEdDcyBhcyB5b3Ug bmVlZCwgaW5zdGVhZAotLSAgb2YgY3JlYXRpbmcgYSBzaW5nbGUgb25lIHRoYXQgaXMgbW9kaWZp ZWQgZXZlcnkgdGltZSB5b3UgbmVlZCB0bwotLSAgbW9kaWZ5IG9uZSBvZiB0aGUgYXR0cmlidXRl cy4KLS0KLS0gIE9uIFVuaXggbWFjaGluZXMsIHlvdSBzaG91bGQgaGF2ZSBhIGxvb2sgYXQgdGhl IGV4dGVybmFsIHV0aWxpdHkgJ3hnYycKLS0gIHdoaWNoIGRlbW9uc3RyYXRlcyBhbGwgdGhlIGJh c2ljIHNldHRpbmdzIG9mIHRoZSBncmFwaGljIGNvbnRleHRzLgotLQotLSAgPC9kZXNjcmlwdGlv bj4KLS0gIDxjX3ZlcnNpb24+MS4yLjY8L2NfdmVyc2lvbj4KCndpdGggR2xpYjsgdXNlIEdsaWI7 CndpdGggR2RrLkNvbG9yOwp3aXRoIEdkay5Gb250Owp3aXRoIEdkay5SZWN0YW5nbGU7CndpdGgg R2RrLlJlZ2lvbjsKd2l0aCBHZGsuVHlwZXM7CndpdGggR2RrLldpbmRvdzsKCnBhY2thZ2UgR2Rr LkdDIGlzCgogICBzdWJ0eXBlIEdka19HQyBpcyBHZGsuR2RrX0dDOwogICAtLSAgQSBncmFwaGlj IGNvbnRleHQgdGhhdCBjb250YWluIGFsbCB0aGUgaW5mb3JtYXRpb24gdG8gZHJhdyBncmFwaGlj cwogICAtLSAgb24gdGhlIHNjcmVlbi4KICAgLS0gIENyZWF0aW5nIHRoZXNlIEdDIGlzIG1vcmUg ZWZmaWNpZW50IHRoYW4gcGFzc2luZyBhIGxvdCBvZiBwYXJhbWV0ZXJzCiAgIC0tICB0byBlYWNo IG9mIHRoZSBkcmF3aW5nIGZ1bmN0aW9ucywgc2luY2UgdGhlc2UgR0MgYXJlIHN0b3JlZCBvbiB0 aGUKICAgLS0gIHNlcnZlciBzaWRlIGFuZCBkbyBub3QgbmVlZCB0byBiZSBwYXNzIHRocm91Z2gg dGhlIG5ldHdvcmsuCgogICB0eXBlIEdka19HQ19WYWx1ZXMgaXMgbmV3IEdkay5DX1Byb3h5Owog ICAtLSAgQSBzdHJ1Y3R1cmUgdXNlZCBvbiB0aGUgY2xpZW50IHNpZGUgdG8gc3RvcmUgdGhlIHNh bWUgaW5mb3JtYXRpb24KICAgLS0gIGFzIHRoZSBHQy4gQ3JlYXRpbmcgYSBHQyBmcm9tIHRoaXMg c3RydWN0dXJlIGlzIG1vcmUgZWZmaWNpZW50IHRoYW4KICAgLS0gIGNhbGxpbmcgYSBsb3Qgb2Yg ZnVuY3Rpb25zIHRvIG1vZGlmeSB0aGUgR0MgZGlyZWN0bHksIHNpbmNlIHRoZXJlIGlzCiAgIC0t ICBhIHNpbmdsZSBjYWxsIHRvIHRoZSBzZXJ2ZXIuCgogICBOdWxsX0dDIDogY29uc3RhbnQgR2Rr X0dDOwogICBOdWxsX0dDX1ZhbHVlcyA6IGNvbnN0YW50IEdka19HQ19WYWx1ZXM7CgogICAtLS0t LS0tLS0tLS0KICAgLS0gR2RrX0dDIC0tCiAgIC0tLS0tLS0tLS0tLQoKICAgcHJvY2VkdXJlIEdk a19OZXcgKEdDICAgICA6ICAgIG91dCBHZGtfR0M7CiAgICAgICAgICAgICAgICAgICAgICBXaW5k b3cgOiBpbiAgICAgR2RrLldpbmRvdy5HZGtfV2luZG93KTsKICAgLS0gIENyZWF0ZSBhIG5ldyBn cmFwaGljIGNvbnRleHQuCiAgIC0tICBUaGUgd2luZG93IG11c3QgaGF2ZSBiZWVuIHJlYWxpemVk IGZpcnN0IChzbyB0aGF0IGl0IGlzIGFzc29jaWF0ZWQKICAgLS0gIHdpdGggc29tZSByZXNvdXJj ZXMgb24gdGhlIFhzZXJ2ZXIpLgogICAtLSAgVGhlIEdDIGNhbiB0aGVuIGJlIHVzZWQgZm9yIGFu eSB3aW5kb3cgdGhhdCBoYXMgdGhlIHNhbWUgcm9vdCB3aW5kb3csCiAgIC0tICBhbmQgc2FtZSBj b2xvciBkZXB0aCBhcyBXaW5kb3cuCiAgIC0tICBTZWUgdGhlIG1hbnVhbCBwYWdlIGZvciBYQ3Jl YXRlR0Mgb24gVW5peCBzeXN0ZW1zIGZvciBtb3JlIGluZm9ybWF0aW9uLgoKICAgcHJvY2VkdXJl IEdka19OZXcgKEdDICAgICAgICAgIDogICAgb3V0IEdka19HQzsKICAgICAgICAgICAgICAgICAg ICAgIFdpbmRvdyAgICAgIDogaW4gICAgIEdkay5XaW5kb3cuR2RrX1dpbmRvdzsKICAgICAgICAg ICAgICAgICAgICAgIFZhbHVlcyAgICAgIDogaW4gICAgIEdka19HQ19WYWx1ZXM7CiAgICAgICAg ICAgICAgICAgICAgICBWYWx1ZXNfTWFzayA6IGluICAgICBUeXBlcy5HZGtfR0NfVmFsdWVzX01h c2spOwogICAtLSAgQ3JlYXRlIGEgbmV3IGdyYXBoaWMgY29udGV4dC4KICAgLS0gIEl0IGlzIGRp cmVjdGx5IGNyZWF0ZWQgd2l0aCB0aGUgdmFsdWVzIHNldCBpbiBWYWx1ZXMsIGFuZCB3aG9zZQog ICAtLSAgYXNzb2NpYXRlZCBmaWVsZCBoYXMgYmVlbiBzZXQgaW4gVmFsdWVzX01hc2suCiAgIC0t ICBUaGlzIGlzIGZhc3RlciB0aGFuIGNhbGxpbmcgdGhlIHNpbXBsZSBHZGtfTmV3IGZ1bmN0aW9u IGFuZCBlYWNoIG9mCiAgIC0tICBvdGhlciBmdW5jdGlvbnMgaW4gdGhpcyBwYWNrYWdlLCBzaW5j ZSBlYWNoIG9mIHRoZW0gcmVxdWlyZXMgYSBjYWxsCiAgIC0tICB0byB0aGUgc2VydmVyLgoKICAg cHJvY2VkdXJlIERlc3Ryb3kgKEdDIDogaW4gR2RrX0dDKTsKICAgLS0gIEZyZWUgdGhlIG1lbW9y eSBhbGxvY2F0ZWQgb24gdGhlIHNlcnZlciBmb3IgdGhlIGdyYXBoaWMgY29udGV4dC4KICAgLS0g IEdyYXBoaWMgY29udGV4dHMgYXJlIG5ldmVyIGZyZWVkIGF1dG9tYXRpY2FsbHkgYnkgR3RrQWRh LCB0aGlzIGlzCiAgIC0tICB0aGUgdXNlciByZXNwb25zaWJpbGl0eSB0byBkbyBzby4KCiAgIHBy b2NlZHVyZSBSZWYgKEdDIDogaW4gR2RrX0dDKTsKICAgLS0gIEluY3JlbWVudCB0aGUgcmVmZXJl bmNlIGNvdW50aW5nIGZvciB0aGUgZ3JhcGhpYyBjb250ZXh0LgogICAtLSAgWW91IHNob3VsZCB1 c3VhbGx5IG5vdCBoYXZlIHRvIHVzZSBpdC4KCiAgIHByb2NlZHVyZSBVbnJlZiAoR0MgOiBpbiBH ZGtfR0MpOwogICAtLSAgRGVjcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnRpbmcgZm9yIHRoZSBn cmFwaGljIGNvbnRleHQuCiAgIC0tICBXaGVuIHRoaXMgcmVhY2hlcyAwLCB0aGUgZ3JhcGhpYyBj b250ZXh0IGlzIGRlc3Ryb3llZC4KCiAgIHByb2NlZHVyZSBHZXRfVmFsdWVzIChHQyAgICAgOiBp biBHZGtfR0M7CiAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZXMgOiBpbiBHZGtfR0NfVmFs dWVzKTsKICAgLS0gIEdldCB0aGUgdmFsdWVzIHNldCBpbiB0aGUgR0MuCiAgIC0tICBUaGlzIGNv cGllcyB0aGUgdmFsdWVzIGZyb20gdGhlIHNlcnZlciB0byBjbGllbnQsIGFsbG93aW5nIGZhc3Rl cgogICAtLSAgbW9kaWZpY2F0aW9ucy4gVmFsdWVzIGNhbiB0aGVuIGJlIGNvcGllZCBiYWNrIHRv IHRoZSBzZXJ2ZXIgYnkKICAgLS0gIGNyZWF0aW5nIGEgbmV3IGdyYXBoaWMgY29udGV4dCB3aXRo IHRoZSBmdW5jdGlvbiBHZGtfTmV3IGFib3ZlLgogICAtLSAgVmFsdWVzIHNob3VsZCBoYXZlIGJl ZW4gYWxsb2NhdGVkIGZpcnN0IHdpdGggYSBjYWxsIHRvIEdka19OZXcuCgogICBwcm9jZWR1cmUg U2V0X0ZvcmVncm91bmQgKEdDICAgIDogaW4gR2RrX0dDOwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIENvbG9yIDogaW4gR2RrLkNvbG9yLkdka19Db2xvcik7CiAgIC0tICBTZXQgdGhlIGZv cmVncm91bmQgY29sb3IgZm9yIHRoZSBncmFwaGljIGNvbnRleHQuCiAgIC0tICBUaGlzIGNvbG9y IGlzIHRoZSBvbmUgdGhhdCBpcyB1c2VkIGJ5IG1vc3QgZHJhd2luZyBmdW5jdGlvbnMuCgogICBw cm9jZWR1cmUgU2V0X0JhY2tncm91bmQgKEdDICAgICA6IGluIEdka19HQzsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBDb2xvciAgOiBpbiBHZGsuQ29sb3IuR2RrX0NvbG9yKTsKICAgLS0g IFNldCB0aGUgYmFja2dyb3VuZCBjb2xvciBmb3IgdGhlIGdyYXBoaWMgY29udGV4dC4KCiAgIHBy b2NlZHVyZSBTZXRfRm9udCAoR0MgICA6IGluIEdka19HQzsKICAgICAgICAgICAgICAgICAgICAg ICBGb250IDogaW4gR2RrLkZvbnQuR2RrX0ZvbnQpOwogICAtLSAgU2V0IHRoZSBmb250IHVzZWQg YnkgdGhlIGdyYXBoaWMgY29udGV4dC4KICAgLS0gIFRoaXMgZm9udCBpcyB1c2VkIGJ5IHRoZSBm dW5jdGlvbiBHZGsuRHJhd2FibGUuRHJhd19UZXh0LgoKICAgcHJvY2VkdXJlIFNldF9GdW5jdGlv biAoR0MgICA6IGluIEdka19HQzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuYyA6IGlu IFR5cGVzLkdka19GdW5jdGlvbik7CiAgIC0tICBTZXQgdGhlIGZ1bmN0aW9uIGluIHRoZSBncmFw aGljIGNvbnRleHQuCiAgIC0tICBUaGlzIGZ1bmN0aW9uIHNwZWNpZmllcyBob3cgdGhlIHBvaW50 cyBhcmUgcHV0IG9uIHRoZSBzY3JlZW4sIGllCiAgIC0tICBpZiBHdGtBZGEgaG93IEd0a0FkYSBz aG91bGQgbWl4IHRoZSBwb2ludCBhbHJlYWR5IG9uIHRoZSBzY3JlZW4KICAgLS0gIGFuZCB0aGUg bmV3IHBvaW50IGJlaW5nIHB1dC4KICAgLS0gIE5vdGUgdGhhdCBzZXR0aW5nIHRoZSBmdW5jdGlv biB0byBHZGtfWG9yIGlzIG5vdCB0aGUgcmlnaHQgd2F5CiAgIC0tICB0byBkbyBhbmltYXRpb24u IFlvdSBzaG91bGQgaW5zdGVhZCBzYXZlIHRoZSBiYWNrZ3JvdW5kIHBpeG1hcCwKICAgLS0gIHB1 dCB0aGUgaW1hZ2UsIGFuZCB0aGVuIHJlc3RvcmUgdGhlIGJhY2tncm91bmQuCiAgIC0tCiAgIC0t ICBJbiBnZW5lcmFsLCB0aGVyZSBhcmUgdGhyZWUgYmFzaWMgc3RlcHMgdG8gZHJhd2luZzogcmVh ZGluZyB0aGUgc291cmNlCiAgIC0tICBwaXhlbHMsIHJlYWRpbmcgdGhlIGRlc3RpbmF0aW9uIHBp eGVscywgYW5kIHdyaXRpbmcgdGhlIGRlc3RpbmF0aW9uCiAgIC0tICBwaXhlbHMuICBTb21lIGZ1 bmN0aW9ucyBvbmx5IHBlcmZvcm0gdGhlIHRoaXJkIHN0ZXAgKFNldCBhbmQgQ2xlYXIpLAogICAt LSAgc29tZSBkbyBub3QgbmVlZCB0aGUgbWlkZGxlIHN0ZXAgKENvcHkpLCB3aGVyZWFzIG1vc3Qg cmVxdWlyZSB0aGUgdGhyZWUKICAgLS0gIHN0ZXBzLCBhbmQgdGh1cyBjYW4gYmUgbXVjaCBzbG93 ZXIuCgogICBwcm9jZWR1cmUgU2V0X0ZpbGwgKEdDICAgOiBpbiBHZGtfR0M7CiAgICAgICAgICAg ICAgICAgICAgICAgRmlsbCA6IGluIFR5cGVzLkdka19GaWxsKTsKICAgLS0gIFNldCB0aGUgcGF0 dGVybiB1c2VkIGZvciBmaWxsaW5nIHRoZSBwb2x5Z29ucy4KCiAgIHByb2NlZHVyZSBTZXRfVGls ZSAoR0MgICA6IGluIEdka19HQzsKICAgICAgICAgICAgICAgICAgICAgICBUaWxlIDogaW4gR2Rr Lkdka19QaXhtYXApOwoKICAgcHJvY2VkdXJlIFNldF9TdGlwcGxlIChHQyAgICAgIDogaW4gR2Rr X0dDOwogICAgICAgICAgICAgICAgICAgICAgICAgIFN0aXBwbGUgOiBpbiBHZGsuR2RrX1BpeG1h cCk7CgogICBwcm9jZWR1cmUgU2V0X0NsaXBfTWFzayAoR0MgICAgOiBpbiBHZGsuR0MuR2RrX0dD OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFzayAgOiBpbiBHZGsuR2RrX0JpdG1hcCk7 CiAgIC0tICBJZiBNYXNrIGlzIHNldCB0byBOdWxsX0JpdG1hcCwgdGhlbiBubyBjbGlwX21hc2sg aXMgdXNlZCBmb3IgZHJhd2luZy4KICAgLS0gIFBvaW50cyB3aWxsIGJlIGRyYXduIHRocm91Z2gg dGhpcyBHQyBvbmx5IHdoZXJlIHRoZSBiaXRzIGFyZSBzZXQgdG8gMQogICAtLSAgaW4gdGhlIG1h c2suIFNlZSBhbHNvIHRoZSBmdW5jdGlvbiBTZXRfQ2xpcF9PcmlnaW4gZm9yCiAgIC0tICBob3cg dG8gbW92ZSB0aGUgbWFzayBpbnNpZGUgdGhlIEdDLgoKICAgcHJvY2VkdXJlIFNldF9Uc19Pcmln aW4gKEdDICAgOiBpbiBHZGtfR0M7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBYLCBZIDog aW4gR2ludCk7CiAgIC0tICBTZXQgdGhlIFRpbGUgYW5kIFN0aXBwbGUgb3JpZ2luIGluIHRoZSBn cmFwaGljIGNvbnRleHQuCgogICBwcm9jZWR1cmUgU2V0X0NsaXBfT3JpZ2luIChHQyAgIDogaW4g R2RrX0dDOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYLCBZIDogaW4gR2ludCk7CiAg IC0tICBTZXQgdGhlIG9yaWdpbiBvZiB0aGUgY2xpcCBtYXNrLgogICAtLSAgU2VlIHRoZSBmdW5j dGlvbnMgU2V0X0NsaXBfUmVjdGFuZ2xlLCBTZXRfQ2xpcF9SZWdpb24gYW5kCiAgIC0tICBHZGsu Qml0bWFwLlNldF9DbGlwX01hc2sgZm9yIG1vcmUgZXhwbGFuYXRpb24uCgogICBwcm9jZWR1cmUg U2V0X0NsaXBfUmVjdGFuZ2xlCiAgICAgKEdDICAgICAgICA6IGluIEdka19HQzsKICAgICAgUmVj dGFuZ2xlIDogaW4gR2RrLlJlY3RhbmdsZS5HZGtfUmVjdGFuZ2xlKTsKICAgLS0gIFNldCB0aGUg Y2xpcCByZWN0YW5nbGUuCiAgIC0tICBPbmx5IHRoZSBwb2ludHMgdGhhdCBhcmUgZHJhd24gaW5z aWRlIHRoaXMgcmVjdGFuZ2xlIHdpbGwgYmUgZGlzcGxheWVkCiAgIC0tICBvbiB0aGUgc2NyZWVu LiBOb3RlIHRoYXQgeW91IG1pZ2h0IGhhdmUgdG8gbW9kaWZ5IHRoZSBDbGlwIG9yaWdpbiBmaXJz dAogICAtLSAgd2l0aCBTZXRfQ2xpcF9PcmlnaW4uCiAgIC0tICBTZWUgU2V0X0NsaXBfTWFzayB0 byBkZWxldGUgdGhlIGN1cnJlbnQgY2xpcCBtYXNrLgoKICAgcHJvY2VkdXJlIFNldF9DbGlwX1Jl Z2lvbiAoR0MgICAgIDogaW4gR2RrX0dDOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBS ZWdpb24gOiBpbiBHZGsuUmVnaW9uLkdka19SZWdpb24pOwogICAtLSAgRGVmaW5lIGEgY2xpcCBy ZWdpb24gb24gdGhlIHNjcmVlbi4KICAgLS0gIFRoaXMgaXMganVzdCBsaWtlIFNldF9DbGlwX1Jl Y3RhbmdsZSwgZXhjZXB0IHRoYXQgYSByZWdpb24gaXMgYSBtb3JlCiAgIC0tICBjb21wbGV4IHJl Z2lvbiwgdGhhdCBjYW4gYmUgdGhlIGludGVyc2VjdGlvbiBvciB1bmlvbiBvZiBtdWx0aXBsZQog ICAtLSAgcmVjdGFuZ2xlcy4gTm90ZSB0aGF0IHRoZSBDbGlwX09yaWdpbiBjYW4gaGF2ZSBhbiBp bmZsdWVuY2Ugb24gdGhpcwogICAtLSAgZnVuY3Rpb24uCgogICBwcm9jZWR1cmUgU2V0X1N1Yndp bmRvdyAoR0MgICA6IGluIEdka19HQzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vZGUg OiBpbiBUeXBlcy5HZGtfU3Vid2luZG93X01vZGUpOwogICAtLSAgU2V0IHRoZSBzdWJ3aW5kb3cg bW9kZSBmb3IgdGhlIGdyYXBoaWMgY29udGV4dC4KICAgLS0gIFRoaXMgc3BlY2lmaWVzIHdoZXRo ZXIgdGhlIGRyYXdpbmcgcm91dGluZXMgc2hvdWxkIGJlIGNsaXBwZWQgdG8KICAgLS0gIHRoZSBz cGVjaWZpYyB3aW5kb3cgdGhleSBhcmUgZHJhd24gaW50bywgb3IgaWYgdGhleSBzaG91bGQgZXh0 ZW5kCiAgIC0tICB0byBzdWJ3aW5kb3dzIGFzIHdlbGwuCgogICBwcm9jZWR1cmUgU2V0X0V4cG9z dXJlcyAoR0MgICAgICAgIDogaW4gR2RrX0dDOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg RXhwb3N1cmVzIDogaW4gQm9vbGVhbik7CiAgIC0tICBFeHBvc3VyZXMgaW5kaWNhdGVzIHdoZXRo ZXIgeW91IHdhbnQgImV4cG9zZSIgYW5kICJub2V4cG9zZSIgZXZlbnRzIHRvCiAgIC0tICBiZSBy ZXBvcnRlZCB3aGVuIGNhbGxpbmcgQ29weV9BcmVhIGFuZCBDb3B5X1BsYW5lIHdpdGggdGhpcyBH Qy4KICAgLS0gIFlvdSBzaG91bGQgZGlzYWJsZSB0aGlzIGlmIHlvdSBkb24ndCBuZWVkIHRoZSBl dmVudCBhbmQgd2FudCB0byBvcHRpbWl6ZQogICAtLSAgeW91ciBhcHBsaWNhdGlvbi4KICAgLS0g IElmIEV4cG9zdXJlcyBpcyBUcnVlLCB0aGVuIGFueSBjYWxsIHRvIENvcHlfQXJlYSBvciBEcmF3 X1BpeG1hcCB3aWxsCiAgIC0tICBnZW5lcmF0ZSBhbiBleHBvc2UgZXZlbnQuIE90aGVyd2lzZSwg dGhlc2Ugd2lsbCBnZW5lcmF0ZSBhIG5vX2V4cG9zZQogICAtLSAgZXZlbnQuCgogICBwcm9jZWR1 cmUgU2V0X0xpbmVfQXR0cmlidXRlcyAoR0MgICAgICAgICA6IGluIEdka19HQzsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIExpbmVfV2lkdGggOiBpbiBHaW50OwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgTGluZV9TdHlsZSA6IGluIFR5cGVzLkdka19MaW5lX1N0 eWxlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FwX1N0eWxlICA6IGluIFR5 cGVzLkdka19DYXBfU3R5bGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKb2lu X1N0eWxlIDogaW4gVHlwZXMuR2RrX0pvaW5fU3R5bGUpOwogICAtLSAgU2V0IHRoZSBsaW5lIGF0 dHJpYnV0ZXMgZm9yIHRoaXMgR0MuCiAgIC0tICBMaW5lX1dpZHRoIGlzIHRoZSB3aWR0aCBvZiB0 aGUgbGluZS4gSWYgaXRzIHZhbHVlIGlzIDAsIHRoZSBsaW5lIGlzIGFzCiAgIC0tICB0aGluIGFz IHBvc3NpYmxlLCBwb3NzaWJseSBldmVuIG1vcmUgc28gdGhhbiBpZiB0aGUgd2lkdGggaXMgMS4g SXQgaXMKICAgLS0gIGFsc28gZmFzdGVyIHRvIGRyYXcgYSBsaW5lIHdpdGggd2lkdGggMCB0aGFu IGFueSBvdGhlciBsaW5lIHdpZHRoLgogICAtLQogICAtLSAgTGluZV9TdHlsZSBzcGVjaWZpZXMg d2hldGhlciB0aGUgbGluZSBzaG91bGQgYmUgc29saWQgb3IgZGFzaGVkLgogICAtLSAgV2l0aCBM aW5lX09uX09mZl9EYXNoLCB0aGUgY29sb3JzIGFyZSBhbHRlcm5hdGl2ZWx5IHRoZSBmb3JlZ3Jv dW5kCiAgIC0tICBjb2xvciwgYW5kIGJsYW5rLiBXaXRoIExpbmVfRG91YmxlX0Rhc2gsIHRoZSBj b2xvcnMgYXJlCiAgIC0tICBhbHRlcm5hdGl2ZWx5IHRoZSBmb3JlZ3JvdW5kIGFuZCBiYWNrZ3Jv dW5kIGNvbG9ycy4KICAgLS0KICAgLS0gIENhcF9TdHlsZSBzcGVjaWZpZXMgaG93IHRoZSBsaW5l IHNob3VsZCBlbmQsIGVpdGhlciBmbGF0IG9yIHJvdW5kZWQuCiAgIC0tCiAgIC0tICBKb2luX1N0 eWxlIHNwZWNpZmllcyBob3cgdHdvIGNvbnNlY3V0aXZlIGxpbmVzIGRyYXduIGJ5IERyYXdfTGlu ZXMgYXJlCiAgIC0tICBjb25uZWN0ZWQuCgogICBwcm9jZWR1cmUgU2V0X0Rhc2hlcyAoR2MgICAg ICAgICAgOiBpbiBHZGtfR0M7CiAgICAgICAgICAgICAgICAgICAgICAgICBEYXNoX09mZnNldCA6 IGluIEdpbnQ7CiAgICAgICAgICAgICAgICAgICAgICAgICBEYXNoX0xpc3QgICA6IGluIEd1Y2hh cl9BcnJheSk7CiAgIC0tICBTcGVjaWZ5IHRoZSBkYXNoIHBhdHRlcm4gd2hlbiB0aGUgbGluZSdz IHN0eWxlIGlzIGFueXRoaW5nIGJ1dCBzb2xpZC4KICAgLS0gIFRoZSB2YWx1ZXMgaW4gdGhlIGFy cmF5IGFsdGVybmF0aXZlbHkgZ2l2ZSB0aGUgbGVuZ3RoIChpbiBwaXhlbHMpIG9mCiAgIC0tICB0 aGUgcGxhaW4gZGFzaCwgdGhlIGVtcHR5IGRhc2gsIHRoZSBzZWNvbmQgcGxhaW4gZGFzaCwgLi4u IE5vbmUgb2YKICAgLS0gIHRoZXNlIHZhbHVlcyBjYW4gYmUgMC4gSWYgdGhlcmUgaXMgYW4gb2Rk IG51bWJlciBvZiBpdGVtcyBpbiBEYXNoX0xpc3QsCiAgIC0tICB0aGlzIGlzIGVxdWl2YWxlbnQg dG8gZ2l2aW5nIHRoZSBhcnJheSBjb25jYXRlbmF0ZWQgd2l0aCBpdHNlbGYuCiAgIC0tICBEYXNo X09mZnNldCBzcGVjaWZpZXMgdGhlIHBoYXNlIG9mIHRoZSBwYXR0ZXJuIHRvIHN0YXJ0IHdpdGgu CgogICBwcm9jZWR1cmUgQ29weSAoRHN0X0dDIDogaW4gR2RrX0dDOwogICAgICAgICAgICAgICAg ICAgU3JjX0dDIDogaW4gR2RrX0dDKTsKICAgLS0gIENvcHkgYSBTcmNfR0MgdG8gRHN0X0dDLgoK ICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAtLSBHZGtfQ29sb3JfVmFsdWVzIC0tCiAgIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgIGZ1bmN0aW9uIEdka19OZXcgcmV0dXJuIEdka19HQ19W YWx1ZXM7CiAgIC0tICBBbGxvY2F0ZSBhIG5ldyBWYWx1ZXMgc3RydWN0dXJlIG9uIHRoZSBjbGll bnQuCiAgIC0tICBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgYSBDIHN0cnVjdHVy ZSwgYW5kIHRodXMgbmVlZHMgdG8KICAgLS0gIGJlIGZyZWVkIHdpdGggYSBjYWxsIHRvIEZyZWUg YmVsb3cuCgogICBwcm9jZWR1cmUgRnJlZSAoVmFsdWVzIDogaW4gR2RrX0dDX1ZhbHVlcyk7CiAg IC0tICBGcmVlIHRoZSBDIHN0cnVjdHVyZSBhc3NvY2lhdGVkIHdpdGggVmFsdWVzLgoKICAgcHJv Y2VkdXJlIFNldF9Gb3JlZ3JvdW5kIChWYWx1ZXMgOiBpbiBHZGtfR0NfVmFsdWVzOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgIENvbG9yICA6IGluIEdkay5Db2xvci5HZGtfQ29sb3IpOwog ICAtLSAgU2FtZSBhcyBTZXRfRm9yZWdyb3VuZCwgYnV0IG9uIHRoZSBjbGllbnQgc2lkZQoKICAg cHJvY2VkdXJlIFNldF9CYWNrZ3JvdW5kIChWYWx1ZXMgOiBpbiBHZGtfR0NfVmFsdWVzOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yICA6IGluIEdkay5Db2xvci5HZGtfQ29sb3Ip OwogICAtLSAgU2FtZSBhcyBTZXRfQmFja2dyb3VuZCwgYnV0IG9uIHRoZSBjbGllbnQgc2lkZQoK ICAgcHJvY2VkdXJlIFNldF9Gb250IChWYWx1ZXMgOiBpbiBHZGtfR0NfVmFsdWVzOwogICAgICAg ICAgICAgICAgICAgICAgIEZvbnQgICA6IGluIEdkay5Gb250Lkdka19Gb250KTsKICAgLS0gIFNh bWUgYXMgU2V0X0ZvbnQsIGJ1dCBvbiB0aGUgY2xpZW50IHNpZGUKCiAgIHByb2NlZHVyZSBTZXRf RnVuY3Rpb24gKFZhbHVlcyA6IGluIEdka19HQ19WYWx1ZXM7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZ1bmMgICA6IGluIFR5cGVzLkdka19GdW5jdGlvbik7CiAgIC0tICBTYW1lIGFzIFNl dF9GdW5jdGlvbiwgYnV0IG9uIHRoZSBjbGllbnQgc2lkZQoKICAgcHJvY2VkdXJlIFNldF9GaWxs IChWYWx1ZXMgOiBpbiBHZGtfR0NfVmFsdWVzOwogICAgICAgICAgICAgICAgICAgICAgIEZpbGwg ICA6IGluIFR5cGVzLkdka19GaWxsKTsKICAgLS0gIFNhbWUgYXMgU2V0X0ZpbGwsIGJ1dCBvbiB0 aGUgY2xpZW50IHNpZGUKCiAgIHByb2NlZHVyZSBTZXRfVHNfT3JpZ2luIChWYWx1ZXMgOiBpbiBH ZGtfR0NfVmFsdWVzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgWCwgWSAgIDogaW4gR2lu dCk7CiAgIC0tICBTYW1lIGFzIFNldF9Uc19PcmlnaW4sIGJ1dCBvbiB0aGUgY2xpZW50IHNpZGUK CiAgIHByb2NlZHVyZSBTZXRfQ2xpcF9PcmlnaW4gKFZhbHVlcyA6IGluIEdka19HQ19WYWx1ZXM7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFgsIFkgICA6IGluIEdpbnQpOwogICAtLSAg U2FtZSBhcyBTZXRfQ2xpcF9PcmlnaW4sIGJ1dCBvbiB0aGUgY2xpZW50IHNpZGUKCiAgIHByb2Nl ZHVyZSBTZXRfU3Vid2luZG93IChWYWx1ZXMgOiBpbiBHZGtfR0NfVmFsdWVzOwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgTW9kZSAgIDogaW4gVHlwZXMuR2RrX1N1YndpbmRvd19Nb2RlKTsK ICAgLS0gIFNhbWUgYXMgU2V0X1N1YndpbmRvdywgYnV0IG9uIHRoZSBjbGllbnQgc2lkZQoKICAg cHJvY2VkdXJlIFNldF9FeHBvc3VyZXMgKFZhbHVlcyAgICA6IGluIEdka19HQ19WYWx1ZXM7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICBFeHBvc3VyZXMgOiBpbiBCb29sZWFuKTsKICAgLS0g IFNhbWUgYXMgU2V0X0V4cG9zdXJlcywgYnV0IG9uIHRoZSBjbGllbnQgc2lkZQoKICAgcHJvY2Vk dXJlIFNldF9MaW5lX0F0dHJpYnV0ZXMgKFZhbHVlcyAgICAgOiBpbiBHZGtfR0NfVmFsdWVzOwog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGluZV9XaWR0aCA6IGluIEdpbnQ7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5lX1N0eWxlIDogaW4gVHlwZXMuR2Rr X0xpbmVfU3R5bGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYXBfU3R5bGUg IDogaW4gVHlwZXMuR2RrX0NhcF9TdHlsZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEpvaW5fU3R5bGUgOiBpbiBUeXBlcy5HZGtfSm9pbl9TdHlsZSk7CiAgIC0tICBTYW1lIGFz IFNldF9MaW5lX0F0dHJpYnV0ZXMsIGJ1dCBvbiB0aGUgY2xpZW50IHNpZGUKCnByaXZhdGUKICAg TnVsbF9HQyA6IGNvbnN0YW50IEdka19HQyA6PSBudWxsOwogICBOdWxsX0dDX1ZhbHVlcyA6IGNv bnN0YW50IEdka19HQ19WYWx1ZXMgOj0gbnVsbDsKCiAgIHByYWdtYSBJbXBvcnQgKEMsIENvcHks ICJnZGtfZ2NfY29weSIpOwogICBwcmFnbWEgSW1wb3J0IChDLCBEZXN0cm95LCAiZ2RrX2djX2Rl c3Ryb3kiKTsKICAgcHJhZ21hIEltcG9ydCAoQywgRnJlZSwgImFkYV9nZGtfZ2NfZnJlZV92YWx1 ZXMiKTsKICAgcHJhZ21hIEltcG9ydCAoQywgR2V0X1ZhbHVlcywgImdka19nY19nZXRfdmFsdWVz Iik7CiAgIHByYWdtYSBJbXBvcnQgKEMsIFJlZiwgImdka19nY19yZWYiKTsKICAgcHJhZ21hIElt cG9ydCAoQywgVW5yZWYsICJnZGtfZ2NfdW5yZWYiKTsKICAgcHJhZ21hIEltcG9ydCAoQywgU2V0 X1N0aXBwbGUsICJnZGtfZ2Nfc2V0X3N0aXBwbGUiKTsKICAgcHJhZ21hIEltcG9ydCAoQywgU2V0 X1RpbGUsICJnZGtfZ2Nfc2V0X3RpbGUiKTsKICAgcHJhZ21hIEltcG9ydCAoQywgU2V0X0NsaXBf TWFzaywgImdka19nY19zZXRfY2xpcF9tYXNrIik7CmVuZCBHZGsuR0M7Ci0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ci0tICAgICAgICAgIEd0a0FkYSAtIEFkYTk1IGJpbmRpbmcgZm9yIHRoZSBHaW1wIFRvb2xraXQg ICAgICAgICAgICAgIC0tCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tICAgICAgICAgICAgICAgICAgICAgQ29w eXJpZ2h0IChDKSAxOTk4LTIwMDAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tICAgICAgICBF bW1hbnVlbCBCcmlvdCwgSm9lbCBCcm9iZWNrZXIgYW5kIEFybmF1ZCBDaGFybGV0ICAgICAgICAg IC0tCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC0tCi0tIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgICAgIC0tCi0tIG1vZGlmeSBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyAgICAgICAgICAgICAgIC0tCi0tIExpY2Vu c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciAg ICAgIC0tCi0tIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh bnkgbGF0ZXIgdmVyc2lvbi4gIC0tCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tIFRoaXMgbGlicmFyeSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgIC0tCi0tIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mICAgIC0tCi0tIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUgR05VIC0tCi0tIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0t IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyAgICAgICAgIC0tCi0tIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwg d3JpdGUgdG8gdGhlICAgICAgICAgICAgIC0tCi0tIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg SW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCAgICAgIC0tCi0tIEJvc3RvbiwgTUEg MDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0t Ci0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC0tCi0tIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIGlmIG90aGVyIGZpbGVz IGluc3RhbnRpYXRlIGdlbmVyaWNzIGZyb20gIC0tCi0tIHRoaXMgdW5pdCwgb3IgeW91IGxpbmsg dGhpcyB1bml0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiAgIC0tCi0tIGV4ZWN1dGFi bGUsIHRoaXMgIHVuaXQgIGRvZXMgbm90ICBieSBpdHNlbGYgY2F1c2UgIHRoZSByZXN1bHRpbmcg IC0tCi0tIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UuIFRoaXMgIC0tCi0tIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyIGludmFsaWRh dGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSAgIC0tCi0tIGV4ZWN1dGFibGUgZmlsZSAgbWln aHQgYmUgY292ZXJlZCBieSB0aGUgIEdOVSBQdWJsaWMgTGljZW5zZS4gICAgIC0tCi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCgotLSAgPGRlc2NyaXB0aW9uPgotLQotLSAgUGl4bWFwcyBhcmUgb2ZmLXNjcmVlbiBk cmF3YWJsZXMuIFRoZXkgY2FuIGJlIGRyYXduIHVwb24gd2l0aCB0aGUgc3RhbmRhcmQKLS0gIGRy YXdpbmcgcHJpbWl0aXZlcywgdGhlbiBjb3BpZWQgdG8gYW5vdGhlciBkcmF3YWJsZSAoc3VjaCBh cyBhIEdka19XaW5kb3cpCi0tICB3aXRoIEdkay5QaXhtYXAuRHJhdy4gVGhlIGRlcHRoIG9mIGEg cGl4bWFwIGlzIHRoZSBudW1iZXIgb2YgYml0cyBwZXIKLS0gIHBpeGVscy4gQml0bWFwcyBhcmUg c2ltcGx5IHBpeG1hcHMgd2l0aCBhIGRlcHRoIG9mIDEuIChUaGF0IGlzLCB0aGV5IGFyZQotLSAg bW9ub2Nocm9tZSBiaXRtYXBzIC0gZWFjaCBwaXhlbCBjYW4gYmUgZWl0aGVyIG9uIG9yIG9mZiku Ci0tICBAcHhyZWZ7UGFja2FnZV9HZGsuQml0bWFwfSBmb3IgbW9yZSBkZXRhaWxzIG9uIGJpdG1h cCBoYW5kbGluZy4KLS0KLS0gIDwvZGVzY3JpcHRpb24+Ci0tICA8Y192ZXJzaW9uPjEuMi43PC9j X3ZlcnNpb24+Cgp3aXRoIEdsaWI7IHVzZSBHbGliOwp3aXRoIEdkay5CaXRtYXA7CndpdGggR2Rr LkNvbG9yOwp3aXRoIEdkay5XaW5kb3c7CndpdGggR3RrYWRhLlR5cGVzOwoKcGFja2FnZSBHZGsu UGl4bWFwIGlzCgogICBzdWJ0eXBlIEdka19QaXhtYXAgaXMgR2RrLkdka19QaXhtYXA7CiAgIC0t ICBBIHNlcnZlci1zaWRlIGltYWdlLgogICAtLSAgWW91IGNhbiBjcmVhdGUgYW4gZW1wdHkgcGl4 bWFwLCBvciBsb2FkIGlmIGZyb20gZXh0ZXJuYWwgZmlsZXMgaW4KICAgLS0gIGJpdG1hcCBhbmQg cGl4bWFwIGZvcm1hdC4gU2VlIEdkay5QaXhidWYgaWYgeW91IG5lZWQgdG8gbG9hZAogICAtLSAg aW1hZ2VzIGluIG90aGVyIGZvcm1hdHMuCgogICBOdWxsX1BpeG1hcCA6IGNvbnN0YW50IEdka19Q aXhtYXA7CgogICBwcm9jZWR1cmUgR2RrX05ldyAoUGl4bWFwIDogICAgb3V0IEdka19QaXhtYXA7 CiAgICAgICAgICAgICAgICAgICAgICBXaW5kb3cgOiBpbiAgICAgR2RrLldpbmRvdy5HZGtfV2lu ZG93OwogICAgICAgICAgICAgICAgICAgICAgV2lkdGggIDogaW4gICAgIEdpbnQ7CiAgICAgICAg ICAgICAgICAgICAgICBIZWlnaHQgOiBpbiAgICAgR2ludDsKICAgICAgICAgICAgICAgICAgICAg IERlcHRoICA6IGluICAgICBHaW50IDo9IC0xKTsKICAgLS0gIENyZWF0ZSBhIG5ldyBwaXhtYXAg d2l0aCBhIGdpdmVuIHNpemUuCiAgIC0tICBXaW5kb3cgaXMgdXNlZCB0byBkZXRlcm1pbmUgZGVm YXVsdCB2YWx1ZXMgZm9yIHRoZSBuZXcgcGl4bWFwLgogICAtLSAgQ2FuIGJlIGV2ZW50dWFsbHkg bnVsbC4KICAgLS0gIFdpZHRoIGlzIHRoZSB3aWR0aCBvZiB0aGUgbmV3IHBpeG1hcCBpbiBwaXhl bHMuCiAgIC0tICBIZWlnaHQgaXMgdGhlIGhlaWdodCBvZiB0aGUgbmV3IHBpeG1hcCBpbiBwaXhl bHMuCiAgIC0tICBEZXB0aCBpcyB0aGUgZGVwdGggKG51bWJlciBvZiBiaXRzIHBlciBwaXhlbCkg b2YgdGhlIG5ldyBwaXhtYXAuCiAgIC0tICBJZiAtMSwgYW5kIHdpbmRvdyBpcyBub3QgbnVsbCwg dGhlIGRlcHRoIG9mIHRoZSBuZXcgcGl4bWFwIHdpbGwgYmUKICAgLS0gIGVxdWFsIHRvIHRoYXQg b2Ygd2luZG93LgogICAtLSAgQXV0b21hdGljYWxseSByZWZlcmVuY2UgdGhlIHBpeG1hcCBvbmNl LgoKICAgcHJvY2VkdXJlIFJlZiAoUGl4bWFwIDogaW4gR2RrX1BpeG1hcCk7CiAgIC0tICBBZGQg YSByZWZlcmVuY2UgdG8gYSBwaXhtYXAuCgogICBwcm9jZWR1cmUgVW5yZWYgKFBpeG1hcCA6IGlu IEdka19QaXhtYXApOwogICAtLSAgVGhpcyBpcyB0aGUgdXN1YWwgd2F5IHRvIGRlc3Ryb3kgYSBw aXhtYXAuIFRoZSBtZW1vcnkgaXMgZnJlZWQgd2hlbgogICAtLSAgdGhlcmUgaXMgbm8gbW9yZSBy ZWZlcmVuY2UKCiAgIHByb2NlZHVyZSBDcmVhdGVfRnJvbV9EYXRhIChQaXhtYXAgOiAgICBvdXQg R2RrX1BpeG1hcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpbmRvdyA6IGluICAg ICBHZGsuV2luZG93Lkdka19XaW5kb3c7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBE YXRhICAgOiBpbiAgICAgU3RyaW5nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lk dGggIDogaW4gICAgIEdpbnQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIZWlnaHQg OiBpbiAgICAgR2ludDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHRoICA6IGlu ICAgICBHaW50OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmcgICAgIDogaW4gICAg IENvbG9yLkdka19Db2xvcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJnICAgICA6 IGluICAgICBDb2xvci5HZGtfQ29sb3IpOwogICAtLSAgQ3JlYXRlIGEgcGl4bWFwIGZyb20gZGF0 YSBpbiBYQk0gZm9ybWF0LgogICAtLSAgV2luZG93IGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGRlZmF1 bHQgdmFsdWVzIGZvciB0aGUgbmV3IGJpdG1hcCwgY2FuIGJlCiAgIC0tICBudWxsIGluIHdoaWNo IGNhc2UgdGhlIHJvb3Qgd2luZG93IGlzIHVzZWQuCiAgIC0tICBEYXRhIGlzIHRoZSBYQk0gZGF0 YS4KICAgLS0gIFdpZHRoIGlzIHRoZSB3aWR0aCBvZiB0aGUgbmV3IGJpdG1hcCBpbiBwaXhlbHMu CiAgIC0tICBIZWlnaHQgaXMgdGhlIGhlaWdodCBvZiB0aGUgbmV3IGJpdG1hcCBpbiBwaXhlbHMu CiAgIC0tICBEZXB0aCBpcyB0aGUgZGVwdGggKG51bWJlciBvZiBiaXRzIHBlciBwaXhlbCkgb2Yg dGhlIG5ldyBwaXhtYXAuCiAgIC0tICBGZyBpcyB0aGUgZm9yZWdyb3VuZCBjb2xvci4KICAgLS0g IEJnIGlzIHRoZSBiYWNrZ3JvdW5kIGNvbG9yLgoKICAgcHJvY2VkdXJlIENyZWF0ZV9Gcm9tX1hw bSAoUGl4bWFwICAgICAgOiAgICBvdXQgR2RrX1BpeG1hcDsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgV2luZG93ICAgICAgOiBpbiAgICAgR2RrLldpbmRvdy5HZGtfV2luZG93OwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBNYXNrICAgICAgICA6IGluIG91dCBHZGsuQml0bWFw Lkdka19CaXRtYXA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zcGFyZW50IDog aW4gICAgIEdkay5Db2xvci5HZGtfQ29sb3I7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEZpbGVuYW1lICAgIDogaW4gICAgIFN0cmluZyk7CiAgIC0tICBDcmVhdGUgYSBwaXhtYXAgZnJv bSBhIFhQTSBmaWxlLgogICAtLSAgV2luZG93IGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGRlZmF1bHQg dmFsdWVzIGZvciB0aGUgbmV3IHBpeG1hcC4KICAgLS0gIE1hc2sgaXMgYSBwb2ludGVyIHRvIGEg cGxhY2UgdG8gc3RvcmUgYSBiaXRtYXAgcmVwcmVzZW50aW5nIHRoZQogICAtLSAgdHJhbnNwYXJl bmN5IG1hc2sgb2YgdGhlIFhQTSBmaWxlLiBDYW4gYmUgbnVsbCwgaW4gd2hpY2ggY2FzZQogICAt LSAgdHJhbnNwYXJlbmN5IHdpbGwgYmUgaWdub3JlZC4KICAgLS0gIFRyYW5zcGFyZW50IGlzIHRo ZSBjb2xvciB0byBiZSB1c2VkIGZvciB0aGUgcGl4ZWxzIHRoYXQgYXJlIHRyYW5zcGFyZW50CiAg IC0tICBpbiB0aGUgaW5wdXQgZmlsZS4gQ2FuIGJlIG51bGwsIGluIHdoaWNoIGNhc2UgYSBkZWZh dWx0IGNvbG9yIHdpbGwgYmUKICAgLS0gIHVzZWQuCiAgIC0tICBGaWxlbmFtZSBpcyB0aGUgZmls ZW5hbWUgb2YgYSBmaWxlIGNvbnRhaW5pbmcgWFBNIGRhdGEuCgogICBwcm9jZWR1cmUgQ3JlYXRl X0Zyb21fWHBtIChQaXhtYXAgICAgICA6ICAgIG91dCBHZGtfUGl4bWFwOwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBXaW5kb3cgICAgICA6IGluICAgICBHZGsuV2luZG93Lkdka19XaW5k b3c7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9ybWFwICAgIDogaW4gICAgIEdk ay5Db2xvci5HZGtfQ29sb3JtYXA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hc2sg ICAgICAgIDogaW4gb3V0IEdkay5CaXRtYXAuR2RrX0JpdG1hcDsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgVHJhbnNwYXJlbnQgOiBpbiAgICAgR2RrLkNvbG9yLkdka19Db2xvcjsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsZW5hbWUgICAgOiBpbiAgICAgU3RyaW5nKTsK ICAgLS0gIENyZWF0ZSBhIHBpeG1hcCBmcm9tIGEgWFBNIGZpbGUgdXNpbmcgYSBwYXJ0aWN1bGFy IGNvbG9ybWFwLgogICAtLSAgV2luZG93IGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGRlZmF1bHQgdmFs dWVzIGZvciB0aGUgbmV3IHBpeG1hcC4gQ2FuIGJlCiAgIC0tICBudWxsIGlmIGNvbG9ybWFwIGlz IGdpdmVuLgogICAtLSAgQ29sb3JtYXAgaXMgdGhlIEdka19Db2xvcm1hcCB0aGF0IHRoZSBuZXcg cGl4bWFwIHdpbGwgdXNlLiBJZiBvbWl0dGVkLAogICAtLSAgdGhlIGNvbG9ybWFwIGZvciB3aW5k b3cgd2lsbCBiZSB1c2VkLgogICAtLSAgTWFzayBpcyBhIHBvaW50ZXIgdG8gYSBwbGFjZSB0byBz dG9yZSBhIGJpdG1hcCByZXByZXNlbnRpbmcgdGhlCiAgIC0tICB0cmFuc3BhcmVuY3kgbWFzayBv ZiB0aGUgWFBNIGZpbGUuIENhbiBiZSBudWxsLCBpbiB3aGljaCBjYXNlCiAgIC0tICB0cmFuc3Bh cmVuY3kgd2lsbCBiZSBpZ25vcmVkLgogICAtLSAgVHJhbnNwYXJlbnQgaXMgdGhlIGNvbG9yIHRv IGJlIHVzZWQgZm9yIHRoZSBwaXhlbHMgdGhhdCBhcmUgdHJhbnNwYXJlbnQKICAgLS0gIGluIHRo ZSBpbnB1dCBmaWxlLiBDYW4gYmUgbnVsbCwgaW4gd2hpY2ggY2FzZSBhIGRlZmF1bHQgY29sb3Ig d2lsbCBiZQogICAtLSAgdXNlZC4KICAgLS0gIEZpbGVuYW1lIGlzIHRoZSBmaWxlbmFtZSBvZiBh IGZpbGUgY29udGFpbmluZyBYUE0gZGF0YS4KCiAgIHByb2NlZHVyZSBDcmVhdGVfRnJvbV9YcG1f RAogICAgIChQaXhtYXAgICAgICA6ICAgIG91dCBHZGtfUGl4bWFwOwogICAgICBXaW5kb3cgICAg ICA6IGluICAgICBHZGsuV2luZG93Lkdka19XaW5kb3c7CiAgICAgIE1hc2sgICAgICAgIDogaW4g b3V0IEdkay5CaXRtYXAuR2RrX0JpdG1hcDsKICAgICAgVHJhbnNwYXJlbnQgOiBpbiAgICAgR2Rr LkNvbG9yLkdka19Db2xvcjsKICAgICAgRGF0YSAgICAgICAgOiBpbiAgICAgR3RrYWRhLlR5cGVz LkNoYXJzX1B0cl9BcnJheSk7CiAgIC0tICBDcmVhdGUgYSBwaXhtYXAgZnJvbSBkYXRhIGluIFhQ TSBmb3JtYXQuCiAgIC0tICBXaW5kb3cgaXMgdXNlZCB0byBkZXRlcm1pbmUgZGVmYXVsdCB2YWx1 ZXMgZm9yIHRoZSBuZXcgcGl4bWFwLgogICAtLSAgTWFzayBpcyBhIHBvaW50ZXIgdG8gYSBwbGFj ZSB0byBzdG9yZSBhIGJpdG1hcCByZXByZXNlbnRpbmcgdGhlCiAgIC0tICB0cmFuc3BhcmVuY3kg bWFzayBvZiB0aGUgWFBNIGZpbGUuIENhbiBiZSBudWxsLCBpbiB3aGljaCBjYXNlCiAgIC0tICB0 cmFuc3BhcmVuY3kgd2lsbCBiZSBpZ25vcmVkLgogICAtLSAgVHJhbnNwYXJlbnQgd2lsbCBiZSB1 c2VkIGZvciB0aGUgcGl4ZWxzIHRoYXQgYXJlIHRyYW5zcGFyZW50IGluIHRoZQogICAtLSAgaW5w dXQgZmlsZS4gQ2FuIGJlIG51bGwgaW4gd2hpY2ggY2FzZSBhIGRlZmF1bHQgY29sb3Igd2lsbCBi ZSB1c2VkLgogICAtLSAgRGF0YSBpcyBhIHBvaW50ZXIgdG8gYSBzdHJpbmcgY29udGFpbmluZyB0 aGUgWFBNIGRhdGEuCgogICBwcm9jZWR1cmUgQ3JlYXRlX0Zyb21fWHBtX0QKICAgICAoUGl4bWFw ICAgICAgOiAgICBvdXQgR2RrX1BpeG1hcDsKICAgICAgV2luZG93ICAgICAgOiBpbiAgICAgR2Rr LldpbmRvdy5HZGtfV2luZG93OwogICAgICBDb2xvcm1hcCAgICA6IGluICAgICBHZGsuQ29sb3Iu R2RrX0NvbG9ybWFwOwogICAgICBNYXNrICAgICAgICA6IGluIG91dCBHZGsuQml0bWFwLkdka19C aXRtYXA7CiAgICAgIFRyYW5zcGFyZW50IDogaW4gICAgIEdkay5Db2xvci5HZGtfQ29sb3I7CiAg ICAgIERhdGEgICAgICAgIDogaW4gICAgIEd0a2FkYS5UeXBlcy5DaGFyc19QdHJfQXJyYXkpOwog ICAtLSAgQ3JlYXRlIGEgcGl4bWFwIGZyb20gZGF0YSBpbiBYUE0gZm9ybWF0IHVzaW5nIGEgcGFy dGljdWxhciBjb2xvcm1hcC4KICAgLS0gIFdpbmRvdyBpcyB1c2VkIHRvIGRldGVybWluZSBkZWZh dWx0IHZhbHVlcyBmb3IgdGhlIG5ldyBwaXhtYXAuCiAgIC0tICBDb2xvcm1hcCBpcyB0aGUgR2Rr X0NvbG9ybWFwIHRoYXQgdGhlIG5ldyBwaXhtYXAgd2lsbCBiZSB1c2UuIElmCiAgIC0tICBvbWl0 dGVkLCB0aGUgY29sb3JtYXAgZm9yIHdpbmRvdyB3aWxsIGJlIHVzZWQuCiAgIC0tICBNYXNrIGlz IGEgcG9pbnRlciB0byBhIHBsYWNlIHRvIHN0b3JlIGEgYml0bWFwIHJlcHJlc2VudGluZyB0aGUK ICAgLS0gIHRyYW5zcGFyZW5jeSBtYXNrIG9mIHRoZSBYUE0gZmlsZS4gQ2FuIGJlIG51bGwsIGlu IHdoaWNoIGNhc2UKICAgLS0gIHRyYW5zcGFyZW5jeSB3aWxsIGJlIGlnbm9yZWQuCiAgIC0tICBU cmFuc3BhcmVudCB3aWxsIGJlIHVzZWQgZm9yIHRoZSBwaXhlbHMgdGhhdCBhcmUgdHJhbnNwYXJl bnQgaW4gdGhlCiAgIC0tICBpbnB1dCBmaWxlLiBDYW4gYmUgbnVsbCBpbiB3aGljaCBjYXNlIGEg ZGVmYXVsdCBjb2xvciB3aWxsIGJlIHVzZWQuCiAgIC0tICBEYXRhIGlzIGEgcG9pbnRlciB0byBh IHN0cmluZyBjb250YWluaW5nIHRoZSBYUE0gZGF0YS4KCnByaXZhdGUKICAgTnVsbF9QaXhtYXAg OiBjb25zdGFudCBHZGtfUGl4bWFwIDo9IG51bGw7CiAgIHByYWdtYSBJbXBvcnQgKEMsIFJlZiwg Imdka19waXhtYXBfcmVmIik7CiAgIHByYWdtYSBJbXBvcnQgKEMsIFVucmVmLCAiZ2RrX3BpeG1h cF91bnJlZiIpOwplbmQgR2RrLlBpeG1hcDsKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0gICAgICAgICAgR3Rr QWRhIC0gQWRhOTUgYmluZGluZyBmb3IgdGhlIEdpbXAgVG9vbGtpdCAgICAgICAgICAgICAgLS0K LS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLS0KLS0gICAgICAgICAgICAgICAgICAgICBDb3B5cmlnaHQgKEMpIDE5OTgt MTk5OSAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0gICAgICAgIEVtbWFudWVsIEJyaW90LCBK b2VsIEJyb2JlY2tlciBhbmQgQXJuYXVkIENoYXJsZXQgICAgICAgICAgLS0KLS0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LS0KLS0gVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciAgICAgLS0KLS0gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljICAgICAgICAgICAgICAgLS0KLS0gTGljZW5zZSBhcyBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyICAgICAgLS0KLS0gdmVyc2lv biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u LiAgLS0KLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLS0KLS0gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgLS0KLS0gYnV0IFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgLS0KLS0gTUVS Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZSBHTlUgLS0KLS0gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAg ICAgICAgICAgICAgICAgICAgICAgLS0KLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0gWW91IHNob3VsZCBoYXZl IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljICAgICAgICAgLS0KLS0g TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAg ICAgICAgICAgLS0KLS0gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUg UGxhY2UgLSBTdWl0ZSAzMzAsICAgICAgLS0KLS0gQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0Eu ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0K LS0gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUgZ2Vu ZXJpY3MgZnJvbSAgLS0KLS0gdGhpcyB1bml0LCBvciB5b3UgbGluayB0aGlzIHVuaXQgd2l0aCBv dGhlciBmaWxlcyB0byBwcm9kdWNlIGFuICAgLS0KLS0gZXhlY3V0YWJsZSwgdGhpcyAgdW5pdCAg ZG9lcyBub3QgIGJ5IGl0c2VsZiBjYXVzZSAgdGhlIHJlc3VsdGluZyAgLS0KLS0gZXhlY3V0YWJs ZSB0byBiZSBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gVGhpcyAg LS0KLS0gZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIgaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVh c29ucyB3aHkgdGhlICAgLS0KLS0gZXhlY3V0YWJsZSBmaWxlICBtaWdodCBiZSBjb3ZlcmVkIGJ5 IHRoZSAgR05VIFB1YmxpYyBMaWNlbnNlLiAgICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCndpdGggR2xp YjsgdXNlIEdsaWI7CgpwYWNrYWdlIEdkay5SZWN0YW5nbGUgaXMKCiAgIHR5cGUgR2RrX1JlY3Rh bmdsZSBpcyByZWNvcmQKICAgICAgWCAgICAgIDogR2ludDE2OwogICAgICBZICAgICAgOiBHaW50 MTY7CiAgICAgIFdpZHRoICA6IEd1aW50MTY7CiAgICAgIEhlaWdodCA6IEd1aW50MTY7CiAgIGVu ZCByZWNvcmQ7CiAgIHByYWdtYSBQYWNrIChHZGtfUmVjdGFuZ2xlKTsKCiAgIEZ1bGxfQXJlYSA6 IGNvbnN0YW50IEdka19SZWN0YW5nbGU7CiAgIC0tICBUaGUgY29uc3RhbnQgYWJvdmUgY2FuIGJl IHVzZWQgaW4gR3RrLldpZGdldC5EcmF3IHdoZW4geW91IHdhbnQgdG8KICAgLS0gIHJlZHJhdyB0 aGUgd2hvbGUgd2lkZ2V0CgogICBwcm9jZWR1cmUgSW50ZXJzZWN0CiAgICAgKFNyYzEgICAgICA6 IGluICAgICBHZGtfUmVjdGFuZ2xlOwogICAgICBTcmMyICAgICAgOiBpbiAgICAgR2RrX1JlY3Rh bmdsZTsKICAgICAgRGVzdCAgICAgIDogICAgb3V0IEdka19SZWN0YW5nbGU7CiAgICAgIEludGVy c2VjdCA6ICAgIG91dCBCb29sZWFuKTsKCiAgIHByb2NlZHVyZSBVbmlvbgogICAgIChTcmMxIDog aW4gICAgIEdka19SZWN0YW5nbGU7CiAgICAgIFNyYzIgOiBpbiAgICAgR2RrX1JlY3RhbmdsZTsK ICAgICAgRGVzdCA6ICAgIG91dCBHZGtfUmVjdGFuZ2xlKTsKCnByaXZhdGUKCiAgIEZ1bGxfQXJl YSA6IGNvbnN0YW50IEdka19SZWN0YW5nbGUgOj0KICAgICAoR2ludDE2J0ZpcnN0LCBHaW50MTYn Rmlyc3QsIEd1aW50MTYnTGFzdCwgR3VpbnQxNidMYXN0KTsKCmVuZCBHZGsuUmVjdGFuZ2xlOwot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQotLSAgICAgICAgICBHdGtBZGEgLSBBZGE5NSBiaW5kaW5nIGZvciB0aGUg R2ltcCBUb29sa2l0ICAgICAgICAgICAgICAtLQotLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLSAgICAgICAgICAg ICAgICAgICAgIENvcHlyaWdodCAoQykgMTk5OC0xOTk5ICAgICAgICAgICAgICAgICAgICAgICAt LQotLSAgICAgICAgRW1tYW51ZWwgQnJpb3QsIEpvZWwgQnJvYmVja2VyIGFuZCBBcm5hdWQgQ2hh cmxldCAgICAgICAgICAtLQotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLSBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yICAgICAtLQotLSBtb2RpZnkg aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgICAgICAgICAgICAg ICAtLQotLSBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uOyBlaXRoZXIgICAgICAtLQotLSB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5 b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAtLQotLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLSBUaGlz IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1 bCwgICAtLQotLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZiAgICAtLQotLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSAtLQotLSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAtLQotLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgICAgICAgICAtLQotLSBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJy YXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAtLQotLSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgICAgICAtLQot LSBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAtLQotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLSBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCBp ZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZSBnZW5lcmljcyBmcm9tICAtLQotLSB0aGlzIHVuaXQs IG9yIHlvdSBsaW5rIHRoaXMgdW5pdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gICAt LQotLSBleGVjdXRhYmxlLCB0aGlzICB1bml0ICBkb2VzIG5vdCAgYnkgaXRzZWxmIGNhdXNlICB0 aGUgcmVzdWx0aW5nICAtLQotLSBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiBUaGlzICAtLQotLSBleGNlcHRpb24gZG9lcyBub3QgaG93 ZXZlciBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgICAtLQotLSBleGVjdXRh YmxlIGZpbGUgIG1pZ2h0IGJlIGNvdmVyZWQgYnkgdGhlICBHTlUgUHVibGljIExpY2Vuc2UuICAg ICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQoKd2l0aCBHbGliOyB1c2UgR2xpYjsKd2l0aCBHZGsuUmVjdGFu Z2xlOwp3aXRoIEdkay5UeXBlczsKCnBhY2thZ2UgR2RrLlJlZ2lvbiBpcwoKICAgdHlwZSBHZGtf UmVnaW9uIGlzIG5ldyBHZGsuQ19Qcm94eTsKICAgTnVsbF9SZWdpb24gOiBjb25zdGFudCBHZGtf UmVnaW9uOwoKICAgcHJvY2VkdXJlIEdka19OZXcgKFJlZ2lvbiA6IG91dCBHZGtfUmVnaW9uKTsK CiAgIHByb2NlZHVyZSBEZXN0cm95IChSZWdpb24gOiBpbiBvdXQgR2RrX1JlZ2lvbik7CgogICBw cm9jZWR1cmUgR2V0X0NsaXBib3gKICAgICAoUmVnaW9uICAgIDogaW4gICAgIEdka19SZWdpb247 CiAgICAgIFJlY3RhbmdsZSA6ICAgIG91dCBHZGsuUmVjdGFuZ2xlLkdka19SZWN0YW5nbGUpOwoK ICAgZnVuY3Rpb24gRW1wdHkgKFJlZ2lvbiA6IGluIEdka19SZWdpb24pIHJldHVybiBCb29sZWFu OwoKICAgZnVuY3Rpb24gIj0iIChMZWZ0LCBSaWdodCA6IGluIEdka19SZWdpb24pIHJldHVybiBC b29sZWFuOwoKICAgZnVuY3Rpb24gUG9pbnRfSW4KICAgICAoUmVnaW9uIDogaW4gR2RrX1JlZ2lv bjsKICAgICAgWCwgWSAgIDogaW4gSW50ZWdlcikgcmV0dXJuIEJvb2xlYW47CgogICBmdW5jdGlv biBSZWN0X0luCiAgICAgKFJlZ2lvbiA6IGluIEdka19SZWdpb247CiAgICAgIFJlY3QgICA6IGlu IFJlY3RhbmdsZS5HZGtfUmVjdGFuZ2xlKSByZXR1cm4gVHlwZXMuR2RrX092ZXJsYXBfVHlwZTsK CiAgIHByb2NlZHVyZSBQb2x5Z29uCiAgICAgKFJlZ2lvbiA6ICAgIG91dCBHZGtfUmVnaW9uOwog ICAgICBQb2ludHMgOiBpbiAgICAgR2RrLlR5cGVzLkdka19Qb2ludHNfQXJyYXk7CiAgICAgIEZp bGxfUnVsZSA6IGluICAgICBUeXBlcy5HZGtfRmlsbF9SdWxlKTsKCiAgIHByb2NlZHVyZSBPZmZz ZXQKICAgICAoUmVnaW9uIDogaW4gR2RrX1JlZ2lvbjsKICAgICAgRHggICAgIDogaW4gR2ludDsK ICAgICAgRHkgICAgIDogaW4gR2ludCk7CgogICBwcm9jZWR1cmUgU2hyaW5rCiAgICAgKFJlZ2lv biA6IGluIEdka19SZWdpb247CiAgICAgIER4ICAgICA6IGluIEdpbnQ7CiAgICAgIER5ICAgICA6 IGluIEdpbnQpOwoKICAgcHJvY2VkdXJlIFVuaW9uX1dpdGhfUmVjdAogICAgIChSZXN1bHQgOiAg ICBvdXQgR2RrX1JlZ2lvbjsKICAgICAgUmVnaW9uIDogaW4gICAgIEdka19SZWdpb247CiAgICAg IFJlY3QgICA6IGluICAgICBSZWN0YW5nbGUuR2RrX1JlY3RhbmdsZSk7CgogICBwcm9jZWR1cmUg SW50ZXJzZWN0CiAgICAgKFJlc3VsdCAgOiAgICBvdXQgR2RrX1JlZ2lvbjsKICAgICAgU291cmNl MSA6IGluICAgICBHZGtfUmVnaW9uOwogICAgICBTb3VyY2UyIDogaW4gICAgIEdka19SZWdpb24p OwoKICAgcHJvY2VkdXJlIFVuaW9uCiAgICAgKFJlc3VsdCAgOiAgICAgb3V0IEdka19SZWdpb247 CiAgICAgIFNvdXJjZTEgOiBpbiAgICAgIEdka19SZWdpb247CiAgICAgIFNvdXJjZTIgOiBpbiAg ICAgIEdka19SZWdpb24pOwoKICAgcHJvY2VkdXJlIFN1YnN0cmFjdAogICAgIChSZXN1bHQgIDog ICAgIG91dCBHZGtfUmVnaW9uOwogICAgICBTb3VyY2UxIDogaW4gICAgICBHZGtfUmVnaW9uOwog ICAgICBTb3VyY2UyIDogaW4gICAgICBHZGtfUmVnaW9uKTsKCiAgIHByb2NlZHVyZSBHZGtfWG9y CiAgICAgKFJlc3VsdCAgOiAgICAgb3V0IEdka19SZWdpb247CiAgICAgIFNvdXJjZTEgOiBpbiAg ICAgIEdka19SZWdpb247CiAgICAgIFNvdXJjZTIgOiBpbiAgICAgIEdka19SZWdpb24pOwoKcHJp dmF0ZQogICBOdWxsX1JlZ2lvbiA6IGNvbnN0YW50IEdka19SZWdpb24gOj0gbnVsbDsKICAgcHJh Z21hIEltcG9ydCAoQywgT2Zmc2V0LCAiZ2RrX3JlZ2lvbl9vZmZzZXQiKTsKICAgcHJhZ21hIElt cG9ydCAoQywgU2hyaW5rLCAiZ2RrX3JlZ2lvbl9zaHJpbmsiKTsKZW5kIEdkay5SZWdpb247Ci0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCi0tICAgICAgICAgIEd0a0FkYSAtIEFkYTk1IGJpbmRpbmcgZm9yIHRoZSBH aW1wIFRvb2xraXQgICAgICAgICAgICAgIC0tCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tICAgICAgICAgICAg ICAgICAgICAgQ29weXJpZ2h0IChDKSAxOTk4LTE5OTkgICAgICAgICAgICAgICAgICAgICAgIC0t Ci0tICAgICAgICBFbW1hbnVlbCBCcmlvdCwgSm9lbCBCcm9iZWNrZXIgYW5kIEFybmF1ZCBDaGFy bGV0ICAgICAgICAgIC0tCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgICAgIC0tCi0tIG1vZGlmeSBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyAgICAgICAgICAgICAg IC0tCi0tIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b247IGVpdGhlciAgICAgIC0tCi0tIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gIC0tCi0tICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tIFRoaXMg bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LCAgIC0tCi0tIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mICAgIC0tCi0tIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIC0tCi0tIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC0tCi0tIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyAgICAgICAgIC0tCi0tIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJh cnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgIC0tCi0tIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCAgICAgIC0tCi0t IEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC0tCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIGlm IG90aGVyIGZpbGVzIGluc3RhbnRpYXRlIGdlbmVyaWNzIGZyb20gIC0tCi0tIHRoaXMgdW5pdCwg b3IgeW91IGxpbmsgdGhpcyB1bml0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiAgIC0t Ci0tIGV4ZWN1dGFibGUsIHRoaXMgIHVuaXQgIGRvZXMgbm90ICBieSBpdHNlbGYgY2F1c2UgIHRo ZSByZXN1bHRpbmcgIC0tCi0tIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieSB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UuIFRoaXMgIC0tCi0tIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dl dmVyIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSAgIC0tCi0tIGV4ZWN1dGFi bGUgZmlsZSAgbWlnaHQgYmUgY292ZXJlZCBieSB0aGUgIEdOVSBQdWJsaWMgTGljZW5zZS4gICAg IC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCgp3aXRoIEdsaWI7IHVzZSBHbGliOwoKcGFja2FnZSBHZGsuVHlw ZXMgaXMKCiAgIHR5cGUgR2RrX0dlb21ldHJ5IGlzIHJlY29yZAogICAgICBNaW5fV2lkdGggICA6 IEdpbnQ7CiAgICAgIE1pbl9IZWlnaHQgIDogR2ludDsKICAgICAgTWF4X1dpZHRoICAgOiBHaW50 OwogICAgICBNYXhfSGVpZ2h0ICA6IEdpbnQ7CiAgICAgIEJhc2VfV2lkdGggIDogR2ludDsKICAg ICAgQmFzZV9IZWlnaHQgOiBHaW50OwogICAgICBXaWR0aF9JbmMgICA6IEdpbnQ7CiAgICAgIEhl aWdodF9JbmMgIDogR2ludDsKICAgICAgTWluX0FzcGVjdCAgOiBHZG91YmxlOwogICAgICBNYXhf QXNwZWN0ICA6IEdkb3VibGU7CiAgIGVuZCByZWNvcmQ7CiAgIHByYWdtYSBQYWNrIChHZGtfR2Vv bWV0cnkpOwoKICAgdHlwZSBHZGtfUG9pbnQgaXMgcmVjb3JkCiAgICAgIFggOiBHaW50MTY7CiAg ICAgIFkgOiBHaW50MTY7CiAgIGVuZCByZWNvcmQ7CiAgIHByYWdtYSBQYWNrIChHZGtfUG9pbnQp OwogICBmb3IgR2RrX1BvaW50J1NpemUgdXNlIEdpbnQnU2l6ZTsKCiAgIHR5cGUgR2RrX1BvaW50 c19BcnJheSBpcyBhcnJheSAoUG9zaXRpdmUgcmFuZ2UgPD4pIG9mIEdka19Qb2ludDsKICAgcHJh Z21hIFBhY2sgKEdka19Qb2ludHNfQXJyYXkpOwoKICAgdHlwZSBHZGtfU2VnbWVudCBpcyByZWNv cmQKICAgICAgWDEgOiBHaW50MTY7CiAgICAgIFkxIDogR2ludDE2OwogICAgICBYMiA6IEdpbnQx NjsKICAgICAgWTIgOiBHaW50MTY7CiAgIGVuZCByZWNvcmQ7CiAgIHByYWdtYSBQYWNrIChHZGtf U2VnbWVudCk7CiAgIGZvciBHZGtfU2VnbWVudCdTaXplIHVzZSA2NDsKCiAgIHR5cGUgR2RrX1Nl Z21lbnRzX0FycmF5IGlzIGFycmF5IChQb3NpdGl2ZSByYW5nZSA8Pikgb2YgR2RrX1NlZ21lbnQ7 CiAgIHByYWdtYSBQYWNrIChHZGtfU2VnbWVudHNfQXJyYXkpOwoKICAgLS0KICAgLS0gIFNlZSBh dCB0aGUgZW5kIG9mIHRoZSBwYWNrYWdlIGEgbGlzdCBvZiBhbGwgdGhlIHR5cGVzIHRoYXQKICAg LS0gIGhhdmUgbm90IGJlZW4gImJvdW5kIi4KICAgLS0KCiAgIHR5cGUgR2RrX0F0b20gaXMgbmV3 IEd1bG9uZzsKICAgLS0gIFRoaXMgdHlwZSByZXByZXNlbnRzIGEgcHJvcGVydHkgb2YgdGhlIFgt c2VydmVyLCB0aGF0IGNhbiBiZQogICAtLSAgbWFuaXB1bGF0ZWQgdGhyb3VnaCBmdW5jdGlvbnMg aW4gR2RrLlByb3BlcnR5LiBUaGV5IGhhdmUgYW4gYXNzb2NpYXRlZAogICAtLSAgbmFtZSwgdGhh dCBjYW4gYmUgcHJpbnRlZCwgYXMgd2VsbCBhcyBhIHZhbHVlIHdob3NlIHR5cGUgbWF5IHZhcnku CgogICB0eXBlIEdka19BeGlzX1VzZSBpcwogICAgIChBeGlzX0lnbm9yZSwKICAgICAgQXhpc19Y LAogICAgICBBeGlzX1ksCiAgICAgIEF4aXNfUHJlc3N1cmUsCiAgICAgIEF4aXNfWF9UaWx0LAog ICAgICBBeGlzX1lfVGlsdCwKICAgICAgQXhpc19MYXN0KTsKCiAgIHR5cGUgR2RrX0J5dGVfT3Jk ZXIgaXMgKExzYl9GaXJzdCwgTXNiX0ZpcnN0KTsKCiAgIHR5cGUgR2RrX0NhcF9TdHlsZSBpcyAo Q2FwX05vdF9MYXN0LCBDYXBfQnV0dCwgQ2FwX1JvdW5kLCBDYXBfUHJvamVjdGluZyk7CgogICB0 eXBlIEdka19Dcm9zc2luZ19Nb2RlIGlzIChDcm9zc2luZ19Ob3JtYWwsIENyb3NzaW5nX0dyYWIs IENyb3NzaW5nX1VuZ3JhYik7CgogICB0eXBlIEdka19DdXJzb3JfVHlwZSBpcwogICAgIChYX0N1 cnNvciwKICAgICAgQXJyb3csCiAgICAgIEJhc2VkX0Fycm93X0Rvd24sCiAgICAgIEJhc2VkX0Fy cm93X1VwLAogICAgICBCb2F0LAogICAgICBCb2dvc2l0eSwKICAgICAgQm90dG9tX0xlZnRfQ29y bmVyLAogICAgICBCb3R0b21fUmlnaHRfQ29ybmVyLAogICAgICBCb3R0b21fU2lkZSwKICAgICAg Qm90dG9tX1RlZSwKICAgICAgQm94X1NwaXJhbCwKICAgICAgQ2VudGVyX1B0ciwKICAgICAgQ2ly Y2xlLAogICAgICBDbG9jaywKICAgICAgQ29mZmVlX011ZywKICAgICAgQ3Jvc3MsCiAgICAgIENy b3NzX1JldmVyc2UsCiAgICAgIENyb3NzaGFpciwKICAgICAgRGlhbW9uZF9Dcm9zcywKICAgICAg RG90LAogICAgICBEb3Rib3gsCiAgICAgIERvdWJsZV9BcnJvdywKICAgICAgRHJhZnRfTGFyZ2Us CiAgICAgIERyYWZ0X1NtYWxsLAogICAgICBEcmFwZWRfQm94LAogICAgICBFeGNoYW5nZSwKICAg ICAgRmxldXIsCiAgICAgIEdvYmJsZXIsCiAgICAgIEd1bWJ5LAogICAgICBIYW5kMSwKICAgICAg SGFuZDIsCiAgICAgIEhlYXJ0LAogICAgICBJY29uLAogICAgICBJcm9uX0Nyb3NzLAogICAgICBM ZWZ0X1B0ciwKICAgICAgTGVmdF9TaWRlLAogICAgICBMZWZ0X1RlZSwKICAgICAgTGVmdGJ1dHRv biwKICAgICAgTGxfQW5nbGUsCiAgICAgIExyX0FuZ2xlLAogICAgICBNYW4sCiAgICAgIE1pZGRs ZWJ1dHRvbiwKICAgICAgTW91c2UsCiAgICAgIFBlbmNpbCwKICAgICAgUGlyYXRlLAogICAgICBQ bHVzLAogICAgICBRdWVzdGlvbl9BcnJvdywKICAgICAgUmlnaHRfUHRyLAogICAgICBSaWdodF9T aWRlLAogICAgICBSaWdodF9UZWUsCiAgICAgIFJpZ2h0YnV0dG9uLAogICAgICBSdGxfTG9nbywK ICAgICAgU2FpbGJvYXQsCiAgICAgIFNiX0Rvd25fQXJyb3csCiAgICAgIFNiX0hfRG91YmxlX0Fy cm93LAogICAgICBTYl9MZWZ0X0Fycm93LAogICAgICBTYl9SaWdodF9BcnJvdywKICAgICAgU2Jf VXBfQXJyb3csCiAgICAgIFNiX1ZfRG91YmxlX0Fycm93LAogICAgICBTaHV0dGxlLAogICAgICBT aXppbmcsCiAgICAgIFNwaWRlciwKICAgICAgU3ByYXljYW4sCiAgICAgIFN0YXIsCiAgICAgIFRh cmdldCwKICAgICAgVGNyb3NzLAogICAgICBUb3BfTGVmdF9BcnJvdywKICAgICAgVG9wX0xlZnRf Q29ybmVyLAogICAgICBUb3BfUmlnaHRfQ29ybmVyLAogICAgICBUb3BfU2lkZSwKICAgICAgVG9w X1RlZSwKICAgICAgVHJlaywKICAgICAgVWxfQW5nbGUsCiAgICAgIFVtYnJlbGxhLAogICAgICBV cl9BbmdsZSwKICAgICAgV2F0Y2gsCiAgICAgIFh0ZXJtKTsKCiAgIHR5cGUgR2RrX0RldmljZV9J ZCBpcyBuZXcgR3VpbnQzMjsKICAgLS0gIFRoaXMgdHlwZSBpcyBzcGVjaWZpYyB0byBHdGtBZGEu IEluIEdkaywgZ3VpbnQzMiBpcyB1c2VkIGluc3RlYWQuCgogICB0eXBlIEdka19FdmVudF9NYXNr IGlzIG1vZCAyICoqIDIxOwogICAtLSAgTm90ZSB0aGF0IHlvdSBuZWVkIHRvIGNoYW5nZSB0aGUg ZXZlbnQgbWFzayBvZiBhIHdpZGdldCBpZiB5b3Ugd2FudAogICAtLSAgdG8gYmUgYWJsZSB0byBn ZXQgc29tZSBldmVudHMuIFRvIGNoYW5nZSB0aGlzIG1hc2ssIHRoZSB3aWRnZXQKICAgLS0gIG11 c3QgZmlyc3QgYmUgVW5yZWFsaXplZC4KCiAgIE51bGxfRXZlbnRfTWFzayAgICAgICAgICA6IGNv bnN0YW50IEdka19FdmVudF9NYXNrOwogICBFeHBvc3VyZV9NYXNrICAgICAgICAgICAgOiBjb25z dGFudCBHZGtfRXZlbnRfTWFzazsKCiAgIFBvaW50ZXJfTW90aW9uX01hc2sgICAgICA6IGNvbnN0 YW50IEdka19FdmVudF9NYXNrOwogICAtLSAgRXZlcnkgdGltZSB0aGUgbW91c2UgbW92ZXMsIEd0 a0FkYSB3aWxsIHNlbmQgYSBNb3Rpb25fTm90aWZ5IGV2ZW50LgogICAtLSAgVGhlc2UgZXZlbnRz IHdpbGwgYmUgc2VudCBhcyBmYXN0IGFzIHBvc3NpYmxlLCBhbmQgeW91ciBhcHBsaWNhdGlvbgog ICAtLSAgbmVlZHMgdG8gYmUgYWJsZSB0byByZXNwb25kIGFzIGZhc3QgYXMgcG9zc2libGUgKGdl bmVyYWxseSBhYm91dAogICAtLSAgMjAwIGV2ZW50cyBwZXIgc2Vjb25kKS4KCiAgIFBvaW50ZXJf TW90aW9uX0hpbnRfTWFzayA6IGNvbnN0YW50IEdka19FdmVudF9NYXNrOwogICAtLSAgR3RrQWRh IHdpbGwgb25seSBzZW5kIG9uZSBNb3Rpb25fTm90aWZ5IGV2ZW50IHdoZW4gdGhlIG1vdXNlIG1v dmVzLgogICAtLSAgVGhlIGhhbmRsZXIgc2hvdWxkIGNhbGwgR2RrLldpbmRvdy5HZXRfUG9pbnRl ciwgdG8gZ2V0IHRoZSBjdXJyZW50CiAgIC0tICBwb3NpdGlvbiBhbmQgc2lnbmFscyBHdGtBZGEg dGhhdCBpdCBpcyByZWFkeSB0byBnZXQgYW5vdGhlcgogICAtLSAgTW90aW9uX05vdGlmeSBzaWdu YWwuIE5vIG5ldyBNb3Rpb25fTm90aWZ5IHdpbGwgYmUgc2VudCB1bnRpbAogICAtLSAgR2V0X1Bv aW50ZXIgaGFzIGJlZW4gY2FsbGVkLgoKICAgQnV0dG9uX01vdGlvbl9NYXNrICAgICAgIDogY29u c3RhbnQgR2RrX0V2ZW50X01hc2s7CiAgIEJ1dHRvbjFfTW90aW9uX01hc2sgICAgICA6IGNvbnN0 YW50IEdka19FdmVudF9NYXNrOwogICBCdXR0b24yX01vdGlvbl9NYXNrICAgICAgOiBjb25zdGFu dCBHZGtfRXZlbnRfTWFzazsKICAgQnV0dG9uM19Nb3Rpb25fTWFzayAgICAgIDogY29uc3RhbnQg R2RrX0V2ZW50X01hc2s7CiAgIEJ1dHRvbl9QcmVzc19NYXNrICAgICAgICA6IGNvbnN0YW50IEdk a19FdmVudF9NYXNrOwogICBCdXR0b25fUmVsZWFzZV9NYXNrICAgICAgOiBjb25zdGFudCBHZGtf RXZlbnRfTWFzazsKICAgS2V5X1ByZXNzX01hc2sgICAgICAgICAgIDogY29uc3RhbnQgR2RrX0V2 ZW50X01hc2s7CiAgIEtleV9SZWxlYXNlX01hc2sgICAgICAgICA6IGNvbnN0YW50IEdka19FdmVu dF9NYXNrOwogICBFbnRlcl9Ob3RpZnlfTWFzayAgICAgICAgOiBjb25zdGFudCBHZGtfRXZlbnRf TWFzazsKICAgTGVhdmVfTm90aWZ5X01hc2sgICAgICAgIDogY29uc3RhbnQgR2RrX0V2ZW50X01h c2s7CiAgIEZvY3VzX0NoYW5nZV9NYXNrICAgICAgICA6IGNvbnN0YW50IEdka19FdmVudF9NYXNr OwogICBTdHJ1Y3R1cmVfTWFzayAgICAgICAgICAgOiBjb25zdGFudCBHZGtfRXZlbnRfTWFzazsK ICAgUHJvcGVydHlfQ2hhbmdlX01hc2sgICAgIDogY29uc3RhbnQgR2RrX0V2ZW50X01hc2s7CiAg IFZpc2liaWxpdHlfTm90aWZ5X01hc2sgICA6IGNvbnN0YW50IEdka19FdmVudF9NYXNrOwogICBQ cm94aW1pdHlfSW5fTWFzayAgICAgICAgOiBjb25zdGFudCBHZGtfRXZlbnRfTWFzazsKICAgUHJv eGltaXR5X091dF9NYXNrICAgICAgIDogY29uc3RhbnQgR2RrX0V2ZW50X01hc2s7CiAgIEFsbF9F dmVudHNfTWFzayAgICAgICAgICA6IGNvbnN0YW50IEdka19FdmVudF9NYXNrOwoKICAgdHlwZSBH ZGtfRXZlbnRfVHlwZSBpcwogICAgIChOb3RoaW5nLAogICAgICBEZWxldGUsCiAgICAgIERlc3Ry b3ksCiAgICAgIEV4cG9zZSwKICAgICAgTW90aW9uX05vdGlmeSwKICAgICAgQnV0dG9uX1ByZXNz LAogICAgICBHZGtfMmJ1dHRvbl9QcmVzcywgIC0tICBEb3VibGUtY2xpY2sKICAgICAgR2RrXzNi dXR0b25fUHJlc3MsICAtLSAgVHJpcGxlLWNsaWNrCiAgICAgIEJ1dHRvbl9SZWxlYXNlLAogICAg ICBLZXlfUHJlc3MsCiAgICAgIEtleV9SZWxlYXNlLAogICAgICBFbnRlcl9Ob3RpZnksCiAgICAg IEx