<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>151124</bug_id>
          
          <creation_ts>2015-11-10 18:58:03 -0800</creation_ts>
          <short_desc>B3 should be able to compile and canonicalize Mul</short_desc>
          <delta_ts>2015-11-11 12:35:49 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>150279</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1141029</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-10 18:58:03 -0800</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141030</commentid>
    <comment_count>1</comment_count>
      <attachid>265260</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-10 18:59:23 -0800</bug_when>
    <thetext>Created attachment 265260
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141037</commentid>
    <comment_count>2</comment_count>
      <attachid>265261</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-10 19:47:01 -0800</bug_when>
    <thetext>Created attachment 265261
a bit more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141059</commentid>
    <comment_count>3</comment_count>
      <attachid>265268</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-10 21:20:41 -0800</bug_when>
    <thetext>Created attachment 265268
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141060</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-10 21:23:42 -0800</bug_when>
    <thetext>Attachment 265268 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/B3ConstDoubleValue.h:47:  The parameter name &quot;proc&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:209:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:302:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2855:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2861:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 5 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141064</commentid>
    <comment_count>5</comment_count>
      <attachid>265268</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-11-10 21:32:59 -0800</bug_when>
    <thetext>Comment on attachment 265268
the patch

View in context: https://bugs.webkit.org/attachment.cgi?id=265268&amp;action=review

r=me

&gt; Source/JavaScriptCore/b3/B3ReduceStrength.cpp:227
&gt; +                // Turn this: Mul(value, 1)
&gt; +                // Into this: value
&gt; +                if (factor == 1) {
&gt; +                    m_value-&gt;replaceWithIdentity(m_value-&gt;child(0));
&gt; +                    break;
&gt; +                }

Should we do -1 here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141065</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-10 21:40:54 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; Comment on attachment 265268 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=265268&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3ReduceStrength.cpp:227
&gt; &gt; +                // Turn this: Mul(value, 1)
&gt; &gt; +                // Into this: value
&gt; &gt; +                if (factor == 1) {
&gt; &gt; +                    m_value-&gt;replaceWithIdentity(m_value-&gt;child(0));
&gt; &gt; +                    break;
&gt; &gt; +                }
&gt; 
&gt; Should we do -1 here?

Good point!  We should.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141192</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-11 12:35:49 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/192320</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265260</attachid>
            <date>2015-11-10 18:59:23 -0800</date>
            <delta_ts>2015-11-10 19:47:01 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>16203</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmNwcAkocmV2
