bw0NCgAAAACnNI1jw24AAOMAAAAAAAAAAAAAAAAAAAAAIQAAAEAAAABzwgUAAFUAZABkAWwAWgBkAGQBbAFaAWQAZAFsAloCZABkAWwDWgNkAGQBbARaBGQAZAFsBVoGZABkAmwHbQdaCAEAZANkBGwJbQpaCgEAZANkBWwJbQtaCwEAZANkBmwJbQxaDAEAZANkB2wNbQ5aDgEAZANkCGwNbQ9aDwEAZANkCWwQbRFaEQEAZANkCmwSbRNaEwEAZANkC2wSbRRaFAEAZANkDGwSbRVaFQEAZANkDWwWbRdaFwEAZANkDmwWbRhaGAEAZQZqGXJqZANkD2wabRtaGwEAZQagHGQQoQFaHWUeWh9lBmogZSFnAWUhZgIZAGUiZBE8AGkAZBJkE5MBZBRkFZMBZBZkF5MBZBhkGZMBZBpkG5MBZBxkHZMBZB5kH5MBZCBkIZMBZCJkI5MBZCRkJZMBZCZkJ5MBZChkKZMBZCpkK5MBZCxkLZMBZC5kL5MBZDBkMZMBZDJkM5MBWiNkNFokZDVlIWQ2ZSFmBGQ3ZDiEBFolCTkJAQk6CQFklmQ7ZSFkPGUhZD1lJmQ+ZQZqJ2UGaigZAGQ/ZSZkQGUGaidlFRkAZDZlIWYOZEFkQoQFWilkPmUGaihkNmUGaihmBGRDZESEBFoqCQEJOQk5CQEJAQlFCToJOQk6ZJdkO2UhZD5lBmonZQZqKBkAZEZlJmRHZQZqK2UmZSFmAhkAZEBlBmonZQZqK2UVZQZqKGYCGQAZAGRIZQZqJ2UGaiBlIWcBZQZqKGYCGQAZAGRJZSFkPWUmZEplJmQ/ZSZkNmUGaihmFmRLZDWEBVosCTkJOQlFCToJOWSYZDtlIWQ+ZQZqJ2UmGQBkTGUmZEllIWQ9ZSZkSmUmZDZlJmYOZE1kToQFWi0JAWSZZE9lBmorZQZqLmUhGQBlBmogZwBlBmouZSEZAGYCGQBlIWYDGQBkUGUGaidlJhkAZDZkAWYGZFFkUoQFWi8JAQkBCQEJOgkBCTkJAQlTCVQJVQlWCR8JAQkBCQNkmmRXZQZqJ2UGai5lHRkAGQBkWGUGaidlMBkAZFllBmonZSEZAGRaZSZkW2UGaidlJhkAZFxlJmRdZQZqJ2UGaiBlBmonZR0ZAGcBZQZqJ2UhGQBmAhkAGQBkXmUhZF9lIWRgZSFkYWUhZGJlMGRj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aWYgdGhpcyBpcyBzZXQgdG8gdHJ1ZSB0aGVuIHRoZSBpbnB1dCB2YWx1ZSB3aWxsCiAgICAgICAgICAgICAgICAgICAgICAgYmUgaGlkZGVuLgogICAgOnBhcmFtIGNvbmZpcm1hdGlvbl9wcm9tcHQ6IFByb21wdCBhIHNlY29uZCB0aW1lIHRvIGNvbmZpcm0gdGhlCiAgICAgICAgdmFsdWUuIENhbiBiZSBzZXQgdG8gYSBzdHJpbmcgaW5zdGVhZCBvZiBgYFRydWVgYCB0byBjdXN0b21pemUKICAgICAgICB0aGUgbWVzc2FnZS4KICAgIDpwYXJhbSB0eXBlOiB0aGUgdHlwZSB0byB1c2UgdG8gY2hlY2sgdGhlIHZhbHVlIGFnYWluc3QuCiAgICA6cGFyYW0gdmFsdWVfcHJvYzogaWYgdGhpcyBwYXJhbWV0ZXIgaXMgcHJvdmlkZWQgaXQncyBhIGZ1bmN0aW9uIHRoYXQKICAgICAgICAgICAgICAgICAgICAgICBpcyBpbnZva2VkIGluc3RlYWQgb2YgdGhlIHR5cGUgY29udmVyc2lvbiB0bwogICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnQgYSB2YWx1ZS4KICAgIDpwYXJhbSBwcm9tcHRfc3VmZml4OiBhIHN1ZmZpeCB0aGF0IHNob3VsZCBiZSBhZGRlZCB0byB0aGUgcHJvbXB0LgogICAgOnBhcmFtIHNob3dfZGVmYXVsdDogc2hvd3Mgb3IgaGlkZXMgdGhlIGRlZmF1bHQgdmFsdWUgaW4gdGhlIHByb21wdC4KICAgIDpwYXJhbSBlcnI6IGlmIHNldCB0byB0cnVlIHRoZSBmaWxlIGRlZmF1bHRzIHRvIGBgc3RkZXJyYGAgaW5zdGVhZCBvZgogICAgICAgICAgICAgICAgYGBzdGRvdXRgYCwgdGhlIHNhbWUgYXMgd2l0aCBlY2hvLgogICAgOnBhcmFtIHNob3dfY2hvaWNlczogU2hvdyBvciBoaWRlIGNob2ljZXMgaWYgdGhlIHBhc3NlZCB0eXBlIGlzIGEgQ2hvaWNlLgogICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUgaWYgdHlwZSBpcyBhIENob2ljZSBvZiBlaXRoZXIg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AiAg2ghpdGVyYWJsZdoGbGVuZ3Ro2gVsYWJlbNoIc2hvd19ldGHaDHNob3dfcGVyY2VudNoIc2hvd19wb3PaDml0ZW1fc2hvd19mdW5j2glmaWxsX2NoYXLaCmVtcHR5X2NoYXLaDGJhcl90ZW1wbGF0ZdoIaW5mb19zZXDaBXdpZHRo2gRmaWxl2hB1cGRhdGVfbWluX3N0ZXBzeg5Qcm9ncmVzc0JhcltWXWMPAAAAAAAAAAAAAAAQAAAAEQAAAEMAAABzOgAAAGQBZAJsAG0BfQ8BAHQCfA2DAX0NfA98AHwBfAN8BHwFfAZ8B3wIfAl8CnwMfAJ8C3wNfA5kA40PUwApBGFRFQAAVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGFuIGl0ZXJhYmxlIGNvbnRleHQgbWFuYWdlciB0aGF0IGNhbiBiZSB1c2VkCiAgICB0byBpdGVyYXRlIG92ZXIgc29tZXRoaW5nIHdoaWxlIHNob3dpbmcgYSBwcm9ncmVzcyBiYXIuICBJdCB3aWxsCiAgICBlaXRoZXIgaXRlcmF0ZSBvdmVyIHRoZSBgaXRlcmFibGVgIG9yIGBsZW5ndGhgIGl0ZW1zICh0aGF0IGFyZSBjb3VudGVkCiAgICB1cCkuICBXaGlsZSBpdGVyYXRpb24gaGFwcGVucywgdGhpcyBmdW5jdGlvbiB3aWxsIHByaW50IGEgcmVuZGVyZWQKICAgIHByb2dyZXNzIGJhciB0byB0aGUgZ2l2ZW4gYGZpbGVgIChkZWZhdWx0cyB0byBzdGRvdXQpIGFuZCB3aWxsIGF0dGVtcHQKICAgIHRvIGNhbGN1bGF0ZSByZW1haW5pbmcgdGltZSBhbmQgbW9yZS4gIEJ5IGRlZmF1bHQsIHRoaXMgcHJvZ3Jlc3MgYmFyCiAgICB3aWxsIG5vdCBiZSByZW5kZXJlZCBpZiB0aGUgZmlsZSBpcyBub3QgYSB0ZXJtaW5hbC4KCiAgICBUaGUgY29udGV4dCBtYW5hZ2VyIGNyZWF0ZXMgdGhlIHByb2dyZXNzIGJhci4gIFdoZW4gdGhlIGNvbnRleHQKICAgIG1hbmFnZXIgaXMgZW50ZXJlZCB0aGUgcHJvZ3Jlc3MgYmFyIGlzIGFscmVhZHkgY3JlYXRlZC4gIFdpdGggZXZlcnkKICAgIGl0ZXJhdGlvbiBvdmVyIHRoZSBwcm9ncmVzcyBiYXIsIHRoZSBpdGVyYWJsZSBwYXNzZWQgdG8gdGhlIGJhciBpcwogICAgYWR2YW5jZWQgYW5kIHRoZSBiYXIgaXMgdXBkYXRlZC4gIFdoZW4gdGhlIGNvbnRleHQgbWFuYWdlciBleGl0cywKICAgIGEgbmV3bGluZSBpcyBwcmludGVkIGFuZCB0aGUgcHJvZ3Jlc3MgYmFyIGlzIGZpbmFsaXplZCBvbiBzY3JlZW4uCgogICAgTm90ZTogVGhlIHByb2dyZXNzIGJhciBpcyBjdXJyZW50bHkgZGVzaWduZWQgZm9yIHVzZSBjYXNlcyB3aGVyZSB0aGUKICAgIHRvdGFsIHByb2dyZXNzIGNhbiBiZSBleHBlY3RlZCB0byB0YWtlIGF0IGxlYXN0IHNldmVyYWwgc2Vjb25kcy4KICAgIEJlY2F1c2Ugb2YgdGhpcywgdGhlIFByb2dyZXNzQmFyIGNsYXNzIG9iamVjdCB3b24ndCBkaXNwbGF5CiAgICBwcm9ncmVzcyB0aGF0IGlzIGNvbnNpZGVyZWQgdG9vIGZhc3QsIGFuZCBwcm9ncmVzcyB3aGVyZSB0aGUgdGltZQogICAgYmV0d2VlbiBzdGVwcyBpcyBsZXNzIHRoYW4gYSBzZWNvbmQuCgogICAgTm8gcHJpbnRpbmcgbXVzdCBoYXBwZW4gb3IgdGhlIHByb2dyZXNzIGJhciB3aWxsIGJlIHVuaW50ZW50aW9uYWxseQogICAgZGVzdHJveWVkLgoKICAgIEV4YW1wbGUgdXNhZ2U6OgoKICAgICAgICB3aXRoIHByb2dyZXNzYmFyKGl0ZW1zKSBhcyBiYXI6CiAgICAgICAgICAgIGZvciBpdGVtIGluIGJhcjoKICAgICAgICAgICAgICAgIGRvX3NvbWV0aGluZ193aXRoKGl0ZW0pCgogICAgQWx0ZXJuYXRpdmVseSwgaWYgbm8gaXRlcmFibGUgaXMgc3BlY2lmaWVkLCBvbmUgY2FuIG1hbnVhbGx5IHVwZGF0ZSB0aGUKICAgIHByb2dyZXNzIGJhciB0aHJvdWdoIHRoZSBgdXBkYXRlKClgIG1ldGhvZCBpbnN0ZWFkIG9mIGRpcmVjdGx5CiAgICBpdGVyYXRpbmcgb3ZlciB0aGUgcHJvZ3Jlc3MgYmFyLiAgVGhlIHVwZGF0ZSBtZXRob2QgYWNjZXB0cyB0aGUgbnVtYmVyCiAgICBvZiBzdGVwcyB0byBpbmNyZW1lbnQgdGhlIGJhciB3aXRoOjoKCiAgICAgICAgd2l0aCBwcm9ncmVzc2JhcihsZW5ndGg9Y2h1bmtzLnRvdGFsX2J5dGVzKSBhcyBiYXI6CiAgICAgICAgICAgIGZvciBjaHVuayBpbiBjaHVua3M6CiAgICAgICAgICAgICAgICBwcm9jZXNzX2NodW5rKGNodW5rKQogICAgICAgICAgICAgICAgYmFyLnVwZGF0ZShjaHVua3MuYnl0ZXMpCgogICAgVGhlIGBgdXBkYXRlKClgYCBtZXRob2QgYWxzbyB0YWtlcyBhbiBvcHRpb25hbCB2YWx1ZSBzcGVjaWZ5aW5nIHRoZQogICAgYGBjdXJyZW50X2l0ZW1gYCBhdCB0aGUgbmV3IHBvc2l0aW9uLiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHVzZWQKICAgIHRvZ2V0aGVyIHdpdGggYGBpdGVtX3Nob3dfZnVuY2BgIHRvIGN1c3RvbWl6ZSB0aGUgb3V0cHV0IGZvciBlYWNoCiAgICBtYW51YWwgc3RlcDo6CgogICAgICAgIHdpdGggY2xpY2sucHJvZ3Jlc3NiYXIoCiAgICAgICAgICAgIGxlbmd0aD10b3RhbF9zaXplLAogICAgICAgICAgICBsYWJlbD0nVW56aXBwaW5nIGFyY2hpdmUnLAogICAgICAgICAgICBpdGVtX3Nob3dfZnVuYz1sYW1iZGEgYTogYS5maWxlbmFtZQogICAgICAgICkgYXMgYmFyOgogICAgICAgICAgICBmb3IgYXJjaGl2ZSBpbiB6aXBfZmlsZToKICAgICAgICAgICAgICAgIGFyY2hpdmUuZXh0cmFjdCgpCiAgICAgICAgICAgICAgICBiYXIudXBkYXRlKGFyY2hpdmUuc2l6ZSwgYXJjaGl2ZSkKCiAgICA6cGFyYW0gaXRlcmFibGU6IGFuIGl0ZXJhYmxlIHRvIGl0ZXJhdGUgb3Zlci4gIElmIG5vdCBwcm92aWRlZCB0aGUgbGVuZ3RoCiAgICAgICAgICAgICAgICAgICAgIGlzIHJlcXVpcmVkLgogICAgOnBhcmFtIGxlbmd0aDogdGhlIG51bWJlciBvZiBpdGVtcyB0byBpdGVyYXRlIG92ZXIuICBCeSBkZWZhdWx0IHRoZQogICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3NiYXIgd2lsbCBhdHRlbXB0IHRvIGFzayB0aGUgaXRlcmF0b3IgYWJvdXQgaXRzCiAgICAgICAgICAgICAgICAgICBsZW5ndGgsIHdoaWNoIG1pZ2h0IG9yIG1pZ2h0IG5vdCB3b3JrLiAgSWYgYW4gaXRlcmFibGUgaXMKICAgICAgICAgICAgICAgICAgIGFsc28gcHJvdmlkZWQgdGhpcyBwYXJhbWV0ZXIgY2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlCiAgICAgICAgICAgICAgICAgICBsZW5ndGguICBJZiBhbiBpdGVyYWJsZSBpcyBub3QgcHJvdmlkZWQgdGhlIHByb2dyZXNzIGJhcgogICAgICAgICAgICAgICAgICAgd2lsbCBpdGVyYXRlIG92ZXIgYSByYW5nZSBvZiB0aGF0IGxlbmd0aC4KICAgIDpwYXJhbSBsYWJlbDogdGhlIGxhYmVsIHRvIHNob3cgbmV4dCB0byB0aGUgcHJvZ3Jlc3MgYmFyLgogICAgOnBhcmFtIHNob3dfZXRhOiBlbmFibGVzIG9yIGRpc2FibGVzIHRoZSBlc3RpbWF0ZWQgdGltZSBkaXNwbGF5LiAgVGhpcyBpcwogICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IGRpc2FibGVkIGlmIHRoZSBsZW5ndGggY2Fubm90IGJlCiAgICAgICAgICAgICAgICAgICAgIGRldGVybWluZWQuCiAgICA6cGFyYW0gc2hvd19wZXJjZW50OiBlbmFibGVzIG9yIGRpc2FibGVzIHRoZSBwZXJjZW50YWdlIGRpc3BsYXkuICBUaGUKICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgaXMgYFRydWVgIGlmIHRoZSBpdGVyYWJsZSBoYXMgYSBsZW5ndGggb3IKICAgICAgICAgICAgICAgICAgICAgICAgIGBGYWxzZWAgaWYgbm90LgogICAgOnBhcmFtIHNob3dfcG9zOiBlbmFibGVzIG9yIGRpc2FibGVzIHRoZSBhYnNvbHV0ZSBwb3NpdGlvbiBkaXNwbGF5LiAgVGhlCiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgaXMgYEZhbHNlYC4KICAgIDpwYXJhbSBpdGVtX3Nob3dfZnVuYzogQSBmdW5jdGlvbiBjYWxsZWQgd2l0aCB0aGUgY3VycmVudCBpdGVtIHdoaWNoCiAgICAgICAgY2FuIHJldHVybiBhIHN0cmluZyB0byBzaG93IG5leHQgdG8gdGhlIHByb2dyZXNzIGJhci4gSWYgdGhlCiAgICAgICAgZnVuY3Rpb24gcmV0dXJucyBgYE5vbmVgYCBub3RoaW5nIGlzIHNob3duLiBUaGUgY3VycmVudCBpdGVtIGNhbgogICAgICAgIGJlIGBgTm9uZWBgLCBzdWNoIGFzIHdoZW4gZW50ZXJpbmcgYW5kIGV4aXRpbmcgdGhlIGJhci4KICAgIDpwYXJhbSBmaWxsX2NoYXI6IHRoZSBjaGFyYWN0ZXIgdG8gdXNlIHRvIHNob3cgdGhlIGZpbGxlZCBwYXJ0IG9mIHRoZQogICAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3MgYmFyLgogICAgOnBhcmFtIGVtcHR5X2NoYXI6IHRoZSBjaGFyYWN0ZXIgdG8gdXNlIHRvIHNob3cgdGhlIG5vbi1maWxsZWQgcGFydCBvZgogICAgICAgICAgICAgICAgICAgICAgIHRoZSBwcm9ncmVzcyBiYXIuCiAgICA6cGFyYW0gYmFyX3RlbXBsYXRlOiB0aGUgZm9ybWF0IHN0cmluZyB0byB1c2UgYXMgdGVtcGxhdGUgZm9yIHRoZSBiYXIuCiAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcGFyYW1ldGVycyBpbiBpdCBhcmUgYGBsYWJlbGBgIGZvciB0aGUgbGFiZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICBgYGJhcmBgIGZvciB0aGUgcHJvZ3Jlc3MgYmFyIGFuZCBgYGluZm9gYCBmb3IgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvIHNlY3Rpb24uCiAgICA6cGFyYW0gaW5mb19zZXA6IHRoZSBzZXBhcmF0b3IgYmV0d2VlbiBtdWx0aXBsZSBpbmZvIGl0ZW1zIChldGEgZXRjLikKICAgIDpwYXJhbSB3aWR0aDogdGhlIHdpZHRoIG9mIHRoZSBwcm9ncmVzcyBiYXIgaW4gY2hhcmFjdGVycywgMCBtZWFucyBmdWxsCiAgICAgICAgICAgICAgICAgIHRlcm1pbmFsIHdpZHRoCiAgICA6cGFyYW0gZmlsZTogVGhlIGZpbGUgdG8gd3JpdGUgdG8uIElmIHRoaXMgaXMgbm90IGEgdGVybWluYWwgdGhlbgogICAgICAgIG9ubHkgdGhlIGxhYmVsIGlzIHByaW50ZWQuCiAgICA6cGFyYW0gY29sb3I6IGNvbnRyb2xzIGlmIHRoZSB0ZXJtaW5hbCBzdXBwb3J0cyBBTlNJIGNvbG9ycyBvciBub3QuICBUaGUKICAgICAgICAgICAgICAgICAgZGVmYXVsdCBpcyBhdXRvZGV0ZWN0aW9uLiAgVGhpcyBpcyBvbmx5IG5lZWRlZCBpZiBBTlNJCiAgICAgICAgICAgICAgICAgIGNvZGVzIGFyZSBpbmNsdWRlZCBhbnl3aGVyZSBpbiB0aGUgcHJvZ3Jlc3MgYmFyIG91dHB1dAogICAgICAgICAgICAgICAgICB3aGljaCBpcyBub3QgdGhlIGNhc2UgYnkgZGVmYXVsdC4KICAgIDpwYXJhbSB1cGRhdGVfbWluX3N0ZXBzOiBSZW5kZXIgb25seSB3aGVuIHRoaXMgbWFueSB1cGRhdGVzIGhhdmUKICAgICAgICBjb21wbGV0ZWQuIFRoaXMgYWxsb3dzIHR1bmluZyBmb3IgdmVyeSBmYXN0IGl0ZXJhdG9ycy4KCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDguMAogICAgICAgIE91dHB1dCBpcyBzaG93biBldmVuIGlmIGV4ZWN1dGlvbiB0aW1lIGlzIGxlc3MgdGhhbiAwLjUgc2Vjb25kcy4KCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDguMAogICAgICAgIGBgaXRlbV9zaG93X2Z1bmNgYCBzaG93cyB0aGUgY3VycmVudCBpdGVtLCBub3QgdGhlIHByZXZpb3VzIG9uZS4KCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDguMAogICAgICAgIExhYmVs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aHRfeWVsbG93YGAKICAgICogYGBicmlnaHRfYmx1ZWBgCiAgICAqIGBgYnJpZ2h0X21hZ2VudGFgYAogICAgKiBgYGJyaWdodF9jeWFuYGAKICAgICogYGBicmlnaHRfd2hpdGVgYAogICAgKiBgYHJlc2V0YGAgKHJlc2V0IHRoZSBjb2xvciBjb2RlIG9ubHkpCgogICAgSWYgdGhlIHRlcm1pbmFsIHN1cHBvcnRzIGl0LCBjb2xvciBtYXkgYWxzbyBiZSBzcGVjaWZpZWQgYXM6CgogICAgLSAgIEFuIGludGVnZXIgaW4gdGhlIGludGVydmFsIFswLCAyNTVdLiBUaGUgdGVybWluYWwgbXVzdCBzdXBwb3J0CiAgICAgICAgOC1iaXQvMjU2LWNvbG9yIG1vZGUuCiAgICAtICAgQW4gUkdCIHR1cGxlIG9mIHRocmVlIGludGVnZXJzIGluIFswLCAyNTVdLiBUaGUgdGVybWluYWwgbXVzdAogICAgICAgIHN1cHBvcnQgMjQtYml0L3RydWUtY29sb3IgbW9kZS4KCiAgICBTZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQU5TSV9jb2xvciBhbmQKICAgIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL1hWaWxrYS84MzQ2NzI4IGZvciBtb3JlIGluZm9ybWF0aW9uLgoKICAgIDpwYXJhbSB0ZXh0OiB0aGUgc3RyaW5nIHRvIHN0eWxlIHdpdGggYW5zaSBjb2Rlcy4KICAgIDpwYXJhbSBmZzogaWYgcHJvdmlkZWQgdGhpcyB3aWxsIGJlY29tZSB0aGUgZm9yZWdyb3VuZCBjb2xvci4KICAgIDpwYXJhbSBiZzogaWYgcHJvdmlkZWQgdGhpcyB3aWxsIGJlY29tZSB0aGUgYmFja2dyb3VuZCBjb2xvci4KICAgIDpwYXJhbSBib2xkOiBpZiBwcm92aWRlZCB0aGlzIHdpbGwgZW5hYmxlIG9yIGRpc2FibGUgYm9sZCBtb2RlLgogICAgOnBhcmFtIGRpbTogaWYgcHJvdmlkZWQgdGhpcyB3aWxsIGVuYWJsZSBvciBkaXNhYmxlIGRpbSBtb2RlLiAgVGhpcyBpcwogICAgICAgICAgICAgICAgYmFkbHkgc3VwcG9ydGVkLgogICAgOnBhcmFtIHVuZGVybGluZTogaWYgcHJvdmlkZWQgdGhpcyB3aWxsIGVuYWJsZSBvciBkaXNhYmxlIHVuZGVybGluZS4KICAgIDpwYXJhbSBvdmVybGluZTogaWYgcHJvdmlkZWQgdGhpcyB3aWxsIGVuYWJsZSBvciBkaXNhYmxlIG92ZXJsaW5lLgogICAgOnBhcmFtIGl0YWxpYzogaWYgcHJvdmlkZWQgdGhpcyB3aWxsIGVuYWJsZSBvciBkaXNhYmxlIGl0YWxpYy4KICAgIDpwYXJhbSBibGluazogaWYgcHJvdmlkZWQgdGhpcyB3aWxsIGVuYWJsZSBvciBkaXNhYmxlIGJsaW5raW5nLgogICAgOnBhcmFtIHJldmVyc2U6IGlmIHByb3ZpZGVkIHRoaXMgd2lsbCBlbmFibGUgb3IgZGlzYWJsZSBpbnZlcnNlCiAgICAgICAgICAgICAgICAgICAgcmVuZGVyaW5nIChmb3JlZ3JvdW5kIGJlY29tZXMgYmFja2dyb3VuZCBhbmQgdGhlCiAgICAgICAgICAgICAgICAgICAgb3RoZXIgd2F5IHJvdW5kKS4KICAgIDpwYXJhbSBzdHJpa2V0aHJvdWdoOiBpZiBwcm92aWRlZCB0aGlzIHdpbGwgZW5hYmxlIG9yIGRpc2FibGUKICAgICAgICBzdHJpa2luZyB0aHJvdWdoIHRleHQuCiAgICA6cGFyYW0gcmVzZXQ6IGJ5IGRlZmF1bHQgYSByZXNldC1hbGwgY29kZSBpcyBhZGRlZCBhdCB0aGUgZW5kIG9mIHRoZQogICAgICAgICAgICAgICAgICBzdHJpbmcgd2hpY2ggbWVhbnMgdGhhdCBzdHlsZXMgZG8gbm90IGNhcnJ5IG92ZXIuICBUaGlzCiAgICAgICAgICAgICAgICAgIGNhbiBiZSBkaXNhYmxlZCB0byBjb21wb3NlIHN0eWxlcy4KCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDguMAogICAgICAgIEEgbm9uLXN0cmluZyBgYG1lc3NhZ2VgYCBpcyBjb252ZXJ0ZWQgdG8gYSBzdHJpbmcuCgogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiA4LjAKICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIDI1NiBhbmQgUkdCIGNvbG9yIGNvZGVzLgoKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogOC4wCiAgICAgICAgQWRkZWQgdGhlIGBgc3RyaWtldGhyb3VnaGBgLCBgYGl0YWxpY2BgLCBhbmQgYGBvdmVybGluZWBgCiAgICAgICAgcGFyYW1ldGVycy4KCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDcuMAogICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIGJyaWdodCBjb2xvcnMuCgogICAgLi4gdmVyc2lvbmFkZGVkOjogMi4wCiAgICB6Ahtb2gFteg5Vbmtub3duIGNvbG9yIE7pCgAAAHIDAAAA6RYAAADpAgAAAOkEAAAA6RgAAADpNQAAAOk3AAAA6QMAAADpFwAAAOkFAAAA6RkAAADpBwAAAOkbAAAA6QkAAADpHQAAAHJrAAAAKQhyRAAAAHJHAAAA2gZhcHBlbmRyqgAAANoIS2V5RXJyb3LaCVR5cGVFcnJvctoPX2Fuc2lfcmVzZXRfYWxsckUAAAApDXI8AAAAcqsAAAByrAAAAHKtAAAAcq4AAAByrwAAAHKwAAAAcrEAAABysgAAAHKzAAAAcrQAAAByJAAAANoEYml0c3I5AAAAcjkAAAByOgAAANoFc3R5bGXRAQAAc0YAAAAKWggBBAIEAgIBGgEMARABAv8EAwIBHAEMARABAv8IAxoBCAEaAQgBGgEIARoBCAEaAQgBGgEIARoBCAEaAQoBBAEKAQoBcsoAAABjAQAAAAAAAAAAAAAAAQAAAAIAAABDAAAAcwgAAAB0AHwAgwFTACkBYQ4BAABSZW1vdmVzIEFOU0kgc3R5bGluZyBpbmZvcm1hdGlvbiBmcm9tIGEgc3RyaW5nLiAgVXN1YWxseSBpdCdzIG5vdAogICAgbmVjZXNzYXJ5IHRvIHVzZSB0aGlzIGZ1bmN0aW9uIGFzIENsaWNrJ3MgZWNobyBmdW5jdGlvbiB3aWxsCiAgICBhdXRvbWF0aWNhbGx5IHJlbW92ZSBzdHlsaW5nIGlmIG5lY2Vzc2FyeS4KCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjAKCiAgICA6cGFyYW0gdGV4dDogdGhlIHRleHQgdG8gcmVtb3ZlIHN0eWxlIGluZm9ybWF0aW9uIGZyb20uCiAgICByBQAAACkBcjwAAAByOQAAAHI5AAAAcjoAAADaB3Vuc3R5bGVSAgAAcwIAAAAICXLLAAAA2gdtZXNzYWdlclcAAADaBnN0eWxlc2MFAAAAAAAAAAAAAAAGAAAABwAAAEsAAABzOAAAAHwAZAF1AXITdAB8AHQBdAJmAoMCcxN0A3wAZgFpAHwFpAGOAX0AdAR8AHwBfAJ8A3wEZAKNBVMAKQNh7QIAAFRoaXMgZnVuY3Rpb24gY29tYmluZXMgOmZ1bmM6YGVjaG9gIGFuZCA6ZnVuYzpgc3R5bGVgIGludG8gb25lCiAgICBjYWxsLiAgQXMgc3VjaCB0aGUgZm9sbG93aW5nIHR3byBjYWxscyBhcmUgdGhlIHNhbWU6OgoKICAgICAgICBjbGljay5zZWNobygnSGVsbG8gV29ybGQhJywgZmc9J2dyZWVuJykKICAgICAgICBjbGljay5lY2hvKGNsaWNrLnN0eWxlKCdIZWxsbyBXb3JsZCEnLCBmZz0nZ3JlZW4nKSkKCiAgICBBbGwga2V5d29yZCBhcmd1bWVudHMgYXJlIGZvcndhcmRlZCB0byB0aGUgdW5kZXJseWluZyBmdW5jdGlvbnMKICAgIGRlcGVuZGluZyBvbiB3aGljaCBvbmUgdGhleSBnbyB3aXRoLgoKICAgIE5vbi1zdHJpbmcgdHlwZXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gOmNsYXNzOmBzdHJgLiBIb3dldmVyLAogICAgOmNsYXNzOmBieXRlc2AgYXJlIHBhc3NlZCBkaXJlY3RseSB0byA6bWV0aDpgZWNob2Agd2l0aG91dCBhcHBseWluZwogICAgc3R5bGUuIElmIHlvdSB3YW50IHRvIHN0eWxlIGJ5dGVzIHRoYXQgcmVwcmVzZW50IHRleHQsIGNhbGwKICAgIDptZXRoOmBieXRlcy5kZWNvZGVgIGZpcnN0LgoKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogOC4wCiAgICAgICAgQSBub24tc3RyaW5nIGBgbWVzc2FnZWBgIGlzIGNvbnZlcnRlZCB0byBhIHN0cmluZy4gQnl0ZXMgYXJlCiAgICAgICAgcGFzc2VkIHRocm91Z2ggd2l0aG91dCBzdHlsZSBhcHBsaWVkLgoKICAgIC4uIHZlcnNpb25hZGRlZDo6IDIuMAogICAgTikEcpUAAAByVwAAAHJUAAAAcnEAAAApBXJEAAAA2gVieXRlc9oJYnl0ZWFycmF5csoAAAByDgAAACkGcswAAABylQAAAHJXAAAAclQAAABycQAAAHLNAAAAcjkAAAByOQAAAHI6AAAA2gVzZWNob14CAABzBgAAABYcEAESAnLQAAAA+gQudHh02gZlZGl0b3LaA2VudtoMcmVxdWlyZV9zYXZl2glleHRlbnNpb27aCGZpbGVuYW1lYwYAAAAAAAAAAAAAAAgAAAAGAAAAQwAAAHM8AAAAZAFkAmwAbQF9BgEAfAZ8AXwCfAN8BGQDjQR9B3wFZAR1AHIXfAegAnwAoQFTAHwHoAN8BaEBAQBkBFMAKQVhzwUAAEVkaXRzIHRoZSBnaXZlbiB0ZXh0IGluIHRoZSBkZWZpbmVkIGVkaXRvci4gIElmIGFuIGVkaXRvciBpcyBnaXZlbgogICAgKHNob3VsZCBiZSB0aGUgZnVsbCBwYXRoIHRvIHRoZSBleGVjdXRhYmxlIGJ1dCB0aGUgcmVndWxhciBvcGVyYXRpbmcKICAgIHN5c3RlbSBzZWFyY2ggcGF0aCBpcyB1c2VkIGZvciBmaW5kaW5nIHRoZSBleGVjdXRhYmxlKSBpdCBvdmVycmlkZXMKICAgIHRoZSBkZXRlY3RlZCBlZGl0b3IuICBPcHRpb25hbGx5LCBzb21lIGVudmlyb25tZW50IHZhcmlhYmxlcyBjYW4gYmUKICAgIHVzZWQuICBJZiB0aGUgZWRpdG9yIGlzIGNsb3NlZCB3aXRob3V0IGNoYW5nZXMsIGBOb25lYCBpcyByZXR1cm5lZC4gIEluCiAgICBjYXNlIGEgZmlsZSBpcyBlZGl0ZWQgZGlyZWN0bHkgdGhlIHJldHVybiB2YWx1ZSBpcyBhbHdheXMgYE5vbmVgIGFuZAogICAgYHJlcXVpcmVfc2F2ZWAgYW5kIGBleHRlbnNpb25gIGFyZSBpZ25vcmVkLgoKICAgIElmIHRoZSBlZGl0b3IgY2Fubm90IGJlIG9wZW5lZCBhIDpleGM6YFVzYWdlRXJyb3JgIGlzIHJhaXNlZC4KCiAgICBOb3RlIGZvciBXaW5kb3dzOiB0byBzaW1wbGlmeSBjcm9zcy1wbGF0Zm9ybSB1c2FnZSwgdGhlIG5ld2xpbmVzIGFyZQogICAgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQgZnJvbSBQT1NJWCB0byBXaW5kb3dzIGFuZCB2aWNlIHZlcnNhLiAgQXMgc3VjaCwKICAgIHRoZSBtZXNzYWdlIGhlcmUgd2lsbCBoYXZlIGBgXG5gYCBhcyBuZXdsaW5lIG1hcmtlcnMuCgogICAgOnBhcmFtIHRleHQ6IHRoZSB0ZXh0IHRvIGVkaXQuCiAgICA6cGFyYW0gZWRpdG9yOiBvcHRpb25hbGx5IHRoZSBlZGl0b3IgdG8gdXNlLiAgRGVmYXVsdHMgdG8gYXV0b21hdGljCiAgICAgICAgICAgICAgICAgICBkZXRlY3Rpb24uCiAgICA6cGFyYW0gZW52OiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gZm9yd2FyZCB0byB0aGUgZWRpdG9yLgogICAgOnBhcmFtIHJlcXVpcmVfc2F2ZTogaWYgdGhpcyBpcyB0cnVlLCB0aGVuIG5vdCBzYXZpbmcgaW4gdGhlIGVkaXRvcgogICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCBtYWtlIHRoZSByZXR1cm4gdmFsdWUgYmVjb21lIGBOb25lYC4KICAgIDpwYXJhbSBleHRlbnNpb246IHRoZSBleHRlbnNpb24gdG8gdGVsbCB0aGUgZWRpdG9yIGFib3V0LiAgVGhpcyBkZWZhdWx0cwogICAgICAgICAgICAgICAgICAgICAgdG8gYC50eHRgIGJ1dCBjaGFuZ2luZyB0aGlzIG1pZ2h0IGNoYW5nZSBzeW50YXgKICAgICAgICAgICAgICAgICAgICAgIGhpZ2hsaWdodGluZy4KICAgIDpwYXJhbSBmaWxlbmFtZTogaWYgcHJvdmlkZWQgaXQgd2lsbCBlZGl0IHRoaXMgZmlsZSBpbnN0ZWFkIG9mIHRoZQogICAgICAgICAgICAgICAgICAgICBwcm92aWRlZCB0ZXh0IGNvbnRlbnRzLiAgSXQgd2lsbCBub3QgdXNlIGEgdGVtcG9yYXJ5CiAgICAgICAgICAgICAgICAgICAgIGZpbGUgYXMgYW4gaW5kaXJlY3Rpb24gaW4gdGhhdCBjYXNlLgogICAgcgMAAAAp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