ZGlmZiAtLWdpdCBhL2RvYy9oZWxwL3JlZ2lvbmVuIGIvZG9jL2hlbHAvcmVnaW9uZW4KaW5kZXggYzA0YjNhMC4uM2QzOGZjNSAxMDA2NDQKLS0tIGEvZG9jL2hlbHAvcmVnaW9uZW4KKysrIGIvZG9jL2hlbHAvcmVnaW9uZW4KQEAgLTEzLDcgKzEzLDcgQEAKICAgIERzY2h1bmdlbCAgICAgQXJrCiAgICBFYmVuZSAgICAgICAgIEFyYXRob3JuCiAgICBGZXJud2VzdCAgICAgIFZhbmlvbgotICAgR2ViaXJnZSAgICAgICBCYW1iaQorICAgR2ViaXJnZSAgICAgICBCdWdmaXgKICAgIEluc2VsbiAgICAgICAgTWlyaWwKICAgIFBvbGFyICAgICAgICAgSHVtbmksIENhbGRyYQogICAgU2NoYXR0ZW53ZWx0ICBab29rCkBAIC0zMSw3ICszMSw3IEBACiAqIGJlaSBha3V0ZW4gUHJvYmxlbWVuIG1pdCAibXJ1ZmUiIHVuZCAibWFpbCBlcnptYWdpZXIiIGFsbGUgYW5zcHJlY2hlbgogCiBTSUVIRSBBVUNIOgotCUdpbGRlbm1hZ2llcgorICBHaWxkZW5tYWdpZXIKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotTGFzdCBtb2RpZmllZDogMjAxNi0wNy0zMCB2b24gWm9vay4KK0xhc3QgbW9kaWZpZWQ6IDIwMTgtMDEtMjcgdm9uIERlYWRkeS4KZGlmZiAtLWdpdCBhL2RvYy9oZWxwL3NwaWVsZSBiL2RvYy9oZWxwL3NwaWVsZQppbmRleCAxY2Q2ZDNlLi5lZjk1YzE4IDEwMDY0NAotLS0gYS9kb2MvaGVscC9zcGllbGUKKysrIGIvZG9jL2hlbHAvc3BpZWxlCkBAIC05LDI2ICs5LDI3IEBACiAgICAgIFdlbiBlcyBhbHNvIHJlaXp0LCBkZXIga2FubiBmb2xnZW5kZSBTcGllbGUgenVzYW1tZW4gbWl0IGFuZGVyZW4KICAgICAgU3BpZWxlcm4gc3VjaGVuIHVuZCB2ZXJzdWNoZW46CiAKLSAgICAgMTcmNAkJV2FsZCwgRWxmZW5kb3JmLCBDYXNpbm8KLSAgICAgNCBHZXdpbm50CQlFYmVuZSwgUG9ydCBWYWluCi0gICAgIEFiYWxvbmUJCUViZW5lLCBQb3J0IFZhaW4sIE93ZW4gQnJhZGRvbgotICAgICBEYXJ0CQlWbGFuZCwgT3JraGF1c2VuLCBLbmVpcGUKLSAgICAgRG9wcGVsa29wZgkJSW5zZWxuLCBTaGFreSBJc2xhbmQKLSAgICAgRnVzc2JhbGwJCUViZW5lLCBGZXVlcmJlcmdzdGFkaW9uCi0gICAgIEdvCQkJRmVybndlc3QsIFhpYW4KLSAgICAgTWFleGNoZW4JCUViZW5lLCBQb3J0IFZhaW4sIEFiZW50ZXVyZXJrbmVpcGUvT3dlbiBCcmFkZG9uCi0gICAgIE1pbmVzd2VlcGVyCURzY2h1bmdlbCwgT2hvcnQsIEhpbnRlcnppbW1lcgotICAgICBSYWdlCQlXYWxkLCBEcmFrb25pZW4sIEh1ZXR0ZQotICAgICBSb2RlbG4JCVBvbGFyLCBUdW5kcmEKLSAgICAgU2NoYWNoCQlHZWJpcmdlLCBIb2NoZWJlbmUKLSAgICAgU2thdAkJR2ViaXJnZSwgTHVwaW5lbnRhbCwgS25laXBlCi0gICAgIFRhYmx1dAkJR2ViaXJnZSwgQmVyZ2RvcmYsIEtuZWlwZQotICAgICBUYWtlIEl0IEVhc3kJRHNjaHVuZ2VsLCBTdGVwcGUsIEh1ZXR0ZQotICAgICBNb25vcG9seSAgICAgICAgICAgRmV1ZXJpbnNlbCwgVnVsa2FuIGQuIFBhcmF3ZWx0IChHbGFkaW9Qb2xpcykKKyAgICAgMTcmNCAgICAgICAgICAgICBXYWxkLCBFbGZlbmRvcmYsIENhc2lubworICAgICA0IEdld2lubnQgICAgICAgIEViZW5lLCBQb3J0IFZhaW4KKyAgICAgNTEgdG90ICAgICAgICAgICBJbnNlbG4sIFRhbWFwaGFoZWxhIChTY2hhdHppbnNlbCksIEFsIENhcG9uZQorICAgICBBYmFsb25lICAgICAgICAgIEViZW5lLCBQb3J0IFZhaW4sIE93ZW4gQnJhZGRvbgorICAgICBEYXJ0ICAgICAgICAgICAgIFZsYW5kLCBPcmtoYXVzZW4sIEtuZWlwZQorICAgICBEb3BwZWxrb3BmICAgICAgIEluc2VsbiwgU2hha3kgSXNsYW5kCisgICAgIEZ1c3NiYWxsICAgICAgICAgRWJlbmUsIEZldWVyYmVyZ3N0YWRpb24KKyAgICAgR28gICAgICAgICAgICAgICBGZXJud2VzdCwgWGlhbgorICAgICBNYWV4Y2hlbiAgICAgICAgIEViZW5lLCBQb3J0IFZhaW4sIEFiZW50ZXVyZXJrbmVpcGUvT3dlbiBCcmFkZG9uCisgICAgIE1pbmVzd2VlcGVyICAgICAgRHNjaHVuZ2VsLCBPaG9ydCwgSGludGVyemltbWVyCisgICAgIFJhZ2UgICAgICAgICAgICAgV2FsZCwgRHJha29uaWVuLCBIdWV0dGUKKyAgICAgUm9kZWxuICAgICAgICAgICBQb2xhciwgVHVuZHJhCisgICAgIFNjaGFjaCAgICAgICAgICAgR2ViaXJnZSwgSG9jaGViZW5lCisgICAgIFNrYXQgICAgICAgICAgICAgR2ViaXJnZSwgTHVwaW5lbnRhbCwgS25laXBlCisgICAgIFRhYmx1dCAgICAgICAgICAgR2ViaXJnZSwgQmVyZ2RvcmYsIEtuZWlwZQorICAgICBUYWtlIEl0IEVhc3kgICAgIERzY2h1bmdlbCwgU3RlcHBlLCBIdWV0dGUKKyAgICAgTW9ub3BvbHkgICAgICAgICBGZXVlcmluc2VsLCBWdWxrYW4gZC4gUGFyYXdlbHQgKEdsYWRpb1BvbGlzKQogCiAgU0lFSEUgQVVDSDoKICAgICAgcGFydGllcywgc3RlcmJlbgogCiAgTEVUWlRFIEFlTkRFUlVORzoKLSAgICAgMjIuIE1hZXJ6IEdsb2luc29uCisgICAgIDI3LiBKYW51YXIgMjAxOCBkdXJjaCBEZWFkZHkKIApkaWZmIC0tZ2l0IGEvZG9jL3NwaGlueC9zZWZ1bi9zZW5kX3Jvb20ucnN0IGIvZG9jL3NwaGlueC9zZWZ1bi9zZW5kX3Jvb20ucnN0CmluZGV4IDA0NGI1Y2EuLjJhYzEzMjkgMTAwNjQ0Ci0tLSBhL2RvYy9zcGhpbngvc2VmdW4vc2VuZF9yb29tLnJzdAorKysgYi9kb2Mvc3BoaW54L3NlZnVuL3NlbmRfcm9vbS5yc3QKQEAgLTMsNDAgKzMsNzAgQEAKIAogRlVOS1RJT04KIC0tLS0tLS0tCi06OgogCi12YXJhcmdzIHZvaWQgc2VuZF9yb29tKG9iamVjdHxzdHJpbmcgcm9vbSwgc3RyaW5nIG1zZywgaW50IG1zZ190eXBlLAotICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcgbXNnX2FjdGlvbiwgc3RyaW5nIG1zZ19wcmVmaXgsCi0gICAgICAgICAgICAgICAgICAgICAgIG9iamVjdCAqZXhjbHVkZSwgb2JqZWN0IG9yaWdpbikKKyAgICB2YXJhcmdzIHZvaWQgc2VuZF9yb29tKG9iamVjdHxzdHJpbmcgcm9vbSwgc3RyaW5nIG1zZywgaW50IG1zZ190eXBlLAorICAgICAgICAgICAgc3RyaW5nIG1zZ19hY3Rpb24sIHN0cmluZyBtc2dfcHJlZml4LCBvYmplY3QgKmV4Y2x1ZGUsCisgICAgICAgICAgICBvYmplY3Qgb3JpZ2luKQogCiBCRVNDSFJFSUJVTkcKIC0tLS0tLS0tLS0tLQotOjoKIAotICAgICAgICBTZW5kZXQgbXNnIGFuIGFsbGUgT2JqZWt0ZSBpbiByb29tIGR1cmNoIEF1ZnJ1ZiB2b24gUmVjZWl2ZU1zZygpIG1pdAotICAgICAgICBkZW4gdWViZXJnZWJlbmVuIEFyZ3VtZW50ZW4uCi0gICAgICAgIFp1ciBCZWRldXR1bmcgZGVyIEFyZ3VtZW50ZSBzaWVoZSBNYW5wYWdlIHZvbiBSZWNlaXZlTXNnKCkuCisgICAgU2VuZGV0IG1zZyBhbiBhbGxlIE9iamVrdGUgaW4gcm9vbSBkdXJjaCBBdWZydWYgdm9uIFJlY2VpdmVNc2coKSBtaXQKKyAgICBkZW4gdWViZXJnZWJlbmVuIEFyZ3VtZW50ZW4uCisgICAgWnVyIEJlZGV1dHVuZyBkZXIgQXJndW1lbnRlIHNpZWhlIE1hbnBhZ2Ugdm9uIFJlY2VpdmVNc2coKS4KIAotICAgICAgICBXZW5uIGRhcyBSYXVtb2JqZWt0IG1pdCBzZWluZW0gTmFtZW4gYW5nZWdlYmVuIGlzdCwgd2lyZCBkYXMgT2JqZWt0Ci0gICAgICAgIHVudGVyIGRpZXNlbSBOYW1lbiBnZXN1Y2h0IHVuZCB1bmQgZ2VsYWRlbiwgZmFsbHMgbm90d2VuZGlnLgorICAgIFdlbm4gZGFzIFJhdW1vYmpla3QgbWl0IHNlaW5lbSBOYW1lbiBhbmdlZ2ViZW4gaXN0LCB3aXJkIGRhcyBPYmpla3QKKyAgICB1bnRlciBkaWVzZW0gTmFtZW4gZ2VzdWNodCB1bmQgdW5kIGdlbGFkZW4sIGZhbGxzIG5vdHdlbmRpZy4KIAotICAgICAgICBNaXQgZGVtIEFycmF5IDwqZXhjbHVkZT4ga2FubiBtYW4gdmVyaGluZGVybiwgZGFzcyBkaWUgTmFjaHJpY2h0IGFuCi0gICAgICAgIGRpZSBkYXJpbiBlbnRoYWx0ZW5lbiBPYmpla3RlIGdlc2VuZGV0IHdpcmQuCi0gICAgICAgIERhcyBpc3Qgc2lubnZvbGwsIHdlbm4gekIgZWluIFNwaWVsZXIgQXVzbG9lc2VyIGVpbmVyIE1lbGR1bmcgaXN0Ci0gICAgICAgIHVuZCBkaWVzZSBzZWxic3QgbmljaHQgZXJoYWx0ZW4gc29sbC4KKyAgICBNaXQgZGVtIEFycmF5IGV4Y2x1ZGUga2FubiBtYW4gdmVyaGluZGVybiwgZGFzcyBkaWUgTmFjaHJpY2h0IGFuCisgICAgZGllIGRhcmluIGVudGhhbHRlbmVuIE9iamVrdGUgZ2VzZW5kZXQgd2lyZC4KKyAgICBEYXMgaXN0IHNpbm52b2xsLCB3ZW5uIGJlaXNwaWVsc3dlaXNlIGVpbiBTcGllbGVyIEF1c2xvZXNlciBlaW5lciBNZWxkdW5nCisgICAgaXN0IHVuZCBkaWVzZSBzZWxic3QgbmljaHQgZXJoYWx0ZW4gc29sbC4KIAotICAgICAgICBvcmlnaW4gZ2lidCBhbiwgd2VsY2hlcyBPYmpla3QgZGllIE1lbGR1bmcgYXVzbG9lc3QgKG11c3MgbmljaHQgZGFzCi0gICAgICAgIHNlbmRlbmRlIE9iamVrdCBzZWxiZXIpIHVuZCB3aXJkIHZvciBhbGxlbSBmdWVyIGRpZSBJZ25vcmllcmVwcnVlZnVuZwotICAgICAgICB2ZXJ3ZW5kZXQuIERlZmF1bHQgaXN0IGRhcyBzZW5kZW5kZSBPYmpla3QuCisgICAgb3JpZ2luIGdpYnQgYW4sIHdlbGNoZXMgT2JqZWt0IGRpZSBNZWxkdW5nIGF1c2xvZXN0IChtdXNzIG5pY2h0IGRhcworICAgIHNlbmRlbmRlIE9iamVrdCBzZWxiZXIpIHVuZCB3aXJkIHZvciBhbGxlbSBmdWVyIGRpZSBJZ25vcmllcmVwcnVlZnVuZworICAgIHZlcndlbmRldC4gRGVmYXVsdCBpc3QgZGFzIHNlbmRlbmRlIE9iamVrdC4KIAotICAgICAgICBMZXR6dGVuZGxpY2ggaXN0IGRpZSBzZWZ1biB2ZXJnbGVpY2hiYXIgenUgdGVsbF9yb29tKCkuCisgICAgTGV0enRlbmRsaWNoIGlzdCBkaWUgc2VmdW4gdmVyZ2xlaWNoYmFyIHp1IGB0ZWxsX3Jvb20oKWAuCisKK0JFSVNQSUVMCistLS0tLS0tLQorCisgICAgT2Z0IG1vZWNodGUgbWFuIGVpbmZhY2ggbnVyLCBkYXNzIGFuIGRlbiBTcGllbGVyLCBkZXIgZWluZSBBa3Rpb24KKyAgICBvZGVyIGFlaG5saWNoZXMgYXVzbG9lc3QsIGVpbmUgYW5kZXJlIE1lbGR1bmcgZ2VnZWJlbiB3aXJkLCBhbHMgYW4KKyAgICBhbmRlcmUgaW0gUmF1bSBiZWZpbmRsaWNoZSBTcGllbGVyLiBGb2xnZW5kZW4gQ29kZSBrb2VudGUgbWFuIGRhbm4KKyAgICB2ZXJ3ZW5kZW46CisKKyAgICAuLiBjb2RlLWJsb2NrOjogcGlrZQorCisgICAgICAgIC8qIFp1ZXJzdCBzZW5kZW4gd2lyIGVpbmUgTmFjaHJpY2h0IG51ciBhbiBkZW4gU3BpZWxlci4KKyAgICAgICAgICogWmllbDogZGVyIFNwaWVsZXIgcmllY2h0IGV0d2FzIHVuZCBzY2h1ZXR0ZWx0IHNpY2ggZnVlciBhbGxlIGltCisgICAgICAgICAqIFJhdW0gc2ljaHRiYXIgZGFyYXVmLgorICAgICAgICAgKi8KKyAgICAgICAgdGhpc19wbGF5ZXIoKS0+UmVjZWl2ZU1zZygiQnVhaCBzdGlua3QgZGFzLiBEdSBzY2h1ZXR0ZWxzdCBEaWNoLlxuIiwKKyAgICAgICAgICAgICAgICBNVF9OT1RJRklDQVRJT058TVRfU01FTEwsIE1BX1NNRUxMKTsKKyAgICAgICAgc2VuZF9yb29tKGVudmlyb25tZW50KHRoaXNfcGxheWVyKCkpLAorICAgICAgICAgICAgICAgIC8vIGRlciBSYXVtIGluIGRlbSBkZXIgU3BpZWxlciBpc3QKKyAgICAgICAgICAgICAgICAgdGhpc19wbGF5ZXIoKS0+TmFtZShXRVIpICsgIiBzY2h1ZXR0ZWx0IHNpY2guIFdpZXNvIG51cj9cbiIsCisgICAgICAgICAgICAgICAgLy8gZGllIGVpZ2VudGxpY2hlIE5hY2hyaWNodAorICAgICAgICAgICAgICAgIE1UX0xPT0ssIC8vIG1hbiBzaWVodCBkYXMgc2NodWV0dGVsbgorICAgICAgICAgICAgICAgIE1BX1VOS05PV04sIC8vIE1BX1NNRUxMIG1vZWdsaWNoOyBpbSBad2VpZmVsIGltbWVyIE1BX1VOS05PV04KKyAgICAgICAgICAgICAgICAiIiwgLy8gd2lyIHdvbGxlbiBrZWluIFByYWVmaXggdm9yIGRlciBBdXNnYWJlIGhhYmVuCisgICAgICAgICAgICAgICAgKHt0aGlzX3BsYXllcigpfSkpOworICAgICAgICAgICAgICAgIC8vIEFycmF5IG51ciBtaXQgZGVtIFNwaWVsZXIsIGRlciBkYXMgbmljaHQgbm9jaAorICAgICAgICAgICAgICAgIC8vIG1pdGJla29tbWVuIHNvbGwuCisKKyAgICBGdWVyIHdlaXRlcmUgT3B0aW9uZW4gZnVlciBgbXNnX3R5cGVgIHVuZCBgbXNnX2FjdGlvbmAgc2llaGUgZGllIG1hbnBhZ2UKKyAgICB6dSBSZWNlaXZlTXNnLiBOYXR1ZXJsaWNoIGhhYmVuIGB0aGlzX3BsYXllcmAgdW5kIGBlbnZpcm9ubWVudGAgYXVjaAorICAgIG1hbnBhZ2VzLgorCisKIAogU0lFSEUgQVVDSAogLS0tLS0tLS0tLQotOjoKIAotICAgICAgICBSZWNlaXZlTXNnKEwpCi0gICAgICAgIHRlbGxfb2JqZWN0KEUpLCB0ZWxsX3Jvb20oRSksIHNheShFKSwgd3JpdGUoRSkKKyAgICA6ZG9jOmAuLi9sZnVuL1JlY2VpdmVNc2dgCisgICAgdGVsbF9vYmplY3QoRSksIHRlbGxfcm9vbShFKSwgc2F5KEUpLCB3cml0ZShFKQogCi0xMy4wMy4yMDE2LCBaZXNzdHJhCiszMS4wMS4yMDE4LCBEZWFkZHkKIApkaWZmIC0tZ2l0IGEvZG9jL3dpei9tYXRlcmlhbCBiL2RvYy93aXovbWF0ZXJpYWwKaW5kZXggY2JmODAyMi4uN2JhZmRiOCAxMDA2NDQKLS0tIGEvZG9jL3dpei9tYXRlcmlhbAorKysgYi9kb2Mvd2l6L21hdGVyaWFsCkBAIC0yNiw3MyArMjYsNzUgQEAKICAgICAgICBlaW4gU3BlZXIgenUgODAlIGF1cyBIb2x6IHVuZCB6dSAyMCUgYXVzIE1ldGFsbCAoU3BlZXJzcGl0emUpIAogICAgICAgIGJlc3RlaGVuOgogCi0JU2V0UHJvcChQX01BVEVSSUFMLCAoW01BVF9NSVNDX01FVEFMOjIwLE1BVF9NSVNDX1dPT0Q6ODBdKSkKKyAgICAgICAgU2V0UHJvcChQX01BVEVSSUFMLCAoW01BVF9NSVNDX01FVEFMOjIwLE1BVF9NSVNDX1dPT0Q6ODBdKSkKIAogICAgICAgIChadXIgVmVyZWluZmFjaHVuZyBpc3QgZXMgZXJsYXVidCwgYmVpIFNldFByb3AgZWluIGVpbnplbG5lcyBNYXRlcmlhbCAKICAgICAgICAgb2RlciBlaW4gQXJyYXkgYXVzIE1hdGVyaWFsaWVuIGFuenVnZWJlbiwgYmVpZGVzIHdpcmQgYXV0b21hdGlzY2ggCiAgICAgICAgIHVtZ2V3YW5kZWx0IGluIGVpbiBNYXBwaW5nIG1pdCBnbGVpY2hlbiBBbnRlaWxlbiBhbGxlciBNYXRlcmlhbGllbi4pCiAKLSAgICAgRGVmYXVsdHMgZvxyIFBfTUFURVJJQUw6Ci0JV2FmZmVuIGdlbmVyZWxsOgkgICAoW01BVF9NSVNDX01FVEFMOjEwMF0pCi0JU2Nod2VydGVyOgkJICAgKFtNQVRfTUlTQ19NRVRBTDoxMDBdKQotICAgIAlNZXNzZXI6CQkJICAgKFtNQVRfTUlTQ19NRVRBTDo4MCwgTUFUX01JU0NfV09PRDoyMF0pCi0JQWV4dGU6CQkJICAgKFtNQVRfTUlTQ19NRVRBTDo1MCwgTUFUX01JU0NfV09PRDo1MF0pCi0JU3BlZXJlOgkJCSAgIChbTUFUX01JU0NfTUVUQUw6MjAsIE1BVF9NSVNDX1dPT0Q6ODBdKQotCUtldWxlbjoJCQkgICAoW01BVF9NSVNDX1dPT0Q6MTAwXSkKLQlSdWVzdHVuZ2VuIGdlbmVyZWxsOgkgICAoW01BVF9MRUFUSEVSOjEwMF0pCi0JS29lcnBlcnJ1ZXN0dW5nZW4sIEhlbG1lLAotCVJpbmdlLCBBbXVsZXR0ZSwgU2NoaWxkZTogIChbTUFUX01JU0NfTUVUQUw6MTAwXSkKLQlVbWhhZW5nZSwgSG9zZW46CSAgIChbTUFUX0NMT1RIOjEwMF0pCi0JSGFuZHNjaHVoZSwgU2NodWhlOgkgICAoW01BVF9MRUFUSEVSOjEwMF0pCi0JYW5kZXJlIERpbmdlOgkJICAgKFtNQVRfTUlTQzoxMDBdKQorICAgICBEZWZhdWx0cyBmdWVyIFBfTUFURVJJQUw6CisgICAgICAgIFdhZmZlbiBnZW5lcmVsbDogICAgICAgICAgIChbTUFUX01JU0NfTUVUQUw6MTAwXSkKKyAgICAgICAgU2Nod2VydGVyOiAgICAgICAgICAgICAgICAgKFtNQVRfTUlTQ19NRVRBTDoxMDBdKQorICAgICAgICBNZXNzZXI6ICAgICAgICAgICAgICAgICAgICAoW01BVF9NSVNDX01FVEFMOjgwLCBNQVRfTUlTQ19XT09EOjIwXSkKKyAgICAgICAgQWV4dGU6ICAgICAgICAgICAgICAgICAgICAgKFtNQVRfTUlTQ19NRVRBTDo1MCwgTUFUX01JU0NfV09PRDo1MF0pCisgICAgICAgIFNwZWVyZTogICAgICAgICAgICAgICAgICAgIChbTUFUX01JU0NfTUVUQUw6MjAsIE1BVF9NSVNDX1dPT0Q6ODBdKQorICAgICAgICBLZXVsZW46ICAgICAgICAgICAgICAgICAgICAoW01BVF9NSVNDX1dPT0Q6MTAwXSkKKyAgICAgICAgUnVlc3R1bmdlbiBnZW5lcmVsbDogICAgICAgKFtNQVRfTEVBVEhFUjoxMDBdKQorICAgICAgICBLb2VycGVycnVlc3R1bmdlbiwgSGVsbWUsCisgICAgICAgIFJpbmdlLCBBbXVsZXR0ZSwgU2NoaWxkZTogIChbTUFUX01JU0NfTUVUQUw6MTAwXSkKKyAgICAgICAgVW1oYWVuZ2UsIEhvc2VuOiAgICAgICAgICAgKFtNQVRfQ0xPVEg6MTAwXSkKKyAgICAgICAgSGFuZHNjaHVoZSwgU2NodWhlOiAgICAgICAgKFtNQVRfTEVBVEhFUjoxMDBdKQorICAgICAgICBhbmRlcmUgRGluZ2U6ICAgICAgICAgICAgICAoW01BVF9NSVNDOjEwMF0pCiAKICAgICAgIFVlYmVyc2ljaHQgdWViZXIgZGllIE1ldGhvZGVuIGFuIE9iamVrdGVuICgvc3RkL3RoaW5nL2Rlc2NyaXB0aW9uKToKLQlpbnQgUXVlcnlNYXRlcmlhbChzdHJpbmcgbWF0KToKLQktIGdpYnQgJSBkZXMgTWF0ZXJpYWxhbnRlaWxzIHZvbiBtYXQgYW0gT2JqZWt0IHp1cnVlY2sKLQlpbnQgUXVlcnlNYXRlcmlhbEdyb3VwKHN0cmluZyBncnApOgotCS0gZ2lidCAlIGRlcyBNYXRlcmlhbGdydXBwZW5hbnRlaWxzIHZvbiBncnAgYW0gT2JqZWt0IHp1cnVlY2sKLQlzdHJpbmcgTWF0ZXJpYWxMaXN0KGludCBjYXN1cywgbWl4ZWQgaWRpbmYpOgotCS0gZ2lidCBTdHJpbmcgbWl0IFp1c2FtbWVuc2V0enVuZyBkZXMgT2JqZWt0ZXMgenVydWVjaworICAgICAgICBpbnQgUXVlcnlNYXRlcmlhbChzdHJpbmcgbWF0KToKKyAgICAgICAgLSBnaWJ0ICUgZGVzIE1hdGVyaWFsYW50ZWlscyB2b24gbWF0IGFtIE9iamVrdCB6dXJ1ZWNrCisgICAgICAgIGludCBRdWVyeU1hdGVyaWFsR3JvdXAoc3RyaW5nIGdycCk6CisgICAgICAgIC0gZ2lidCAlIGRlcyBNYXRlcmlhbGdydXBwZW5hbnRlaWxzIHZvbiBncnAgYW0gT2JqZWt0IHp1cnVlY2sKKyAgICAgICAgc3RyaW5nIE1hdGVyaWFsTGlzdChpbnQgY2FzdXMsIG1peGVkIGlkaW5mKToKKyAgICAgICAgLSBnaWJ0IFN0cmluZyBtaXQgWnVzYW1tZW5zZXR6dW5nIGRlcyBPYmpla3RlcyB6dXJ1ZWNrCiAKICAgICAgIFVlYmVyc2ljaHQgdWViZXIgZGllIE1ldGhvZGVuIGFtIE1hc3RlciAoTUFURVJJQUxEQik6Ci0Jc3RyaW5nICpHZXRNYXRNZW1iZXJzaGlwKHN0cmluZyBtYXQpOgotCS0gYWxsZSBHcnVwcGVuLCBpbiBkZW5lbiBkYXMgTWF0ZXJpYWwgbWF0IGlzdAotCXN0cmluZyAqR2V0R3JvdXBNZW1iZXJzKHN0cmluZyBncnApOgotCS0gYWxsZSBNYXRlcmlhbGllbiwgZGllIGluIGRlciBHcnVwcGUgZ3JwIHNpbmQKLQlzdHJpbmcgTWF0ZXJpYWxOYW1lKHN0cmluZyBtYXQsIGludCBjYXN1cywgbWl4ZWQgaWRpbmYpOgotCS0gZXJnaWJ0IGRpZSBzcGllbGVybGVzYmFyZSBBbmdhYmUgZWluZXMgTWF0ZXJpYWxzIG1hdAotCXN0cmluZyBHcm91cE5hbWUoc3RyaW5nIGdycCk6Ci0JLSBlcmdpYnQgc3BpZWxlcmxlc2JhcmUgQW5nYWJlIGRlciBHcnVwcGUgZ3JwCi0Jc3RyaW5nIENvbnZNYXRlcmlhbExpc3QobWl4ZWQgbWF0cywgaW50IGNhc3VzLCBtaXhlZCBpZGluZik6Ci0gIAktIHdpcmQgdm9uIE1hdGVyaWFsTGlzdCgpIG1pdCBkZW4gTWF0ZXJpYWxpZW4gZGVzIE9iamVrdGVzIGdlcnVmZW4KLQl2b2lkIER1bXAoKToKLSAgCS0gc2NocmVpYnQgTWF0ZXJpYWxpZW4gdW5kIEdydXBwZW4gaW4gL3AvZGFlbW9uL3NhdmUvTUFURVJJQUxTCi0Jc3RyaW5nICpBbGxNYXRlcmlhbHMoKToKLQktIExpc3RlIGFsbGVyIGFrdHVlbGxlbiBNYXRlcmlhbGllbgotCXN0cmluZyAqQWxsR3JvdXBzKCk6Ci0JLSBMaXN0ZSBhbGxlciBha3R1ZWxsZW4gR3J1cHBlbgorICAgICAgICBzdHJpbmcgKkdldE1hdE1lbWJlcnNoaXAoc3RyaW5nIG1hdCk6CisgICAgICAgIC0gYWxsZSBHcnVwcGVuLCBpbiBkZW5lbiBkYXMgTWF0ZXJpYWwgbWF0IGlzdAorICAgICAgICBzdHJpbmcgKkdldEdyb3VwTWVtYmVycyhzdHJpbmcgZ3JwKToKKyAgICAgICAgLSBhbGxlIE1hdGVyaWFsaWVuLCBkaWUgaW4gZGVyIEdydXBwZSBncnAgc2luZAorICAgICAgICBzdHJpbmcgTWF0ZXJpYWxOYW1lKHN0cmluZyBtYXQsIGludCBjYXN1cywgbWl4ZWQgaWRpbmYpOgorICAgICAgICAtIGVyZ2lidCBkaWUgc3BpZWxlcmxlc2JhcmUgQW5nYWJlIGVpbmVzIE1hdGVyaWFscyBtYXQKKyAgICAgICAgc3RyaW5nIEdyb3VwTmFtZShzdHJpbmcgZ3JwKToKKyAgICAgICAgLSBlcmdpYnQgc3BpZWxlcmxlc2JhcmUgQW5nYWJlIGRlciBHcnVwcGUgZ3JwCisgICAgICAgIHN0cmluZyBDb252TWF0ZXJpYWxMaXN0KG1peGVkIG1hdHMsIGludCBjYXN1cywgbWl4ZWQgaWRpbmYpOgorICAgICAgICAtIHdpcmQgdm9uIE1hdGVyaWFsTGlzdCgpIG1pdCBkZW4gTWF0ZXJpYWxpZW4gZGVzIE9iamVrdGVzIGdlcnVmZW4KKyAgICAgICAgdm9pZCBEdW1wKCk6CisgICAgICAgIC0gc2NocmVpYnQgTWF0ZXJpYWxpZW4gdW5kIEdydXBwZW4gaW4gL3AvZGFlbW9uL3NhdmUvTUFURVJJQUxTCisgICAgICAgIHN0cmluZyAqQWxsTWF0ZXJpYWxzKCk6CisgICAgICAgIC0gTGlzdGUgYWxsZXIgYWt0dWVsbGVuIE1hdGVyaWFsaWVuCisgICAgICAgIHN0cmluZyAqQWxsR3JvdXBzKCk6CisgICAgICAgIC0gTGlzdGUgYWxsZXIgYWt0dWVsbGVuIEdydXBwZW4KIAogICAgICAgRmFsbHMgZXVjaCBlaW4gTWF0ZXJpYWwgZmVobHQ6Ci0JLSBmYWxscyBlcyBrZWluIGdlbmF1IHBhc3NlbmRlcyBNYXRlcmlhbCBnaWJ0LCBzb2xsdGUgbWFuIGRhcyBhbSAKLQkgIGVoZXN0ZW4gcGFzc2VuZGUgTUFUX01JU0MtTWF0ZXJpYWwgdmVyd2VuZGVuLgotCS0gZmFsbHMgZXMgc2ljaCBsb2huZW4gd3VlcmRlLCBkYXMgYmlzaGVyIG5vY2ggbmljaHQgZGVmaW5pZXJ0ZSAKLQkgIE1hdGVyaWFsIGVpbnp1YmF1ZW4gKHdlbm4gZXMgaGFldWZpZyBnZW51ZyB2ZXJ3ZW5kZXQgd2lyZCksIGJpdHRlIAotCSAgTWFpbCBhbiBlaW5lbiBFTSAoLT4gbWFuIEFkZE1hdGVyaWFsKCkgKQotCS0gdmVyc2NoaWVkZW5lIEVpZ2Vuc2NoYWZ0ZW4gbGFzc2VuIHNpY2gga29tYmluaWVyZW4uIFouQi4gYmVzdGVodCAKLQkgIGVpbiAodW5iZWthbm50ZXMpIGV4cGxvc2l2ZXMgR2FzIHp1IDEwMCUgYXVzIEdhcyB1bmQgenUgMTAwJSBhdXMgCi0JICBleHBsb3NpdmVtIE1hdGVyaWFsLiBJbnNvZmVybiBrYW5uIG1hbiBlcyBtaXQKKyAgICAgICAgLSBmYWxscyBlcyBrZWluIGdlbmF1IHBhc3NlbmRlcyBNYXRlcmlhbCBnaWJ0LCBzb2xsdGUgbWFuIGRhcyBhbSAKKyAgICAgICAgICBlaGVzdGVuIHBhc3NlbmRlIE1BVF9NSVNDLU1hdGVyaWFsIHZlcndlbmRlbi4KKyAgICAgICAgLSBmYWxscyBlcyBzaWNoIGxvaG5lbiB3dWVyZGUsIGRhcyBiaXNoZXIgbm9jaCBuaWNodCBkZWZpbmllcnRlIAorICAgICAgICAgIE1hdGVyaWFsIGVpbnp1YmF1ZW4gKHdlbm4gZXMgaGFldWZpZyBnZW51ZyB2ZXJ3ZW5kZXQgd2lyZCksIGJpdHRlIAorICAgICAgICAgIE1haWwgYW4gZWluZW4gRU0gKC0+IG1hbiBBZGRNYXRlcmlhbCgpICkKKyAgICAgICAgLSB2ZXJzY2hpZWRlbmUgRWlnZW5zY2hhZnRlbiBsYXNzZW4gc2ljaCBrb21iaW5pZXJlbi4gWi5CLiBiZXN0ZWh0IAorICAgICAgICAgIGVpbiAodW5iZWthbm50ZXMpIGV4cGxvc2l2ZXMgR2FzIHp1IDEwMCUgYXVzIEdhcyB1bmQgenUgMTAwJSBhdXMgCisgICAgICAgICAgZXhwbG9zaXZlbSBNYXRlcmlhbC4gSW5zb2Zlcm4ga2FubiBtYW4gZXMgbWl0CiAgICAgICAgICAgU2V0UHJvcChQX01BVEVSSUFMLCAoW01BVF9NSVNDX0dBUzoxMDAsIE1BVF9NSVNDX0VYUExPU0lWRToxMDBdKSkKICAgICAgICAgICB6dXNhbW1lbnNldHplbi4KIAogU0lFSEUgQVVDSDoKLSAgICAgS29uemVwdGU6CSAgbWF0ZXJpYWxlcmtlbm51bmcKKyAgICAgS29uemVwdGU6ICAgIG1hdGVyaWFsZXJrZW5udW5nCiAgICAgIEdydW5kbGVnZW5kOiBQX01BVEVSSUFMLCAvc3lzL3RoaW5nL21hdGVyaWFsLmgKICAgICAgTWV0aG9kZW46ICAgIFF1ZXJ5TWF0ZXJpYWwoKSwgUXVlcnlNYXRlcmlhbEdyb3VwKCksIE1hdGVyaWFsTGlzdCgpLAotICAgICBMaXN0ZW46CSAgQWxsTWF0ZXJpYWxzKCksIEFsbEdyb3VwcygpLCBEdW1wKCkKLQkJICBtYXRlcmlhbGxpc3RlLCBtYXRlcmlhbGdydXBwZW4KLSAgICAgTWFzdGVyOgkgIEFkZE1hdGVyaWFsKCksIENvbnZNYXRlcmlhbExpc3QoKSwgTWF0ZXJpYWxHcm91cCgpLAotCQkgIEdyb3VwTmFtZSgpLCBNYXRlcmlhbE5hbWUoKSwKLQkJICBHZXRHcm91cE1lbWJlcnMoKSwgR2V0TWF0TWVtYmVyc2hpcCgpCi0gICAgIFNvbnN0aWdlczoJICBQX01BVEVSSUFMX0tOT1dMRURHRQorICAgICBMaXN0ZW46ICAgICAgQWxsTWF0ZXJpYWxzKCksIEFsbEdyb3VwcygpLCBEdW1wKCkKKyAgICAgICAgICAgICAgICAgIG1hdGVyaWFsbGlzdGUsIG1hdGVyaWFsZ3J1cHBlbgorICAgICBNYXN0ZXI6ICAgICAgQWRkTWF0ZXJpYWwoKSwgQ29udk1hdGVyaWFsTGlzdCgpLCBNYXRlcmlhbEdyb3VwKCksCisgICAgICAgICAgICAgICAgICBHcm91cE5hbWUoKSwgTWF0ZXJpYWxOYW1lKCksCisgICAgICAgICAgICAgICAgICBHZXRHcm91cE1lbWJlcnMoKSwgR2V0TWF0TWVtYmVyc2hpcCgpCisgICAgIFNvbnN0aWdlczogICBQX01BVEVSSUFMX0tOT1dMRURHRQogCi03LiBNYWkgMjAwNCBHbG9pbnNvbgorTEVUWlRFIEFFTkRFUlVORzoKKyAgICAyNy4gSmFudWFyIDIwMTggZHVyY2ggRGVhZGR5CisK