aXNpb24gMTkyMjg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsNiArNjEsMTMgQEAgVmFsdWUqIENvbnN0MzJWYWx1
ZTo6c3ViQ29uc3RhbnQoUHJvY2VkdQogICAgIHJldHVybiBwcm9jLmFkZDxDb25zdDMyVmFsdWU+
KG9yaWdpbigpLCBtX3ZhbHVlIC0gb3RoZXItPmFzSW50MzIoKSk7CiB9CiAKK1ZhbHVlKiBDb25z
dDMyVmFsdWU6Om11bENvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgVmFsdWUqIG90aGVyKSBjb25z
dAoreworICAgIGlmICghb3RoZXItPmhhc0ludDMyKCkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIHJldHVybiBwcm9jLmFkZDxDb25zdDMyVmFsdWU+KG9yaWdpbigpLCBtX3ZhbHVlICog
b3RoZXItPmFzSW50MzIoKSk7Cit9CisKIFZhbHVlKiBDb25zdDMyVmFsdWU6OmJpdEFuZENvbnN0
YW50KFByb2NlZHVyZSYgcHJvYywgVmFsdWUqIG90aGVyKSBjb25zdAogewogICAgIGlmICghb3Ro
ZXItPmhhc0ludDMyKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMy
VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMy
VmFsdWUuaAkocmV2aXNpb24gMTkyMjg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q29uc3QzMlZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDcgQEAgcHVibGljOgog
ICAgIFZhbHVlKiBhZGRDb25zdGFudChQcm9jZWR1cmUmLCBpbnQzMl90IG90aGVyKSBjb25zdCBv
dmVycmlkZTsKICAgICBWYWx1ZSogYWRkQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVy
KSBjb25zdCBvdmVycmlkZTsKICAgICBWYWx1ZSogc3ViQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFs
dWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBWYWx1ZSogbXVsQ29uc3RhbnQoUHJvY2Vk
dXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKICAgICBWYWx1ZSogYml0QW5kQ29u
c3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKICAgICBWYWx1
ZSogYml0T3JDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRl
OwogICAgIFZhbHVlKiBiaXRYb3JDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNv
bnN0IG92ZXJyaWRlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZh
bHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0
VmFsdWUuY3BwCShyZXZpc2lvbiAxOTIyODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNDb25zdDY0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSwxMyBAQCBWYWx1
ZSogQ29uc3Q2NFZhbHVlOjpzdWJDb25zdGFudChQcm9jZWR1CiAgICAgcmV0dXJuIHByb2MuYWRk
PENvbnN0NjRWYWx1ZT4ob3JpZ2luKCksIG1fdmFsdWUgLSBvdGhlci0+YXNJbnQ2NCgpKTsKIH0K
IAorVmFsdWUqIENvbnN0NjRWYWx1ZTo6bXVsQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBWYWx1
ZSogb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKCFvdGhlci0+aGFzSW50NjQoKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0NjRWYWx1ZT4ob3JpZ2lu
KCksIG1fdmFsdWUgKiBvdGhlci0+YXNJbnQ2NCgpKTsKK30KKwogVmFsdWUqIENvbnN0NjRWYWx1
ZTo6Yml0QW5kQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7
CiAgICAgaWYgKCFvdGhlci0+aGFzSW50NjQoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0NvbnN0NjRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0NvbnN0NjRWYWx1ZS5oCShyZXZpc2lvbiAxOTIyODYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQs
NyBAQCBwdWJsaWM6CiAgICAgVmFsdWUqIGFkZENvbnN0YW50KFByb2NlZHVyZSYsIGludDMyX3Qg
b3RoZXIpIGNvbnN0IG92ZXJyaWRlOwogICAgIFZhbHVlKiBhZGRDb25zdGFudChQcm9jZWR1cmUm
LCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwogICAgIFZhbHVlKiBzdWJDb25zdGFudChQ
cm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFZhbHVlKiBtdWxD
b25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwogICAgIFZh
bHVlKiBiaXRBbmRDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJy
aWRlOwogICAgIFZhbHVlKiBiaXRPckNvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhlcikg
Y29uc3Qgb3ZlcnJpZGU7CiAgICAgVmFsdWUqIGJpdFhvckNvbnN0YW50KFByb2NlZHVyZSYsIFZh
bHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDb25zdERvdWJsZVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmNwcAkocmV2aXNpb24gMTkyMjg2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYxLDYgKzYxLDEzIEBAIFZhbHVlKiBDb25zdERvdWJsZVZhbHVlOjpzdWJDb25zdGFu
dChQcm8KICAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3REb3VibGVWYWx1ZT4ob3JpZ2luKCksIG1f
dmFsdWUgLSBvdGhlci0+YXNEb3VibGUoKSk7CiB9CiAKK1ZhbHVlKiBDb25zdERvdWJsZVZhbHVl
OjptdWxDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIFZhbHVlKiBvdGhlcikgY29uc3QKK3sKKyAg
ICBpZiAoIW90aGVyLT5oYXNEb3VibGUoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
cmV0dXJuIHByb2MuYWRkPENvbnN0RG91YmxlVmFsdWU+KG9yaWdpbigpLCBtX3ZhbHVlICogb3Ro
ZXItPmFzRG91YmxlKCkpOworfQorCiBUcmlTdGF0ZSBDb25zdERvdWJsZVZhbHVlOjplcXVhbENv
bnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3QKIHsKICAgICBpZiAoIW90aGVyLT5oYXNEb3VibGUo
KSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVl
LmgJKHJldmlzaW9uIDE5MjI4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0
RG91YmxlVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsNyBAQCBwdWJsaWM6CiAg
ICAgVmFsdWUqIGFkZENvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgaW50MzJfdCBvdGhlcikgY29u
c3Qgb3ZlcnJpZGU7CiAgICAgVmFsdWUqIGFkZENvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgVmFs
dWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKICAgICBWYWx1ZSogc3ViQ29uc3RhbnQoUHJvY2Vk
dXJlJiBwcm9jLCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFZhbHVlKiBtdWxD
b25zdGFudChQcm9jZWR1cmUmIHByb2MsIFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CiAK
ICAgICBUcmlTdGF0ZSBlcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7
CiAgICAgVHJpU3RhdGUgbm90RXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJy
aWRlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAkocmV2aXNp
b24gMTkyMjg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgewogCi12b2lkIGdlbmVyYXRlKFByb2NlZHVyZSYgcHJvY2VkdXJlLCBDQ2FsbEhlbHBl
cnMmIGppdCkKK3ZvaWQgZ2VuZXJhdGUoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIENDYWxsSGVscGVy
cyYgaml0LCB1bnNpZ25lZCBvcHRMZXZlbCkKIHsKICAgICBUaW1pbmdTY29wZSB0aW1pbmdTY29w
ZSgiZ2VuZXJhdGUiKTsKIApAQCAtNTAsNyArNTAsNyBAQCB2b2lkIGdlbmVyYXRlKFByb2NlZHVy
ZSYgcHJvY2VkdXJlLCBDQ2FsCiAgICAgQWlyOjpnZW5lcmF0ZShjb2RlLCBqaXQpOwogfQogCi12
b2lkIGdlbmVyYXRlVG9BaXIoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIEFpcjo6Q29kZSYgY29kZSkK
K3ZvaWQgZ2VuZXJhdGVUb0FpcihQcm9jZWR1cmUmIHByb2NlZHVyZSwgQWlyOjpDb2RlJiBjb2Rl
LCB1bnNpZ25lZCBvcHRMZXZlbCkKIHsKICAgICBUaW1pbmdTY29wZSB0aW1pbmdTY29wZSgiZ2Vu
ZXJhdGVUb0FpciIpOwogICAgIApAQCAtNjUsMTEgKzY1LDEzIEBAIHZvaWQgZ2VuZXJhdGVUb0Fp
cihQcm9jZWR1cmUmIHByb2NlZHVyZSwKICAgICAgICAgZGF0YUxvZygiSW5pdGlhbCBCMzpcbiIp
OwogICAgICAgICBkYXRhTG9nKHByb2NlZHVyZSk7CiAgICAgfQotCi0gICAgcmVkdWNlU3RyZW5n
dGgocHJvY2VkdXJlKTsKICAgICAKLSAgICAvLyBGSVhNRTogQWRkIG1vcmUgb3B0aW1pemF0aW9u
cyBoZXJlLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NTA1MDcKKyAgICBpZiAob3B0TGV2ZWwgPj0gMSkgeworICAgICAgICByZWR1Y2VTdHJlbmd0aChw
cm9jZWR1cmUpOworICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IEFkZCBtb3JlIG9wdGltaXph
dGlvbnMgaGVyZS4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1MDUwNworICAgIH0KIAogICAgIG1vdmVDb25zdGFudHMocHJvY2VkdXJlKTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5oCShyZXZpc2lvbiAxOTIyODYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSwxMiArMzksMTIgQEAgbmFtZXNwYWNlIEFpciB7IGNsYXNzIENvZGU7IH0KIAogLy8g
VGhpcyB0YWtlcyBhIEIzOjpQcm9jZWR1cmUsIG9wdGltaXplcyBpdCBpbi1wbGFjZSwgYW5kIGdl
bmVyYXRlcyBpdCB0byBtYWNoaW5lIGNvZGUgYnkgZmlyc3QKIC8vIGludGVybmFsbHkgY29udmVy
dGluZyB0byBhbiBBaXI6OkNvZGUgYW5kIHRoZW4gZ2VuZXJhdGluZyB0aGF0LgotSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCBnZW5lcmF0ZShQcm9jZWR1cmUmLCBDQ2FsbEhlbHBlcnMmKTsKK0pTX0VY
UE9SVF9QUklWQVRFIHZvaWQgZ2VuZXJhdGUoUHJvY2VkdXJlJiwgQ0NhbGxIZWxwZXJzJiwgdW5z
aWduZWQgb3B0TGV2ZWwgPSAxKTsKIAogLy8gVGhpcyB0YWtlcyBhIEIzOjpQcm9jZWR1cmUsIG9w
dGltaXplcyBpdCBpbi1wbGFjZSwgYW5kIGxvd2VycyBpdCB0byBBaXIuIFlvdSBjYW4gdGhlbiBn
ZW5lcmF0ZQogLy8gdGhlIEFpciB0byBtYWNoaW5lIGNvZGUgdXNpbmcgQWlyOjpnZW5lcmF0ZSgp
LiBOb3RlIHRoYXQgYW4gQWlyOjpDb2RlIHdpbGwgaGF2ZSBwb2ludGVycyBpbnRvIHRoZQogLy8g
QjM6OlByb2NlZHVyZSwgc28geW91IG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIEIzOjpQcm9jZWR1
cmUgb3V0bGl2ZXMgdGhlIEFpcjo6Q29kZS4KLXZvaWQgZ2VuZXJhdGVUb0FpcihQcm9jZWR1cmUm
LCBBaXI6OkNvZGUmKTsKK3ZvaWQgZ2VuZXJhdGVUb0FpcihQcm9jZWR1cmUmLCBBaXI6OkNvZGUm
LCB1bnNpZ25lZCBvcHRMZXZlbCA9IDEpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHJldmlzaW9u
IDE5MjI4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjMzLDYgKzEyMzMsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogCisgICAgICAgIGNhc2UgTXVsOiB7CisgICAgICAgICAgICBh
cHBlbmRCaW5PcDxNdWwzMiwgTXVsNjQsIEFpcjo6T29wcywgQ29tbXV0YXRpdmU+KAorICAgICAg
ICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKwogICAgICAgICBjYXNlIEJpdEFuZDogewogICAgICAg
ICAgICAgYXBwZW5kQmluT3A8QW5kMzIsIEFuZDY0LCBBaXI6Ok9vcHMsIENvbW11dGF0aXZlPigK
ICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKSwgbV92YWx1ZS0+Y2hpbGQoMSkpOwpA
QCAtMTI1Miw2ICsxMjU4LDExIEBAIHByaXZhdGU6CiAgICAgICAgIH0KIAogICAgICAgICBjYXNl
IFNobDogeworICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5pc0ludDMyKDEpKSB7
CisgICAgICAgICAgICAgICAgYXBwZW5kQmluT3A8QWRkMzIsIEFkZDY0LCBBaXI6Ok9vcHMsIENv
bW11dGF0aXZlPigKKyAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCksIG1fdmFs
dWUtPmNoaWxkKDApKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBhcHBlbmRTaGlmdDxMc2hpZnQzMiwgTHNoaWZ0NjQ+KG1fdmFsdWUtPmNoaWxk
KDApLCBtX3ZhbHVlLT5jaGlsZCgxKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJ
KHJldmlzaW9uIDE5MjI4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0
cmVuZ3RoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDYgKzE1NiwxNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICAvLyBU
dXJuIHRoaXM6IEFkZCh2YWx1ZSwgdmFsdWUpCisgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IFNo
bCh2YWx1ZSwgMSkKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgYSB1c2VmdWwgY2Fub25pY2FsaXph
dGlvbi4gSXQncyBub3QgbWVhbnQgdG8gYmUgYSBzdHJlbmd0aCByZWR1Y3Rpb24uCisgICAgICAg
ICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCkgPT0gbV92YWx1ZS0+Y2hpbGQoMSkpIHsKKyAgICAg
ICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKAorICAgICAgICAgICAgICAgICAgICBtX3By
b2MuYWRkPFZhbHVlPigKKyAgICAgICAgICAgICAgICAgICAgICAgIFNobCwgbV92YWx1ZS0+b3Jp
Z2luKCksIG1fdmFsdWUtPmNoaWxkKDApLAorICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNl
cnRpb25TZXQuaW5zZXJ0PENvbnN0MzJWYWx1ZT4obV9pbmRleCwgbV92YWx1ZS0+b3JpZ2luKCks
IDEpKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKICAgICAgICAg
ICAgIC8vIFR1cm4gdGhpczogQWRkKHZhbHVlLCB6ZXJvKQogICAgICAgICAgICAgLy8gSW50byBh
biBJZGVudGl0eS4KICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJbnQoMCkp
IHsKQEAgLTE4Niw2ICsxOTcsNTkgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgYnJlYWs7CiAK
KyAgICAgICAgY2FzZSBNdWw6CisgICAgICAgICAgICBoYW5kbGVDb21tdXRhdGl2aXR5KCk7CisK
KyAgICAgICAgICAgIC8vIFR1cm4gdGhpczogTXVsKGNvbnN0YW50MSwgY29uc3RhbnQyKQorICAg
ICAgICAgICAgLy8gSW50byB0aGlzOiBjb25zdGFudDEgKiBjb25zdGFudDIKKyAgICAgICAgICAg
IGlmIChWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+bXVsQ29uc3RhbnQobV9wcm9j
LCBtX3ZhbHVlLT5jaGlsZCgxKSkpIHsKKyAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1Zh
bHVlKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5oYXNJbnQoKSkgeworICAgICAgICAgICAg
ICAgIGludDY0X3QgZmFjdG9yID0gbV92YWx1ZS0+Y2hpbGQoMSktPmFzSW50KCk7CisKKyAgICAg
ICAgICAgICAgICAvLyBUdXJuIHRoaXM6IE11bCh2YWx1ZSwgMCkKKyAgICAgICAgICAgICAgICAv
LyBJbnRvIHRoaXM6IDAKKyAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgd2UgZG9uJ3QgZG8g
dGhpcyBmb3IgZG91YmxlcyBiZWNhdXNlIHRoYXQncyB3cm9uZy4gRm9yIGV4YW1wbGUsIC0xICog
MAorICAgICAgICAgICAgICAgIC8vIGFuZCAxICogMCB5aWVsZCBkaWZmZXJlbnQgcmVzdWx0cy4K
KyAgICAgICAgICAgICAgICBpZiAoIWZhY3RvcikgeworICAgICAgICAgICAgICAgICAgICBtX3Zh
bHVlLT5yZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDEpKTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8g
VHVybiB0aGlzOiBNdWwodmFsdWUsIDEpCisgICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiB2
YWx1ZQorICAgICAgICAgICAgICAgIGlmIChmYWN0b3IgPT0gMSkgeworICAgICAgICAgICAgICAg
ICAgICBtX3ZhbHVlLT5yZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogTXVsKHZhbHVlLCBjb25zdGFudCkK
KyAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IFNobCh2YWx1ZSwgbG9nMihjb25zdGFudCkp
CisgICAgICAgICAgICAgICAgaWYgKGhhc09uZUJpdFNldChmYWN0b3IpKSB7CisgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIHNoaWZ0QW1vdW50ID0gV1RGOjpmYXN0TG9nMihmYWN0b3IpOwor
ICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKAorICAgICAgICAgICAgICAg
ICAgICAgICAgbV9wcm9jLmFkZDxWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
U2hsLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0PENvbnN0MzJWYWx1ZT4oCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIG1fdmFsdWUtPm9yaWdpbigpLCBz
aGlmdEFtb3VudCkpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aGFzRG91Ymxl
KCkpIHsKKyAgICAgICAgICAgICAgICBkb3VibGUgZmFjdG9yID0gbV92YWx1ZS0+Y2hpbGQoMSkt
PmFzRG91YmxlKCk7CisKKyAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IE11bCh2YWx1ZSwg
MSkKKyAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IHZhbHVlCisgICAgICAgICAgICAgICAg
aWYgKGZhY3RvciA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPnJlcGxhY2VX
aXRoSWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQoMCkpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFr
OworCiAgICAgICAgIGNhc2UgQml0QW5kOgogICAgICAgICAgICAgaGFuZGxlQ29tbXV0YXRpdml0
eSgpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCShyZXZpc2lvbiAx
OTIyODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEzNCw2ICsxMzQsMTEgQEAgVmFsdWUqIFZhbHVlOjpzdWJDb25zdGFudChQcm9j
ZWR1cmUmLCBWYQogICAgIHJldHVybiBudWxscHRyOwogfQogCitWYWx1ZSogVmFsdWU6Om11bENv
bnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKikgY29uc3QKK3sKKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKwogVmFsdWUqIFZhbHVlOjpiaXRBbmRDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSopIGNv
bnN0CiB7CiAgICAgcmV0dXJuIG51bGxwdHI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Zh
bHVlLmgJKHJldmlzaW9uIDE5MjI4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Zh
bHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMyw2ICsxMTMsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCBWYWx1ZSogYWRkQ29uc3RhbnQoUHJvY2VkdXJlJiwgaW50MzJfdCBvdGhlcikgY29uc3Q7
CiAgICAgdmlydHVhbCBWYWx1ZSogYWRkQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVy
KSBjb25zdDsKICAgICB2aXJ0dWFsIFZhbHVlKiBzdWJDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1
ZSogb3RoZXIpIGNvbnN0OworICAgIHZpcnR1YWwgVmFsdWUqIG11bENvbnN0YW50KFByb2NlZHVy
ZSYsIFZhbHVlKiBvdGhlcikgY29uc3Q7CiAgICAgdmlydHVhbCBWYWx1ZSogYml0QW5kQ29uc3Rh
bnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdDsKICAgICB2aXJ0dWFsIFZhbHVlKiBi
aXRPckNvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhlcikgY29uc3Q7CiAgICAgdmlydHVh
bCBWYWx1ZSogYml0WG9yQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdDsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCShyZXZpc2lvbiAxOTIyODYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTkyLDYgKzE5MiwyNiBAQCB2b2lkIHRlc3RBZGRBcmdzMzIoaW50IGEsIGludCBiKQogICAgIENI
RUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9jLCBhLCBiKSA9PSBhICsgYik7CiB9CiAKK3ZvaWQg
dGVzdEFkZExvYWRUd2ljZSgpCit7CisgICAgYXV0byB0ZXN0ID0gWyZdICh1bnNpZ25lZCBvcHRM
ZXZlbCkgeworICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9v
dCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICAgICAgaW50MzJfdCB2YWx1ZSA9IDQyOworICAgICAg
ICBWYWx1ZSogbG9hZCA9IHJvb3QtPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4oCisgICAgICAgICAg
ICBwcm9jLCBMb2FkLCBJbnQzMiwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmRO
ZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksICZ2YWx1ZSkpOworICAgICAgICByb290
LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFJldHVybiwgT3Jp
Z2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgbG9h
ZCwgbG9hZCkpOworCisgICAgICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50MzJfdD4ocHJvYykg
PT0gNDIgKiAyKTsKKyAgICB9OworCisgICAgdGVzdCgwKTsKKyAgICB0ZXN0KDEpOworfQorCiB2
b2lkIHRlc3RTdWJBcmdzKGludCBhLCBpbnQgYikKIHsKICAgICBQcm9jZWR1cmUgcHJvYzsKQEAg
LTI1MDAsMTIgKzI1MjAsMTQgQEAgdm9pZCBnZW5lcmljVGVzdENvbXBhcmUoCiAgICAgICAgIFBy
b2NlZHVyZSBwcm9jOwogICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygp
OwogCisgICAgICAgIFZhbHVlKiBsZWZ0ID0gbGVmdEZ1bmN0b3Iocm9vdCwgcHJvYyk7CisgICAg
ICAgIFZhbHVlKiByaWdodCA9IHJpZ2h0RnVuY3Rvcihyb290LCBwcm9jKTsKKyAgICAgICAgCiAg
ICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAogICAgICAgICAgICAgcHJvYywg
UmV0dXJuLCBPcmlnaW4oKSwKICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCiAg
ICAgICAgICAgICAgICAgcHJvYywgTm90RXF1YWwsIE9yaWdpbigpLAotICAgICAgICAgICAgICAg
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgIHByb2MsIG9wY29k
ZSwgT3JpZ2luKCksIGxlZnRGdW5jdG9yKHJvb3QsIHByb2MpLCByaWdodEZ1bmN0b3Iocm9vdCwg
cHJvYykpLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgb3Bj
b2RlLCBPcmlnaW4oKSwgbGVmdCwgcmlnaHQpLAogICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVu
ZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAwKSkpOwogCiAgICAgICAgIENIRUNL
KGNvbXBpbGVBbmRSdW48aW50Pihwcm9jLCBsZWZ0LCByaWdodCkgPT0gcmVzdWx0KTsKQEAgLTI2
MzksNiArMjY2MSwyNCBAQCB2b2lkIHRlc3RDb21wYXJlTG9hZChCMzo6T3Bjb2RlIG9wY29kZSwg
CiAgICAgICAgICAgICAgICAgYmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgJnNsb3QpKTsKICAgICAgICAgfSwKICAgICAgICAgbGVmdCwgcmlnaHQsIHJlc3Vs
dCk7CisKKyAgICAvLyBXaGVuIGxlZnQgaXMgcmlnaHQsIHRlc3QgYWRkci10by1hZGRyCisgICAg
aWYgKGxlZnQgPT0gcmlnaHQpIHsKKyAgICAgICAgc2xvdCA9IGxlZnQ7CisgICAgICAgIFZhbHVl
KiB2YWx1ZTsKKyAgICAgICAgZ2VuZXJpY1Rlc3RDb21wYXJlKAorICAgICAgICAgICAgb3Bjb2Rl
LAorICAgICAgICAgICAgWyZdIChCYXNpY0Jsb2NrKiBibG9jaywgUHJvY2VkdXJlJiBwcm9jKSB7
CisgICAgICAgICAgICAgICAgdmFsdWUgPSBibG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPigK
KyAgICAgICAgICAgICAgICAgICAgcHJvYywgbG9hZE9wY29kZSwgSW50MzIsIE9yaWdpbigpLAor
ICAgICAgICAgICAgICAgICAgICBibG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCAmc2xvdCkpOworICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAg
ICAgICAgIH0sCisgICAgICAgICAgICBbJl0gKEJhc2ljQmxvY2sqIGJsb2NrLCBQcm9jZWR1cmUm
IHByb2MpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgICAgICAgICB9LAor
ICAgICAgICAgICAgbGVmdCwgcmlnaHQsIHJlc3VsdCk7CisgICAgfQogfQogCiB2b2lkIHRlc3RD
b21wYXJlSW1wbChCMzo6T3Bjb2RlIG9wY29kZSwgaW50IGxlZnQsIGludCByaWdodCkKQEAgLTI4
NzUsNiArMjkxNSw3IEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikKICAgICBSVU4odGVz
dEFkZEltbUFyZygxLCAwKSk7CiAgICAgUlVOKHRlc3RBZGRBcmdzMzIoMSwgMSkpOwogICAgIFJV
Tih0ZXN0QWRkQXJnczMyKDEsIDIpKTsKKyAgICBSVU4odGVzdEFkZExvYWRUd2ljZSgpKTsKIAog
ICAgIFJVTih0ZXN0U3ViQXJncygxLCAxKSk7CiAgICAgUlVOKHRlc3RTdWJBcmdzKDEsIDIpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rl
cwkocmV2aXNpb24gMTkyMjg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJP
cGNvZGUub3Bjb2Rlcwkod29ya2luZyBjb3B5KQpAQCAtOTYsNiArOTYsMTYgQEAgTmVnMzIgVUQ6
RwogTmVnNjQgVUQ6RwogICAgIFRtcAogCitNdWwzMiBVOkcsIFVEOkcKKyAgICBUbXAsIFRtcAor
ICAgIEFkZHIsIFRtcAorCitNdWwzMiBVOkcsIFU6RywgRDpHCisgICAgSW1tLCBUbXAsIFRtcAor
CitNdWw2NCBVOkcsIFVEOkcKKyAgICBUbXAsIFRtcAorCiBMZWEgVUE6RywgRDpHCiAgICAgQWRk
ciwgVG1wCiAKQEAgLTE1NywxMCArMTY3LDYgQEAgWG9yNjQgVTpHLCBVRDpHCiAgICAgVG1wLCBB
ZGRyCiAgICAgSW1tLCBUbXAKIAotTXVsMzIgVTpHLCBVRDpHCi0gICAgVG1wLCBUbXAKLSAgICBB
ZGRyLCBUbXAKLQogIyBOb3RlIHRoYXQgTW92ZSBvcGVyYXRlcyBvdmVyIHRoZSBmdWxsIHJlZ2lz
dGVyIHNpemUsIHdoaWNoIGlzIGVpdGhlciAzMi1iaXQgb3IgNjQtYml0IGRlcGVuZGluZyBvbgog
IyB0aGUgcGxhdGZvcm0uIEknbSBub3QgZW50aXJlbHkgc3VyZSB0aGF0IHRoaXMgaXMgYSBnb29k
IHRoaW5nOyBpdCBtaWdodCBiZSBiZXR0ZXIgdG8ganVzdCBoYXZlIGEKICMgTW92ZTY0IGluc3Ry
dWN0aW9uLiBPVE9ILCBvdXIgTWFjcm9Bc3NlbWJsZXJzIGFscmVhZHkgaGF2ZSB0aGlzIG5vdGlv
biBvZiAibW92ZSgpIiB0aGF0IGJhc2ljYWxseQpJbmRleDogU291cmNlL1dURi93dGYvTWF0aEV4
dHJhcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL01hdGhFeHRyYXMuaAkocmV2aXNp
b24gMTkyMjg2KQorKysgU291cmNlL1dURi93dGYvTWF0aEV4dHJhcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNjgsNiArMzY4LDE0IEBAIGlubGluZSB1bnNpZ25lZCBmYXN0TG9nMih1bnNpZ25lZCBp
KQogICAgIHJldHVybiBsb2cyOwogfQogCitpbmxpbmUgdW5zaWduZWQgZmFzdExvZzIodWludDY0
X3QgdmFsdWUpCit7CisgICAgdW5zaWduZWQgaGlnaCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih2
YWx1ZSA+PiAzMik7CisgICAgaWYgKGhpZ2gpCisgICAgICAgIHJldHVybiBmYXN0TG9nMihoaWdo
KTsKKyAgICByZXR1cm4gZmFzdExvZzIoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhbHVlKSk7Cit9
CisKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogaW5saW5lIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lm
PHN0ZDo6aXNfZmxvYXRpbmdfcG9pbnQ8VD46OnZhbHVlLCBUPjo6dHlwZSBzYWZlRlBEaXZpc2lv
bihUIHUsIFQgdikKIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265261</attachid>
            <date>2015-11-10 19:47:01 -0800</date>
            <delta_ts>2015-11-10 21:20:41 -0800</delta_ts>
            <desc>a bit more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>23742</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmNwcAkocmV2
