CkluIHRoaXMgZG9jdW1lbnQgeW91IHdpbGwgZmluZCBpbmZvcm1hdGlvbiBhYm91dDoKLSBob3cgdG8gYnVpbGQgZXh0ZXJuYWwgbW9kdWxlcwotIGhvdyB0byBtYWtlIHlvdXIgbW9kdWxlIHVzZSBrYnVpbGQgaW5mcmFzdHJ1Y3R1cmUKLSBob3cga2J1aWxkIHdpbGwgaW5zdGFsbCBhIGtlcm5lbAotIGhvdyB0byBpbnN0YWxsIG1vZHVsZXMgaW4gYSBub24tc3RhbmRhcmQgbG9jYXRpb24KCj09PSBUYWJsZSBvZiBDb250ZW50cwoKCT09PSAxIEludHJvZHVjdGlvbgoJPT09IDIgSG93IHRvIGJ1aWxkIGV4dGVybmFsIG1vZHVsZXMKCSAgIC0tLSAyLjEgQnVpbGRpbmcgZXh0ZXJuYWwgbW9kdWxlcwoJICAgLS0tIDIuMiBBdmFpbGFibGUgdGFyZ2V0cwoJICAgLS0tIDIuMyBBdmFpbGFibGUgb3B0aW9ucwoJICAgLS0tIDIuNCBQcmVwYXJpbmcgdGhlIGtlcm5lbCB0cmVlIGZvciBtb2R1bGUgYnVpbGQKCSAgIC0tLSAyLjUgQnVpbGRpbmcgc2VwYXJhdGUgZmlsZXMgZm9yIGEgbW9kdWxlCgk9PT0gMy4gRXhhbXBsZSBjb21tYW5kcwoJPT09IDQuIENyZWF0aW5nIGEga2J1aWxkIGZpbGUgZm9yIGFuIGV4dGVybmFsIG1vZHVsZQoJPT09IDUuIEluY2x1ZGUgZmlsZXMKCSAgIC0tLSA1LjEgSG93IHRvIGluY2x1ZGUgZmlsZXMgZnJvbSB0aGUga2VybmVsIGluY2x1ZGUgZGlyCgkgICAtLS0gNS4yIEV4dGVybmFsIG1vZHVsZXMgdXNpbmcgYW4gaW5jbHVkZS8gZGlyCgkgICAtLS0gNS4zIEV4dGVybmFsIG1vZHVsZXMgdXNpbmcgc2V2ZXJhbCBkaXJlY3RvcmllcwoJPT09IDYuIE1vZHVsZSBpbnN0YWxsYXRpb24KCSAgIC0tLSA2LjEgSU5TVEFMTF9NT0RfUEFUSAoJICAgLS0tIDYuMiBJTlNUQUxMX01PRF9ESVIKCT09PSA3LiBNb2R1bGUgdmVyc2lvbmluZwoJPT09IDguIFRpcHMgJiBUcmlja3MKCSAgIC0tLSA4LjEgVGVzdGluZyBmb3IgQ09ORklHX0ZPT19CQVIKCgoKPT09IDEuIEludHJvZHVjdGlvbgoKa2J1aWxkIGluY2x1ZGVzIGZ1bmN0aW9uYWxpdHkgZm9yIGJ1aWxkaW5nIG1vZHVsZXMgYm90aAp3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZSBhbmQgb3V0c2lkZSB0aGUga2VybmVsIHNvdXJjZSB0cmVlLgpUaGUgbGF0dGVyIGlzIHVzdWFsbHkgcmVmZXJyZWQgdG8gYXMgZXh0ZXJuYWwgbW9kdWxlcyBhbmQgaXMgdXNlZApib3RoIGR1cmluZyBkZXZlbG9wbWVudCBhbmQgZm9yIG1vZHVsZXMgdGhhdCBhcmUgbm90IHBsYW5uZWQgdG8gYmUKaW5jbHVkZWQgaW4gdGhlIGtlcm5lbCB0cmVlLgoKV2hhdCBpcyBjb3ZlcmVkIHdpdGhpbiB0aGlzIGZpbGUgaXMgbWFpbmx5IGluZm9ybWF0aW9uIHRvIGF1dGhvcnMKb2YgbW9kdWxlcy4gVGhlIGF1dGhvciBvZiBhbiBleHRlcm5hbCBtb2R1bGVzIHNob3VsZCBzdXBwbHkKYSBtYWtlZmlsZSB0aGF0IGhpZGVzIG1vc3Qgb2YgdGhlIGNvbXBsZXhpdHkgc28gb25lIG9ubHkgaGFzIHRvIHR5cGUKJ21ha2UnIHRvIGJ1aWxkIHRoZSBtb2R1bGUuIEEgY29tcGxldGUgZXhhbXBsZSB3aWxsIGJlIHByZXNlbnQgaW4KY2hhcHRlciCkLiBDcmVhdGluZyBhIGtidWlsZCBmaWxlIGZvciBhbiBleHRlcm5hbCBtb2R1bGUiLgoKCj09PSAyLiBIb3cgdG8gYnVpbGQgZXh0ZXJuYWwgbW9kdWxlcwoKa2J1aWxkIG9mZmVycyBmdW5jdGlvbmFsaXR5IHRvIGJ1aWxkIGV4dGVybmFsIG1vZHVsZXMsIHdpdGggdGhlCnByZXJlcXVpc2l0ZSB0aGF0IHRoZXJlIGlzIGEgcHJlLWJ1aWx0IGtlcm5lbCBhdmFpbGFibGUgd2l0aCBmdWxsIHNvdXJjZS4KQSBzdWJzZXQgb2YgdGhlIHRhcmdldHMgYXZhaWxhYmxlIHdoZW4gYnVpbGRpbmcgdGhlIGtlcm5lbCBpcyBhdmFpbGFibGUKd2hlbiBidWlsZGluZyBhbiBleHRlcm5hbCBtb2R1bGUuCgotLS0gMi4xIEJ1aWxkaW5nIGV4dGVybmFsIG1vZHVsZXMKCglVc2UgdGhlIGZvbGxvd2luZyBjb21tYW5kIHRvIGJ1aWxkIGFuIGV4dGVybmFsIG1vZHVsZToKCgkJbWFrZSAtQyA8cGF0aC10by1rZXJuZWw+IE09YHB3ZGAKCglGb3IgdGhlIHJ1bm5pbmcga2VybmVsIHVzZToKCQltYWtlIC1DIC9saWIvbW9kdWxlcy9gdW5hbWUgLXJgL2J1aWxkIE09YHB3ZGAKCglGb3IgdGhlIGFib3ZlIGNvbW1hbmQgdG8gc3VjY2VlZCB0aGUga2VybmVsIG11c3QgaGF2ZSBiZWVuIGJ1aWx0IHdpdGgKCW1vZHVsZXMgZW5hYmxlZC4KCglUbyBpbnN0YWxsIHRoZSBtb2R1bGVzIHRoYXQgd2VyZSBqdXN0IGJ1aWx0OgoKCQltYWtlIC1DIDxwYXRoLXRvLWtlcm5lbD4gTT1gcHdkYCBtb2R1bGVzX2luc3RhbGwKCglNb3JlIGNvbXBsZXggZXhhbXBsZXMgbGF0ZXIsIHRoZSBhYm92ZSBzaG91bGQgZ2V0IHlvdSBnb2luZy4KCi0tLSAyLjIgQXZhaWxhYmxlIHRhcmdldHMKCgkkS0RJUiByZWZlcnMgdG8gdGhlIHBhdGggdG8gdGhlIGtlcm5lbCBzb3VyY2UgdG9wLWxldmVsIGRpcmVjdG9yeQoKCW1ha2UgLUMgJEtESVIgTT1gcHdkYAoJCVdpbGwgYnVpbGQgdGhlIG1vZHVsZShzKSBsb2NhdGVkIGluIGN1cnJlbnQgZGlyZWN0b3J5LgoJCUFsbCBvdXRwdXQgZmlsZXMgd2lsbCBiZSBsb2NhdGVkIGluIHRoZSBzYW1lIGRpcmVjdG9yeQoJCWFzIHRoZSBtb2R1bGUgc291cmNlLgoJCU5vIGF0dGVtcHRzIGFyZSBtYWRlIHRvIHVwZGF0ZSB0aGUga2VybmVsIHNvdXJjZSwgYW5kIGl0IGlzCgkJYSBwcmVjb25kaXRpb24gdGhhdCBhIHN1Y2Nlc3NmdWwgbWFrZSBoYXMgYmVlbiBleGVjdXRlZAoJCWZvciB0aGUga2VybmVsLgoKCW1ha2UgLUMgJEtESVIgTT1gcHdkYCBtb2R1bGVzCgkJVGhlIG1vZHVsZXMgdGFyZ2V0IGlzIGltcGxpZWQgd2hlbiBubyB0YXJnZXQgaXMgZ2l2ZW4uCgkJU2FtZSBmdW5jdGlvbmFsaXR5IGFzIGlmIG5vIHRhcmdldCB3YXMgc3BlY2lmaWVkLgoJCVNlZSBkZXNjcmlwdGlvbiBhYm92ZS4KCgltYWtlIC1DICRLRElSIE09JFBXRCBtb2R1bGVzX2luc3RhbGwKCQlJbnN0YWxsIHRoZSBleHRlcm5hbCBtb2R1bGUocykuCgkJSW5zdGFsbGF0aW9uIGRlZmF1bHQgaXMgaW4gL2xpYi9tb2R1bGVzLzxrZXJuZWwtdmVyc2lvbj4vZXh0cmEsCgkJYnV0IG1heSBiZSBwcmVmaXhlZCB3aXRoIElOU1RBTExfTU9EX1BBVEggLSBzZWUgc2VwYXJhdGUgY2hhcHRlci4KCgltYWtlIC1DICRLRElSIE09JFBXRCBjbGVhbgoJCVJlbW92ZSBhbGwgZ2VuZXJhdGVkIGZpbGVzIGZvciB0aGUgbW9kdWxlIC0gdGhlIGtlcm5lbAoJCXNvdXJjZSBkaXJlY3RvcnkgaXMgbm90IG1vZGlmaWVkLgoKCW1ha2UgLUMgJEtESVIgTT1gcHdkYCBoZWxwCgkJaGVscCB3aWxsIGxpc3QgdGhlIGF2YWlsYWJsZSB0YXJnZXQgd2hlbiBidWlsZGluZyBleHRlcm5hbAoJCW1vZHVsZXMuCgotLS0gMi4zIEF2YWlsYWJsZSBvcHRpb25zOgoKCSRLRElSIHJlZmVycyB0byB0aGUgcGF0aCB0byB0aGUga2VybmVsIHNvdXJjZSB0b3AtbGV2ZWwgZGlyZWN0b3J5CgoJbWFrZSAtQyAkS0RJUgoJCVVzZWQgdG8gc3BlY2lmeSB3aGVyZSB0byBmaW5kIHRoZSBrZXJuZWwgc291cmNlLgoJCSckS0RJUicgcmVwcmVzZW50IHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIGtlcm5lbCBzb3VyY2UgaXMuCgkJTWFrZSB3aWxsIGFjdHVhbGx5IGNoYW5nZSBkaXJlY3RvcnkgdG8gdGhlIHNwZWNpZmllZCBkaXJlY3RvcnkKCQl3aGVuIGV4ZWN1dGVkIGJ1dCBjaGFuZ2UgYmFjayB3aGVuIGZpbmlzaGVkLgoKCW1ha2UgLUMgJEtESVIgTT1gcHdkYAoJCU09IGlzIHVzZWQgdG8gdGVsbCBrYnVpbGQgdGhhdCBhbiBleHRlcm5hbCBtb2R1bGUgaXMKCQliZWluZyBidWlsdC4KCQlUaGUgb3B0aW9uIGdpdmVuIHRvIE09IGlzIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIGV4dGVybmFsCgkJbW9kdWxlIChrYnVpbGQgZmlsZSkgaXMgbG9jYXRlZC4KCQlXaGVuIGFuIGV4dGVybmFsIG1vZHVsZSBpcyBiZWluZyBidWlsdCBvbmx5IGEgc3Vic2V0IG9mIHRoZQoJCXVzdWFsIHRhcmdldHMgYXJlIGF2YWlsYWJsZS4KCgltYWtlIC1DICRLRElSIFNVQkRJUlM9YHB3ZGAKCQlTYW1lIGFzIE09LiBUaGUgU1VCRElSUz0gc3ludGF4IGlzIGtlcHQgZm9yIGJhY2t3YXJkcwoJCWNvbXBhdGliaWxpdHkuCgotLS0gMi40IFByZXBhcmluZyB0aGUga2VybmVsIHRyZWUgZm9yIG1vZHVsZSBidWlsZAoKCVRvIG1ha2Ugc3VyZSB0aGUga2VybmVsIGNvbnRhaW5zIHRoZSBpbmZvcm1hdGlvbiByZXF1aXJlZCB0bwoJYnVpbGQgZXh0ZXJuYWwgbW9kdWxlcyB0aGUgdGFyZ2V0ICdtb2R1bGVzX3ByZXBhcmUnIG11c3QgYmUgdXNlZC4KCSdtb2R1bGVfcHJlcGFyZScgc29sZWx5IGV4aXN0cyBhcyBhIHNpbXBsZSB3YXkgdG8gcHJlcGFyZQoJYSBrZXJuZWwgZm9yIGJ1aWxkaW5nIGV4dGVybmFsIG1vZHVsZXMuCglOb3RlOiBtb2R1bGVzX3ByZXBhcmUgd2lsbCBub3QgYnVpbGQgTW9kdWxlLnN5bXZlcnMgZXZlbiBpZgoJICAgICAgQ09ORklHX01PRFVMRVZFUlNJT05JTkcgaXMgc2V0LgoJICAgICAgVGhlcmVmb3JlIGEgZnVsbCBrZXJuZWwgYnVpbGQgbmVlZHMgdG8gYmUgZXhlY3V0ZWQgdG8gbWFrZQoJICAgICAgbW9kdWxlIHZlcnNpb25pbmcgd29yay4KCi0tLSAyLjUgQnVpbGRpbmcgc2VwYXJhdGUgZmlsZXMgZm9yIGEgbW9kdWxlCglJdCBpcyBwb3NzaWJsZSB0byBidWlsZCBzaW5nbGUgZmlsZXMgd2hpY2ggaXMgcGFydCBvZiBhIG1vZHVsZS4KCVRoaXMgd29ya3MgZXF1YWwgZm9yIHRoZSBrZXJuZWwsIGEgbW9kdWxlIGFuZCBldmVuIGZvciBleHRlcm5hbAoJbW9kdWxlcy4KCUV4YW1wbGVzIChtb2R1bGUgZm9vLmtvLCBjb25zaXN0IG9mIGJhci5vLCBiYXoubyk6CgkJbWFrZSAtQyAkS0RJUiBNPWBwd2RgIGJhci5sc3QKCQltYWtlIC1DICRLRElSIE09YHB3ZGAgYmFyLm8KCQltYWtlIC1DICRLRElSIE09YHB3ZGAgZm9vLmtvCgkJbWFrZSAtQyAkS0RJUiBNPWBwd2RgIC8KCQoKPT09IDMuIEV4YW1wbGUgY29tbWFuZHMKClRoaXMgZXhhbXBsZSBzaG93cyB0aGUgYWN0dWFsIGNvbW1hbmRzIHRvIGJlIGV4ZWN1dGVkIHdoZW4gYnVpbGRpbmcKYW4gZXh0ZXJuYWwgbW9kdWxlIGZvciB0aGUgY3VycmVudGx5IHJ1bm5pbmcga2VybmVsLgpJbiB0aGUgZXhhbXBsZSBiZWxvdyB0aGUgZGlzdHJpYnV0aW9uIGlzIHN1cHBvc2VkIHRvIHVzZSB0aGUKZmFjaWxpdHkgdG8gbG9jYXRlIG91dHB1dCBmaWxlcyBmb3IgYSBrZXJuZWwgY29tcGlsZSBpbiBhIGRpZmZlcmVudApkaXJlY3RvcnkgdGhhbiB0aGUga2VybmVsIHNvdXJjZSAtIGJ1dCB0aGUgZXhhbXBsZXMgd2lsbCBhbHNvIHdvcmsKd2hlbiB0aGUgc291cmNlIGFuZCB0aGUgb3V0cHV0IGZpbGVzIGFyZSBtaXhlZCBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuCgojIEtlcm5lbCBzb3VyY2UKL2xpYi9tb2R1bGVzLzxrZXJuZWwtdmVyc2lvbj4vc291cmNlIC0+IC91c3Ivc3JjL2xpbnV4LTx2ZXJzaW9uPgoKIyBPdXRwdXQgZnJvbSBrZXJuZWwgY29tcGlsZQovbGliL21vZHVsZXMvPGtlcm5lbC12ZXJzaW9uPi9idWlsZCAtPiAvdXNyL3NyYy9saW51eC08dmVyc2lvbj4tdXAKCkNoYW5nZSB0byB0aGUgZGlyZWN0b3J5IHdoZXJlIHRoZSBrYnVpbGQgZmlsZSBpcyBsb2NhdGVkIGFuZCBleGVjdXRlCnRoZSBmb2xsb3dpbmcgY29tbWFuZHMgdG8gYnVpbGQgdGhlIG1vZHVsZToKCgljZCAvaG9tZS91c2VyL3NyYy9tb2R1bGUKCW1ha2UgLUMgL3Vzci9zcmMvYHVuYW1lIC1yYC9zb3VyY2UgICAgICAgICAgICBcCgkgICAgICAgIE89L2xpYi9tb2R1bGVzL2B1bmFtZS1yYC9idWlsZCAgICAgICAgXAoJICAgICAgICBNPWBwd2RgCgpUaGVuIHRvIGluc3RhbGwgdGhlIG1vZHVsZSB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kOgoKCW1ha2UgLUMgL3Vzci9zcmMvYHVuYW1lIC1yYC9zb3VyY2UgICAgICAgICAgICBcCgkgICAgICAgIE89L2xpYi9tb2R1bGVzL2B1bmFtZS1yYC9idWlsZCAgICAgICAgXAoJICAgICAgICBNPWBwd2RgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKCQltb2R1bGVzX2luc3RhbGwKCklmIG9uZSBsb29rcyBjbG9zZWx5IHlvdSB3aWxsIHNlZSB0aGF0IHRoaXMgaXMgdGhlIHNhbWUgY29tbWFuZHMgYXMKbGlzdGVkIGJlZm9yZSAtIHdpdGggdGhlIGRpcmVjdG9yaWVzIHNwZWxsZWQgb3V0LgoKVGhlIGFib3ZlIGFyZSByYXRoZXIgbG9uZyBjb21tYW5kcywgYW5kIHRoZSBmb2xsb3dpbmcgY2hhcHRlcgpsaXN0cyBhIGZldyB0cmlja3MgdG8gbWFrZSBpdCBhbGwgZWFzaWVyLgoKCj09PSA0LiBDcmVhdGluZyBhIGtidWlsZCBmaWxlIGZvciBhbiBleHRlcm5hbCBtb2R1bGUKCmtidWlsZCBpcyB0aGUgYnVpbGQgc3lzdGVtIGZvciB0aGUga2VybmVsLCBhbmQgZXh0ZXJuYWwgbW9kdWxlcwptdXN0IHVzZSBrYnVpbGQgdG8gc3RheSBjb21wYXRpYmxlIHdpdGggY2hhbmdlcyBpbiB0aGUgYnVpbGQgc3lzdGVtCmFuZCB0byBwaWNrIHVwIHRoZSByaWdodCBmbGFncyB0byBnY2MgZXRjLgoKVGhlIGtidWlsZCBmaWxlIHVzZWQgYXMgaW5wdXQgc2hhbGwgZm9sbG93IHRoZSBzeW50YXggZGVzY3JpYmVkCmluIERvY3VtZW50YXRpb24va2J1aWxkL21ha2VmaWxlcy50eHQuIFRoaXMgY2hhcHRlciB3aWxsIGludHJvZHVjZSBhIGZldwptb3JlIHRyaWNrcyB0byBiZSB1c2VkIHdoZW4gZGVhbGluZyB3aXRoIGV4dGVybmFsIG1vZHVsZXMuCgpJbiB0aGUgZm9sbG93aW5nIGEgTWFrZWZpbGUgd2lsbCBiZSBjcmVhdGVkIGZvciBhIG1vZHVsZSB3aXRoIHRoZQpmb2xsb3dpbmcgZmlsZXM6Cgk4MTIzX2lmLmMKCTgxMjNfaWYuaAoJODEyM19wY2kuYwoJODEyM19iaW4ub19zaGlwcGVkCTw9IEJpbmFyeSBibG9iCgotLS0gNC4xIFNoYXJlZCBNYWtlZmlsZSBmb3IgbW9kdWxlIGFuZCBrZXJuZWwKCglBbiBleHRlcm5hbCBtb2R1bGUgYWx3YXlzIGluY2x1ZGVzIGEgd3JhcHBlciBNYWtlZmlsZSBzdXBwb3J0aW5nCglidWlsZGluZyB0aGUgbW9kdWxlIHVzaW5nICdtYWtlJyB3aXRoIG5vIGFyZ3VtZW50cy4KCVRoZSBNYWtlZmlsZSBwcm92aWRlZCB3aWxsIG1vc3QgbGlrZWx5IGluY2x1ZGUgYWRkaXRpb25hbAoJZnVuY3Rpb25hbGl0eSBzdWNoIGFzIHRlc3QgdGFyZ2V0cyBldGMuIGFuZCB0aGlzIHBhcnQgc2hhbGwKCWJlIGZpbHRlcmVkIGF3YXkgZnJvbSBrYnVpbGQgc2luY2UgaXQgbWF5IGltcGFjdCBrYnVpbGQgaWYKCW5hbWUgY2xhc2hlcyBvY2N1cnMuCgoJRXhhbXBsZSAxOgoJCS0tPiBmaWxlbmFtZTogTWFrZWZpbGUKCQlpZm5lcSAoJChLRVJORUxSRUxFQVNFKSwpCgkJIyBrYnVpbGQgcGFydCBvZiBtYWtlZmlsZQoJCW9iai1tICA6PSA4MTIzLm8KCQk4MTIzLXkgOj0gODEyM19pZi5vIDgxMjNfcGNpLm8gODEyM19iaW4ubwoKCQllbHNlCgkJIyBOb3JtYWwgTWFrZWZpbGUKCgkJS0VSTkVMRElSIDo9IC9saWIvbW9kdWxlcy9gdW5hbWUgLXJgL2J1aWxkCgkJYWxsOjoKCQkJJChNQUtFKSAtQyAkKEtFUk5FTERJUikgTT1gcHdkYCAkQAoKCQkjIE1vZHVsZSBzcGVjaWZpYyB0YXJnZXRzCgkJZ2VuYmluOgoJCQllY2hvICJYIiA+IDgxMjNfYmluLm9fc2hpcHBlZAoKCQllbmRpZgoKCUluIGV4YW1wbGUgMSB0aGUgY2hlY2sgZm9yIEtFUk5FTFJFTEVBU0UgaXMgdXNlZCB0byBzZXBhcmF0ZQoJdGhlIHR3byBwYXJ0cyBvZiB0aGUgTWFrZWZpbGUuIGtidWlsZCB3aWxsIG9ubHkgc2VlIHRoZSB0d28KCWFzc2lnbm1lbnRzIHdoZXJlYXMgbWFrZSB3aWxsIHNlZSBldmVyeXRoaW5nIGV4Y2VwdCB0aGUgdHdvCglrYnVpbGQgYXNzaWdubWVudHMuCgoJSW4gcmVjZW50IHZlcnNpb25zIG9mIHRoZSBrZXJuZWwsIGtidWlsZCB3aWxsIGxvb2sgZm9yIGEgZmlsZSBuYW1lZAoJS2J1aWxkIGFuZCBhcyBzZWNvbmQgb3B0aW9uIGxvb2sgZm9yIGEgZmlsZSBuYW1lZCBNYWtlZmlsZS4KCVV0aWxpc2luZyB0aGUgS2J1aWxkIGZpbGUgbWFrZXMgdXMgc3BsaXQgdXAgdGhlIE1ha2VmaWxlIGluIGV4YW1wbGUgMQoJaW50byB0d28gZmlsZXMgYXMgc2hvd24gaW4gZXhhbXBsZSAyOgoKCUV4YW1wbGUgMjoKCQktLT4gZmlsZW5hbWU6IEtidWlsZAoJCW9iai1tICA6PSA4MTIzLm8KCQk4MTIzLXkgOj0gODEyM19pZi5vIDgxMjNfcGNpLm8gODEyM19iaW4ubwoKCQktLT4gZmlsZW5hbWU6IE1ha2VmaWxlCgkJS0VSTkVMRElSIDo9IC9saWIvbW9kdWxlcy9gdW5hbWUgLXJgL2J1aWxkCgkJYWxsOjoKCQkJJChNQUtFKSAtQyAkS0VSTkVMRElSIE09YHB3ZGAgJEAKCgkJIyBNb2R1bGUgc3BlY2lmaWMgdGFyZ2V0cwoJCWdlbmJpbjoKCQkJZWNobyAiWCIgPiA4MTIzX2Jpbl9zaGlwcGVkCgoKCUluIGV4YW1wbGUgMiB3ZSBhcmUgZG93biB0byB0d28gZmFpcmx5IHNpbXBsZSBmaWxlcyBhbmQgZm9yIHNpbXBsZQoJZmlsZXMgYXMgdXNlZCBpbiB0aGlzIGV4YW1wbGUgdGhlIHNwbGl0IGlzIHF1ZXN0aW9uYWJsZS4gQnV0IHNvbWUKCWV4dGVybmFsIG1vZHVsZXMgdXNlIE1ha2VmaWxlcyBvZiBzZXZlcmFsIGh1bmRyZWQgbGluZXMgYW5kIGhlcmUgaXQKCXJlYWxseSBwYXlzIG9mZiB0byBzZXBhcmF0ZSB0aGUga2J1aWxkIHBhcnQgZnJvbSB0aGUgcmVzdC4KCUV4YW1wbGUgMyBzaG93cyBhIGJhY2t3YXJkIGNvbXBhdGlibGUgdmVyc2lvbi4KCglFeGFtcGxlIDM6CgkJLS0+IGZpbGVuYW1lOiBLYnVpbGQKCQlvYmotbSAgOj0gODEyMy5vCgkJODEyMy15IDo9IDgxMjNfaWYubyA4MTIzX3BjaS5vIDgxMjNfYmluLm8KCgkJLS0+IGZpbGVuYW1lOiBNYWtlZmlsZQoJCWlmbmVxICgkKEtFUk5FTFJFTEVBU0UpLCkKCQlpbmNsdWRlIEtidWlsZAoJCWVsc2UKCQkjIE5vcm1hbCBNYWtlZmlsZQoKCQlLRVJORUxESVIgOj0gL2xpYi9tb2R1bGVzL2B1bmFtZSAtcmAvYnVpbGQKCQlhbGw6OgoJCQkkKE1BS0UpIC1DICRLRVJORUxESVIgTT1gcHdkYCAkQAoKCQkjIE1vZHVsZSBzcGVjaWZpYyB0YXJnZXRzCgkJZ2VuYmluOgoJCQllY2hvICJYIiA+IDgxMjNfYmluX3NoaXBwZWQKCgkJZW5kaWYKCgkJVGhlIHRyaWNrIGhlcmUgaXMgdG8gaW5jbHVkZSB0aGUgS2J1aWxkIGZpbGUgZnJvbSBNYWtlZmlsZSBzbwoJCWlmIGFuIG9sZGVyIHZlcnNpb24gb2Yga2J1aWxkIHBpY2tzIHVwIHRoZSBNYWtlZmlsZSB0aGUgS2J1aWxkCgkJZmlsZSB3aWxsIGJlIGluY2x1ZGVkLgoKLS0tIDQuMiBCaW5hcnkgYmxvYnMgaW5jbHVkZWQgaW4gYSBtb2R1bGUKCglTb21lIGV4dGVybmFsIG1vZHVsZXMgbmVlZHMgdG8gaW5jbHVkZSBhIC5vIGFzIGEgYmxvYi4ga2J1aWxkCgloYXMgc3VwcG9ydCBmb3IgdGhpcywgYnV0IHJlcXVpcmVzIHRoZSBibG9iIGZpbGUgdG8gYmUgbmFtZWQKCTxmaWxlbmFtZT5fc2hpcHBlZC4gSW4gb3VyIGV4YW1wbGUgdGhlIGJsb2IgaXMgbmFtZWQKCTgxMjNfYmluLm9fc2hpcHBlZCBhbmQgd2hlbiB0aGUga2J1aWxkIHJ1bGVzIGtpY2sgaW4gdGhlIGZpbGUKCTgxMjNfYmluLm8gaXMgY3JlYXRlZCBhcyBhIHNpbXBsZSBjb3B5IG9mZiB0aGUgODIxM19iaW4ub19zaGlwcGVkIGZpbGUKCXdpdGggdGhlIF9zaGlwcGVkIHBhcnQgc3RyaXBwZWQgb2YgdGhlIGZpbGVuYW1lLgoJVGhpcyBhbGxvd3MgdGhlIDgxMjNfYmluLm8gZmlsZW5hbWUgdG8gYmUgdXNlZCBpbiB0aGUgYXNzaWdubWVudCB0bwoJdGhlIG1vZHVsZS4KCglFeGFtcGxlIDQ6CgkJb2JqLW0gIDo9IDgxMjMubwoJCTgxMjMteSA6PSA4MTIzX2lmLm8gODEyM19wY2kubyA4MTIzX2Jpbi5vCgoJSW4gZXhhbXBsZSA0IHRoZXJlIGlzIG5vIGRpc3RpbmN0aW9uIGJldHdlZW4gdGhlIG9yZGluYXJ5IC5jLy5oIGZpbGVzCglhbmQgdGhlIGJpbmFyeSBmaWxlLiBCdXQga2J1aWxkIHdpbGwgcGljayB1cCBkaWZmZXJlbnQgcnVsZXMgdG8gY3JlYXRlCgl0aGUgLm8gZmlsZS4KCgo9PT0gNS4gSW5jbHVkZSBmaWxlcwoKSW5jbHVkZSBmaWxlcyBhcmUgYSBuZWNlc3NpdHkgd2hlbiBhIC5jIGZpbGUgdXNlcyBzb21ldGhpbmcgZnJvbSBhbm90aGVyIC5jCmZpbGVzIChub3Qgc3RyaWN0bHkgaW4gdGhlIHNlbnNlIG9mIC5jIGJ1dCBpZiBnb29kIHByb2dyYW1taW5nIHByYWN0aWNlIGlzCnVzZWQpLiBBbnkgbW9kdWxlIHRoYXQgY29uc2lzdCBvZiBtb3JlIHRoYW4gb25lIC5jIGZpbGUgd2lsbCBoYXZlIGEgLmggZmlsZQpmb3Igb25lIG9mIHRoZSAuYyBmaWxlcy4gCi0gSWYgdGhlIC5oIGZpbGUgb25seSBkZXNjcmliZXMgYSBtb2R1bGUgaW50ZXJuYWwgaW50ZXJmYWNlIHRoZW4gdGhlIC5oIGZpbGUKICBzaGFsbCBiZSBwbGFjZWQgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSAuYyBmaWxlcy4KLSBJZiB0aGUgLmggZmlsZXMgZGVzY3JpYmUgYW4gaW50ZXJmYWNlIHVzZWQgYnkgb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbAogIGxvY2F0ZWQgaW4gZGlmZmVyZW50IGRpcmVjdG9yaWVzLCB0aGUgLmggZmlsZXMgc2hhbGwgYmUgbG9jYXRlZCBpbgogIGluY2x1ZGUvbGludXgvIG9yIG90aGVyIGluY2x1ZGUvIGRpcmVjdG9yaWVzIGFzIGFwcHJvcHJpYXRlLgoKT25lIGV4Y2VwdGlvbiBmb3IgdGhpcyBydWxlIGlzIGxhcmdlciBzdWJzeXN0ZW1zIHRoYXQgaGF2ZSB0aGVpciBvd24gZGlyZWN0b3J5CnVuZGVyIGluY2x1ZGUvIHN1Y2ggYXMgaW5jbHVkZS9zY3NpLiBBbm90aGVyIGV4Y2VwdGlvbiBpcyBhcmNoLXNwZWNpZmljCi5oIGZpbGVzIHdoaWNoIGFyZSBsb2NhdGVkIHVuZGVyIGluY2x1ZGUvYXNtLSQoQVJDSCkvKi4KCkV4dGVybmFsIG1vZHVsZXMgaGF2ZSBhIHRlbmRlbmN5IHRvIGxvY2F0ZSBpbmNsdWRlIGZpbGVzIGluIGEgc2VwYXJhdGUgaW5jbHVkZS8KZGlyZWN0b3J5IGFuZCB0aGVyZWZvcmUgbmVlZHMgdG8gZGVhbCB3aXRoIHRoaXMgaW4gdGhlaXIga2J1aWxkIGZpbGUuCgotLS0gNS4xIEhvdyB0byBpbmNsdWRlIGZpbGVzIGZyb20gdGhlIGtlcm5lbCBpbmNsdWRlIGRpcgoKCVdoZW4gYSBtb2R1bGUgbmVlZHMgdG8gaW5jbHVkZSBhIGZpbGUgZnJvbSBpbmNsdWRlL2xpbnV4LyB0aGVuIG9uZQoJanVzdCB1c2VzOgoKCQkjaW5jbHVkZSA8bGludXgvbW9kdWxlcy5oPgoKCWtidWlsZCB3aWxsIG1ha2Ugc3VyZSB0byBhZGQgb3B0aW9ucyB0byBnY2Mgc28gdGhlIHJlbGV2YW50CglkaXJlY3RvcmllcyBhcmUgc2VhcmNoZWQuCglMaWtld2lzZSBmb3IgLmggZmlsZXMgcGxhY2VkIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUgLmMgZmlsZS4KCgkJI2luY2x1ZGUgIjgxMjNfaWYuaCIKCgl3aWxsIGRvIHRoZSBqb2IuCgotLS0gNS4yIEV4dGVybmFsIG1vZHVsZXMgdXNpbmcgYW4gaW5jbHVkZS8gZGlyCgoJRXh0ZXJuYWwgbW9kdWxlcyBvZnRlbiBsb2NhdGUgdGhlaXIgLmggZmlsZXMgaW4gYSBzZXBhcmF0ZSBpbmNsdWRlLwoJZGlyZWN0b3J5IGFsdGhvdWdoIHRoaXMgaXMgbm90IHVzdWFsIGtlcm5lbCBzdHlsZS4gV2hlbiBhbiBleHRlcm5hbAoJbW9kdWxlIHVzZXMgYW4gaW5jbHVkZS8gZGlyIHRoZW4ga2J1aWxkIG5lZWRzIHRvIGJlIHRvbGQgc28uCglUaGUgdHJpY2sgaGVyZSBpcyB0byB1c2UgZWl0aGVyIEVYVFJBX0NGTEFHUyAodGFrZSBlZmZlY3QgZm9yIGFsbCAuYwoJZmlsZXMpIG9yIENGTEFHU18kRi5vICh0YWtlIGVmZmVjdCBvbmx5IGZvciBhIHNpbmdsZSBmaWxlKS4KCglJbiBvdXIgZXhhbXBsZSBpZiB3ZSBtb3ZlIDgxMjNfaWYuaCB0byBhIHN1YmRpcmVjdG9yeSBuYW1lZCBpbmNsdWRlLwoJdGhlIHJlc3VsdGluZyBLYnVpbGQgZmlsZSB3b3VsZCBsb29rIGxpa2U6CgoJCS0tPiBmaWxlbmFtZTogS2J1aWxkCgkJb2JqLW0gIDo9IDgxMjMubwoKCQlFWFRSQV9DRkxBR1MgOj0gLUlpbmNsdWRlCgkJODEyMy15IDo9IDgxMjNfaWYubyA4MTIzX3BjaS5vIDgxMjNfYmluLm8KCglOb3RlIHRoYXQgaW4gdGhlIGFzc2lnbm1lbnQgdGhlcmUgaXMgbm8gc3BhY2UgYmV0d2VlbiAtSSBhbmQgdGhlIHBhdGguCglUaGlzIGlzIGEga2J1aWxkIGxpbWl0YXRpb246ICB0aGVyZSBtdXN0IGJlIG5vIHNwYWNlIHByZXNlbnQuCgotLS0gNS4zIEV4dGVybmFsIG1vZHVsZXMgdXNpbmcgc2V2ZXJhbCBkaXJlY3RvcmllcwoKCUlmIGFuIGV4dGVybmFsIG1vZHVsZSBkb2VzIG5vdCBmb2xsb3cgdGhlIHVzdWFsIGtlcm5lbCBzdHlsZSBidXQKCWRlY2lkZSB0byBzcHJlYWQgZmlsZXMgb3ZlciBzZXZlcmFsIGRpcmVjdG9yaWVzIHRoZW4ga2J1aWxkIGNhbgoJc3VwcG9ydCB0aGlzIHRvby4KCglDb25zaWRlciB0aGUgZm9sbG93aW5nIGV4YW1wbGU6CgkKCXwKCSstIHNyYy9jb21wbGV4X21haW4uYwoJfCAgICstIGhhbC9oYXJkd2FyZWlmLmMKCXwgICArLSBoYWwvaW5jbHVkZS9oYXJkd2FyZWlmLmgKCSstIGluY2x1ZGUvY29tcGxleC5oCgkKCVRvIGJ1aWxkIGEgc2luZ2xlIG1vZHVsZSBuYW1lZCBjb21wbGV4LmtvIHdlIHRoZW4gbmVlZCB0aGUgZm9sbG93aW5nCglrYnVpbGQgZmlsZToKCglLYnVpbGQ6CgkJb2JqLW0gOj0gY29tcGxleC5vCgkJY29tcGxleC15IDo9IHNyYy9jb21wbGV4X21haW4ubwoJCWNvbXBsZXgteSArPSBzcmMvaGFsL2hhcmR3YXJlaWYubwoKCQlFWFRSQV9DRkxBR1MgOj0gLUkkKHNyYykvaW5jbHVkZQoJCUVYVFJBX0NGTEFHUyArPSAtSSQoc3JjKXNyYy9oYWwvaW5jbHVkZQoKCglrYnVpbGQga25vd3MgaG93IHRvIGhhbmRsZSAubyBmaWxlcyBsb2NhdGVkIGluIGFub3RoZXIgZGlyZWN0b3J5IC0KCWFsdGhvdWdoIHRoaXMgaXMgTk9UIHJlY2NvbW1lbmRlZCBwcmFjdGljZS4gVGhlIHN5bnRheCBpcyB0byBzcGVjaWZ5Cgl0aGUgZGlyZWN0b3J5IHJlbGF0aXZlIHRvIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIEtidWlsZCBmaWxlIGlzCglsb2NhdGVkLgoKCVRvIGZpbmQgdGhlIC5oIGZpbGVzIHdlIGhhdmUgdG8gZXhwbGljaXRseSB0ZWxsIGtidWlsZCB3aGVyZSB0byBsb29rCglmb3IgdGhlIC5oIGZpbGVzLiBXaGVuIGtidWlsZCBleGVjdXRlcyBjdXJyZW50IGRpcmVjdG9yeSBpcyBhbHdheXMKCXRoZSByb290IG9mIHRoZSBrZXJuZWwgdHJlZSAoYXJndW1lbnQgdG8gLUMpIGFuZCB0aGVyZWZvcmUgd2UgaGF2ZSB0bwoJdGVsbCBrYnVpbGQgaG93IHRvIGZpbmQgdGhlIC5oIGZpbGVzIHVzaW5nIGFic29sdXRlIHBhdGhzLgoJJChzcmMpIHdpbGwgc3BlY2lmeSB0aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgZGlyZWN0b3J5IHdoZXJlIHRoZQoJS2J1aWxkIGZpbGUgYXJlIGxvY2F0ZWQgd2hlbiBiZWluZyBidWlsZCBhcyBhbiBleHRlcm5hbCBtb2R1bGUuCglUaGVyZWZvcmUgLUkkKHNyYykvIGlzIHVzZWQgdG8gcG9pbnQgb3V0IHRoZSBkaXJlY3Rvcnkgb2YgdGhlIEtidWlsZAoJZmlsZSBhbmQgYW55IGFkZGl0aW9uYWwgcGF0aCBhcmUganVzdCBhcHBlbmRlZC4KCj09PSA2LiBNb2R1bGUgaW5zdGFsbGF0aW9uCgpNb2R1bGVzIHdoaWNoIGFyZSBpbmNsdWRlZCBpbiB0aGUga2VybmVsIGFyZSBpbnN0YWxsZWQgaW4gdGhlIGRpcmVjdG9yeToKCgkvbGliL21vZHVsZXMvJChLRVJORUxSRUxFQVNFKS9rZXJuZWwKCkV4dGVybmFsIG1vZHVsZXMgYXJlIGluc3RhbGxlZCBpbiB0aGUgZGlyZWN0b3J5OgoKCS9saWIvbW9kdWxlcy8kKEtFUk5FTFJFTEVBU0UpL2V4dHJhCgotLS0gNi4xIElOU1RBTExfTU9EX1BBVEgKCglBYm92ZSBhcmUgdGhlIGRlZmF1bHQgZGlyZWN0b3JpZXMsIGJ1dCBhcyBhbHdheXMgc29tZSBsZXZlbCBvZgoJY3VzdG9taXphdGlvbiBpcyBwb3NzaWJsZS4gT25lIGNhbiBwcmVmaXggdGhlIHBhdGggdXNpbmcgdGhlIHZhcmlhYmxlCglJTlNUQUxMX01PRF9QQVRIOgoKCQkkIG1ha2UgSU5TVEFMTF9NT0RfUEFUSD0vZnJvZG8gbW9kdWxlc19pbnN0YWxsCgkJPT4gSW5zdGFsbCBkaXI6IC9mcm9kby9saWIvbW9kdWxlcy8kKEtFUk5FTFJFTEVBU0UpL2tlcm5lbAoKCUlOU1RBTExfTU9EX1BBVEggbWF5IGJlIHNldCBhcyBhbiBvcmRpbmFyeSBzaGVsbCB2YXJpYWJsZSBvciBhcyBpbiB0aGUKCWV4YW1wbGUgYWJvdmUgYmUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUgd2hlbiBjYWxsaW5nIG1ha2UuCglJTlNUQUxMX01PRF9QQVRIIGhhcyBlZmZlY3QgYm90aCB3aGVuIGluc3RhbGxpbmcgbW9kdWxlcyBpbmNsdWRlZCBpbgoJdGhlIGtlcm5lbCBhcyB3ZWxsIGFzIHdoZW4gaW5zdGFsbGluZyBleHRlcm5hbCBtb2R1bGVzLgoKLS0tIDYuMiBJTlNUQUxMX01PRF9ESVIKCglXaGVuIGluc3RhbGxpbmcgZXh0ZXJuYWwgbW9kdWxlcyB0aGV5IGFyZSBkZWZhdWx0IGluc3RhbGxlZCBpbiBhCglkaXJlY3RvcnkgdW5kZXIgL2xpYi9tb2R1bGVzLyQoS0VSTkVMUkVMRUFTRSkvZXh0cmEsIGJ1dCBvbmUgbWF5IHdpc2gKCXRvIGxvY2F0ZSBtb2R1bGVzIGZvciBhIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHkgaW4gYSBzZXBhcmF0ZQoJZGlyZWN0b3J5LiBGb3IgdGhpcyBwdXJwb3NlIG9uZSBjYW4gdXNlIElOU1RBTExfTU9EX0RJUiB0byBzcGVjaWZ5IGFuCglhbHRlcm5hdGl2ZSBuYW1lIHRoYW4gJ2V4dHJhJy4KCgkJJCBtYWtlIElOU1RBTExfTU9EX0RJUj1nYW5kYWxmIC1DIEtFUk5FTERJUiBcCgkJCU09YHB3ZGAgbW9kdWxlc19pbnN0YWxsCgkJPT4gSW5zdGFsbCBkaXI6IC9saWIvbW9kdWxlcy8kKEtFUk5FTFJFTEVBU0UpL2dhbmRhbGYKCgo9PT0gNy4gTW9kdWxlIHZlcnNpb25pbmcKCk1vZHVsZSB2ZXJzaW9uaW5nIGlzIGVuYWJsZWQgYnkgdGhlIENPTkZJR19NT0RWRVJTSU9OUyB0YWcuCgpNb2R1bGUgdmVyc2lvbmluZyBpcyB1c2VkIGFzIGEgc2ltcGxlIEFCSSBjb25zaXN0ZW5jeSBjaGVjay4gVGhlIE1vZHVsZQp2ZXJzaW9uaW5nIGNyZWF0ZXMgYSBDUkMgdmFsdWUgb2YgdGhlIGZ1bGwgcHJvdG90eXBlIGZvciBhbiBleHBvcnRlZCBzeW1ib2wgYW5kCndoZW4gYSBtb2R1bGUgaXMgbG9hZGVkL3VzZWQgdGhlbiB0aGUgQ1JDIHZhbHVlcyBjb250YWluZWQgaW4gdGhlIGtlcm5lbCBhcmUKY29tcGFyZWQgd2l0aCBzaW1pbGFyIHZhbHVlcyBpbiB0aGUgbW9kdWxlLiBJZiB0aGV5IGFyZSBub3QgZXF1YWwgdGhlbiB0aGUKa2VybmVsIHJlZnVzZXMgdG8gbG9hZCB0aGUgbW9kdWxlLgoKRHVyaW5nIGEga2VybmVsIGJ1aWxkIGEgZmlsZSBuYW1lZCBNb2R1bGUuc3ltdmVycyB3aWxsIGJlIGdlbmVyYXRlZC4gVGhpcwpmaWxlIGluY2x1ZGVzIHRoZSBzeW1ib2wgdmVyc2lvbiBvZiBhbGwgc3ltYm9scyB3aXRoaW4gdGhlIGtlcm5lbC4gSWYgdGhlIApNb2R1bGUuc3ltdmVycyBmaWxlIGlzIHNhdmVkIGZyb20gdGhlIGxhc3QgZnVsbCBrZXJuZWwgY29tcGlsZSBvbmUgZG9lcyBub3QKaGF2ZSB0byBkbyBhIGZ1bGwga2VybmVsIGNvbXBpbGUgdG8gYnVpbGQgYSBtb2R1bGUgdmVyc2lvbidzIGNvbXBhdGlibGUgbW9kdWxlLgoKPT09IDguIFRpcHMgJiBUcmlja3MKCi0tLSA4LjEgVGVzdGluZyBmb3IgQ09ORklHX0ZPT19CQVIKCglNb2R1bGVzIG9mdGVuIG5lZWRzIHRvIGNoZWNrIGZvciBjZXJ0YWluIENPTkZJR18gb3B0aW9ucyB0byBkZWNpZGUgaWYKCWEgc3BlY2lmaWMgZmVhdHVyZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiB0aGUgbW9kdWxlLiBXaGVuIGtidWlsZCBpcyB1c2VkCgl0aGlzIGlzIGRvbmUgYnkgcmVmZXJlbmNpbmcgdGhlIENPTkZJR18gdmFyaWFibGUgZGlyZWN0bHkuCgoJCSNmcy9leHQyL01ha2VmaWxlCgkJb2JqLSQoQ09ORklHX0VYVDJfRlMpICs9IGV4dDIubwoKCQlleHQyLXkgOj0gYmFsbG9jLm8gYml0bWFwLm8gZGlyLm8KCQlleHQyLSQoQ09ORklHX0VYVDJfRlNfWEFUVFIpICs9IHhhdHRyLm8KCglFeHRlcm5hbCBtb2R1bGVzIGhhdmUgdHJhZGl0aW9uYWxseSB1c2VkIGdyZXAgdG8gY2hlY2sgZm9yIHNwZWNpZmljCglDT05GSUdfIHNldHRpbmdzIGRpcmVjdGx5IGluIC5jb25maWcuIFRoaXMgdXNhZ2UgaXMgYnJva2VuLgoJQXMgaW50cm9kdWNlZCBiZWZvcmUgZXh0ZXJuYWwgbW9kdWxlcyBzaGFsbCB1c2Uga2J1aWxkIHdoZW4gYnVpbGRpbmcKCWFuZCB0aGVyZWZvcmUgY2FuIHVzZSB0aGUgc2FtZSBtZXRob2RzIGFzIGluLWtlcm5lbCBtb2R1bGVzIHdoZW4gdGVzdGluZwoJZm9yIENPTkZJR18gZGVmaW5pdGlvbnMuCgo=