<?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>9950</bug_id>
          
          <creation_ts>2006-07-16 04:54:38 -0700</creation_ts>
          <short_desc>property name array changes</short_desc>
          <delta_ts>2006-07-16 21:44:46 -0700</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>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Maciej Stachowiak">mjs</reporter>
          <assigned_to name="Maciej Stachowiak">mjs</assigned_to>
          <cc>eric</cc>
    
    <cc>jesse</cc>
    
    <cc>ytpete</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>50024</commentid>
    <comment_count>0</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2006-07-16 04:54:38 -0700</bug_when>
    <thetext>A bunch of changes to JavaScriptCore to remove the Reference type, simplify and clean up public API for property names, and avoid duplicate property names.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>50025</commentid>
    <comment_count>1</comment_count>
      <attachid>9483</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2006-07-16 04:55:15 -0700</bug_when>
    <thetext>Created attachment 9483
JS property name fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>50026</commentid>
    <comment_count>2</comment_count>
      <attachid>9483</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-07-16 05:09:04 -0700</bug_when>
    <thetext>Comment on attachment 9483
JS property name fixes

+        PropertyNameArray() {}

This line of code is not needed.

+        void deallocateVector();

This declaration is not needed.

+        typedef HashSet&lt;UString::Impl*, PtrHash&lt;UString::Impl*&gt; &gt; IdentifierSet;

Why do you specify PtrHash explicitly? Isn&apos;t that the default?

+    virtual void getPropertyNames(ExecState *exec, PropertyNameArray&amp; propertyNames);

I&apos;d write the above as:

    virtual void getPropertyNames(ExecState*, PropertyNameArray&amp;);

I can tell that you want to renaming UString::Rep to UString::Impl -- we should do that! Not sure why you wanted to create the synonym just for this patch though.

+&quot;This tests that for/in statements don&apos;t report properties that are in both an object ant its prototype more than once.&quot;

Lets say &quot;and&quot; rather than &quot;ant&quot; here.

+ *  Copyright (C) 2005 Apple Computer, Inc

Should be 2006.

+#ifndef KJS_IDENTIFIER_SEQUENCED_SET_H

Since you chose to call this PropertyNameArray, I recommend making the header guard say that too.

I think JSPropertyNameArray is a fine name for the API. But internally, maybe this should be JSPropertyNameVector. I know it&apos;s a dual vector/set, but it can also be thought of as a vector with a special &quot;add&quot; operation. The use of array in the API is really just to be consistent with CFArray, and our C++ equivalent of CFArray is Vector.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>50095</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-07-16 17:14:23 -0700</bug_when>
    <thetext>Maciej landed this as r15468.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>50130</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-07-16 21:44:23 -0700</bug_when>
    <thetext>*** Bug 6639 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>50132</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-07-16 21:44:32 -0700</bug_when>
    <thetext>*** Bug 8742 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>50134</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-07-16 21:44:46 -0700</bug_when>
    <thetext>*** Bug 7543 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>9483</attachid>
            <date>2006-07-16 04:55:15 -0700</date>
            <delta_ts>2006-07-16 05:09:04 -0700</delta_ts>
            <desc>JS property name fixes</desc>
            <filename>js-property-name-array.patch.txt</filename>
            <type>text/plain</type>
            <size>82597</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NDYxKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODAgQEAKKzIwMDYtMDctMTUgIE1hY2llaiBT