aXNpb24gMTkyMjg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsNiArNjEsMTMgQEAgVmFsdWUqIENvbnN0MzJWYWx1
ZTo6c3ViQ29uc3RhbnQoUHJvY2VkdQogICAgIHJldHVybiBwcm9jLmFkZDxDb25zdDMyVmFsdWU+
KG9yaWdpbigpLCBtX3ZhbHVlIC0gb3RoZXItPmFzSW50MzIoKSk7CiB9CiAKK1ZhbHVlKiBDb25z
dDMyVmFsdWU6Om11bENvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgVmFsdWUqIG90aGVyKSBjb25z
dAoreworICAgIGlmICghb3RoZXItPmhhc0ludDMyKCkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIHJldHVybiBwcm9jLmFkZDxDb25zdDMyVmFsdWU+KG9yaWdpbigpLCBtX3ZhbHVlICog
b3RoZXItPmFzSW50MzIoKSk7Cit9CisKIFZhbHVlKiBDb25zdDMyVmFsdWU6OmJpdEFuZENvbnN0
YW50KFByb2NlZHVyZSYgcHJvYywgVmFsdWUqIG90aGVyKSBjb25zdAogewogICAgIGlmICghb3Ro
ZXItPmhhc0ludDMyKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMy
VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMy
VmFsdWUuaAkocmV2aXNpb24gMTkyMjg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q29uc3QzMlZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDcgQEAgcHVibGljOgog
ICAgIFZhbHVlKiBhZGRDb25zdGFudChQcm9jZWR1cmUmLCBpbnQzMl90IG90aGVyKSBjb25zdCBv
dmVycmlkZTsKICAgICBWYWx1ZSogYWRkQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVy
KSBjb25zdCBvdmVycmlkZTsKICAgICBWYWx1ZSogc3ViQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFs
dWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBWYWx1ZSogbXVsQ29uc3RhbnQoUHJvY2Vk
dXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKICAgICBWYWx1ZSogYml0QW5kQ29u
c3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKICAgICBWYWx1
ZSogYml0T3JDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRl
OwogICAgIFZhbHVlKiBiaXRYb3JDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNv
bnN0IG92ZXJyaWRlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZh
bHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0
VmFsdWUuY3BwCShyZXZpc2lvbiAxOTIyODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNDb25zdDY0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSwxMyBAQCBWYWx1
ZSogQ29uc3Q2NFZhbHVlOjpzdWJDb25zdGFudChQcm9jZWR1CiAgICAgcmV0dXJuIHByb2MuYWRk
PENvbnN0NjRWYWx1ZT4ob3JpZ2luKCksIG1fdmFsdWUgLSBvdGhlci0+YXNJbnQ2NCgpKTsKIH0K
IAorVmFsdWUqIENvbnN0NjRWYWx1ZTo6bXVsQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBWYWx1
ZSogb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKCFvdGhlci0+aGFzSW50NjQoKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0NjRWYWx1ZT4ob3JpZ2lu
KCksIG1fdmFsdWUgKiBvdGhlci0+YXNJbnQ2NCgpKTsKK30KKwogVmFsdWUqIENvbnN0NjRWYWx1
ZTo6Yml0QW5kQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7
CiAgICAgaWYgKCFvdGhlci0+aGFzSW50NjQoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0NvbnN0NjRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0NvbnN0NjRWYWx1ZS5oCShyZXZpc2lvbiAxOTIyODYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQs
NyBAQCBwdWJsaWM6CiAgICAgVmFsdWUqIGFkZENvbnN0YW50KFByb2NlZHVyZSYsIGludDMyX3Qg
b3RoZXIpIGNvbnN0IG92ZXJyaWRlOwogICAgIFZhbHVlKiBhZGRDb25zdGFudChQcm9jZWR1cmUm
LCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwogICAgIFZhbHVlKiBzdWJDb25zdGFudChQ
cm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFZhbHVlKiBtdWxD
b25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwogICAgIFZh
bHVlKiBiaXRBbmRDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJy
aWRlOwogICAgIFZhbHVlKiBiaXRPckNvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhlcikg
Y29uc3Qgb3ZlcnJpZGU7CiAgICAgVmFsdWUqIGJpdFhvckNvbnN0YW50KFByb2NlZHVyZSYsIFZh
bHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDb25zdERvdWJsZVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmNwcAkocmV2aXNpb24gMTkyMjg2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYxLDYgKzYxLDEzIEBAIFZhbHVlKiBDb25zdERvdWJsZVZhbHVlOjpzdWJDb25zdGFu
dChQcm8KICAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3REb3VibGVWYWx1ZT4ob3JpZ2luKCksIG1f
dmFsdWUgLSBvdGhlci0+YXNEb3VibGUoKSk7CiB9CiAKK1ZhbHVlKiBDb25zdERvdWJsZVZhbHVl
OjptdWxDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIFZhbHVlKiBvdGhlcikgY29uc3QKK3sKKyAg
ICBpZiAoIW90aGVyLT5oYXNEb3VibGUoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
cmV0dXJuIHByb2MuYWRkPENvbnN0RG91YmxlVmFsdWU+KG9yaWdpbigpLCBtX3ZhbHVlICogb3Ro
ZXItPmFzRG91YmxlKCkpOworfQorCiBUcmlTdGF0ZSBDb25zdERvdWJsZVZhbHVlOjplcXVhbENv
bnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3QKIHsKICAgICBpZiAoIW90aGVyLT5oYXNEb3VibGUo
KSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVl
LmgJKHJldmlzaW9uIDE5MjI4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0
RG91YmxlVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsNyBAQCBwdWJsaWM6CiAg
ICAgVmFsdWUqIGFkZENvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgaW50MzJfdCBvdGhlcikgY29u
c3Qgb3ZlcnJpZGU7CiAgICAgVmFsdWUqIGFkZENvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgVmFs
dWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKICAgICBWYWx1ZSogc3ViQ29uc3RhbnQoUHJvY2Vk
dXJlJiBwcm9jLCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFZhbHVlKiBtdWxD
b25zdGFudChQcm9jZWR1cmUmIHByb2MsIFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CiAK
ICAgICBUcmlTdGF0ZSBlcXVhbENvbnN0YW50KFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7
CiAgICAgVHJpU3RhdGUgbm90RXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJy
aWRlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAkocmV2aXNp
b24gMTkyMjg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgewogCi12b2lkIGdlbmVyYXRlKFByb2NlZHVyZSYgcHJvY2VkdXJlLCBDQ2FsbEhlbHBl
cnMmIGppdCkKK3ZvaWQgZ2VuZXJhdGUoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIENDYWxsSGVscGVy
cyYgaml0LCB1bnNpZ25lZCBvcHRMZXZlbCkKIHsKICAgICBUaW1pbmdTY29wZSB0aW1pbmdTY29w
ZSgiZ2VuZXJhdGUiKTsKIApAQCAtNTAsNyArNTAsNyBAQCB2b2lkIGdlbmVyYXRlKFByb2NlZHVy
ZSYgcHJvY2VkdXJlLCBDQ2FsCiAgICAgQWlyOjpnZW5lcmF0ZShjb2RlLCBqaXQpOwogfQogCi12
b2lkIGdlbmVyYXRlVG9BaXIoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIEFpcjo6Q29kZSYgY29kZSkK
K3ZvaWQgZ2VuZXJhdGVUb0FpcihQcm9jZWR1cmUmIHByb2NlZHVyZSwgQWlyOjpDb2RlJiBjb2Rl
LCB1bnNpZ25lZCBvcHRMZXZlbCkKIHsKICAgICBUaW1pbmdTY29wZSB0aW1pbmdTY29wZSgiZ2Vu
ZXJhdGVUb0FpciIpOwogICAgIApAQCAtNjUsMTEgKzY1LDEzIEBAIHZvaWQgZ2VuZXJhdGVUb0Fp
cihQcm9jZWR1cmUmIHByb2NlZHVyZSwKICAgICAgICAgZGF0YUxvZygiSW5pdGlhbCBCMzpcbiIp
OwogICAgICAgICBkYXRhTG9nKHByb2NlZHVyZSk7CiAgICAgfQotCi0gICAgcmVkdWNlU3RyZW5n
dGgocHJvY2VkdXJlKTsKICAgICAKLSAgICAvLyBGSVhNRTogQWRkIG1vcmUgb3B0aW1pemF0aW9u
cyBoZXJlLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NTA1MDcKKyAgICBpZiAob3B0TGV2ZWwgPj0gMSkgeworICAgICAgICByZWR1Y2VTdHJlbmd0aChw
cm9jZWR1cmUpOworICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IEFkZCBtb3JlIG9wdGltaXph
dGlvbnMgaGVyZS4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1MDUwNworICAgIH0KIAogICAgIG1vdmVDb25zdGFudHMocHJvY2VkdXJlKTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5oCShyZXZpc2lvbiAxOTIyODYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSwxMiArMzksMTIgQEAgbmFtZXNwYWNlIEFpciB7IGNsYXNzIENvZGU7IH0KIAogLy8g
VGhpcyB0YWtlcyBhIEIzOjpQcm9jZWR1cmUsIG9wdGltaXplcyBpdCBpbi1wbGFjZSwgYW5kIGdl
bmVyYXRlcyBpdCB0byBtYWNoaW5lIGNvZGUgYnkgZmlyc3QKIC8vIGludGVybmFsbHkgY29udmVy
dGluZyB0byBhbiBBaXI6OkNvZGUgYW5kIHRoZW4gZ2VuZXJhdGluZyB0aGF0LgotSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCBnZW5lcmF0ZShQcm9jZWR1cmUmLCBDQ2FsbEhlbHBlcnMmKTsKK0pTX0VY
UE9SVF9QUklWQVRFIHZvaWQgZ2VuZXJhdGUoUHJvY2VkdXJlJiwgQ0NhbGxIZWxwZXJzJiwgdW5z
aWduZWQgb3B0TGV2ZWwgPSAxKTsKIAogLy8gVGhpcyB0YWtlcyBhIEIzOjpQcm9jZWR1cmUsIG9w
dGltaXplcyBpdCBpbi1wbGFjZSwgYW5kIGxvd2VycyBpdCB0byBBaXIuIFlvdSBjYW4gdGhlbiBn
ZW5lcmF0ZQogLy8gdGhlIEFpciB0byBtYWNoaW5lIGNvZGUgdXNpbmcgQWlyOjpnZW5lcmF0ZSgp
LiBOb3RlIHRoYXQgYW4gQWlyOjpDb2RlIHdpbGwgaGF2ZSBwb2ludGVycyBpbnRvIHRoZQogLy8g
QjM6OlByb2NlZHVyZSwgc28geW91IG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIEIzOjpQcm9jZWR1
cmUgb3V0bGl2ZXMgdGhlIEFpcjo6Q29kZS4KLXZvaWQgZ2VuZXJhdGVUb0FpcihQcm9jZWR1cmUm
LCBBaXI6OkNvZGUmKTsKK3ZvaWQgZ2VuZXJhdGVUb0FpcihQcm9jZWR1cmUmLCBBaXI6OkNvZGUm
LCB1bnNpZ25lZCBvcHRMZXZlbCA9IDEpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHJldmlzaW9u
IDE5MjI4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjMzLDYgKzEyMzMsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogCisgICAgICAgIGNhc2UgTXVsOiB7CisgICAgICAgICAgICBh
cHBlbmRCaW5PcDxNdWwzMiwgTXVsNjQsIEFpcjo6T29wcywgQ29tbXV0YXRpdmU+KAorICAgICAg
ICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKwogICAgICAgICBjYXNlIEJpdEFuZDogewogICAgICAg
ICAgICAgYXBwZW5kQmluT3A8QW5kMzIsIEFuZDY0LCBBaXI6Ok9vcHMsIENvbW11dGF0aXZlPigK
ICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKSwgbV92YWx1ZS0+Y2hpbGQoMSkpOwpA
QCAtMTI1Miw2ICsxMjU4LDExIEBAIHByaXZhdGU6CiAgICAgICAgIH0KIAogICAgICAgICBjYXNl
IFNobDogeworICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5pc0ludDMyKDEpKSB7
CisgICAgICAgICAgICAgICAgYXBwZW5kQmluT3A8QWRkMzIsIEFkZDY0LCBBaXI6Ok9vcHMsIENv
bW11dGF0aXZlPigKKyAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCksIG1fdmFs
dWUtPmNoaWxkKDApKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBhcHBlbmRTaGlmdDxMc2hpZnQzMiwgTHNoaWZ0NjQ+KG1fdmFsdWUtPmNoaWxk
KDApLCBtX3ZhbHVlLT5jaGlsZCgxKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJ
KHJldmlzaW9uIDE5MjI4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0
cmVuZ3RoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDYgKzE1NiwxNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICAvLyBU
dXJuIHRoaXM6IEFkZCh2YWx1ZSwgdmFsdWUpCisgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IFNo
bCh2YWx1ZSwgMSkKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgYSB1c2VmdWwgY2Fub25pY2FsaXph
dGlvbi4gSXQncyBub3QgbWVhbnQgdG8gYmUgYSBzdHJlbmd0aCByZWR1Y3Rpb24uCisgICAgICAg
ICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCkgPT0gbV92YWx1ZS0+Y2hpbGQoMSkpIHsKKyAgICAg
ICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKAorICAgICAgICAgICAgICAgICAgICBtX3By
b2MuYWRkPFZhbHVlPigKKyAgICAgICAgICAgICAgICAgICAgICAgIFNobCwgbV92YWx1ZS0+b3Jp
Z2luKCksIG1fdmFsdWUtPmNoaWxkKDApLAorICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNl
cnRpb25TZXQuaW5zZXJ0PENvbnN0MzJWYWx1ZT4obV9pbmRleCwgbV92YWx1ZS0+b3JpZ2luKCks
IDEpKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKICAgICAgICAg
ICAgIC8vIFR1cm4gdGhpczogQWRkKHZhbHVlLCB6ZXJvKQogICAgICAgICAgICAgLy8gSW50byBh
biBJZGVudGl0eS4KICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJbnQoMCkp
IHsKQEAgLTE4Niw2ICsxOTcsNTkgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgYnJlYWs7CiAK
KyAgICAgICAgY2FzZSBNdWw6CisgICAgICAgICAgICBoYW5kbGVDb21tdXRhdGl2aXR5KCk7CisK
KyAgICAgICAgICAgIC8vIFR1cm4gdGhpczogTXVsKGNvbnN0YW50MSwgY29uc3RhbnQyKQorICAg
ICAgICAgICAgLy8gSW50byB0aGlzOiBjb25zdGFudDEgKiBjb25zdGFudDIKKyAgICAgICAgICAg
IGlmIChWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+bXVsQ29uc3RhbnQobV9wcm9j
LCBtX3ZhbHVlLT5jaGlsZCgxKSkpIHsKKyAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1Zh
bHVlKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5oYXNJbnQoKSkgeworICAgICAgICAgICAg
ICAgIGludDY0X3QgZmFjdG9yID0gbV92YWx1ZS0+Y2hpbGQoMSktPmFzSW50KCk7CisKKyAgICAg
ICAgICAgICAgICAvLyBUdXJuIHRoaXM6IE11bCh2YWx1ZSwgMCkKKyAgICAgICAgICAgICAgICAv
LyBJbnRvIHRoaXM6IDAKKyAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgd2UgZG9uJ3QgZG8g
dGhpcyBmb3IgZG91YmxlcyBiZWNhdXNlIHRoYXQncyB3cm9uZy4gRm9yIGV4YW1wbGUsIC0xICog
MAorICAgICAgICAgICAgICAgIC8vIGFuZCAxICogMCB5aWVsZCBkaWZmZXJlbnQgcmVzdWx0cy4K
KyAgICAgICAgICAgICAgICBpZiAoIWZhY3RvcikgeworICAgICAgICAgICAgICAgICAgICBtX3Zh
bHVlLT5yZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDEpKTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8g
VHVybiB0aGlzOiBNdWwodmFsdWUsIDEpCisgICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiB2
YWx1ZQorICAgICAgICAgICAgICAgIGlmIChmYWN0b3IgPT0gMSkgeworICAgICAgICAgICAgICAg
ICAgICBtX3ZhbHVlLT5yZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogTXVsKHZhbHVlLCBjb25zdGFudCkK
KyAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IFNobCh2YWx1ZSwgbG9nMihjb25zdGFudCkp
CisgICAgICAgICAgICAgICAgaWYgKGhhc09uZUJpdFNldChmYWN0b3IpKSB7CisgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIHNoaWZ0QW1vdW50ID0gV1RGOjpmYXN0TG9nMihmYWN0b3IpOwor
ICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKAorICAgICAgICAgICAgICAg
ICAgICAgICAgbV9wcm9jLmFkZDxWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
U2hsLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0PENvbnN0MzJWYWx1ZT4oCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIG1fdmFsdWUtPm9yaWdpbigpLCBz
aGlmdEFtb3VudCkpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aGFzRG91Ymxl
KCkpIHsKKyAgICAgICAgICAgICAgICBkb3VibGUgZmFjdG9yID0gbV92YWx1ZS0+Y2hpbGQoMSkt
PmFzRG91YmxlKCk7CisKKyAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IE11bCh2YWx1ZSwg
MSkKKyAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IHZhbHVlCisgICAgICAgICAgICAgICAg
aWYgKGZhY3RvciA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPnJlcGxhY2VX
aXRoSWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQoMCkpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFr
OworCiAgICAgICAgIGNhc2UgQml0QW5kOgogICAgICAgICAgICAgaGFuZGxlQ29tbXV0YXRpdml0
eSgpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCShyZXZpc2lvbiAx
OTIyODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEzNCw2ICsxMzQsMTEgQEAgVmFsdWUqIFZhbHVlOjpzdWJDb25zdGFudChQcm9j
ZWR1cmUmLCBWYQogICAgIHJldHVybiBudWxscHRyOwogfQogCitWYWx1ZSogVmFsdWU6Om11bENv
bnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKikgY29uc3QKK3sKKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKwogVmFsdWUqIFZhbHVlOjpiaXRBbmRDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSopIGNv
bnN0CiB7CiAgICAgcmV0dXJuIG51bGxwdHI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Zh
bHVlLmgJKHJldmlzaW9uIDE5MjI4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Zh
bHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMyw2ICsxMTMsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCBWYWx1ZSogYWRkQ29uc3RhbnQoUHJvY2VkdXJlJiwgaW50MzJfdCBvdGhlcikgY29uc3Q7
CiAgICAgdmlydHVhbCBWYWx1ZSogYWRkQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVy
KSBjb25zdDsKICAgICB2aXJ0dWFsIFZhbHVlKiBzdWJDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1
ZSogb3RoZXIpIGNvbnN0OworICAgIHZpcnR1YWwgVmFsdWUqIG11bENvbnN0YW50KFByb2NlZHVy
ZSYsIFZhbHVlKiBvdGhlcikgY29uc3Q7CiAgICAgdmlydHVhbCBWYWx1ZSogYml0QW5kQ29uc3Rh
bnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdDsKICAgICB2aXJ0dWFsIFZhbHVlKiBi
aXRPckNvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhlcikgY29uc3Q7CiAgICAgdmlydHVh
bCBWYWx1ZSogYml0WG9yQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdDsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCShyZXZpc2lvbiAxOTIyODYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTMyLDYgKzEzMiwxOCBAQCB2b2lkIHRlc3RSZXR1cm5Db25zdDY0KGludDY0X3QgdmFsdWUpCiAg
ICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ2NF90Pihwcm9jKSA9PSB2YWx1ZSk7CiB9CiAKK3Zv
aWQgdGVzdEFkZEFyZyhpbnQgYSkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Js
b2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIFZhbHVlKiB2YWx1ZSA9IHJvb3QtPmFw
cGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIwKTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJv
YywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9j
LCBBZGQsIE9yaWdpbigpLCB2YWx1ZSwgdmFsdWUpKTsKKworICAgIENIRUNLKGNvbXBpbGVBbmRS
dW48aW50Pihwcm9jLCBhKSA9PSBhICsgYSk7Cit9CisKIHZvaWQgdGVzdEFkZEFyZ3MoaW50IGEs
IGludCBiKQogewogICAgIFByb2NlZHVyZSBwcm9jOwpAQCAtMTkyLDYgKzIwNCwxMzAgQEAgdm9p
ZCB0ZXN0QWRkQXJnczMyKGludCBhLCBpbnQgYikKICAgICBDSEVDSyhjb21waWxlQW5kUnVuPGlu
dD4ocHJvYywgYSwgYikgPT0gYSArIGIpOwogfQogCit2b2lkIHRlc3RBZGRMb2FkVHdpY2UoKQor
eworICAgIGF1dG8gdGVzdCA9IFsmXSAodW5zaWduZWQgb3B0TGV2ZWwpIHsKKyAgICAgICAgUHJv
Y2VkdXJlIHByb2M7CisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7
CisgICAgICAgIGludDMyX3QgdmFsdWUgPSA0MjsKKyAgICAgICAgVmFsdWUqIGxvYWQgPSByb290
LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgTG9hZCwgSW50MzIs
IE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCAmdmFsdWUpKTsKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xW
YWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICAgICAg
cm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIGxvYWQsIGxvYWQpKTsKKworICAgICAg
ICBDSEVDSyhjb21waWxlQW5kUnVuPGludDMyX3Q+KHByb2MpID09IDQyICogMik7CisgICAgfTsK
KworICAgIHRlc3QoMCk7CisgICAgdGVzdCgxKTsKK30KKwordm9pZCB0ZXN0TXVsQXJnKGludCBh
KQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFk
ZEJsb2NrKCk7CisgICAgVmFsdWUqIHZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVn
VmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIHJvb3Qt
PmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigp
LAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIE11bCwgT3JpZ2luKCksIHZh
bHVlLCB2YWx1ZSkpOworCisgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MsIGEpID09
IGEgKiBhKTsKK30KKwordm9pZCB0ZXN0TXVsQXJncyhpbnQgYSwgaW50IGIpCit7CisgICAgUHJv
Y2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAg
ICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgUmV0dXJuLCBP
cmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHBy
b2MsIE11bCwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRS
ZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCksCisgICAgICAg
ICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQ
UkluZm86OmFyZ3VtZW50R1BSMSkpKTsKKworICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihw
cm9jLCBhLCBiKSA9PSBhICogYik7Cit9CisKK3ZvaWQgdGVzdE11bEFyZ0ltbShpbnQgYSwgaW50
IGIpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2Mu
YWRkQmxvY2soKTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAg
cHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigK
KyAgICAgICAgICAgIHByb2MsIE11bCwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBl
bmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50
R1BSMCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgYikpKTsKKworICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9jLCBhKSA9
PSBhICogYik7Cit9CisKK3ZvaWQgdGVzdE11bEltbUFyZyhpbnQgYSwgaW50IGIpCit7CisgICAg
UHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsK
KyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgUmV0dXJu
LCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAg
IHByb2MsIE11bCwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3Q2
NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYSksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8
QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkp
KTsKKworICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9jLCBiKSA9PSBhICogYik7Cit9
CisKK3ZvaWQgdGVzdE11bEFyZ3MzMihpbnQgYSwgaW50IGIpCit7CisgICAgUHJvY2VkdXJlIHBy
b2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICByb290LT5h
cHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwK
KyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIE11bCwg
T3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAg
ICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBl
bmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50
R1BSMCkpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAg
ICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjEpKSkpOworCisgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MsIGEsIGIpID09IGEg
KiBiKTsKK30KKwordm9pZCB0ZXN0TXVsTG9hZFR3aWNlKCkKK3sKKyAgICBhdXRvIHRlc3QgPSBb
Jl0gKHVuc2lnbmVkIG9wdExldmVsKSB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAg
ICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgICAgICBpbnQzMl90IHZh
bHVlID0gNDI7CisgICAgICAgIFZhbHVlKiBsb2FkID0gcm9vdC0+YXBwZW5kTmV3PE1lbW9yeVZh
bHVlPigKKyAgICAgICAgICAgIHByb2MsIExvYWQsIEludDMyLCBPcmlnaW4oKSwKKyAgICAgICAg
ICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgJnZhbHVl
KSk7CisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICAgICAg
cHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1
ZT4ocHJvYywgTXVsLCBsb2FkLCBsb2FkKSk7CisKKyAgICAgICAgQ0hFQ0soY29tcGlsZUFuZFJ1
bjxpbnQzMl90Pihwcm9jKSA9PSA0MiAqIDQyKTsKKyAgICB9OworCisgICAgdGVzdCgwKTsKKyAg
ICB0ZXN0KDEpOworfQorCit2b2lkIHRlc3RTdWJBcmcoaW50IGEpCit7CisgICAgUHJvY2VkdXJl
IHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBWYWx1
ZSogdmFsdWUgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xW
YWx1ZT4oCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFw
cGVuZE5ldzxWYWx1ZT4ocHJvYywgU3ViLCBPcmlnaW4oKSwgdmFsdWUsIHZhbHVlKSk7CisKKyAg
ICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MsIGEpKTsKK30KKwogdm9pZCB0ZXN0U3Vi
QXJncyhpbnQgYSwgaW50IGIpCiB7CiAgICAgUHJvY2VkdXJlIHByb2M7CkBAIC0xMDExLDYgKzEx
NDcsMjAgQEAgdm9pZCB0ZXN0U2hsQXJnSW1tKGludDY0X3QgYSwgaW50NjRfdCBiKQogICAgIENI
RUNLKGNvbXBpbGVBbmRSdW48aW50NjRfdD4ocHJvYywgYSkgPT0gKGEgPDwgYikpOwogfQogCit2
b2lkIHRlc3RTaGxBcmczMihpbnQzMl90IGEpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAg
QmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBWYWx1ZSogdmFsdWUgPSBy
b290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksCisg
ICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1
ZT4oCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVu
ZE5ldzxWYWx1ZT4ocHJvYywgU2hsLCBPcmlnaW4oKSwgdmFsdWUsIHZhbHVlKSk7CisKKyAgICBD
SEVDSyhjb21waWxlQW5kUnVuPGludDMyX3Q+KHByb2MsIGEpID09IChhIDw8IGEpKTsKK30KKwog
dm9pZCB0ZXN0U2hsQXJnczMyKGludDMyX3QgYSwgaW50MzJfdCBiKQogewogICAgIFByb2NlZHVy
ZSBwcm9jOwpAQCAtMTEwMyw2ICsxMjUzLDIwIEBAIHZvaWQgdGVzdFNTaHJBcmdJbW0oaW50NjRf
dCBhLCBpbnQ2NF90IGIKICAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludDY0X3Q+KHByb2MsIGEp
ID09IChhID4+IGIpKTsKIH0KIAordm9pZCB0ZXN0U1NockFyZzMyKGludDMyX3QgYSkKK3sKKyAg
ICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygp
OworICAgIFZhbHVlKiB2YWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgIHBy
b2MsIFRydW5jLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVn
VmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICByb290
LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4o
KSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTU2hyLCBPcmlnaW4oKSwg
dmFsdWUsIHZhbHVlKSk7CisKKyAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludDMyX3Q+KHByb2Ms
IGEpID09IChhID4+IGEpKTsKK30KKwogdm9pZCB0ZXN0U1NockFyZ3MzMihpbnQzMl90IGEsIGlu
dDMyX3QgYikKIHsKICAgICBQcm9jZWR1cmUgcHJvYzsKQEAgLTExOTUsNiArMTM1OSwyMCBAQCB2
b2lkIHRlc3RaU2hyQXJnSW1tKHVpbnQ2NF90IGEsIHVpbnQ2NF90CiAgICAgQ0hFQ0soY29tcGls
ZUFuZFJ1bjx1aW50NjRfdD4ocHJvYywgYSkgPT0gKGEgPj4gYikpOwogfQogCit2b2lkIHRlc3Ra
U2hyQXJnczMyKHVpbnQzMl90IGEpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNC
bG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBWYWx1ZSogdmFsdWUgPSByb290LT5h
cHBlbmROZXc8VmFsdWU+KAorICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAg
IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIwKSk7CisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisg
ICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxW
YWx1ZT4ocHJvYywgWlNociwgT3JpZ2luKCksIHZhbHVlLCB2YWx1ZSkpOworCisgICAgQ0hFQ0so
Y29tcGlsZUFuZFJ1bjx1aW50MzJfdD4ocHJvYywgYSkgPT0gKGEgPj4gYSkpOworfQorCiB2b2lk
IHRlc3RaU2hyQXJnczMyKHVpbnQzMl90IGEsIHVpbnQzMl90IGIpCiB7CiAgICAgUHJvY2VkdXJl
IHByb2M7CkBAIC0yNTAwLDEyICsyNjc4LDE0IEBAIHZvaWQgZ2VuZXJpY1Rlc3RDb21wYXJlKAog
ICAgICAgICBQcm9jZWR1cmUgcHJvYzsKICAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2Mu
YWRkQmxvY2soKTsKIAorICAgICAgICBWYWx1ZSogbGVmdCA9IGxlZnRGdW5jdG9yKHJvb3QsIHBy
b2MpOworICAgICAgICBWYWx1ZSogcmlnaHQgPSByaWdodEZ1bmN0b3Iocm9vdCwgcHJvYyk7Cisg
ICAgICAgIAogICAgICAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKICAgICAgICAg
ICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCiAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8
VmFsdWU+KAogICAgICAgICAgICAgICAgIHByb2MsIE5vdEVxdWFsLCBPcmlnaW4oKSwKLSAgICAg
ICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAotICAgICAgICAgICAgICAgICAgICBw
cm9jLCBvcGNvZGUsIE9yaWdpbigpLCBsZWZ0RnVuY3Rvcihyb290LCBwcm9jKSwgcmlnaHRGdW5j
dG9yKHJvb3QsIHByb2MpKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+
KHByb2MsIG9wY29kZSwgT3JpZ2luKCksIGxlZnQsIHJpZ2h0KSwKICAgICAgICAgICAgICAgICBy
b290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpKTsKIAogICAg
ICAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludD4ocHJvYywgbGVmdCwgcmlnaHQpID09IHJlc3Vs
dCk7CkBAIC0yNjM5LDYgKzI4MTksMjQgQEAgdm9pZCB0ZXN0Q29tcGFyZUxvYWQoQjM6Ok9wY29k
ZSBvcGNvZGUsIAogICAgICAgICAgICAgICAgIGJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1
ZT4ocHJvYywgT3JpZ2luKCksICZzbG90KSk7CiAgICAgICAgIH0sCiAgICAgICAgIGxlZnQsIHJp
Z2h0LCByZXN1bHQpOworCisgICAgLy8gV2hlbiBsZWZ0IGlzIHJpZ2h0LCB0ZXN0IGFkZHItdG8t
YWRkcgorICAgIGlmIChsZWZ0ID09IHJpZ2h0KSB7CisgICAgICAgIHNsb3QgPSBsZWZ0OworICAg
ICAgICBWYWx1ZSogdmFsdWU7CisgICAgICAgIGdlbmVyaWNUZXN0Q29tcGFyZSgKKyAgICAgICAg
ICAgIG9wY29kZSwKKyAgICAgICAgICAgIFsmXSAoQmFzaWNCbG9jayogYmxvY2ssIFByb2NlZHVy
ZSYgcHJvYykgeworICAgICAgICAgICAgICAgIHZhbHVlID0gYmxvY2stPmFwcGVuZE5ldzxNZW1v
cnlWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgIHByb2MsIGxvYWRPcGNvZGUsIEludDMyLCBP
cmlnaW4oKSwKKyAgICAgICAgICAgICAgICAgICAgYmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZh
bHVlPihwcm9jLCBPcmlnaW4oKSwgJnNsb3QpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFs
dWU7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgWyZdIChCYXNpY0Jsb2NrKiBibG9jaywg
UHJvY2VkdXJlJiBwcm9jKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlOworICAgICAg
ICAgICAgfSwKKyAgICAgICAgICAgIGxlZnQsIHJpZ2h0LCByZXN1bHQpOworICAgIH0KIH0KIAog
dm9pZCB0ZXN0Q29tcGFyZUltcGwoQjM6Ok9wY29kZSBvcGNvZGUsIGludCBsZWZ0LCBpbnQgcmln
aHQpCkBAIC0yODY1LDYgKzMwNjMsNyBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpCiAg
ICAgUlVOKHRlc3RSZXR1cm5Db25zdDY0KDUpKTsKICAgICBSVU4odGVzdFJldHVybkNvbnN0NjQo
LTQyKSk7CiAKKyAgICBSVU4odGVzdEFkZEFyZygxMTEpKTsKICAgICBSVU4odGVzdEFkZEFyZ3Mo
MSwgMSkpOwogICAgIFJVTih0ZXN0QWRkQXJncygxLCAyKSk7CiAgICAgUlVOKHRlc3RBZGRBcmdJ
bW0oMSwgMikpOwpAQCAtMjg3NSw3ICszMDc0LDI1IEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZp
bHRlcikKICAgICBSVU4odGVzdEFkZEltbUFyZygxLCAwKSk7CiAgICAgUlVOKHRlc3RBZGRBcmdz
MzIoMSwgMSkpOwogICAgIFJVTih0ZXN0QWRkQXJnczMyKDEsIDIpKTsKKyAgICBSVU4odGVzdEFk
ZExvYWRUd2ljZSgpKTsKKworICAgIFJVTih0ZXN0TXVsQXJnKDUpKTsKKyAgICBSVU4odGVzdE11
bEFyZ3MoMSwgMSkpOworICAgIFJVTih0ZXN0TXVsQXJncygxLCAyKSk7CisgICAgUlVOKHRlc3RN
dWxBcmdzKDMsIDMpKTsKKyAgICBSVU4odGVzdE11bEFyZ0ltbSgxLCAyKSk7CisgICAgUlVOKHRl
c3RNdWxBcmdJbW0oMCwgMikpOworICAgIFJVTih0ZXN0TXVsQXJnSW1tKDEsIDApKTsKKyAgICBS
VU4odGVzdE11bEFyZ0ltbSgzLCAzKSk7CisgICAgUlVOKHRlc3RNdWxJbW1BcmcoMSwgMikpOwor
ICAgIFJVTih0ZXN0TXVsSW1tQXJnKDAsIDIpKTsKKyAgICBSVU4odGVzdE11bEltbUFyZygxLCAw
KSk7CisgICAgUlVOKHRlc3RNdWxJbW1BcmcoMywgMykpOworICAgIFJVTih0ZXN0TXVsQXJnczMy
KDEsIDEpKTsKKyAgICBSVU4odGVzdE11bEFyZ3MzMigxLCAyKSk7CisgICAgUlVOKHRlc3RNdWxM
b2FkVHdpY2UoKSk7CiAKKyAgICBSVU4odGVzdFN1YkFyZygyNCkpOwogICAgIFJVTih0ZXN0U3Vi
QXJncygxLCAxKSk7CiAgICAgUlVOKHRlc3RTdWJBcmdzKDEsIDIpKTsKICAgICBSVU4odGVzdFN1
YkFyZ3MoMTMsIC00MikpOwpAQCAtMzA4Miw2ICszMjk5LDcgQEAgdm9pZCBydW4oY29uc3QgY2hh
ciogZmlsdGVyKQogICAgIFJVTih0ZXN0U2hsQXJnSW1tKDB4ZmZmZmZmZmZmZmZmZmZmZiwgMCkp
OwogICAgIFJVTih0ZXN0U2hsQXJnSW1tKDB4ZmZmZmZmZmZmZmZmZmZmZiwgMSkpOwogICAgIFJV
Tih0ZXN0U2hsQXJnSW1tKDB4ZmZmZmZmZmZmZmZmZmZmZiwgNjMpKTsKKyAgICBSVU4odGVzdFNo
bEFyZzMyKDIpKTsKICAgICBSVU4odGVzdFNobEFyZ3MzMigxLCAwKSk7CiAgICAgUlVOKHRlc3RT
aGxBcmdzMzIoMSwgMSkpOwogICAgIFJVTih0ZXN0U2hsQXJnczMyKDEsIDYyKSk7CkBAIC0zMTIz
LDYgKzMzNDEsNyBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpCiAgICAgUlVOKHRlc3RT
U2hyQXJnSW1tKDB4ZmZmZmZmZmZmZmZmZmZmZiwgMCkpOwogICAgIFJVTih0ZXN0U1NockFyZ0lt
bSgweGZmZmZmZmZmZmZmZmZmZmYsIDEpKTsKICAgICBSVU4odGVzdFNTaHJBcmdJbW0oMHhmZmZm
ZmZmZmZmZmZmZmZmLCA2MykpOworICAgIFJVTih0ZXN0U1NockFyZzMyKDMyKSk7CiAgICAgUlVO
KHRlc3RTU2hyQXJnczMyKDEsIDApKTsKICAgICBSVU4odGVzdFNTaHJBcmdzMzIoMSwgMSkpOwog
ICAgIFJVTih0ZXN0U1NockFyZ3MzMigxLCA2MikpOwpAQCAtMzE2NCw2ICszMzgzLDcgQEAgdm9p
ZCBydW4oY29uc3QgY2hhciogZmlsdGVyKQogICAgIFJVTih0ZXN0WlNockFyZ0ltbSgweGZmZmZm
ZmZmZmZmZmZmZmYsIDApKTsKICAgICBSVU4odGVzdFpTaHJBcmdJbW0oMHhmZmZmZmZmZmZmZmZm
ZmZmLCAxKSk7CiAgICAgUlVOKHRlc3RaU2hyQXJnSW1tKDB4ZmZmZmZmZmZmZmZmZmZmZiwgNjMp
KTsKKyAgICBSVU4odGVzdFpTaHJBcmczMigzMikpOwogICAgIFJVTih0ZXN0WlNockFyZ3MzMigx
LCAwKSk7CiAgICAgUlVOKHRlc3RaU2hyQXJnczMyKDEsIDEpKTsKICAgICBSVU4odGVzdFpTaHJB
cmdzMzIoMSwgNjIpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bj
b2RlLm9wY29kZXMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJPcGNvZGUub3Bjb2RlcwkocmV2aXNpb24gMTkyMjg2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwkod29ya2luZyBjb3B5KQpAQCAtOTYsNiArOTYs
MTYgQEAgTmVnMzIgVUQ6RwogTmVnNjQgVUQ6RwogICAgIFRtcAogCitNdWwzMiBVOkcsIFVEOkcK
KyAgICBUbXAsIFRtcAorICAgIEFkZHIsIFRtcAorCitNdWwzMiBVOkcsIFU6RywgRDpHCisgICAg
SW1tLCBUbXAsIFRtcAorCitNdWw2NCBVOkcsIFVEOkcKKyAgICBUbXAsIFRtcAorCiBMZWEgVUE6
RywgRDpHCiAgICAgQWRkciwgVG1wCiAKQEAgLTE1NywxMCArMTY3LDYgQEAgWG9yNjQgVTpHLCBV
RDpHCiAgICAgVG1wLCBBZGRyCiAgICAgSW1tLCBUbXAKIAotTXVsMzIgVTpHLCBVRDpHCi0gICAg
VG1wLCBUbXAKLSAgICBBZGRyLCBUbXAKLQogIyBOb3RlIHRoYXQgTW92ZSBvcGVyYXRlcyBvdmVy
IHRoZSBmdWxsIHJlZ2lzdGVyIHNpemUsIHdoaWNoIGlzIGVpdGhlciAzMi1iaXQgb3IgNjQtYml0
IGRlcGVuZGluZyBvbgogIyB0aGUgcGxhdGZvcm0uIEknbSBub3QgZW50aXJlbHkgc3VyZSB0aGF0
IHRoaXMgaXMgYSBnb29kIHRoaW5nOyBpdCBtaWdodCBiZSBiZXR0ZXIgdG8ganVzdCBoYXZlIGEK
ICMgTW92ZTY0IGluc3RydWN0aW9uLiBPVE9ILCBvdXIgTWFjcm9Bc3NlbWJsZXJzIGFscmVhZHkg
aGF2ZSB0aGlzIG5vdGlvbiBvZiAibW92ZSgpIiB0aGF0IGJhc2ljYWxseQpJbmRleDogU291cmNl
L1dURi93dGYvTWF0aEV4dHJhcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL01hdGhF
eHRyYXMuaAkocmV2aXNpb24gMTkyMjg2KQorKysgU291cmNlL1dURi93dGYvTWF0aEV4dHJhcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNjgsNiArMzY4LDE0IEBAIGlubGluZSB1bnNpZ25lZCBmYXN0
TG9nMih1bnNpZ25lZCBpKQogICAgIHJldHVybiBsb2cyOwogfQogCitpbmxpbmUgdW5zaWduZWQg
ZmFzdExvZzIodWludDY0X3QgdmFsdWUpCit7CisgICAgdW5zaWduZWQgaGlnaCA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkPih2YWx1ZSA+PiAzMik7CisgICAgaWYgKGhpZ2gpCisgICAgICAgIHJldHVy
biBmYXN0TG9nMihoaWdoKTsKKyAgICByZXR1cm4gZmFzdExvZzIoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHZhbHVlKSk7Cit9CisKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogaW5saW5lIHR5cGVuYW1l
IHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfZmxvYXRpbmdfcG9pbnQ8VD46OnZhbHVlLCBUPjo6dHlw
ZSBzYWZlRlBEaXZpc2lvbihUIHUsIFQgdikKIHsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265268</attachid>
            <date>2015-11-10 21:20:41 -0800</date>
            <delta_ts>2015-11-10 21:32:59 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>30590</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkyMjkxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg3IEBA
