Ci8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClNvZnR3YXJlIExpY2Vuc2UgZm9yIFRoZSBGcmF1bmhvZmVyIEZESyBBQUMgQ29kZWMgTGlicmFyeSBmb3IgQW5kcm9pZAoKqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDEzIEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBG9nJkZXJ1bmcgZGVyIGFuZ2V3YW5kdGVuIEZvcnNjaHVuZyBlLlYuCiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KCiAxLiAgICBJTlRST0RVQ1RJT04KVGhlIEZyYXVuaG9mZXIgRkRLIEFBQyBDb2RlYyBMaWJyYXJ5IGZvciBBbmRyb2lkICgiRkRLIEFBQyBDb2RlYyIpIGlzIHNvZnR3YXJlIHRoYXQgaW1wbGVtZW50cwp0aGUgTVBFRyBBZHZhbmNlZCBBdWRpbyBDb2RpbmcgKCJBQUMiKSBlbmNvZGluZyBhbmQgZGVjb2Rpbmcgc2NoZW1lIGZvciBkaWdpdGFsIGF1ZGlvLgpUaGlzIEZESyBBQUMgQ29kZWMgc29mdHdhcmUgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBvbiBhIHdpZGUgdmFyaWV0eSBvZiBBbmRyb2lkIGRldmljZXMuCgpBQUMncyBIRS1BQUMgYW5kIEhFLUFBQyB2MiB2ZXJzaW9ucyBhcmUgcmVnYXJkZWQgYXMgdG9kYXkncyBtb3N0IGVmZmljaWVudCBnZW5lcmFsIHBlcmNlcHR1YWwKYXVkaW8gY29kZWNzLiBBQUMtRUxEIGlzIGNvbnNpZGVyZWQgdGhlIGJlc3QtcGVyZm9ybWluZyBmdWxsLWJhbmR3aWR0aCBjb21tdW5pY2F0aW9ucyBjb2RlYyBieQppbmRlcGVuZGVudCBzdHVkaWVzIGFuZCBpcyB3aWRlbHkgZGVwbG95ZWQuIEFBQyBoYXMgYmVlbiBzdGFuZGFyZGl6ZWQgYnkgSVNPIGFuZCBJRUMgYXMgcGFydApvZiB0aGUgTVBFRyBzcGVjaWZpY2F0aW9ucy4KClBhdGVudCBsaWNlbnNlcyBmb3IgbmVjZXNzYXJ5IHBhdGVudCBjbGFpbXMgZm9yIHRoZSBGREsgQUFDIENvZGVjIChpbmNsdWRpbmcgdGhvc2Ugb2YgRnJhdW5ob2ZlcikKbWF5IGJlIG9idGFpbmVkIHRocm91Z2ggVmlhIExpY2Vuc2luZyAod3d3LnZpYWxpY2Vuc2luZy5jb20pIG9yIHRocm91Z2ggdGhlIHJlc3BlY3RpdmUgcGF0ZW50IG93bmVycwppbmRpdmlkdWFsbHkgZm9yIHRoZSBwdXJwb3NlIG9mIGVuY29kaW5nIG9yIGRlY29kaW5nIGJpdCBzdHJlYW1zIGluIHByb2R1Y3RzIHRoYXQgYXJlIGNvbXBsaWFudCB3aXRoCnRoZSBJU08vSUVDIE1QRUcgYXVkaW8gc3RhbmRhcmRzLiBQbGVhc2Ugbm90ZSB0aGF0IG1vc3QgbWFudWZhY3R1cmVycyBvZiBBbmRyb2lkIGRldmljZXMgYWxyZWFkeSBsaWNlbnNlCnRoZXNlIHBhdGVudCBjbGFpbXMgdGhyb3VnaCBWaWEgTGljZW5zaW5nIG9yIGRpcmVjdGx5IGZyb20gdGhlIHBhdGVudCBvd25lcnMsIGFuZCB0aGVyZWZvcmUgRkRLIEFBQyBDb2RlYwpzb2Z0d2FyZSBtYXkgYWxyZWFkeSBiZSBjb3ZlcmVkIHVuZGVyIHRob3NlIHBhdGVudCBsaWNlbnNlcyB3aGVuIGl0IGlzIHVzZWQgZm9yIHRob3NlIGxpY2Vuc2VkIHB1cnBvc2VzIG9ubHkuCgpDb21tZXJjaWFsbHktbGljZW5zZWQgQUFDIHNvZnR3YXJlIGxpYnJhcmllcywgaW5jbHVkaW5nIGZsb2F0aW5nLXBvaW50IHZlcnNpb25zIHdpdGggZW5oYW5jZWQgc291bmQgcXVhbGl0eSwKYXJlIGFsc28gYXZhaWxhYmxlIGZyb20gRnJhdW5ob2Zlci4gVXNlcnMgYXJlIGVuY291cmFnZWQgdG8gY2hlY2sgdGhlIEZyYXVuaG9mZXIgd2Vic2l0ZSBmb3IgYWRkaXRpb25hbAphcHBsaWNhdGlvbnMgaW5mb3JtYXRpb24gYW5kIGRvY3VtZW50YXRpb24uCgoyLiAgICBDT1BZUklHSFQgTElDRU5TRQoKUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCB3aXRob3V0CnBheW1lbnQgb2YgY29weXJpZ2h0IGxpY2Vuc2UgZmVlcyBwcm92aWRlZCB0aGF0IHlvdSBzYXRpc2Z5IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKCllvdSBtdXN0IHJldGFpbiB0aGUgY29tcGxldGUgdGV4dCBvZiB0aGlzIHNvZnR3YXJlIGxpY2Vuc2UgaW4gcmVkaXN0cmlidXRpb25zIG9mIHRoZSBGREsgQUFDIENvZGVjIG9yCnlvdXIgbW9kaWZpY2F0aW9ucyB0aGVyZXRvIGluIHNvdXJjZSBjb2RlIGZvcm0uCgpZb3UgbXVzdCByZXRhaW4gdGhlIGNvbXBsZXRlIHRleHQgb2YgdGhpcyBzb2Z0d2FyZSBsaWNlbnNlIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKcHJvdmlkZWQgd2l0aCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIEZESyBBQUMgQ29kZWMgb3IgeW91ciBtb2RpZmljYXRpb25zIHRoZXJldG8gaW4gYmluYXJ5IGZvcm0uCllvdSBtdXN0IG1ha2UgYXZhaWxhYmxlIGZyZWUgb2YgY2hhcmdlIGNvcGllcyBvZiB0aGUgY29tcGxldGUgc291cmNlIGNvZGUgb2YgdGhlIEZESyBBQUMgQ29kZWMgYW5kIHlvdXIKbW9kaWZpY2F0aW9ucyB0aGVyZXRvIHRvIHJlY2lwaWVudHMgb2YgY29waWVzIGluIGJpbmFyeSBmb3JtLgoKVGhlIG5hbWUgb2YgRnJhdW5ob2ZlciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIGxpYnJhcnkgd2l0aG91dApwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCgpZb3UgbWF5IG5vdCBjaGFyZ2UgY29weXJpZ2h0IGxpY2Vuc2UgZmVlcyBmb3IgYW55b25lIHRvIHVzZSwgY29weSBvciBkaXN0cmlidXRlIHRoZSBGREsgQUFDIENvZGVjCnNvZnR3YXJlIG9yIHlvdXIgbW9kaWZpY2F0aW9ucyB0aGVyZXRvLgoKWW91ciBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGUgRkRLIEFBQyBDb2RlYyBtdXN0IGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgc29mdHdhcmUKYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuIEZvciBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGUgRkRLIEFBQyBDb2RlYywgdGhlIHRlcm0KIkZyYXVuaG9mZXIgRkRLIEFBQyBDb2RlYyBMaWJyYXJ5IGZvciBBbmRyb2lkIiBtdXN0IGJlIHJlcGxhY2VkIGJ5IHRoZSB0ZXJtCiJUaGlyZC1QYXJ0eSBNb2RpZmllZCBWZXJzaW9uIG9mIHRoZSBGcmF1bmhvZmVyIEZESyBBQUMgQ29kZWMgTGlicmFyeSBmb3IgQW5kcm9pZC4iCgozLiAgICBOTyBQQVRFTlQgTElDRU5TRQoKTk8gRVhQUkVTUyBPUiBJTVBMSUVEIExJQ0VOU0VTIFRPIEFOWSBQQVRFTlQgQ0xBSU1TLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSBwYXRlbnRzIG9mIEZyYXVuaG9mZXIsCkFSRSBHUkFOVEVEIEJZIFRISVMgU09GVFdBUkUgTElDRU5TRS4gRnJhdW5ob2ZlciBwcm92aWRlcyBubyB3YXJyYW50eSBvZiBwYXRlbnQgbm9uLWluZnJpbmdlbWVudCB3aXRoCnJlc3BlY3QgdG8gdGhpcyBzb2Z0d2FyZS4KCllvdSBtYXkgdXNlIHRoaXMgRkRLIEFBQyBDb2RlYyBzb2Z0d2FyZSBvciBtb2RpZmljYXRpb25zIHRoZXJldG8gb25seSBmb3IgcHVycG9zZXMgdGhhdCBhcmUgYXV0aG9yaXplZApieSBhcHByb3ByaWF0ZSBwYXRlbnQgbGljZW5zZXMuCgo0LiAgICBESVNDTEFJTUVSCgpUaGlzIEZESyBBQUMgQ29kZWMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYnkgRnJhdW5ob2ZlciBvbiBiZWhhbGYgb2YgdGhlIGNvcHlyaWdodCBob2xkZXJzIGFuZCBjb250cmlidXRvcnMKIkFTIElTIiBhbmQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGltcGxpZWQgd2FycmFudGllcwpvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUgpDT05UUklCVVRPUlMgQkUgTElBQkxFIGZvciBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgaW5jaWRlbnRhbCwgc3BlY2lhbCwgZXhlbXBsYXJ5LCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMsCmluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gcHJvY3VyZW1lbnQgb2Ygc3Vic3RpdHV0ZSBnb29kcyBvciBzZXJ2aWNlczsgbG9zcyBvZiB1c2UsIGRhdGEsIG9yIHByb2ZpdHMsCm9yIGJ1c2luZXNzIGludGVycnVwdGlvbiwgaG93ZXZlciBjYXVzZWQgYW5kIG9uIGFueSB0aGVvcnkgb2YgbGlhYmlsaXR5LCB3aGV0aGVyIGluIGNvbnRyYWN0LCBzdHJpY3QKbGlhYmlsaXR5LCBvciB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGFyaXNpbmcgaW4gYW55IHdheSBvdXQgb2YgdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCBldmVuIGlmCmFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlLgoKNS4gICAgQ09OVEFDVCBJTkZPUk1BVElPTgoKRnJhdW5ob2ZlciBJbnN0aXR1dGUgZm9yIEludGVncmF0ZWQgQ2lyY3VpdHMgSUlTCkF0dGVudGlvbjogQXVkaW8gYW5kIE11bHRpbWVkaWEgRGVwYXJ0bWVudHMgLSBGREsgQUFDIExMCkFtIFdvbGZzbWFudGVsIDMzCjkxMDU4IEVybGFuZ2VuLCBHZXJtYW55Cgp3d3cuaWlzLmZyYXVuaG9mZXIuZGUvYW1tCmFtbS1pbmZvQGlpcy5mcmF1bmhvZmVyLmRlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKiAgRmFzdCBNUEVHIEFBQyBBdWRpbyBFbmNvZGVyICAqKioqKioqKioqKioqKioqKioqKioqCgogICBJbml0aWFsIGF1dGhvcjogICAgICAgTS4gU2NodWcgLyBBLiBHcm9lc2NoZWwKICAgY29udGVudHMvZGVzY3JpcHRpb246IGZhc3QgYWFjIGNvZGVyIGludGVyZmFjZSBsaWJyYXJ5IGZ1bmN0aW9ucwoKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKI2lmbmRlZiBfYWFjZW5jX2hfCiNkZWZpbmUgX2FhY2VuY19oXwoKI2luY2x1ZGUgImNvbW1vbl9maXguaCIKI2luY2x1ZGUgIkZES19hdWRpby5oIgoKI2luY2x1ZGUgInRwZW5jX2xpYi5oIgoKI2luY2x1ZGUgInNicl9lbmNvZGVyLmgiCgojaWZkZWYgX19jcGx1c3BsdXMKZXh0ZXJuICJDIiB7CiNlbmRpZgoKLyoKICogQUFDLUxDIGVycm9yIGNvZGVzLgogKi8KdHlwZWRlZiBlbnVtIHsKICBBQUNfRU5DX09LICAgICAgID0gMHgwMDAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBbGwgZmluZS4gKi8KCiAgQUFDX0VOQ19VTktOT1dOICA9IDB4MDAwMiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRXJyb3IgY29uZGl0aW9uIGlzIG9mIHVua25vd24gcmVhc29uLCBvciBmcm9tIGFub3RoZXIgbW9kdWxlLiAgICAgICAgICAgICAgKi8KCiAgLyogaW5pdGlhbGl6YXRpb24gZXJyb3JzICovCiAgYWFjX2VuY19pbml0X2Vycm9yX3N0YXJ0ICAgICAgPSAweDIwMDAsCiAgQUFDX0VOQ19JTlZBTElEX0hBTkRMRSAgICAgICAgPSAweDIwMjAsICAgICAgICAgICAgIC8qITwgVGhlIGhhbmRsZSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uIGNhbGwgd2FzIGludmFsaWQgKHByb2JhYmx5IE5VTEwpLiAgICAgICAgKi8KICBBQUNfRU5DX0lOVkFMSURfRlJBTUVfTEVOR1RIICA9IDB4MjA4MCwgICAgICAgICAgICAgLyohPCBJbnZhbGlkIGZyYW1lIGxlbmd0aC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogIEFBQ19FTkNfSU5WQUxJRF9OX0NIQU5ORUxTICAgID0gMHgyMGUwLCAgICAgICAgICAgICAvKiE8IEludmFsaWQgYW1vdW50IG9mIGF1ZGlvIGlucHV0IGNoYW5uZWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgQUFDX0VOQ19JTlZBTElEX1NGQl9UQUJMRSAgICAgPSAweDIxNDAsICAgICAgICAgICAgIC8qITwgSW50ZXJuYWwgZW5jb2RlciBlcnJvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KCiAgQUFDX0VOQ19VTlNVUFBPUlRFRF9BT1QgICAgICAgICAgICA9IDB4MzAwMCwgICAgICAgIC8qITwgVGhlIEF1ZGlvIE9iamVjdCBUeXBlIChBT1QpIGlzIG5vdCBzdXBwb3J0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICBBQUNfRU5DX1VOU1VQUE9SVEVEX0JJVFJBVEUgICAgICAgID0gMHgzMDIwLCAgICAgICAgLyohPCBUaGUgY2hvc2VuIGJpdHJhdGUgaXMgbm90IHN1cHBvcnRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogIEFBQ19FTkNfVU5TVVBQT1JURURfQklUUkFURV9NT0RFICAgPSAweDMwMjgsICAgICAgICAvKiE8IFVuc3VwcG9ydGVkIGJpdCByYXRlIG1vZGUgKENCUiBvciBWQlIpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgQUFDX0VOQ19VTlNVUFBPUlRFRF9BTkNfQklUUkFURSAgICA9IDB4MzA0MCwgICAgICAgIC8qITwgVW5zdXBwb3J0ZWQgYW5jaWxsYXkgYml0cmF0ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICBBQUNfRU5DX1VOU1VQUE9SVEVEX0FOQ19NT0RFICAgICAgID0gMHgzMDYwLAogIEFBQ19FTkNfVU5TVVBQT1JURURfVFJBTlNQT1JUX1RZUEUgPSAweDMwODAsICAgICAgICAvKiE8IFRoZSBiaXRzdHJlYW0gZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgQUFDX0VOQ19VTlNVUFBPUlRFRF9FUl9GT1JNQVQgICAgICA9IDB4MzBhMCwgICAgICAgIC8qITwgVGhlIGVycm9yIHJlc2lsaWVuY2UgdG9vbCBmb3JtYXQgaXMgbm90IHN1cHBvcnRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KICBBQUNfRU5DX1VOU1VQUE9SVEVEX0VQQ09ORklHICAgICAgID0gMHgzMGMwLCAgICAgICAgLyohPCBUaGUgZXJyb3IgcHJvdGVjdGlvbiBmb3JtYXQgaXMgbm90IHN1cHBvcnRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogIEFBQ19FTkNfVU5TVVBQT1JURURfQ0hBTk5FTENPTkZJRyAgPSAweDMwZTAsICAgICAgICAvKiE8IFRoZSBjaGFubmVsIGNvbmZpZ3VyYXRpb24gKGVpdGhlciBudW1iZXIgb3IgYXJyYW5nZW1lbnQpIGlzIG5vdCBzdXBwb3J0ZWQuICovCiAgQUFDX0VOQ19VTlNVUFBPUlRFRF9TQU1QTElOR1JBVEUgICA9IDB4MzEwMCwgICAgICAgIC8qITwgU2FtcGxlIHJhdGUgb2YgYXVkaW8gaW5wdXQgaXMgbm90IHN1cHBvcnRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICBBQUNfRU5DX05PX01FTU9SWSAgICAgICAgICAgICAgICAgID0gMHgzMTIwLCAgICAgICAgLyohPCBDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5LiAqLwogIEFBQ19FTkNfUEVfSU5JVF9UQUJMRV9OT1RfRk9VTkQgICAgPSAweDMxNDAsICAgICAgICAvKiE8IEludGVybmFsIGVuY29kZXIgZXJyb3IuICAgICovCgogIGFhY19lbmNfaW5pdF9lcnJvcl9lbmQsCgogIC8qIGVuY29kZSBlcnJvcnMgKi8KICBhYWNfZW5jX2Vycm9yX3N0YXJ0ICAgICAgICAgICAgICAgICAgICAgICA9IDB4NDAwMCwKICBBQUNfRU5DX1FVQU5UX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICA9IDB4NDAyMCwgICAgICAgLyohPCBUb28gbWFueSBiaXRzIHVzZWQgaW4gcXVhbnRpemF0aW9uLiAgICAgICAgICAgICAqLwogIEFBQ19FTkNfV1JJVFRFTl9CSVRTX0VSUk9SICAgICAgICAgICAgICAgID0gMHg0MDQwLCAgICAgICAvKiE8IFVuZXhwZWN0ZWQgbnVtYmVyIG9mIHdyaXR0ZW4gYml0cywgZGlmZmVycyB0bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGN1bGF0ZWQgbnVtYmVyIG9mIGJpdHMuICAgICAgICAgICAgICAgICAgICAgICovCiAgQUFDX0VOQ19QTlNfVEFCTEVfRVJST1IgICAgICAgICAgICAgICAgICAgPSAweDQwNjAsICAgICAgIC8qITwgUE5TIGxldmVsIG91dCBvZiByYW5nZS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KICBBQUNfRU5DX0dMT0JBTF9HQUlOX1RPT19ISUdIICAgICAgICAgICAgICA9IDB4NDA4MCwgICAgICAgLyohPCBJbnRlcm5hbCBxdWFudGl6ZXIgZXJyb3IuICAgICAgICAgICAgICAgICAgICAgICAqLwogIEFBQ19FTkNfQklUUkVTX1RPT19MT1cgICAgICAgICAgICAgICAgICAgID0gMHg0MGEwLCAgICAgICAvKiE8IFRvbyBmZXcgIGJpdHMgaW4gYml0IHJlc2Vydm9pci4gICAgICAgICAgICAgICAgICovCiAgQUFDX0VOQ19CSVRSRVNfVE9PX0hJR0ggICAgICAgICAgICAgICAgICAgPSAweDQwYTEsICAgICAgIC8qITwgVG9vIG1hbnkgYml0cyBpbiBiaXQgcmVzZXJ2b2lyLiAgICAgICAgICAgICAgICAgKi8KICBBQUNfRU5DX0lOVkFMSURfQ0hBTk5FTF9CSVRSQVRFICAgICAgICAgICA9IDB4NDEwMCwKICBBQUNfRU5DX0lOVkFMSURfRUxFTUVOVElORk9fVFlQRSAgICAgICAgICA9IDB4NDEyMCwgICAgICAgLyohPCBJbnRlcm5hbCBlbmNvZGVyIGVycm9yLiAgICAgICAgICAgICAgICAgICAgICAgICAqLwoKICBBQUNfRU5DX1dSSVRFX1NDQUxfRVJST1IgICAgICAgICAgICAgICAgICA9IDB4NDFlMCwgICAgICAgLyohPCBFcnJvciB3cml0aW5nIHNjYWxlZmFjRGF0YS4gICAgICAgICAgICAgICAgICAgICAqLwogIEFBQ19FTkNfV1JJVEVfU0VDX0VSUk9SICAgICAgICAgICAgICAgICAgID0gMHg0MjAwLCAgICAgICAvKiE8IEVycm9yIHdyaXRpbmcgc2VjdGlvbkRhdGEuICAgICAgICAgICAgICAgICAgICAgICovCiAgQUFDX0VOQ19XUklURV9TUEVDX0VSUk9SICAgICAgICAgICAgICAgICAgPSAweDQyMjAsICAgICAgIC8qITwgRXJyb3Igd3JpdGluZyBzcGVjdHJhbERhdGEuICAgICAgICAgICAgICAgICAgICAgKi8KICBhYWNfZW5jX2Vycm9yX2VuZAoKfSBBQUNfRU5DT0RFUl9FUlJPUjsKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBkZWZpbmVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCiNkZWZpbmUgQU5DX0RBVEFfQlVGRkVSU0laRSAxMDI0ICAgICAgLyogYW5jQnVmZmVyIHNpemUgKi8KCiNkZWZpbmUgTUFYX1RPVEFMX0VYVF9QQVlMT0FEUyAgKCgoOCkgKiAoMSkpICsgKDIrMikpCgoKdHlwZWRlZiBlbnVtIHsKICBBQUNFTkNfQlJfTU9ERV9JTlZBTElEID0gLTEsICAvKiE8IEludmFsaWQgYml0cmF0ZSBtb2RlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogIEFBQ0VOQ19CUl9NT0RFX0NCUiAgICAgPSAgMCwgIC8qITwgQ29uc3RhbnQgYml0cmF0ZSBtb2RlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgQUFDRU5DX0JSX01PREVfVkJSXzEgICA9ICAxLCAgLyohPCBWYXJpYWJsZSBiaXRyYXRlIG1vZGUsIGFib3V0IDMyIGticHMvY2hhbm5lbC4gICAgKi8KICBBQUNFTkNfQlJfTU9ERV9WQlJfMiAgID0gIDIsICAvKiE8IFZhcmlhYmxlIGJpdHJhdGUgbW9kZSwgYWJvdXQgNDAga2Jwcy9jaGFubmVsLiAgICAqLwogIEFBQ0VOQ19CUl9NT0RFX1ZCUl8zICAgPSAgMywgIC8qITwgVmFyaWFibGUgYml0cmF0ZSBtb2RlLCBhYm91dCA0OC01NiBrYnBzL2NoYW5uZWwuICovCiAgQUFDRU5DX0JSX01PREVfVkJSXzQgICA9ICA0LCAgLyohPCBWYXJpYWJsZSBiaXRyYXRlIG1vZGUsIGFib3V0IDY0IGticHMvY2hhbm5lbC4gICAgKi8KICBBQUNFTkNfQlJfTU9ERV9WQlJfNSAgID0gIDUsICAvKiE8IFZhcmlhYmxlIGJpdHJhdGUgbW9kZSwgYWJvdXQgODAtOTYga2Jwcy9jaGFubmVsLiAqLwogIEFBQ0VOQ19CUl9NT0RFX0ZGICAgICAgPSAgNiwgIC8qITwgRml4ZWQgZnJhbWUgbW9kZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgQUFDRU5DX0JSX01PREVfU0ZSICAgICA9ICA3ICAgLyohPCBTdXBlcmZyYW1lIG1vZGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KCn0gQUFDRU5DX0JJVFJBVEVfTU9ERTsKCnR5cGVkZWYgZW51bSB7CgogIENIX09SREVSX01QRUcgPSAwLCAgLyohPCBNUEVHIGNoYW5uZWwgb3JkZXJpbmcgKGUuIGcuIDUuMTogQywgTCwgUiwgU0wsIFNSLCBMRkUpICAgICAgICAgICAqLwogIENIX09SREVSX1dBViAgICAgICAgLyohPCBXQVYgZmlsZWZvcm1hdCBjaGFubmVsIG9yZGVyaW5nIChlLiBnLiA1LjE6IEwsIFIsIEMsIExGRSwgU0wsIFNSKSAqLwoKfSBDSEFOTkVMX09SREVSOwoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCnN0cnVjdCBBQUNFTkNfQ09ORklHIHsKICBJTlQgICBzYW1wbGVSYXRlOyAgICAgICAgICAgICAvKiBlbmNvZGVyIHNhbXBsZSByYXRlICovCiAgSU5UICAgYml0UmF0ZTsgICAgICAgICAgICAgICAgLyogZW5jb2RlciBiaXQgcmF0ZSBpbiBiaXRzL3NlYyAqLwogIElOVCAgIGFuY0RhdGFCaXRSYXRlOyAgICAgICAgIC8qIGFkZGl0aW9uYWwgYml0cyBjb25zdW1lZCBieSBhbmMgZGF0YSBvciBzYnIgaGF2ZSB0byBiZSBjb25zaWVkZXJlZCB3aGlsZSBjb25maWd1cmF0aW9uICovCgogIElOVCAgIG5TdWJGcmFtZXM7ICAgICAgICAgICAgIC8qIG51bWJlciBvZiBmcmFtZXMgaW4gc3VwZXIgZnJhbWUgKG5vdCBBRFRTL0xBVE0gc3ViZnJhbWVzICEpICovCiAgQVVESU9fT0JKRUNUX1RZUEUgYXVkaW9PYmplY3RUeXBlOyAgIC8qIEF1ZGlvIE9iamVjdCBUeXBlICAqLwoKICBJTlQgICBhdmVyYWdlQml0czsgICAgICAgICAgICAvKiBlbmNvZGVyIGJpdCByYXRlIGluIGJpdHMvc3VwZXJmcmFtZSAqLwogIElOVCAgIGJpdHJhdGVNb2RlOyAgICAgICAgICAgIC8qIGVuY29kZXIgYml0cmF0ZSBtb2RlIChDQlIvVkJSKSAqLwogIElOVCAgIG5DaGFubmVsczsgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBjaGFubmVscyB0byBwcm9jZXNzICovCiAgQ0hBTk5FTF9PUkRFUiBjaGFubmVsT3JkZXI7ICAgLyogSW5wdXQgQ2hhbm5lbCBvcmRlcmluZyBzY2hlbWUuICovCiAgSU5UICAgYmFuZFdpZHRoOyAgICAgICAgICAgICAgLyogdGFyZ2V0ZWQgYXVkaW8gYmFuZHdpZHRoIGluIEh6ICovCiAgQ0hBTk5FTF9NT0RFICBjaGFubmVsTW9kZTsgICAgLyogZW5jb2RlciBjaGFubmVsIG1vZGUgY29uZmlndXJhdGlvbiAqLwogIElOVCAgIGZyYW1lbGVuZ3RoOyAgICAgICAgICAgIC8qIHVzZWQgZnJhbWUgc2l6ZSAqLwoKICBVSU5UICBzeW50YXhGbGFnczsgICAgICAgICAgICAvKiBiaXRzdHJlYW1zIHN5bnRheCBjb25maWd1cmF0aW9uICovCiAgU0NIQVIgZXBDb25maWc7ICAgICAgICAgICAgICAgLyogZXJyb3IgcHJvdGVjdGlvbiBjb25maWd1cmF0aW9uICovCgogIElOVCAgIGFuY19SYXRlOyAgICAgICAgICAgICAgIC8qIGFuY2lsbGFyeSByYXRlLCAwIChkaXNhYmxlZCksIC0xIChkZWZhdWx0KSBlbHNlIGRlc2lyZWQgcmF0ZSAqLwogIFVJTlQgIG1heEFuY0J5dGVzUGVyQVU7CiAgSU5UICAgbWluQml0c1BlckZyYW1lOyAgICAgICAgLyogbWluaW11bSBudW1iZXIgb2YgYml0cyBpbiBBVSAqLwogIElOVCAgIG1heEJpdHNQZXJGcmFtZTsgICAgICAgIC8qIG1heGltdW0gbnVtYmVyIG9mIGJpdHMgaW4gQVUgKi8KICBJTlQgICBiaXRyZXNlcnZvaXI7ICAgICAgICAgICAvKiBzaXplIG9mIGJpdHJlc2Vydm9pciAqLwoKICBVSU5UICBzYnJSYXRpbzsgICAgICAgICAgICAgICAvKiBzYnIgc2FtcGxpbmcgcmF0ZSByYXRpbzogZHVhbC0gb3Igc2luZ2xlLXJhdGUgKi8KCiAgVUNIQVIgdXNlVG5zOyAgICAgICAgICAgICAgICAgLyogZmxhZzogdXNlIHRlbXBvcmFsIG5vaXNlIHNoYXBpbmcgKi8KICBVQ0hBUiB1c2VQbnM7ICAgICAgICAgICAgICAgICAvKiBmbGFnOiB1c2UgcGVyY2VwdHVhbCBub2lzZSBzdWJzdGl0dXRpb24gKi8KICBVQ0hBUiB1c2VJUzsgICAgICAgICAgICAgICAgICAvKiBmbGFnOiB1c2UgaW50ZW5zaXR5IGNvZGluZyAqLwoKICBVQ0hBUiB1c2VSZXF1YW50OyAgICAgICAgICAgICAvKiBmbGFnOiB1c2UgYWZ0ZXJidXJuZXIgKi8KfTsKCnR5cGVkZWYgc3RydWN0IHsKICBVQ0hBUiAgICAgICAgICAgICpwRGF0YTsgICAgICAvKiBwb2ludGVyIHRvIGV4dGVuc2lvbiBwYXlsb2FkIGRhdGEgKi8KICBVSU5UICAgICAgICAgICAgICBkYXRhU2l6ZTsgICAvKiBleHRlbnNpb24gcGF5bG9hZCBkYXRhIHNpemUgaW4gYml0cyAqLwogIEVYVF9QQVlMT0FEX1RZUEUgIGRhdGFUeXBlOyAgIC8qIGV4dGVuc2lvbiBwYXlsb2FkIGRhdGEgdHlwZSAqLwogIElOVCAgICAgICAgICAgICAgIGFzc29jaWF0ZWRDaEVsZW1lbnQ7ICAvKiBudW1iZXIgb2YgdGhlIGNoYW5uZWwgZWxlbWVudCB0aGUgZGF0YSBpcyBhc3NpZ25lZCB0byAqLwp9IEFBQ0VOQ19FWFRfUEFZTE9BRDsKCnR5cGVkZWYgc3RydWN0IEFBQ19FTkMgKkhBTkRMRV9BQUNfRU5DOwoKLyoqCiAqIFxicmllZiBMaW1pdCBnaXZlbiBiaXQgcmF0ZSB0byBhIHZhbGlkIHZhbHVlCiAqIFxwYXJhbSBoVHBFbmMgdHJhbnNwb3J0IGVuY29kZXIgaGFuZGxlCiAqIFxwYXJhbSBjb3JlU2FtcGxpbmdSYXRlIHRoZSBzYW1wbGUgcmF0ZSB0byBiZSB1c2VkIGZvciB0aGUgQUFDIGVuY29kZXIKICogXHBhcmFtIGZyYW1lTGVuZ3RoIHRoZSBmcmFtZUxlbmd0aCB0byBiZSB1c2VkIGZvciB0aGUgQUFDIGVuY29kZXIKICogXHBhcmFtIG5DaGFubmVscyBudW1iZXIgb2YgdG90YWwgY2hhbm5lbHMKICogXHBhcmFtIG5DaGFubmVsc0VmZiBudW1iZXIgb2YgZWZmZWN0aXZlIGNoYW5uZWxzCiAqIFxwYXJhbSBiaXRSYXRlIHRoZSBpbml0aWFsIGJpdCByYXRlIHZhbHVlIGZvciB3aGljaCB0aGUgY2xvc2VzdCB2YWxpZCBiaXQgcmF0ZSB2YWx1ZSBpcyBzZWFyY2hlZCBmb3IKICogXHBhcmFtIGF2ZXJhZ2VCaXRzIGF2ZXJhZ2UgYml0cyBwZXIgZnJhbWUgZm9yIGZpeGVkIGZyYW1pbmcuIFNldCB0byAtMSBpZiBub3QgYXZhaWxhYmxlLgogKiBccGFyYW0gb3B0aW9uYWwgcG9pbnRlciB3aGVyZSB0aGUgY3VycmVudCBiaXRzIHBlciBmcmFtZSBhcmUgc3RvcmVkIGludG8uCiAqIFxwYXJhbSBiaXRyYXRlTW9kZSB0aGUgY3VycmVudCBiaXQgcmF0ZSBtb2RlCiAqIFxwYXJhbSBuU3ViRnJhbWVzIG51bWJlciBvZiBzdWIgZnJhbWVzIGZvciBzdXBlciBmcmFtaW5nIChub3QgdHJhbnNwb3J0IGZyYW1lcykuCiAqIFxyZXR1cm4gYSB2YWxpZCBiaXQgcmF0ZSB2YWx1ZSBhcyBjbG9zZSBhcyBwb3NzaWJsZSBvciBpZGVudGljYWwgdG8gYml0UmF0ZQogKi8KSU5UIEZES2FhY0VuY19MaW1pdEJpdHJhdGUoCiAgICAgICAgSEFORExFX1RSQU5TUE9SVEVOQyBoVHBFbmMsCiAgICAgICAgSU5UIGNvcmVTYW1wbGluZ1JhdGUsCiAgICAgICAgSU5UIGZyYW1lTGVuZ3RoLAogICAgICAgIElOVCBuQ2hhbm5lbHMsCiAgICAgICAgSU5UIG5DaGFubmVsc0VmZiwKICAgICAgICBJTlQgYml0UmF0ZSwKICAgICAgICBJTlQgYXZlcmFnZUJpdHMsCiAgICAgICAgSU5UICpwQXZlcmFnZUJpdHNQZXJGcmFtZSwKICAgICAgICBJTlQgYml0cmF0ZU1vZGUsCiAgICAgICAgSU5UIG5TdWJGcmFtZXMKICAgICAgICApOwoKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAgZnVuY3Rpb25uYW1lOiBGREthYWNFbmNfR2V0VkJSQml0cmF0ZQogICAgIGRlc2NyaXB0aW9uOiAgR2V0IFZCUiBiaXRyYXRlIGZyb20gdmJyIHF1YWxpdHkKICAgICBpbnB1dCBwYXJhbXM6IGludCB2YnJRdWFsaXR5IChWQlIwLCBWQlIxLCBWQlIyKQogICAgICAgICAgICAgICAgICAgY2hhbm5lbE1vZGUKICAgICByZXR1cm5zOiAgICAgIHZiciBiaXRyYXRlCgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIElOVCBGREthYWNFbmNfR2V0VkJSQml0cmF0ZShJTlQgYml0cmF0ZU1vZGUsIENIQU5ORUxfTU9ERSBjaGFubmVsTW9kZSk7CgoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICBmdW5jdGlvbm5hbWU6IEZES2FhY0VuY19BYWNJbml0RGVmYXVsdENvbmZpZwogICAgIGRlc2NyaXB0aW9uOiAgZ2l2ZXMgcmVhc29uYWJsZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24KICAgICByZXR1cm5zOiAgICAgIC0tLQoKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCnZvaWQgRkRLYWFjRW5jX0FhY0luaXREZWZhdWx0Q29uZmlnKEFBQ0VOQ19DT05GSUcgICAgICpjb25maWcpOwoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgkgICAgZnVuY3Rpb25uYW1lOkZES2FhY0VuY19PcGVuCiAgICBkZXNjcmlwdGlvbjogYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYSBuZXcgZW5jb2RlciBpbnN0YW5jZQogICAgcmV0dXJuczogICAgIDAgaWYgc3VjY2VzcwoKICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpBQUNfRU5DT0RFUl9FUlJPUiBGREthYWNFbmNfT3BlbihIQU5ETEVfQUFDX0VOQyAgKnBoQWFjRW5jLCAgICAgICAgICAgICAgLyogcG9pbnRlciB0byBhbiBlbmNvZGVyIGhhbmRsZSwgaW5pdGlhbGl6ZWQgb24gcmV0dXJuICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElOVCAgICAgICAgbkVsZW1lbnRzLCAgICAgICAgICAgICAvKiBudW1iZXIgb2YgbWF4aW1hbCBlbGVtZW50cyBpbiBpbnN0YW5jZSB0byBzdXBwb3J0ICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElOVCAgICAgICAgbkNoYW5uZWxzLCAgICAgICAgICAgICAvKiBudW1iZXIgb2YgbWF4aW1hbCBjaGFubmVscyBpbiBpbnN0YW5jZSB0byBzdXBwb3J0ICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElOVCAgICAgICAgblN1YkZyYW1lcyk7ICAgICAgICAgICAvKiBzdXBwb3J0IHN1cGVyZnJhbWluZyBpbiBpbnN0YW5jZSAqLwoKCkFBQ19FTkNPREVSX0VSUk9SIEZES2FhY0VuY19Jbml0aWFsaXplKEhBTkRMRV9BQUNfRU5DICAgICBoQWFjRW5jb2RlciwgICAvKiBwb2ludGVyIHRvIGFuIGVuY29kZXIgaGFuZGxlLCBpbml0aWFsaXplZCBvbiByZXR1cm4gKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUFDRU5DX0NPTkZJRyAgICAqY29uZmlnLCAgICAgICAgIC8qIHByZS1pbml0aWFsaXplZCBjb25maWcgc3RydWN0ICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRV9UUkFOU1BPUlRFTkMgaFRwRW5jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTE9ORyAgICAgICAgICAgICAgIGluaXRGbGFncyk7CgoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICBmdW5jdGlvbm5hbWU6IEZES2FhY0VuY19FbmNvZGVGcmFtZQogICAgZGVzY3JpcHRpb246ICBlbmNvZGUgb25lIGZyYW1lCiAgICByZXR1cm5zOiAgICAgIDAgaWYgc3VjY2VzcwoKICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoKQUFDX0VOQ09ERVJfRVJST1IgRkRLYWFjRW5jX0VuY29kZUZyYW1lKCBIQU5ETEVfQUFDX0VOQyAgICAgICBoQWFjRW5jLCAgICAgICAgIC8qIGVuY29kZXIgaGFuZGxlICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFX1RSQU5TUE9SVEVOQyAgaFRwRW5jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVF9QQ00qICAgICAgICAgICAgIGlucHV0QnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVCogICAgICAgICAgICAgICAgIG51bU91dEJ5dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFBQ0VOQ19FWFRfUEFZTE9BRCAgIGV4dFBheWxvYWRbTUFYX1RPVEFMX0VYVF9QQVlMT0FEU10KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgZnVuY3Rpb25uYW1lOkZES2FhY0VuY19DbG9zZQogICAgZGVzY3JpcHRpb246IGRlbGV0ZSBlbmNvZGVyIGluc3RhbmNlCiAgICByZXR1cm5zOgoKICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoKdm9pZCBGREthYWNFbmNfQ2xvc2UoIEhBTkRMRV9BQUNfRU5DKiAgcGhBYWNFbmMpOyAgIC8qIGVuY29kZXIgaGFuZGxlICovCgojaWZkZWYgX19jcGx1c3BsdXMKfQojZW5kaWYKCiNlbmRpZiAvKiBfYWFjZW5jX2hfICovCgo=