dGFjaG93aWFrICA8bWpzQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIC0gc3dpdGNoIHByb3BlcnR5IGxpc3RzIHRvIGJl
IHZlY3RvcitzZXQgb2YgaWRlbnRpZmllcnMgaW5zdGVhZCBvZiBsaXN0IG9mIFJlZmVyZW5jZXMK
KyAgICAgICAgCisgICAgICAgIFRoaXMgaGFzIHRoZSBmb2xsb3dpbmcgYmVuZWZpdHM6CisgICAg
ICAgIAorICAgICAgICAtIG5vIGR1cGxpY2F0ZXMgaW4gcHJvcGVydHkgbGlzdHMKKyAgICAgICAg
LSBzaW1wbGlmaWVzIEFQSSBjYWxscworICAgICAgICAtIHByb2JhYmx5IG1vcmUgZWZmaWNpZW50
LCBzaW5jZSBsaW5rZWQgbGlzdCBpcyBnb25lCisgICAgICAgIC0gZW50aXJlbHkgcmVtb3ZlZCBS
ZWZlcmVuY2UsIFJlZmVyZW5jZUxpc3QgYW5kIFByb3RlY3RlZFJlZmVyZW5jZSB0eXBlcyBmcm9t
IHRoZSBBUEkKKworICAgICAgICAqIGtqcy9Qcm9wZXJ0eU5hbWVBcnJheS5jcHA6IEFkZGVkLgor
ICAgICAgICAoS0pTOjpQcm9wZXJ0eU5hbWVBcnJheTo6YWRkKTogQ2hlY2sgc2V0LCBpZiBub3Qg
YWxyZWFkeSB0aGVyZSwgYWRkIHRvCisgICAgICAgIHZlY3Rvci4KKyAgICAgICAgKiBranMvUHJv
cGVydHlOYW1lQXJyYXkuaDogQWRkZWQuCisgICAgICAgIChLSlM6OlByb3BlcnR5TmFtZUFycmF5
OjpQcm9wZXJ0eU5hbWVBcnJheSk6IE5ld2x5IGFkZGVkIHR5cGUsIGNvbWJpbmVzCisgICAgICAg
IGEgc2V0IGFuZCBhIHZlY3RvciB0byBtYWtlIGEgdW5pcXVlIGJ1dCBvcmRlcmVkIGxpc3Qgb2Yg
aWRlbnRpZmllcnMuCisgICAgICAgIChLSlM6OlByb3BlcnR5TmFtZUFycmF5OjpiZWdpbik6IGRp
dHRvCisgICAgICAgIChLSlM6OlByb3BlcnR5TmFtZUFycmF5OjplbmQpOiBkaXR0bworICAgICAg
ICAoS0pTOjpQcm9wZXJ0eU5hbWVBcnJheTo6c2l6ZSk6IGRpdHRvCisgICAgICAgIChLSlM6OlBy
b3BlcnR5TmFtZUFycmF5OjpvcGVyYXRvcltdKTogZGl0dG8KKyAgICAgICAgKiBranMvYXJyYXlf
aW5zdGFuY2UuaDoKKyAgICAgICAgKiBranMvYXJyYXlfb2JqZWN0LmNwcDoKKyAgICAgICAgKEFy
cmF5SW5zdGFuY2U6OmdldFByb3BlcnR5TmFtZXMpOiByZW5hbWVkIGZyb20gZ2V0UHJvcGVydHlM
aXN0LCB1cGRhdGVkCisgICAgICAgIGZvciBQcm9wZXJ0eU5hbWVBcnJheQorICAgICAgICAoQXJy
YXlJbnN0YW5jZTo6c2V0TGVuZ3RoKTogdXBkYXRlZCBmb3IgUHJvcGVydHlOYW1lQXJyYXkKKyAg
ICAgICAgKEFycmF5SW5zdGFuY2U6OnB1c2hVbmRlZmluZWRPYmplY3RzVG9FbmQpOiBkaXR0bwor
ICAgICAgICAqIGtqcy9ub2Rlcy5jcHA6CisgICAgICAgIChGb3JJbk5vZGU6OmV4ZWN1dGUpOiB1
cGRhdGVkIGZvciBQcm9wZXJ0eU5hbWVBcnJheQorICAgICAgICAqIGtqcy9ub2Rlcy5oOgorICAg
ICAgICAqIGtqcy9vYmplY3QuY3BwOgorICAgICAgICAoS0pTOjpKU09iamVjdDo6Z2V0UHJvcGVy
dHlOYW1lcyk6IHJlbmFtZWQgZnJvbSBnZXRQcm9wZXJ0eUxpc3QsIHVwZGF0ZWQKKyAgICAgICAg
Zm9yIFByb3BlcnR5TmFtZUFycmF5CisgICAgICAgICoga2pzL29iamVjdC5oOgorICAgICAgICAq
IGtqcy9wcm9wZXJ0eV9tYXAuY3BwOgorICAgICAgICAoS0pTOjpQcm9wZXJ0eU1hcDo6Z2V0RW51
bWVyYWJsZVByb3BlcnR5TmFtZXMpOiB1cGRhdGVkIGZvciBQcm9wZXJ0eU5hbWVBcnJheQorICAg
ICAgICAoS0pTOjpQcm9wZXJ0eU1hcDo6Z2V0U3BhcnNlQXJyYXlQcm9wZXJ0eU5hbWVzKTogZGl0
dG8KKyAgICAgICAgKiBranMvcHJvcGVydHlfbWFwLmg6CisgICAgICAgICoga2pzL3Byb3RlY3Rl
ZF9yZWZlcmVuY2UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBranMvcmVmZXJlbmNlLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBranMvcmVmZXJlbmNlLmg6IFJlbW92ZWQuCisgICAgICAgICoga2pz
L3JlZmVyZW5jZV9saXN0LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBranMvcmVmZXJlbmNlX2xp
c3QuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBranMvc2NvcGVfY2hhaW4uY3BwOgorICAgICAgICAo
S0pTOjpTY29wZUNoYWluOjpwcmludCk6IFVzZSBQcm9wZXJ0eU5hbWVzQXJyYXkgaW5zdGVhZCBv
ZiBSZWZlcmVuY2VMaXN0LgorICAgICAgICAqIGtqcy9zdHJpbmdfb2JqZWN0LmNwcDoKKyAgICAg
ICAgKFN0cmluZ0luc3RhbmNlOjpnZXRQcm9wZXJ0eU5hbWVzKTogVXBkYXRlZCBmb3IgbmV3IGFw
cHJvYWNoLgorICAgICAgICAqIGtqcy9zdHJpbmdfb2JqZWN0Lmg6CisgICAgICAgICoga2pzL3Vz
dHJpbmcuaDoKKyAgICAgICAgKiBBUEkvQVBJQ2FzdC5oOgorICAgICAgICAodG9KUyk6IEFkZGVk
IG92ZXJsb2FkIGZvciBQcm9wZXJ0eU5hbWVBY2N1bXVsYXRvclJlZiAvIFByb3BlcnR5TmFtZUFy
cmF5KgorICAgICAgICAodG9SZWYpOiBkaXR0bworICAgICAgICAqIEFQSS9KU0Jhc2UuaDoKKyAg
ICAgICAgKiBBUEkvSlNDYWxsYmFja09iamVjdC5jcHA6CisgICAgICAgIChLSlM6OkpTQ2FsbGJh
Y2tPYmplY3Q6OmdldFByb3BlcnR5TmFtZXMpOiBGaXhlZCBmb3IgbmV3IEFQSS4KKyAgICAgICAg
KiBBUEkvSlNDYWxsYmFja09iamVjdC5oOgorICAgICAgICAqIEFQSS9KU09iamVjdFJlZi5jcHA6
CisgICAgICAgIChfX0pTUHJvcGVydHlOYW1lQXJyYXk6Ol9fSlNQcm9wZXJ0eU5hbWVBcnJheSk6
IFR5cGUgdXNlZCBmb3IgYSBwdWJsaWNseSB2ZW5kZWQKKyAgICAgICAgSlNQcm9wZXJ0eU5hbWVB
cnJheVJlZi4KKyAgICAgICAgKEpTT2JqZWN0Q29weVByb3BlcnR5TmFtZXMpOiBOZXcgQVBJIGNh
bGwgLSByZW5hbWVkIC8gcmVmYWN0b3JlZCBmcm9tIAorICAgICAgICBKU09iamVjdENyZWF0ZVBy
b3BlcnR5TGlzdAorICAgICAgICAoSlNQcm9wZXJ0eU5hbWVBcnJheVJldGFpbik6IG5ldyByZXRh
aW4gY2FsbCBmb3IgSlNQcm9wZXJ0eU5hbWVBcnJheS4KKyAgICAgICAgKEpTUHJvcGVydHlOYW1l
QXJyYXlSZWxlYXNlKTogbmV3IHJlbGVhc2UgY2FsbCBmb3IgLSAiIC0uCisgICAgICAgIChKU1By
b3BlcnR5TmFtZUFycmF5R2V0Q291bnQpOiBJbnN0ZWFkIG9mIGhhdmluZyB0byB1c2UgYSBzdGF0
ZWZ1bCBlbnVtZXJhdG9yIHlvdQorICAgICAgICBjYW4gbm93IGdldCB0aGUgY291bnQgYW5kIGl0
ZW1zIGluIGFueSBvcmRlci4KKyAgICAgICAgKEpTUHJvcGVydHlOYW1lQXJyYXlHZXROYW1lQXRJ
bmRleCk6IFNlZSBhYm92ZS4KKyAgICAgICAgKEpTUHJvcGVydHlOYW1lQWNjdW11bGF0b3JBZGRO
YW1lKTogV2hhdCB5b3UgYWRkIHByb3BlcnRpZXMgdG8gaXMgbm93IGFuIG9wYXF1ZSAKKyAgICAg
ICAgYWNjdW11bGF0b3Igb2JqZWN0LgorICAgICAgICAqIEFQSS9KU09iamVjdFJlZi5oOiBQcm90
b3R5cGVkIG5ldyBmdW5jdGlvbnMsIHJlbW92ZWQgb2xkIG9uZXMKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS5leHA6IFVwZGF0ZWQgZXhwb3J0ZWQgc3ltYm9scy4KKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBBZGRlZCBuZXcgZmlsZXMsIHJlbW92
ZWQgb2xkLgorICAgICAgICAqIEFQSS90ZXN0YXBpLmM6CisgICAgICAgIChNeU9iamVjdF9nZXRQ
cm9wZXJ0eU5hbWVzKTogUmVuYW1lZCAvIGZpeGVkIGNhbGxiYWNrIHRvIGZpdCBuZXcgcGFyYWRp
Z20uCisgICAgICAgIChtYWluKTogVXBkYXRlZCBmb3IgbmV3IEFQSS4KKwogMjAwNi0wNy0xNSAg
RGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR2Vv
ZmYuCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCShyZXZpc2lvbiAxNTQ2MSkKKysr
IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAkod29ya2luZyBjb3B5KQpAQCAtMTMs
MTAgKzEzLDExIEBAIF9KU0dsb2JhbENvbnRleHRSZWxlYXNlCiBfSlNHbG9iYWxDb250ZXh0UmV0
YWluCiBfSlNPYmplY3RDYWxsQXNDb25zdHJ1Y3RvcgogX0pTT2JqZWN0Q2FsbEFzRnVuY3Rpb24K
LV9KU09iamVjdENyZWF0ZVByb3BlcnR5RW51bWVyYXRvcgorX0pTT2JqZWN0Q29weVByb3BlcnR5
TmFtZXMKIF9KU09iamVjdERlbGV0ZVByb3BlcnR5CiBfSlNPYmplY3RHZXRQcml2YXRlCiBfSlNP
YmplY3RHZXRQcm9wZXJ0eQorX0pTT2JqZWN0R2V0UHJvcGVydHlBdEluZGV4CiBfSlNPYmplY3RH
ZXRQcm90b3R5cGUKIF9KU09iamVjdEhhc1Byb3BlcnR5CiBfSlNPYmplY3RJc0NvbnN0cnVjdG9y
CkBAIC0yNywxMSArMjgsMTMgQEAgX0pTT2JqZWN0TWFrZUZ1bmN0aW9uCiBfSlNPYmplY3RNYWtl
RnVuY3Rpb25XaXRoQm9keQogX0pTT2JqZWN0U2V0UHJpdmF0ZQogX0pTT2JqZWN0U2V0UHJvcGVy
dHkKK19KU09iamVjdFNldFByb3BlcnR5QXRJbmRleAogX0pTT2JqZWN0U2V0UHJvdG90eXBlCi1f
SlNQcm9wZXJ0eUVudW1lcmF0b3JHZXROZXh0TmFtZQotX0pTUHJvcGVydHlFbnVtZXJhdG9yUmVs
ZWFzZQotX0pTUHJvcGVydHlFbnVtZXJhdG9yUmV0YWluCi1fSlNQcm9wZXJ0eUxpc3RBZGQKK19K
U1Byb3BlcnR5TmFtZUFjY3VtdWxhdG9yQWRkTmFtZQorX0pTUHJvcGVydHlOYW1lQXJyYXlHZXRD
b3VudAorX0pTUHJvcGVydHlOYW1lQXJyYXlHZXROYW1lQXRJbmRleAorX0pTUHJvcGVydHlOYW1l
QXJyYXlSZWxlYXNlCitfSlNQcm9wZXJ0eU5hbWVBcnJheVJldGFpbgogX0pTU3RyaW5nQ29weUNG
U3RyaW5nCiBfSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcKIF9KU1N0cmluZ0NyZWF0ZVdpdGhD
aGFyYWN0ZXJzCkBAIC0xMzgsMjAgKzE0MSwxNyBAQCBfX1pOM0tKUzExUHJvcGVydHlNYXBEMUV2
CiBfX1pOM0tKUzEyRGF0ZUluc3RhbmNlNGluZm9FCiBfX1pOM0tKUzEyUHJvcGVydHlTbG90MTV1
bmRlZmluZWRHZXR0ZXJFUE5TXzlFeGVjU3RhdGVFUE5TXzhKU09iamVjdEVSS05TXzEwSWRlbnRp
ZmllckVSS1MwXwogX19aTjNLSlMxMmpzTnVtYmVyQ2VsbEVkCi1fX1pOM0tKUzEzUmVmZXJlbmNl
TGlzdDZhcHBlbmRFUktOU185UmVmZXJlbmNlRQotX19aTjNLSlMxM1JlZmVyZW5jZUxpc3RDMUV2
Ci1fX1pOM0tKUzEzUmVmZXJlbmNlTGlzdEQxRXYKIF9fWk4zS0pTMTNTYXZlZEJ1aWx0aW5zQzFF
dgogX19aTjNLSlMxM1NhdmVkQnVpbHRpbnNEMUV2CiBfX1pOM0tKUzE1U2F2ZWRQcm9wZXJ0aWVz
QzFFdgogX19aTjNLSlMxNVNhdmVkUHJvcGVydGllc0QxRXYKIF9fWk4zS0pTMTZSdW50aW1lT2Jq
ZWN0SW1wQzFFUE5TXzhCaW5kaW5nczhJbnN0YW5jZUUKK19fWk4zS0pTMTdQcm9wZXJ0eU5hbWVB
cnJheTNhZGRFUktOU18xMElkZW50aWZpZXJFCiBfX1pOM0tKUzE4bGVuZ3RoUHJvcGVydHlOYW1l
RQogX19aTjNLSlMxOUludGVybmFsRnVuY3Rpb25JbXAxMWhhc0luc3RhbmNlRVBOU185RXhlY1N0
YXRlRVBOU183SlNWYWx1ZUUKIF9fWk4zS0pTMTlJbnRlcm5hbEZ1bmN0aW9uSW1wNGluZm9FCiBf
X1pOM0tKUzE5SW50ZXJuYWxGdW5jdGlvbkltcEMyRVBOU18xN0Z1bmN0aW9uUHJvdG90eXBlRVJL
TlNfMTBJZGVudGlmaWVyRQogX19aTjNLSlMxOW1lc3NhZ2VQcm9wZXJ0eU5hbWVFCi1fX1pOM0tK
UzIxUmVmZXJlbmNlTGlzdEl0ZXJhdG9ycHBFaQogX19aTjNLSlMyMXByb3RvdHlwZVByb3BlcnR5
TmFtZUUKIF9fWk4zS0pTNExpc3Q2YXBwZW5kRVBOU183SlNWYWx1ZUUKIF9fWk4zS0pTNExpc3Q3
cmVsZWFzZUV2CkBAIC0xODYsNyArMTg2LDcgQEAgX19aTjNLSlM4SlNPYmplY3QxMWhhc0luc3Rh
bmNlRVBOU185RXhlYwogX19aTjNLSlM4SlNPYmplY3QxNGNhbGxBc0Z1bmN0aW9uRVBOU185RXhl
Y1N0YXRlRVBTMF9SS05TXzRMaXN0RQogX19aTjNLSlM4SlNPYmplY3QxNGRlbGV0ZVByb3BlcnR5
RVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRQogX19aTjNLSlM4SlNPYmplY3QxNGRl
bGV0ZVByb3BlcnR5RVBOU185RXhlY1N0YXRlRWoKLV9fWk4zS0pTOEpTT2JqZWN0MTVnZXRQcm9w
ZXJ0eUxpc3RFUk5TXzEzUmVmZXJlbmNlTGlzdEViCitfX1pOM0tKUzhKU09iamVjdDE2Z2V0UHJv
cGVydHlOYW1lc0VQTlNfOUV4ZWNTdGF0ZUVSTlNfMTdQcm9wZXJ0eU5hbWVBcnJheUUKIF9fWk4z
S0pTOEpTT2JqZWN0MThnZXRPd25Qcm9wZXJ0eVNsb3RFUE5TXzlFeGVjU3RhdGVFalJOU18xMlBy
b3BlcnR5U2xvdEUKIF9fWk4zS0pTOEpTT2JqZWN0MjJmaWxsR2V0dGVyUHJvcGVydHlTbG90RVJO
U18xMlByb3BlcnR5U2xvdEVQUE5TXzdKU1ZhbHVlRQogX19aTjNLSlM4SlNPYmplY3QzcHV0RVBO
U185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRVBOU183SlNWYWx1ZUVpCkBAIC0yMDYsNyAr
MjA2LDYgQEAgX19aTjNLSlM5Q29sbGVjdG9yNHNpemVFdgogX19aTjNLSlM5Q29sbGVjdG9yN2Nv
bGxlY3RFdgogX19aTjNLSlM5Q29sbGVjdG9yN3Byb3RlY3RFUE5TXzdKU1ZhbHVlRQogX19aTjNL
SlM5Q29sbGVjdG9yOXVucHJvdGVjdEVQTlNfN0pTVmFsdWVFCi1fX1pOM0tKUzlSZWZlcmVuY2VD
MUVQTlNfOEpTT2JqZWN0RVJLTlNfMTBJZGVudGlmaWVyRQogX19aTjNLSlNlcUVSS05TXzdVU3Ry
aW5nRVBLYwogX19aTjNXVEYxMGZhc3RDYWxsb2NFbW0KIF9fWk4zV1RGMTBmYXN0TWFsbG9jRW0K
QEAgLTIyMSwxMiArMjIwLDggQEAgX19aTkszS0pTMTFJbnRlcnByZXRlcjI0YnVpbHRpbkZ1bmN0
aW9uUAogX19aTkszS0pTMTFQcm9wZXJ0eU1hcDNnZXRFUktOU18xMElkZW50aWZpZXJFCiBfX1pO
SzNLSlMxMVByb3BlcnR5TWFwNHNhdmVFUk5TXzE1U2F2ZWRQcm9wZXJ0aWVzRQogX19aTkszS0pT
MTJEYXRlSW5zdGFuY2U3Z2V0VGltZUVSZFJpCi1fX1pOSzNLSlMxM1JlZmVyZW5jZUxpc3QzZW5k
RXYKLV9fWk5LM0tKUzEzUmVmZXJlbmNlTGlzdDViZWdpbkV2CiBfX1pOSzNLSlMxOUludGVybmFs
RnVuY3Rpb25JbXAxNGltcGxlbWVudHNDYWxsRXYKIF9fWk5LM0tKUzE5SW50ZXJuYWxGdW5jdGlv
bkltcDIxaW1wbGVtZW50c0hhc0luc3RhbmNlRXYKLV9fWk5LM0tKUzIxUmVmZXJlbmNlTGlzdEl0
ZXJhdG9ybmVFUktTMF8KLV9fWk5LM0tKUzIxUmVmZXJlbmNlTGlzdEl0ZXJhdG9ycHRFdgogX19a
TkszS0pTNExpc3QyYXRFaQogX19aTkszS0pTNExpc3Q4Y29weVRhaWxFdgogX19aTkszS0pTNkpT
Q2VsbDlnZXROdW1iZXJFUmQKQEAgLTI1Nyw3ICsyNTIsNiBAQCBfX1pOSzNLSlM4SlNPYmplY3Q5
Y2xhc3NJbmZvRXYKIF9fWk5LM0tKUzhKU09iamVjdDljbGFzc05hbWVFdgogX19aTkszS0pTOEpT
T2JqZWN0OXRvQm9vbGVhbkVQTlNfOUV4ZWNTdGF0ZUUKIF9fWk5LM0tKUzlFeGVjU3RhdGUxOGxl
eGljYWxJbnRlcnByZXRlckV2Ci1fX1pOSzNLSlM5UmVmZXJlbmNlMTVnZXRQcm9wZXJ0eU5hbWVF
dgogX19aVFZOM0tKUzE5SW50ZXJuYWxGdW5jdGlvbkltcEUKIF9fWlRWTjNLSlM4SlNPYmplY3RF
CiBfa0pTT2JqZWN0Q2FsbGJhY2tzTm9uZQpJbmRleDogSmF2YVNjcmlwdENvcmUvQVBJL0FQSUNh
c3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9BUEkvQVBJQ2FzdC5oCShyZXZpc2lv
biAxNTQ2MSkKKysrIEphdmFTY3JpcHRDb3JlL0FQSS9BUElDYXN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgY2xhc3MgRXhlY1N0YXRlOwog
ICAgIGNsYXNzIEpTVmFsdWU7CiAgICAgY2xhc3MgSlNPYmplY3Q7Ci0gICAgY2xhc3MgUmVmZXJl
bmNlTGlzdDsKKyAgICBjbGFzcyBQcm9wZXJ0eU5hbWVBcnJheTsKIH0KIAogLyogT3BhcXVlIHR5
cGluZyBjb252ZW5pZW5jZSBtZXRob2RzICovCkBAIC02NCw5ICs2NCw5IEBAIGlubGluZSBLSlM6
OkpTT2JqZWN0KiB0b0pTKEpTT2JqZWN0UmVmIG8KICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxLSlM6OkpTT2JqZWN0Kj4obyk7CiB9CiAKLWlubGluZSBLSlM6OlJlZmVyZW5jZUxpc3QqIHRv
SlMoSlNQcm9wZXJ0eUxpc3RSZWYgbCkKK2lubGluZSBLSlM6OlByb3BlcnR5TmFtZUFycmF5KiB0
b0pTKEpTUHJvcGVydHlOYW1lQWNjdW11bGF0b3JSZWYgYSkKIHsKLSAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxLSlM6OlJlZmVyZW5jZUxpc3QqPihsKTsKKyAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxLSlM6OlByb3BlcnR5TmFtZUFycmF5Kj4oYSk7CiB9CiAKIGlubGluZSBKU1ZhbHVl
UmVmIHRvUmVmKEtKUzo6SlNWYWx1ZSogdikKQEAgLTk0LDE0ICs5NCwxNCBAQCBpbmxpbmUgSlNP
YmplY3RSZWYgdG9SZWYoY29uc3QgS0pTOjpKU09iCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8SlNPYmplY3RSZWY+KGNvbnN0X2Nhc3Q8S0pTOjpKU09iamVjdCo+KG8pKTsKIH0KIAotaW5s
aW5lIEpTUHJvcGVydHlMaXN0UmVmIHRvUmVmKEtKUzo6UmVmZXJlbmNlTGlzdCogbCkKK2lubGlu
ZSBKU0NvbnRleHRSZWYgdG9SZWYoS0pTOjpFeGVjU3RhdGUqIGUpCiB7Ci0gICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8SlNQcm9wZXJ0eUxpc3RSZWY+KGwpOworICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PEpTQ29udGV4dFJlZj4oZSk7CiB9CiAKLWlubGluZSBKU0NvbnRleHRSZWYgdG9S
ZWYoS0pTOjpFeGVjU3RhdGUqIGUpCitpbmxpbmUgSlNQcm9wZXJ0eU5hbWVBY2N1bXVsYXRvclJl
ZiB0b1JlZihLSlM6OlByb3BlcnR5TmFtZUFycmF5KiBsKQogewotICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PEpTQ29udGV4dFJlZj4oZSk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
SlNQcm9wZXJ0eU5hbWVBY2N1bXVsYXRvclJlZj4obCk7CiB9CiAKICNlbmRpZiAvLyBBUElDYXN0
X2gKSW5kZXg6IEphdmFTY3JpcHRDb3JlL0FQSS9KU0Jhc2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZh
U2NyaXB0Q29yZS9BUEkvSlNCYXNlLmgJKHJldmlzaW9uIDE1NDYxKQorKysgSmF2YVNjcmlwdENv
cmUvQVBJL0pTQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MywxMSArNDMsMTEgQEAgdHlwZWRl
ZiBzdHJ1Y3QgX19KU1N0cmluZyogSlNTdHJpbmdSZWY7CiAvKiEgQHR5cGVkZWYgSlNDbGFzc1Jl
ZiBBIEphdmFTY3JpcHQgY2xhc3MuIFVzZWQgd2l0aCBKU09iamVjdE1ha2UgdG8gY29uc3RydWN0
IG9iamVjdHMgd2l0aCBjdXN0b20gYmVoYXZpb3IuICovCiB0eXBlZGVmIHN0cnVjdCBfX0pTQ2xh
c3MqIEpTQ2xhc3NSZWY7CiAKLS8qISBAdHlwZWRlZiBKU1Byb3BlcnR5TGlzdFJlZiBBIEphdmFT
Y3JpcHQgcHJvcGVydHkgbGlzdC4gVXNlZCBmb3IgbGlzdGluZyB0aGUgcHJvcGVydGllcyBpbiBh
biBvYmplY3Qgc28gdGhleSBjYW4gYmUgZW51bWVyYXRlZC4gKi8KLXR5cGVkZWYgc3RydWN0IF9f
SlNQcm9wZXJ0eUxpc3QqIEpTUHJvcGVydHlMaXN0UmVmOworLyohIEB0eXBlZGVmIEpTUHJvcGVy
dHlOYW1lQXJyYXlSZWYgQW4gYXJyYXkgb2YgSmF2YVNjcmlwdCBwcm9wZXJ0eSBuYW1lcy4gKi8K
K3R5cGVkZWYgc3RydWN0IF9fSlNQcm9wZXJ0eU5hbWVBcnJheSogSlNQcm9wZXJ0eU5hbWVBcnJh
eVJlZjsKIAotLyohIEB0eXBlZGVmIEpTUHJvcGVydHlFbnVtZXJhdG9yUmVmIEEgSmF2YVNjcmlw
dCBwcm9wZXJ0eSBlbnVtZXJhdG9yLiBVc2VkIGZvciBlbnVtZXJhdGluZyB0aGUgcHJvcGVydGll
cyBpbiBhbiBvYmplY3QuICovCi10eXBlZGVmIHN0cnVjdCBfX0pTUHJvcGVydHlFbnVtZXJhdG9y
KiBKU1Byb3BlcnR5RW51bWVyYXRvclJlZjsKKy8qISBAdHlwZWRlZiBKU1Byb3BlcnR5TmFtZUFj
Y3VtdWxhdG9yUmVmIEFuIG9iamVjdCB0aGF0IGNvbGxlY3RzIGFuIG9iamVjdCdzIEphdmFTY3Jp
cHQgcHJvcGVydHkgbmFtZXMuICovCit0eXBlZGVmIHN0cnVjdCBfX0pTUHJvcGVydHlOYW1lQWNj
dW11bGF0b3IqIEpTUHJvcGVydHlOYW1lQWNjdW11bGF0b3JSZWY7CiAKIAogLyogSmF2YVNjcmlw
dCBkYXRhIHR5cGVzICovCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3Qu
Y3BwCShyZXZpc2lvbiAxNTQ2MSkKKysrIEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsOCArMzAsNyBAQAogI2luY2x1ZGUgIkpTQ2xh
c3NSZWYuaCIKICNpbmNsdWRlICJKU09iamVjdFJlZi5oIgogI2luY2x1ZGUgImludGVybmFsLmgi
Ci0jaW5jbHVkZSAicmVmZXJlbmNlLmgiCi0jaW5jbHVkZSAicmVmZXJlbmNlX2xpc3QuaCIKKyNp
bmNsdWRlICJQcm9wZXJ0eU5hbWVBcnJheS5oIgogCiBuYW1lc3BhY2UgS0pTIHsKIApAQCAtMjg3
LDEzICsyODYsMTQgQEAgSlNWYWx1ZSogSlNDYWxsYmFja09iamVjdDo6Y2FsbEFzRnVuY3Rpbwog
ICAgIHJldHVybiAwOwogfQogCi12b2lkIEpTQ2FsbGJhY2tPYmplY3Q6OmdldFByb3BlcnR5TGlz
dChSZWZlcmVuY2VMaXN0JiBwcm9wZXJ0eUxpc3QsIGJvb2wgcmVjdXJzaXZlKQordm9pZCBKU0Nh
bGxiYWNrT2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVzKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lQXJyYXkmIHByb3BlcnR5TmFtZXMpCiB7CisgICAgSlNDb250ZXh0UmVmIGV4ZWNSZWYgPSB0
b1JlZihleGVjKTsKICAgICBKU09iamVjdFJlZiB0aGlzUmVmID0gdG9SZWYodGhpcyk7CiAKICAg
ICBmb3IgKEpTQ2xhc3NSZWYganNDbGFzcyA9IG1fY2xhc3M7IGpzQ2xhc3M7IGpzQ2xhc3MgPSBq
c0NsYXNzLT5wYXJlbnQpIHsKLSAgICAgICAgaWYgKEpTT2JqZWN0QWRkUHJvcGVydGllc1RvTGlz
dENhbGxiYWNrIGFkZFByb3BlcnRpZXNUb0xpc3QgPSBqc0NsYXNzLT5jYWxsYmFja3MuYWRkUHJv
cGVydGllc1RvTGlzdCkKLSAgICAgICAgICAgIGFkZFByb3BlcnRpZXNUb0xpc3QodGhpc1JlZiwg
dG9SZWYoJnByb3BlcnR5TGlzdCkpOworICAgICAgICBpZiAoSlNPYmplY3RHZXRQcm9wZXJ0eU5h
bWVzQ2FsbGJhY2sgZ2V0UHJvcGVydHlOYW1lcyA9IGpzQ2xhc3MtPmNhbGxiYWNrcy5nZXRQcm9w
ZXJ0eU5hbWVzKQorICAgICAgICAgICAgZ2V0UHJvcGVydHlOYW1lcyhleGVjUmVmLCB0aGlzUmVm
LCB0b1JlZigmcHJvcGVydHlOYW1lcykpOwogCiAgICAgICAgIGlmIChfX0pTQ2xhc3M6OlN0YXRp
Y1ZhbHVlc1RhYmxlKiBzdGF0aWNWYWx1ZXMgPSBqc0NsYXNzLT5zdGF0aWNWYWx1ZXMpIHsKICAg
ICAgICAgICAgIHR5cGVkZWYgX19KU0NsYXNzOjpTdGF0aWNWYWx1ZXNUYWJsZTo6Y29uc3RfaXRl
cmF0b3IgaXRlcmF0b3I7CkBAIC0zMDIsNyArMzAyLDcgQEAgdm9pZCBKU0NhbGxiYWNrT2JqZWN0
OjpnZXRQcm9wZXJ0eUxpc3QoUgogICAgICAgICAgICAgICAgIFVTdHJpbmc6OlJlcCogbmFtZSA9
IGl0LT5maXJzdC5nZXQoKTsKICAgICAgICAgICAgICAgICBTdGF0aWNWYWx1ZUVudHJ5KiBlbnRy
eSA9IGl0LT5zZWNvbmQ7CiAgICAgICAgICAgICAgICAgaWYgKGVudHJ5LT5nZXRQcm9wZXJ0eSAm
JiAhKGVudHJ5LT5hdHRyaWJ1dGVzICYga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RW51bSkpCi0g
ICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TGlzdC5hcHBlbmQoUmVmZXJlbmNlKHRoaXMsIElk
ZW50aWZpZXIobmFtZSkpKTsKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQo
SWRlbnRpZmllcihuYW1lKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtMzEzLDEy
ICszMTMsMTIgQEAgdm9pZCBKU0NhbGxiYWNrT2JqZWN0OjpnZXRQcm9wZXJ0eUxpc3QoUgogICAg
ICAgICAgICAgICAgIFVTdHJpbmc6OlJlcCogbmFtZSA9IGl0LT5maXJzdC5nZXQoKTsKICAgICAg
ICAgICAgICAgICBTdGF0aWNGdW5jdGlvbkVudHJ5KiBlbnRyeSA9IGl0LT5zZWNvbmQ7CiAgICAg
ICAgICAgICAgICAgaWYgKCEoZW50cnktPmF0dHJpYnV0ZXMgJiBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZURvbnRFbnVtKSkKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlMaXN0LmFwcGVuZChSZWZl
cmVuY2UodGhpcywgSWRlbnRpZmllcihuYW1lKSkpOworICAgICAgICAgICAgICAgICAgICBwcm9w
ZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKG5hbWUpKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgIH0KIAotICAgIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eUxpc3QocHJvcGVydHlMaXN0LCBy
ZWN1cnNpdmUpOworICAgIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVzKGV4ZWMsIHByb3BlcnR5
TmFtZXMpOwogfQogCiBkb3VibGUgSlNDYWxsYmFja09iamVjdDo6dG9OdW1iZXIoRXhlY1N0YXRl
KiBleGVjKSBjb25zdApJbmRleDogSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5oCShy
ZXZpc2lvbiAxNTQ2MSkKKysrIEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9v
bCBpbXBsZW1lbnRzQ2FsbCgpIGNvbnN0OwogICAgIHZpcnR1YWwgSlNWYWx1ZSogY2FsbEFzRnVu
Y3Rpb24oRXhlY1N0YXRlKiwgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpOwog
Ci0gICAgdmlydHVhbCB2b2lkIGdldFByb3BlcnR5TGlzdChSZWZlcmVuY2VMaXN0JiBwcm9wZXJ0
eUxpc3QsIGJvb2wgcmVjdXJzaXZlKTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0UHJvcGVydHlOYW1l
cyhFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYpOwogCiAgICAgdmlydHVhbCBkb3VibGUg
dG9OdW1iZXIoRXhlY1N0YXRlKikgY29uc3Q7CiAgICAgdmlydHVhbCBVU3RyaW5nIHRvU3RyaW5n
KEV4ZWNTdGF0ZSopIGNvbnN0OwpJbmRleDogSmF2YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0UmVm
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYuY3BwCShy
ZXZpc2lvbiAxNTQ2MSkKKysrIEphdmFTY3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAKICNpbmNsdWRlICJub2Rlcy5oIgogI2luY2x1
ZGUgImludGVybmFsLmgiCiAjaW5jbHVkZSAib2JqZWN0LmgiCi0jaW5jbHVkZSAicmVmZXJlbmNl
X2xpc3QuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eU5hbWVBcnJheS5oIgogCiB1c2luZyBuYW1lc3Bh
Y2UgS0pTOwogCkBAIC0yODcsNTggKzI4Nyw1NSBAQCBKU09iamVjdFJlZiBKU09iamVjdENhbGxB
c0NvbnN0cnVjdG9yKEpTCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RydWN0IF9fSlNQcm9w
ZXJ0eUVudW1lcmF0b3IKK3N0cnVjdCBfX0pTUHJvcGVydHlOYW1lQXJyYXkKIHsKLSAgICBfX0pT
UHJvcGVydHlFbnVtZXJhdG9yKCkgOiByZWZDb3VudCgwKSwgaXRlcmF0b3IobGlzdC5lbmQoKSkK
KyAgICBfX0pTUHJvcGVydHlOYW1lQXJyYXkoKSA6IHJlZkNvdW50KDApCiAgICAgewogICAgIH0K
ICAgICAKICAgICB1bnNpZ25lZCByZWZDb3VudDsKLSAgICBSZWZlcmVuY2VMaXN0IGxpc3Q7Ci0g
ICAgUmVmZXJlbmNlTGlzdEl0ZXJhdG9yIGl0ZXJhdG9yOworICAgIFByb3BlcnR5TmFtZUFycmF5
IGFycmF5OwogfTsKIAotSlNQcm9wZXJ0eUVudW1lcmF0b3JSZWYgSlNPYmplY3RDcmVhdGVQcm9w
ZXJ0eUVudW1lcmF0b3IoSlNPYmplY3RSZWYgb2JqZWN0KQorSlNQcm9wZXJ0eU5hbWVBcnJheVJl
ZiBKU09iamVjdENvcHlQcm9wZXJ0eU5hbWVzKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVj
dFJlZiBvYmplY3QpCiB7CiAgICAgSlNMb2NrIGxvY2s7CiAgICAgSlNPYmplY3QqIGpzT2JqZWN0
ID0gdG9KUyhvYmplY3QpOworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY29udGV4dCk7CiAg
ICAgCi0gICAgSlNQcm9wZXJ0eUVudW1lcmF0b3JSZWYgZW51bWVyYXRvciA9IG5ldyBfX0pTUHJv
cGVydHlFbnVtZXJhdG9yKCk7Ci0gICAganNPYmplY3QtPmdldFByb3BlcnR5TGlzdChlbnVtZXJh
dG9yLT5saXN0KTsKLSAgICBlbnVtZXJhdG9yLT5pdGVyYXRvciA9IGVudW1lcmF0b3ItPmxpc3Qu
YmVnaW4oKTsKKyAgICBKU1Byb3BlcnR5TmFtZUFycmF5UmVmIHByb3BlcnR5TmFtZXMgPSBuZXcg
X19KU1Byb3BlcnR5TmFtZUFycmF5KCk7CisgICAganNPYmplY3QtPmdldFByb3BlcnR5TmFtZXMo
ZXhlYywgcHJvcGVydHlOYW1lcy0+YXJyYXkpOwogICAgIAotICAgIHJldHVybiBKU1Byb3BlcnR5
RW51bWVyYXRvclJldGFpbihlbnVtZXJhdG9yKTsKKyAgICByZXR1cm4gSlNQcm9wZXJ0eU5hbWVB
cnJheVJldGFpbihwcm9wZXJ0eU5hbWVzKTsKIH0KIAotSlNTdHJpbmdSZWYgSlNQcm9wZXJ0eUVu
dW1lcmF0b3JHZXROZXh0TmFtZShKU1Byb3BlcnR5RW51bWVyYXRvclJlZiBlbnVtZXJhdG9yKQor
SlNQcm9wZXJ0eU5hbWVBcnJheVJlZiBKU1Byb3BlcnR5TmFtZUFycmF5UmV0YWluKEpTUHJvcGVy
dHlOYW1lQXJyYXlSZWYgYXJyYXkpCiB7Ci0gICAgUmVmZXJlbmNlTGlzdEl0ZXJhdG9yJiBpdGVy
YXRvciA9IGVudW1lcmF0b3ItPml0ZXJhdG9yOwotICAgIGlmIChpdGVyYXRvciAhPSBlbnVtZXJh
dG9yLT5saXN0LmVuZCgpKSB7Ci0gICAgICAgIEpTU3RyaW5nUmVmIHJlc3VsdCA9IHRvUmVmKGl0
ZXJhdG9yLT5nZXRQcm9wZXJ0eU5hbWUoKS51c3RyaW5nKCkucmVwKCkpOwotICAgICAgICBpdGVy
YXRvcisrOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICByZXR1cm4gMDsKKyAg
ICArK2FycmF5LT5yZWZDb3VudDsKKyAgICByZXR1cm4gYXJyYXk7Cit9CisKK3ZvaWQgSlNQcm9w
ZXJ0eU5hbWVBcnJheVJlbGVhc2UoSlNQcm9wZXJ0eU5hbWVBcnJheVJlZiBhcnJheSkKK3sKKyAg
ICBpZiAoLS1hcnJheS0+cmVmQ291bnQgPT0gMCkKKyAgICAgICAgZGVsZXRlIGFycmF5OwogfQog
Ci1KU1Byb3BlcnR5RW51bWVyYXRvclJlZiBKU1Byb3BlcnR5RW51bWVyYXRvclJldGFpbihKU1By
b3BlcnR5RW51bWVyYXRvclJlZiBlbnVtZXJhdG9yKQorc2l6ZV90IEpTUHJvcGVydHlOYW1lQXJy
YXlHZXRDb3VudChKU1Byb3BlcnR5TmFtZUFycmF5UmVmIGFycmF5KQogewotICAgICsrZW51bWVy
YXRvci0+cmVmQ291bnQ7Ci0gICAgcmV0dXJuIGVudW1lcmF0b3I7CisgICAgcmV0dXJuIGFycmF5
LT5hcnJheS5zaXplKCk7CiB9CiAKLXZvaWQgSlNQcm9wZXJ0eUVudW1lcmF0b3JSZWxlYXNlKEpT
UHJvcGVydHlFbnVtZXJhdG9yUmVmIGVudW1lcmF0b3IpCitKU1N0cmluZ1JlZiBKU1Byb3BlcnR5
TmFtZUFycmF5R2V0TmFtZUF0SW5kZXgoSlNQcm9wZXJ0eU5hbWVBcnJheVJlZiBhcnJheSwgc2l6
ZV90IGluZGV4KQogewotICAgIGlmICgtLWVudW1lcmF0b3ItPnJlZkNvdW50ID09IDApCi0gICAg
ICAgIGRlbGV0ZSBlbnVtZXJhdG9yOworICAgIHJldHVybiB0b1JlZihhcnJheS0+YXJyYXlbaW5k
ZXhdLnVzdHJpbmcoKS5yZXAoKSk7CiB9CiAKLXZvaWQgSlNQcm9wZXJ0eUxpc3RBZGQoSlNQcm9w
ZXJ0eUxpc3RSZWYgcHJvcGVydHlMaXN0LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBKU1N0cmlu
Z1JlZiBwcm9wZXJ0eU5hbWUpCit2b2lkIEpTUHJvcGVydHlOYW1lQWNjdW11bGF0b3JBZGROYW1l
KEpTUHJvcGVydHlOYW1lQWNjdW11bGF0b3JSZWYgYXJyYXksIEpTU3RyaW5nUmVmIHByb3BlcnR5
TmFtZSkKIHsKICAgICBKU0xvY2sgbG9jazsKLSAgICBSZWZlcmVuY2VMaXN0KiBqc1Byb3BlcnR5
TGlzdCA9IHRvSlMocHJvcGVydHlMaXN0KTsKLSAgICBKU09iamVjdCoganNPYmplY3QgPSB0b0pT
KHRoaXNPYmplY3QpOworICAgIFByb3BlcnR5TmFtZUFycmF5KiBwcm9wZXJ0eU5hbWVzID0gdG9K
UyhhcnJheSk7CiAgICAgVVN0cmluZzo6UmVwKiByZXAgPSB0b0pTKHByb3BlcnR5TmFtZSk7CiAg
ICAgCi0gICAganNQcm9wZXJ0eUxpc3QtPmFwcGVuZChSZWZlcmVuY2UoanNPYmplY3QsIElkZW50
aWZpZXIocmVwKSkpOworICAgIHByb3BlcnR5TmFtZXMtPmFkZChJZGVudGlmaWVyKHJlcCkpOwog
fQpJbmRleDogSmF2YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmLmgJKHJldmlzaW9uIDE1NDYxKQorKysgSmF2
YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1NCwyMCAr
MTU0LDI2IEBAIHR5cGVkZWYgYm9vbAogKCpKU09iamVjdERlbGV0ZVByb3BlcnR5Q2FsbGJhY2sp
IChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgb2JqZWN0LCBKU1N0cmluZ1JlZiBw
cm9wZXJ0eU5hbWUsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CiAKIC8qISAKLUB0eXBlZGVmIEpT
T2JqZWN0QWRkUHJvcGVydGllc1RvTGlzdENhbGxiYWNrCi1AYWJzdHJhY3QgVGhlIGNhbGxiYWNr
IGludm9rZWQgd2hlbiBhZGRpbmcgYW4gb2JqZWN0J3MgcHJvcGVydGllcyB0byBhIHByb3BlcnR5
IGxpc3QuCi1AcGFyYW0gb2JqZWN0IFRoZSBKU09iamVjdCB3aG9zZSBwcm9wZXJ0aWVzIG5lZWQg
dG8gYmUgYWRkZWQgdG8gcHJvcGVydHlMaXN0LgotQHBhcmFtIHByb3BlcnR5TGlzdCBBIEphdmFT
Y3JpcHQgcHJvcGVydHkgbGlzdCB0aGF0IHdpbGwgYmUgdXNlZCB0byBlbnVtZXJhdGUgb2JqZWN0
J3MgcHJvcGVydGllcy4KLUBkaXNjdXNzaW9uIElmIHlvdSBuYW1lZCB5b3VyIGZ1bmN0aW9uIEdl
dFByb3BlcnR5TGlzdCwgeW91IHdvdWxkIGRlY2xhcmUgaXQgbGlrZSB0aGlzOgorQHR5cGVkZWYg
SlNPYmplY3RHZXRQcm9wZXJ0eU5hbWVzQ2FsbGJhY2sKK0BhYnN0cmFjdCBUaGUgY2FsbGJhY2sg
aW52b2tlZCB0byBnZXQgdGhlIG5hbWVzIG9mIGFuIG9iamVjdCdzIHByb3BlcnRpZXMuCitAcGFy
YW0gY29udGV4dCBUaGUgY3VycmVudCBleGVjdXRpb24gY29udGV4dC4KK0BwYXJhbSBvYmplY3Qg
VGhlIEpTT2JqZWN0IHdob3NlIHByb3BlcnR5IG5hbWVzIG5lZWQgdG8gYmUgYXBwZW5kZWQgdG8g
cHJvcGVydHlOYW1lcy4KK0BwYXJhbSBhY2N1bXVsYXRvciBBIEphdmFTY3JpcHQgcHJvcGVydHkg
bmFtZSBhY2N1bXVsYXRvciwgdG8gd2hpY2ggdGhlIG9iamVjdCBzaG91bGQgYWRkIHRoZSBuYW1l
cyBvZiBpdHMgcHJvcGVydGllcy4KK0BkaXNjdXNzaW9uIElmIHlvdSBuYW1lZCB5b3VyIGZ1bmN0
aW9uIEdldFByb3BlcnR5TmFtZXMsIHlvdSB3b3VsZCBkZWNsYXJlIGl0IGxpa2UgdGhpczoKKwor
dm9pZCBHZXRQcm9wZXJ0eU5hbWVzKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBv
YmplY3QsIEpTUHJvcGVydHlOYW1lQWNjdW11bGF0b3JSZWYgYWNjdW11bGF0b3IpOwogCi12b2lk
IEFkZFByb3BlcnRpZXNUb0xpc3QoSlNPYmplY3RSZWYgb2JqZWN0LCBKU1Byb3BlcnR5TGlzdFJl
ZiBwcm9wZXJ0eUxpc3QpOworVXNlIEpTUHJvcGVydHlOYW1lQWNjdW11bGF0b3JBZGROYW1lIHRv
IGFkZCBwcm9wZXJ0eSBuYW1lcyB0byBhY2N1bXVsYXRvci4KIAotVXNlIEpTUHJvcGVydHlMaXN0
QWRkIHRvIGFkZCBwcm9wZXJ0aWVzIHRvIHByb3BlcnR5TGlzdC4KK1Byb3BlcnR5IGxpc3RzIGFy
ZSB1c2VkIGJ5IEpTUHJvcGVydHlFbnVtZXJhdG9ycyBhbmQgSmF2YVNjcmlwdCBmb3IuLi5pbiBs
b29wcy4gCiAKLVByb3BlcnR5IGxpc3RzIGFyZSB1c2VkIGJ5IEpTUHJvcGVydHlFbnVtZXJhdG9y
cyBhbmQgSmF2YVNjcmlwdCBmb3IuLi5pbiBsb29wcy4KK0l0J3Mgb25seSBuZWNlc3NhcnkgdG8g
YWRkIG5hbWVzIG9mIHByb3BlcnRpZXMgdGhhdCB5b3UgaGFuZGxlCitzcGVjaWFsbHkgaW4geW91
ciBvd24gZ2V0IC8gc2V0IGNhbGxiYWNrcy4gU3RhdGljIHByb3BlcnR5IG5hbWVzLAorbmFtZXMg
b2Ygc3RhbmRhcmQgSlMgcHJvcGVydGllcywgYW5kIHByb3BlcnRpZXMgZnJvbSB0aGUgcHJvdG90
eXBlCit3aWxsIGJlIGFkZGVkIGF1dG9tYXRpY2FsbHkuCiAqLwogdHlwZWRlZiB2b2lkCi0oKkpT
T2JqZWN0QWRkUHJvcGVydGllc1RvTGlzdENhbGxiYWNrKSAoSlNPYmplY3RSZWYgb2JqZWN0LCBK
U1Byb3BlcnR5TGlzdFJlZiBwcm9wZXJ0eUxpc3QpOworKCpKU09iamVjdEdldFByb3BlcnR5TmFt
ZXNDYWxsYmFjaykgKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBvYmplY3QsIEpT
UHJvcGVydHlOYW1lQWNjdW11bGF0b3JSZWYgcHJvcGVydHlOYW1lcyk7CiAKIC8qISAKIEB0eXBl
ZGVmIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb25DYWxsYmFjawpAQCAtMjc1LDcgKzI4MSw3IEBAIHR5
cGVkZWYgc3RydWN0IHsKICAgICBKU09iamVjdEdldFByb3BlcnR5Q2FsbGJhY2sgICAgICAgICBn
ZXRQcm9wZXJ0eTsKICAgICBKU09iamVjdFNldFByb3BlcnR5Q2FsbGJhY2sgICAgICAgICBzZXRQ
cm9wZXJ0eTsKICAgICBKU09iamVjdERlbGV0ZVByb3BlcnR5Q2FsbGJhY2sgICAgICBkZWxldGVQ
cm9wZXJ0eTsKLSAgICBKU09iamVjdEFkZFByb3BlcnRpZXNUb0xpc3RDYWxsYmFjayBhZGRQcm9w
ZXJ0aWVzVG9MaXN0OworICAgIEpTT2JqZWN0R2V0UHJvcGVydHlOYW1lc0NhbGxiYWNrICAgIGdl
dFByb3BlcnR5TmFtZXM7CiAgICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbkNhbGxiYWNrICAgICAg
Y2FsbEFzRnVuY3Rpb247CiAgICAgSlNPYmplY3RDYWxsQXNDb25zdHJ1Y3RvckNhbGxiYWNrICAg
Y2FsbEFzQ29uc3RydWN0b3I7CiAgICAgSlNPYmplY3RIYXNJbnN0YW5jZUNhbGxiYWNrICAgICAg
ICAgaGFzSW5zdGFuY2U7CkBAIC00NjIsMTAgKzQ2OCw5IEBAIEpTVmFsdWVSZWYgSlNPYmplY3RH
ZXRQcm9wZXJ0eUF0SW5kZXgoSlMKIEBwYXJhbSBvYmplY3QgVGhlIEpTT2JqZWN0IHdob3NlIHBy
b3BlcnR5IHlvdSB3YW50IHRvIHNldC4KIEBwYXJhbSBwcm9wZXJ0eUluZGV4IFRoZSBwcm9wZXJ0
eSdzIG5hbWUgYXMgYSBudW1iZXIKIEBwYXJhbSB2YWx1ZSBBIEpTVmFsdWUgdG8gdXNlIGFzIHRo
ZSBwcm9wZXJ0eSdzIHZhbHVlLgotQHBhcmFtIGF0dHJpYnV0ZXMgQSBsb2dpY2FsbHkgT1JlZCBz
ZXQgb2YgSlNQcm9wZXJ0eUF0dHJpYnV0ZXMgdG8gZ2l2ZSB0byB0aGUgcHJvcGVydHkuCiBAZGlz
Y3Vzc2lvbiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gc2V0dGluZyBhIHByb3BlcnR5IGJ5IGEgc3Ry
aW5nIG5hbWUgY29udGFpbmluZyB0aGUgbnVtYmVyLCBidXQgYWxsb3dzIGZhc3RlciBhY2Nlc3Mg
dG8gSlMgYXJyYXlzLgogKi8KLXZvaWQgSlNPYmplY3RTZXRQcm9wZXJ0eUF0SW5kZXgoSlNDb250
ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwgdW5zaWduZWQgcHJvcGVydHlJbmRl
eCwgSlNWYWx1ZVJlZiB2YWx1ZSwgSlNQcm9wZXJ0eUF0dHJpYnV0ZXMgYXR0cmlidXRlcyk7Cit2
b2lkIEpTT2JqZWN0U2V0UHJvcGVydHlBdEluZGV4KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09i
amVjdFJlZiBvYmplY3QsIHVuc2lnbmVkIHByb3BlcnR5SW5kZXgsIEpTVmFsdWVSZWYgdmFsdWUp
OwogCiAvKiEKIEBmdW5jdGlvbgpAQCAtNTI2LDQxICs1MzEsNTIgQEAgSlNPYmplY3RSZWYgSlNP
YmplY3RDYWxsQXNDb25zdHJ1Y3RvcihKUwogCiAvKiEKIEBmdW5jdGlvbgotQGFic3RyYWN0IENy
ZWF0ZXMgYW4gZW51bWVyYXRvciBmb3IgYW4gb2JqZWN0J3MgcHJvcGVydGllcy4KLUBwYXJhbSBv
YmplY3QgVGhlIG9iamVjdCB3aG9zZSBwcm9wZXJ0aWVzIHlvdSB3YW50IHRvIGVudW1lcmF0ZS4K
LUByZXN1bHQgQSBKU1Byb3BlcnR5RW51bWVyYXRvciB3aXRoIGEgbGlzdCBvZiBvYmplY3QncyBw
cm9wZXJ0aWVzLiBPd25lcnNoaXAgZm9sbG93cyB0aGUgQ3JlYXRlIFJ1bGUuCitAYWJzdHJhY3Qg
R2V0IHRoZSBuYW1lcyBvZiBhbGwgZW51bWVyYWJsZSBwcm9wZXJ0aWVzIG9mIGFuIG9iamVjdC4K
K0BwYXJhbSBjb250ZXh0IFRoZSBleGVjdXRpb24gY29udGV4dCB0byB1c2UuCitAcGFyYW0gb2Jq
ZWN0IFRoZSBvYmplY3QgZnJvbSB3aGljaCB0byBnZXQgcHJvcGVydHkgbmFtZXMuIAorQHJlc3Vs
dCBBIEpTUHJvcGVydHlOYW1lQXJyYXkgY29udGFpbmluZyB0aGUgbmFtZXMgb2YgYWxsIHRoZSBv
YmplY3QncyBlbnVtZXJhYmxlIHByb3BlcnRpZXMuCiAqLwotSlNQcm9wZXJ0eUVudW1lcmF0b3JS
ZWYgSlNPYmplY3RDcmVhdGVQcm9wZXJ0eUVudW1lcmF0b3IoSlNPYmplY3RSZWYgb2JqZWN0KTsK
K0pTUHJvcGVydHlOYW1lQXJyYXlSZWYgSlNPYmplY3RDb3B5UHJvcGVydHlOYW1lcyhKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgb2JqZWN0KTsKKwogLyohCiBAZnVuY3Rpb24KLUBh
YnN0cmFjdCBSZXRhaW5zIGEgcHJvcGVydHkgZW51bWVyYXRvci4KLUBwYXJhbSBlbnVtZXJhdG9y
IFRoZSBKU1Byb3BlcnR5RW51bWVyYXRvciB0byByZXRhaW4uCi1AcmVzdWx0IEEgSlNQcm9wZXJ0
eUVudW1lcmF0b3IgdGhhdCBpcyB0aGUgc2FtZSBhcyBlbnVtZXJhdG9yLgorQGFic3RyYWN0ICAg
ICAgICAgUmV0YWlucyBhIEphdmFTY3JpcHQgcHJvcGVydHkgbmFtZSBhcnJheS4KK0BwYXJhbSBh
cnJheSAgICAgIFRoZSBKU1Byb3BlcnR5TmFtZUFycmF5IHRvIHJldGFpbi4KK0ByZXN1bHQgICAg
ICAgICAgIEEgSlNQcm9wZXJ0eU5hbWVBcnJheSB0aGF0IGlzIHRoZSBzYW1lIGFzIGFycmF5Lgog
Ki8KLUpTUHJvcGVydHlFbnVtZXJhdG9yUmVmIEpTUHJvcGVydHlFbnVtZXJhdG9yUmV0YWluKEpT
UHJvcGVydHlFbnVtZXJhdG9yUmVmIGVudW1lcmF0b3IpOworSlNQcm9wZXJ0eU5hbWVBcnJheVJl
ZiBKU1Byb3BlcnR5TmFtZUFycmF5UmV0YWluKEpTUHJvcGVydHlOYW1lQXJyYXlSZWYgYXJyYXkp
OworCiAvKiEKIEBmdW5jdGlvbgotQGFic3RyYWN0IFJlbGVhc2VzIGEgcHJvcGVydHkgZW51bWVy
YXRvci4KLUBwYXJhbSBlbnVtZXJhdG9yIFRoZSBKU1Byb3BlcnR5RW51bWVyYXRvciB0byByZWxl
YXNlLgorQGFic3RyYWN0ICAgICAgICAgUmVsZWFzZXMgYSBKYXZhU2NyaXB0IHByb3BlcnR5IG5h
bWUgYXJyYXkuCitAcGFyYW0gYXJyYXkgICAgICBUaGUgSlNQcm9wZXR5TmFtZUFycmF5IHRvIHJl
bGVhc2UuCiAqLwotdm9pZCBKU1Byb3BlcnR5RW51bWVyYXRvclJlbGVhc2UoSlNQcm9wZXJ0eUVu
dW1lcmF0b3JSZWYgZW51bWVyYXRvcik7Cit2b2lkIEpTUHJvcGVydHlOYW1lQXJyYXlSZWxlYXNl
KEpTUHJvcGVydHlOYW1lQXJyYXlSZWYgYXJyYXkpOworCisvKiEKK0BmdW5jdGlvbgorQGFic3Ry
YWN0ICAgICAgR2V0IHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gYSBKYXZhU2NyaXB0IHByb3BlcnR5
IG5hbWUgYXJyYXkuCitAcGFyYW0gYXJyYXkgICBUaGUgYXJyYXkgZnJvbSB3aGljaCB0byByZXRy
aWV2ZSB0aGUgY291bnQuCitAcmVzdWx0ICAgICAgICBUaGUgY291bnQgb2YgaXRlbXMgaW4gdGhl
IGFycmF5LgorKi8KK3NpemVfdCBKU1Byb3BlcnR5TmFtZUFycmF5R2V0Q291bnQoSlNQcm9wZXJ0
eU5hbWVBcnJheVJlZiBhcnJheSk7CisKIC8qIQogQGZ1bmN0aW9uCi1AYWJzdHJhY3QgR2V0cyBh
IHByb3BlcnR5IGVudW1lcmF0b3IncyBuZXh0IHByb3BlcnR5LgotQHBhcmFtIGVudW1lcmF0b3Ig
VGhlIEpTUHJvcGVydHlFbnVtZXJhdG9yIHdob3NlIG5leHQgcHJvcGVydHkgeW91IHdhbnQgdG8g
Z2V0LgotQHJlc3VsdCBBIEpTU3RyaW5nIGNvbnRhaW5pbmcgdGhlIHByb3BlcnR5J3MgbmFtZSwg
b3IgTlVMTCBpZiBhbGwgcHJvcGVydGllcyBoYXZlIGJlZW4gZW51bWVyYXRlZC4KK0BhYnN0cmFj
dCAgICAgIEdldCBhIHNpbmdsZSBpdGVtIGZyb20gYSBKYXZhU2NyaXB0IHByb3BlcnR5IG5hbWUg
YXJyYXkuCitAcGFyYW0gYXJyYXkgICBUaGUgYXJyYXkgZnJvbSB3aGljaCB0byByZXRyaWV2ZSBh
IHByb3BlcnR5IG5hbWUuCitAcGFyYW0gaW5kZXggICBUaGUgaW5kZXggb2YgdGhlIHByb3BlcnR5
IG5hbWUgdG8gcmV0cmlldmUuCitAcmVzdWx0ICAgICAgICBBIEpTU3RyaW5nUmVmIGNvbnRhaW5p
bmcgdGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5LgogKi8KLUpTU3RyaW5nUmVmIEpTUHJvcGVydHlF
bnVtZXJhdG9yR2V0TmV4dE5hbWUoSlNQcm9wZXJ0eUVudW1lcmF0b3JSZWYgZW51bWVyYXRvcik7
CitKU1N0cmluZ1JlZiBKU1Byb3BlcnR5TmFtZUFycmF5R2V0TmFtZUF0SW5kZXgoSlNQcm9wZXJ0
eU5hbWVBcnJheVJlZiBhcnJheSwgc2l6ZV90IGluZGV4KTsKIAogLyohCiBAZnVuY3Rpb24KLUBh
YnN0cmFjdCBBZGRzIGEgcHJvcGVydHkgdG8gYSBwcm9wZXJ0eSBsaXN0LgotQGRpc2N1c3Npb24g
VXNlIHRoaXMgbWV0aG9kIGluc2lkZSBhIEpTT2JqZWN0QWRkUHJvcGVydGllc1RvTGlzdENhbGxi
YWNrIHRvIGFkZCBhIGN1c3RvbSBwcm9wZXJ0eSB0byBhbiBvYmplY3QncyBwcm9wZXJ0eSBsaXN0
LgotQHBhcmFtIHByb3BlcnR5TGlzdCBUaGUgSlNQcm9wZXJ0eUxpc3QgdG8gd2hpY2ggeW91IHdh
bnQgdG8gYWRkIGEgcHJvcGVydHkuCi1AcGFyYW0gdGhpc09iamVjdCBUaGUgSlNPYmplY3QgdG8g
d2hpY2ggdGhlIHByb3BlcnR5IGJlbG9uZ3MuCi1AcGFyYW0gcHJvcGVydHlOYW1lIEEgSlNTdHJp
bmcgc3BlY2lmeWluZyB0aGUgcHJvcGVydHkncyBuYW1lLgorQGFic3RyYWN0ICAgICAgICAgICBB
ZGQgYSBwcm9wZXJ0eSBuYW1lIC0gdXNlZnVsIHdoaWxlIGdldHRpbmcgdGhlIHByb3BlcnR5IG5h
bWVzIGZvciBhbiBvYmplY3QuCitAcGFyYW0gYWNjdW11bGF0b3IgIFRoZSBhY2N1bXVsYXRvciBv
YmplY3QgdG8gd2hpY2ggdG8gYWRkIHRoZSBwcm9wZXJ0eS4KK0BwYXJhbSBwcm9wZXJ0eU5hbWUg
VGhlIG5ldyBwcm9wZXJ0eSB0byBhZGQuCiAqLwotdm9pZCBKU1Byb3BlcnR5TGlzdEFkZChKU1By
b3BlcnR5TGlzdFJlZiBwcm9wZXJ0eUxpc3QsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIEpTU3Ry
aW5nUmVmIHByb3BlcnR5TmFtZSk7Cit2b2lkIEpTUHJvcGVydHlOYW1lQWNjdW11bGF0b3JBZGRO
YW1lKEpTUHJvcGVydHlOYW1lQWNjdW11bGF0b3JSZWYgYWNjdW11bGF0b3IsIEpTU3RyaW5nUmVm
IHByb3BlcnR5TmFtZSk7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpJbmRleDogSmF2YVNjcmlw
dENvcmUvQVBJL3Rlc3RhcGkuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9BUEkvdGVz
dGFwaS5jCShyZXZpc2lvbiAxNTQ2MSkKKysrIEphdmFTY3JpcHRDb3JlL0FQSS90ZXN0YXBpLmMJ
KHdvcmtpbmcgY29weSkKQEAgLTE2NywxOCArMTY3LDE4IEBAIHN0YXRpYyBib29sIE15T2JqZWN0
X2RlbGV0ZVByb3BlcnR5KEpTQ28KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyB2b2lk
IE15T2JqZWN0X2FkZFByb3BlcnRpZXNUb0xpc3QoSlNPYmplY3RSZWYgb2JqZWN0LCBKU1Byb3Bl
cnR5TGlzdFJlZiBwcm9wZXJ0eUxpc3QpCitzdGF0aWMgdm9pZCBNeU9iamVjdF9nZXRQcm9wZXJ0
eU5hbWVzKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBvYmplY3QsIEpTUHJvcGVy
dHlOYW1lQWNjdW11bGF0b3JSZWYgcHJvcGVydHlOYW1lcykKIHsKICAgICBVTlVTRURfUEFSQU0o
Y29udGV4dCk7CiAgICAgCiAgICAgSlNTdHJpbmdSZWYgcHJvcGVydHlOYW1lOwogICAgIAogICAg
IHByb3BlcnR5TmFtZSA9IEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJhbHdheXNPbmUi
KTsKLSAgICBKU1Byb3BlcnR5TGlzdEFkZChwcm9wZXJ0eUxpc3QsIG9iamVjdCwgcHJvcGVydHlO
YW1lKTsKKyAgICBKU1Byb3BlcnR5TmFtZUFjY3VtdWxhdG9yQWRkTmFtZShwcm9wZXJ0eU5hbWVz
LCBwcm9wZXJ0eU5hbWUpOwogICAgIEpTU3RyaW5nUmVsZWFzZShwcm9wZXJ0eU5hbWUpOwogICAg
IAogICAgIHByb3BlcnR5TmFtZSA9IEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJteVBy
b3BlcnR5TmFtZSIpOwotICAgIEpTUHJvcGVydHlMaXN0QWRkKHByb3BlcnR5TGlzdCwgb2JqZWN0
LCBwcm9wZXJ0eU5hbWUpOworICAgIEpTUHJvcGVydHlOYW1lQWNjdW11bGF0b3JBZGROYW1lKHBy
b3BlcnR5TmFtZXMsIHByb3BlcnR5TmFtZSk7CiAgICAgSlNTdHJpbmdSZWxlYXNlKHByb3BlcnR5
TmFtZSk7CiB9CiAKQEAgLTI0OCw3ICsyNDgsNyBAQCBKU09iamVjdENhbGxiYWNrcyBNeU9iamVj
dF9jYWxsYmFja3MgPSB7CiAgICAgTXlPYmplY3RfZ2V0UHJvcGVydHksCiAgICAgTXlPYmplY3Rf
c2V0UHJvcGVydHksCiAgICAgTXlPYmplY3RfZGVsZXRlUHJvcGVydHksCi0gICAgTXlPYmplY3Rf
YWRkUHJvcGVydGllc1RvTGlzdCwKKyAgICBNeU9iamVjdF9nZXRQcm9wZXJ0eU5hbWVzLAogICAg
IE15T2JqZWN0X2NhbGxBc0Z1bmN0aW9uLAogICAgIE15T2JqZWN0X2NhbGxBc0NvbnN0cnVjdG9y
LAogICAgIE15T2JqZWN0X2hhc0luc3RhbmNlLApAQCAtNTUzLDExICs1NTMsMTIgQEAgaW50IG1h
aW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKICAgICBvID0gSlNPYmplY3RNYWtlKGNvbnRleHQs
IE5VTEwsIE5VTEwpOwogICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoY29udGV4dCwgbywganNPbmVJ
U3RyaW5nLCBKU1ZhbHVlTWFrZU51bWJlcigxKSwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lLCBO
VUxMKTsKICAgICBKU09iamVjdFNldFByb3BlcnR5KGNvbnRleHQsIG8sIGpzQ0ZJU3RyaW5nLCAg
SlNWYWx1ZU1ha2VOdW1iZXIoMSksIGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udEVudW0sIE5VTEwp
OwotICAgIEpTUHJvcGVydHlFbnVtZXJhdG9yUmVmIGVudW1lcmF0b3IgPSBKU09iamVjdENyZWF0
ZVByb3BlcnR5RW51bWVyYXRvcihvKTsKLSAgICBpbnQgY291bnQgPSAwOwotICAgIHdoaWxlIChK
U1Byb3BlcnR5RW51bWVyYXRvckdldE5leHROYW1lKGVudW1lcmF0b3IpKQotICAgICAgICArK2Nv
dW50OwotICAgIEpTUHJvcGVydHlFbnVtZXJhdG9yUmVsZWFzZShlbnVtZXJhdG9yKTsKKyAgICBK
U1Byb3BlcnR5TmFtZUFycmF5UmVmIG5hbWVBcnJheSA9IEpTT2JqZWN0Q29weVByb3BlcnR5TmFt
ZXMoY29udGV4dCwgbyk7CisgICAgc2l6ZV90IGV4cGVjdGVkQ291bnQgPSBKU1Byb3BlcnR5TmFt
ZUFycmF5R2V0Q291bnQobmFtZUFycmF5KTsKKyAgICBzaXplX3QgY291bnQ7CisgICAgZm9yIChj
b3VudCA9IDA7IGNvdW50IDwgZXhwZWN0ZWRDb3VudDsgKytjb3VudCkKKyAgICAgICAgSlNQcm9w
ZXJ0eU5hbWVBcnJheUdldE5hbWVBdEluZGV4KG5hbWVBcnJheSwgY291bnQpOworICAgIEpTUHJv
cGVydHlOYW1lQXJyYXlSZWxlYXNlKG5hbWVBcnJheSk7CiAgICAgYXNzZXJ0KGNvdW50ID09IDEp
OyAvLyBqc0NGU3RyaW5nIHNob3VsZCBub3QgYmUgZW51bWVyYXRlZAogCiAgICAgSlNDbGFzc1Jl
ZiBudWxsQ2FsbGJhY2tzQ2xhc3MgPSBKU0NsYXNzQ3JlYXRlKE5VTEwsIE5VTEwsIE5VTEwsIE5V
TEwpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTQ2MSkKKysrIEphdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTc3LDcgKzc3LDggQEAKIAkJMTRCRDVBMzYwQTNFOTFGNjAwQkFGNTlDIC8qIEphdmFT
Y3JpcHRDb3JlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxNEJENUEyRjBBM0U5MUY2MDBCQUY1OUMgLyogSmF2YVNjcmlwdENvcmUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNEYxMzc1OTBBM0E3MjdF
MDBGMjZGOTAgLyogQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxNEYxMzc1ODBBM0E3MjdFMDBGMjZGOTAgLyogQ29udGV4dC5jcHAgKi87
IH07CiAJCTE0RjEzNzgzMEEzQTc2NUIwMEYyNkY5MCAvKiBjb250ZXh0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEYxMzc4MjBBM0E3NjVCMDBGMjZG
OTAgLyogY29udGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07Ci0JCTY1MkMxMDdGMDhEQTdCMUUwMDIwODg3RCAvKiBwcm90ZWN0ZWRfcmVmZXJlbmNl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTJDMTA3
RTA4REE3QjFFMDAyMDg4N0QgLyogcHJvdGVjdGVkX3JlZmVyZW5jZS5oICovOyB9OworCQk2NTQw
MEMxMTBBNjlCQUYyMDA1MDk4ODcgLyogUHJvcGVydHlOYW1lQXJyYXkuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU0MDBDMEYwQTY5QkFGMjAwNTA5
ODg3IC8qIFByb3BlcnR5TmFtZUFycmF5LmNwcCAqLzsgfTsKKwkJNjU0MDBDMTIwQTY5QkFGMjAw
NTA5ODg3IC8qIFByb3BlcnR5TmFtZUFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA2NTQwMEMxMDBBNjlCQUYyMDA1MDk4ODcgLyogUHJvcGVydHlO
YW1lQXJyYXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk2NTQxQkQ3MjA4RTgwQTE3MDAyQ0JFRTcgLyogVENQYWdlTWFwLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTQxQkQ2RTA4RTgwQTE3MDAyQ0JF
RTcgLyogVENQYWdlTWFwLmggKi87IH07CiAJCTY1NDFCRDczMDhFODBBMTcwMDJDQkVFNyAvKiBU
Q1NwaW5Mb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA2NTQxQkQ2RjA4RTgwQTE3MDAyQ0JFRTcgLyogVENTcGluTG9jay5oICovOyB9OwogCQk2NTQx
QkQ3NDA4RTgwQTE3MDAyQ0JFRTcgLyogVENTeXN0ZW1BbGxvYy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTQxQkQ3MDA4RTgwQTE3MDAyQ0JFRTcg
LyogVENTeXN0ZW1BbGxvYy5jcHAgKi87IH07CkBAIC0xNDUsOCArMTQ2LDYgQEAKIAkJOTMyRjVC
NUMwODIyQTFDNzAwNzM2OTc1IC8qIHVzdHJpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY2OTJBODg2MDI1NTU5N0QwMUZGNjBGNyAvKiB1c3RyaW5n
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTMy
RjVCNjAwODIyQTFDNzAwNzM2OTc1IC8qIGNvbmZpZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjY4RUJCOEMwMjU1RDRDNjAxRkY2MEY3IC8qIGNvbmZp
Zy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkz
MkY1QjYxMDgyMkExQzcwMDczNjk3NSAvKiBKYXZhU2NyaXB0Q29yZVByZWZpeC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjVDMjkwRTYwMjg0Rjk4RTAx
ODYzNUNBIC8qIEphdmFTY3JpcHRDb3JlUHJlZml4LmggKi87IH07Ci0JCTkzMkY1QjYzMDgyMkEx
QzcwMDczNjk3NSAvKiByZWZlcmVuY2VfbGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRjU0RjA4MDAwMzBDRDIyMDAxQjVDMkVCIC8qIHJlZmVyZW5j
ZV9saXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
LQkJOTMyRjVCNjQwODIyQTFDNzAwNzM2OTc1IC8qIHJlZmVyZW5jZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUzNDEzOTEwMzBDRUVCMTAxOEJFN0Yz
IC8qIHJlZmVyZW5jZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTkzMkY1QjY1MDgyMkExQzcwMDczNjk3NSAvKiBjb21wbGV0aW9uLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNUJCMkJDNTAzMEY3NzIx
MDFGQ0ZFMUQgLyogY29tcGxldGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTkzMkY1QjY2MDgyMkExQzcwMDczNjk3NSAvKiBpZGVudGlmaWVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzNBMzQ5
QTAzOEFFN0M2MDA4NjM1Q0UgLyogaWRlbnRpZmllci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzMkY1QjY3MDgyMkExQzcwMDczNjk3NSAvKiBh
cnJheV9pbnN0YW5jZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTM4NzcyRTUwMzhCRkUxOTAwODYzNUNFIC8qIGFycmF5X2luc3RhbmNlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIwOCw4ICsyMDcs
NiBAQAogCQk5MzJGNUJBODA4MjJBMUM3MDA3MzY5NzUgLyogdXN0cmluZy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNjkyQTg4NTAyNTU1OTdEMDFG
RjYwRjcgLyogdXN0cmluZy5jcHAgKi87IH07CiAJCTkzMkY1QkE5MDgyMkExQzcwMDczNjk3NSAv
KiB2YWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGNjkyQTg4NzAyNTU1OTdEMDFGRjYwRjcgLyogdmFsdWUuY3BwICovOyB9OwogCQk5MzJGNUJB
QjA4MjJBMUM3MDA3MzY5NzUgLyogbm9kZXMyc3RyaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1RkZFNjU2MDI2QjQ3QTYwMTg2MzVDQSAvKiBu
b2RlczJzdHJpbmcuY3BwICovOyB9OwotCQk5MzJGNUJBQzA4MjJBMUM3MDA3MzY5NzUgLyogcmVm
ZXJlbmNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEY1MzQxMzkwMDMwQ0VFQjEwMThCRTdGMyAvKiByZWZlcmVuY2UuY3BwICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTkzMkY1QkFEMDgyMkExQzcwMDcz
Njk3NSAvKiByZWZlcmVuY2VfbGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGNTM0MTM5NDAzMENGNUY4MDE4QkU3RjMgLyogcmVmZXJlbmNlX2xp
c3QuY3BwICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTkzMkY1QkFFMDgyMkExQzcwMDczNjk3NSAvKiBpZGVudGlmaWVyLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzM0EzNDlEMDM4QUU4MEYwMDg2MzVD
RSAvKiBpZGVudGlmaWVyLmNwcCAqLzsgfTsKIAkJOTMyRjVCQUYwODIyQTFDNzAwNzM2OTc1IC8q
IHNjb3BlX2NoYWluLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDkzNzREM0E4MDM4RDlENzQwMDg2MzVDRSAvKiBzY29wZV9jaGFpbi5jcHAgKi87IH07
CiAJCTkzMkY1QkIwMDgyMkExQzcwMDczNjk3NSAvKiBsaXN0LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMUM2Q0YwMDM4RUU4REUwMDg2MzVDRSAv
KiBsaXN0LmNwcCAqLzsgfTsKQEAgLTQyNSw3ICs0MjIsOCBAQAogCQk1MUYwRUM5NzA1Qzg4REM3
MDBFNkRGMUIgLyogb2JqY191dGlsaXR5Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gb2JqY191dGlsaXR5Lm1tOyBwYXRoID0gYmlu
ZGluZ3Mvb2JqYy9vYmpjX3V0aWxpdHkubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldp
ZHRoID0gODsgfTsKIAkJNjUxRjY0MTIwMzlENUI1RjAwNzgzOTVDIC8qIGR0b2EuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gZHRvYS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgfTsKIAkJNjUxRjY0MTMw
MzlENUI1RjAwNzgzOTVDIC8qIGR0b2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gZHRvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJX
aWR0aCA9IDg7IH07Ci0JCTY1MkMxMDdFMDhEQTdCMUUwMDIwODg3RCAvKiBwcm90ZWN0ZWRfcmVm
ZXJlbmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IHByb3RlY3RlZF9yZWZlcmVuY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lk
dGggPSA4OyB9OworCQk2NTQwMEMwRjBBNjlCQUYyMDA1MDk4ODcgLyogUHJvcGVydHlOYW1lQXJy
YXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByb3BlcnR5TmFt
ZUFycmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNjU0MDBDMTAwQTY5QkFG
MjAwNTA5ODg3IC8qIFByb3BlcnR5TmFtZUFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBQcm9wZXJ0eU5hbWVBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk2NTQxNzIwRTAzOUUwOEI5MDA1OEJGRUIgLyogZGZ0YWJsZXMuYyAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBuYW1lID0gZGZ0YWJsZXMuYzsgcGF0aCA9
IHBjcmUvZGZ0YWJsZXMuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9
OwogCQk2NTQxNzIwRjAzOUUwOEI5MDA1OEJGRUIgLyogcGNyZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBwY3JlLmg7IHBhdGggPSBwY3JlL3Bj
cmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9OwogCQk2NTQxNzIx
NzAzOUUwQjI4MDA1OEJGRUIgLyogcGNyZS1jb25maWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gInBjcmUtY29uZmlnLmgiOyBwYXRoID0gInBj
cmUvcGNyZS1jb25maWcuaCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsg
fTsKQEAgLTUxOCwxMCArNTE2LDYgQEAKIAkJRTE5NTY3OEYwOUU3Q0YxMjAwQjg5RDEzIC8qIFVu
aWNvZGVJY3UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5pY29kZUljdS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTk1Njc5NDA5RTdDRjEyMDBCODlEMTMg
LyogVW5pY29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmljb2RlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxOTU2Nzk1MDlFN0NGMTIwMEI4OUQxMyAv
KiBVbmljb2RlQ2F0ZWdvcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5p
Y29kZUNhdGVnb3J5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUY1MzQxMzkwMDMw
Q0VFQjEwMThCRTdGMyAvKiByZWZlcmVuY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gcmVmZXJlbmNlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9OwotCQlGNTM0MTM5MTAzMENFRUIxMDE4QkU3RjMg
LyogcmVmZXJlbmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IHJlZmVyZW5jZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9
IDg7IH07Ci0JCUY1MzQxMzk0MDMwQ0Y1RjgwMThCRTdGMyAvKiByZWZlcmVuY2VfbGlzdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdp
ZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBy
ZWZlcmVuY2VfbGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsg
fTsKLQkJRjU0RjA4MDAwMzBDRDIyMDAxQjVDMkVCIC8qIHJlZmVyZW5jZV9saXN0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHJlZmVyZW5jZV9s
aXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgfTsKIAkJRjVCQjJC
QzUwMzBGNzcyMTAxRkNGRTFEIC8qIGNvbXBsZXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gY29tcGxldGlvbi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB0YWJXaWR0aCA9IDg7IH07CiAJCUY1QzI5MEU2MDI4NEY5OEUwMTg2MzVDQSAv
KiBKYXZhU2NyaXB0Q29yZVByZWZpeC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBKYXZhU2NyaXB0Q29yZVByZWZpeC5oOyBwYXRoID0gLi4vSmF2
YVNjcmlwdENvcmVQcmVmaXguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4
OyB9OwogCQlGNUZGRTY1NjAyNkI0N0E2MDE4NjM1Q0EgLyogbm9kZXMyc3RyaW5nLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGgg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IG5vZGVz
MnN0cmluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgfTsKQEAg
LTgzNyw2ICs4MzEsOCBAQAogCQk2NTQxNzIwMDAzOUUwMUJBMDA1OEJGRUIgLyoga2pzICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk2NTQwMEMwRjBBNjlC
QUYyMDA1MDk4ODcgLyogUHJvcGVydHlOYW1lQXJyYXkuY3BwICovLAorCQkJCTY1NDAwQzEwMEE2
OUJBRjIwMDUwOTg4NyAvKiBQcm9wZXJ0eU5hbWVBcnJheS5oICovLAogCQkJCTkzODc3MkU1MDM4
QkZFMTkwMDg2MzVDRSAvKiBhcnJheV9pbnN0YW5jZS5oICovLAogCQkJCUY2OTJBODREMDI1NTU5
N0QwMUZGNjBGNyAvKiBhcnJheV9vYmplY3QuY3BwICovLAogCQkJCUY2OTJBODRFMDI1NTU5N0Qw
MUZGNjBGNyAvKiBhcnJheV9vYmplY3QuaCAqLywKQEAgLTkwMiwxMSArODk4LDYgQEAKIAkJCQk2
NTYyMUU2QjA4OUU4NTk3MDA3NjBGMzUgLyogcHJvcGVydHlfc2xvdC5jcHAgKi8sCiAJCQkJNjU2
MjFFNkMwODlFODU5NzAwNzYwRjM1IC8qIHByb3BlcnR5X3Nsb3QuaCAqLywKIAkJCQk2NUMwMkZC
QjA2Mzc0NjJBMDAzRTdFRTYgLyogcHJvdGVjdC5oICovLAotCQkJCTY1MkMxMDdFMDhEQTdCMUUw
MDIwODg3RCAvKiBwcm90ZWN0ZWRfcmVmZXJlbmNlLmggKi8sCi0JCQkJRjUzNDEzOTAwMzBDRUVC
MTAxOEJFN0YzIC8qIHJlZmVyZW5jZS5jcHAgKi8sCi0JCQkJRjUzNDEzOTEwMzBDRUVCMTAxOEJF
N0YzIC8qIHJlZmVyZW5jZS5oICovLAotCQkJCUY1MzQxMzk0MDMwQ0Y1RjgwMThCRTdGMyAvKiBy
ZWZlcmVuY2VfbGlzdC5jcHAgKi8sCi0JCQkJRjU0RjA4MDAwMzBDRDIyMDAxQjVDMkVCIC8qIHJl
ZmVyZW5jZV9saXN0LmggKi8sCiAJCQkJRjY5MkE4N0QwMjU1NTk3RDAxRkY2MEY3IC8qIHJlZ2V4
cC5jcHAgKi8sCiAJCQkJRjY5MkE4N0UwMjU1NTk3RDAxRkY2MEY3IC8qIHJlZ2V4cC5oICovLAog
CQkJCUY2OTJBODdCMDI1NTU5N0QwMUZGNjBGNyAvKiByZWdleHBfb2JqZWN0LmNwcCAqLywKQEAg
LTEwMjksOCArMTAyMCw2IEBACiAJCQkJOTMyRjVCNUMwODIyQTFDNzAwNzM2OTc1IC8qIHVzdHJp
bmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMkY1QjYwMDgyMkExQzcwMDczNjk3NSAvKiBjb25m
aWcuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMkY1QjYxMDgyMkExQzcwMDczNjk3NSAvKiBKYXZh
U2NyaXB0Q29yZVByZWZpeC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJOTMyRjVCNjMwODIyQTFDNzAw
NzM2OTc1IC8qIHJlZmVyZW5jZV9saXN0LmggaW4gSGVhZGVycyAqLywKLQkJCQk5MzJGNUI2NDA4
MjJBMUM3MDA3MzY5NzUgLyogcmVmZXJlbmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzJGNUI2
NTA4MjJBMUM3MDA3MzY5NzUgLyogY29tcGxldGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMy
RjVCNjYwODIyQTFDNzAwNzM2OTc1IC8qIGlkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTkzMkY1QjY3MDgyMkExQzcwMDczNjk3NSAvKiBhcnJheV9pbnN0YW5jZS5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0xMDczLDcgKzEwNjIsNiBAQAogCQkJCTkzRTI2QkZEMDhCMTUxRDQwMEY4NTIyNiAv
KiB1Y3AuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRTI2QkZFMDhCMTUxRDQwMEY4NTIyNiAvKiB1
Y3BpbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNFMjZDMTMwOEIxNTIzRDAwRjg1MjI2
IC8qIHVjcHRhYmxlLmMgaW4gSGVhZGVycyAqLywKLQkJCQk2NTJDMTA3RjA4REE3QjFFMDAyMDg4
N0QgLyogcHJvdGVjdGVkX3JlZmVyZW5jZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjVFMjE3QkQw
OEU3RUVDQzAwMjNFNUY2IC8qIEFzc2VydGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1RTIx
N0MwMDhFN0VFQ0MwMDIzRTVGNiAvKiBGYXN0TWFsbG9jLmggaW4gSGVhZGVycyAqLywKIAkJCQk2
NTQxQkQ3MjA4RTgwQTE3MDAyQ0JFRTcgLyogVENQYWdlTWFwLmggaW4gSGVhZGVycyAqLywKQEAg
LTExMjksNiArMTExNyw3IEBACiAJCQkJMTQ0MEY4OTEwQTUwOEIxMDAwMDVGMDYxIC8qIEpTQ2Fs
bGJhY2tGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ0MEY4QUUwQTUwOEQyMDAwMDVG
MDYxIC8qIEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ0MEZD
RTMwQTUxRTQ2QjAwMDVGMDYxIC8qIEpTQ2xhc3NSZWYuaCBpbiBIZWFkZXJzICovLAorCQkJCTY1
NDAwQzEyMEE2OUJBRjIwMDUwOTg4NyAvKiBQcm9wZXJ0eU5hbWVBcnJheS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJ
CX07CkBAIC0xMzU2LDggKzEzNDUsNiBAQAogCQkJCTkzMkY1QkE4MDgyMkExQzcwMDczNjk3NSAv
KiB1c3RyaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMkY1QkE5MDgyMkExQzcwMDczNjk3
NSAvKiB2YWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzJGNUJBQjA4MjJBMUM3MDA3MzY5
NzUgLyogbm9kZXMyc3RyaW5nLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTkzMkY1QkFDMDgyMkEx
QzcwMDczNjk3NSAvKiByZWZlcmVuY2UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJOTMyRjVCQUQw
ODIyQTFDNzAwNzM2OTc1IC8qIHJlZmVyZW5jZV9saXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTkzMkY1QkFFMDgyMkExQzcwMDczNjk3NSAvKiBpZGVudGlmaWVyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTkzMkY1QkFGMDgyMkExQzcwMDczNjk3NSAvKiBzY29wZV9jaGFpbi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk5MzJGNUJCMDA4MjJBMUM3MDA3MzY5NzUgLyogbGlzdC5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTE0MTYsNiArMTQwMyw3IEBACiAJCQkJMTQ0MEY4QUYwQTUwOEQyMDAwMDVG
MDYxIC8qIEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQw
RkNFNDBBNTFFNDZCMDAwNUYwNjEgLyogSlNDbGFzc1JlZi5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxNDIxMzU5QjBBNjc3RjRGMDBBODE5NUUgLyogSlNCYXNlLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTY1NDAwQzExMEE2OUJBRjIwMDUwOTg4NyAvKiBQcm9wZXJ0eU5hbWVBcnJheS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5n
ID0gMDsKIAkJfTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9Qcm9wZXJ0eU5hbWVBcnJheS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL1Byb3BlcnR5TmFtZUFycmF5LmNw
cAkocmV2aXNpb24gMCkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9Qcm9wZXJ0eU5hbWVBcnJheS5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzcgQEAKKy8vIC0qLSBtb2RlOiBjKys7IGMtYmFz
aWMtb2Zmc2V0OiA0IC0qLQorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIGxp
YnJhcmllcworICogIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdGVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
KgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eU5hbWVBcnJh
eS5oIgorCituYW1lc3BhY2UgS0pTIHsKKwordm9pZCBQcm9wZXJ0eU5hbWVBcnJheTo6YWRkKGNv
bnN0IElkZW50aWZpZXImIGlkZW50KQoreworICAgIGlmICghbV9zZXQuYWRkKGlkZW50LnVzdHJp
bmcoKS5yZXAoKSkuc2Vjb25kKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV92ZWN0b3Iu
YXBwZW5kKGlkZW50KTsKK30KKworfSAvLyBuYW1lc3BhY2UgS0pTCisKSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL2tqcy9Qcm9wZXJ0eU5hbWVBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL2tqcy9Qcm9wZXJ0eU5hbWVBcnJheS5oCShyZXZpc2lvbiAwKQorKysgSmF2YVNjcmlwdENv
cmUva2pzL1Byb3BlcnR5TmFtZUFycmF5LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjMgQEAK
Ky8vIC0qLSBtb2RlOiBjKys7IGMtYmFzaWMtb2Zmc2V0OiA0IC0qLQorLyoKKyAqICBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgS0RFIGxpYnJhcmllcworICogIENvcHlyaWdodCAoQykgMjAwNSBB
cHBsZSBDb21wdXRlciwgSW5jCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdGVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgS0pTX0lERU5USUZJRVJf
U0VRVUVOQ0VEX1NFVF9ICisjZGVmaW5lIEtKU19JREVOVElGSUVSX1NFUVVFTkNFRF9TRVRfSAor
CisjaW5jbHVkZSAiaWRlbnRpZmllci5oIgorCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBLSlMgeworCisgICAgY2xhc3MgUHJv
cGVydHlOYW1lQXJyYXk7CisKKyAgICB0eXBlZGVmIFZlY3RvcjxJZGVudGlmaWVyPjo6Y29uc3Rf
aXRlcmF0b3IgUHJvcGVydHlOYW1lQXJyYXlJdGVyYXRvcjsKKworICAgIGNsYXNzIFByb3BlcnR5
TmFtZUFycmF5IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHR5cGVkZWYgUHJvcGVydHlOYW1lQXJy
YXlJdGVyYXRvciBpdGVyYXRvcjsKKworICAgICAgICBQcm9wZXJ0eU5hbWVBcnJheSgpIHt9CisK
KyAgICAgICAgdm9pZCBhZGQoY29uc3QgSWRlbnRpZmllciYpOworICAgICAgICBpdGVyYXRvciBi
ZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLmJlZ2luKCk7IH0KKyAgICAgICAgaXRlcmF0
b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3IuZW5kKCk7IH0KKyAgICAgICAgaW50IHNp
emUoKSBjb25zdCB7IHJldHVybiBtX3ZlY3Rvci5zaXplKCk7IH0KKworICAgICAgICBJZGVudGlm
aWVyJiBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIHsgcmV0dXJuIG1fdmVjdG9yW2ldOyB9CisgICAg
ICAgIGNvbnN0IElkZW50aWZpZXImIG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QgeyByZXR1
cm4gbV92ZWN0b3JbaV07IH0KKyAgICAgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIHZv
aWQgZGVhbGxvY2F0ZVZlY3RvcigpOworCisgICAgICAgIHR5cGVkZWYgSGFzaFNldDxVU3RyaW5n
OjpJbXBsKiwgUHRySGFzaDxVU3RyaW5nOjpJbXBsKj4gPiBJZGVudGlmaWVyU2V0OworICAgICAg
ICBJZGVudGlmaWVyU2V0IG1fc2V0OworICAgICAgICBWZWN0b3I8SWRlbnRpZmllcj4gbV92ZWN0
b3I7CisgICAgfTsKKworCit9IC8vIG5hbWVzcGFjZSBLSlMKKworCisjZW5kaWYgLy8gS0pTX0lE
RU5USUZJRVJfU0VRVUVOQ0VEX1NFVF9ICkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvYXJyYXlf
aW5zdGFuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvYXJyYXlfaW5zdGFu
Y2UuaAkocmV2aXNpb24gMTU0NjEpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvYXJyYXlfaW5zdGFu
Y2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAg
ICB2aXJ0dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSAqZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1l
LCBKU1ZhbHVlICp2YWx1ZSwgaW50IGF0dHIgPSBOb25lKTsKICAgICB2aXJ0dWFsIGJvb2wgZGVs
ZXRlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5h
bWUpOwogICAgIHZpcnR1YWwgYm9vbCBkZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSk7Ci0gICAgdmlydHVhbCB2b2lkIGdldFByb3BlcnR5TGlzdChS
ZWZlcmVuY2VMaXN0JiBwcm9wZXJ0eUxpc3QsIGJvb2wgcmVjdXJzaXZlKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhFeGVjU3RhdGUgKmV4ZWMsIFByb3BlcnR5TmFtZUFycmF5
JiBwcm9wZXJ0eU5hbWVzKTsKIAogICAgIHZpcnR1YWwgdm9pZCBtYXJrKCk7CiAKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL2tqcy9hcnJheV9vYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL2tqcy9hcnJheV9vYmplY3QuY3BwCShyZXZpc2lvbiAxNTQ2MSkKKysrIEphdmFTY3Jp
cHRDb3JlL2tqcy9hcnJheV9vYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3
IEBACiAjaW5jbHVkZSAiZXJyb3Jfb2JqZWN0LmgiCiAjaW5jbHVkZSAibG9va3VwLmgiCiAjaW5j
bHVkZSAib3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgInJlZmVyZW5jZV9saXN0LmgiCisjaW5jbHVk
ZSAiUHJvcGVydHlOYW1lQXJyYXkuaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1
ZGUgPHN0ZGlvLmg+CiAKQEAgLTE5OSwxOSArMTk5LDE4IEBAIGJvb2wgQXJyYXlJbnN0YW5jZTo6
ZGVsZXRlUHJvcGVydHkoRXhlY1MKICAgcmV0dXJuIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eShl
eGVjLCBJZGVudGlmaWVyOjpmcm9tKGluZGV4KSk7CiB9CiAKLXZvaWQgQXJyYXlJbnN0YW5jZTo6
Z2V0UHJvcGVydHlMaXN0KFJlZmVyZW5jZUxpc3QmIHByb3BlcnR5TGlzdCwgYm9vbCByZWN1cnNp
dmUpCit2b2lkIEFycmF5SW5zdGFuY2U6OmdldFByb3BlcnR5TmFtZXMoRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcykKIHsKICAgLy8gYXZvaWQgZmV0Y2hp
bmcgdGhpcyBldmVyeSB0aW1lIHRocm91Z2ggdGhlIGxvb3AKLSAgSlNWYWx1ZSAqdW5kZWZpbmVk
ID0ganNVbmRlZmluZWQoKTsKLQotICAvLyMjIyBGSVhNRTogc2hvdWxkIGF2b2lkIGR1cGxpY2F0
ZXMgd2l0aCBwcm90b3R5cGUKKyAgSlNWYWx1ZSogdW5kZWZpbmVkID0ganNVbmRlZmluZWQoKTsK
KyAgCiAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdG9yYWdlTGVuZ3RoOyArK2kpIHsKLSAg
ICBKU1ZhbHVlICppbXAgPSBzdG9yYWdlW2ldOwotICAgIGlmIChpbXAgJiYgaW1wICE9IHVuZGVm
aW5lZCkgewotICAgICAgcHJvcGVydHlMaXN0LmFwcGVuZChSZWZlcmVuY2UodGhpcywgaSkpOwot
ICAgIH0KKyAgICBKU1ZhbHVlKiB2YWx1ZSA9IHN0b3JhZ2VbaV07CisgICAgaWYgKHZhbHVlICYm
IHZhbHVlICE9IHVuZGVmaW5lZCkKKyAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6
OmZyb20oaSkpOwogICB9Ci0gIHJldHVybiBKU09iamVjdDo6Z2V0UHJvcGVydHlMaXN0KHByb3Bl
cnR5TGlzdCwgcmVjdXJzaXZlKTsKKyAKKyAgSlNPYmplY3Q6OmdldFByb3BlcnR5TmFtZXMoZXhl
YywgcHJvcGVydHlOYW1lcyk7CiB9CiAKIHZvaWQgQXJyYXlJbnN0YW5jZTo6cmVzaXplU3RvcmFn
ZSh1bnNpZ25lZCBuZXdMZW5ndGgpCkBAIC0yNDMsMTggKzI0MiwxOCBAQCB2b2lkIEFycmF5SW5z
dGFuY2U6OnNldExlbmd0aCh1bnNpZ25lZCBuCiAgIH0KIAogICBpZiAobmV3TGVuZ3RoIDwgbGVu
Z3RoKSB7Ci0gICAgUmVmZXJlbmNlTGlzdCBzcGFyc2VQcm9wZXJ0aWVzOworICAgIFByb3BlcnR5
TmFtZUFycmF5IHNwYXJzZVByb3BlcnRpZXM7CiAgICAgCi0gICAgX3Byb3AuYWRkU3BhcnNlQXJy
YXlQcm9wZXJ0aWVzVG9SZWZlcmVuY2VMaXN0KHNwYXJzZVByb3BlcnRpZXMsIHRoaXMpOworICAg
IF9wcm9wLmdldFNwYXJzZUFycmF5UHJvcGVydHlOYW1lcyhzcGFyc2VQcm9wZXJ0aWVzKTsKICAg
ICAKLSAgICBSZWZlcmVuY2VMaXN0SXRlcmF0b3IgaXQgPSBzcGFyc2VQcm9wZXJ0aWVzLmJlZ2lu
KCk7Ci0gICAgd2hpbGUgKGl0ICE9IHNwYXJzZVByb3BlcnRpZXMuZW5kKCkpIHsKLSAgICAgIFJl
ZmVyZW5jZSByZWYgPSBpdCsrOworICAgIFByb3BlcnR5TmFtZUFycmF5SXRlcmF0b3IgZW5kID0g
c3BhcnNlUHJvcGVydGllcy5lbmQoKTsKKyAgICAKKyAgICBmb3IgKFByb3BlcnR5TmFtZUFycmF5
SXRlcmF0b3IgaXQgPSBzcGFyc2VQcm9wZXJ0aWVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
eworICAgICAgSWRlbnRpZmllciBuYW1lID0gKml0OwogICAgICAgYm9vbCBvazsKLSAgICAgIHVu
c2lnbmVkIGluZGV4ID0gcmVmLmdldFByb3BlcnR5TmFtZSgpLnRvQXJyYXlJbmRleCgmb2spOwot
ICAgICAgaWYgKG9rICYmIGluZGV4ID4gbmV3TGVuZ3RoKSB7Ci0gICAgICAgIHJlZi5kZWxldGVW
YWx1ZShleGVjKTsKLSAgICAgIH0KKyAgICAgIHVuc2lnbmVkIGluZGV4ID0gbmFtZS50b0FycmF5
SW5kZXgoJm9rKTsKKyAgICAgIGlmIChvayAmJiBpbmRleCA+IG5ld0xlbmd0aCkKKyAgICAgICAg
ZGVsZXRlUHJvcGVydHkoZXhlYywgbmFtZSk7CiAgICAgfQogICB9CiAgIApAQCAtMzYwLDIxICsz
NTksMjAgQEAgdW5zaWduZWQgQXJyYXlJbnN0YW5jZTo6cHVzaFVuZGVmaW5lZE9iagogICAgICAg
ICAgICAgbysrOwogICAgICAgICB9CiAgICAgfQotICAgIAotICAgIFJlZmVyZW5jZUxpc3Qgc3Bh
cnNlUHJvcGVydGllczsKLSAgICBfcHJvcC5hZGRTcGFyc2VBcnJheVByb3BlcnRpZXNUb1JlZmVy
ZW5jZUxpc3Qoc3BhcnNlUHJvcGVydGllcywgdGhpcyk7Ci0gICAgdW5zaWduZWQgbmV3TGVuZ3Ro
ID0gbyArIHNwYXJzZVByb3BlcnRpZXMubGVuZ3RoKCk7Ci0KLSAgICBpZiAobmV3TGVuZ3RoID4g
c3RvcmFnZUxlbmd0aCkgewotICAgICAgcmVzaXplU3RvcmFnZShuZXdMZW5ndGgpOwotICAgIH0g
Ci0KLSAgICBSZWZlcmVuY2VMaXN0SXRlcmF0b3IgaXQgPSBzcGFyc2VQcm9wZXJ0aWVzLmJlZ2lu
KCk7Ci0gICAgd2hpbGUgKGl0ICE9IHNwYXJzZVByb3BlcnRpZXMuZW5kKCkpIHsKLSAgICAgIFJl
ZmVyZW5jZSByZWYgPSBpdCsrOwotICAgICAgc3RvcmFnZVtvXSA9IHJlZi5nZXRWYWx1ZShleGVj
KTsKLSAgICAgIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eShleGVjLCByZWYuZ2V0UHJvcGVydHlO
YW1lKCkpOwotICAgICAgbysrOworICAgCisgICAgUHJvcGVydHlOYW1lQXJyYXkgc3BhcnNlUHJv
cGVydGllczsKKyAgICBfcHJvcC5nZXRTcGFyc2VBcnJheVByb3BlcnR5TmFtZXMoc3BhcnNlUHJv
cGVydGllcyk7CisgICAgdW5zaWduZWQgbmV3TGVuZ3RoID0gbyArIHNwYXJzZVByb3BlcnRpZXMu
c2l6ZSgpOworICAgIAorICAgIGlmIChuZXdMZW5ndGggPiBzdG9yYWdlTGVuZ3RoKQorICAgICAg
ICByZXNpemVTdG9yYWdlKG5ld0xlbmd0aCk7CisgICAgCisgICAgUHJvcGVydHlOYW1lQXJyYXlJ
dGVyYXRvciBlbmQgPSBzcGFyc2VQcm9wZXJ0aWVzLmVuZCgpOworICAgIGZvciAoUHJvcGVydHlO
YW1lQXJyYXlJdGVyYXRvciBpdCA9IHNwYXJzZVByb3BlcnRpZXMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7CisgICAgICAgIElkZW50aWZpZXIgbmFtZSA9ICppdDsKKyAgICAgICAgc3RvcmFn
ZVtvXSA9IGdldChleGVjLCBuYW1lKTsKKyAgICAgICAgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5
KGV4ZWMsIG5hbWUpOworICAgICAgICBvKys7CiAgICAgfQogICAgIAogICAgIGlmIChuZXdMZW5n
dGggIT0gc3RvcmFnZUxlbmd0aCkKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL25vZGVzLmNwcAkocmV2aXNpb24gMTU0
NjEpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NSw3ICszNSw3IEBACiAjaW5jbHVkZSAiZnVuY3Rpb25fb2JqZWN0LmgiCiAjaW5jbHVkZSAibGV4
ZXIuaCIKICNpbmNsdWRlICJvcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAicmVmZXJlbmNlX2xpc3Qu
aCIKKyNpbmNsdWRlICJQcm9wZXJ0eU5hbWVBcnJheS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL01hdGhF
eHRyYXMuaD4KQEAgLTE4NTksNyArMTg1OSw3IEBAIENvbXBsZXRpb24gRm9ySW5Ob2RlOjpleGVj
dXRlKEV4ZWNTdGF0ZSAKICAgSlNWYWx1ZSAqcmV0dmFsID0gMDsKICAgSlNPYmplY3QgKnY7CiAg
IENvbXBsZXRpb24gYzsKLSAgUmVmZXJlbmNlTGlzdCBwcm9wZXJ0eUxpc3Q7CisgIFByb3BlcnR5
TmFtZUFycmF5IHByb3BlcnR5TmFtZXM7CiAKICAgaWYgKHZhckRlY2wpIHsKICAgICB2YXJEZWNs
LT5ldmFsdWF0ZShleGVjKTsKQEAgLTE4NzgsMjAgKzE4NzgsMTcgQEAgQ29tcGxldGlvbiBGb3JJ
bk5vZGU6OmV4ZWN1dGUoRXhlY1N0YXRlIAogCiAgIEtKU19DSEVDS0VYQ0VQVElPTgogICB2ID0g
ZS0+dG9PYmplY3QoZXhlYyk7Ci0gIHYtPmdldFByb3BlcnR5TGlzdChwcm9wZXJ0eUxpc3QpOwot
Ci0gIFJlZmVyZW5jZUxpc3RJdGVyYXRvciBwcm9wSXQgPSBwcm9wZXJ0eUxpc3QuYmVnaW4oKTsK
LQotICB3aGlsZSAocHJvcEl0ICE9IHByb3BlcnR5TGlzdC5lbmQoKSkgewotICAgIElkZW50aWZp
ZXIgbmFtZSA9IHByb3BJdC0+Z2V0UHJvcGVydHlOYW1lKCk7Ci0gICAgaWYgKCF2LT5oYXNQcm9w
ZXJ0eShleGVjLCBuYW1lKSkgewotICAgICAgcHJvcEl0Kys7Ci0gICAgICBjb250aW51ZTsKLSAg
ICB9CisgIHYtPmdldFByb3BlcnR5TmFtZXMoZXhlYywgcHJvcGVydHlOYW1lcyk7CisgIAorICBQ
cm9wZXJ0eU5hbWVBcnJheUl0ZXJhdG9yIGVuZCA9IHByb3BlcnR5TmFtZXMuZW5kKCk7CisgIGZv
ciAoUHJvcGVydHlOYW1lQXJyYXlJdGVyYXRvciBpdCA9IHByb3BlcnR5TmFtZXMuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7CisgICAgICBjb25zdCBJZGVudGlmaWVyICZuYW1lID0gKml0Owor
ICAgICAgaWYgKCF2LT5oYXNQcm9wZXJ0eShleGVjLCBuYW1lKSkKKyAgICAgICAgICBjb250aW51
ZTsKIAotICAgIEpTVmFsdWUgKnN0ciA9IGpzU3RyaW5nKG5hbWUudXN0cmluZygpKTsKKyAgICAg
IEpTVmFsdWUgKnN0ciA9IGpzU3RyaW5nKG5hbWUudXN0cmluZygpKTsKIAotICAgIGlmIChsZXhw
ci0+aXNSZXNvbHZlTm9kZSgpKSB7CisgICAgICBpZiAobGV4cHItPmlzUmVzb2x2ZU5vZGUoKSkg
ewogICAgICAgICBjb25zdCBJZGVudGlmaWVyICZpZGVudCA9IHN0YXRpY19jYXN0PFJlc29sdmVO
b2RlICo+KGxleHByLmdldCgpKS0+aWRlbnRpZmllcigpOwogCiAgICAgICAgIGNvbnN0IFNjb3Bl
Q2hhaW4mIGNoYWluID0gZXhlYy0+Y29udGV4dCgpLT5zY29wZUNoYWluKCk7CkBAIC0xOTUwLDgg
KzE5NDcsNiBAQCBDb21wbGV0aW9uIEZvckluTm9kZTo6ZXhlY3V0ZShFeGVjU3RhdGUgCiAgICAg
ICAgIHJldHVybiBjOwogICAgICAgfQogICAgIH0KLQotICAgIHByb3BJdCsrOwogICB9CiAKICAg
Ly8gYmFpbCBvdXQgb24gZXJyb3IKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5oCShyZXZpc2lvbiAxNTQ2MSkK
KysrIEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICsz
NCw2IEBAIG5hbWVzcGFjZSBLSlMgewogICBjbGFzcyBQcm9ncmFtTm9kZTsKICAgY2xhc3MgUHJv
cGVydHlOYW1lTm9kZTsKICAgY2xhc3MgUHJvcGVydHlMaXN0Tm9kZTsKLSAgY2xhc3MgUmVmZXJl
bmNlOwogICBjbGFzcyBSZWdFeHA7CiAgIGNsYXNzIFNvdXJjZUVsZW1lbnRzTm9kZTsKICAgY2xh
c3MgU291cmNlU3RyZWFtOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL29iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL29iamVjdC5jcHAJKHJldmlzaW9uIDE1NDYx
KQorKysgSmF2YVNjcmlwdENvcmUva2pzL29iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5
LDcgKzI5LDcgQEAKICNpbmNsdWRlICJsb29rdXAuaCIKICNpbmNsdWRlICJub2Rlcy5oIgogI2lu
Y2x1ZGUgIm9wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJyZWZlcmVuY2VfbGlzdC5oIgorI2luY2x1
ZGUgIlByb3BlcnR5TmFtZUFycmF5LmgiCiAjaW5jbHVkZSA8bWF0aC5oPgogCiAvLyBtYXhpbXVt
IGdsb2JhbCBjYWxsIHN0YWNrIHNpemUuIFByb3RlY3RzIGFnYWluc3QgYWNjaWRlbnRhbCBvcgpA
QCAtNDc1LDkgKzQ3NSw5IEBAIGJvb2wgSlNPYmplY3Q6OmdldFByb3BlcnR5QXR0cmlidXRlcyhj
b24KICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eUxpc3Qo
UmVmZXJlbmNlTGlzdCYgcHJvcGVydHlMaXN0LCBib29sIHJlY3Vyc2l2ZSkKK3ZvaWQgSlNPYmpl
Y3Q6OmdldFByb3BlcnR5TmFtZXMoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYg
cHJvcGVydHlOYW1lcykKIHsKLSAgX3Byb3AuYWRkRW51bWVyYWJsZXNUb1JlZmVyZW5jZUxpc3Qo
cHJvcGVydHlMaXN0LCB0aGlzKTsKKyAgIF9wcm9wLmdldEVudW1lcmFibGVQcm9wZXJ0eU5hbWVz
KHByb3BlcnR5TmFtZXMpOwogCiAgIC8vIEFkZCBwcm9wZXJ0aWVzIGZyb20gdGhlIHN0YXRpYyBo
YXNodGFibGUgb2YgcHJvcGVydGllcwogICBjb25zdCBDbGFzc0luZm8gKmluZm8gPSBjbGFzc0lu
Zm8oKTsKQEAgLTQ4NiwxNCArNDg2LDE0IEBAIHZvaWQgSlNPYmplY3Q6OmdldFByb3BlcnR5TGlz
dChSZWZlcmVuY2UKICAgICAgIGludCBzaXplID0gaW5mby0+cHJvcEhhc2hUYWJsZS0+c2l6ZTsK
ICAgICAgIGNvbnN0IEhhc2hFbnRyeSAqZSA9IGluZm8tPnByb3BIYXNoVGFibGUtPmVudHJpZXM7
CiAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSwgKytlKSB7Ci0gICAgICAgIGlm
ICggZS0+cyAmJiAhKGUtPmF0dHIgJiBEb250RW51bSkgKQotICAgICAgICAgIHByb3BlcnR5TGlz
dC5hcHBlbmQoUmVmZXJlbmNlKHRoaXMsIGUtPnMpKTsgLy8vICMjIyMjIyMjIyBjaGVjayBmb3Ig
ZHVwbGljYXRlcyB3aXRoIHRoZSBwcm9wZXJ0eW1hcAorICAgICAgICBpZiAoZS0+cyAmJiAhKGUt
PmF0dHIgJiBEb250RW51bSkpCisgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoZS0+cyk7CiAg
ICAgICB9CiAgICAgfQogICAgIGluZm8gPSBpbmZvLT5wYXJlbnRDbGFzczsKICAgfQotICBpZiAo
X3Byb3RvLT5pc09iamVjdCgpICYmIHJlY3Vyc2l2ZSkKLSAgICAgIHN0YXRpY19jYXN0PEpTT2Jq
ZWN0Kj4oX3Byb3RvKS0+Z2V0UHJvcGVydHlMaXN0KHByb3BlcnR5TGlzdCwgcmVjdXJzaXZlKTsK
KyAgaWYgKF9wcm90by0+aXNPYmplY3QoKSkKKyAgICAgc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihf
cHJvdG8pLT5nZXRQcm9wZXJ0eU5hbWVzKGV4ZWMsIHByb3BlcnR5TmFtZXMpOwogfQogCiBib29s
IEpTT2JqZWN0Ojp0b0Jvb2xlYW4oRXhlY1N0YXRlICovKmV4ZWMqLykgY29uc3QKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL2tqcy9vYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9r
anMvb2JqZWN0LmgJKHJldmlzaW9uIDE1NDYxKQorKysgSmF2YVNjcmlwdENvcmUva2pzL29iamVj
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICBj
bGFzcyBIYXNoRW50cnk7CiAgIGNsYXNzIExpc3RJbXA7CiAgIGNsYXNzIEludGVybmFsRnVuY3Rp
b25JbXA7CisgIGNsYXNzIFByb3BlcnR5TmFtZUFycmF5OwogCiAgIC8vIEVDTUEgMjYyLTMgOC42
LjEKICAgLy8gUHJvcGVydHkgYXR0cmlidXRlcwpAQCAtNDQwLDIzICs0NDEsNyBAQCBuYW1lc3Bh
Y2UgS0pTIHsKICAgICBjb25zdCBTY29wZUNoYWluICZzY29wZSgpIGNvbnN0IHsgcmV0dXJuIF9z
Y29wZTsgfQogICAgIHZvaWQgc2V0U2NvcGUoY29uc3QgU2NvcGVDaGFpbiAmcykgeyBfc2NvcGUg
PSBzOyB9CiAKLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEgTGlzdCBvZiBSZWZlcmVuY2VzIHRv
IGFsbCB0aGUgcHJvcGVydGllcyBvZiB0aGUgb2JqZWN0LiBVc2VkCi0gICAgICogaW4gImZvciB4
IGluIHkiIHN0YXRlbWVudHMuIFRoZSBsaXN0IGlzIGNyZWF0ZWQgbmV3LCBzbyBpdCBjYW4gYmUg
ZnJlZWx5Ci0gICAgICogbW9kaWZpZWQgd2l0aG91dCBhZmZlY3RpbmcgdGhlIG9iamVjdCdzIHBy
b3BlcnRpZXMuIEl0IHNob3VsZCBiZSBkZWxldGVkCi0gICAgICogYnkgdGhlIGNhbGxlci4KLSAg
ICAgKgotICAgICAqIFN1YmNsYXNzZXMgY2FuIG92ZXJyaWRlIHRoaXMgbWV0aG9kIGluIE9iamVj
dEltcGwgdG8gcHJvdmlkZSB0aGUKLSAgICAgKiBhcHBlYXJhbmNlIG9mCi0gICAgICogaGF2aW5n
IGV4dHJhIHByb3BlcnRpZXMgb3RoZXIgdGhhbiB0aG9zZSBzZXQgc3BlY2lmaWNhbGx5IHdpdGgg
cHV0KCkuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gZXhlYyBUaGUgY3VycmVudCBleGVjdXRpb24g
c3RhdGUKLSAgICAgKiBAcGFyYW0gcmVjdXJzaXZlIFdoZXRoZXIgb3Igbm90IHByb3BlcnRpZXMg
aW4gdGhlIG9iamVjdCdzIHByb3RvdHlwZQotICAgICAqIGNoYWluIHNob3VsZCBiZQotICAgICAq
IGluY2x1ZGVkIGluIHRoZSBsaXN0LgotICAgICAqIEByZXR1cm4gQSBMaXN0IG9mIFJlZmVyZW5j
ZXMgdG8gcHJvcGVydGllcyBvZiB0aGUgb2JqZWN0LgotICAgICAqKi8KLSAgICB2aXJ0dWFsIHZv
aWQgZ2V0UHJvcGVydHlMaXN0KFJlZmVyZW5jZUxpc3QmIHByb3BlcnR5TGlzdCwgYm9vbCByZWN1
cnNpdmUgPSB0cnVlKTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhFeGVjU3Rh
dGUgKmV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzKTsKIAogICAgIC8qKgog
ICAgICAqIFJldHVybnMgdGhlIGludGVybmFsIHZhbHVlIG9mIHRoZSBvYmplY3QuIFRoaXMgaXMg
dXNlZCBmb3Igb2JqZWN0cyBzdWNoCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvcHJvcGVydHlf
bWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvcHJvcGVydHlfbWFwLmNw
cAkocmV2aXNpb24gMTU0NjEpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvcHJvcGVydHlfbWFwLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogCiAjaW5jbHVkZSAib2JqZWN0Lmgi
CiAjaW5jbHVkZSAicHJvdGVjdC5oIgotI2luY2x1ZGUgInJlZmVyZW5jZV9saXN0LmgiCisjaW5j
bHVkZSAiUHJvcGVydHlOYW1lQXJyYXkuaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVk
ZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC03NCw3ICs3
NCw3IEBAIFByb3BlcnR5TWFwU3RhdGlzdGljc0V4aXRMb2dnZXI6On5Qcm9wZXIKICNlbmRpZgog
CiAvLyBsYXN0SW5kZXhVc2VkIGlzIGFuIGV2ZXItaW5jcmVhc2luZyBpbmRleCB1c2VkIHRvIGlk
ZW50aWZ5IHRoZSBvcmRlciBpdGVtcwotLy8gd2VyZSBpbnNlcnRlZCBpbnRvIHRoZSBwcm9wZXJ0
eSBtYXAuIEl0J3Mgdml0YWwgdGhhdCBhZGRFbnVtZXJhYmxlc1RvUmVmZXJlbmNlTGlzdAorLy8g
d2VyZSBpbnNlcnRlZCBpbnRvIHRoZSBwcm9wZXJ0eSBtYXAuIEl0J3Mgdml0YWwgdGhhdCBnZXRF
bnVtZXJhYmxlUHJvcGVydHlOYW1lcwogLy8gcmV0dXJuIHRoZSBwcm9wZXJ0aWVzIGluIHRoZSBv
cmRlciB0aGV5IHdlcmUgYWRkZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvdGhlcgogLy8gYnJv
d3NlcnMnIEphdmFTY3JpcHQgaW1wbGVtZW50YXRpb25zLgogc3RydWN0IFByb3BlcnR5TWFwSGFz
aFRhYmxlCkBAIC01ODMsMTMgKzU4MywxMyBAQCBib29sIFByb3BlcnR5TWFwOjpjb250YWluc0dl
dHRlcnNPclNldHRlCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFByb3BlcnR5TWFwOjph
ZGRFbnVtZXJhYmxlc1RvUmVmZXJlbmNlTGlzdChSZWZlcmVuY2VMaXN0ICZsaXN0LCBKU09iamVj
dCAqYmFzZSkgY29uc3QKK3ZvaWQgUHJvcGVydHlNYXA6OmdldEVudW1lcmFibGVQcm9wZXJ0eU5h
bWVzKFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzKSBjb25zdAogewogICAgIGlmICgh
X3RhYmxlKSB7CiAjaWYgVVNFX1NJTkdMRV9FTlRSWQogICAgICAgICBVU3RyaW5nOjpSZXAgKmtl
eSA9IF9zaW5nbGVFbnRyeS5rZXk7CiAgICAgICAgIGlmIChrZXkgJiYgIShfc2luZ2xlRW50cnku
YXR0cmlidXRlcyAmIERvbnRFbnVtKSkKLSAgICAgICAgICAgIGxpc3QuYXBwZW5kKFJlZmVyZW5j
ZShiYXNlLCBJZGVudGlmaWVyKGtleSkpKTsKKyAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRk
KElkZW50aWZpZXIoa2V5KSk7CiAjZW5kaWYKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTYx
MCwxMiArNjEwLDEyIEBAIHZvaWQgUHJvcGVydHlNYXA6OmFkZEVudW1lcmFibGVzVG9SZWZlcmUK
ICAgICAvLyBTb3J0IHRoZSBlbnRyaWVzIGJ5IGluZGV4LgogICAgIHFzb3J0KHNvcnRlZEVudW1l
cmFibGVzLmRhdGEoKSwgcCAtIHNvcnRlZEVudW1lcmFibGVzLmRhdGEoKSwgc2l6ZW9mKEVudHJ5
KiksIGNvbXBhcmVQcm9wZXJ0eU1hcEVudHJ5SW5kaWNlcyk7CiAKLSAgICAvLyBQdXQgdGhlIGtl
eXMgb2YgdGhlIHNvcnRlZCBlbnRyaWVzIGludG8gdGhlIHJlZmVyZW5jZSBsaXN0LgorICAgIC8v
IFB1dCB0aGUga2V5cyBvZiB0aGUgc29ydGVkIGVudHJpZXMgaW50byB0aGUgbGlzdC4KICAgICBm
b3IgKEVudHJ5KiogcSA9IHNvcnRlZEVudW1lcmFibGVzLmRhdGEoKTsgcSAhPSBwOyArK3EpCi0g
ICAgICAgIGxpc3QuYXBwZW5kKFJlZmVyZW5jZShiYXNlLCBJZGVudGlmaWVyKCgqcSktPmtleSkp
KTsKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihxWzBdLT5rZXkpKTsKIH0K
IAotdm9pZCBQcm9wZXJ0eU1hcDo6YWRkU3BhcnNlQXJyYXlQcm9wZXJ0aWVzVG9SZWZlcmVuY2VM
aXN0KFJlZmVyZW5jZUxpc3QgJmxpc3QsIEpTT2JqZWN0ICpiYXNlKSBjb25zdAordm9pZCBQcm9w
ZXJ0eU1hcDo6Z2V0U3BhcnNlQXJyYXlQcm9wZXJ0eU5hbWVzKFByb3BlcnR5TmFtZUFycmF5JiBw
cm9wZXJ0eU5hbWVzKSBjb25zdAogewogICAgIGlmICghX3RhYmxlKSB7CiAjaWYgVVNFX1NJTkdM
RV9FTlRSWQpAQCAtNjI1LDcgKzYyNSw3IEBAIHZvaWQgUHJvcGVydHlNYXA6OmFkZFNwYXJzZUFy
cmF5UHJvcGVydGkKICAgICAgICAgICAgIGJvb2wgZml0c0luVUludDMyOwogICAgICAgICAgICAg
ay50b1VJbnQzMigmZml0c0luVUludDMyKTsKICAgICAgICAgICAgIGlmIChmaXRzSW5VSW50MzIp
Ci0gICAgICAgICAgICAgICAgbGlzdC5hcHBlbmQoUmVmZXJlbmNlKGJhc2UsIElkZW50aWZpZXIo
a2V5KSkpOworICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXIoa2V5
KSk7CiAgICAgICAgIH0KICNlbmRpZgogICAgICAgICByZXR1cm47CkBAIC02NDAsNyArNjQwLDcg
QEAgdm9pZCBQcm9wZXJ0eU1hcDo6YWRkU3BhcnNlQXJyYXlQcm9wZXJ0aQogICAgICAgICAgICAg
Ym9vbCBmaXRzSW5VSW50MzI7CiAgICAgICAgICAgICBrLnRvVUludDMyKCZmaXRzSW5VSW50MzIp
OwogICAgICAgICAgICAgaWYgKGZpdHNJblVJbnQzMikKLSAgICAgICAgICAgICAgICBsaXN0LmFw
cGVuZChSZWZlcmVuY2UoYmFzZSwgSWRlbnRpZmllcihrZXkpKSk7CisgICAgICAgICAgICAgICAg
cHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihrZXkpKTsKICAgICAgICAgfQogICAgIH0KIH0K
SW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9wcm9wZXJ0eV9tYXAuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9ranMvcHJvcGVydHlfbWFwLmgJKHJldmlzaW9uIDE1NDYxKQorKysgSmF2
YVNjcmlwdENvcmUva2pzL3Byb3BlcnR5X21hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsy
OCw4IEBACiAKIG5hbWVzcGFjZSBLSlMgewogCisgICAgY2xhc3MgUHJvcGVydHlOYW1lQXJyYXk7
CiAgICAgY2xhc3MgSlNPYmplY3Q7Ci0gICAgY2xhc3MgUmVmZXJlbmNlTGlzdDsKICAgICBjbGFz
cyBKU1ZhbHVlOwogICAgIAogICAgIGNsYXNzIFNhdmVkUHJvcGVydHk7CkBAIC04MCw4ICs4MCw4
IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICBKU1ZhbHVlICoqZ2V0TG9jYXRpb24oY29uc3Qg
SWRlbnRpZmllciAmbmFtZSk7CiAKICAgICAgICAgdm9pZCBtYXJrKCkgY29uc3Q7Ci0gICAgICAg
IHZvaWQgYWRkRW51bWVyYWJsZXNUb1JlZmVyZW5jZUxpc3QoUmVmZXJlbmNlTGlzdCAmLCBKU09i
amVjdCAqKSBjb25zdDsKLSAgICAgICAgdm9pZCBhZGRTcGFyc2VBcnJheVByb3BlcnRpZXNUb1Jl
ZmVyZW5jZUxpc3QoUmVmZXJlbmNlTGlzdCAmLCBKU09iamVjdCAqKSBjb25zdDsKKyAgICAgICAg
dm9pZCBnZXRFbnVtZXJhYmxlUHJvcGVydHlOYW1lcyhQcm9wZXJ0eU5hbWVBcnJheSYpIGNvbnN0
OworICAgICAgICB2b2lkIGdldFNwYXJzZUFycmF5UHJvcGVydHlOYW1lcyhQcm9wZXJ0eU5hbWVB
cnJheSYpIGNvbnN0OwogCiAgICAgICAgIHZvaWQgc2F2ZShTYXZlZFByb3BlcnRpZXMgJikgY29u
c3Q7CiAgICAgICAgIHZvaWQgcmVzdG9yZShjb25zdCBTYXZlZFByb3BlcnRpZXMgJnApOwpJbmRl
eDogSmF2YVNjcmlwdENvcmUva2pzL3Byb3RlY3RlZF9yZWZlcmVuY2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0Q29yZS9ranMvcHJvdGVjdGVkX3JlZmVyZW5jZS5oCShyZXZpc2lvbiAxNTQ2
MSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9wcm90ZWN0ZWRfcmVmZXJlbmNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNjUgKzAsMCBAQAotLy8gLSotIGMtYmFzaWMtb2Zmc2V0OiA0IC0qLQotLyoK
LSAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIGxpYnJhcmllcwotICogIENvcHlyaWdo
dCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBL
SlNfUFJPVEVDVEVEX1JFRkVSRU5DRV9ICi0jZGVmaW5lIEtKU19QUk9URUNURURfUkVGRVJFTkNF
X0gKLQotI2luY2x1ZGUgInByb3RlY3QuaCIKLQotbmFtZXNwYWNlIEtKUyB7Ci0KLSAgICBjbGFz
cyBQcm90ZWN0ZWRSZWZlcmVuY2UgOiBwdWJsaWMgUmVmZXJlbmNlIHsKLSAgICBwdWJsaWM6Ci0g
ICAgICAgIFByb3RlY3RlZFJlZmVyZW5jZShjb25zdCBSZWZlcmVuY2UmIHIpIAotICAgICAgICAg
ICAgOiBSZWZlcmVuY2UocikgCi0gICAgICAgIHsKLSAgICAgICAgICAgIEpTTG9jayBsb2NrOwot
ICAgICAgICAgICAgZ2NQcm90ZWN0TnVsbFRvbGVyYW50KGJhc2UpOyAKLSAgICAgICAgfQotCi0g
ICAgICAgIH5Qcm90ZWN0ZWRSZWZlcmVuY2UoKQotICAgICAgICB7IAotICAgICAgICAgICAgSlNM
b2NrIGxvY2s7Ci0gICAgICAgICAgICBnY1VucHJvdGVjdE51bGxUb2xlcmFudChiYXNlKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIFByb3RlY3RlZFJlZmVyZW5jZSYgb3BlcmF0b3I9KGNvbnN0IFJl
ZmVyZW5jZSAmcikKLSAgICAgICAgewotICAgICAgICAgICAgSlNMb2NrIGxvY2s7Ci0gICAgICAg
ICAgICBKU1ZhbHVlICpvbGQgPSBiYXNlOwotICAgICAgICAgICAgUmVmZXJlbmNlOjpvcGVyYXRv
cj0ocik7IAotICAgICAgICAgICAgZ2NQcm90ZWN0TnVsbFRvbGVyYW50KGJhc2UpOwotICAgICAg
ICAgICAgZ2NVbnByb3RlY3ROdWxsVG9sZXJhbnQob2xkKTsgCi0gICAgICAgICAgICByZXR1cm4g
KnRoaXM7Ci0gICAgICAgIH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFByb3RlY3RlZFJlZmVy
ZW5jZSgpOwotICAgICAgICBQcm90ZWN0ZWRSZWZlcmVuY2UoSlNPYmplY3QgKmIsIGNvbnN0IElk
ZW50aWZpZXImIHApOwotICAgICAgICBQcm90ZWN0ZWRSZWZlcmVuY2UoSlNPYmplY3QgKmIsIHVu
c2lnbmVkIHApOwotICAgICAgICBQcm90ZWN0ZWRSZWZlcmVuY2UoY29uc3QgSWRlbnRpZmllciYg
cCk7Ci0gICAgICAgIFByb3RlY3RlZFJlZmVyZW5jZSh1bnNpZ25lZCBwKTsKLSAgICB9OwotCi19
IC8vIG5hbWVzcGFjZQotCi0jZW5kaWYKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9yZWZlcmVu
Y2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9yZWZlcmVuY2UuY3BwCShy
ZXZpc2lvbiAxNTQ2MSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9yZWZlcmVuY2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDgzICswLDAgQEAKLS8vIC0qLSBjLWJhc2ljLW9mZnNldDogMiAtKi0K
LS8qCi0gKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBsaWJyYXJpZXMKLSAqICBDb3B5
cmlnaHQgKEMpIDIwMDQgQXBwbGUgQ29tcHV0ZXIsIEluYwotICoKLSAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
LSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2luY2x1
ZGUgIkpTVHlwZS5oIgotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgImludGVybmFsLmgi
Ci0jaW5jbHVkZSAicmVmZXJlbmNlLmgiCi0KLW5hbWVzcGFjZSBLSlMgewotCi0vLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUmVmZXJlbmNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi1SZWZlcmVuY2U6OlJlZmVyZW5jZShKU09iamVjdCAqYiwgY29uc3Qg
SWRlbnRpZmllciYgcCkKLSAgOiBiYXNlKGIpLAotICAgIHByb3BlcnR5TmFtZUlzTnVtYmVyKGZh
bHNlKSwKLSAgICBwcm9wKHApCi17Ci19Ci0KLVJlZmVyZW5jZTo6UmVmZXJlbmNlKEpTT2JqZWN0
ICpiLCB1bnNpZ25lZCBwKQotICA6IGJhc2UoYiksCi0gICAgcHJvcGVydHlOYW1lQXNOdW1iZXIo
cCksCi0gICAgcHJvcGVydHlOYW1lSXNOdW1iZXIodHJ1ZSkKLXsKLX0KLQotSWRlbnRpZmllciBS
ZWZlcmVuY2U6OmdldFByb3BlcnR5TmFtZSgpIGNvbnN0Ci17Ci0gIGlmIChwcm9wZXJ0eU5hbWVJ
c051bWJlciAmJiBwcm9wLmlzTnVsbCgpKQotICAgIHByb3AgPSBJZGVudGlmaWVyOjpmcm9tKHBy
b3BlcnR5TmFtZUFzTnVtYmVyKTsKLSAgcmV0dXJuIHByb3A7Ci19Ci0KLUpTVmFsdWUgKlJlZmVy
ZW5jZTo6Z2V0VmFsdWUoRXhlY1N0YXRlICpleGVjKSBjb25zdCAKLXsKLSAgSlNWYWx1ZSAqbyA9
IGJhc2U7Ci0gIGlmICghbyB8fCAhby0+aXNPYmplY3QoKSkgewotICAgIGlmICghbyB8fCBvLT5p
c051bGwoKSkKLSAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFJlZmVyZW5jZUVycm9yLCAi
Q2FuJ3QgZmluZCB2YXJpYWJsZTogIiArIGdldFByb3BlcnR5TmFtZSgpLnVzdHJpbmcoKSk7Ci0g
ICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgUmVmZXJlbmNlRXJyb3IsICJCYXNlIGlzIG5vdCBh
biBvYmplY3QiKTsKLSAgfQotCi0gIGlmIChwcm9wZXJ0eU5hbWVJc051bWJlcikKLSAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihvKS0+Z2V0KGV4ZWMsIHByb3BlcnR5TmFtZUFzTnVt
YmVyKTsKLSAgcmV0dXJuIHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4obyktPmdldChleGVjLCBwcm9w
KTsKLX0KLQotYm9vbCBSZWZlcmVuY2U6OmRlbGV0ZVZhbHVlKEV4ZWNTdGF0ZSAqZXhlYykKLXsK
LSAgSlNWYWx1ZSAqbyA9IGJhc2U7Ci0gIEpTVHlwZSB0ID0gbyA/IG8tPnR5cGUoKSA6IE51bGxU
eXBlOwotCi0gIC8vIFRoZSBzcGVjIGRvZXNuJ3QgbWVudGlvbiB3aGF0IHRvIGRvIGlmIHRoZSBi
YXNlIGlzIG51bGwuLi4ganVzdCByZXR1cm4gdHJ1ZQotICBpZiAodCAhPSBPYmplY3RUeXBlKSB7
Ci0gICAgYXNzZXJ0KHQgPT0gTnVsbFR5cGUpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAg
aWYgKHByb3BlcnR5TmFtZUlzTnVtYmVyKQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU09iamVj
dCo+KG8pLT5kZWxldGVQcm9wZXJ0eShleGVjLHByb3BlcnR5TmFtZUFzTnVtYmVyKTsKLSAgcmV0
dXJuIHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4obyktPmRlbGV0ZVByb3BlcnR5KGV4ZWMscHJvcCk7
Ci19Ci0KLX0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9yZWZlcmVuY2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvcmVmZXJlbmNlLmgJKHJldmlzaW9uIDE1NDYxKQorKysg
SmF2YVNjcmlwdENvcmUva2pzL3JlZmVyZW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcwICsw
LDAgQEAKLS8vIC0qLSBjLWJhc2ljLW9mZnNldDogMiAtKi0KLS8qCi0gKiAgVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIEtERSBsaWJyYXJpZXMKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMgQXBwbGUg
Q29tcHV0ZXIsIEluYwotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBLSlNfUkVGRVJFTkNFX0hfCi0j
ZGVmaW5lIEtKU19SRUZFUkVOQ0VfSF8KLQotI2luY2x1ZGUgIm9iamVjdC5oIgotCi1uYW1lc3Bh
Y2UgS0pTIHsKLQotICBjbGFzcyBKU09iamVjdDsKLQotICBjbGFzcyBSZWZlcmVuY2UgewotICAg
IGZyaWVuZCBjbGFzcyBSZWZlcmVuY2VMaXN0OwotICAgIGZyaWVuZCBjbGFzcyBSZWZlcmVuY2VM
aXN0SXRlcmF0b3I7Ci0gIHB1YmxpYzoKLSAgICBSZWZlcmVuY2UoSlNPYmplY3QgKmIsIGNvbnN0
IElkZW50aWZpZXImIHApOwotICAgIFJlZmVyZW5jZShKU09iamVjdCAqYiwgdW5zaWduZWQgcCk7
Ci0gICAgCi0gICAgLyoqCi0gICAgICogUGVyZm9ybXMgdGhlIEdldFByb3BlcnR5TmFtZSB0eXBl
IGNvbnZlcnNpb24gb3BlcmF0aW9uIG9uIHRoaXMgdmFsdWUKLSAgICAgKiAoRUNNQSA4LjcpCi0g
ICAgICovCi0gICAgSWRlbnRpZmllciBnZXRQcm9wZXJ0eU5hbWUoKSBjb25zdDsKLQotICAgIC8q
KgotICAgICAqIFBlcmZvcm1zIHRoZSBHZXRWYWx1ZSB0eXBlIGNvbnZlcnNpb24gb3BlcmF0aW9u
IG9uIHRoaXMgdmFsdWUKLSAgICAgKiAoRUNNQSA4LjcuMSkKLSAgICAgKi8KLSAgICBKU1ZhbHVl
ICpnZXRWYWx1ZShFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogUGVy
Zm9ybXMgdGhlIFB1dFZhbHVlIHR5cGUgY29udmVyc2lvbiBvcGVyYXRpb24gb24gdGhpcyB2YWx1
ZQotICAgICAqIChFQ01BIDguNy4xKQotICAgICAqLwotICAgIGJvb2wgZGVsZXRlVmFsdWUoRXhl
Y1N0YXRlICpleGVjKTsKLQotICBwcm90ZWN0ZWQ6Ci0gICAgSlNWYWx1ZSAqYmFzZTsKLQotICBw
cml2YXRlOgotICAgIFJlZmVyZW5jZSgpIHsgfQotCi0gICAgdW5zaWduZWQgcHJvcGVydHlOYW1l
QXNOdW1iZXI7Ci0gICAgYm9vbCBwcm9wZXJ0eU5hbWVJc051bWJlcjsKLSAgICBtdXRhYmxlIElk
ZW50aWZpZXIgcHJvcDsKLSAgfTsKLQotfQotCi0jZW5kaWYKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L2tqcy9yZWZlcmVuY2VfbGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pz
L3JlZmVyZW5jZV9saXN0LmNwcAkocmV2aXNpb24gMTU0NjEpCisrKyBKYXZhU2NyaXB0Q29yZS9r
anMvcmVmZXJlbmNlX2xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE1NyArMCwwIEBACi0v
LyAtKi0gYy1iYXNpYy1vZmZzZXQ6IDIgLSotCi0vKgotICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBLREUgbGlicmFyaWVzCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzIEFwcGxlIENvbXB1dGVy
LCBJbmMKLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
LSAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bwotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJyZWZl
cmVuY2VfbGlzdC5oIgotCi0jaW5jbHVkZSAicHJvdGVjdGVkX3JlZmVyZW5jZS5oIgotCi1uYW1l
c3BhY2UgS0pTIHsKLSAgY2xhc3MgUmVmZXJlbmNlTGlzdE5vZGUgewotICAgIGZyaWVuZCBjbGFz
cyBSZWZlcmVuY2VMaXN0OwotICAgIGZyaWVuZCBjbGFzcyBSZWZlcmVuY2VMaXN0SXRlcmF0b3I7
Ci0KLSAgcHJvdGVjdGVkOgotICAgIFJlZmVyZW5jZUxpc3ROb2RlKGNvbnN0IFJlZmVyZW5jZSAm
cmVmKSA6IHJlZmVyZW5jZShyZWYpLCBuZXh0KE5VTEwpIHt9Ci0KLSAgcHJpdmF0ZToKLSAgICBQ
cm90ZWN0ZWRSZWZlcmVuY2UgcmVmZXJlbmNlOwotICAgIFJlZmVyZW5jZUxpc3ROb2RlICpuZXh0
OwotICB9OwotCi0gIGNsYXNzIFJlZmVyZW5jZUxpc3RIZWFkTm9kZSA6IFJlZmVyZW5jZUxpc3RO
b2RlIHsKLSAgICBmcmllbmQgY2xhc3MgUmVmZXJlbmNlTGlzdDsKLSAgICBmcmllbmQgY2xhc3Mg
UmVmZXJlbmNlTGlzdEl0ZXJhdG9yOwotICAgIAotICAgIFJlZmVyZW5jZUxpc3RIZWFkTm9kZShj
b25zdCBSZWZlcmVuY2UgJnJlZikgOiBSZWZlcmVuY2VMaXN0Tm9kZShyZWYpLCByZWZjb3VudCgx
KSB7fQotICAgIGludCByZWZjb3VudDsKLSAgICBpbnQgbGVuZ3RoOwotICB9OwotCi19Ci0KLXVz
aW5nIG5hbWVzcGFjZSBLSlM7Ci0KLS8vIFJlZmVyZW5jZUxpc3QKLQotUmVmZXJlbmNlTGlzdDo6
UmVmZXJlbmNlTGlzdCgpIDogCi0gIGhlYWQoTlVMTCksCi0gIHRhaWwoTlVMTCkKLXsKLX0KLQot
UmVmZXJlbmNlTGlzdDo6UmVmZXJlbmNlTGlzdChjb25zdCBSZWZlcmVuY2VMaXN0ICZsaXN0KQot
ewotICBoZWFkID0gbGlzdC5oZWFkOwotICB0YWlsID0gbGlzdC50YWlsOwotICBpZiAoaGVhZCAh
PSBOVUxMKSB7Ci0gICAgaGVhZC0+cmVmY291bnQrKzsKLSAgfQotfQotCi1SZWZlcmVuY2VMaXN0
ICZSZWZlcmVuY2VMaXN0OjpvcGVyYXRvcj0oY29uc3QgUmVmZXJlbmNlTGlzdCAmbGlzdCkKLXsK
LSAgUmVmZXJlbmNlTGlzdCB0bXAobGlzdCk7Ci0gIHRtcC5zd2FwKCp0aGlzKTsKLQotICByZXR1
cm4gKnRoaXM7Ci19Ci0KLXZvaWQgUmVmZXJlbmNlTGlzdDo6c3dhcChSZWZlcmVuY2VMaXN0ICZs
aXN0KQotewotICBSZWZlcmVuY2VMaXN0SGVhZE5vZGUgKnRtcEhlYWQgPSBsaXN0LmhlYWQ7Ci0g
IGxpc3QuaGVhZCA9IGhlYWQ7Ci0gIGhlYWQgPSB0bXBIZWFkOwotCi0gIFJlZmVyZW5jZUxpc3RO
b2RlICp0bXBUYWlsID0gbGlzdC50YWlsOwotICBsaXN0LnRhaWwgPSB0YWlsOwotICB0YWlsID0g
dG1wVGFpbDsKLX0KLQotCi12b2lkIFJlZmVyZW5jZUxpc3Q6OmFwcGVuZChjb25zdCBSZWZlcmVu
Y2UmIHJlZikKLXsKLSAgaWYgKHRhaWwgPT0gTlVMTCkgewotICAgIHRhaWwgPSBoZWFkID0gbmV3
IFJlZmVyZW5jZUxpc3RIZWFkTm9kZShyZWYpOwotICB9IGVsc2UgewotICAgIHRhaWwtPm5leHQg
PSBuZXcgUmVmZXJlbmNlTGlzdE5vZGUocmVmKTsKLSAgICB0YWlsID0gdGFpbC0+bmV4dDsKLSAg
fQotICBoZWFkLT5sZW5ndGgrKzsKLX0KLQotaW50IFJlZmVyZW5jZUxpc3Q6Omxlbmd0aCgpCi17
Ci0gIHJldHVybiBoZWFkID8gaGVhZC0+bGVuZ3RoIDogMDsKLX0KLQotUmVmZXJlbmNlTGlzdDo6
flJlZmVyZW5jZUxpc3QoKQotewotICBpZiAoaGVhZCAhPSBOVUxMICYmIC0tKGhlYWQtPnJlZmNv
dW50KSA9PSAwKSB7Ci0gICAgUmVmZXJlbmNlTGlzdE5vZGUgKm5leHQ7Ci0gICAgCi0gICAgZm9y
IChSZWZlcmVuY2VMaXN0Tm9kZSAqcCA9IGhlYWQ7IHAgIT0gTlVMTDsgcCA9IG5leHQpIHsKLSAg
ICAgIG5leHQgPSBwLT5uZXh0OwotICAgICAgaWYgKHAgPT0gaGVhZCkgewotICAgICAgICBkZWxl
dGUgKFJlZmVyZW5jZUxpc3RIZWFkTm9kZSAqKXA7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBk
ZWxldGUgcDsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KLSAgICAKLVJlZmVyZW5jZUxpc3RJdGVy
YXRvciBSZWZlcmVuY2VMaXN0OjpiZWdpbigpIGNvbnN0Ci17Ci0gIHJldHVybiBSZWZlcmVuY2VM
aXN0SXRlcmF0b3IoaGVhZCk7Ci19Ci0KLVJlZmVyZW5jZUxpc3RJdGVyYXRvciBSZWZlcmVuY2VM
aXN0OjplbmQoKSBjb25zdAotewotICByZXR1cm4gUmVmZXJlbmNlTGlzdEl0ZXJhdG9yKE5VTEwp
OwotfQotCi0KLS8vIFJlZmVyZW5jZUxpc3RJdGVyYXRvcgotCi0KLVJlZmVyZW5jZUxpc3RJdGVy
YXRvcjo6UmVmZXJlbmNlTGlzdEl0ZXJhdG9yKFJlZmVyZW5jZUxpc3ROb2RlICpuKSA6Ci0gIG5v
ZGUobikKLXsKLX0KLQotYm9vbCBSZWZlcmVuY2VMaXN0SXRlcmF0b3I6Om9wZXJhdG9yIT0oY29u
c3QgUmVmZXJlbmNlTGlzdEl0ZXJhdG9yICZpdCkgY29uc3QgCi17IAotICByZXR1cm4gbm9kZSAh
PSBpdC5ub2RlOwotfQotCi1jb25zdCBSZWZlcmVuY2UgKlJlZmVyZW5jZUxpc3RJdGVyYXRvcjo6
b3BlcmF0b3ItPigpIGNvbnN0IAoteyAKLSAgcmV0dXJuICZub2RlLT5yZWZlcmVuY2U7Ci19Ci0K
LWNvbnN0IFJlZmVyZW5jZSAmUmVmZXJlbmNlTGlzdEl0ZXJhdG9yOjpvcGVyYXRvcisrKGludCkg
Ci17Ci0gIGNvbnN0IFJlZmVyZW5jZSAmcmVmID0gbm9kZS0+cmVmZXJlbmNlOwotICBub2RlID0g
bm9kZS0+bmV4dDsKLSAgcmV0dXJuIHJlZjsKLX0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9y
ZWZlcmVuY2VfbGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9yZWZlcmVu
Y2VfbGlzdC5oCShyZXZpc2lvbiAxNTQ2MSkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9yZWZlcmVu
Y2VfbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY4ICswLDAgQEAKLS8vIC0qLSBjLWJhc2lj
LW9mZnNldDogMiAtKi0KLS8qCi0gKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBsaWJy
YXJpZXMKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMgQXBwbGUgQ29tcHV0ZXIsIEluYwotICoKLSAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICog
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAq
Ci0gKi8KLQotI2lmbmRlZiBLSlNfUkVGRVJFTkNFX0xJU1RfSF8KLSNkZWZpbmUgS0pTX1JFRkVS
RU5DRV9MSVNUX0hfCi0KLSNpbmNsdWRlICJyZWZlcmVuY2UuaCIKLQotbmFtZXNwYWNlIEtKUyB7
Ci0KLSAgY2xhc3MgUmVmZXJlbmNlTGlzdE5vZGU7Ci0gIGNsYXNzIFJlZmVyZW5jZUxpc3RIZWFk
Tm9kZTsKLQotICBjbGFzcyBSZWZlcmVuY2VMaXN0SXRlcmF0b3IgewotICAgIGZyaWVuZCBjbGFz
cyBSZWZlcmVuY2VMaXN0OwotICAKLSAgcHVibGljOgotICAgIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBSZWZlcmVuY2VMaXN0SXRlcmF0b3IgJml0KSBjb25zdDsKLSAgICBjb25zdCBSZWZlcmVuY2Ug
Km9wZXJhdG9yLT4oKSBjb25zdDsKLSAgICBjb25zdCBSZWZlcmVuY2UgJm9wZXJhdG9yKysoaW50
IGkpOwotICAgIAotICBwcml2YXRlOgotICAgIFJlZmVyZW5jZUxpc3RJdGVyYXRvcihSZWZlcmVu
Y2VMaXN0Tm9kZSAqbik7Ci0gICAgUmVmZXJlbmNlTGlzdEl0ZXJhdG9yKCk7Ci0gICAgUmVmZXJl
bmNlTGlzdE5vZGUgKm5vZGU7Ci0gIH07Ci0gIAotICBjbGFzcyBSZWZlcmVuY2VMaXN0IHsKLSAg
cHVibGljOgotICAgIFJlZmVyZW5jZUxpc3QoKTsKLSAgICBSZWZlcmVuY2VMaXN0KGNvbnN0IFJl
ZmVyZW5jZUxpc3QgJmxpc3QpOwotICAgIFJlZmVyZW5jZUxpc3QgJm9wZXJhdG9yPShjb25zdCBS
ZWZlcmVuY2VMaXN0ICZsaXN0KTsKLSAgICB+UmVmZXJlbmNlTGlzdCgpOwotCi0gICAgdm9pZCBh
cHBlbmQoY29uc3QgUmVmZXJlbmNlJiB2YWwpOwotICAgIGludCBsZW5ndGgoKTsKLQotICAgIFJl
ZmVyZW5jZUxpc3RJdGVyYXRvciBiZWdpbigpIGNvbnN0OwotICAgIFJlZmVyZW5jZUxpc3RJdGVy
YXRvciBlbmQoKSBjb25zdDsKLSAgICAKLSAgcHJpdmF0ZToKLSAgICB2b2lkIHN3YXAoUmVmZXJl
bmNlTGlzdCAmbGlzdCk7Ci0gICAgUmVmZXJlbmNlTGlzdEhlYWROb2RlICpoZWFkOwotICAgIFJl
ZmVyZW5jZUxpc3ROb2RlICp0YWlsOwotICB9OyAKLSAgCi19Ci0KLSNlbmRpZgpJbmRleDogSmF2
YVNjcmlwdENvcmUva2pzL3Njb3BlX2NoYWluLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9ranMvc2NvcGVfY2hhaW4uY3BwCShyZXZpc2lvbiAxNTQ2MSkKKysrIEphdmFTY3JpcHRD
b3JlL2tqcy9zY29wZV9jaGFpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDcgKzIxLDggQEAK
IAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgInNjb3BlX2NoYWluLmgiCi0jaW5jbHVk
ZSAicmVmZXJlbmNlX2xpc3QuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eU5hbWVBcnJheS5oIgorI2lu
Y2x1ZGUgIm9iamVjdC5oIgogCiBuYW1lc3BhY2UgS0pTIHsKIApAQCAtNDIsMTMgKzQzLDE0IEBA
IHZvaWQgU2NvcGVDaGFpbjo6cHJpbnQoKQogICAgIFNjb3BlQ2hhaW5JdGVyYXRvciBzY29wZUVu
ZCA9IGVuZCgpOwogICAgIGZvciAoU2NvcGVDaGFpbkl0ZXJhdG9yIHNjb3BlSXRlciA9IGJlZ2lu
KCk7IHNjb3BlSXRlciAhPSBzY29wZUVuZDsgKytzY29wZUl0ZXIpIHsKICAgICAgICAgSlNPYmpl
Y3QqIG8gPSAqc2NvcGVJdGVyOwotICAgICAgICBSZWZlcmVuY2VMaXN0IHByb3BlcnR5TGlzdDsK
LSAgICAgICAgby0+Z2V0UHJvcGVydHlMaXN0KHByb3BlcnR5TGlzdCwgZmFsc2UpOwotICAgICAg
ICBSZWZlcmVuY2VMaXN0SXRlcmF0b3IgcHJvcEVuZCA9IHByb3BlcnR5TGlzdC5lbmQoKTsKKyAg
ICAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydHlOYW1lczsKKyAgICAgICAgLy8gRklYTUU6
IHNob3VsZCBwYXNzIEV4ZWNTdGF0ZSBoZXJlIQorICAgICAgICBvLT5nZXRQcm9wZXJ0eU5hbWVz
KDAsIHByb3BlcnR5TmFtZXMpOworICAgICAgICBQcm9wZXJ0eU5hbWVBcnJheUl0ZXJhdG9yIHBy
b3BFbmQgPSBwcm9wZXJ0eU5hbWVzLmVuZCgpOwogCiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAi
LS0tLS0gW3Njb3BlICVwXSAtLS0tLVxuIiwgbyk7Ci0gICAgICAgIGZvciAoUmVmZXJlbmNlTGlz
dEl0ZXJhdG9yIHByb3BJdGVyID0gcHJvcGVydHlMaXN0LmJlZ2luKCk7IHByb3BJdGVyICE9IHBy
b3BFbmQ7IHByb3BJdGVyKyspIHsKLSAgICAgICAgICAgIElkZW50aWZpZXIgbmFtZSA9IHByb3BJ
dGVyLT5nZXRQcm9wZXJ0eU5hbWUoKTsKKyAgICAgICAgZm9yIChQcm9wZXJ0eU5hbWVBcnJheUl0
ZXJhdG9yIHByb3BJdGVyID0gcHJvcGVydHlOYW1lcy5iZWdpbigpOyBwcm9wSXRlciAhPSBwcm9w
RW5kOyBwcm9wSXRlcisrKSB7CisgICAgICAgICAgICBJZGVudGlmaWVyIG5hbWUgPSAqcHJvcEl0
ZXI7CiAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzLCAiLCBuYW1lLmFzY2lpKCkpOwog
ICAgICAgICB9CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL2tqcy9zdHJpbmdfb2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9ranMvc3RyaW5nX29iamVjdC5jcHAJKHJldmlzaW9uIDE1NDYxKQorKysgSmF2YVNjcmlwdENv
cmUva2pzL3N0cmluZ19vYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBA
CiAKICNpbmNsdWRlICJlcnJvcl9vYmplY3QuaCIKICNpbmNsdWRlICJvcGVyYXRpb25zLmgiCi0j
aW5jbHVkZSAicmVmZXJlbmNlX2xpc3QuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eU5hbWVBcnJheS5o
IgogI2luY2x1ZGUgInJlZ2V4cF9vYmplY3QuaCIKICNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmlj
b2RlLmg+CiAKQEAgLTk0LDEzICs5NCwxMiBAQCBib29sIFN0cmluZ0luc3RhbmNlOjpkZWxldGVQ
cm9wZXJ0eShFeGVjCiAgIHJldHVybiBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkoZXhlYywgcHJv
cGVydHlOYW1lKTsKIH0KIAotdm9pZCBTdHJpbmdJbnN0YW5jZTo6Z2V0UHJvcGVydHlMaXN0KFJl
ZmVyZW5jZUxpc3QmIHByb3BlcnR5TGlzdCwgYm9vbCByZWN1cnNpdmUpCit2b2lkIFN0cmluZ0lu
c3RhbmNlOjpnZXRQcm9wZXJ0eU5hbWVzKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJy
YXkmIHByb3BlcnR5TmFtZXMpCiB7Ci0gIC8vIyMjIEZJWE1FOiBzaG91bGQgYXZvaWQgZHVwbGlj
YXRlcyB3aXRoIHByb3RvdHlwZQogICBpbnQgc2l6ZSA9IGludGVybmFsVmFsdWUoKS0+Z2V0U3Ry
aW5nKCkuc2l6ZSgpOwogICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykKLSAgICBwcm9w
ZXJ0eUxpc3QuYXBwZW5kKFJlZmVyZW5jZSh0aGlzLCBpKSk7Ci0gIHJldHVybiBKU09iamVjdDo6
Z2V0UHJvcGVydHlMaXN0KHByb3BlcnR5TGlzdCwgcmVjdXJzaXZlKTsKKyAgICBwcm9wZXJ0eU5h
bWVzLmFkZChJZGVudGlmaWVyKFVTdHJpbmcoaSkpKTsKKyAgcmV0dXJuIEpTT2JqZWN0OjpnZXRQ
cm9wZXJ0eU5hbWVzKGV4ZWMsIHByb3BlcnR5TmFtZXMpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gU3RyaW5nUHJvdG90eXBlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL3N0cmluZ19vYmplY3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvc3RyaW5nX29iamVjdC5oCShyZXZpc2lvbiAxNTQ2MSkK
KysrIEphdmFTY3JpcHRDb3JlL2tqcy9zdHJpbmdfb2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDEwICszMSwxMCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBTdHJpbmdJbnN0YW5jZShKU09i
amVjdCAqcHJvdG8pOwogICAgIFN0cmluZ0luc3RhbmNlKEpTT2JqZWN0ICpwcm90bywgY29uc3Qg
VVN0cmluZyAmc3RyaW5nKTsKIAotICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3Qo
RXhlY1N0YXRlICosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICB2aXJ0
dWFsIHZvaWQgcHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlO
YW1lLCBKU1ZhbHVlICp2YWx1ZSwgaW50IGF0dHIgPSBOb25lKTsKLSAgICB2aXJ0dWFsIGJvb2wg
ZGVsZXRlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0
eU5hbWUpOwotICAgIHZpcnR1YWwgdm9pZCBnZXRQcm9wZXJ0eUxpc3QoUmVmZXJlbmNlTGlzdCYg
cHJvcGVydHlMaXN0LCBib29sIHJlY3Vyc2l2ZSk7CisgICAgdmlydHVhbCBib29sIGdldE93blBy
b3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7
CisgICAgdmlydHVhbCB2b2lkIHB1dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUsIGludCBhdHRyID0gTm9uZSk7CisgICAgdmly
dHVhbCBib29sIGRlbGV0ZVByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lKTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzKTsKIAogICAgIHZp
cnR1YWwgY29uc3QgQ2xhc3NJbmZvICpjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsg
fQogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L2tqcy91c3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL3VzdHJpbmcu
aAkocmV2aXNpb24gMTU0NjEpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvdXN0cmluZy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzIsNiArMTMyLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICogQHJl
dHVybiBIaWdoZXIgYnl0ZS4KICAgICAgKi8KICAgICB1bnNpZ25lZCBjaGFyIGhpZ2goKSBjb25z
dCB7IHJldHVybiByZWYoKS51YyA+PiA4OyB9CisKICAgcHJpdmF0ZToKICAgICAvLyBub3QgaW1w
bGVtZW50ZWQsIGNhbiBvbmx5IGJlIGNvbnN0cnVjdGVkIGZyb20gVVN0cmluZwogICAgIFVDaGFy
UmVmZXJlbmNlKCk7CkBAIC0yMTUsNiArMjE2LDggQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgfTsK
IAogICBwdWJsaWM6CisgICAgdHlwZWRlZiBSZXAgSW1wbDsKKwogICAgIC8qKgogICAgICAqIENv
bnN0cnVjdHMgYSBudWxsIHN0cmluZy4KICAgICAgKi8KSW5kZXg6IEphdmFTY3JpcHRHbHVlL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0R2x1ZS9DaGFuZ2VMb2cJKHJldmlzaW9u
IDE1NDY1KQorKysgSmF2YVNjcmlwdEdsdWUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTUgQEAKKzIwMDYtMDctMTUgIE1hY2llaiBTdGFjaG93aWFrICA8bWpzQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEpT
VXRpbHMuY3BwOgorICAgICAgICAoS0pTVmFsdWVUb0NGVHlwZUludGVybmFsKTogdXBkYXRlZCBm
b3IgSlNDIFNQSSBjaGFuZ2VzCisgICAgICAgICogSlNWYWx1ZVdyYXBwZXIuY3BwOgorICAgICAg
ICAoSlNWYWx1ZVdyYXBwZXI6OkpTT2JqZWN0Q29weVByb3BlcnR5TmFtZXMpOiBkaXR0bworICAg
ICAgICAqIFVzZXJPYmplY3RJbXAuY3BwOgorICAgICAgICAoVXNlck9iamVjdEltcDo6Z2V0UHJv
cGVydHlOYW1lcyk6IGRpdHRvCisgICAgICAgICogVXNlck9iamVjdEltcC5oOgorCiA9PT0gU2Fm
YXJpLTUyMS4xNyA9PT0KIAogMjAwNi0wNy0xNCAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBw
bGUuY29tPgpJbmRleDogSmF2YVNjcmlwdEdsdWUvSlNVdGlscy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdEdsdWUvSlNVdGlscy5jcHAJKHJldmlzaW9uIDE1NDYxKQorKysgSmF2YVNjcmlw
dEdsdWUvSlNVdGlscy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNs
dWRlICJVc2VyT2JqZWN0SW1wLmgiCiAjaW5jbHVkZSAiSlNWYWx1ZVdyYXBwZXIuaCIKICNpbmNs
dWRlICJKU09iamVjdC5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL3JlZmVyZW5jZV9saXN0
Lmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUHJvcGVydHlOYW1lQXJyYXkuaD4KIAogc3Ry
dWN0IE9iamVjdEltcExpc3QgewogICAgIEpTT2JqZWN0KiBpbXA7CkBAIC0yOTQsMTMgKzI5NCwx
MyBAQCBDRlR5cGVSZWYgS0pTVmFsdWVUb0NGVHlwZUludGVybmFsKEpTVmFsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBpc0FycmF5ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIEpT
SW50ZXJwcmV0ZXIqIGludHJlcHJldGVyID0gKEpTSW50ZXJwcmV0ZXIqKWV4ZWMtPmR5bmFtaWNJ
bnRlcnByZXRlcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGludHJlcHJldGVyICYm
IChpbnRyZXByZXRlci0+RmxhZ3MoKSAmIGtKU0ZsYWdDb252ZXJ0QXNzb2NpYXRpdmVBcnJheSkp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWZlcmVuY2VMaXN0IHByb3BMaXN0Owot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC0+Z2V0UHJvcGVydHlMaXN0KHByb3BM
aXN0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWZlcmVuY2VMaXN0SXRlcmF0b3Ig
aXRlciA9IHByb3BMaXN0LmJlZ2luKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVm
ZXJlbmNlTGlzdEl0ZXJhdG9yIGVuZCA9IHByb3BMaXN0LmVuZCgpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BOYW1lczsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvYmplY3QtPmdldFByb3BlcnR5TmFtZXMoZXhlYywgcHJvcE5hbWVzKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9wZXJ0eU5hbWVBcnJheUl0ZXJhdG9yIGl0
ZXIgPSBwcm9wTmFtZXMuYmVnaW4oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9w
ZXJ0eU5hbWVBcnJheUl0ZXJhdG9yIGVuZCA9IHByb3BOYW1lcy5lbmQoKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB3aGlsZShpdGVyICE9IGVuZCAmJiBpc0FycmF5KQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWRl
bnRpZmllciBwcm9wTmFtZSA9IGl0ZXItPmdldFByb3BlcnR5TmFtZSgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBJZGVudGlmaWVyIHByb3BOYW1lID0gKml0ZXI7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFVTdHJpbmcgdXN0ciA9IHByb3BOYW1lLnVzdHJpbmco
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVW5pQ2hhciogdW5pQ2hh
cnMgPSAoY29uc3QgVW5pQ2hhciopdXN0ci5kYXRhKCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBzaXplID0gdXN0ci5zaXplKCk7CkBAIC0zMzMsOCArMzMzLDggQEAgQ0ZU
eXBlUmVmIEtKU1ZhbHVlVG9DRlR5cGVJbnRlcm5hbChKU1ZhbAogICAgICAgICAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IE5vdCBhbiBhcnJheSwganVzdCB0cmVhdCBpdCBsaWtlIGEgZGljdGlvbmFyeSB3aGljaCBjb250
YWlucyAocHJvcGVydHkgbmFtZSwgcHJvcGVydHkgdmFsdWUpIHBhaXJzCi0gICAgICAgICAgICAg
ICAgICAgICAgICBSZWZlcmVuY2VMaXN0IHByb3BMaXN0OwotICAgICAgICAgICAgICAgICAgICAg
ICAgb2JqZWN0LT5nZXRQcm9wZXJ0eUxpc3QocHJvcExpc3QpOworICAgICAgICAgICAgICAgICAg
ICAgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcE5hbWVzOworICAgICAgICAgICAgICAgICAgICAg
ICAgb2JqZWN0LT5nZXRQcm9wZXJ0eU5hbWVzKGV4ZWMsIHByb3BOYW1lcyk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gQ0ZE
aWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZSgwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKQEAgLTM0MiwxMSArMzQyLDExIEBA
IENGVHlwZVJlZiBLSlNWYWx1ZVRvQ0ZUeXBlSW50ZXJuYWwoSlNWYWwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrQ0ZUeXBl
RGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAocmVzdWx0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUmVmZXJlbmNlTGlzdEl0ZXJhdG9yIGl0ZXIgPSBwcm9wTGlzdC5i
ZWdpbigpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWZlcmVuY2VMaXN0SXRl
cmF0b3IgZW5kID0gcHJvcExpc3QuZW5kKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFByb3BlcnR5TmFtZUFycmF5SXRlcmF0b3IgaXRlciA9IHByb3BOYW1lcy5iZWdpbigpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9wZXJ0eU5hbWVBcnJheUl0ZXJhdG9y
IGVuZCA9IHByb3BOYW1lcy5lbmQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
d2hpbGUoaXRlciAhPSBlbmQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElkZW50aWZpZXIgcHJvcE5hbWUgPSBp
dGVyLT5nZXRQcm9wZXJ0eU5hbWUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIElkZW50aWZpZXIgcHJvcE5hbWUgPSAqaXRlcjsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChvYmplY3QtPmhhc1Byb3BlcnR5KGV4ZWMsIHByb3BOYW1lKSkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDRlN0cmluZ1JlZiBjZktleSA9IElkZW50aWZpZXJUb0NGU3Ry
aW5nKHByb3BOYW1lKTsKSW5kZXg6IEphdmFTY3JpcHRHbHVlL0pTVmFsdWVXcmFwcGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0R2x1ZS9KU1ZhbHVlV3JhcHBlci5jcHAJKHJldmlzaW9u
IDE1NDYxKQorKysgSmF2YVNjcmlwdEdsdWUvSlNWYWx1ZVdyYXBwZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJK
U1ZhbHVlV3JhcHBlci5oIgotI2luY2x1ZGUgIkphdmFTY3JpcHRDb3JlL3JlZmVyZW5jZV9saXN0
LmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUHJvcGVydHlOYW1lQXJyYXkuaD4KICNpbmNs
dWRlIDxwdGhyZWFkLmg+CiAKIEpTVmFsdWVXcmFwcGVyOjpKU1ZhbHVlV3JhcHBlcihKU1ZhbHVl
ICppblZhbHVlKQpAQCAtMTE4LDEyICsxMTgsMTIgQEAgQ0ZBcnJheVJlZiBKU1ZhbHVlV3JhcHBl
cjo6SlNPYmplY3RDb3B5UAogICAgIHsKICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2V0VGhy
ZWFkR2xvYmFsRXhlY1N0YXRlKCk7CiAgICAgICAgIEpTT2JqZWN0ICpvYmplY3QgPSBwdHItPkdl
dFZhbHVlKCktPnRvT2JqZWN0KGV4ZWMpOwotICAgICAgICBSZWZlcmVuY2VMaXN0IHByb3BMaXN0
OwotICAgICAgICBvYmplY3QtPmdldFByb3BlcnR5TGlzdChwcm9wTGlzdCk7Ci0gICAgICAgIFJl
ZmVyZW5jZUxpc3RJdGVyYXRvciBpdGVyYXRvciA9IHByb3BMaXN0LmJlZ2luKCk7CisgICAgICAg
IFByb3BlcnR5TmFtZUFycmF5IHByb3BOYW1lczsKKyAgICAgICAgb2JqZWN0LT5nZXRQcm9wZXJ0
eU5hbWVzKGV4ZWMsIHByb3BOYW1lcyk7CisgICAgICAgIFByb3BlcnR5TmFtZUFycmF5SXRlcmF0
b3IgaXRlcmF0b3IgPSBwcm9wTmFtZXMuYmVnaW4oKTsKIAotICAgICAgICB3aGlsZSAoaXRlcmF0
b3IgIT0gcHJvcExpc3QuZW5kKCkpIHsKLSAgICAgICAgICAgIElkZW50aWZpZXIgbmFtZSA9IGl0
ZXJhdG9yLT5nZXRQcm9wZXJ0eU5hbWUoKTsKKyAgICAgICAgd2hpbGUgKGl0ZXJhdG9yICE9IHBy
b3BOYW1lcy5lbmQoKSkgeworICAgICAgICAgICAgSWRlbnRpZmllciBuYW1lID0gKml0ZXJhdG9y
OwogICAgICAgICAgICAgQ0ZTdHJpbmdSZWYgbmFtZVN0ciA9IElkZW50aWZpZXJUb0NGU3RyaW5n
KG5hbWUpOwogCiAgICAgICAgICAgICBpZiAoIXJlc3VsdCkKSW5kZXg6IEphdmFTY3JpcHRHbHVl
L1VzZXJPYmplY3RJbXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRHbHVlL1VzZXJPYmpl
Y3RJbXAuY3BwCShyZXZpc2lvbiAxNTQ2MSkKKysrIEphdmFTY3JpcHRHbHVlL1VzZXJPYmplY3RJ
bXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJVc2VyT2JqZWN0SW1wLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvcmVmZXJlbmNlX2xpc3QuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Qcm9wZXJ0eU5h
bWVBcnJheS5oPgogCiBjb25zdCBDbGFzc0luZm8gVXNlck9iamVjdEltcDo6aW5mbyA9IHsiVXNl
ck9iamVjdCIsIDAsIDAsIDB9OwogCkBAIC0xMjIsNyArMTIyLDcgQEAgSlNWYWx1ZSAqVXNlck9i
amVjdEltcDo6Y2FsbEFzRnVuY3Rpb24oRQogfQogCiAKLXZvaWQgVXNlck9iamVjdEltcDo6Z2V0
UHJvcGVydHlMaXN0KEV4ZWNTdGF0ZSAqZXhlYywgUmVmZXJlbmNlTGlzdCYgcHJvcGVydHlMaXN0
LCBib29sIHJlY3Vyc2l2ZSkKK3ZvaWQgVXNlck9iamVjdEltcDo6Z2V0UHJvcGVydHlOYW1lcyhF
eGVjU3RhdGUgKmV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzKQogewogICAg
IEpTVXNlck9iamVjdCogcHRyID0gR2V0SlNVc2VyT2JqZWN0KCk7CiAgICAgaWYgKHB0cikgewpA
QCAtMTMyLDEyICsxMzIsMTIgQEAgdm9pZCBVc2VyT2JqZWN0SW1wOjpnZXRQcm9wZXJ0eUxpc3Qo
RXhlYwogICAgICAgICAgICAgQ0ZJbmRleCBpOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8
IGNvdW50OyBpKyspIHsKICAgICAgICAgICAgICAgICBDRlN0cmluZ1JlZiBwcm9wZXJ0eU5hbWUg
PSAoQ0ZTdHJpbmdSZWYpQ0ZBcnJheUdldFZhbHVlQXRJbmRleChjZlByb3BlcnR5TmFtZXMsIGkp
OwotICAgICAgICAgICAgICAgIHByb3BlcnR5TGlzdC5hcHBlbmQoUmVmZXJlbmNlKHRoaXMsIENG
U3RyaW5nVG9JZGVudGlmaWVyKHByb3BlcnR5TmFtZSkpKTsKKyAgICAgICAgICAgICAgICBwcm9w
ZXJ0eU5hbWVzLmFkZChDRlN0cmluZ1RvSWRlbnRpZmllcihwcm9wZXJ0eU5hbWUpKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIENGUmVsZWFzZShjZlByb3BlcnR5TmFtZXMpOwogICAgICAg
ICB9CiAgICAgfQotICAgIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eUxpc3QocHJvcGVydHlMaXN0LCBy
ZWN1cnNpdmUpOworICAgIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVzKGV4ZWMsIHByb3BlcnR5
TmFtZXMpOwogfQogCiBKU1ZhbHVlICpVc2VyT2JqZWN0SW1wOjp1c2VyT2JqZWN0R2V0dGVyKEV4
ZWNTdGF0ZSAqLCBKU09iamVjdCAqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNv
bnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKSW5kZXg6IEphdmFTY3JpcHRHbHVlL1VzZXJPYmplY3RJ
bXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0R2x1ZS9Vc2VyT2JqZWN0SW1wLmgJKHJldmlz
aW9uIDE1NDYxKQorKysgSmF2YVNjcmlwdEdsdWUvVXNlck9iamVjdEltcC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00NCw3ICs0NCw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBpbXBsZW1l
bnRzQ2FsbCgpIGNvbnN0OwogCi0gICAgdmlydHVhbCB2b2lkIGdldFByb3BlcnR5TGlzdChFeGVj
U3RhdGUgKmV4ZWMsIFJlZmVyZW5jZUxpc3QmIHByb3BlcnR5TGlzdCwgYm9vbCByZWN1cnNpdmUg
PSB0cnVlKTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWVBcnJheSYpOwogCiAgICAgdmlydHVhbCBKU1ZhbHVlICpjYWxsQXNGdW5jdGlv
bihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKTsK
ICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSAqLCBjb25zdCBJ
ZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNTQ2NykKKysr
IExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisy
MDA2LTA3LTE2ICBNYWNpZWogU3RhY2hvd2lhayAgPG1qc0BhcHBsZS5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICAtIG5ldyB0ZXN0
IGNhc2UgYW5kIHVwZGF0ZWQgcmVzdWx0cyBmb3IgcHJvcGVydHkgbGlzdCBjaGFuZ2VzCisKKyAg
ICAgICAgKiBmYXN0L2pzL2Zvci1pbi1hdm9pZC1kdXBsaWNhdGVzLWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisgICAgICAgICogZmFzdC9qcy9mb3ItaW4tYXZvaWQtZHVwbGljYXRlcy5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBmYXN0L2pzL2tkZS9BcnJheS1leHBlY3RlZC50eHQ6CisgICAgICAgICog
ZmFzdC9qcy9yZXNvdXJjZXMvZm9yLWluLWF2b2lkLWR1cGxpY2F0ZXMuanM6IEFkZGVkLgorCiAy
MDA2LTA3LTE1ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBKb2huIFN1bGxpdmFuLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9mb3ItaW4t
YXZvaWQtZHVwbGljYXRlcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC9qcy9mb3ItaW4tYXZvaWQtZHVwbGljYXRlcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL2Zvci1pbi1hdm9pZC1kdXBsaWNhdGVzLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMCBAQAorVGhpcyB0ZXN0cyB0aGF0IGZvci9p
biBzdGF0ZW1lbnRzIGRvbid0IHJlcG9ydCBwcm9wZXJ0aWVzIHRoYXQgYXJlIGluIGJvdGggYW4g
b2JqZWN0IGFudCBpdHMgcHJvdG90eXBlIG1vcmUgdGhhbiBvbmNlLgorCitPbiBzdWNjZXNzLCB5
b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVT
VCBDT01QTEVURSIuCisKKworUEFTUyBpIGlzIDIKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlz
IHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL2Zvci1p
bi1hdm9pZC1kdXBsaWNhdGVzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9q
cy9mb3ItaW4tYXZvaWQtZHVwbGljYXRlcy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvZmFzdC9qcy9mb3ItaW4tYXZvaWQtZHVwbGljYXRlcy5odG1sCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDEzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9F
TiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJyZXNvdXJj
ZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9qcy10ZXN0LXBy
ZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9w
PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2Zvci1p
bi1hdm9pZC1kdXBsaWNhdGVzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMv
anMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91
dFRlc3RzL2Zhc3QvanMva2RlL0FycmF5LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L2pzL2tkZS9BcnJheS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDE1NDYxKQor
KysgTGF5b3V0VGVzdHMvZmFzdC9qcy9rZGUvQXJyYXktZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC02NSwxMCArNjUsMTAgQEAgUEFTUyBhcnIubGVuZ3RoIGlzIDQwCiBQQVNTIGFycltt
YXhpbnRdIGlzIHVuZGVmaW5lZAogUEFTUyBhcnIubGVuZ3RoIGlzIG1heGludAogUEFTUyBhcnJb
bWF4aW50LTFdIGlzICJ0ZXN0MiIKLUZBSUwgcHJvcG5hbWVzLmxlbmd0aCBzaG91bGQgYmUgMyAo
b2YgdHlwZSBudW1iZXIpLiBXYXMgNCAob2YgdHlwZSBudW1iZXIpLgorUEFTUyBwcm9wbmFtZXMu
bGVuZ3RoIGlzIDMKIFBBU1MgcHJvcG5hbWVzWzBdIGlzICcwJwogUEFTUyBwcm9wbmFtZXNbMV0g
aXMgJzEnCi1GQUlMIHByb3BuYW1lc1syXSBzaG91bGQgYmUgMiAob2YgdHlwZSBzdHJpbmcpLiBX
YXMgMSAob2YgdHlwZSBzdHJpbmcpLgorUEFTUyBwcm9wbmFtZXNbMl0gaXMgJzInCiBQQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QvanMvcmVzb3VyY2VzL2Zvci1pbi1hdm9pZC1kdXBsaWNhdGVzLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvcmVzb3VyY2VzL2Zvci1pbi1hdm9pZC1kdXBsaWNh
dGVzLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9yZXNvdXJjZXMvZm9y
LWluLWF2b2lkLWR1cGxpY2F0ZXMuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjIgQEAKK2Rl
c2NyaXB0aW9uKAorIlRoaXMgdGVzdHMgdGhhdCBmb3IvaW4gc3RhdGVtZW50cyBkb24ndCByZXBv
cnQgcHJvcGVydGllcyB0aGF0IGFyZSBpbiBib3RoIGFuIG9iamVjdCBhbnQgaXRzIHByb3RvdHlw
ZSBtb3JlIHRoYW4gb25jZS4iCispOworCisKK2Z1bmN0aW9uIGNvbnN0cigpIHsKKyAgICB0aGlz
Lnh4eCA9ICJmb28iOworICAgIHRoaXMueXl5ID0gImJhciI7Cit9CisKK2NvbnN0cnVjdG9yLnBy
b3RvdHlwZSA9IHsgeHh4OiAiYmF6IiwgeXl5OiAicXV1eCIgfTsKKwordmFyIG9iaiA9IG5ldyBj
b25zdHIoKTsKKwordmFyIGkgPSAwOworZm9yICh2YXIgcHJvcCBpbiBvYmopIHsKKyAgICArK2k7
Cit9CisKK3Nob3VsZEJlKCJpIiwgIjIiKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRy
dWU7Cg==
</data>
<flag name="review"
          id="2896"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>