CisyMDE1LTExLTEwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QjMgc2hvdWxkIGJlIGFibGUgdG8gY29tcGlsZSBhbmQgY2Fub25pY2FsaXplIE11bAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxMTI0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyB3YXMgYSBzdHJh
bmdlIHRyaXAuIEkgd2FudGVkIHRvIGRvIGEgcXVpY2sgcGF0Y2ggdG8gaW1wbGVtZW50IE11bC4g
QnV0IHRoZW4gSSByZWFsaXplZAorICAgICAgICB0aGF0IG91ciB0cmFkaXRpb24gd2hlbiBhZGRp
bmcgbmV3IGxvd2VyaW5ncyB3YXMgdG8gYWxzbyBhZGQgdGhlIGNvcnJlc3BvbmRpbmcgc3RyZW5n
dGgKKyAgICAgICAgcmVkdWN0aW9ucy4gU28gdGhlbiBJIHdyb3RlIHRoZSBNdWwtPlNobCBzdHJl
bmd0aCByZWR1Y3Rpb24uIEJ1dCB0aGF0IHJlbWluZGVkIG1lIHRoYXQgSSBuZWVkZWQKKyAgICAg
ICAgdG8gY2Fub25pY2FsaXplIGJldHdlZW4gQWRkKHgsIHgpIGFuZCBTaGwoeCwgMSkuIEkgZGVj
aWRlZCB0aGF0IGl0IHdvdWxkIHByb2JhYmx5IGJlIGJldHRlciB0bworICAgICAgICB1c2UgU2hs
KHgsIDEpLCBzaW5jZSB0aGF0IG9ubHkgaGFzIG9uZSB1c2Ugb2YgeC4gQnV0IHRoYXQgbWVhbnMg
dGhhdCB3ZSBzaG91bGQgY29tcGlsZQorICAgICAgICBTaGwoeCwgMSkgdG8gQWRkIHgsIHggaW4g
dGhlIGJhY2tlbmQsIHNpbmNlIHRoYXQncyB3aGF0IFg4NiB3YW50cy4gV2hpbGUgZG9pbmcgdGhh
dCwgSSBhbG1vc3QKKyAgICAgICAgaW50cm9kdWNlZCBhIGJ1ZyB3aGVyZSBTaGwoTG9hZCh4KSwg
MSkgd291bGQgY2F1c2UgdGhlIGNvbXBpbGVyIHRvIGVpdGhlciBjcmFzaCBvciBnZW5lcmF0ZSBi
YWQKKyAgICAgICAgY29kZS4gVGhhdCdzIGJlY2F1c2UgSSB3YXMgdXNpbmcgQWRkKHgsIHgpIHRv
IGhhbmRsZSBTaGwoeCwgMSksIHNvIHdlJ2QgZW5kIHVwIHdpdGgKKyAgICAgICAgQWRkKExvYWQo
eCksIExvYWQoeCkpIC0gaS5lLiB3ZSB3b3VsZCB0cnkgdG8gZHVwbGljYXRlIHRoZSBMb2FkLgor
CisgICAgICAgIFRoZSBpbnN0cnVjdGlvbiBzZWxlY3RvciBhbHJlYWR5IGRlZmVuZHMgYWdhaW5z
dCB0aGlzLCBhbmQgdGhlIG9ubHkgcmVhc29uIHdoeSBJIHdvdWxkIGhhdmUKKyAgICAgICAgY3Jl
YXRlZCB0aGUgYnVnIHdhcyBieSB1c2luZyB0aGUgQWRkIGhlbHBlciB3aGVuIGNvbXBpbGluZyBh
IFNobC4gU3RpbGwsIHRoaXMgd2FzIHNvIGNsb3NlIHRvCisgICAgICAgIGEgYmFkIGJ1ZyB0aGF0
IEkgYWRkZWQgYSB0b24gb2YgbmV3IHRlc3RzIHRoYXQgY292ZXIgdGhlIE9wKHgsIHgpIHdoZXJl
IHggPSBMb2FkIGNhc2UuCisKKyAgICAgICAgKiBiMy9CM0NvbXBpbGF0aW9uLmNwcDoKKyAgICAg
ICAgKEpTQzo6QjM6OkNvbXBpbGF0aW9uOjpDb21waWxhdGlvbik6CisgICAgICAgICogYjMvQjND
b21waWxhdGlvbi5oOgorICAgICAgICAoSlNDOjpCMzo6Q29tcGlsYXRpb246OmNvZGUpOgorICAg
ICAgICAqIGIzL0IzQ29uc3QzMlZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0MzJW
YWx1ZTo6c3ViQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3QzMlZhbHVlOjptdWxD
b25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDMyVmFsdWU6OmJpdEFuZENvbnN0YW50
KToKKyAgICAgICAgKiBiMy9CM0NvbnN0MzJWYWx1ZS5oOgorICAgICAgICAqIGIzL0IzQ29uc3Q2
NFZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0NjRWYWx1ZTo6c3ViQ29uc3RhbnQp
OgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2NFZhbHVlOjptdWxDb25zdGFudCk6CisgICAgICAg
IChKU0M6OkIzOjpDb25zdDY0VmFsdWU6OmJpdEFuZENvbnN0YW50KToKKyAgICAgICAgKiBiMy9C
M0NvbnN0NjRWYWx1ZS5oOgorICAgICAgICAqIGIzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHA6Cisg
ICAgICAgIChKU0M6OkIzOjpDb25zdERvdWJsZVZhbHVlOjpzdWJDb25zdGFudCk6CisgICAgICAg
IChKU0M6OkIzOjpDb25zdERvdWJsZVZhbHVlOjptdWxDb25zdGFudCk6CisgICAgICAgIChKU0M6
OkIzOjpDb25zdERvdWJsZVZhbHVlOjplcXVhbENvbnN0YW50KToKKyAgICAgICAgKiBiMy9CM0Nv
bnN0RG91YmxlVmFsdWUuaDoKKyAgICAgICAgKiBiMy9CM0dlbmVyYXRlLmNwcDoKKyAgICAgICAg
KEpTQzo6QjM6OmdlbmVyYXRlKToKKyAgICAgICAgKEpTQzo6QjM6OmdlbmVyYXRlVG9BaXIpOgor
ICAgICAgICAqIGIzL0IzR2VuZXJhdGUuaDoKKyAgICAgICAgKiBiMy9CM0xvd2VyVG9BaXIuY3Bw
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjphcHBlbmRCaW5PcCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmNyZWF0ZUdlbmVyaWNDb21wYXJlKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6bG93ZXIpOgorICAgICAgICAqIGIzL0Iz
UmVkdWNlU3RyZW5ndGguY3BwOgorICAgICAgICAqIGIzL0IzVmFsdWUuY3BwOgorICAgICAgICAo
SlNDOjpCMzo6VmFsdWU6OnN1YkNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpt
dWxDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6Yml0QW5kQ29uc3RhbnQpOgor
ICAgICAgICAqIGIzL0IzVmFsdWUuaDoKKyAgICAgICAgKiBiMy9haXIvQWlyT3Bjb2RlLm9wY29k
ZXM6CisgICAgICAgICogYjMvdGVzdGIzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OmNvbXBpbGUp
OgorICAgICAgICAoSlNDOjpCMzo6dGVzdFJldHVybkNvbnN0NjQpOgorICAgICAgICAoSlNDOjpC
Mzo6dGVzdEFkZEFyZyk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0QWRkQXJncyk6CisgICAgICAg
IChKU0M6OkIzOjp0ZXN0QWRkQXJnczMyKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RBZGRMb2Fk
VHdpY2UpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdE11bEFyZyk6CisgICAgICAgIChKU0M6OkIz
Ojp0ZXN0TXVsQXJncyk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0TXVsQXJnSW1tKToKKyAgICAg
ICAgKEpTQzo6QjM6OnRlc3RNdWxJbW1BcmcpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdE11bEFy
Z3MzMik6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0TXVsTG9hZFR3aWNlKToKKyAgICAgICAgKEpT
Qzo6QjM6OnRlc3RTdWJBcmcpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdFN1YkFyZ3MpOgorICAg
ICAgICAoSlNDOjpCMzo6dGVzdFNobEFyZ0ltbSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0U2hs
QXJnMzIpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdFNobEFyZ3MzMik6CisgICAgICAgIChKU0M6
OkIzOjp0ZXN0U1NockFyZ0ltbSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0U1NockFyZzMyKToK
KyAgICAgICAgKEpTQzo6QjM6OnRlc3RTU2hyQXJnczMyKToKKyAgICAgICAgKEpTQzo6QjM6OnRl
c3RaU2hyQXJnSW1tKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RaU2hyQXJnMzIpOgorICAgICAg
ICAoSlNDOjpCMzo6dGVzdFpTaHJBcmdzMzIpOgorICAgICAgICAoSlNDOjpCMzo6Z2VuZXJpY1Rl
c3RDb21wYXJlKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RDb21wYXJlTG9hZCk6CisgICAgICAg
IChKU0M6OkIzOjp0ZXN0Q29tcGFyZUltcGwpOgorICAgICAgICAoSlNDOjpCMzo6cnVuKToKKwog
MjAxNS0xMS0xMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFVu
cmV2aWV3ZWQsIGFkZCBhIEZJWE1FIHJlZmVyZW5jaW5nIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTExMjguCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNDb21waWxhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQ29tcGlsYXRpb24uY3BwCShyZXZpc2lvbiAxOTIyOTEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDb21waWxhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDEwICszNywx
MCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIAotQ29tcGlsYXRpb246OkNv
bXBpbGF0aW9uKFZNJiB2bSwgUHJvY2VkdXJlJiBwcm9jKQorQ29tcGlsYXRpb246OkNvbXBpbGF0
aW9uKFZNJiB2bSwgUHJvY2VkdXJlJiBwcm9jLCB1bnNpZ25lZCBvcHRMZXZlbCkKIHsKICAgICBD
Q2FsbEhlbHBlcnMgaml0KCZ2bSk7Ci0gICAgZ2VuZXJhdGUocHJvYywgaml0KTsKKyAgICBnZW5l
cmF0ZShwcm9jLCBqaXQsIG9wdExldmVsKTsKICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIodm0s
IGppdCwgbnVsbHB0cik7CiAKICAgICBtX2NvZGVSZWYgPSBGSU5BTElaRV9DT0RFKGxpbmtCdWZm
ZXIsICgiQjM6OkNvbXBpbGF0aW9uIikpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQ29tcGlsYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNDb21waWxhdGlvbi5oCShyZXZpc2lvbiAxOTIyOTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDb21waWxhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIGNs
YXNzIENvbXBpbGF0aW9uIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIAogcHVibGlj
OgotICAgIEpTX0VYUE9SVF9QUklWQVRFIENvbXBpbGF0aW9uKFZNJiwgUHJvY2VkdXJlJik7Cisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgQ29tcGlsYXRpb24oVk0mLCBQcm9jZWR1cmUmLCB1bnNpZ25l
ZCBvcHRMZXZlbCA9IDEpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIH5Db21waWxhdGlvbigpOwog
CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGVS
ZWYuY29kZSgpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFs
dWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJW
YWx1ZS5jcHAJKHJldmlzaW9uIDE5MjI5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbnN0MzJWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDEzIEBAIFZhbHVl
KiBDb25zdDMyVmFsdWU6OnN1YkNvbnN0YW50KFByb2NlZHUKICAgICByZXR1cm4gcHJvYy5hZGQ8
Q29uc3QzMlZhbHVlPihvcmlnaW4oKSwgbV92YWx1ZSAtIG90aGVyLT5hc0ludDMyKCkpOwogfQog
CitWYWx1ZSogQ29uc3QzMlZhbHVlOjptdWxDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIFZhbHVl
KiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAoIW90aGVyLT5oYXNJbnQzMigpKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3QzMlZhbHVlPihvcmlnaW4o
KSwgbV92YWx1ZSAqIG90aGVyLT5hc0ludDMyKCkpOworfQorCiBWYWx1ZSogQ29uc3QzMlZhbHVl
OjpiaXRBbmRDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIFZhbHVlKiBvdGhlcikgY29uc3QKIHsK
ICAgICBpZiAoIW90aGVyLT5oYXNJbnQzMigpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29uc3QzMlZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29uc3QzMlZhbHVlLmgJKHJldmlzaW9uIDE5MjI5MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw3
IEBAIHB1YmxpYzoKICAgICBWYWx1ZSogYWRkQ29uc3RhbnQoUHJvY2VkdXJlJiwgaW50MzJfdCBv
dGhlcikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmFsdWUqIGFkZENvbnN0YW50KFByb2NlZHVyZSYs
IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmFsdWUqIHN1YkNvbnN0YW50KFBy
b2NlZHVyZSYsIFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmFsdWUqIG11bENv
bnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmFs
dWUqIGJpdEFuZENvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgVmFsdWUqIGJpdE9yQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBj
b25zdCBvdmVycmlkZTsKICAgICBWYWx1ZSogYml0WG9yQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFs
dWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0NvbnN0NjRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29uc3Q2NFZhbHVlLmNwcAkocmV2aXNpb24gMTkyMjkxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsNiAr
NjEsMTMgQEAgVmFsdWUqIENvbnN0NjRWYWx1ZTo6c3ViQ29uc3RhbnQoUHJvY2VkdQogICAgIHJl
dHVybiBwcm9jLmFkZDxDb25zdDY0VmFsdWU+KG9yaWdpbigpLCBtX3ZhbHVlIC0gb3RoZXItPmFz
SW50NjQoKSk7CiB9CiAKK1ZhbHVlKiBDb25zdDY0VmFsdWU6Om11bENvbnN0YW50KFByb2NlZHVy
ZSYgcHJvYywgVmFsdWUqIG90aGVyKSBjb25zdAoreworICAgIGlmICghb3RoZXItPmhhc0ludDY0
KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBwcm9jLmFkZDxDb25zdDY0
VmFsdWU+KG9yaWdpbigpLCBtX3ZhbHVlICogb3RoZXItPmFzSW50NjQoKSk7Cit9CisKIFZhbHVl
KiBDb25zdDY0VmFsdWU6OmJpdEFuZENvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgVmFsdWUqIG90
aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0ludDY0KCkpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuaAkocmV2aXNpb24gMTkyMjkxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ0LDYgKzQ0LDcgQEAgcHVibGljOgogICAgIFZhbHVlKiBhZGRDb25zdGFudChQcm9jZWR1
cmUmLCBpbnQzMl90IG90aGVyKSBjb25zdCBvdmVycmlkZTsKICAgICBWYWx1ZSogYWRkQ29uc3Rh
bnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKICAgICBWYWx1ZSog
c3ViQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAg
ICBWYWx1ZSogbXVsQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVy
cmlkZTsKICAgICBWYWx1ZSogYml0QW5kQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVy
KSBjb25zdCBvdmVycmlkZTsKICAgICBWYWx1ZSogYml0T3JDb25zdGFudChQcm9jZWR1cmUmLCBW
YWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwogICAgIFZhbHVlKiBiaXRYb3JDb25zdGFudChQ
cm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHAJKHJldmlzaW9uIDE5
MjI5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSwxMyBAQCBWYWx1ZSogQ29uc3REb3VibGVWYWx1
ZTo6c3ViQ29uc3RhbnQoUHJvCiAgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0RG91YmxlVmFsdWU+
KG9yaWdpbigpLCBtX3ZhbHVlIC0gb3RoZXItPmFzRG91YmxlKCkpOwogfQogCitWYWx1ZSogQ29u
c3REb3VibGVWYWx1ZTo6bXVsQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSogb3RoZXIp
IGNvbnN0Cit7CisgICAgaWYgKCFvdGhlci0+aGFzRG91YmxlKCkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIHJldHVybiBwcm9jLmFkZDxDb25zdERvdWJsZVZhbHVlPihvcmlnaW4oKSwg
bV92YWx1ZSAqIG90aGVyLT5hc0RvdWJsZSgpKTsKK30KKwogVHJpU3RhdGUgQ29uc3REb3VibGVW
YWx1ZTo6ZXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhl
ci0+aGFzRG91YmxlKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdERv
dWJsZVZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29u
c3REb3VibGVWYWx1ZS5oCShyZXZpc2lvbiAxOTIyOTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDcg
QEAgcHVibGljOgogICAgIFZhbHVlKiBhZGRDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIGludDMy
X3Qgb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwogICAgIFZhbHVlKiBhZGRDb25zdGFudChQcm9jZWR1
cmUmIHByb2MsIFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmFsdWUqIHN1YkNv
bnN0YW50KFByb2NlZHVyZSYgcHJvYywgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAg
ICBWYWx1ZSogbXVsQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSogb3RoZXIpIGNvbnN0
IG92ZXJyaWRlOwogCiAgICAgVHJpU3RhdGUgZXF1YWxDb25zdGFudChWYWx1ZSogb3RoZXIpIGNv
bnN0IG92ZXJyaWRlOwogICAgIFRyaVN0YXRlIG5vdEVxdWFsQ29uc3RhbnQoVmFsdWUqIG90aGVy
KSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVy
YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0
ZS5jcHAJKHJldmlzaW9uIDE5MjI5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dl
bmVyYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTYgKzQxLDE2IEBACiAKIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCi12b2lkIGdlbmVyYXRlKFByb2NlZHVyZSYgcHJvY2Vk
dXJlLCBDQ2FsbEhlbHBlcnMmIGppdCkKK3ZvaWQgZ2VuZXJhdGUoUHJvY2VkdXJlJiBwcm9jZWR1
cmUsIENDYWxsSGVscGVycyYgaml0LCB1bnNpZ25lZCBvcHRMZXZlbCkKIHsKICAgICBUaW1pbmdT
Y29wZSB0aW1pbmdTY29wZSgiZ2VuZXJhdGUiKTsKIAogICAgIEFpcjo6Q29kZSBjb2RlKHByb2Nl
ZHVyZSk7Ci0gICAgZ2VuZXJhdGVUb0Fpcihwcm9jZWR1cmUsIGNvZGUpOworICAgIGdlbmVyYXRl
VG9BaXIocHJvY2VkdXJlLCBjb2RlLCBvcHRMZXZlbCk7CiAgICAgQWlyOjpnZW5lcmF0ZShjb2Rl
LCBqaXQpOwogfQogCi12b2lkIGdlbmVyYXRlVG9BaXIoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIEFp
cjo6Q29kZSYgY29kZSkKK3ZvaWQgZ2VuZXJhdGVUb0FpcihQcm9jZWR1cmUmIHByb2NlZHVyZSwg
QWlyOjpDb2RlJiBjb2RlLCB1bnNpZ25lZCBvcHRMZXZlbCkKIHsKICAgICBUaW1pbmdTY29wZSB0
aW1pbmdTY29wZSgiZ2VuZXJhdGVUb0FpciIpOwogICAgIApAQCAtNjUsMTEgKzY1LDEzIEBAIHZv
aWQgZ2VuZXJhdGVUb0FpcihQcm9jZWR1cmUmIHByb2NlZHVyZSwKICAgICAgICAgZGF0YUxvZygi
SW5pdGlhbCBCMzpcbiIpOwogICAgICAgICBkYXRhTG9nKHByb2NlZHVyZSk7CiAgICAgfQotCi0g
ICAgcmVkdWNlU3RyZW5ndGgocHJvY2VkdXJlKTsKICAgICAKLSAgICAvLyBGSVhNRTogQWRkIG1v
cmUgb3B0aW1pemF0aW9ucyBoZXJlLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNTA1MDcKKyAgICBpZiAob3B0TGV2ZWwgPj0gMSkgeworICAgICAgICBy
ZWR1Y2VTdHJlbmd0aChwcm9jZWR1cmUpOworICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IEFk
ZCBtb3JlIG9wdGltaXphdGlvbnMgaGVyZS4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDUwNworICAgIH0KIAogICAgIG1vdmVDb25zdGFudHMo
cHJvY2VkdXJlKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5oCShy
ZXZpc2lvbiAxOTIyOTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMiArMzksMTIgQEAgbmFtZXNwYWNlIEFpciB7IGNsYXNz
IENvZGU7IH0KIAogLy8gVGhpcyB0YWtlcyBhIEIzOjpQcm9jZWR1cmUsIG9wdGltaXplcyBpdCBp
bi1wbGFjZSwgYW5kIGdlbmVyYXRlcyBpdCB0byBtYWNoaW5lIGNvZGUgYnkgZmlyc3QKIC8vIGlu
dGVybmFsbHkgY29udmVydGluZyB0byBhbiBBaXI6OkNvZGUgYW5kIHRoZW4gZ2VuZXJhdGluZyB0
aGF0LgotSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBnZW5lcmF0ZShQcm9jZWR1cmUmLCBDQ2FsbEhl
bHBlcnMmKTsKK0pTX0VYUE9SVF9QUklWQVRFIHZvaWQgZ2VuZXJhdGUoUHJvY2VkdXJlJiwgQ0Nh
bGxIZWxwZXJzJiwgdW5zaWduZWQgb3B0TGV2ZWwgPSAxKTsKIAogLy8gVGhpcyB0YWtlcyBhIEIz
OjpQcm9jZWR1cmUsIG9wdGltaXplcyBpdCBpbi1wbGFjZSwgYW5kIGxvd2VycyBpdCB0byBBaXIu
IFlvdSBjYW4gdGhlbiBnZW5lcmF0ZQogLy8gdGhlIEFpciB0byBtYWNoaW5lIGNvZGUgdXNpbmcg
QWlyOjpnZW5lcmF0ZSgpLiBOb3RlIHRoYXQgYW4gQWlyOjpDb2RlIHdpbGwgaGF2ZSBwb2ludGVy
cyBpbnRvIHRoZQogLy8gQjM6OlByb2NlZHVyZSwgc28geW91IG5lZWQgdG8gZW5zdXJlIHRoYXQg
dGhlIEIzOjpQcm9jZWR1cmUgb3V0bGl2ZXMgdGhlIEFpcjo6Q29kZS4KLXZvaWQgZ2VuZXJhdGVU
b0FpcihQcm9jZWR1cmUmLCBBaXI6OkNvZGUmKTsKK3ZvaWQgZ2VuZXJhdGVUb0FpcihQcm9jZWR1
cmUmLCBBaXI6OkNvZGUmLCB1bnNpZ25lZCBvcHRMZXZlbCA9IDEpOwogCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fp
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fp
ci5jcHAJKHJldmlzaW9uIDE5MjI5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xv
d2VyVG9BaXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NDAsNyArNTQwLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIC8vIE5vdGUgdGhhdCBu
byBrbm93biBhcmNoaXRlY3R1cmUgaGFzIGEgdGhyZWUtb3BlcmFuZCBmb3JtIG9mIGJpbmFyeSBv
cGVyYXRpb25zIHRoYXQgYWxzbworICAgICAgICAvLyBOb3RlIHRoYXQgbm8gZXh0YW50IGFyY2hp
dGVjdHVyZSBoYXMgYSB0aHJlZS1vcGVyYW5kIGZvcm0gb2YgYmluYXJ5IG9wZXJhdGlvbnMgdGhh
dCBhbHNvCiAgICAgICAgIC8vIGxvYWQgZnJvbSBtZW1vcnkuIElmIHN1Y2ggYW4gYWJvbWluYXRp
b24gZGlkIGV4aXN0LCB3ZSB3b3VsZCBoYW5kbGUgaXQgc29tZXdoZXJlIGFyb3VuZAogICAgICAg
ICAvLyBoZXJlLgogCkBAIC04ODMsNyArODgzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgICAgICAvLyBGaW5hbGx5LCBoYW5kbGUgY29tcGFyaXNvbiBiZXR3
ZWVuIHRtcHMuCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRyeUNvbXBhcmUod2lkdGgsIHRtcFBy
b21pc2UobGVmdCksIHRtcFByb21pc2UocmlnaHQpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Y29tcGFyZSh3aWR0aCwgcmVsQ29uZCwgdG1wUHJvbWlzZShsZWZ0KSwgdG1wUHJvbWlzZShyaWdo
dCkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBEb3VibGUgY29tcGFyaXNvbnMg
Y2FuJ3QgcmVhbGx5IGRvIGFueXRoaW5nIHNtYXJ0LgpAQCAtMTIzMyw2ICsxMjMzLDEyIEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAorICAgICAgICBjYXNlIE11
bDogeworICAgICAgICAgICAgYXBwZW5kQmluT3A8TXVsMzIsIE11bDY0LCBBaXI6Ok9vcHMsIENv
bW11dGF0aXZlPigKKyAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKSwgbV92YWx1ZS0+
Y2hpbGQoMSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKICAgICAgICAgY2Fz
ZSBCaXRBbmQ6IHsKICAgICAgICAgICAgIGFwcGVuZEJpbk9wPEFuZDMyLCBBbmQ2NCwgQWlyOjpP
b3BzLCBDb21tdXRhdGl2ZT4oCiAgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCksIG1f
dmFsdWUtPmNoaWxkKDEpKTsKQEAgLTEyNTIsNiArMTI1OCwxNSBAQCBwcml2YXRlOgogICAgICAg
ICB9CiAKICAgICAgICAgY2FzZSBTaGw6IHsKKyAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGls
ZCgxKS0+aXNJbnQzMigxKSkgeworICAgICAgICAgICAgICAgIC8vIFRoaXMgb3B0aW1pemF0aW9u
IG1ha2VzIHNlbnNlIG9uIFg4Ni4gSSBkb24ndCBrbm93IGlmIGl0IG1ha2VzIHNlbnNlIGFueXdo
ZXJlIGVsc2UuCisgICAgICAgICAgICAgICAgYXBwZW5kKE1vdmUsIHRtcChtX3ZhbHVlLT5jaGls
ZCgwKSksIHRtcChtX3ZhbHVlKSk7CisgICAgICAgICAgICAgICAgYXBwZW5kKAorICAgICAgICAg
ICAgICAgICAgICBvcGNvZGVGb3JUeXBlKEFkZDMyLCBBZGQ2NCwgQWlyOjpPb3BzLCBtX3ZhbHVl
LT5jaGlsZCgwKS0+dHlwZSgpKSwKKyAgICAgICAgICAgICAgICAgICAgdG1wKG1fdmFsdWUpLCB0
bXAobV92YWx1ZSkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIAogICAgICAgICAgICAgYXBwZW5kU2hpZnQ8THNoaWZ0MzIsIExzaGlmdDY0Piht
X3ZhbHVlLT5jaGlsZCgwKSwgbV92YWx1ZS0+Y2hpbGQoMSkpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJl
bmd0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNl
U3RyZW5ndGguY3BwCShyZXZpc2lvbiAxOTIyOTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Niw2ICsxNTYsMTcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIAorICAg
ICAgICAgICAgLy8gVHVybiB0aGlzOiBBZGQodmFsdWUsIHZhbHVlKQorICAgICAgICAgICAgLy8g
SW50byB0aGlzOiBTaGwodmFsdWUsIDEpCisgICAgICAgICAgICAvLyBUaGlzIGlzIGEgdXNlZnVs
IGNhbm9uaWNhbGl6YXRpb24uIEl0J3Mgbm90IG1lYW50IHRvIGJlIGEgc3RyZW5ndGggcmVkdWN0
aW9uLgorICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApID09IG1fdmFsdWUtPmNoaWxk
KDEpKSB7CisgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZSgKKyAgICAgICAgICAg
ICAgICAgICAgbV9wcm9jLmFkZDxWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgICAgICBTaGws
IG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgwKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydDxDb25zdDMyVmFsdWU+KG1faW5kZXgsIG1fdmFs
dWUtPm9yaWdpbigpLCAxKSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorCiAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEFkZCh2YWx1ZSwgemVybykKICAgICAgICAg
ICAgIC8vIEludG8gYW4gSWRlbnRpdHkuCiAgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQo
MSktPmlzSW50KDApKSB7CkBAIC0xODYsNiArMTk3LDU5IEBAIHByaXZhdGU6CiAKICAgICAgICAg
ICAgIGJyZWFrOwogCisgICAgICAgIGNhc2UgTXVsOgorICAgICAgICAgICAgaGFuZGxlQ29tbXV0
YXRpdml0eSgpOworCisgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IE11bChjb25zdGFudDEsIGNv
bnN0YW50MikKKyAgICAgICAgICAgIC8vIEludG8gdGhpczogY29uc3RhbnQxICogY29uc3RhbnQy
CisgICAgICAgICAgICBpZiAoVmFsdWUqIHZhbHVlID0gbV92YWx1ZS0+Y2hpbGQoMCktPm11bENv
bnN0YW50KG1fcHJvYywgbV92YWx1ZS0+Y2hpbGQoMSkpKSB7CisgICAgICAgICAgICAgICAgcmVw
bGFjZVdpdGhOZXdWYWx1ZSh2YWx1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aGFzSW50KCkpIHsK
KyAgICAgICAgICAgICAgICBpbnQ2NF90IGZhY3RvciA9IG1fdmFsdWUtPmNoaWxkKDEpLT5hc0lu
dCgpOworCisgICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBNdWwodmFsdWUsIDApCisgICAg
ICAgICAgICAgICAgLy8gSW50byB0aGlzOiAwCisgICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0
IHdlIGRvbid0IGRvIHRoaXMgZm9yIGRvdWJsZXMgYmVjYXVzZSB0aGF0J3Mgd3JvbmcuIEZvciBl
eGFtcGxlLCAtMSAqIDAKKyAgICAgICAgICAgICAgICAvLyBhbmQgMSAqIDAgeWllbGQgZGlmZmVy
ZW50IHJlc3VsdHMuCisgICAgICAgICAgICAgICAgaWYgKCFmYWN0b3IpIHsKKyAgICAgICAgICAg
ICAgICAgICAgbV92YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgxKSk7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIC8vIFR1cm4gdGhpczogTXVsKHZhbHVlLCAxKQorICAgICAgICAgICAgICAgIC8v
IEludG8gdGhpczogdmFsdWUKKyAgICAgICAgICAgICAgICBpZiAoZmFjdG9yID09IDEpIHsKKyAg
ICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5j
aGlsZCgwKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IE11bCh2YWx1
ZSwgY29uc3RhbnQpCisgICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBTaGwodmFsdWUsIGxv
ZzIoY29uc3RhbnQpKQorICAgICAgICAgICAgICAgIGlmIChoYXNPbmVCaXRTZXQoZmFjdG9yKSkg
eworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaGlmdEFtb3VudCA9IFdURjo6ZmFzdExv
ZzIoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGZhY3RvcikpOworICAgICAgICAgICAgICAgICAgICBy
ZXBsYWNlV2l0aE5ld1ZhbHVlKAorICAgICAgICAgICAgICAgICAgICAgICAgbV9wcm9jLmFkZDxW
YWx1ZT4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hsLCBtX3ZhbHVlLT5vcmlnaW4o
KSwgbV92YWx1ZS0+Y2hpbGQoMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNl
cnRpb25TZXQuaW5zZXJ0PENvbnN0MzJWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1faW5kZXgsIG1fdmFsdWUtPm9yaWdpbigpLCBzaGlmdEFtb3VudCkpKTsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBl
bHNlIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aGFzRG91YmxlKCkpIHsKKyAgICAgICAgICAgICAg
ICBkb3VibGUgZmFjdG9yID0gbV92YWx1ZS0+Y2hpbGQoMSktPmFzRG91YmxlKCk7CisKKyAgICAg
ICAgICAgICAgICAvLyBUdXJuIHRoaXM6IE11bCh2YWx1ZSwgMSkKKyAgICAgICAgICAgICAgICAv
LyBJbnRvIHRoaXM6IHZhbHVlCisgICAgICAgICAgICAgICAgaWYgKGZhY3RvciA9PSAxKSB7Cisg
ICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPnJlcGxhY2VXaXRoSWRlbnRpdHkobV92YWx1ZS0+
Y2hpbGQoMCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgIGNhc2UgQml0
QW5kOgogICAgICAgICAgICAgaGFuZGxlQ29tbXV0YXRpdml0eSgpOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCShyZXZpc2lvbiAxOTIyOTEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNCw2ICsxMzQs
MTEgQEAgVmFsdWUqIFZhbHVlOjpzdWJDb25zdGFudChQcm9jZWR1cmUmLCBWYQogICAgIHJldHVy
biBudWxscHRyOwogfQogCitWYWx1ZSogVmFsdWU6Om11bENvbnN0YW50KFByb2NlZHVyZSYsIFZh
bHVlKikgY29uc3QKK3sKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwogVmFsdWUqIFZhbHVlOjpi
aXRBbmRDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSopIGNvbnN0CiB7CiAgICAgcmV0dXJuIG51
bGxwdHI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgJKHJldmlzaW9uIDE5MjI5
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTExMyw2ICsxMTMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBWYWx1ZSogYWRkQ29uc3Rh
bnQoUHJvY2VkdXJlJiwgaW50MzJfdCBvdGhlcikgY29uc3Q7CiAgICAgdmlydHVhbCBWYWx1ZSog
YWRkQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdDsKICAgICB2aXJ0dWFs
IFZhbHVlKiBzdWJDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0OworICAg
IHZpcnR1YWwgVmFsdWUqIG11bENvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhlcikgY29u
c3Q7CiAgICAgdmlydHVhbCBWYWx1ZSogYml0QW5kQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUq
IG90aGVyKSBjb25zdDsKICAgICB2aXJ0dWFsIFZhbHVlKiBiaXRPckNvbnN0YW50KFByb2NlZHVy
ZSYsIFZhbHVlKiBvdGhlcikgY29uc3Q7CiAgICAgdmlydHVhbCBWYWx1ZSogYml0WG9yQ29uc3Rh
bnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy90ZXN0YjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy90ZXN0YjMuY3BwCShyZXZpc2lvbiAxOTIyOTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvdGVzdGIzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsOSArNjgsOSBAQCBuYW1lc3Bh
Y2UgewogCiBWTSogdm07CiAKLXN0ZDo6dW5pcXVlX3B0cjxDb21waWxhdGlvbj4gY29tcGlsZShQ
cm9jZWR1cmUmIHByb2NlZHVyZSkKK3N0ZDo6dW5pcXVlX3B0cjxDb21waWxhdGlvbj4gY29tcGls
ZShQcm9jZWR1cmUmIHByb2NlZHVyZSwgdW5zaWduZWQgb3B0TGV2ZWwgPSAxKQogewotICAgIHJl
dHVybiBzdGQ6Om1ha2VfdW5pcXVlPENvbXBpbGF0aW9uPigqdm0sIHByb2NlZHVyZSk7CisgICAg
cmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8Q29tcGlsYXRpb24+KCp2bSwgcHJvY2VkdXJlLCBvcHRM
ZXZlbCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4K
QEAgLTEzMiw2ICsxMzIsMTggQEAgdm9pZCB0ZXN0UmV0dXJuQ29uc3Q2NChpbnQ2NF90IHZhbHVl
KQogICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50NjRfdD4ocHJvYykgPT0gdmFsdWUpOwogfQog
Cit2b2lkIHRlc3RBZGRBcmcoaW50IGEpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFz
aWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBWYWx1ZSogdmFsdWUgPSByb290
LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFy
Z3VtZW50R1BSMCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAg
IHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4o
cHJvYywgQWRkLCBPcmlnaW4oKSwgdmFsdWUsIHZhbHVlKSk7CisKKyAgICBDSEVDSyhjb21waWxl
QW5kUnVuPGludD4ocHJvYywgYSkgPT0gYSArIGEpOworfQorCiB2b2lkIHRlc3RBZGRBcmdzKGlu
dCBhLCBpbnQgYikKIHsKICAgICBQcm9jZWR1cmUgcHJvYzsKQEAgLTE5Miw2ICsyMDQsMTMyIEBA
IHZvaWQgdGVzdEFkZEFyZ3MzMihpbnQgYSwgaW50IGIpCiAgICAgQ0hFQ0soY29tcGlsZUFuZFJ1
bjxpbnQ+KHByb2MsIGEsIGIpID09IGEgKyBiKTsKIH0KIAordm9pZCB0ZXN0QWRkTG9hZFR3aWNl
KCkKK3sKKyAgICBhdXRvIHRlc3QgPSBbJl0gKHVuc2lnbmVkIG9wdExldmVsKSB7CisgICAgICAg
IFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9j
aygpOworICAgICAgICBpbnQzMl90IHZhbHVlID0gNDI7CisgICAgICAgIFZhbHVlKiBsb2FkID0g
cm9vdC0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIExvYWQsIElu
dDMyLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgJnZhbHVlKSk7CisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb250
cm9sVmFsdWU+KAorICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAg
ICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgbG9hZCwgbG9h
ZCkpOworCisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYywgb3B0TGV2ZWwpOworICAg
ICAgICBDSEVDSyhpbnZva2U8aW50MzJfdD4oKmNvZGUpID09IDQyICogMik7CisgICAgfTsKKwor
ICAgIHRlc3QoMCk7CisgICAgdGVzdCgxKTsKK30KKwordm9pZCB0ZXN0TXVsQXJnKGludCBhKQor
eworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJs
b2NrKCk7CisgICAgVmFsdWUqIHZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFs
dWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIHJvb3QtPmFw
cGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAor
ICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIE11bCwgT3JpZ2luKCksIHZhbHVl
LCB2YWx1ZSkpOworCisgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MsIGEpID09IGEg
KiBhKTsKK30KKwordm9pZCB0ZXN0TXVsQXJncyhpbnQgYSwgaW50IGIpCit7CisgICAgUHJvY2Vk
dXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBy
b290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmln
aW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2Ms
IE11bCwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCksCisgICAgICAgICAg
ICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUklu
Zm86OmFyZ3VtZW50R1BSMSkpKTsKKworICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9j
LCBhLCBiKSA9PSBhICogYik7Cit9CisKK3ZvaWQgdGVzdE11bEFyZ0ltbShpbnQgYSwgaW50IGIp
Cit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRk
QmxvY2soKTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJv
YywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAg
ICAgICAgICAgIHByb2MsIE11bCwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmRO
ZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BS
MCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmln
aW4oKSwgYikpKTsKKworICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9jLCBhKSA9PSBh
ICogYik7Cit9CisKK3ZvaWQgdGVzdE11bEltbUFyZyhpbnQgYSwgaW50IGIpCit7CisgICAgUHJv
Y2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAg
ICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgUmV0dXJuLCBP
cmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHBy
b2MsIE11bCwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3Q2NFZh
bHVlPihwcm9jLCBPcmlnaW4oKSwgYSksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJn
dW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpKTsK
KworICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9jLCBiKSA9PSBhICogYik7Cit9CisK
K3ZvaWQgdGVzdE11bEFyZ3MzMihpbnQgYSwgaW50IGIpCit7CisgICAgUHJvY2VkdXJlIHByb2M7
CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICByb290LT5hcHBl
bmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAg
ICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIE11bCwgT3Jp
Z2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAg
ICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmRO
ZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BS
MCkpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAg
ICBwcm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3
PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEp
KSkpOworCisgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MsIGEsIGIpID09IGEgKiBi
KTsKK30KKwordm9pZCB0ZXN0TXVsTG9hZFR3aWNlKCkKK3sKKyAgICBhdXRvIHRlc3QgPSBbJl0g
KHVuc2lnbmVkIG9wdExldmVsKSB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBC
YXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgICAgICBpbnQzMl90IHZhbHVl
ID0gNDI7CisgICAgICAgIFZhbHVlKiBsb2FkID0gcm9vdC0+YXBwZW5kTmV3PE1lbW9yeVZhbHVl
PigKKyAgICAgICAgICAgIHByb2MsIExvYWQsIEludDMyLCBPcmlnaW4oKSwKKyAgICAgICAgICAg
IHJvb3QtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgJnZhbHVlKSk7
CisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICAgICAgcHJv
YywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4o
cHJvYywgTXVsLCBPcmlnaW4oKSwgbG9hZCwgbG9hZCkpOworCisgICAgICAgIGF1dG8gY29kZSA9
IGNvbXBpbGUocHJvYywgb3B0TGV2ZWwpOworICAgICAgICBDSEVDSyhpbnZva2U8aW50MzJfdD4o
KmNvZGUpID09IDQyICogNDIpOworICAgIH07CisKKyAgICB0ZXN0KDApOworICAgIHRlc3QoMSk7
Cit9CisKK3ZvaWQgdGVzdFN1YkFyZyhpbnQgYSkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAg
ICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIFZhbHVlKiB2YWx1ZSA9
IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIwKTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAg
ICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZh
bHVlPihwcm9jLCBTdWIsIE9yaWdpbigpLCB2YWx1ZSwgdmFsdWUpKTsKKworICAgIENIRUNLKCFj
b21waWxlQW5kUnVuPGludD4ocHJvYywgYSkpOworfQorCiB2b2lkIHRlc3RTdWJBcmdzKGludCBh
LCBpbnQgYikKIHsKICAgICBQcm9jZWR1cmUgcHJvYzsKQEAgLTEwMTEsNiArMTE0OSwyMCBAQCB2
b2lkIHRlc3RTaGxBcmdJbW0oaW50NjRfdCBhLCBpbnQ2NF90IGIpCiAgICAgQ0hFQ0soY29tcGls
ZUFuZFJ1bjxpbnQ2NF90Pihwcm9jLCBhKSA9PSAoYSA8PCBiKSk7CiB9CiAKK3ZvaWQgdGVzdFNo
bEFyZzMyKGludDMyX3QgYSkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2Nr
KiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIFZhbHVlKiB2YWx1ZSA9IHJvb3QtPmFwcGVu
ZE5ldzxWYWx1ZT4oCisgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwKKyAgICAgICAgcm9v
dC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjph
cmd1bWVudEdQUjApKTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAg
ICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVl
Pihwcm9jLCBTaGwsIE9yaWdpbigpLCB2YWx1ZSwgdmFsdWUpKTsKKworICAgIENIRUNLKGNvbXBp
bGVBbmRSdW48aW50MzJfdD4ocHJvYywgYSkgPT0gKGEgPDwgYSkpOworfQorCiB2b2lkIHRlc3RT
aGxBcmdzMzIoaW50MzJfdCBhLCBpbnQzMl90IGIpCiB7CiAgICAgUHJvY2VkdXJlIHByb2M7CkBA
IC0xMTAzLDYgKzEyNTUsMjAgQEAgdm9pZCB0ZXN0U1NockFyZ0ltbShpbnQ2NF90IGEsIGludDY0
X3QgYgogICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50NjRfdD4ocHJvYywgYSkgPT0gKGEgPj4g
YikpOwogfQogCit2b2lkIHRlc3RTU2hyQXJnMzIoaW50MzJfdCBhKQoreworICAgIFByb2NlZHVy
ZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgVmFs
dWUqIHZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgcHJvYywgVHJ1bmMs
IE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgIHJvb3QtPmFwcGVuZE5l
dzxDb250cm9sVmFsdWU+KAorICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAg
ICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFNTaHIsIE9yaWdpbigpLCB2YWx1ZSwgdmFs
dWUpKTsKKworICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50MzJfdD4ocHJvYywgYSkgPT0gKGEg
Pj4gYSkpOworfQorCiB2b2lkIHRlc3RTU2hyQXJnczMyKGludDMyX3QgYSwgaW50MzJfdCBiKQog
ewogICAgIFByb2NlZHVyZSBwcm9jOwpAQCAtMTE5NSw2ICsxMzYxLDIwIEBAIHZvaWQgdGVzdFpT
aHJBcmdJbW0odWludDY0X3QgYSwgdWludDY0X3QKICAgICBDSEVDSyhjb21waWxlQW5kUnVuPHVp
bnQ2NF90Pihwcm9jLCBhKSA9PSAoYSA+PiBiKSk7CiB9CiAKK3ZvaWQgdGVzdFpTaHJBcmczMih1
aW50MzJfdCBhKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3Qg
PSBwcm9jLmFkZEJsb2NrKCk7CisgICAgVmFsdWUqIHZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZh
bHVlPigKKyAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBl
bmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50
R1BSMCkpOworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICBwcm9j
LCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2Ms
IFpTaHIsIE9yaWdpbigpLCB2YWx1ZSwgdmFsdWUpKTsKKworICAgIENIRUNLKGNvbXBpbGVBbmRS
dW48dWludDMyX3Q+KHByb2MsIGEpID09IChhID4+IGEpKTsKK30KKwogdm9pZCB0ZXN0WlNockFy
Z3MzMih1aW50MzJfdCBhLCB1aW50MzJfdCBiKQogewogICAgIFByb2NlZHVyZSBwcm9jOwpAQCAt
MjUwMCwxMiArMjY4MCwxNCBAQCB2b2lkIGdlbmVyaWNUZXN0Q29tcGFyZSgKICAgICAgICAgUHJv
Y2VkdXJlIHByb2M7CiAgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7
CiAKKyAgICAgICAgVmFsdWUqIGxlZnRWYWx1ZSA9IGxlZnRGdW5jdG9yKHJvb3QsIHByb2MpOwor
ICAgICAgICBWYWx1ZSogcmlnaHRWYWx1ZSA9IHJpZ2h0RnVuY3Rvcihyb290LCBwcm9jKTsKKyAg
ICAgICAgCiAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAogICAgICAgICAg
ICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxW
YWx1ZT4oCiAgICAgICAgICAgICAgICAgcHJvYywgTm90RXF1YWwsIE9yaWdpbigpLAotICAgICAg
ICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgIHBy
b2MsIG9wY29kZSwgT3JpZ2luKCksIGxlZnRGdW5jdG9yKHJvb3QsIHByb2MpLCByaWdodEZ1bmN0
b3Iocm9vdCwgcHJvYykpLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4o
cHJvYywgb3Bjb2RlLCBPcmlnaW4oKSwgbGVmdFZhbHVlLCByaWdodFZhbHVlKSwKICAgICAgICAg
ICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkp
KTsKIAogICAgICAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludD4ocHJvYywgbGVmdCwgcmlnaHQp
ID09IHJlc3VsdCk7CkBAIC0yNTE4LDEwICsyNzAwLDEyIEBAIHZvaWQgZ2VuZXJpY1Rlc3RDb21w
YXJlKAogICAgICAgICBCYXNpY0Jsb2NrKiB0aGVuQ2FzZSA9IHByb2MuYWRkQmxvY2soKTsKICAg
ICAgICAgQmFzaWNCbG9jayogZWxzZUNhc2UgPSBwcm9jLmFkZEJsb2NrKCk7CiAKKyAgICAgICAg
VmFsdWUqIGxlZnRWYWx1ZSA9IGxlZnRGdW5jdG9yKHJvb3QsIHByb2MpOworICAgICAgICBWYWx1
ZSogcmlnaHRWYWx1ZSA9IHJpZ2h0RnVuY3Rvcihyb290LCBwcm9jKTsKKwogICAgICAgICByb290
LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKICAgICAgICAgICAgIHByb2MsIEJyYW5jaCwgT3Jp
Z2luKCksCi0gICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAotICAgICAgICAgICAg
ICAgIHByb2MsIG9wY29kZSwgT3JpZ2luKCksIGxlZnRGdW5jdG9yKHJvb3QsIHByb2MpLCByaWdo
dEZ1bmN0b3Iocm9vdCwgcHJvYykpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVl
Pihwcm9jLCBvcGNvZGUsIE9yaWdpbigpLCBsZWZ0VmFsdWUsIHJpZ2h0VmFsdWUpLAogICAgICAg
ICAgICAgRnJlcXVlbnRlZEJsb2NrKHRoZW5DYXNlKSwgRnJlcXVlbnRlZEJsb2NrKGVsc2VDYXNl
KSk7CiAKICAgICAgICAgLy8gV2UgdXNlIGEgcGF0Y2hwb2ludCBvbiB0aGUgdGhlbiBjYXNlIHRv
IGVuc3VyZSB0aGF0IHRoaXMgZG9lc24ndCBnZXQgaWYtY29udmVydGVkLgpAQCAtMjYzOSw2ICsy
ODIzLDIyIEBAIHZvaWQgdGVzdENvbXBhcmVMb2FkKEIzOjpPcGNvZGUgb3Bjb2RlLCAKICAgICAg
ICAgICAgICAgICBibG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigp
LCAmc2xvdCkpOwogICAgICAgICB9LAogICAgICAgICBsZWZ0LCByaWdodCwgcmVzdWx0KTsKKwor
ICAgIC8vIFRlc3QgYWRkci10by1hZGRyLCB3aXRoIHRoZSBzYW1lIGFkZHIuCisgICAgc2xvdCA9
IGxlZnQ7CisgICAgVmFsdWUqIHZhbHVlOworICAgIGdlbmVyaWNUZXN0Q29tcGFyZSgKKyAgICAg
ICAgb3Bjb2RlLAorICAgICAgICBbJl0gKEJhc2ljQmxvY2sqIGJsb2NrLCBQcm9jZWR1cmUmIHBy
b2MpIHsKKyAgICAgICAgICAgIHZhbHVlID0gYmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4o
CisgICAgICAgICAgICAgICAgcHJvYywgbG9hZE9wY29kZSwgSW50MzIsIE9yaWdpbigpLAorICAg
ICAgICAgICAgICAgIGJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksICZzbG90KSk7CisgICAgICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgICAgIH0sCisgICAg
ICAgIFsmXSAoQmFzaWNCbG9jayosIFByb2NlZHVyZSYpIHsKKyAgICAgICAgICAgIHJldHVybiB2
YWx1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgbGVmdCwgbGVmdCwgbW9kZWxDb21wYXJlKG9wY29k
ZSwgbW9kZWxMb2FkPFQ+KGxlZnQpLCBtb2RlbExvYWQ8VD4obGVmdCkpKTsKIH0KIAogdm9pZCB0
ZXN0Q29tcGFyZUltcGwoQjM6Ok9wY29kZSBvcGNvZGUsIGludCBsZWZ0LCBpbnQgcmlnaHQpCkBA
IC0yODY1LDYgKzMwNjUsNyBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpCiAgICAgUlVO
KHRlc3RSZXR1cm5Db25zdDY0KDUpKTsKICAgICBSVU4odGVzdFJldHVybkNvbnN0NjQoLTQyKSk7
CiAKKyAgICBSVU4odGVzdEFkZEFyZygxMTEpKTsKICAgICBSVU4odGVzdEFkZEFyZ3MoMSwgMSkp
OwogICAgIFJVTih0ZXN0QWRkQXJncygxLCAyKSk7CiAgICAgUlVOKHRlc3RBZGRBcmdJbW0oMSwg
MikpOwpAQCAtMjg3NSw3ICszMDc2LDI1IEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikK
ICAgICBSVU4odGVzdEFkZEltbUFyZygxLCAwKSk7CiAgICAgUlVOKHRlc3RBZGRBcmdzMzIoMSwg
MSkpOwogICAgIFJVTih0ZXN0QWRkQXJnczMyKDEsIDIpKTsKKyAgICBSVU4odGVzdEFkZExvYWRU
d2ljZSgpKTsKKworICAgIFJVTih0ZXN0TXVsQXJnKDUpKTsKKyAgICBSVU4odGVzdE11bEFyZ3Mo
MSwgMSkpOworICAgIFJVTih0ZXN0TXVsQXJncygxLCAyKSk7CisgICAgUlVOKHRlc3RNdWxBcmdz
KDMsIDMpKTsKKyAgICBSVU4odGVzdE11bEFyZ0ltbSgxLCAyKSk7CisgICAgUlVOKHRlc3RNdWxB
cmdJbW0oMCwgMikpOworICAgIFJVTih0ZXN0TXVsQXJnSW1tKDEsIDApKTsKKyAgICBSVU4odGVz
dE11bEFyZ0ltbSgzLCAzKSk7CisgICAgUlVOKHRlc3RNdWxJbW1BcmcoMSwgMikpOworICAgIFJV
Tih0ZXN0TXVsSW1tQXJnKDAsIDIpKTsKKyAgICBSVU4odGVzdE11bEltbUFyZygxLCAwKSk7Cisg
ICAgUlVOKHRlc3RNdWxJbW1BcmcoMywgMykpOworICAgIFJVTih0ZXN0TXVsQXJnczMyKDEsIDEp
KTsKKyAgICBSVU4odGVzdE11bEFyZ3MzMigxLCAyKSk7CisgICAgUlVOKHRlc3RNdWxMb2FkVHdp
Y2UoKSk7CiAKKyAgICBSVU4odGVzdFN1YkFyZygyNCkpOwogICAgIFJVTih0ZXN0U3ViQXJncygx
LCAxKSk7CiAgICAgUlVOKHRlc3RTdWJBcmdzKDEsIDIpKTsKICAgICBSVU4odGVzdFN1YkFyZ3Mo
MTMsIC00MikpOwpAQCAtMzA4Miw2ICszMzAxLDcgQEAgdm9pZCBydW4oY29uc3QgY2hhciogZmls
dGVyKQogICAgIFJVTih0ZXN0U2hsQXJnSW1tKDB4ZmZmZmZmZmZmZmZmZmZmZiwgMCkpOwogICAg
IFJVTih0ZXN0U2hsQXJnSW1tKDB4ZmZmZmZmZmZmZmZmZmZmZiwgMSkpOwogICAgIFJVTih0ZXN0
U2hsQXJnSW1tKDB4ZmZmZmZmZmZmZmZmZmZmZiwgNjMpKTsKKyAgICBSVU4odGVzdFNobEFyZzMy
KDIpKTsKICAgICBSVU4odGVzdFNobEFyZ3MzMigxLCAwKSk7CiAgICAgUlVOKHRlc3RTaGxBcmdz
MzIoMSwgMSkpOwogICAgIFJVTih0ZXN0U2hsQXJnczMyKDEsIDYyKSk7CkBAIC0zMTIzLDYgKzMz
NDMsNyBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpCiAgICAgUlVOKHRlc3RTU2hyQXJn
SW1tKDB4ZmZmZmZmZmZmZmZmZmZmZiwgMCkpOwogICAgIFJVTih0ZXN0U1NockFyZ0ltbSgweGZm
ZmZmZmZmZmZmZmZmZmYsIDEpKTsKICAgICBSVU4odGVzdFNTaHJBcmdJbW0oMHhmZmZmZmZmZmZm
ZmZmZmZmLCA2MykpOworICAgIFJVTih0ZXN0U1NockFyZzMyKDMyKSk7CiAgICAgUlVOKHRlc3RT
U2hyQXJnczMyKDEsIDApKTsKICAgICBSVU4odGVzdFNTaHJBcmdzMzIoMSwgMSkpOwogICAgIFJV
Tih0ZXN0U1NockFyZ3MzMigxLCA2MikpOwpAQCAtMzE2NCw2ICszMzg1LDcgQEAgdm9pZCBydW4o
Y29uc3QgY2hhciogZmlsdGVyKQogICAgIFJVTih0ZXN0WlNockFyZ0ltbSgweGZmZmZmZmZmZmZm
ZmZmZmYsIDApKTsKICAgICBSVU4odGVzdFpTaHJBcmdJbW0oMHhmZmZmZmZmZmZmZmZmZmZmLCAx
KSk7CiAgICAgUlVOKHRlc3RaU2hyQXJnSW1tKDB4ZmZmZmZmZmZmZmZmZmZmZiwgNjMpKTsKKyAg
ICBSVU4odGVzdFpTaHJBcmczMigzMikpOwogICAgIFJVTih0ZXN0WlNockFyZ3MzMigxLCAwKSk7
CiAgICAgUlVOKHRlc3RaU2hyQXJnczMyKDEsIDEpKTsKICAgICBSVU4odGVzdFpTaHJBcmdzMzIo
MSwgNjIpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9w
Y29kZXMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNv
ZGUub3Bjb2RlcwkocmV2aXNpb24gMTkyMjkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwkod29ya2luZyBjb3B5KQpAQCAtOTYsNiArOTYsMTYgQEAg
TmVnMzIgVUQ6RwogTmVnNjQgVUQ6RwogICAgIFRtcAogCitNdWwzMiBVOkcsIFVEOkcKKyAgICBU
bXAsIFRtcAorICAgIEFkZHIsIFRtcAorCitNdWwzMiBVOkcsIFU6RywgRDpHCisgICAgSW1tLCBU
bXAsIFRtcAorCitNdWw2NCBVOkcsIFVEOkcKKyAgICBUbXAsIFRtcAorCiBMZWEgVUE6RywgRDpH
CiAgICAgQWRkciwgVG1wCiAKQEAgLTE1NywxMCArMTY3LDYgQEAgWG9yNjQgVTpHLCBVRDpHCiAg
ICAgVG1wLCBBZGRyCiAgICAgSW1tLCBUbXAKIAotTXVsMzIgVTpHLCBVRDpHCi0gICAgVG1wLCBU
bXAKLSAgICBBZGRyLCBUbXAKLQogIyBOb3RlIHRoYXQgTW92ZSBvcGVyYXRlcyBvdmVyIHRoZSBm
dWxsIHJlZ2lzdGVyIHNpemUsIHdoaWNoIGlzIGVpdGhlciAzMi1iaXQgb3IgNjQtYml0IGRlcGVu
ZGluZyBvbgogIyB0aGUgcGxhdGZvcm0uIEknbSBub3QgZW50aXJlbHkgc3VyZSB0aGF0IHRoaXMg
aXMgYSBnb29kIHRoaW5nOyBpdCBtaWdodCBiZSBiZXR0ZXIgdG8ganVzdCBoYXZlIGEKICMgTW92
ZTY0IGluc3RydWN0aW9uLiBPVE9ILCBvdXIgTWFjcm9Bc3NlbWJsZXJzIGFscmVhZHkgaGF2ZSB0
aGlzIG5vdGlvbiBvZiAibW92ZSgpIiB0aGF0IGJhc2ljYWxseQo=
</data>
<flag name="review"
          id="290328"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>