YQ0NCgAAAABKGnxjjrgBAOMAAAAAAAAAAAAAAAAAAAAABwAAAEAAAABzSAMAAGQAZAFsAFoAZABkAWwBWgFkAGQBbAJaAmQAZAFsA1oDZABkAWwEWgRkAGQBbAVaBmQAZAJsB20IWggBAGQAZANsCW0KWgoBAGQAZARsCW0LWgsBAGQAZAVsDG0NWg0BAGQAZAZsDG0OWg4BAGQAZAdsD20PWhABAGQAZAhsD20RWhEBAGQAZAlsEm0TWhMBAGQKZAtsFG0VWhUBAGQKZAxsFm0XWhcBAGQKZA1sFm0YWhgBAGQKZA5sFm0ZWhkBAGQKZA9sFm0aWhoBAGQKZBBsFm0bWhsBAGQKZBFsFm0cWhwBAGQKZBJsHW0eWh4BAGQKZBNsHW0fWh8BAGQKZBRsIG0hWiEBAGQKZBVsIG0iWiIBAGQKZBZsI20kWiQBAGQKZBdsI20lWiUBAGQKZBhsI20mWiYBAGQKZBlsJ20oWigBAGQKZBpsJ20pWikBAGQKZBtsJ20qWioBAGQKZBxsK20sWiwBAGQKZB1sK20tWi0BAGQKZB5sK20uWi4BAGQKZB9sK20vWi8BAGQKZCBsK20wWjABAGQKZCFsK20xWjEBAGUGajKQAXLAZABkAWwzWjRkCmQibDVtNlo2AQBlBmo3ZCNlBmo4ZCRlBmo5ZgIZAGQljQJaOmUGoDdkJqEBWjtkJ2U8ZQZqPWUGaj5lPGQoZgIZABkAZCmcA2QqZCuEBFo/ZE5kLWU8ZChlQGQBZC6cBWQvZDCEBVpBZQZqQmU7GQBlQ2UGakRlBmo+ZTtkJGYCGQAZAGQxnANkMmQzhARaRWUKZE9kJ2UGakZkNBkAZQZqPWQBGQBkNZwDZDZkN4QFgwFaR2UGakhkNBkAZQZqSGQ0GQBlBmpEZDQZAGQ4nANkOWQ6hARaSUcAZDtkPIQAZDxlAGpKgwNaS0cAZD1kJ4QAZCeDAlpMRwBkPmQ/hABkP4MCWk1HAGRAZCiEAGQoZU2DA1pORwBkQWQthABkLWVOgwNaT0cAZEJkQ4QAZENlT4MDWlBHAGREZEWEAGRFZU+DA1pRZQZqOWUGaj1lBmo5GQBkRpwCZEdkSIQEWlJHAGRJZDSEAGQ0gwJaU0cAZEpkS4QAZEtlU4MDWlRHAGRMZE2EAGRNZVODA1pVZAFTAClQ6QAAAABOKQHaA2FiYykB2g5jb250ZXh0bWFuYWdlcikB2glFeGl0U3RhY2spAdoHcGFydGlhbCkB2g51cGRhdGVfd3JhcHBlcikB2gdnZXR0ZXh0KQHaCG5nZXR0ZXh0KQHaBnJlcGVhdOkBAAAAKQHaBXR5cGVzqQHaBUFib3J0KQHaDEJhZFBhcmFtZXRlcikB2g5DbGlja0V4Y2VwdGlvbqkB2gRFeGl0KQHaEE1pc3NpbmdQYXJhbWV0ZXKpAdoKVXNhZ2VFcnJvcikB2g1IZWxwRm9ybWF0dGVyKQHaDGpvaW5fb3B0aW9ucykB2gtwb3BfY29udGV4dCkB2gxwdXNoX2NvbnRleHSpAdoRX2ZsYWdfbmVlZHNfdmFsdWUpAdoMT3B0aW9uUGFyc2VyKQHaCXNwbGl0X29wdCkB2gdjb25maXJtKQHaBnByb21wdCkB2gVzdHlsZSkB2hRfZGV0ZWN0X3Byb2dyYW1fbmFtZSkB2gxfZXhwYW5kX2FyZ3MpAdoEZWNobykB2hdtYWtlX2RlZmF1bHRfc2hvcnRfaGVscCkB2ghtYWtlX3N0cikB2hJQYWNpZnlGbHVzaFdyYXBwZXKpAdoOQ29tcGxldGlvbkl0ZW3aAUYuKQHaBWJvdW5k2gFW2gdDb250ZXh02gdDb21tYW5kqQPaA2N0eNoKaW5jb21wbGV0ZdoGcmV0dXJuYwIAAAAAAAAAAAAAAAUAAAAFAAAAYwAAAHNQAAAAdACgAXQCfABqA6ECfQJ8AqAEfAChAUQAXTJ9A3wDoAV8AaEBchh8AqAGfAB8A6ECfQR8BGQBdQFyGHwEagdzGHwDfARmAlYAAQBxGGQBUwApAnrTTGlzdCBhbGwgdGhlIHN1YmNvbW1hbmRzIG9mIGEgZ3JvdXAgdGhhdCBzdGFydCB3aXRoIHRoZQogICAgaW5jb21wbGV0ZSB2YWx1ZSBhbmQgYXJlbid0IGhpZGRlbi4KCiAgICA6cGFyYW0gY3R4OiBJbnZvY2F0aW9uIGNvbnRleHQgZm9yIHRoZSBncm91cC4KICAgIDpwYXJhbSBpbmNvbXBsZXRlOiBWYWx1ZSBiZWluZyBjb21wbGV0ZWQuIE1heSBiZSBlbXB0eS4KICAgIE4pCNoBdNoEY2FzdNoMTXVsdGlDb21tYW5k2gdjb21tYW5k2g1saXN0X2NvbW1hbmRz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WjFkBFMAKVVyKwAAAGHwEwAAVGhlIGNvbnRleHQgaXMgYSBzcGVjaWFsIGludGVybmFsIG9iamVjdCB0aGF0IGhvbGRzIHN0YXRlIHJlbGV2YW50CiAgICBmb3IgdGhlIHNjcmlwdCBleGVjdXRpb24gYXQgZXZlcnkgc2luZ2xlIGxldmVsLiAgSXQncyBub3JtYWxseSBpbnZpc2libGUKICAgIHRvIGNvbW1hbmRzIHVubGVzcyB0aGV5IG9wdC1pbiB0byBnZXR0aW5nIGFjY2VzcyB0byBpdC4KCiAgICBUaGUgY29udGV4dCBpcyB1c2VmdWwgYXMgaXQgY2FuIHBhc3MgaW50ZXJuYWwgb2JqZWN0cyBhcm91bmQgYW5kIGNhbgogICAgY29udHJvbCBzcGVjaWFsIGV4ZWN1dGlvbiBmZWF0dXJlcyBzdWNoIGFzIHJlYWRpbmcgZGF0YSBmcm9tCiAgICBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCgogICAgQSBjb250ZXh0IGNhbiBiZSB1c2VkIGFzIGNvbnRleHQgbWFuYWdlciBpbiB3aGljaCBjYXNlIGl0IHdpbGwgY2FsbAogICAgOm1ldGg6YGNsb3NlYCBvbiB0ZWFyZG93bi4KCiAgICA6cGFyYW0gY29tbWFuZDogdGhlIGNvbW1hbmQgY2xhc3MgZm9yIHRoaXMgY29udGV4dC4KICAgIDpwYXJhbSBwYXJlbnQ6IHRoZSBwYXJlbnQgY29udGV4dC4KICAgIDpwYXJhbSBpbmZvX25hbWU6IHRoZSBpbmZvIG5hbWUgZm9yIHRoaXMgaW52b2NhdGlvbi4gIEdlbmVyYWxseSB0aGlzCiAgICAgICAgICAgICAgICAgICAgICBpcyB0aGUgbW9zdCBkZXNjcmlwdGl2ZSBuYW1lIGZvciB0aGUgc2NyaXB0IG9yCiAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLiAgRm9yIHRoZSB0b3BsZXZlbCBzY3JpcHQgaXQgaXMgdXN1YWxseQogICAgICAgICAgICAgICAgICAgICAgdGhlIG5hbWUgb2YgdGhlIHNjcmlwdCwgZm9yIGNvbW1hbmRzIGJlbG93IGl0IGl0J3MKICAgICAgICAgICAgICAgICAgICAgIHRoZSBuYW1lIG9mIHRoZSBzY3JpcHQuCiAgICA6cGFyYW0gb2JqOiBhbiBhcmJpdHJhcnkgb2JqZWN0IG9mIHVzZXIgZGF0YS4KICAgIDpwYXJhbSBhdXRvX2VudnZhcl9wcmVmaXg6IHRoZSBwcmVmaXggdG8gdXNlIGZvciBhdXRvbWF0aWMgZW52aXJvbm1lbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcy4gIElmIHRoaXMgaXMgYE5vbmVgIHRoZW4gcmVhZGluZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgaXMgZGlzYWJsZWQuICBUaGlzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2VzIG5vdCBhZmZlY3QgbWFudWFsbHkgc2V0IGVudmlyb25tZW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXMgd2hpY2ggYXJlIGFsd2F5cyByZWFkLgogICAgOnBhcmFtIGRlZmF1bHRfbWFwOiBhIGRpY3Rpb25hcnkgKGxpa2Ugb2JqZWN0KSB3aXRoIGRlZmF1bHQgdmFsdWVzCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwYXJhbWV0ZXJzLgogICAgOnBhcmFtIHRlcm1pbmFsX3dpZHRoOiB0aGUgd2lkdGggb2YgdGhlIHRlcm1pbmFsLiAgVGhlIGRlZmF1bHQgaXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5oZXJpdCBmcm9tIHBhcmVudCBjb250ZXh0LiAgSWYgbm8gY29udGV4dAogICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVzIHRoZSB0ZXJtaW5hbCB3aWR0aCB0aGVuIGF1dG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0ZWN0aW9uIHdpbGwgYmUgYXBwbGllZC4KICAgIDpwYXJhbSBtYXhfY29udGVudF93aWR0aDogdGhlIG1heGltdW0gd2lkdGggZm9yIGNvbnRlbnQgcmVuZGVyZWQgYnkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xpY2sgKHRoaXMgY3VycmVudGx5IG9ubHkgYWZmZWN0cyBoZWxwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VzKS4gIFRoaXMgZGVmYXVsdHMgdG8gODAgY2hhcmFjdGVycyBpZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3Qgb3ZlcnJpZGRlbi4gIEluIG90aGVyIHdvcmRzOiBldmVuIGlmIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hbCBpcyBsYXJnZXIgdGhhbiB0aGF0LCBDbGljayB3aWxsIG5vdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQgdGhpbmdzIHdpZGVyIHRoYW4gODAgY2hhcmFjdGVycyBieQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0LiAgSW4gYWRkaXRpb24gdG8gdGhhdCwgZm9ybWF0dGVycyBtaWdodAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGQgc29tZSBzYWZldHkgbWFwcGluZyBvbiB0aGUgcmlnaHQuCiAgICA6cGFyYW0gcmVzaWxpZW50X3BhcnNpbmc6IGlmIHRoaXMgZmxhZyBpcyBlbmFibGVkIHRoZW4gQ2xpY2sgd2lsbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZSB3aXRob3V0IGFueSBpbnRlcmFjdGl2aXR5IG9yIGNhbGxiYWNrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludm9jYXRpb24uICBEZWZhdWx0IHZhbHVlcyB3aWxsIGFsc28gYmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlZC4gIFRoaXMgaXMgdXNlZnVsIGZvciBpbXBsZW1lbnRpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpbmdzIHN1Y2ggYXMgY29tcGxldGlvbiBzdXBwb3J0LgogICAgOnBhcmFtIGFsbG93X2V4dHJhX2FyZ3M6IGlmIHRoaXMgaXMgc2V0IHRvIGBUcnVlYCB0aGVuIGV4dHJhIGFyZ3VtZW50cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0IHRoZSBlbmQgd2lsbCBub3QgcmFpc2UgYW4gZXJyb3IgYW5kIHdpbGwgYmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXB0IG9uIHRoZSBjb250ZXh0LiAgVGhlIGRlZmF1bHQgaXMgdG8gaW5oZXJpdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGhlIGNvbW1hbmQuCiAgICA6cGFyYW0gYWxsb3dfaW50ZXJzcGVyc2VkX2FyZ3M6IGlmIHRoaXMgaXMgc2V0IHRvIGBGYWxzZWAgdGhlbiBvcHRpb25zCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBhcmd1bWVudHMgY2Fubm90IGJlIG1peGVkLiAgVGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgaXMgdG8gaW5oZXJpdCBmcm9tIHRoZSBjb21tYW5kLgogICAgOnBhcmFtIGlnbm9yZV91bmtub3duX29wdGlvbnM6IGluc3RydWN0cyBjbGljayB0byBpZ25vcmUgb3B0aW9ucyBpdCBkb2VzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IGtub3cgYW5kIGtlZXBzIHRoZW0gZm9yIGxhdGVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2luZy4KICAgIDpwYXJhbSBoZWxwX29wdGlvbl9uYW1lczogb3B0aW9uYWxseSBhIGxpc3Qgb2Ygc3RyaW5ncyB0aGF0IGRlZmluZSBob3cKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGRlZmF1bHQgaGVscCBwYXJhbWV0ZXIgaXMgbmFtZWQuICBUaGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCBpcyBgYFsnLS1oZWxwJ11gYC4KICAgIDpwYXJhbSB0b2tlbl9ub3JtYWxpemVfZnVuYzogYW4gb3B0aW9uYWwgZnVuY3Rpb24gdGhhdCBpcyB1c2VkIHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZSB0b2tlbnMgKG9wdGlvbnMsIGNob2ljZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0Yy4pLiAgVGhpcyBmb3IgaW5zdGFuY2UgY2FuIGJlIHVzZWQgdG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50IGNhc2UgaW5zZW5zaXRpdmUgYmVoYXZpb3IuCiAgICA6cGFyYW0gY29sb3I6IGNvbnRyb2xzIGlmIHRoZSB0ZXJtaW5hbCBzdXBwb3J0cyBBTlNJIGNvbG9ycyBvciBub3QuICBUaGUKICAgICAgICAgICAgICAgICAgZGVmYXVsdCBpcyBhdXRvZGV0ZWN0aW9uLiAgVGhpcyBpcyBvbmx5IG5lZWRlZCBpZiBBTlNJCiAgICAgICAgICAgICAgICAgIGNvZGVzIGFyZSB1c2VkIGluIHRleHRzIHRoYXQgQ2xpY2sgcHJpbnRzIHdoaWNoIGlzIGJ5CiAgICAgICAgICAgICAgICAgIGRlZmF1bHQgbm90IHRoZSBjYXNlLiAgVGhpcyBmb3IgaW5zdGFuY2Ugd291bGQgYWZmZWN0CiAgICAgICAgICAgICAgICAgIGhlbHAgb3V0cHV0LgogICAgOnBhcmFtIHNob3dfZGVmYXVsdDogU2hvdyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgY29tbWFuZHMuIElmIHRoaXMKICAgICAgICB2YWx1ZSBpcyBub3Qgc2V0LCBpdCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgZnJvbSB0aGUgcGFyZW50CiAgICAgICAgY29udGV4dC4gYGBDb21tYW5kLnNob3dfZGVmYXVsdGBgIG92ZXJyaWRlcyB0aGlzIGRlZmF1bHQgZm9yIHRoZQogICAgICAgIHNwZWNpZmljIGNvbW1hbmQuCgogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiA4LjEKICAgICAgICBUaGUgYGBzaG93X2RlZmF1bHRgYCBwYXJhbWV0ZXIgaXMgb3ZlcnJpZGRlbiBieQogICAgICAgIGBgQ29tbWFuZC5zaG93X2RlZmF1bHRgYCwgaW5zdGVhZCBvZiB0aGUgb3RoZXIgd2F5IGFyb3VuZC4KCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDguMAogICAgICAgIFRoZSBgYHNob3dfZGVmYXVsdGBgIHBhcmFtZXRlciBkZWZhdWx0cyB0byB0aGUgdmFsdWUgZnJvbSB0aGUKICAgICAgICBwYXJlbnQgY29udGV4dC4KCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDcuMQogICAgICAgQWRkZWQgdGhlIGBgc2hvd19kZWZhdWx0YGAgcGFyYW1ldGVyLgoKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogNC4wCiAgICAgICAgQWRkZWQgdGhlIGBgY29sb3JgYCwgYGBpZ25vcmVfdW5rbm93bl9vcHRpb25zYGAsIGFuZAogICAgICAgIGBgbWF4X2NvbnRlbnRfd2lkdGhgYCBwYXJhbWV0ZXJzLgoKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4wCiAgICAgICAgQWRkZWQgdGhlIGBgYWxsb3dfZXh0cmFfYXJnc2BgIGFuZCBgYGFsbG93X2ludGVyc3BlcnNlZF9hcmdzYGAKICAgICAgICBwYXJhbWV0ZXJzLgoKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi4wCiAgICAgICAgQWRkZWQgdGhlIGBgcmVzaWxpZW50X3BhcnNpbmdgYCwgYGBoZWxwX29wdGlvbl9uYW1lc2BgLCBhbmQKICAgICAgICBgYHRva2VuX25vcm1hbGl6ZV9mdW5jYGAgcGFyYW1ldGVycy4KICAgIHIVAAAA2g9mb3JtYXR0ZXJfY2xhc3NORnIsAAAAKRFyNAAAANoGcGFyZW502glpbmZvX25hbWXaA29iatoSYXV0b19lbnZ2YXJfcHJlZml42gtkZWZhdWx0X21hcNoOdGVybWluYWxfd2lkdGjaEW1heF9jb250ZW50X3dpZHRo2hFyZXNpbGllbnRfcGFyc2luZ9oQYWxsb3dfZXh0cmFfYXJnc9oXYWxsb3dfaW50ZXJzcGVyc2VkX2FyZ3PaFmlnbm9yZV91bmtub3duX29wdGlvbnPaEWhlbHBfb3B0aW9uX25hbWVz2hR0b2tlbl9ub3JtYWxpemVfZnVuY9oFY29sb3LaDHNob3dfZGVmYXVsdHIw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IHVzYWdlIG91dHB1dC4KCiAgICAgICAgVG8gcXVpY2tseSBjdXN0b21pemUgdGhlIGZvcm1hdHRlciBjbGFzcyB1c2VkIHdpdGhvdXQgb3ZlcnJpZGluZwogICAgICAgIHRoaXMgbWV0aG9kLCBzZXQgdGhlIDphdHRyOmBmb3JtYXR0ZXJfY2xhc3NgIGF0dHJpYnV0ZS4KCiAgICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiA4LjAKICAgICAgICAgICAgQWRkZWQgdGhlIDphdHRyOmBmb3JtYXR0ZXJfY2xhc3NgIGF0dHJpYnV0ZS4KICAgICAgICApAtoFd2lkdGjaCW1heF93aWR0aCkDcnAAAABydgAAAHJ3AAAAcpUAAAByOwAAAHI7AAAAcjwAAADaDm1ha2VfZm9ybWF0dGVyEgIAAHMGAAAAAAoEAQj/ehZDb250ZXh0Lm1ha2VfZm9ybWF0dGVyKQLaD2NvbnRleHRfbWFuYWdlcnIwAAAAYwIAAAAAAAAAAAAAAAIAAAADAAAAQwAAAHMMAAAAfABqAKABfAGhAVMAKQFh2QMAAFJlZ2lzdGVyIGEgcmVzb3VyY2UgYXMgaWYgaXQgd2VyZSB1c2VkIGluIGEgYGB3aXRoYGAKICAgICAgICBzdGF0ZW1lbnQuIFRoZSByZXNvdXJjZSB3aWxsIGJlIGNsZWFuZWQgdXAgd2hlbiB0aGUgY29udGV4dCBpcwogICAgICAgIHBvcHBlZC4KCiAgICAgICAgVXNlcyA6bWV0aDpgY29udGV4dGxpYi5FeGl0U3RhY2suZW50ZXJfY29udGV4dGAuIEl0IGNhbGxzIHRoZQogICAgICAgIHJlc291cmNlJ3MgYGBfX2VudGVyX18oKWBgIG1ldGhvZCBhbmQgcmV0dXJucyB0aGUgcmVzdWx0LiBXaGVuCiAgICAgICAgdGhlIGNvbnRleHQgaXMgcG9wcGVkLCBpdCBjbG9zZXMgdGhlIHN0YWNrLCB3aGljaCBjYWxscyB0aGUKICAgICAgICByZXNvdXJjZSdzIGBgX19leGl0X18oKWBgIG1ldGhvZC4KCiAgICAgICAgVG8gcmVnaXN0ZXIgYSBjbGVhbnVwIGZ1bmN0aW9uIGZvciBzb21ldGhpbmcgdGhhdCBpc24ndCBhCiAgICAgICAgY29udGV4dCBtYW5hZ2VyLCB1c2UgOm1ldGg6YGNhbGxfb25fY2xvc2VgLiBPciB1c2Ugc29tZXRoaW5nCiAgICAgICAgZnJvbSA6bW9kOmBjb250ZXh0bGliYCB0byB0dXJuIGl0IGludG8gYSBjb250ZXh0IG1hbmFnZXIgZmlyc3QuCgogICAgICAgIC4uIGNvZGUtYmxvY2s6OiBweXRob24KCiAgICAgICAgICAgIEBjbGljay5ncm91cCgpCiAgICAgICAgICAgIEBjbGljay5vcHRpb24oIi0tbmFtZSIpCiAgICAgICAgICAgIEBjbGljay5wYXNzX2NvbnRleHQKICAgICAgICAgICAgZGVmIGNsaShjdHgpOgogICAgICAgICAgICAgICAgY3R4Lm9iaiA9IGN0eC53aXRoX3Jlc291cmNlKGNvbm5lY3RfZGIobmFtZSkpCgogICAgICAgIDpwYXJhbSBjb250ZXh0X21hbmFnZXI6IFRoZSBjb250ZXh0IG1hbmFnZXIgdG8gZW50ZXIuCiAgICAgICAgOnJldHVybjogV2hhdGV2ZXIgYGBjb250ZXh0X21hbmFnZXIuX19lbnRlcl9fKClgYCByZXR1cm5zLgoKICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiA4LjAKICAgICAgICApAnKQAAAA2g1lbnRlcl9jb250ZXh0KQJykQAAAHKkAAAAcjsAAAByOwAAAHI8AAAA2g13aXRoX3Jlc291cmNlIAIAAHMCAAAAABt6FUNvbnRleHQud2l0aF9yZXNvdXJjZS6pAtoBZnIwAAAAYwIAAAAAAAAAAAAAAAIAAAADAAAAQwAAAHMMAAAAfABqAKABfAGhAVMAKQFhhQEAAFJlZ2lzdGVyIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIGNvbnRleHQgdGVhcnMgZG93bi4KCiAgICAgICAgVGhpcyBjYW4gYmUgdXNlZCB0byBjbG9zZSByZXNvdXJjZXMgb3BlbmVkIGR1cmluZyB0aGUgc2NyaXB0CiAgICAgICAgZXhlY3V0aW9uLiBSZXNvdXJjZXMgdGhhdCBzdXBwb3J0IFB5dGhvbidzIGNvbnRleHQgbWFuYWdlcgogICAgICAgIHByb3RvY29sIHdoaWNo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dW1lbnRzIGFyZSBmb3J3YXJkZWQgYXMgd2VsbCBidXQgcHJvcGVyIGNsaWNrIHBhcmFtZXRlcnMKICAgICAgICAgICAgKG9wdGlvbnMgYW5kIGNsaWNrIGFyZ3VtZW50cykgbXVzdCBiZSBrZXl3b3JkIGFyZ3VtZW50cyBhbmQgQ2xpY2sKICAgICAgICAgICAgd2lsbCBmaWxsIGluIGRlZmF1bHRzLgoKICAgICAgICBOb3RlIHRoYXQgYmVmb3JlIENsaWNrIDMuMiBrZXl3b3JkIGFyZ3VtZW50cyB3ZXJlIG5vdCBwcm9wZXJseSBmaWxsZWQKICAgICAgICBpbiBhZ2FpbnN0IHRoZSBpbnRlbnRpb24gb2YgdGhpcyBjb2RlIGFuZCBubyBjb250ZXh0IHdhcyBjcmVhdGVkLiAgRm9yCiAgICAgICAgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGNoYW5nZSBhbmQgd2h5IGl0IHdhcyBkb25lIGluIGEgYnVnZml4CiAgICAgICAgcmVsZWFzZSBzZWUgOnJlZjpgdXBncmFkZS10by0zLjJgLgoKICAgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDguMAogICAgICAgICAgICBBbGwgYGBrd2FyZ3NgYCBhcmUgdHJhY2tlZCBpbiA6YXR0cjpgcGFyYW1zYCBzbyB0aGV5IHdpbGwgYmUKICAgICAgICAgICAgcGFzc2VkIGlmIDptZXRoOmBmb3J3YXJkYCBpcyBjYWxsZWQgYXQgbXVsdGlwbGUgbGV2ZWxzLgogICAgICAgIE56P1RoZSBnaXZlbiBjb21tYW5kIGRvZXMgbm90IGhhdmUgYSBjYWxsYmFjayB0aGF0IGNhbiBiZSBpbnZva2VkLikMckMAAAByLAAAAHKpAAAA2glUeXBlRXJyb3JyyAAAAHKDAAAAcjoAAADaDGV4cG9zZV92YWx1ZdoPdHlwZV9jYXN0X3ZhbHVl2gtnZXRfZGVmYXVsdNoGdXBkYXRlclMAAAApB9oOX0NvbnRleHRfX3NlbGZyyQAAAHKEAAAAcsoAAABaCW90aGVyX2NtZHIuAAAAclEAAAByOwAAAHI7AAAAcjwAAADaBmludm9rZcUCAABzJAAAAAAZCgEEAgoBAgEC/wYEBgIKAgoB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ICAgICBpbnZva2UgdGhlIGFjdHVhbCBjb21tYW5kIGNhbGxiYWNrIHRob3VnaC4KCiAgICAgICAgVG8gcXVpY2tseSBjdXN0b21pemUgdGhlIGNvbnRleHQgY2xhc3MgdXNlZCB3aXRob3V0IG92ZXJyaWRpbmcKICAgICAgICB0aGlzIG1ldGhvZCwgc2V0IHRoZSA6YXR0cjpgY29udGV4dF9jbGFzc2AgYXR0cmlidXRlLgoKICAgICAgICA6cGFyYW0gaW5mb19uYW1lOiB0aGUgaW5mbyBuYW1lIGZvciB0aGlzIGludm9jYXRpb24uICBHZW5lcmFsbHkgdGhpcwogICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHRoZSBtb3N0IGRlc2NyaXB0aXZlIG5hbWUgZm9yIHRoZSBzY3JpcHQgb3IKICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLiAgRm9yIHRoZSB0b3BsZXZlbCBzY3JpcHQgaXQncyB1c3VhbGx5CiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG5hbWUgb2YgdGhlIHNjcmlwdCwgZm9yIGNvbW1hbmRzIGJlbG93IGl0IGl0J3MKICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbmFtZSBvZiB0aGUgY29tbWFuZC4KICAgICAgICA6cGFyYW0gYXJnczogdGhlIGFyZ3VtZW50cyB0byBwYXJzZSBhcyBsaXN0IG9mIHN0cmluZ3MuCiAgICAgICAgOnBhcmFtIHBhcmVudDogdGhlIHBhcmVudCBjb250ZXh0IGlmIGF2YWlsYWJsZS4KICAgICAgICA6cGFyYW0gZXh0cmE6IGV4dHJhIGtleXdvcmQgYXJndW1lbnRzIGZvcndhcmRlZCB0byB0aGUgY29udGV4dAogICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3IuCgogICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogOC4wCiAgICAgICAgICAgIEFkZGVkIHRoZSA6YXR0cjpgY29udGV4dF9jbGFzc2AgYXR0cmlidXRlLgogICAgICAgIHLHAAAARqkBcp4AAABOKQVy5wAAANoFaXRlbXNy5gAAAHKgAAAA2gpwYXJz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AXQAag5kBI0CAQB0AKAKZAKhAQEAWQBuAjAAZAFTACkGYdsIAABUaGlzIGlzIHRoZSB3YXkgdG8gaW52b2tlIGEgc2NyaXB0IHdpdGggYWxsIHRoZSBiZWxscyBhbmQKICAgICAgICB3aGlzdGxlcyBhcyBhIGNvbW1hbmQgbGluZSBhcHBsaWNhdGlvbi4gIFRoaXMgd2lsbCBhbHdheXMgdGVybWluYXRlCiAgICAgICAgdGhlIGFwcGxpY2F0aW9uIGFmdGVyIGEgY2FsbC4gIElmIHRoaXMgaXMgbm90IHdhbnRlZCwgYGBTeXN0ZW1FeGl0YGAKICAgICAgICBuZWVkcyB0byBiZSBjYXVnaHQuCgogICAgICAgIFRoaXMgbWV0aG9kIGlzIGFsc28gYXZhaWxhYmxlIGJ5IGRpcmVjdGx5IGNhbGxpbmcgdGhlIGluc3RhbmNlIG9mCiAgICAgICAgYSA6Y2xhc3M6YENvbW1hbmRgLgoKICAgICAgICA6cGFyYW0gYXJnczogdGhlIGFyZ3VtZW50cyB0aGF0IHNob3VsZCBiZSB1c2VkIGZvciBwYXJzaW5nLiAgSWYgbm90CiAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVkLCBgYHN5cy5hcmd2WzE6XWBgIGlzIHVzZWQuCiAgICAgICAgOnBhcmFtIHByb2dfbmFtZTogdGhlIHByb2dyYW0gbmFtZSB0aGF0IHNob3VsZCBiZSB1c2VkLiAgQnkgZGVmYXVsdAogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBwcm9ncmFtIG5hbWUgaXMgY29uc3RydWN0ZWQgYnkgdGFraW5nIHRoZSBmaWxlCiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSBmcm9tIGBgc3lzLmFyZ3ZbMF1gYC4KICAgICAgICA6cGFyYW0gY29tcGxldGVfdmFyOiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgdGhhdCBjb250cm9scyB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNoIGNvbXBsZXRpb24gc3VwcG9ydC4gIFRoZSBkZWZhdWx0IGlzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGAiXzxwcm9nX25hbWU+X0NPTVBMRVRFImBgIHdpdGggcHJvZ19uYW1lIGluCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBwZXJjYXNlLgogICAgICAgIDpwYXJhbSBzdGFuZGFsb25lX21vZGU6IHRoZSBkZWZhdWx0IGJlaGF2aW9yIGlzIHRvIGludm9rZSB0aGUgc2NyaXB0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gc3RhbmRhbG9uZSBtb2RlLiAgQ2xpY2sgd2lsbCB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlIGV4Y2VwdGlvbnMgYW5kIGNvbnZlcnQgdGhlbSBpbnRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgbWVzc2FnZXMgYW5kIHRoZSBmdW5jdGlvbiB3aWxsIG5ldmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1dCBzaHV0IGRvd24gdGhlIGludGVycHJldGVyLiAgSWYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGlzIHNldCB0byBgRmFsc2VgIHRoZXkgd2lsbCBiZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BhZ2F0ZWQgdG8gdGhlIGNhbGxlciBhbmQgdGhlIHJldHVybgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIG9mIHRoaXMgZnVuY3Rpb24gaXMgdGhlIHJldHVybiB2YWx1ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIDptZXRoOmBpbnZva2VgLgogICAgICAgIDpwYXJhbSB3aW5kb3dzX2V4cGFuZF9hcmdzOiBFeHBhbmQgZ2xvYiBwYXR0ZXJucywgdXNlciBkaXIsIGFuZAogICAgICAgICAgICBlbnYgdmFycyBpbiBjb21tYW5kIGxpbmUgYXJncyBvbiBXaW5kb3dzLgogICAgICAgIDpwYXJhbSBleHRyYTogZXh0cmEga2V5d29yZCBhcmd1bWVudHMgYXJlIGZvcndhcmRlZCB0byB0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C5wCZC9kMIQEWiBlDWUGZQRqCmQxGQBkMpwDhwBmAWQzZDSEDFohhwAEAFoiUwApN3IsAAAAYe4HAABDb21tYW5kcyBhcmUgdGhlIGJhc2ljIGJ1aWxkaW5nIGJsb2NrIG9mIGNvbW1hbmQgbGluZSBpbnRlcmZhY2VzIGluCiAgICBDbGljay4gIEEgYmFzaWMgY29tbWFuZCBoYW5kbGVzIGNvbW1hbmQgbGluZSBwYXJzaW5nIGFuZCBtaWdodCBkaXNwYXRjaAogICAgbW9yZSBwYXJzaW5nIHRvIGNvbW1hbmRzIG5lc3RlZCBiZWxvdyBpdC4KCiAgICA6cGFyYW0gbmFtZTogdGhlIG5hbWUgb2YgdGhlIGNvbW1hbmQgdG8gdXNlIHVubGVzcyBhIGdyb3VwIG92ZXJyaWRlcyBpdC4KICAgIDpwYXJhbSBjb250ZXh0X3NldHRpbmdzOiBhbiBvcHRpb25hbCBkaWN0aW9uYXJ5IHdpdGggZGVmYXVsdHMgdGhhdCBhcmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzZWQgdG8gdGhlIGNvbnRleHQgb2JqZWN0LgogICAgOnBhcmFtIGNhbGxiYWNrOiB0aGUgY2FsbGJhY2sgdG8gaW52b2tlLiAgVGhpcyBpcyBvcHRpb25hbC4KICAgIDpwYXJhbSBwYXJhbXM6IHRoZSBwYXJhbWV0ZXJzIHRvIHJlZ2lzdGVyIHdpdGggdGhpcyBjb21tYW5kLiAgVGhpcyBjYW4KICAgICAgICAgICAgICAgICAgIGJlIGVpdGhlciA6Y2xhc3M6YE9wdGlvbmAgb3IgOmNsYXNzOmBBcmd1bWVudGAgb2JqZWN0cy4KICAgIDpwYXJhbSBoZWxwOiB0aGUgaGVscCBzdHJpbmcgdG8gdXNlIGZvciB0aGlzIGNvbW1hbmQuCiAgICA6cGFyYW0gZXBpbG9nOiBsaWtlIHRoZSBoZWxwIHN0cmluZyBidXQgaXQncyBwcmludGVkIGF0IHRoZSBlbmQgb2YgdGhlCiAgICAgICAgICAgICAgICAgICBoZWxwIHBhZ2UgYWZ0ZXIgZXZlcnl0aGluZyBlbHNlLgogICAgOnBhcmFtIHNob3J0X2hlbHA6IHRoZSBzaG9ydCBoZWxwIHRvIHVzZSBmb3IgdGhpcyBjb21tYW5kLiAgVGhpcyBpcwogICAgICAgICAgICAgICAgICAgICAgIHNob3duIG9uIHRoZSBjb21tYW5kIGxpc3Rpbmcgb2YgdGhlIHBhcmVudCBjb21tYW5kLgogICAgOnBhcmFtIGFkZF9oZWxwX29wdGlvbjogYnkgZGVmYXVsdCBlYWNoIGNvbW1hbmQgcmVnaXN0ZXJzIGEgYGAtLWhlbHBgYAogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uLiAgVGhpcyBjYW4gYmUgZGlzYWJsZWQgYnkgdGhpcyBwYXJhbWV0ZXIuCiAgICA6cGFyYW0gbm9fYXJnc19pc19oZWxwOiB0aGlzIGNvbnRyb2xzIHdoYXQgaGFwcGVucyBpZiBubyBhcmd1bWVudHMgYXJlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlZC4gIFRoaXMgb3B0aW9uIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBlbmFibGVkIHRoaXMgd2lsbCBhZGQgYGAtLWhlbHBgYCBhcyBhcmd1bWVudAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm8gYXJndW1lbnRzIGFyZSBwYXNzZWQKICAgIDpwYXJhbSBoaWRkZW46IGhpZGUgdGhpcyBjb21tYW5kIGZyb20gaGVscCBvdXRwdXRzLgoKICAgIDpwYXJhbSBkZXByZWNhdGVkOiBpc3N1ZXMgYSBtZXNzYWdlIGluZGljYXRpbmcgdGhhdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjb21tYW5kIGlzIGRlcHJlY2F0ZWQuCgogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiA4LjEKICAgICAgICBgYGhlbHBgYCwgYGBlcGlsb2dgYCwgYW5kIGBgc2hvcnRfaGVscGBgIGFyZSBzdG9yZWQgdW5wcm9jZXNzZWQsCiAgICAgICAgYWxsIGZvcm1hdHRpbmcgaXMgZG9uZSB3aGVuIG91dHB1dHRpbmcgaGVscCB0ZXh0LCBub3QgYXQgaW5pdCwKICAgICAgICBhbmQgaXMgZG9u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hAxaE2QnZQllBmoKZRRnAWUUZgIZAGQRnAJkEmQThAVaFWUNZRJkBGQOnANkFGQVhARaFmUNZQZqEGUIGQBlBmoQZQgZAGQWnAOHAGYBZBdkGIQMWhdlDWUGagtkCZwChwBmAWQZZBqEDFoYZQ1lBmoQZQgZAGUGahllBmoHZQgZAGUGagdlGhkAZQZqEGUIGQBmAxkAZBacA2QbZByEBFobZQ1lCGUGagdlGhkAZB2cA2QeZB+EBFocZQ1lBmoQZQgZAGQJnAJkIGQhhARaHWUNZQhlBmoQZCIZAGQjnAOHAGYBZCRkJYQMWh6HAAQAWh9TACkocjMAAABhWQUAAEEgbXVsdGkgY29tbWFuZCBpcyB0aGUgYmFzaWMgaW1wbGVtZW50YXRpb24gb2YgYSBjb21tYW5kIHRoYXQKICAgIGRpc3BhdGNoZXMgdG8gc3ViY29tbWFuZHMuICBUaGUgbW9zdCBjb21tb24gdmVyc2lvbiBpcyB0aGUKICAgIDpjbGFzczpgR3JvdXBgLgoKICAgIDpwYXJhbSBpbnZva2Vfd2l0aG91dF9jb21tYW5kOiB0aGlzIGNvbnRyb2xzIGhvdyB0aGUgbXVsdGkgY29tbWFuZCBpdHNlbGYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBpbnZva2VkLiAgQnkgZGVmYXVsdCBpdCdzIG9ubHkgaW52b2tlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGEgc3ViY29tbWFuZCBpcyBwcm92aWRlZC4KICAgIDpwYXJhbSBub19hcmdzX2lzX2hlbHA6IHRoaXMgY29udHJvbHMgd2hhdCBoYXBwZW5zIGlmIG5vIGFyZ3VtZW50cyBhcmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVkLiAgVGhpcyBvcHRpb24gaXMgZW5hYmxlZCBieSBkZWZhdWx0IGlmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgaW52b2tlX3dpdGhvdXRfY29tbWFuZGAgaXMgZGlzYWJsZWQgb3IgZGlzYWJsZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGl0J3MgZW5hYmxlZC4gIElmIGVuYWJsZWQgdGhpcyB3aWxsIGFkZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYGAtLWhlbHBgYCBhcyBhcmd1bWVudCBpZiBubyBhcmd1bWVudHMgYXJlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzZWQuCiAgICA6cGFyYW0gc3ViY29tbWFuZF9tZXRhdmFyOiB0aGUgc3RyaW5nIHRoYXQgaXMgdXNlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gaW5kaWNhdGUgdGhlIHN1YmNvbW1hbmQgcGxhY2UuCiAgICA6cGFyYW0gY2hhaW46IGlmIHRoaXMgaXMgc2V0IHRvIGBUcnVlYCBjaGFpbmluZyBvZiBtdWx0aXBsZSBzdWJjb21tYW5kcwogICAgICAgICAgICAgICAgICBpcyBlbmFibGVkLiAgVGhpcyByZXN0cmljdHMgdGhlIGZvcm0gb2YgY29tbWFuZHMgaW4gdGhhdAogICAgICAgICAgICAgICAgICB0aGV5IGNhbm5vdCBoYXZlIG9wdGlvbmFsIGFyZ3VtZW50cyBidXQgaXQgYWxsb3dzCiAgICAgICAgICAgICAgICAgIG11bHRpcGxlIGNvbW1hbmRzIHRvIGJlIGNoYWluZWQgdG9nZXRoZXIuCiAgICA6cGFyYW0gcmVzdWx0X2NhbGxiYWNrOiBUaGUgcmVzdWx0IGNhbGxiYWNrIHRvIGF0dGFjaCB0byB0aGlzIG11bHRpCiAgICAgICAgY29tbWFuZC4gVGhpcyBjYW4gYmUgc2V0IG9yIGNoYW5nZWQgbGF0ZXIgd2l0aCB0aGUKICAgICAgICA6bWV0aDpgcmVzdWx0X2NhbGxiYWNrYCBkZWNvcmF0b3IuCiAgICBURk4uKQhyOgAAANoWaW52b2tlX3dpdGhvdXRfY29tbWFuZHInAQAA2hJzdWJjb21tYW5kX21ldGF2YXJyQgAAANoPcmVzdWx0X2NhbGxiYWNr2gVhdHRyc3IwAAAAYwcAAAAAAAAAAAAAAAkAAAAEAAAACwAAAHOEAAAAdACDAGoBfAFmAWkAfAekAY4BAQB8A2QAdQByInwCDAB9A3wDfABfAnwCfABfA3wEZAB1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bmBccyBvciA6Y2xhc3M6YEFyZ3VtZW50YFxzLiAgT3RoZXIgc3ViY2xhc3NlcyBhcmUgY3VycmVudGx5CiAgICBub3Qgc3VwcG9ydGVkIGJ5IGRlc2lnbiBhcyBzb21lIG9mIHRoZSBpbnRlcm5hbHMgZm9yIHBhcnNpbmcgYXJlCiAgICBpbnRlbnRpb25hbGx5IG5vdCBmaW5hbGl6ZWQuCgogICAgU29tZSBzZXR0aW5ncyBhcmUgc3VwcG9ydGVkIGJ5IGJvdGggb3B0aW9ucyBhbmQgYXJndW1lbnRzLgoKICAgIDpwYXJhbSBwYXJhbV9kZWNsczogdGhlIHBhcmFtZXRlciBkZWNsYXJhdGlvbnMgZm9yIHRoaXMgb3B0aW9uIG9yCiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50LiAgVGhpcyBpcyBhIGxpc3Qgb2YgZmxhZ3Mgb3IgYXJndW1lbnQKICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXMuCiAgICA6cGFyYW0gdHlwZTogdGhlIHR5cGUgdGhhdCBzaG91bGQgYmUgdXNlZC4gIEVpdGhlciBhIDpjbGFzczpgUGFyYW1UeXBlYAogICAgICAgICAgICAgICAgIG9yIGEgUHl0aG9uIHR5cGUuICBUaGUgbGF0ZXIgaXMgY29udmVydGVkIGludG8gdGhlIGZvcm1lcgogICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgaWYgc3VwcG9ydGVkLgogICAgOnBhcmFtIHJlcXVpcmVkOiBjb250cm9scyBpZiB0aGlzIGlzIG9wdGlvbmFsIG9yIG5vdC4KICAgIDpwYXJhbSBkZWZhdWx0OiB0aGUgZGVmYXVsdCB2YWx1ZSBpZiBvbWl0dGVkLiAgVGhpcyBjYW4gYWxzbyBiZSBhIGNhbGxhYmxlLAogICAgICAgICAgICAgICAgICAgIGluIHdoaWNoIGNhc2UgaXQncyBpbnZva2VkIHdoZW4gdGhlIGRlZmF1bHQgaXMgbmVlZGVkCiAgICAgICAgICAgICAgICAgICAgd2l0aG91dCBhbnkgYXJndW1lbnRzLgogICAgOnBhcmFtIGNhbGxiYWNrOiBBIGZ1bmN0aW9uIHRvIGZ1cnRoZXIgcHJvY2VzcyBvciB2YWxpZGF0ZSB0aGUgdmFsdWUKICAgICAgICBhZnRlciB0eXBlIGNvbnZlcnNpb24uIEl0IGlzIGNhbGxlZCBhcyBgYGYoY3R4LCBwYXJhbSwgdmFsdWUpYGAKICAgICAgICBhbmQgbXVzdCByZXR1cm4gdGhlIHZhbHVlLiBJdCBpcyBjYWxsZWQgZm9yIGFsbCBzb3VyY2VzLAogICAgICAgIGluY2x1ZGluZyBwcm9tcHRzLgogICAgOnBhcmFtIG5hcmdzOiB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBtYXRjaC4gIElmIG5vdCBgYDFgYCB0aGUgcmV0dXJuCiAgICAgICAgICAgICAgICAgIHZhbHVlIGlzIGEgdHVwbGUgaW5zdGVhZCBvZiBzaW5nbGUgdmFsdWUuICBUaGUgZGVmYXVsdCBmb3IKICAgICAgICAgICAgICAgICAgbmFyZ3MgaXMgYGAxYGAgKGV4Y2VwdCBpZiB0aGUgdHlwZSBpcyBhIHR1cGxlLCB0aGVuIGl0J3MKICAgICAgICAgICAgICAgICAgdGhlIGFyaXR5IG9mIHRoZSB0dXBsZSkuIElmIGBgbmFyZ3M9LTFgYCwgYWxsIHJlbWFpbmluZwogICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzIGFyZSBjb2xsZWN0ZWQuCiAgICA6cGFyYW0gbWV0YXZhcjogaG93IHRoZSB2YWx1ZSBpcyByZXByZXNlbnRlZCBpbiB0aGUgaGVscCBwYWdlLgogICAgOnBhcmFtIGV4cG9zZV92YWx1ZTogaWYgdGhpcyBpcyBgVHJ1ZWAgdGhlbiB0aGUgdmFsdWUgaXMgcGFzc2VkIG9ud2FyZHMKICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBjb21tYW5kIGNhbGxiYWNrIGFuZCBzdG9yZWQgb24gdGhlIGNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlcndpc2UgaXQncyBza2lwcGVkLgogICAgOnBhcmFtIGlzX2VhZ2VyOiBlYWdlciB2YWx1ZXMgYXJlIHByb2Nlc3NlZCBiZWZvcmUgbm9uIGVhZ2VyIG9uZXMuICBUaGlzCiAgICAgICAgICAgICAgICAgICAgIHNob3VsZCBub3QgYmUgc2V0IGZvciBhcmd1bWVudHMgb3IgaXQgd2lsbCBpbnZlcnNlIHRoZQogICAgICAgICAgICAgICAgICAgICBvcmRlciBvZiBwcm9jZXNzaW5nLgogICAgOnBhcmFtIGVudnZhcjogYSBzdHJpbmcgb3IgbGlzdCBvZiBzdHJpbmdzIHRoYXQgYXJlIGVudmlyb25tZW50IHZhcmlhYmxlcwogICAgICAgICAgICAgICAgICAgdGhhdCBzaG91bGQgYmUgY2hlY2tlZC4KICAgIDpwYXJhbSBzaGVsbF9jb21wbGV0ZTogQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgY3VzdG9tIHNoZWxsCiAgICAgICAgY29tcGxldGlvbnMuIFVzZWQgaW5zdGVhZCBvZiB0aGUgcGFyYW0ncyB0eXBlIGNvbXBsZXRpb24gaWYKICAgICAgICBnaXZlbi4gVGFrZXMgYGBjdHgsIHBhcmFtLCBpbmNvbXBsZXRlYGAgYW5kIG11c3QgcmV0dXJuIGEgbGlzdAogICAgICAgIG9mIDpjbGFzczpgfmNsaWNrLnNoZWxsX2NvbXBsZXRpb24uQ29tcGxldGlvbkl0ZW1gIG9yIGEgbGlzdCBvZgogICAgICAgIHN0cmluZ3MuCgogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiA4LjAKICAgICAgICBgYHByb2Nlc3NfdmFsdWVgYCB2YWxpZGF0ZXMgcmVxdWlyZWQgcGFyYW1ldGVycyBhbmQgYm91bmRlZAogICAgICAgIGBgbmFyZ3NgYCwgYW5kIGludm9rZXMgdGhlIHBhcmFtZXRlciBjYWxsYmFjayBiZWZvcmUgcmV0dXJuaW5nCiAgICAgICAgdGhlIHZhbHVlLiBUaGlzIGFsbG93cyB0aGUgY2FsbGJhY2sgdG8gdmFsaWRhdGUgcHJvbXB0cy4KICAgICAgICBgYGZ1bGxfcHJvY2Vzc192YWx1ZWBgIGlzIHJlbW92ZWQuCgogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiA4LjAKICAgICAgICBgYGF1dG9jb21wbGV0aW9uYGAgaXMgcmVuYW1lZCB0byBgYHNoZWxsX2NvbXBsZXRlYGAgYW5kIGhhcyBuZXcKICAgICAgICBzZW1hbnRpY3MgZGVzY3JpYmVkIGFib3ZlLiBUaGUgb2xkIG5hbWUgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbAogICAgICAgIGJlIHJlbW92ZWQgaW4gOC4xLCB1bnRpbCB0aGVuIGl0IHdpbGwgYmUgd3JhcHBlZCB0byBtYXRjaCB0aGUKICAgICAgICBuZXcgcmVxdWlyZW1lbnRzLgoKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogOC4wCiAgICAgICAgRm9yIGBgbXVsdGlwbGU9VHJ1ZSwgbmFyZ3M+MWBgLCB0aGUgZGVmYXVsdCBtdXN0IGJlIGEgbGlzdCBvZgogICAgICAgIHR1cGxlcy4KCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDguMAogICAgICAgIFNldHRpbmcgYSBkZWZhdWx0IGlzIG5vIGxvbmdlciByZXF1aXJlZCBmb3IgYGBuYXJncz4xYGAsIGl0IHdpbGwKICAgICAgICBkZWZhdWx0IHRvIGBgTm9uZWBgLiBgYG11bHRpcGxlPVRydWVgYCBvciBgYG5hcmdzPS0xYGAgd2lsbAogICAgICAgIGRlZmF1bHQgdG8gYGAoKWBgLgoKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogNy4xCiAgICAgICAgRW1wdHkgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBpZ25vcmVkIHJhdGhlciB0aGFuIHRha2luZyB0aGUKICAgICAgICBlbXB0eSBzdHJpbmcgdmFsdWUuIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgZm9yIHNjcmlwdHMgdG8gY2xlYXIKICAgICAgICB2YXJpYWJsZXMgaWYgdGhleSBjYW4ndCB1bnNldCB0aGVtLgoKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMi4wCiAgICAgICAgQ2hhbmdlZCBzaWduYXR1cmUgZm9yIHBhcmFtZXRlciBjYWxsYmFjayB0byBhbHNvIGJlIHBhc3NlZCB0aGUKICAgICAgICBwYXJhbWV0ZXIuIFRoZSBvbGQgY2FsbGJhY2sgZm9ybWF0IHdpbGwgc3RpbGwgd29yaywgYnV0IGl0IHdpbGwKICAgICAgICByYWlzZSBhIHdhcm5pbmcgdG8gZ2l2ZSB5b3UgYSBjaGFuY2Ug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YXVsdDogU2hvdyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhpcyBvcHRpb24gaW4gaXRzCiAgICAgICAgaGVscCB0ZXh0LiBWYWx1ZXMgYXJlIG5vdCBzaG93biBieSBkZWZhdWx0LCB1bmxlc3MKICAgICAgICA6YXR0cjpgQ29udGV4dC5zaG93X2RlZmF1bHRgIGlzIGBgVHJ1ZWBgLiBJZiB0aGlzIHZhbHVlIGlzIGEKICAgICAgICBzdHJpbmcsIGl0IHNob3dzIHRoYXQgc3RyaW5nIGluIHBhcmVudGhlc2VzIGluc3RlYWQgb2YgdGhlCiAgICAgICAgYWN0dWFsIHZhbHVlLiBUaGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIGR5bmFtaWMgb3B0aW9ucy4KICAgICAgICBGb3Igc2luZ2xlIG9wdGlvbiBib29sZWFuIGZsYWdzLCB0aGUgZGVmYXVsdCByZW1haW5zIGhpZGRlbiBpZgogICAgICAgIGl0cyB2YWx1ZSBpcyBgYEZhbHNlYGAuCiAgICA6cGFyYW0gc2hvd19lbnZ2YXI6IENvbnRyb2xzIGlmIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIHNob3VsZCBiZQogICAgICAgIHNob3duIG9uIHRoZSBoZWxwIHBhZ2UuIE5vcm1hbGx5LCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIG5vdAogICAgICAgIHNob3duLgogICAgOnBhcmFtIHByb21wdDogSWYgc2V0IHRvIGBgVHJ1ZWBgIG9yIGEgbm9uIGVtcHR5IHN0cmluZyB0aGVuIHRoZQogICAgICAgIHVzZXIgd2lsbCBiZSBwcm9tcHRlZCBmb3IgaW5wdXQuIElmIHNldCB0byBgYFRydWVgYCB0aGUgcHJvbXB0CiAgICAgICAgd2lsbCBiZSB0aGUgb3B0aW9uIG5hbWUgY2FwaXRhbGl6ZWQuCiAgICA6cGFyYW0gY29uZmlybWF0aW9uX3Byb21wdDogUHJvbXB0IGEgc2Vjb25kIHRpbWUgdG8gY29uZmlybSB0aGUKICAgICAgICB2YWx1ZSBpZiBpdCB3YXMgcHJvbXB0ZWQgZm9yLiBDYW4gYmUgc2V0IHRvIGEgc3RyaW5nIGluc3RlYWQgb2YKICAgICAgICBgYFRydWVgYCB0byBjdXN0b21pemUgdGhlIG1lc3NhZ2UuCiAgICA6cGFyYW0gcHJvbXB0X3JlcXVpcmVkOiBJZiBzZXQgdG8gYGBGYWxzZWBgLCB0aGUgdXNlciB3aWxsIGJlCiAgICAgICAgcHJvbXB0ZWQgZm9yIGlucHV0IG9ubHkgd2hlbiB0aGUgb3B0aW9uIHdhcyBzcGVjaWZpZWQgYXMgYSBmbGFnCiAgICAgICAgd2l0aG91dCBhIHZhbHVlLgogICAgOnBhcmFtIGhpZGVfaW5wdXQ6IElmIHRoaXMgaXMgYGBUcnVlYGAgdGhlbiB0aGUgaW5wdXQgb24gdGhlIHByb21wdAogICAgICAgIHdpbGwgYmUgaGlkZGVuIGZyb20gdGhlIHVzZXIuIFRoaXMgaXMgdXNlZnVsIGZvciBwYXNzd29yZCBpbnB1dC4KICAgIDpwYXJhbSBpc19mbGFnOiBmb3JjZXMgdGhpcyBvcHRpb24gdG8gYWN0IGFzIGEgZmxhZy4gIFRoZSBkZWZhdWx0IGlzCiAgICAgICAgICAgICAgICAgICAgYXV0byBkZXRlY3Rpb24uCiAgICA6cGFyYW0gZmxhZ192YWx1ZTogd2hpY2ggdmFsdWUgc2hvdWxkIGJlIHVzZWQgZm9yIHRoaXMgZmxhZyBpZiBpdCdzCiAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlZC4gIFRoaXMgaXMgc2V0IHRvIGEgYm9vbGVhbiBhdXRvbWF0aWNhbGx5IGlmCiAgICAgICAgICAgICAgICAgICAgICAgdGhlIG9wdGlvbiBzdHJpbmcgY29udGFpbnMgYSBzbGFzaCB0byBtYXJrIHR3byBvcHRpb25zLgogICAgOnBhcmFtIG11bHRpcGxlOiBpZiB0aGlzIGlzIHNldCB0byBgVHJ1ZWAgdGhlbiB0aGUgYXJndW1lbnQgaXMgYWNjZXB0ZWQKICAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGUgdGltZXMgYW5kIHJlY29yZGVkLiAgVGhpcyBpcyBzaW1pbGFyIHRvIGBgbmFyZ3NgYAogICAgICAgICAgICAgICAgICAgICBpbiBob3cgaXQgd29ya3MgYnV0IHN1cHBvcnRzIGFyYml0cmFyeSBudW1iZXIgb2YKICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzLgogICAgOnBhcmFtIGNvdW50OiB0aGlzIGZsYWcgbWFrZXMgYW4gb3B0aW9uIGluY3JlbWVudCBhbiBpbnRlZ2VyLgogICAgOnBhcmFtIGFsbG93X2Zyb21fYXV0b2VudjogaWYgdGhpcyBpcyBlbmFibGVkIHRoZW4gdGhlIHZhbHVlIG9mIHRoaXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlciB3aWxsIGJlIHB1bGxlZCBmcm9tIGFuIGVudmlyb25tZW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSBpbiBjYXNlIGEgcHJlZml4IGlzIGRlZmluZWQgb24gdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LgogICAgOnBhcmFtIGhlbHA6IHRoZSBoZWxwIHN0cmluZy4KICAgIDpwYXJhbSBoaWRkZW46IGhpZGUgdGhpcyBvcHRpb24gZnJvbSBoZWxwIG91dHB1dHMuCgogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiA4LjEuMAogICAgICAgIEhlbHAgdGV4dCBpbmRlbnRhdGlvbiBpcyBjbGVhbmVkIGhlcmUgaW5zdGVhZCBvZiBvbmx5IGluIHRoZQogICAgICAgIGBgQG9wdGlvbmBgIGRlY29yYXRvci4KCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDguMS4wCiAgICAgICAgVGhlIGBgc2hvd19kZWZhdWx0YGAgcGFyYW1ldGVyIG92ZXJyaWRlcwogICAgICAgIGBgQ29udGV4dC5zaG93X2RlZmF1bHRgYC4KCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDguMS4wCiAgICAgICAgVGhlIGRlZmF1bHQgb2YgYSBzaW5nbGUgb3B0aW9uIGJvb2xlYW4gZmxhZyBpcyBub3Qgc2hvd24gaWYgdGhlCiAgICAgICAgZGVmYXVsdCB2YWx1ZSBpcyBgYEZhbHNlYGAuCgogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiA4LjAuMQogICAgICAgIGBgdHlwZWBgIGlz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