From: Martin Bosslet Date: 2010-12-01T10:56:52+09:00 Subject: [ruby-core:33501] [Ruby 1.9-Bug#4030] ext/openssl OpenSSL::ASN1::decode / to_der --mimepart_4cf5ab44e2475_2c1fb5b4cd44297 Content-Type: text/plain Content-Transfer-Encoding: Quoted-printable Content-Disposition: inline Issue #4030 has been updated by Martin Bosslet. File asn1_inf_length.diff added I'd like to propose a patch that would resolve the issue for me. After analyzing the signatures in more detail I found out that the only B= ER encodings used were infinite length constructed encodings e.g. for seq= uence, set and octet string (or bit string) structures. This makes sense = in particular for CMS SignedData structures when "attached signatures" ar= e used - encoding the EncapContentInfo using infinite length constructs i= s the only way to keep streaming support possible. But the rest of the primitive encodings used DER encoding. Essentially th= is also means that there is not really a need to cache the entire encodin= g, it suffices to store the information whether a constructed encoding wa= s encoded with infinite length or not. = To support this, I added "@infinite length" to each ASN1Data (with getter= /setter) that is used to determine the encoding rule to be applied when s= erializing the object. This is only effective for sub-classes of ASN1Cons= tructive, which is why #infinite_length=3D is explicitly undefined for al= l ASN1Primitives. = Infinite length octet strings and bit strings are represented as ASN1Cons= tructives whose value is an array of octet strings or bit strings respect= ively, where these again can be constructed, in ASN1Constructive form, or= ,ultimately, primitive. To construct an infinite length encoding from scratch, an instance of the= new class OpenSSL::ASN1::EndOfContent must be added at the end of the re= spective value array. I also added a couple of tests that assert the expected behavior and also= demonstrate the usage of infinite_length. Best regards, Martin Bo=C3=9Flet ---------------------------------------- http://redmine.ruby-lang.org/issues/show/4030 ---------------------------------------- http://redmine.ruby-lang.org --mimepart_4cf5ab44e2475_2c1fb5b4cd44297 Content-Type: text/x-patch; name=asn1_inf_length.diff Content-Transfer-Encoding: Base64 Content-Disposition: attachment; filename=asn1_inf_length.diff ClByb3BlcnR5IGNoYW5nZXMgb246IHJ1YnkvZXh0L29wZW5zc2wKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpNb2RpZmllZDogc3ZuOmlnbm9yZQogICAtIEdO VW1ha2VmaWxlCk1ha2VmaWxlCmRlcApleHRjb25mLmgKbWttZi5sb2cKb3Bl bnNzbC5hCmNvbmZ0ZXN0LmRTWU0KCiAgICsgR05VbWFrZWZpbGUKTWFrZWZp bGUKZGVwCmV4dGNvbmYuaApta21mLmxvZwpvcGVuc3NsLmEKY29uZnRlc3Qu ZFNZTQpvcGVuc3NsLnNvCgoKSW5kZXg6IHJ1YnkvZXh0L29wZW5zc2wvb3Nz bF9hc24xLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcnVieS9leHQv b3BlbnNzbC9vc3NsX2FzbjEuYwkocmV2aXNpb24gMjk5NjUpCisrKyBydWJ5 L2V4dC9vcGVuc3NsL29zc2xfYXNuMS5jCSh3b3JraW5nIGNvcHkpCkBAIC0x OSw2ICsxOSw4IEBACiB9OwogI2VuZGlmCiAKK3N0YXRpYyBWQUxVRSBqb2lu X2RlcihWQUxVRSBlbnVtZXJhYmxlKTsKKwogLyoKICAqIERBVEUgY29udmVy c2lvbgogICovCkBAIC0xNTYsMTUgKzE1OCwxNyBAQAogLyoKICAqIEFTTjEg bW9kdWxlCiAgKi8KLSNkZWZpbmUgb3NzbF9hc24xX2dldF92YWx1ZShvKSAg ICAgICByYl9hdHRyX2dldCgobykscmJfaW50ZXJuKCJAdmFsdWUiKSkKLSNk ZWZpbmUgb3NzbF9hc24xX2dldF90YWcobykgICAgICAgICByYl9hdHRyX2dl dCgobykscmJfaW50ZXJuKCJAdGFnIikpCi0jZGVmaW5lIG9zc2xfYXNuMV9n ZXRfdGFnZ2luZyhvKSAgICAgcmJfYXR0cl9nZXQoKG8pLHJiX2ludGVybigi QHRhZ2dpbmciKSkKLSNkZWZpbmUgb3NzbF9hc24xX2dldF90YWdfY2xhc3Mo bykgICByYl9hdHRyX2dldCgobykscmJfaW50ZXJuKCJAdGFnX2NsYXNzIikp CisjZGVmaW5lIG9zc2xfYXNuMV9nZXRfdmFsdWUobykgICAgICAgICAgIHJi X2F0dHJfZ2V0KChvKSxyYl9pbnRlcm4oIkB2YWx1ZSIpKQorI2RlZmluZSBv c3NsX2FzbjFfZ2V0X3RhZyhvKSAgICAgICAgICAgICByYl9hdHRyX2dldCgo bykscmJfaW50ZXJuKCJAdGFnIikpCisjZGVmaW5lIG9zc2xfYXNuMV9nZXRf dGFnZ2luZyhvKSAgICAgICAgIHJiX2F0dHJfZ2V0KChvKSxyYl9pbnRlcm4o IkB0YWdnaW5nIikpCisjZGVmaW5lIG9zc2xfYXNuMV9nZXRfdGFnX2NsYXNz KG8pICAgICAgIHJiX2F0dHJfZ2V0KChvKSxyYl9pbnRlcm4oIkB0YWdfY2xh c3MiKSkKKyNkZWZpbmUgb3NzbF9hc24xX2dldF9pbmZpbml0ZV9sZW5ndGgo bykgcmJfYXR0cl9nZXQoKG8pLHJiX2ludGVybigiQGluZmluaXRlX2xlbmd0 aCIpKQogCi0jZGVmaW5lIG9zc2xfYXNuMV9zZXRfdmFsdWUobyx2KSAgICAg cmJfaXZfc2V0KChvKSwiQHZhbHVlIiwodikpCi0jZGVmaW5lIG9zc2xfYXNu MV9zZXRfdGFnKG8sdikgICAgICAgcmJfaXZfc2V0KChvKSwiQHRhZyIsKHYp KQotI2RlZmluZSBvc3NsX2FzbjFfc2V0X3RhZ2dpbmcobyx2KSAgIHJiX2l2 X3NldCgobyksIkB0YWdnaW5nIiwodikpCi0jZGVmaW5lIG9zc2xfYXNuMV9z ZXRfdGFnX2NsYXNzKG8sdikgcmJfaXZfc2V0KChvKSwiQHRhZ19jbGFzcyIs KHYpKQorI2RlZmluZSBvc3NsX2FzbjFfc2V0X3ZhbHVlKG8sdikgICAgICAg ICAgIHJiX2l2X3NldCgobyksIkB2YWx1ZSIsKHYpKQorI2RlZmluZSBvc3Ns X2FzbjFfc2V0X3RhZyhvLHYpICAgICAgICAgICAgIHJiX2l2X3NldCgobyks IkB0YWciLCh2KSkKKyNkZWZpbmUgb3NzbF9hc24xX3NldF90YWdnaW5nKG8s dikgICAgICAgICByYl9pdl9zZXQoKG8pLCJAdGFnZ2luZyIsKHYpKQorI2Rl ZmluZSBvc3NsX2FzbjFfc2V0X3RhZ19jbGFzcyhvLHYpICAgICAgIHJiX2l2 X3NldCgobyksIkB0YWdfY2xhc3MiLCh2KSkKKyNkZWZpbmUgb3NzbF9hc24x X3NldF9pbmZpbml0ZV9sZW5ndGgobyx2KSByYl9pdl9zZXQoKG8pLCJAaW5m aW5pdGVfbGVuZ3RoIiwodikpCiAKIFZBTFVFIG1BU04xOwogVkFMVUUgZUFT TjFFcnJvcjsKQEAgLTE3Myw2ICsxNzcsNyBAQAogVkFMVUUgY0FTTjFQcmlt aXRpdmU7CiBWQUxVRSBjQVNOMUNvbnN0cnVjdGl2ZTsKIAorVkFMVUUgY0FT TjFFbmRPZkNvbnRlbnQ7CiBWQUxVRSBjQVNOMUJvb2xlYW47ICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogQk9PTEVBTiAgICAgICAgICAgKi8KIFZB TFVFIGNBU04xSW50ZWdlciwgY0FTTjFFbnVtZXJhdGVkOyAgICAgICAgICAv KiBJTlRFR0VSICAgICAgICAgICAqLwogVkFMVUUgY0FTTjFCaXRTdHJpbmc7 ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJJVCBTVFJJTkcgICAgICAg ICovCkBAIC00NDksNyArNDU0LDcgQEAKIH0gb3NzbF9hc24xX2luZm9fdDsK IAogc3RhdGljIG9zc2xfYXNuMV9pbmZvX3Qgb3NzbF9hc24xX2luZm9bXSA9 IHsKLSAgICB7ICJFT0MiLCAgICAgICAgICAgICAgIE5VTEwsICAgICAgICAg ICAgICAgICAgfSwgIC8qICAwICovCisgICAgeyAiRU9DIiwgICAgICAgICAg ICAgICAmY0FTTjFFbmRPZkNvbnRlbnQsICAgIH0sICAvKiAgMCAqLwogICAg IHsgIkJPT0xFQU4iLCAgICAgICAgICAgJmNBU04xQm9vbGVhbiwgICAgICAg ICB9LCAgLyogIDEgKi8KICAgICB7ICJJTlRFR0VSIiwgICAgICAgICAgICZj QVNOMUludGVnZXIsICAgICAgICAgfSwgIC8qICAyICovCiAgICAgeyAiQklU X1NUUklORyIsICAgICAgICAmY0FTTjFCaXRTdHJpbmcsICAgICAgIH0sICAv KiAgMyAqLwpAQCAtNjYwLDYgKzY2NSw3IEBACiAgICAgb3NzbF9hc24xX3Nl dF90YWcoc2VsZiwgdGFnKTsKICAgICBvc3NsX2FzbjFfc2V0X3ZhbHVlKHNl bGYsIHZhbHVlKTsKICAgICBvc3NsX2FzbjFfc2V0X3RhZ19jbGFzcyhzZWxm LCB0YWdfY2xhc3MpOworICAgIG9zc2xfYXNuMV9zZXRfaW5maW5pdGVfbGVu Z3RoKHNlbGYsIFFmYWxzZSk7CiAKICAgICByZXR1cm4gc2VsZjsKIH0KQEAg LTY4NCw4ICs2OTAsOCBAQAogc3RhdGljIFZBTFVFCiBvc3NsX2FzbjFkYXRh X3RvX2RlcihWQUxVRSBzZWxmKQogewotICAgIFZBTFVFIHZhbHVlLCBkZXI7 Ci0gICAgaW50IHRhZywgdGFnX2NsYXNzLCBpc19jb25zID0gMDsKKyAgICBW QUxVRSB2YWx1ZSwgZGVyLCBpbmZfbGVuZ3RoOworICAgIGludCB0YWcsIHRh Z19jbGFzcywgaXNfY29ucyA9IDAsIHRtcF9jb25zID0gMTsKICAgICBsb25n IGxlbmd0aDsKICAgICB1bnNpZ25lZCBjaGFyICpwOwogCkBAIC02OTgsNyAr NzA0LDEyIEBACiAKICAgICB0YWcgPSBvc3NsX2FzbjFfdGFnKHNlbGYpOwog ICAgIHRhZ19jbGFzcyA9IG9zc2xfYXNuMV90YWdfY2xhc3Moc2VsZik7Ci0g ICAgaWYoKGxlbmd0aCA9IEFTTjFfb2JqZWN0X3NpemUoMSwgUlNUUklOR19M RU4odmFsdWUpLCB0YWcpKSA8PSAwKQorICAgIGluZl9sZW5ndGggPSBvc3Ns X2FzbjFfZ2V0X2luZmluaXRlX2xlbmd0aChzZWxmKTsKKyAgICBpZiAoaW5m X2xlbmd0aCA9PSBRdHJ1ZSkgeworICAgICAgICBpc19jb25zID0gMjsKKyAg ICAgICAgdG1wX2NvbnMgPSAyOworICAgIH0KKyAgICBpZigobGVuZ3RoID0g QVNOMV9vYmplY3Rfc2l6ZSh0bXBfY29ucywgUlNUUklOR19MRU4odmFsdWUp LCB0YWcpKSA8PSAwKQogCW9zc2xfcmFpc2UoZUFTTjFFcnJvciwgTlVMTCk7 CiAgICAgZGVyID0gcmJfc3RyX25ldygwLCBsZW5ndGgpOwogICAgIHAgPSAo dW5zaWduZWQgY2hhciAqKVJTVFJJTkdfUFRSKGRlcik7CkBAIC03MTcsNyAr NzI4LDcgQEAKICAgICB1bnNpZ25lZCBjaGFyICpzdGFydCwgKnA7CiAgICAg Y29uc3QgdW5zaWduZWQgY2hhciAqcDA7CiAgICAgbG9uZyBsZW4sIG9mZiA9 ICpvZmZzZXQ7Ci0gICAgaW50IGhsZW4sIHRhZywgdGMsIGo7CisgICAgaW50 IGhsZW4sIHRhZywgdGMsIGosIGluZmluaXRlID0gMDsKICAgICBWQUxVRSBh cnksIGFzbjFkYXRhLCB2YWx1ZSwgdGFnX2NsYXNzOwogCiAgICAgYXJ5ID0g cmJfYXJ5X25ldygpOwpAQCAtNzUyLDggKzc2Myw4IEBACiAJZWxzZQogCSAg ICB0YWdfY2xhc3MgPSBzVU5JVkVSU0FMOwogCWlmKGogJiBWX0FTTjFfQ09O U1RSVUNURUQpewotCSAgICAvKiBUT0RPOiBpZiBqID09IDB4MjEgaXQgaXMg aW5kZWZpbml0ZSBsZW5ndGggb2JqZWN0LiAqLwogCSAgICBpZigoaiA9PSAw eDIxKSAmJiAobGVuID09IDApKXsKKyAgICAgICAgICAgICAgICBpbmZpbml0 ZSA9IDE7CiAJCWxvbmcgbGFzdG9mZiA9IG9mZjsKIAkJdmFsdWUgPSBvc3Ns X2FzbjFfZGVjb2RlMCgmcCwgbGVuZ3RoLCAmb2ZmLCBkZXB0aCsxLCAwLCB5 aWVsZCk7CiAJCWxlbiA9IG9mZiAtIGxhc3RvZmY7CkBAIC03OTgsNyArODA5 LDE4IEBACiAJCSAgICBicmVhazsKIAkJfQogCSAgICB9Ci0JICAgIGFzbjFk YXRhID0gcmJfZnVuY2FsbChrbGFzcywgcmJfaW50ZXJuKCJuZXciKSwgMSwg dmFsdWUpOworICAgICAgICAgICAgaWYgKGluZmluaXRlICYmICEodGFnID09 IFZfQVNOMV9TRVFVRU5DRSB8fCB0YWcgPT0gVl9BU04xX1NFVCkpeworICAg ICAgICAgICAgICAgIGFzbjFkYXRhID0gcmJfZnVuY2FsbChjQVNOMUNvbnN0 cnVjdGl2ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcmJfaW50ZXJuKCJuZXciKSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIElOVDJOVU0odGFnKSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUW5pbCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgSUQyU1lNKHRhZ19jbGFzcykpOworICAg ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZXsKKwkgICAgICAgIGFzbjFk YXRhID0gcmJfZnVuY2FsbChrbGFzcywgcmJfaW50ZXJuKCJuZXciKSwgMSwg dmFsdWUpOworICAgICAgICAgICAgfQogCSAgICBpZih0YWcgPT0gVl9BU04x X0JJVF9TVFJJTkcpewogCQlyYl9pdl9zZXQoYXNuMWRhdGEsICJAdW51c2Vk X2JpdHMiLCBMT05HMk5VTShmbGFnKSk7CiAJICAgIH0KQEAgLTgwNyw2ICs4 MjksMTIgQEAKIAkgICAgYXNuMWRhdGEgPSByYl9mdW5jYWxsKGNBU04xRGF0 YSwgcmJfaW50ZXJuKCJuZXciKSwgMywKIAkJCQkgIHZhbHVlLCBJTlQyTlVN KHRhZyksIElEMlNZTSh0YWdfY2xhc3MpKTsKIAl9CisKKyAgICAgICAgaWYg KGluZmluaXRlKQorICAgICAgICAgICAgb3NzbF9hc24xX3NldF9pbmZpbml0 ZV9sZW5ndGgoYXNuMWRhdGEsIFF0cnVlKTsKKyAgICAgICAgZWxzZQorICAg ICAgICAgICAgb3NzbF9hc24xX3NldF9pbmZpbml0ZV9sZW5ndGgoYXNuMWRh dGEsIFFmYWxzZSk7CisgICAgICAgIAogCXJiX2FyeV9wdXNoKGFyeSwgYXNu MWRhdGEpOwogCWxlbmd0aCAtPSBsZW47CiAgICAgICAgIGlmKG9uY2UpIGJy ZWFrOwpAQCAtODk0LDEwICs5MjIsMjYgQEAKICAgICBvc3NsX2FzbjFfc2V0 X3ZhbHVlKHNlbGYsIHZhbHVlKTsKICAgICBvc3NsX2FzbjFfc2V0X3RhZ2dp bmcoc2VsZiwgdGFnZ2luZyk7CiAgICAgb3NzbF9hc24xX3NldF90YWdfY2xh c3Moc2VsZiwgdGFnX2NsYXNzKTsKKyAgICBvc3NsX2FzbjFfc2V0X2luZmlu aXRlX2xlbmd0aChzZWxmLCBRZmFsc2UpOwogCiAgICAgcmV0dXJuIHNlbGY7 CiB9CiAKK3N0YXRpYyBWQUxVRQorb3NzbF9hc24xZW9jX2luaXRpYWxpemUo aW50IGFyZ2MsIFZBTFVFICphcmd2LCBWQUxVRSBzZWxmKSB7CisgICAgVkFM VUUgdGFnLCB0YWdnaW5nLCB0YWdfY2xhc3MsIHZhbHVlOworICAgIHRhZyA9 IElOVDJOVU0ob3NzbF9hc24xX2RlZmF1bHRfdGFnKHNlbGYpKTsKKyAgICB0 YWdnaW5nID0gUW5pbDsKKyAgICB0YWdfY2xhc3MgPSBJRDJTWU0oc1VOSVZF UlNBTCk7CisgICAgdmFsdWUgPSByYl9zdHJfbmV3KCIiLCAwKTsKKyAgICBv c3NsX2FzbjFfc2V0X3RhZyhzZWxmLCB0YWcpOworICAgIG9zc2xfYXNuMV9z ZXRfdmFsdWUoc2VsZiwgdmFsdWUpOworICAgIG9zc2xfYXNuMV9zZXRfdGFn Z2luZyhzZWxmLCB0YWdnaW5nKTsKKyAgICBvc3NsX2FzbjFfc2V0X3RhZ19j bGFzcyhzZWxmLCB0YWdfY2xhc3MpOworICAgIG9zc2xfYXNuMV9zZXRfaW5m aW5pdGVfbGVuZ3RoKHNlbGYsIFFmYWxzZSk7CisgICAgcmV0dXJuIHNlbGY7 Cit9CisKIHN0YXRpYyBpbnQKIG9zc2xfaTJkX0FTTjFfVFlQRShBU04xX1RZ UEUgKmEsIHVuc2lnbmVkIGNoYXIgKipwcCkKIHsKQEAgLTk2MiwyOSArMTAw Niw2NCBAQAogc3RhdGljIFZBTFVFCiBvc3NsX2FzbjFjb25zX3RvX2RlcihW QUxVRSBzZWxmKQogewotICAgIGludCB0YWcsIHRuLCB0YywgZXhwbGljaXQ7 CisgICAgaW50IHRhZywgdG4sIHRjLCBleHBsaWNpdCwgY29uc3RydWN0ZWQg PSAxOworICAgIGludCBmb3VuZF9wcmltID0gMDsKICAgICBsb25nIHNlcV9s ZW4sIGxlbmd0aDsKICAgICB1bnNpZ25lZCBjaGFyICpwOwotICAgIFZBTFVF IHZhbHVlLCBzdHI7CisgICAgVkFMVUUgdmFsdWUsIHN0ciwgaW5mX2xlbmd0 aCwgYXJ5LCBleGFtcGxlOwogCi0gICAgdGFnID0gb3NzbF9hc24xX2RlZmF1 bHRfdGFnKHNlbGYpOwogICAgIHRuID0gTlVNMklOVChvc3NsX2FzbjFfZ2V0 X3RhZyhzZWxmKSk7CiAgICAgdGMgPSBvc3NsX2FzbjFfdGFnX2NsYXNzKHNl bGYpOworICAgIGluZl9sZW5ndGggPSBvc3NsX2FzbjFfZ2V0X2luZmluaXRl X2xlbmd0aChzZWxmKTsKKyAgICBpZiAoaW5mX2xlbmd0aCA9PSBRdHJ1ZSkg eworICAgICAgICBjb25zdHJ1Y3RlZCA9IDI7CisgICAgICAgIGlmIChDTEFT U19PRihzZWxmKSA9PSBjQVNOMVNlcXVlbmNlIHx8CisgICAgICAgICAgICBD TEFTU19PRihzZWxmKSA9PSBjQVNOMVNldCkgeworICAgICAgICAgICAgdGFn ID0gb3NzbF9hc24xX2RlZmF1bHRfdGFnKHNlbGYpOworICAgICAgICB9Cisg ICAgICAgIGVsc2UgeyAvKkJJVF9TVFJJTkcgT1IgT0NURVRfU1RSSU5HKi8K KyAgICAgICAgICAgIGFyeSA9IG9zc2xfYXNuMV9nZXRfdmFsdWUoc2VsZik7 CisgICAgICAgICAgICAvKiBSZWN1cnNpdmVseSBkZXNjZW5kIHVudGlsIGEg cHJpbWl0aXZlIHZhbHVlIGlzIGZvdW5kLgorICAgICAgICAgICAgICAgVGhl IG92ZXJhbGwgdmFsdWUgb2YgdGhlIGVudGlyZSBjb25zdHJ1Y3RlZCBlbmNv ZGluZworICAgICAgICAgICAgICAgaXMgb2YgdGhlIHR5cGUgb2YgdGhlIGZp cnN0IHByaW1pdGl2ZSBlbmNvZGluZyB0byBiZQorICAgICAgICAgICAgICAg Zm91bmQuICovCisgICAgICAgICAgICB3aGlsZSAoIWZvdW5kX3ByaW0pewor ICAgICAgICAgICAgICAgIGV4YW1wbGUgPSByYl9hcnlfZW50cnkoYXJ5LCAw KTsKKyAgICAgICAgICAgICAgICBpZiAocmJfb2JqX2lzX2tpbmRfb2YoZXhh bXBsZSwgY0FTTjFQcmltaXRpdmUpKXsKKyAgICAgICAgICAgICAgICAgICAg Zm91bmRfcHJpbSA9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvKiBleGFtcGxl IGlzIGFub3RoZXIgQVNOMUNvbnN0cnVjdGl2ZSAqLworICAgICAgICAgICAg ICAgICAgICBpZiAoIXJiX29ial9pc19raW5kX29mKGV4YW1wbGUsIGNBU04x Q29uc3RydWN0aXZlKSl7CisgICAgICAgICAgICAgICAgICAgICAgICBvc3Ns X3JhaXNlKGVBU04xRXJyb3IsICJpbnZhbGlkIGNvbnN0cnVjdGVkIGVuY29k aW5nIik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUW5pbDsg LyogZHVtbXkgKi8KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgICAgICBhcnkgPSBvc3NsX2FzbjFfZ2V0X3ZhbHVlKGV4YW1wbGUp OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIHRhZyA9IG9zc2xfYXNuMV9kZWZhdWx0X3RhZyhleGFtcGxlKTsKKyAg ICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgdGFnID0gb3Nz bF9hc24xX2RlZmF1bHRfdGFnKHNlbGYpOworICAgIH0KICAgICBleHBsaWNp dCA9IG9zc2xfYXNuMV9pc19leHBsaWNpdChzZWxmKTsKICAgICB2YWx1ZSA9 IGpvaW5fZGVyKG9zc2xfYXNuMV9nZXRfdmFsdWUoc2VsZikpOwogCi0gICAg c2VxX2xlbiA9IEFTTjFfb2JqZWN0X3NpemUoMSwgUlNUUklOR19MRU4odmFs dWUpLCB0YWcpOwotICAgIGxlbmd0aCA9IEFTTjFfb2JqZWN0X3NpemUoMSwg c2VxX2xlbiwgdG4pOworICAgIHNlcV9sZW4gPSBBU04xX29iamVjdF9zaXpl KGNvbnN0cnVjdGVkLCBSU1RSSU5HX0xFTih2YWx1ZSksIHRhZyk7CisgICAg bGVuZ3RoID0gQVNOMV9vYmplY3Rfc2l6ZShjb25zdHJ1Y3RlZCwgc2VxX2xl biwgdG4pOwogICAgIHN0ciA9IHJiX3N0cl9uZXcoMCwgbGVuZ3RoKTsKICAg ICBwID0gKHVuc2lnbmVkIGNoYXIgKilSU1RSSU5HX1BUUihzdHIpOwogICAg IGlmKHRjID09IFZfQVNOMV9VTklWRVJTQUwpCi0JQVNOMV9wdXRfb2JqZWN0 KCZwLCAxLCBSU1RSSU5HX0xFTih2YWx1ZSksIHRuLCB0Yyk7CisgICAgCUFT TjFfcHV0X29iamVjdCgmcCwgY29uc3RydWN0ZWQsIFJTVFJJTkdfTEVOKHZh bHVlKSwgdG4sIHRjKTsKICAgICBlbHNlewogCWlmKGV4cGxpY2l0KXsKLQkg ICAgQVNOMV9wdXRfb2JqZWN0KCZwLCAxLCBzZXFfbGVuLCB0biwgdGMpOwot CSAgICBBU04xX3B1dF9vYmplY3QoJnAsIDEsIFJTVFJJTkdfTEVOKHZhbHVl KSwgdGFnLCBWX0FTTjFfVU5JVkVSU0FMKTsKKyAgICAJICAgIEFTTjFfcHV0 X29iamVjdCgmcCwgY29uc3RydWN0ZWQsIHNlcV9sZW4sIHRuLCB0Yyk7CisJ ICAgIEFTTjFfcHV0X29iamVjdCgmcCwgY29uc3RydWN0ZWQsIFJTVFJJTkdf TEVOKHZhbHVlKSwgdGFnLCBWX0FTTjFfVU5JVkVSU0FMKTsKIAl9Ci0JZWxz ZSBBU04xX3B1dF9vYmplY3QoJnAsIDEsIFJTVFJJTkdfTEVOKHZhbHVlKSwg dG4sIHRjKTsKKyAgICAgICAgZWxzZXsKKyAgICAgICAgICAgIEFTTjFfcHV0 X29iamVjdCgmcCwgY29uc3RydWN0ZWQsIFJTVFJJTkdfTEVOKHZhbHVlKSwg dG4sIHRjKTsKKyAgICAgICAgfQogICAgIH0KICAgICBtZW1jcHkocCwgUlNU UklOR19QVFIodmFsdWUpLCBSU1RSSU5HX0xFTih2YWx1ZSkpOwogICAgIHAg Kz0gUlNUUklOR19MRU4odmFsdWUpOwpAQCAtMTA4MCw2ICsxMTU5LDcgQEAK IE9TU0xfQVNOMV9JTVBMX0ZBQ1RPUllfTUVUSE9EKEdlbmVyYWxpemVkVGlt ZSkKIE9TU0xfQVNOMV9JTVBMX0ZBQ1RPUllfTUVUSE9EKFNlcXVlbmNlKQog T1NTTF9BU04xX0lNUExfRkFDVE9SWV9NRVRIT0QoU2V0KQorT1NTTF9BU04x X0lNUExfRkFDVE9SWV9NRVRIT0QoRW5kT2ZDb250ZW50KQogCiB2b2lkCiBJ bml0X29zc2xfYXNuMSgpCkBAIC0xMTE1LDExICsxMTk1LDEzIEBACiAgICAg cmJfYXR0cihjQVNOMURhdGEsIHJiX2ludGVybigidmFsdWUiKSwgMSwgMSwg MCk7CiAgICAgcmJfYXR0cihjQVNOMURhdGEsIHJiX2ludGVybigidGFnIiks IDEsIDEsIDApOwogICAgIHJiX2F0dHIoY0FTTjFEYXRhLCByYl9pbnRlcm4o InRhZ19jbGFzcyIpLCAxLCAxLCAwKTsKKyAgICByYl9hdHRyKGNBU04xRGF0 YSwgcmJfaW50ZXJuKCJpbmZpbml0ZV9sZW5ndGgiKSwgMSwgMSwgMCk7CiAg ICAgcmJfZGVmaW5lX21ldGhvZChjQVNOMURhdGEsICJpbml0aWFsaXplIiwg b3NzbF9hc24xZGF0YV9pbml0aWFsaXplLCAzKTsKICAgICByYl9kZWZpbmVf bWV0aG9kKGNBU04xRGF0YSwgInRvX2RlciIsIG9zc2xfYXNuMWRhdGFfdG9f ZGVyLCAwKTsKIAogICAgIGNBU04xUHJpbWl0aXZlID0gcmJfZGVmaW5lX2Ns YXNzX3VuZGVyKG1BU04xLCAiUHJpbWl0aXZlIiwgY0FTTjFEYXRhKTsKICAg ICByYl9hdHRyKGNBU04xUHJpbWl0aXZlLCByYl9pbnRlcm4oInRhZ2dpbmci KSwgMSwgMSwgUXRydWUpOworICAgIHJiX3VuZGVmX21ldGhvZChjQVNOMVBy aW1pdGl2ZSwgImluZmluaXRlX2xlbmd0aD0iKTsKICAgICByYl9kZWZpbmVf bWV0aG9kKGNBU04xUHJpbWl0aXZlLCAiaW5pdGlhbGl6ZSIsIG9zc2xfYXNu MV9pbml0aWFsaXplLCAtMSk7CiAgICAgcmJfZGVmaW5lX21ldGhvZChjQVNO MVByaW1pdGl2ZSwgInRvX2RlciIsIG9zc2xfYXNuMXByaW1fdG9fZGVyLCAw KTsKIApAQCAtMTE2MCw2ICsxMjQyLDggQEAKICAgICBPU1NMX0FTTjFfREVG SU5FX0NMQVNTKFNlcXVlbmNlLCBDb25zdHJ1Y3RpdmUpOwogICAgIE9TU0xf QVNOMV9ERUZJTkVfQ0xBU1MoU2V0LCBDb25zdHJ1Y3RpdmUpOwogCisgICAg T1NTTF9BU04xX0RFRklORV9DTEFTUyhFbmRPZkNvbnRlbnQsIERhdGEpOwor CiAgICAgcmJfZGVmaW5lX3NpbmdsZXRvbl9tZXRob2QoY0FTTjFPYmplY3RJ ZCwgInJlZ2lzdGVyIiwgb3NzbF9hc24xb2JqX3NfcmVnaXN0ZXIsIDMpOwog ICAgIHJiX2RlZmluZV9tZXRob2QoY0FTTjFPYmplY3RJZCwgInNuIiwgb3Nz bF9hc24xb2JqX2dldF9zbiwgMCk7CiAgICAgcmJfZGVmaW5lX21ldGhvZChj QVNOMU9iamVjdElkLCAibG4iLCBvc3NsX2FzbjFvYmpfZ2V0X2xuLCAwKTsK QEAgLTExNjcsNCArMTI1MSw2IEBACiAgICAgcmJfZGVmaW5lX2FsaWFzKGNB U04xT2JqZWN0SWQsICJzaG9ydF9uYW1lIiwgInNuIik7CiAgICAgcmJfZGVm aW5lX2FsaWFzKGNBU04xT2JqZWN0SWQsICJsb25nX25hbWUiLCAibG4iKTsK ICAgICByYl9hdHRyKGNBU04xQml0U3RyaW5nLCByYl9pbnRlcm4oInVudXNl ZF9iaXRzIiksIDEsIDEsIDApOworCisgICAgcmJfZGVmaW5lX21ldGhvZChj QVNOMUVuZE9mQ29udGVudCwgImluaXRpYWxpemUiLCBvc3NsX2FzbjFlb2Nf aW5pdGlhbGl6ZSwgLTEpOwogfQpJbmRleDogcnVieS90ZXN0L29wZW5zc2wv dGVzdF9hc24xLnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJ1Ynkv dGVzdC9vcGVuc3NsL3Rlc3RfYXNuMS5yYgkocmV2aXNpb24gMjk5NjUpCisr KyBydWJ5L3Rlc3Qvb3BlbnNzbC90ZXN0X2FzbjEucmIJKHdvcmtpbmcgY29w eSkKQEAgLTIwOCw0ICsyMDgsMjMxIEBACiAgICAgICBhc3NlcnRfZXF1YWwo diwgT3BlblNTTDo6QVNOMS5kZWNvZGUodHlwZS5uZXcodikudG9fZGVyKS52 YWx1ZSkKICAgICBlbmQKICAgZW5kCisKKyAgZGVmIHRlc3RfcHJpbWl0aXZl X2Nhbm5vdF9zZXRfaW5maW5pdGVfbGVuZ3RoCisgICAgYmVnaW4KKyAgICAg IHByaW0gPSBPcGVuU1NMOjpBU04xOjpJbnRlZ2VyLm5ldyg1MCkKKyAgICAg IGFzc2VydF9lcXVhbChmYWxzZSwgcHJpbS5pbmZpbml0ZV9sZW5ndGgpCisg ICAgICBwcmltLmluZmluaXRlX2xlbmd0aCA9IHRydWUKKyAgICAgIGZsdW5r KCdDb3VsZCBzZXQgaW5maW5pdGUgbGVuZ3RoIG9uIHByaW1pdGl2ZSB2YWx1 ZScpCisgICAgcmVzY3VlIE5vTWV0aG9kRXJyb3IgPT4gZQorICAgICAgI29r CisgICAgZW5kCisgIGVuZAorCisgIGRlZiB0ZXN0X3NlcV9pbmZpbml0ZV9s ZW5ndGgKKyAgICBiZWdpbgorICAgICAgY29udGVudCA9IFsgT3BlblNTTDo6 QVNOMTo6TnVsbC5uZXcobmlsKSwKKyAgICAgICAgICAgICAgICAgIE9wZW5T U0w6OkFTTjE6OkVuZE9mQ29udGVudC5uZXcoKSBdCisgICAgICBjb25zID0g T3BlblNTTDo6QVNOMTo6U2VxdWVuY2UubmV3KGNvbnRlbnQpCisgICAgICBj b25zLmluZmluaXRlX2xlbmd0aCA9IHRydWUKKyAgICAgIGV4cGVjdGVkID0g JXd7IDMwIDgwIDA1IDAwIDAwIDAwIH0KKyAgICAgIHJhdyA9IFtleHBlY3Rl ZC5qb2luKCcnKV0ucGFjaygnSConKQorICAgICAgYXNzZXJ0X2VxdWFsKHJh dywgY29ucy50b19kZXIpCisgICAgICBhc3NlcnRfZXF1YWwocmF3LCBPcGVu U1NMOjpBU04xLmRlY29kZShyYXcpLnRvX2RlcikKKyAgICBlbmQKKyAgZW5k CisKKyAgZGVmIHRlc3Rfc2V0X2luZmluaXRlX2xlbmd0aAorICAgIGJlZ2lu CisgICAgICBjb250ZW50ID0gWyBPcGVuU1NMOjpBU04xOjpOdWxsLm5ldyhu aWwpLAorICAgICAgICAgICAgICAgICAgT3BlblNTTDo6QVNOMTo6RW5kT2ZD b250ZW50Lm5ldygpIF0KKyAgICAgIGNvbnMgPSBPcGVuU1NMOjpBU04xOjpT ZXQubmV3KGNvbnRlbnQpCisgICAgICBjb25zLmluZmluaXRlX2xlbmd0aCA9 IHRydWUKKyAgICAgIGV4cGVjdGVkID0gJXd7IDMxIDgwIDA1IDAwIDAwIDAw IH0KKyAgICAgIHJhdyA9IFtleHBlY3RlZC5qb2luKCcnKV0ucGFjaygnSCon KQorICAgICAgYXNzZXJ0X2VxdWFsKHJhdywgY29ucy50b19kZXIpCisgICAg ICBhc3NlcnRfZXF1YWwocmF3LCBPcGVuU1NMOjpBU04xLmRlY29kZShyYXcp LnRvX2RlcikKKyAgICBlbmQKKyAgZW5kCisKKyAgZGVmIHRlc3Rfb2N0ZXRf c3RyaW5nX2luZmluaXRlX2xlbmd0aAorICAgIGJlZ2luCisgICAgICBvY3Rl dHMgPSBbIE9wZW5TU0w6OkFTTjE6Ok9jdGV0U3RyaW5nLm5ldygnYWFhJyks CisgICAgICAgICAgICAgICAgIE9wZW5TU0w6OkFTTjE6OkVuZE9mQ29udGVu dC5uZXcoKSBdCisgICAgICBjb25zID0gT3BlblNTTDo6QVNOMTo6Q29uc3Ry dWN0aXZlLm5ldygKKyAgICAgICAgb2N0ZXRzLAorICAgICAgICBPcGVuU1NM OjpBU04xOjpPQ1RFVF9TVFJJTkcsCisgICAgICAgIG5pbCwKKyAgICAgICAg OlVOSVZFUlNBTCkKKyAgICAgIGNvbnMuaW5maW5pdGVfbGVuZ3RoID0gdHJ1 ZQorICAgICAgZXhwZWN0ZWQgPSAld3sgMjQgODAgMDQgMDMgNjEgNjEgNjEg MDAgMDAgfQorICAgICAgcmF3ID0gW2V4cGVjdGVkLmpvaW4oJycpXS5wYWNr KCdIKicpCisgICAgICBhc3NlcnRfZXF1YWwocmF3LCBjb25zLnRvX2RlcikK KyAgICAgIGFzc2VydF9lcXVhbChyYXcsIE9wZW5TU0w6OkFTTjEuZGVjb2Rl KHJhdykudG9fZGVyKQorICAgIGVuZAorICBlbmQKKworICBkZWYgdGVzdF9w cmltX2V4cGxpY2l0X3RhZ2dpbmcKKyAgICBiZWdpbgorICAgICAgb2N0X3N0 ciA9IE9wZW5TU0w6OkFTTjE6Ok9jdGV0U3RyaW5nLm5ldygiYSIsIDAsIDpF WFBMSUNJVCkKKyAgICAgIGV4cGVjdGVkID0gJXd7IEEwIDAzIDA0IDAxIDYx IH0KKyAgICAgIHJhdyA9IFtleHBlY3RlZC5qb2luKCcnKV0ucGFjaygnSCon KQorICAgICAgYXNzZXJ0X2VxdWFsKHJhdywgb2N0X3N0ci50b19kZXIpCisg ICAgICBhc3NlcnRfZXF1YWwocmF3LCBPcGVuU1NMOjpBU04xLmRlY29kZShy YXcpLnRvX2RlcikKKyAgICBlbmQKKyAgZW5kCisKKyAgZGVmIHRlc3RfcHJp bV9leHBsaWNpdF90YWdnaW5nX3RhZ19jbGFzcworICAgIGJlZ2luCisgICAg ICBvY3Rfc3RyID0gT3BlblNTTDo6QVNOMTo6T2N0ZXRTdHJpbmcubmV3KCJh IiwgMCwgOkVYUExJQ0lUKQorICAgICAgb2N0X3N0cjIgPSBPcGVuU1NMOjpB U04xOjpPY3RldFN0cmluZy5uZXcoCisgICAgICAgICJhIiwKKyAgICAgICAg MCwKKyAgICAgICAgOkVYUExJQ0lULAorICAgICAgICA6Q09OVEVYVF9TUEVD SUZJQykKKyAgICAgIGFzc2VydF9lcXVhbChvY3Rfc3RyLnRvX2Rlciwgb2N0 X3N0cjIudG9fZGVyKQorICAgIGVuZAorICBlbmQKKworICBkZWYgdGVzdF9w cmltX2ltcGxpY2l0X3RhZ2dpbmcKKyAgICBiZWdpbgorICAgICAgaW50ID0g T3BlblNTTDo6QVNOMTo6SW50ZWdlci5uZXcoMSwgMCwgOklNUExJQ0lUKQor ICAgICAgZXhwZWN0ZWQgPSAld3sgODAgMDEgMDEgfQorICAgICAgcmF3ID0g W2V4cGVjdGVkLmpvaW4oJycpXS5wYWNrKCdIKicpCisgICAgICBhc3NlcnRf ZXF1YWwocmF3LCBpbnQudG9fZGVyKQorICAgICAgYXNzZXJ0X2VxdWFsKHJh dywgT3BlblNTTDo6QVNOMS5kZWNvZGUocmF3KS50b19kZXIpCisgICAgZW5k CisgIGVuZAorCisgIGRlZiB0ZXN0X3ByaW1faW1wbGljaXRfdGFnZ2luZ190 YWdfY2xhc3MKKyAgICBiZWdpbgorICAgICAgaW50ID0gT3BlblNTTDo6QVNO MTo6SW50ZWdlci5uZXcoMSwgMCwgOklNUExJQ0lUKQorICAgICAgaW50MiA9 IE9wZW5TU0w6OkFTTjE6OkludGVnZXIubmV3KDEsIDAsIDpJTVBMSUNJVCwg OkNPTlRFWFRfU1BFQ0lGSUMpOworICAgICAgYXNzZXJ0X2VxdWFsKGludC50 b19kZXIsIGludDIudG9fZGVyKQorICAgIGVuZAorICBlbmQKKworICBkZWYg dGVzdF9jb25zX2V4cGxpY2l0X3RhZ2dpbmcKKyAgICBiZWdpbgorICAgICAg Y29udGVudCA9IFsgT3BlblNTTDo6QVNOMTo6UHJpbnRhYmxlU3RyaW5nLm5l dygnYWJjJykgXQorICAgICAgc2VxID0gT3BlblNTTDo6QVNOMTo6U2VxdWVu Y2UubmV3KGNvbnRlbnQsIDIsIDpFWFBMSUNJVCkKKyAgICAgIGV4cGVjdGVk ID0gJXd7IEEyIDA3IDMwIDA1IDEzIDAzIDYxIDYyIDYzIH0KKyAgICAgIHJh dyA9IFtleHBlY3RlZC5qb2luKCcnKV0ucGFjaygnSConKQorICAgICAgYXNz ZXJ0X2VxdWFsKHJhdywgc2VxLnRvX2RlcikKKyAgICAgIGFzc2VydF9lcXVh bChyYXcsIE9wZW5TU0w6OkFTTjEuZGVjb2RlKHJhdykudG9fZGVyKQorICAg IGVuZAorICBlbmQKKworICBkZWYgdGVzdF9jb25zX2V4cGxpY2l0X3RhZ2dp bmdfaW5mX2xlbmd0aAorICAgIGJlZ2luCisgICAgICBjb250ZW50ID0gWyBP cGVuU1NMOjpBU04xOjpQcmludGFibGVTdHJpbmcubmV3KCdhYmMnKSAsCisg ICAgICAgICAgICAgICAgICBPcGVuU1NMOjpBU04xOjpFbmRPZkNvbnRlbnQu bmV3KCkgXQorICAgICAgc2VxID0gT3BlblNTTDo6QVNOMTo6U2VxdWVuY2Uu bmV3KGNvbnRlbnQsIDIsIDpFWFBMSUNJVCkKKyAgICAgIHNlcS5pbmZpbml0 ZV9sZW5ndGggPSB0cnVlCisgICAgICBleHBlY3RlZCA9ICV3eyBBMiA4MCAz MCA4MCAxMyAwMyA2MSA2MiA2MyAwMCAwMCB9CisgICAgICByYXcgPSBbZXhw ZWN0ZWQuam9pbignJyldLnBhY2soJ0gqJykKKyAgICAgIGFzc2VydF9lcXVh bChyYXcsIHNlcS50b19kZXIpCisgICAgICBhc3NlcnRfZXF1YWwocmF3LCBP cGVuU1NMOjpBU04xLmRlY29kZShyYXcpLnRvX2RlcikKKyAgICBlbmQKKyAg ZW5kCisKKyAgZGVmIHRlc3RfY29uc19pbXBsaWNpdF90YWdnaW5nCisgICAg YmVnaW4KKyAgICAgIGNvbnRlbnQgPSBbIE9wZW5TU0w6OkFTTjE6Ok51bGwu bmV3KG5pbCkgXQorICAgICAgc2VxID0gT3BlblNTTDo6QVNOMTo6U2VxdWVu Y2UubmV3KGNvbnRlbnQsIDEsIDpJTVBMSUNJVCkKKyAgICAgIGV4cGVjdGVk ID0gJXd7IEExIDAyIDA1IDAwIH0KKyAgICAgIHJhdyA9IFtleHBlY3RlZC5q b2luKCcnKV0ucGFjaygnSConKQorICAgICAgYXNzZXJ0X2VxdWFsKHJhdywg c2VxLnRvX2RlcikKKyAgICAgIGFzc2VydF9lcXVhbChyYXcsIE9wZW5TU0w6 OkFTTjEuZGVjb2RlKHJhdykudG9fZGVyKQorICAgIGVuZAorICBlbmQKKwor ICBkZWYgdGVzdF9jb25zX2ltcGxpY2l0X3RhZ2dpbmdfaW5mX2xlbmd0aAor ICAgIGJlZ2luCisgICAgICBjb250ZW50ID0gWyBPcGVuU1NMOjpBU04xOjpO dWxsLm5ldyhuaWwpLAorICAgICAgICAgICAgICAgICAgT3BlblNTTDo6QVNO MTo6RW5kT2ZDb250ZW50Lm5ldygpIF0KKyAgICAgIHNlcSA9IE9wZW5TU0w6 OkFTTjE6OlNlcXVlbmNlLm5ldyhjb250ZW50LCAxLCA6SU1QTElDSVQpCisg ICAgICBzZXEuaW5maW5pdGVfbGVuZ3RoID0gdHJ1ZQorICAgICAgZXhwZWN0 ZWQgPSAld3sgQTEgODAgMDUgMDAgMDAgMDAgfQorICAgICAgcmF3ID0gW2V4 cGVjdGVkLmpvaW4oJycpXS5wYWNrKCdIKicpCisgICAgICBhc3NlcnRfZXF1 YWwocmF3LCBzZXEudG9fZGVyKQorICAgICAgYXNzZXJ0X2VxdWFsKHJhdywg T3BlblNTTDo6QVNOMS5kZWNvZGUocmF3KS50b19kZXIpCisgICAgZW5kCisg IGVuZAorCisgIGRlZiB0ZXN0X29jdGV0X3N0cmluZ19pbmZpbml0ZV9sZW5n dGhfZXhwbGljaXRfdGFnZ2luZworICAgIGJlZ2luCisgICAgICBvY3RldHMg PSBbIE9wZW5TU0w6OkFTTjE6Ok9jdGV0U3RyaW5nLm5ldygnYWFhJyksCisg ICAgICAgICAgICAgICAgIE9wZW5TU0w6OkFTTjE6OkVuZE9mQ29udGVudC5u ZXcoKSBdCisgICAgICBjb25zID0gT3BlblNTTDo6QVNOMTo6Q29uc3RydWN0 aXZlLm5ldygKKyAgICAgICAgb2N0ZXRzLAorICAgICAgICAxLAorICAgICAg ICA6RVhQTElDSVQpCisgICAgICBjb25zLmluZmluaXRlX2xlbmd0aCA9IHRy dWUKKyAgICAgIGV4cGVjdGVkID0gJXd7IEExIDgwIDI0IDgwIDA0IDAzIDYx IDYxIDYxIDAwIDAwIH0KKyAgICAgIHJhdyA9IFtleHBlY3RlZC5qb2luKCcn KV0ucGFjaygnSConKQorICAgICAgYXNzZXJ0X2VxdWFsKHJhdywgY29ucy50 b19kZXIpCisgICAgICBhc3NlcnRfZXF1YWwocmF3LCBPcGVuU1NMOjpBU04x LmRlY29kZShyYXcpLnRvX2RlcikKKyAgICBlbmQKKyAgZW5kCisKKyAgZGVm IHRlc3Rfb2N0ZXRfc3RyaW5nX2luZmluaXRlX2xlbmd0aF9pbXBsaWNpdF90 YWdnaW5nCisgICAgYmVnaW4KKyAgICAgIG9jdGV0cyA9IFsgT3BlblNTTDo6 QVNOMTo6T2N0ZXRTdHJpbmcubmV3KCdhYWEnKSwKKyAgICAgICAgICAgICAg ICAgT3BlblNTTDo6QVNOMTo6RW5kT2ZDb250ZW50Lm5ldygpIF0KKyAgICAg IGNvbnMgPSBPcGVuU1NMOjpBU04xOjpDb25zdHJ1Y3RpdmUubmV3KAorICAg ICAgICBvY3RldHMsCisgICAgICAgIDAsCisgICAgICAgIDpJTVBMSUNJVCkK KyAgICAgIGNvbnMuaW5maW5pdGVfbGVuZ3RoID0gdHJ1ZQorICAgICAgZXhw ZWN0ZWQgPSAld3sgQTAgODAgMDQgMDMgNjEgNjEgNjEgMDAgMDAgfQorICAg ICAgcmF3ID0gW2V4cGVjdGVkLmpvaW4oJycpXS5wYWNrKCdIKicpCisgICAg ICBhc3NlcnRfZXF1YWwocmF3LCBjb25zLnRvX2RlcikKKyAgICAgIGFzc2Vy dF9lcXVhbChyYXcsIE9wZW5TU0w6OkFTTjEuZGVjb2RlKHJhdykudG9fZGVy KQorICAgIGVuZAorICBlbmQKKworICBkZWYgdGVzdF9yZWN1cnNpdmVfb2N0 ZXRfc3RyaW5nX2luZmluaXRlX2xlbmd0aAorICAgIGJlZ2luCisgICAgICBv Y3RldHNfc3ViMSA9IFsgT3BlblNTTDo6QVNOMTo6T2N0ZXRTdHJpbmcubmV3 KCJceDAxIiksCisgICAgICAgICAgICAgICAgICAgICAgT3BlblNTTDo6QVNO MTo6RW5kT2ZDb250ZW50Lm5ldygpIF0KKyAgICAgIG9jdGV0c19zdWIyID0g WyBPcGVuU1NMOjpBU04xOjpPY3RldFN0cmluZy5uZXcoIlx4MDIiKSwKKyAg ICAgICAgICAgICAgICAgICAgICBPcGVuU1NMOjpBU04xOjpFbmRPZkNvbnRl bnQubmV3KCkgXQorICAgICAgY29udGFpbmVyMSA9IE9wZW5TU0w6OkFTTjE6 OkNvbnN0cnVjdGl2ZS5uZXcoCisgICAgICAgIG9jdGV0c19zdWIxLAorICAg ICAgICBPcGVuU1NMOjpBU04xOjpPQ1RFVF9TVFJJTkcsCisgICAgICAgIG5p bCwKKyAgICAgICAgOlVOSVZFUlNBTCkKKyAgICAgIGNvbnRhaW5lcjEuaW5m aW5pdGVfbGVuZ3RoID0gdHJ1ZQorICAgICAgY29udGFpbmVyMiA9IE9wZW5T U0w6OkFTTjE6OkNvbnN0cnVjdGl2ZS5uZXcoCisgICAgICAgIG9jdGV0c19z dWIyLAorICAgICAgICBPcGVuU1NMOjpBU04xOjpPQ1RFVF9TVFJJTkcsCisg ICAgICAgIG5pbCwKKyAgICAgICAgOlVOSVZFUlNBTCkKKyAgICAgIGNvbnRh aW5lcjIuaW5maW5pdGVfbGVuZ3RoID0gdHJ1ZQorICAgICAgb2N0ZXRzMyA9 IE9wZW5TU0w6OkFTTjE6Ok9jdGV0U3RyaW5nLm5ldygiXHgwMyIpCisKKyAg ICAgIG9jdGV0cyA9IFsgY29udGFpbmVyMSwgY29udGFpbmVyMiwgb2N0ZXRz MywKKyAgICAgICAgICAgICAgICAgT3BlblNTTDo6QVNOMTo6RW5kT2ZDb250 ZW50Lm5ldygpIF0KKyAgICAgIGNvbnMgPSBPcGVuU1NMOjpBU04xOjpDb25z dHJ1Y3RpdmUubmV3KAorICAgICAgICBvY3RldHMsCisgICAgICAgIE9wZW5T U0w6OkFTTjE6Ok9DVEVUX1NUUklORywKKyAgICAgICAgbmlsLAorICAgICAg ICA6VU5JVkVSU0FMKQorICAgICAgY29ucy5pbmZpbml0ZV9sZW5ndGggPSB0 cnVlCisgICAgICBleHBlY3RlZCA9ICV3eyAyNCA4MCAyNCA4MCAwNCAwMSAw MSAwMCAwMCAyNCA4MCAwNCAwMSAwMiAwMCAwMCAwNCAwMSAwMyAwMCAwMCB9 CisgICAgICByYXcgPSBbZXhwZWN0ZWQuam9pbignJyldLnBhY2soJ0gqJykK KyAgICAgIGFzc2VydF9lcXVhbChyYXcsIGNvbnMudG9fZGVyKQorICAgICAg YXNzZXJ0X2VxdWFsKHJhdywgT3BlblNTTDo6QVNOMS5kZWNvZGUocmF3KS50 b19kZXIpCisgICAgZW5kCisgIGVuZAorCisgIGRlZiB0ZXN0X2JpdF9zdHJp bmdfaW5maW5pdGVfbGVuZ3RoCisgICAgYmVnaW4KKyAgICAgIGNvbnRlbnQg PSBbIE9wZW5TU0w6OkFTTjE6OkJpdFN0cmluZy5uZXcoIlx4MDEiKSwKKyAg ICAgICAgICAgICAgICAgIE9wZW5TU0w6OkFTTjE6OkVuZE9mQ29udGVudC5u ZXcoKSBdCisgICAgICBjb25zID0gT3BlblNTTDo6QVNOMTo6Q29uc3RydWN0 aXZlLm5ldygKKyAgICAgICAgY29udGVudCwKKyAgICAgICAgT3BlblNTTDo6 QVNOMTo6QklUX1NUUklORywKKyAgICAgICAgbmlsLAorICAgICAgICA6VU5J VkVSU0FMKQorICAgICAgY29ucy5pbmZpbml0ZV9sZW5ndGggPSB0cnVlCisg ICAgICBleHBlY3RlZCA9ICV3eyAyMyA4MCAwMyAwMiAwMCAwMSAwMCAwMCB9 CisgICAgICByYXcgPSBbZXhwZWN0ZWQuam9pbignJyldLnBhY2soJ0gqJykK KyAgICAgIGFzc2VydF9lcXVhbChyYXcsIGNvbnMudG9fZGVyKQorICAgICAg YXNzZXJ0X2VxdWFsKHJhdywgT3BlblNTTDo6QVNOMS5kZWNvZGUocmF3KS50 b19kZXIpCisgICAgZW5kCisgIGVuZAorICAKIGVuZCBpZiBkZWZpbmVkPyhP cGVuU1NMKQo= --mimepart_4cf5ab44e2475_2c1fb5b4cd44297--