<?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>29822</bug_id>
          
          <creation_ts>2009-09-28 13:18:34 -0700</creation_ts>
          <short_desc>NotNullPassRefPtr: smart pointer optimized for passing references that are not null</short_desc>
          <delta_ts>2009-09-28 14:47:52 -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>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</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="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>150619</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2009-09-28 13:18:34 -0700</bug_when>
    <thetext>Patch coming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>150631</commentid>
    <comment_count>1</comment_count>
      <attachid>40253</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2009-09-28 13:35:07 -0700</bug_when>
    <thetext>Created attachment 40253
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>150636</commentid>
    <comment_count>2</comment_count>
      <attachid>40253</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-09-28 13:41:47 -0700</bug_when>
    <thetext>Comment on attachment 40253
patch

NonNull instead of NotNull?

&gt; +        (JSC::::JSCallbackObject):

&gt; +        (WTF::::RefPtr):
&gt; +        (WTF::::operator):

Bad lines written by the prepare-ChangeLog script, but you left these in. Yuck.

&gt; +    // FIXME: NotNullPassRefPtr should just inherit from PassRefPtr. However,
&gt; +    // GCC&apos;s optimizer gets inexplicably confused by inheritance in this case.

&quot;confused&quot; is vague here. I think it would be better if you were more specific about what it does not optimize.

&gt; +        ALWAYS_INLINE ~NotNullPassRefPtr() { derefIfNotNull(m_ptr); }

I think you need a comment somewhere clarifying that NotNull does not mean it&apos;s never null! And when it can and cannot be null. If you had such a comment I would have reviewed differently.

&gt; +        void clear() { if (T* ptr = m_ptr) ptr-&gt;deref(); m_ptr = 0; }

Should this perhaps ASSERT instead of checking?

&gt; +        T* releaseRef() const { T* tmp = m_ptr; m_ptr = 0; return tmp; }

Maybe this should assert m_ptr.

&gt; +        T&amp; operator*() const { return *m_ptr; }
&gt; +        T* operator-&gt;() const { return m_ptr; }

Shouldn&apos;t these assert m_ptr?

&gt; +        bool operator!() const { return !m_ptr; }
&gt; +
&gt; +        // This conversion operator allows implicit conversion to bool but not to other integer types.
&gt; +        typedef T* (NotNullPassRefPtr::*UnspecifiedBoolType);
&gt; +        operator UnspecifiedBoolType() const { return m_ptr ? &amp;NotNullPassRefPtr::m_ptr : 0; }

Do we need these at all?

&gt;          return p.get();
&gt;      }
&gt; -
&gt; +    
&gt;  } // namespace WTF

Don&apos;t add the whitespace, please.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>150650</commentid>
    <comment_count>3</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2009-09-28 14:14:55 -0700</bug_when>
    <thetext>&gt; NonNull instead of NotNull?

OK.

&gt; &gt; +        (JSC::::JSCallbackObject):
&gt; 
&gt; &gt; +        (WTF::::RefPtr):
&gt; &gt; +        (WTF::::operator):
&gt; 
&gt; Bad lines written by the prepare-ChangeLog script, but you left these in. Yuck.

Fixed.

&gt; &gt; +    // FIXME: NotNullPassRefPtr should just inherit from PassRefPtr. However,
&gt; &gt; +    // GCC&apos;s optimizer gets inexplicably confused by inheritance in this case.
&gt; 
&gt; &quot;confused&quot; is vague here. I think it would be better if you were more specific
&gt; about what it does not optimize.

Changed to:

    // FIXME: NonNullPassRefPtr could just inherit from PassRefPtr. However,
    // if we use inheritance, GCC&apos;s optimizer fails to realize that destruction
    // of a released NonNullPassRefPtr is a no-op. So, for now, just copy the
    // most important code from PassRefPtr.

&gt; &gt; +        ALWAYS_INLINE ~NotNullPassRefPtr() { derefIfNotNull(m_ptr); }
&gt; 
&gt; I think you need a comment somewhere clarifying that NotNull does not mean it&apos;s
&gt; never null! And when it can and cannot be null. If you had such a comment I
&gt; would have reviewed differently.
&gt; 
&gt; &gt; +        void clear() { if (T* ptr = m_ptr) ptr-&gt;deref(); m_ptr = 0; }
&gt; 
&gt; Should this perhaps ASSERT instead of checking?
&gt; 
&gt; &gt; +        T* releaseRef() const { T* tmp = m_ptr; m_ptr = 0; return tmp; }
&gt; 
&gt; Maybe this should assert m_ptr.
&gt; 
&gt; &gt; +        T&amp; operator*() const { return *m_ptr; }
&gt; &gt; +        T* operator-&gt;() const { return m_ptr; }
&gt; 
&gt; Shouldn&apos;t these assert m_ptr?
&gt; 
&gt; &gt; +        bool operator!() const { return !m_ptr; }
&gt; &gt; +
&gt; &gt; +        // This conversion operator allows implicit conversion to bool but not to other integer types.
&gt; &gt; +        typedef T* (NotNullPassRefPtr::*UnspecifiedBoolType);
&gt; &gt; +        operator UnspecifiedBoolType() const { return m_ptr ? &amp;NotNullPassRefPtr::m_ptr : 0; }
&gt; 
&gt; Do we need these at all?
&gt; 
&gt; &gt;          return p.get();
&gt; &gt;      }

Added:

    // NonNullPassRefPtr: Optimized for passing non-null pointers. A NonNullPassRefPtr
    // begins life non-null, and can only become null through a call to releaseRef()
    // or clear().

Removed the boolean operator, since it seems to go against the spirit of the pointer. I decided to leave out extra ASSERTs, though. Might be worth adding in the future if we come up with an optimization that would depend on them.

&gt; &gt; -
&gt; &gt; +    
&gt; &gt;  } // namespace WTF
&gt; 
&gt; Don&apos;t add the whitespace, please.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>150670</commentid>
    <comment_count>4</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2009-09-28 14:47:52 -0700</bug_when>
    <thetext>Committed revision 48836.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40253</attachid>
            <date>2009-09-28 13:35:07 -0700</date>
            <delta_ts>2009-09-28 13:41:47 -0700</delta_ts>
            <desc>patch</desc>
            <filename>ro.txt</filename>
            <type>text/plain</type>
            <size>97291</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ4ODI2KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTU5IEBACisyMDA5LTA5LTI4ICBHZW9mZnJl
eSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgTm90TnVsbFBhc3NSZWZQdHI6IHNtYXJ0IHBvaW50ZXIgb3B0
aW1pemVkIGZvciBwYXNzaW5nIHJlZmVyZW5jZXMgdGhhdCBhcmUgbm90IG51bGwKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI5ODIyCisgICAgICAgIAor
ICAgICAgICBBZGRlZCBOb3ROdWxsUGFzc1JlZlB0ciwgYW5kIGRlcGxveWVkIGl0IGluIGFsbCBw
bGFjZXMgdGhhdCBpbml0aWFsaXplCisgICAgICAgIEphdmFTY3JpcHQgb2JqZWN0cy4KKyAgICAg
ICAgCisgICAgICAgIDIuMiUgc3BlZWR1cCBvbiBiZW5jaC1hbGxvY2F0ZS1ub25yZXRhaW5lZC5q
cy4KKworICAgICAgICAqIEFQSS9KU0NhbGxiYWNrQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAo
SlNDOjpKU0NhbGxiYWNrQ29uc3RydWN0b3I6OkpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcik6CisgICAg
ICAgICogQVBJL0pTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5oOgorICAgICAgICAqIEFQSS9KU0NhbGxi
YWNrT2JqZWN0Lmg6CisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaDoK
KyAgICAgICAgKEpTQzo6OjpKU0NhbGxiYWNrT2JqZWN0KToKKyAgICAgICAgKiBKYXZhU2NyaXB0
Q29yZS5leHA6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6YWRkRnVuY3Rpb25EZWNsKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjph
ZGRGdW5jdGlvbkV4cHIpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHA6
CisgICAgICAgIChKU0M6OkFycmF5Q29uc3RydWN0b3I6OkFycmF5Q29uc3RydWN0b3IpOgorICAg
ICAgICAqIHJ1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5oOgorICAgICAgICAqIHJ1bnRpbWUvQXJy
YXlQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpBcnJheVByb3RvdHlwZTo6QXJyYXlQcm90
b3R5cGUpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlQcm90b3R5cGUuaDoKKyAgICAgICAgKiBy
dW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OkJvb2xlYW5Db25z
dHJ1Y3Rvcjo6Qm9vbGVhbkNvbnN0cnVjdG9yKToKKyAgICAgICAgKiBydW50aW1lL0Jvb2xlYW5D
b25zdHJ1Y3Rvci5oOgorICAgICAgICAqIHJ1bnRpbWUvQm9vbGVhbk9iamVjdC5jcHA6CisgICAg
ICAgIChKU0M6OkJvb2xlYW5PYmplY3Q6OkJvb2xlYW5PYmplY3QpOgorICAgICAgICAqIHJ1bnRp
bWUvQm9vbGVhbk9iamVjdC5oOgorICAgICAgICAqIHJ1bnRpbWUvQm9vbGVhblByb3RvdHlwZS5j
cHA6CisgICAgICAgIChKU0M6OkJvb2xlYW5Qcm90b3R5cGU6OkJvb2xlYW5Qcm90b3R5cGUpOgor
ICAgICAgICAqIHJ1bnRpbWUvQm9vbGVhblByb3RvdHlwZS5oOgorICAgICAgICAqIHJ1bnRpbWUv
RGF0ZUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6RGF0ZUNvbnN0cnVjdG9yOjpEYXRl
Q29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmg6CisgICAg
ICAgICogcnVudGltZS9EYXRlSW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpEYXRlSW5zdGFu
Y2U6OkRhdGVJbnN0YW5jZSk6CisgICAgICAgICogcnVudGltZS9EYXRlSW5zdGFuY2UuaDoKKyAg
ICAgICAgKiBydW50aW1lL0RhdGVQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpEYXRlUHJv
dG90eXBlOjpEYXRlUHJvdG90eXBlKToKKyAgICAgICAgKiBydW50aW1lL0RhdGVQcm90b3R5cGUu
aDoKKyAgICAgICAgKiBydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlND
OjpFcnJvckNvbnN0cnVjdG9yOjpFcnJvckNvbnN0cnVjdG9yKToKKyAgICAgICAgKiBydW50aW1l
L0Vycm9yQ29uc3RydWN0b3IuaDoKKyAgICAgICAgKiBydW50aW1lL0Vycm9ySW5zdGFuY2UuY3Bw
OgorICAgICAgICAoSlNDOjpFcnJvckluc3RhbmNlOjpFcnJvckluc3RhbmNlKToKKyAgICAgICAg
KiBydW50aW1lL0Vycm9ySW5zdGFuY2UuaDoKKyAgICAgICAgKiBydW50aW1lL0Vycm9yUHJvdG90
eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6RXJyb3JQcm90b3R5cGU6OkVycm9yUHJvdG90eXBlKToK
KyAgICAgICAgKiBydW50aW1lL0Vycm9yUHJvdG90eXBlLmg6CisgICAgICAgICogcnVudGltZS9G
dW5jdGlvbkNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25Db25zdHJ1Y3Rv
cjo6RnVuY3Rpb25Db25zdHJ1Y3Rvcik6CisgICAgICAgICogcnVudGltZS9GdW5jdGlvbkNvbnN0
cnVjdG9yLmg6CisgICAgICAgICogcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHA6CisgICAg
ICAgIChKU0M6OkZ1bmN0aW9uUHJvdG90eXBlOjpGdW5jdGlvblByb3RvdHlwZSk6CisgICAgICAg
ICogcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5oOgorICAgICAgICAqIHJ1bnRpbWUvR2xvYmFs
RXZhbEZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6R2xvYmFsRXZhbEZ1bmN0aW9uOjpHbG9i
YWxFdmFsRnVuY3Rpb24pOgorICAgICAgICAqIHJ1bnRpbWUvR2xvYmFsRXZhbEZ1bmN0aW9uLmg6
CisgICAgICAgICogcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6
SW50ZXJuYWxGdW5jdGlvbjo6SW50ZXJuYWxGdW5jdGlvbik6CisgICAgICAgICogcnVudGltZS9J
bnRlcm5hbEZ1bmN0aW9uLmg6CisgICAgICAgIChKU0M6OkludGVybmFsRnVuY3Rpb246OkludGVy
bmFsRnVuY3Rpb24pOgorICAgICAgICAqIHJ1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcDoKKyAgICAg
ICAgKEpTQzo6SlNBY3RpdmF0aW9uOjpKU0FjdGl2YXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUv
SlNBY3RpdmF0aW9uLmg6CisgICAgICAgIChKU0M6OkpTQWN0aXZhdGlvbjo6SlNBY3RpdmF0aW9u
RGF0YTo6SlNBY3RpdmF0aW9uRGF0YSk6CisgICAgICAgICogcnVudGltZS9KU0FycmF5LmNwcDoK
KyAgICAgICAgKEpTQzo6SlNBcnJheTo6SlNBcnJheSk6CisgICAgICAgICogcnVudGltZS9KU0Fy
cmF5Lmg6CisgICAgICAgICogcnVudGltZS9KU0J5dGVBcnJheS5jcHA6CisgICAgICAgIChKU0M6
OkpTQnl0ZUFycmF5OjpKU0J5dGVBcnJheSk6CisgICAgICAgICogcnVudGltZS9KU0J5dGVBcnJh
eS5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkpT
RnVuY3Rpb246OkpTRnVuY3Rpb24pOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5oOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNHbG9i
YWxPYmplY3Q6OkpTR2xvYmFsT2JqZWN0KToKKyAgICAgICAgKiBydW50aW1lL0pTT05PYmplY3Qu
aDoKKyAgICAgICAgKEpTQzo6SlNPTk9iamVjdDo6SlNPTk9iamVjdCk6CisgICAgICAgICogcnVu
dGltZS9KU09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6SlNPYmplY3QpOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6c2V0U3RydWN0dXJlKToKKyAgICAgICAgKiBydW50aW1lL0pT
VmFyaWFibGVPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNWYXJpYWJsZU9iamVjdDo6SlNWYXJp
YWJsZU9iamVjdCk6CisgICAgICAgICogcnVudGltZS9KU1dyYXBwZXJPYmplY3QuaDoKKyAgICAg
ICAgKEpTQzo6SlNXcmFwcGVyT2JqZWN0OjpKU1dyYXBwZXJPYmplY3QpOgorICAgICAgICAqIHJ1
bnRpbWUvTWF0aE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6Ok1hdGhPYmplY3Q6Ok1hdGhPYmpl
Y3QpOgorICAgICAgICAqIHJ1bnRpbWUvTWF0aE9iamVjdC5oOgorICAgICAgICAqIHJ1bnRpbWUv
TmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6Ok5hdGl2ZUVycm9yQ29u
c3RydWN0b3I6Ok5hdGl2ZUVycm9yQ29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvTmF0
aXZlRXJyb3JDb25zdHJ1Y3Rvci5oOgorICAgICAgICAqIHJ1bnRpbWUvTmF0aXZlRXJyb3JQcm90
b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpOYXRpdmVFcnJvclByb3RvdHlwZTo6TmF0aXZlRXJy
b3JQcm90b3R5cGUpOgorICAgICAgICAqIHJ1bnRpbWUvTmF0aXZlRXJyb3JQcm90b3R5cGUuaDoK
KyAgICAgICAgKiBydW50aW1lL051bWJlckNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6
TnVtYmVyQ29uc3RydWN0b3I6Ok51bWJlckNvbnN0cnVjdG9yKToKKyAgICAgICAgKiBydW50aW1l
L051bWJlckNvbnN0cnVjdG9yLmg6CisgICAgICAgICogcnVudGltZS9OdW1iZXJPYmplY3QuY3Bw
OgorICAgICAgICAoSlNDOjpOdW1iZXJPYmplY3Q6Ok51bWJlck9iamVjdCk6CisgICAgICAgICog
cnVudGltZS9OdW1iZXJPYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL051bWJlclByb3RvdHlw
ZS5jcHA6CisgICAgICAgIChKU0M6Ok51bWJlclByb3RvdHlwZTo6TnVtYmVyUHJvdG90eXBlKToK
KyAgICAgICAgKiBydW50aW1lL051bWJlclByb3RvdHlwZS5oOgorICAgICAgICAqIHJ1bnRpbWUv
T2JqZWN0Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpPYmplY3RDb25zdHJ1Y3Rvcjo6
T2JqZWN0Q29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3Iu
aDoKKyAgICAgICAgKiBydW50aW1lL09iamVjdFByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6
Ok9iamVjdFByb3RvdHlwZTo6T2JqZWN0UHJvdG90eXBlKToKKyAgICAgICAgKiBydW50aW1lL09i
amVjdFByb3RvdHlwZS5oOgorICAgICAgICAqIHJ1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuaDoK
KyAgICAgICAgKEpTQzo6UHJvcGVydHlOYW1lQXJyYXlEYXRhOjpzZXRDYWNoZWRQcm90b3R5cGVD
aGFpbik6CisgICAgICAgICogcnVudGltZS9Qcm90b3R5cGVGdW5jdGlvbi5jcHA6CisgICAgICAg
IChKU0M6OlByb3RvdHlwZUZ1bmN0aW9uOjpQcm90b3R5cGVGdW5jdGlvbik6CisgICAgICAgICog
cnVudGltZS9Qcm90b3R5cGVGdW5jdGlvbi5oOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwQ29u
c3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpSZWdFeHBDb25zdHJ1Y3Rvcjo6UmVnRXhwQ29u
c3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuaDoKKyAgICAg
ICAgKiBydW50aW1lL1JlZ0V4cE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OlJlZ0V4cE9iamVj
dDo6UmVnRXhwT2JqZWN0KToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE9iamVjdC5oOgorICAg
ICAgICAoSlNDOjpSZWdFeHBPYmplY3Q6OlJlZ0V4cE9iamVjdERhdGE6OlJlZ0V4cE9iamVjdERh
dGEpOgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpT
Qzo6UmVnRXhwUHJvdG90eXBlOjpSZWdFeHBQcm90b3R5cGUpOgorICAgICAgICAqIHJ1bnRpbWUv
UmVnRXhwUHJvdG90eXBlLmg6CisgICAgICAgICogcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5j
cHA6CisgICAgICAgIChKU0M6OlN0cmluZ0NvbnN0cnVjdG9yOjpTdHJpbmdDb25zdHJ1Y3Rvcik6
CisgICAgICAgICogcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5oOgorICAgICAgICAqIHJ1bnRp
bWUvU3RyaW5nT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6U3RyaW5nT2JqZWN0OjpTdHJpbmdP
YmplY3QpOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nT2JqZWN0Lmg6CisgICAgICAgICogcnVu
dGltZS9TdHJpbmdPYmplY3RUaGF0TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5oOgorICAgICAgICAo
SlNDOjpTdHJpbmdPYmplY3RUaGF0TWFzcXVlcmFkZXNBc1VuZGVmaW5lZDo6U3RyaW5nT2JqZWN0
VGhhdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nUHJv
dG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RyaW5nUHJvdG90eXBlOjpTdHJpbmdQcm90b3R5
cGUpOgorICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmg6CisgICAgICAgICogd3Rm
L1Bhc3NSZWZQdHIuaDoKKyAgICAgICAgKFdURjo6Tm90TnVsbFBhc3NSZWZQdHI6Ok5vdE51bGxQ
YXNzUmVmUHRyKToKKyAgICAgICAgKFdURjo6Tm90TnVsbFBhc3NSZWZQdHI6On5Ob3ROdWxsUGFz
c1JlZlB0cik6CisgICAgICAgIChXVEY6Ok5vdE51bGxQYXNzUmVmUHRyOjpnZXQpOgorICAgICAg
ICAoV1RGOjpOb3ROdWxsUGFzc1JlZlB0cjo6Y2xlYXIpOgorICAgICAgICAoV1RGOjpOb3ROdWxs
UGFzc1JlZlB0cjo6cmVsZWFzZVJlZik6CisgICAgICAgIChXVEY6Ok5vdE51bGxQYXNzUmVmUHRy
OjpvcGVyYXRvciopOgorICAgICAgICAoV1RGOjpOb3ROdWxsUGFzc1JlZlB0cjo6b3BlcmF0b3It
Pik6CisgICAgICAgIChXVEY6Ok5vdE51bGxQYXNzUmVmUHRyOjpvcGVyYXRvciEpOgorICAgICAg
ICAoV1RGOjpOb3ROdWxsUGFzc1JlZlB0cjo6b3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSk6
CisgICAgICAgICogd3RmL1JlZlB0ci5oOgorICAgICAgICAoV1RGOjo6OlJlZlB0cik6CisgICAg
ICAgIChXVEY6Ojo6b3BlcmF0b3IpOgorCiAyMDA5LTA5LTI4ICBKYWt1YiBXaWVjem9yZWsgIDxm
YXcyMTdAZ21haWwuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEhhdXNtYW5uLgpJ
bmRleDogSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAkocmV2aXNpb24gNDg3NzQpCisrKyBKYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDEyICs5
NSwxMiBAQCBfX1pOM0pTQzEwSWRlbnRpZmllcjI0Y2hlY2tTYW1lSWRlbnRpZmllCiBfX1pOM0pT
QzEwSWRlbnRpZmllcjI0Y2hlY2tTYW1lSWRlbnRpZmllclRhYmxlRVBOU185RXhlY1N0YXRlRVBO
U183VVN0cmluZzNSZXBFIAogX19aTjNKU0MxMElkZW50aWZpZXIzYWRkRVBOU185RXhlY1N0YXRl
RVBLYwogX19aTjNKU0MxMElkZW50aWZpZXI1ZXF1YWxFUEtOU183VVN0cmluZzNSZXBFUEtjCi1f
X1pOM0pTQzEwSlNGdW5jdGlvbkMxRVBOU185RXhlY1N0YXRlRU4zV1RGMTBQYXNzUmVmUHRySU5T
XzlTdHJ1Y3R1cmVFRUVpUktOU18xMElkZW50aWZpZXJFUEZOU183SlNWYWx1ZUVTMl9QTlNfOEpT
T2JqZWN0RVNBX1JLTlNfN0FyZ0xpc3RFRQorX19aTjNKU0MxMEpTRnVuY3Rpb25DMUVQTlNfOUV4
ZWNTdGF0ZUVOM1dURjE3Tm90TnVsbFBhc3NSZWZQdHJJTlNfOVN0cnVjdHVyZUVFRWlSS05TXzEw
SWRlbnRpZmllckVQRk5TXzdKU1ZhbHVlRVMyX1BOU184SlNPYmplY3RFU0FfUktOU183QXJnTGlz
dEVFCiBfX1pOM0pTQzEwdGhyb3dFcnJvckVQTlNfOUV4ZWNTdGF0ZUVOU185RXJyb3JUeXBlRQog
X19aTjNKU0MxMHRocm93RXJyb3JFUE5TXzlFeGVjU3RhdGVFTlNfOUVycm9yVHlwZUVQS2MKIF9f
Wk4zSlNDMTB0aHJvd0Vycm9yRVBOU185RXhlY1N0YXRlRU5TXzlFcnJvclR5cGVFUktOU183VVN0
cmluZ0UKIF9fWk4zSlNDMTFKU0J5dGVBcnJheTE1Y3JlYXRlU3RydWN0dXJlRU5TXzdKU1ZhbHVl
RQotX19aTjNKU0MxMUpTQnl0ZUFycmF5QzFFUE5TXzlFeGVjU3RhdGVFTjNXVEYxMFBhc3NSZWZQ
dHJJTlNfOVN0cnVjdHVyZUVFRVBOUzNfOUJ5dGVBcnJheUVQS05TXzlDbGFzc0luZm9FCitfX1pO
M0pTQzExSlNCeXRlQXJyYXlDMUVQTlNfOUV4ZWNTdGF0ZUVOM1dURjE3Tm90TnVsbFBhc3NSZWZQ
dHJJTlNfOVN0cnVjdHVyZUVFRVBOUzNfOUJ5dGVBcnJheUVQS05TXzlDbGFzc0luZm9FCiBfX1pO
M0pTQzExUGFyc2VyQXJlbmE1cmVzZXRFdgogX19aTjNKU0MxMWNoZWNrU3ludGF4RVBOU185RXhl
Y1N0YXRlRVJLTlNfMTBTb3VyY2VDb2RlRQogX19aTjNKU0MxMkRhdGVJbnN0YW5jZTRpbmZvRQpA
QCAtMTE5LDcgKzExOSw3IEBAIF9fWk4zSlNDMTJTdHJpbmdPYmplY3QxOWdldE93blByb3BlcnR5
TmEKIF9fWk4zSlNDMTJTdHJpbmdPYmplY3QyNGdldE93blByb3BlcnR5RGVzY3JpcHRvckVQTlNf
OUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckVSTlNfMThQcm9wZXJ0eURlc2NyaXB0b3JFCiBf
X1pOM0pTQzEyU3RyaW5nT2JqZWN0M3B1dEVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmll
ckVOU183SlNWYWx1ZUVSTlNfMTVQdXRQcm9wZXJ0eVNsb3RFCiBfX1pOM0pTQzEyU3RyaW5nT2Jq
ZWN0NGluZm9FCi1fX1pOM0pTQzEyU3RyaW5nT2JqZWN0QzJFUE5TXzlFeGVjU3RhdGVFTjNXVEYx
MFBhc3NSZWZQdHJJTlNfOVN0cnVjdHVyZUVFRVJLTlNfN1VTdHJpbmdFCitfX1pOM0pTQzEyU3Ry
aW5nT2JqZWN0QzJFUE5TXzlFeGVjU3RhdGVFTjNXVEYxN05vdE51bGxQYXNzUmVmUHRySU5TXzlT
dHJ1Y3R1cmVFRUVSS05TXzdVU3RyaW5nRQogX19aTjNKU0MxMmpzTnVtYmVyQ2VsbEVQTlNfOUV4
ZWNTdGF0ZUVkCiBfX1pOM0pTQzEybm9uSW5saW5lTmFORXYKIF9fWk4zSlNDMTNTYW1wbGluZ0Zs
YWdzNHN0b3BFdgpAQCAtMTQzLDE0ICsxNDMsMTMgQEAgX19aTjNKU0MxNUpTV3JhcHBlck9iamVj
dDEybWFya0NoaWxkcmVuRQogX19aTjNKU0MxNXRvSW50MzJTbG93Q2FzZUVkUmIKIF9fWk4zSlND
MTZJbnRlcm5hbEZ1bmN0aW9uNGluZm9FCiBfX1pOM0pTQzE2SW50ZXJuYWxGdW5jdGlvbjRuYW1l
RVBOU18xMkpTR2xvYmFsRGF0YUUKLV9fWk4zSlNDMTZJbnRlcm5hbEZ1bmN0aW9uQzJFUE5TXzEy
SlNHbG9iYWxEYXRhRU4zV1RGMTBQYXNzUmVmUHRySU5TXzlTdHJ1Y3R1cmVFRUVSS05TXzEwSWRl
bnRpZmllckUKK19fWk4zSlNDMTZJbnRlcm5hbEZ1bmN0aW9uQzJFUE5TXzEySlNHbG9iYWxEYXRh
RU4zV1RGMTdOb3ROdWxsUGFzc1JlZlB0cklOU185U3RydWN0dXJlRUVFUktOU18xMElkZW50aWZp
ZXJFCiBfX1pOM0pTQzE2SlNWYXJpYWJsZU9iamVjdDE0ZGVsZXRlUHJvcGVydHlFUE5TXzlFeGVj
U3RhdGVFUktOU18xMElkZW50aWZpZXJFCiBfX1pOM0pTQzE2SlNWYXJpYWJsZU9iamVjdDE0c3lt
Ym9sVGFibGVHZXRFUktOU18xMElkZW50aWZpZXJFUk5TXzE4UHJvcGVydHlEZXNjcmlwdG9yRQog
X19aTjNKU0MxNkpTVmFyaWFibGVPYmplY3QxOWdldE93blByb3BlcnR5TmFtZXNFUE5TXzlFeGVj
U3RhdGVFUk5TXzE3UHJvcGVydHlOYW1lQXJyYXlFCiBfX1pOM0pTQzE2dG9VSW50MzJTbG93Q2Fz
ZUVkUmIKIF9fWk4zSlNDMTdCeXRlY29kZUdlbmVyYXRvcjIxc2V0RHVtcHNHZW5lcmF0ZWRDb2Rl
RWIKIF9fWk4zSlNDMTdQcm9wZXJ0eU5hbWVBcnJheTNhZGRFUE5TXzdVU3RyaW5nM1JlcEUKLV9f
Wk4zSlNDMTdQcm90b3R5cGVGdW5jdGlvbkMxRVBOU185RXhlY1N0YXRlRU4zV1RGMTBQYXNzUmVm
UHRySU5TXzlTdHJ1Y3R1cmVFRUVpUktOU18xMElkZW50aWZpZXJFUEZOU183SlNWYWx1ZUVTMl9Q
TlNfOEpTT2JqZWN0RVNBX1JLTlNfN0FyZ0xpc3RFRQogX19aTjNKU0MxN1Byb3RvdHlwZUZ1bmN0
aW9uQzFFUE5TXzlFeGVjU3RhdGVFaVJLTlNfMTBJZGVudGlmaWVyRVBGTlNfN0pTVmFsdWVFUzJf
UE5TXzhKU09iamVjdEVTNl9SS05TXzdBcmdMaXN0RUUKIF9fWk4zSlNDMTdjb25zdHJ1Y3RGdW5j
dGlvbkVQTlNfOUV4ZWNTdGF0ZUVSS05TXzdBcmdMaXN0RVJLTlNfMTBJZGVudGlmaWVyRVJLTlNf
N1VTdHJpbmdFaQogX19aTjNKU0MxOERlYnVnZ2VyQWN0aXZhdGlvbkMxRVBOU184SlNPYmplY3RF
CkBAIC0yMTAsOCArMjA5LDggQEAgX19aTjNKU0M2UGFyc2VyNXBhcnNlRVBOU18xMkpTR2xvYmFs
RGF0YQogX19aTjNKU0M3Q1N0cmluZ0QxRXYKIF9fWk4zSlNDN0NTdHJpbmdhU0VSS1MwXwogX19a
TjNKU0M3SlNBcnJheTRpbmZvRQotX19aTjNKU0M3SlNBcnJheUMxRU4zV1RGMTBQYXNzUmVmUHRy
SU5TXzlTdHJ1Y3R1cmVFRUUKLV9fWk4zSlNDN0pTQXJyYXlDMUVOM1dURjEwUGFzc1JlZlB0cklO
U185U3RydWN0dXJlRUVFUktOU183QXJnTGlzdEUKK19fWk4zSlNDN0pTQXJyYXlDMUVOM1dURjE3
Tm90TnVsbFBhc3NSZWZQdHJJTlNfOVN0cnVjdHVyZUVFRQorX19aTjNKU0M3SlNBcnJheUMxRU4z
V1RGMTdOb3ROdWxsUGFzc1JlZlB0cklOU185U3RydWN0dXJlRUVFUktOU183QXJnTGlzdEUKIF9f
Wk4zSlNDN1Byb2ZpbGUxMHJlc3RvcmVBbGxFdgogX19aTjNKU0M3UHJvZmlsZTVmb2N1c0VQS05T
XzExUHJvZmlsZU5vZGVFCiBfX1pOM0pTQzdQcm9maWxlN2V4Y2x1ZGVFUEtOU18xMVByb2ZpbGVO
b2RlRQpJbmRleDogSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5j
cHAJKHJldmlzaW9uIDQ4NzczKQorKysgSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tDb25z
dHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU0NhbGxiYWNrQ29uc3RydWN0b3I6OmluZm8gPSB7ICJD
YWxsYmFja0NvbnN0cnVjdG9yIiwgMCwgMCwgMCB9OwogCi1KU0NhbGxiYWNrQ29uc3RydWN0b3I6
OkpTQ2FsbGJhY2tDb25zdHJ1Y3RvcihQYXNzUmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlLCBK
U0NsYXNzUmVmIGpzQ2xhc3MsIEpTT2JqZWN0Q2FsbEFzQ29uc3RydWN0b3JDYWxsYmFjayBjYWxs
YmFjaykKK0pTQ2FsbGJhY2tDb25zdHJ1Y3Rvcjo6SlNDYWxsYmFja0NvbnN0cnVjdG9yKE5vdE51
bGxQYXNzUmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlLCBKU0NsYXNzUmVmIGpzQ2xhc3MsIEpT
T2JqZWN0Q2FsbEFzQ29uc3RydWN0b3JDYWxsYmFjayBjYWxsYmFjaykKICAgICA6IEpTT2JqZWN0
KHN0cnVjdHVyZSkKICAgICAsIG1fY2xhc3MoanNDbGFzcykKICAgICAsIG1fY2FsbGJhY2soY2Fs
bGJhY2spCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0NvbnN0cnVjdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5o
CShyZXZpc2lvbiA0ODc3MykKKysrIEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrQ29uc3Ry
dWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogY2xhc3MgSlNDYWxsYmFja0NvbnN0cnVjdG9yIDogcHVibGljIEpTT2JqZWN0IHsKIHB1Ymxp
YzoKLSAgICBKU0NhbGxiYWNrQ29uc3RydWN0b3IoUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+LCBKU0Ns
YXNzUmVmLCBKU09iamVjdENhbGxBc0NvbnN0cnVjdG9yQ2FsbGJhY2spOworICAgIEpTQ2FsbGJh
Y2tDb25zdHJ1Y3RvcihOb3ROdWxsUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+LCBKU0NsYXNzUmVmLCBK
U09iamVjdENhbGxBc0NvbnN0cnVjdG9yQ2FsbGJhY2spOwogICAgIHZpcnR1YWwgfkpTQ2FsbGJh
Y2tDb25zdHJ1Y3RvcigpOwogICAgIEpTQ2xhc3NSZWYgY2xhc3NSZWYoKSBjb25zdCB7IHJldHVy
biBtX2NsYXNzOyB9CiAgICAgSlNPYmplY3RDYWxsQXNDb25zdHJ1Y3RvckNhbGxiYWNrIGNhbGxi
YWNrKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsYmFjazsgfQpJbmRleDogSmF2YVNjcmlwdENvcmUv
QVBJL0pTQ2FsbGJhY2tPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9BUEkv
SlNDYWxsYmFja09iamVjdC5oCShyZXZpc2lvbiA0ODc3MykKKysrIEphdmFTY3JpcHRDb3JlL0FQ
SS9KU0NhbGxiYWNrT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiB0ZW1wbGF0ZSA8Y2xhc3MgQmFzZT4KIGNsYXNzIEpTQ2FsbGJhY2tPYmpl
Y3QgOiBwdWJsaWMgQmFzZSB7CiBwdWJsaWM6Ci0gICAgSlNDYWxsYmFja09iamVjdChFeGVjU3Rh
dGUqLCBQYXNzUmVmUHRyPFN0cnVjdHVyZT4sIEpTQ2xhc3NSZWYsIHZvaWQqIGRhdGEpOworICAg
IEpTQ2FsbGJhY2tPYmplY3QoRXhlY1N0YXRlKiwgTm90TnVsbFBhc3NSZWZQdHI8U3RydWN0dXJl
PiwgSlNDbGFzc1JlZiwgdm9pZCogZGF0YSk7CiAgICAgSlNDYWxsYmFja09iamVjdChKU0NsYXNz
UmVmKTsKICAgICB2aXJ0dWFsIH5KU0NhbGxiYWNrT2JqZWN0KCk7CiAKSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAkocmV2aXNpb24gNDg3
NzMpCisrKyBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIGlubGluZSBKU0NhbGxiYWNrT2JqZWN0PEJh
c2U+KiBKU0NhbGxiYWMKIH0KIAogdGVtcGxhdGUgPGNsYXNzIEJhc2U+Ci1KU0NhbGxiYWNrT2Jq
ZWN0PEJhc2U+OjpKU0NhbGxiYWNrT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0cjxT
dHJ1Y3R1cmU+IHN0cnVjdHVyZSwgSlNDbGFzc1JlZiBqc0NsYXNzLCB2b2lkKiBkYXRhKQorSlND
YWxsYmFja09iamVjdDxCYXNlPjo6SlNDYWxsYmFja09iamVjdChFeGVjU3RhdGUqIGV4ZWMsIE5v
dE51bGxQYXNzUmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlLCBKU0NsYXNzUmVmIGpzQ2xhc3Ms
IHZvaWQqIGRhdGEpCiAgICAgOiBCYXNlKHN0cnVjdHVyZSkKICAgICAsIG1fY2FsbGJhY2tPYmpl
Y3REYXRhKG5ldyBKU0NhbGxiYWNrT2JqZWN0RGF0YShkYXRhLCBqc0NsYXNzKSkKIHsKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiA0ODc3MykKKysrIEphdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC00NDEsMTAg
KzQ0MSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgQUxXQVlTX0lOTElORSBib29sIGlz
Q29uc3RhbnRSZWdpc3RlckluZGV4KGludCBpbmRleCkgeyByZXR1cm4gaW5kZXggPj0gRmlyc3RD
b25zdGFudFJlZ2lzdGVySW5kZXg7IH0KICAgICAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdl
dENvbnN0YW50KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tp
bmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XS5qc1ZhbHVlKCk7IH0KIAotICAgICAg
ICB1bnNpZ25lZCBhZGRGdW5jdGlvbkRlY2woUGFzc1JlZlB0cjxGdW5jdGlvbkV4ZWN1dGFibGU+
IG4pIHsgdW5zaWduZWQgc2l6ZSA9IG1fZnVuY3Rpb25EZWNscy5zaXplKCk7IG1fZnVuY3Rpb25E
ZWNscy5hcHBlbmQobik7IHJldHVybiBzaXplOyB9CisgICAgICAgIHVuc2lnbmVkIGFkZEZ1bmN0
aW9uRGVjbChOb3ROdWxsUGFzc1JlZlB0cjxGdW5jdGlvbkV4ZWN1dGFibGU+IG4pIHsgdW5zaWdu
ZWQgc2l6ZSA9IG1fZnVuY3Rpb25EZWNscy5zaXplKCk7IG1fZnVuY3Rpb25EZWNscy5hcHBlbmQo
bik7IHJldHVybiBzaXplOyB9CiAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25E
ZWNsKGludCBpbmRleCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlY2xzW2luZGV4XS5nZXQoKTsgfQog
ICAgICAgICBpbnQgbnVtYmVyT2ZGdW5jdGlvbkRlY2xzKCkgeyByZXR1cm4gbV9mdW5jdGlvbkRl
Y2xzLnNpemUoKTsgfQotICAgICAgICB1bnNpZ25lZCBhZGRGdW5jdGlvbkV4cHIoUGFzc1JlZlB0
cjxGdW5jdGlvbkV4ZWN1dGFibGU+IG4pIHsgdW5zaWduZWQgc2l6ZSA9IG1fZnVuY3Rpb25FeHBy
cy5zaXplKCk7IG1fZnVuY3Rpb25FeHBycy5hcHBlbmQobik7IHJldHVybiBzaXplOyB9CisgICAg
ICAgIHVuc2lnbmVkIGFkZEZ1bmN0aW9uRXhwcihOb3ROdWxsUGFzc1JlZlB0cjxGdW5jdGlvbkV4
ZWN1dGFibGU+IG4pIHsgdW5zaWduZWQgc2l6ZSA9IG1fZnVuY3Rpb25FeHBycy5zaXplKCk7IG1f
ZnVuY3Rpb25FeHBycy5hcHBlbmQobik7IHJldHVybiBzaXplOyB9CiAgICAgICAgIEZ1bmN0aW9u
RXhlY3V0YWJsZSogZnVuY3Rpb25FeHByKGludCBpbmRleCkgeyByZXR1cm4gbV9mdW5jdGlvbkV4
cHJzW2luZGV4XS5nZXQoKTsgfQogCiAgICAgICAgIHVuc2lnbmVkIGFkZFJlZ0V4cChSZWdFeHAq
IHIpIHsgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOyB1bnNpZ25lZCBzaXplID0gbV9yYXJl
RGF0YS0+bV9yZWdleHBzLnNpemUoKTsgbV9yYXJlRGF0YS0+bV9yZWdleHBzLmFwcGVuZChyKTsg
cmV0dXJuIHNpemU7IH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlDb25zdHJ1
Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnN0
cnVjdG9yLmNwcAkocmV2aXNpb24gNDg3NzMpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fy
cmF5Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIEFTU0VS
VF9DTEFTU19GSVRTX0lOX0NFTEwoQXJyYXlDb25zdHJ1Y3QKICAgICAKIHN0YXRpYyBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgYXJyYXlDb25zdHJ1Y3RvcklzQXJyYXkoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7CiAKLUFycmF5Q29uc3RydWN0b3I6OkFycmF5
Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0
dXJlLCBBcnJheVByb3RvdHlwZSogYXJyYXlQcm90b3R5cGUsIFN0cnVjdHVyZSogcHJvdG90eXBl
RnVuY3Rpb25TdHJ1Y3R1cmUpCitBcnJheUNvbnN0cnVjdG9yOjpBcnJheUNvbnN0cnVjdG9yKEV4
ZWNTdGF0ZSogZXhlYywgTm90TnVsbFBhc3NSZWZQdHI8U3RydWN0dXJlPiBzdHJ1Y3R1cmUsIEFy
cmF5UHJvdG90eXBlKiBhcnJheVByb3RvdHlwZSwgU3RydWN0dXJlKiBwcm90b3R5cGVGdW5jdGlv
blN0cnVjdHVyZSkKICAgICA6IEludGVybmFsRnVuY3Rpb24oJmV4ZWMtPmdsb2JhbERhdGEoKSwg
c3RydWN0dXJlLCBJZGVudGlmaWVyKGV4ZWMsIGFycmF5UHJvdG90eXBlLT5jbGFzc0luZm8oKS0+
Y2xhc3NOYW1lKSkKIHsKICAgICAvLyBFQ01BIDE1LjQuMy4xIEFycmF5LnByb3RvdHlwZQpJbmRl
eDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDQ4
NzczKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUNvbnN0cnVjdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBB
cnJheUNvbnN0cnVjdG9yIDogcHVibGljIEludGVybmFsRnVuY3Rpb24gewogICAgIHB1YmxpYzoK
LSAgICAgICAgQXJyYXlDb25zdHJ1Y3RvcihFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPFN0cnVjdHVy
ZT4sIEFycmF5UHJvdG90eXBlKiwgU3RydWN0dXJlKik7CisgICAgICAgIEFycmF5Q29uc3RydWN0
b3IoRXhlY1N0YXRlKiwgTm90TnVsbFBhc3NSZWZQdHI8U3RydWN0dXJlPiwgQXJyYXlQcm90b3R5
cGUqLCBTdHJ1Y3R1cmUqKTsKIAogICAgICAgICB2aXJ0dWFsIENvbnN0cnVjdFR5cGUgZ2V0Q29u
c3RydWN0RGF0YShDb25zdHJ1Y3REYXRhJik7CiAgICAgICAgIHZpcnR1YWwgQ2FsbFR5cGUgZ2V0
Q2FsbERhdGEoQ2FsbERhdGEmKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQ
cm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQ
cm90b3R5cGUuY3BwCShyZXZpc2lvbiA0ODc3MykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QXJyYXlQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsNyArMTE1LDcgQEAgY29u
c3QgQ2xhc3NJbmZvIEFycmF5UHJvdG90eXBlOjppbmZvID0gewogKi8KIAogLy8gRUNNQSAxNS40
LjQKLUFycmF5UHJvdG90eXBlOjpBcnJheVByb3RvdHlwZShQYXNzUmVmUHRyPFN0cnVjdHVyZT4g
c3RydWN0dXJlKQorQXJyYXlQcm90b3R5cGU6OkFycmF5UHJvdG90eXBlKE5vdE51bGxQYXNzUmVm
UHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlKQogICAgIDogSlNBcnJheShzdHJ1Y3R1cmUpCiB7CiB9
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5oCShyZXZpc2lvbiA0
ODc3MykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEFy
cmF5UHJvdG90eXBlIDogcHVibGljIEpTQXJyYXkgewogICAgIHB1YmxpYzoKLSAgICAgICAgZXhw
bGljaXQgQXJyYXlQcm90b3R5cGUoUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+KTsKKyAgICAgICAgZXhw
bGljaXQgQXJyYXlQcm90b3R5cGUoTm90TnVsbFBhc3NSZWZQdHI8U3RydWN0dXJlPik7CiAKICAg
ICAgICAgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmll
ciYsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eURlc2NyaXB0
b3ImKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rv
ci5jcHAJKHJldmlzaW9uIDQ4NzczKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFu
Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKEJvb2xlYW5Db25zdHJ1Y3Rvcik7
CiAKLUJvb2xlYW5Db25zdHJ1Y3Rvcjo6Qm9vbGVhbkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhl
YywgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZSwgQm9vbGVhblByb3RvdHlwZSogYm9v
bGVhblByb3RvdHlwZSkKK0Jvb2xlYW5Db25zdHJ1Y3Rvcjo6Qm9vbGVhbkNvbnN0cnVjdG9yKEV4
ZWNTdGF0ZSogZXhlYywgTm90TnVsbFBhc3NSZWZQdHI8U3RydWN0dXJlPiBzdHJ1Y3R1cmUsIEJv
b2xlYW5Qcm90b3R5cGUqIGJvb2xlYW5Qcm90b3R5cGUpCiAgICAgOiBJbnRlcm5hbEZ1bmN0aW9u
KCZleGVjLT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZSwgSWRlbnRpZmllcihleGVjLCBib29sZWFu
UHJvdG90eXBlLT5jbGFzc0luZm8oKS0+Y2xhc3NOYW1lKSkKIHsKICAgICBwdXREaXJlY3RXaXRo
b3V0VHJhbnNpdGlvbihleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBib29sZWFuUHJv
dG90eXBlLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSk7CkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Jvb2xlYW5Db25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbkNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDQ4NzczKQor
KysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuQ29uc3RydWN0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtMjksNyArMjksNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEJvb2xl
YW5Db25zdHJ1Y3RvciA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKICAgICBwdWJsaWM6Ci0g
ICAgICAgIEJvb2xlYW5Db25zdHJ1Y3RvcihFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPFN0cnVjdHVy
ZT4sIEJvb2xlYW5Qcm90b3R5cGUqKTsKKyAgICAgICAgQm9vbGVhbkNvbnN0cnVjdG9yKEV4ZWNT
dGF0ZSosIE5vdE51bGxQYXNzUmVmUHRyPFN0cnVjdHVyZT4sIEJvb2xlYW5Qcm90b3R5cGUqKTsK
IAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgQ29uc3RydWN0VHlwZSBnZXRDb25zdHJ1
Y3REYXRhKENvbnN0cnVjdERhdGEmKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9v
bGVhbk9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29s
ZWFuT2JqZWN0LmNwcAkocmV2aXNpb24gNDg3NzMpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Jvb2xlYW5PYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBAIEFTU0VS
VF9DTEFTU19GSVRTX0lOX0NFTEwoQm9vbGVhbk9iamVjdCkKIAogY29uc3QgQ2xhc3NJbmZvIEJv
b2xlYW5PYmplY3Q6OmluZm8gPSB7ICJCb29sZWFuIiwgMCwgMCwgMCB9OwogCi1Cb29sZWFuT2Jq
ZWN0OjpCb29sZWFuT2JqZWN0KFBhc3NSZWZQdHI8U3RydWN0dXJlPiBzdHJ1Y3R1cmUpCitCb29s
ZWFuT2JqZWN0OjpCb29sZWFuT2JqZWN0KE5vdE51bGxQYXNzUmVmUHRyPFN0cnVjdHVyZT4gc3Ry
dWN0dXJlKQogICAgIDogSlNXcmFwcGVyT2JqZWN0KHN0cnVjdHVyZSkKIHsKIH0KSW5kZXg6IEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbk9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbk9iamVjdC5oCShyZXZpc2lvbiA0ODc3MykKKysrIEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhbk9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Nyw3ICsyNyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgQm9vbGVhbk9iamVjdCA6
IHB1YmxpYyBKU1dyYXBwZXJPYmplY3QgewogICAgIHB1YmxpYzoKLSAgICAgICAgZXhwbGljaXQg
Qm9vbGVhbk9iamVjdChQYXNzUmVmUHRyPFN0cnVjdHVyZT4pOworICAgICAgICBleHBsaWNpdCBC
b29sZWFuT2JqZWN0KE5vdE51bGxQYXNzUmVmUHRyPFN0cnVjdHVyZT4pOwogCiAgICAgICAgIHZp
cnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsg
fQogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CkluZGV4OiBKYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Jvb2xlYW5Qcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQm9vbGVhblByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDQ4NzczKQorKysg
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Cb29sZWFuUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzcsNyArMzcsNyBAQCBzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGJvb2xlYW5Q
cm90CiAKIC8vIEVDTUEgMTUuNi40CiAKLUJvb2xlYW5Qcm90b3R5cGU6OkJvb2xlYW5Qcm90b3R5
cGUoRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlLCBTdHJ1
Y3R1cmUqIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlKQorQm9vbGVhblByb3RvdHlwZTo6Qm9v
bGVhblByb3RvdHlwZShFeGVjU3RhdGUqIGV4ZWMsIE5vdE51bGxQYXNzUmVmUHRyPFN0cnVjdHVy
ZT4gc3RydWN0dXJlLCBTdHJ1Y3R1cmUqIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlKQogICAg
IDogQm9vbGVhbk9iamVjdChzdHJ1Y3R1cmUpCiB7CiAgICAgc2V0SW50ZXJuYWxWYWx1ZShqc0Jv
b2xlYW4oZmFsc2UpKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhblByb3Rv
dHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVhblByb3Rv
dHlwZS5oCShyZXZpc2lvbiA0ODc3MykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQm9vbGVh
blByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgY2xhc3MgQm9vbGVhblByb3RvdHlwZSA6IHB1YmxpYyBCb29sZWFuT2JqZWN0
IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEJvb2xlYW5Qcm90b3R5cGUoRXhlY1N0YXRlKiwgUGFz
c1JlZlB0cjxTdHJ1Y3R1cmU+LCBTdHJ1Y3R1cmUqIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJl
KTsKKyAgICAgICAgQm9vbGVhblByb3RvdHlwZShFeGVjU3RhdGUqLCBOb3ROdWxsUGFzc1JlZlB0
cjxTdHJ1Y3R1cmU+LCBTdHJ1Y3R1cmUqIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlKTsKICAg
ICB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RGF0ZUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0RhdGVDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDQ4NzczKQorKysgSmF2YVNjcmlwdENvcmUv
cnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3
IEBAIHN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVBhcnNlKEUKIHN0YXRpYyBKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZGF0ZU5vdyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUs
IGNvbnN0IEFyZ0xpc3QmKTsKIHN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVVUQyhF
eGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKIAotRGF0ZUNv
bnN0cnVjdG9yOjpEYXRlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFN0
cnVjdHVyZT4gc3RydWN0dXJlLCBTdHJ1Y3R1cmUqIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJl
LCBEYXRlUHJvdG90eXBlKiBkYXRlUHJvdG90eXBlKQorRGF0ZUNvbnN0cnVjdG9yOjpEYXRlQ29u
c3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBOb3ROdWxsUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IHN0
cnVjdHVyZSwgU3RydWN0dXJlKiBwcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZSwgRGF0ZVByb3Rv
dHlwZSogZGF0ZVByb3RvdHlwZSkKICAgICA6IEludGVybmFsRnVuY3Rpb24oJmV4ZWMtPmdsb2Jh
bERhdGEoKSwgc3RydWN0dXJlLCBJZGVudGlmaWVyKGV4ZWMsIGRhdGVQcm90b3R5cGUtPmNsYXNz
SW5mbygpLT5jbGFzc05hbWUpKQogewogICAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24o
ZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgZGF0ZVByb3RvdHlwZSwgRG9udEVudW18
RG9udERlbGV0ZXxSZWFkT25seSk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVD
b25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNv
bnN0cnVjdG9yLmgJKHJldmlzaW9uIDQ4NzczKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9E
YXRlQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgIGNsYXNzIERhdGVDb25zdHJ1Y3RvciA6IHB1YmxpYyBJbnRlcm5hbEZ1
bmN0aW9uIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIERhdGVDb25zdHJ1Y3RvcihFeGVjU3RhdGUq
LCBQYXNzUmVmUHRyPFN0cnVjdHVyZT4sIFN0cnVjdHVyZSogcHJvdG90eXBlRnVuY3Rpb25TdHJ1
Y3R1cmUsIERhdGVQcm90b3R5cGUqKTsKKyAgICAgICAgRGF0ZUNvbnN0cnVjdG9yKEV4ZWNTdGF0
ZSosIE5vdE51bGxQYXNzUmVmUHRyPFN0cnVjdHVyZT4sIFN0cnVjdHVyZSogcHJvdG90eXBlRnVu
Y3Rpb25TdHJ1Y3R1cmUsIERhdGVQcm90b3R5cGUqKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAg
IHZpcnR1YWwgQ29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKENvbnN0cnVjdERhdGEmKTsK
SW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUluc3RhbmNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVJbnN0YW5jZS5jcHAJKHJldmlzaW9uIDQ4
NzczKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlSW5zdGFuY2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIHN0cnVjdCBEYXRlSW5zdGFuY2U6OkNhY2hlIHsKIAog
Y29uc3QgQ2xhc3NJbmZvIERhdGVJbnN0YW5jZTo6aW5mbyA9IHsiRGF0ZSIsIDAsIDAsIDB9Owog
Ci1EYXRlSW5zdGFuY2U6OkRhdGVJbnN0YW5jZShQYXNzUmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0
dXJlKQorRGF0ZUluc3RhbmNlOjpEYXRlSW5zdGFuY2UoTm90TnVsbFBhc3NSZWZQdHI8U3RydWN0
dXJlPiBzdHJ1Y3R1cmUpCiAgICAgOiBKU1dyYXBwZXJPYmplY3Qoc3RydWN0dXJlKQogICAgICwg
bV9jYWNoZSgwKQogewpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlSW5zdGFuY2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVJbnN0YW5jZS5oCShy
ZXZpc2lvbiA0ODc3MykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUluc3RhbmNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBj
bGFzcyBEYXRlSW5zdGFuY2UgOiBwdWJsaWMgSlNXcmFwcGVyT2JqZWN0IHsKICAgICBwdWJsaWM6
Ci0gICAgICAgIGV4cGxpY2l0IERhdGVJbnN0YW5jZShQYXNzUmVmUHRyPFN0cnVjdHVyZT4pOwor
ICAgICAgICBleHBsaWNpdCBEYXRlSW5zdGFuY2UoTm90TnVsbFBhc3NSZWZQdHI8U3RydWN0dXJl
Pik7CiAgICAgICAgIHZpcnR1YWwgfkRhdGVJbnN0YW5jZSgpOwogCiAgICAgICAgIGRvdWJsZSBp
bnRlcm5hbE51bWJlcigpIGNvbnN0IHsgcmV0dXJuIGludGVybmFsVmFsdWUoKS51bmNoZWNrZWRH
ZXROdW1iZXIoKTsgfQpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQcm90b3R5cGUu
Y3BwCShyZXZpc2lvbiA0ODc3MykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3Rv
dHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5NSw3ICszOTUsNyBAQCBjb25zdCBDbGFzc0lu
Zm8gRGF0ZVByb3RvdHlwZTo6aW5mbyA9IHsiCiAKIC8vIEVDTUEgMTUuOS40CiAKLURhdGVQcm90
b3R5cGU6OkRhdGVQcm90b3R5cGUoRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFN0cnVjdHVy
ZT4gc3RydWN0dXJlKQorRGF0ZVByb3RvdHlwZTo6RGF0ZVByb3RvdHlwZShFeGVjU3RhdGUqIGV4
ZWMsIE5vdE51bGxQYXNzUmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlKQogICAgIDogRGF0ZUlu
c3RhbmNlKHN0cnVjdHVyZSkKIHsKICAgICBzZXRJbnRlcm5hbFZhbHVlKGpzTmFOKGV4ZWMpKTsK
SW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5oCShyZXZpc2lvbiA0ODc3
MykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOSw3ICsyOSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgRGF0ZVBy
b3RvdHlwZSA6IHB1YmxpYyBEYXRlSW5zdGFuY2UgewogICAgIHB1YmxpYzoKLSAgICAgICAgRGF0
ZVByb3RvdHlwZShFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPFN0cnVjdHVyZT4pOworICAgICAgICBE
YXRlUHJvdG90eXBlKEV4ZWNTdGF0ZSosIE5vdE51bGxQYXNzUmVmUHRyPFN0cnVjdHVyZT4pOwog
CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29u
c3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9w
ZXJ0eURlc2NyaXB0b3ImKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JDb25z
dHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckNv
bnN0cnVjdG9yLmNwcAkocmV2aXNpb24gNDg3NzMpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Vycm9yQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBAIG5h
bWVzcGFjZSBKU0MgewogCiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKEVycm9yQ29uc3RydWN0
b3IpOwogCi1FcnJvckNvbnN0cnVjdG9yOjpFcnJvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhl
YywgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZSwgRXJyb3JQcm90b3R5cGUqIGVycm9y
UHJvdG90eXBlKQorRXJyb3JDb25zdHJ1Y3Rvcjo6RXJyb3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUq
IGV4ZWMsIE5vdE51bGxQYXNzUmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlLCBFcnJvclByb3Rv
dHlwZSogZXJyb3JQcm90b3R5cGUpCiAgICAgOiBJbnRlcm5hbEZ1bmN0aW9uKCZleGVjLT5nbG9i
YWxEYXRhKCksIHN0cnVjdHVyZSwgSWRlbnRpZmllcihleGVjLCBlcnJvclByb3RvdHlwZS0+Y2xh
c3NJbmZvKCktPmNsYXNzTmFtZSkpCiB7CiAgICAgLy8gRUNNQSAxNS4xMS4zLjEgRXJyb3IucHJv
dG90eXBlCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuaAko
cmV2aXNpb24gNDg3NzMpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
ICAgIGNsYXNzIEVycm9yQ29uc3RydWN0b3IgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7CiAg
ICAgcHVibGljOgotICAgICAgICBFcnJvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSosIFBhc3NSZWZQ
dHI8U3RydWN0dXJlPiwgRXJyb3JQcm90b3R5cGUqKTsKKyAgICAgICAgRXJyb3JDb25zdHJ1Y3Rv
cihFeGVjU3RhdGUqLCBOb3ROdWxsUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+LCBFcnJvclByb3RvdHlw
ZSopOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBDb25zdHJ1Y3RUeXBlIGdldENv
bnN0cnVjdERhdGEoQ29uc3RydWN0RGF0YSYpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FcnJvckluc3RhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Vycm9ySW5zdGFuY2UuY3BwCShyZXZpc2lvbiA0ODc3MykKKysrIEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBFcnJvckluc3RhbmNlOjppbmZvID0g
eyAiRXJyb3IiLCAwLCAwLCAwIH07CiAKLUVycm9ySW5zdGFuY2U6OkVycm9ySW5zdGFuY2UoUGFz
c1JlZlB0cjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZSkKK0Vycm9ySW5zdGFuY2U6OkVycm9ySW5zdGFu
Y2UoTm90TnVsbFBhc3NSZWZQdHI8U3RydWN0dXJlPiBzdHJ1Y3R1cmUpCiAgICAgOiBKU09iamVj
dChzdHJ1Y3R1cmUpCiB7CiB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5z
dGFuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFu
Y2UuaAkocmV2aXNpb24gNDg3NzMpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5z
dGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogICAgIGNsYXNzIEVycm9ySW5zdGFuY2UgOiBwdWJsaWMgSlNPYmplY3QgewogICAgIHB1Ymxp
YzoKLSAgICAgICAgZXhwbGljaXQgRXJyb3JJbnN0YW5jZShQYXNzUmVmUHRyPFN0cnVjdHVyZT4p
OworICAgICAgICBleHBsaWNpdCBFcnJvckluc3RhbmNlKE5vdE51bGxQYXNzUmVmUHRyPFN0cnVj
dHVyZT4pOwogCiAgICAgICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBj
b25zdCB7IHJldHVybiAmaW5mbzsgfQogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGlu
Zm87CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJvdG90eXBlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJvdG90eXBlLmNwcAkocmV2
aXNpb24gNDg3NzMpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJvdG90eXBlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBBU1NFUlRfQ0xBU1NfRklUU19JTl9D
RUxMKEVycm9yUHJvdG90eXBlCiBzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGVycm9yUHJv
dG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdM
aXN0Jik7CiAKIC8vIEVDTUEgMTUuOS40Ci1FcnJvclByb3RvdHlwZTo6RXJyb3JQcm90b3R5cGUo
RXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlLCBTdHJ1Y3R1
cmUqIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlKQorRXJyb3JQcm90b3R5cGU6OkVycm9yUHJv
dG90eXBlKEV4ZWNTdGF0ZSogZXhlYywgTm90TnVsbFBhc3NSZWZQdHI8U3RydWN0dXJlPiBzdHJ1
Y3R1cmUsIFN0cnVjdHVyZSogcHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUpCiAgICAgOiBFcnJv
ckluc3RhbmNlKHN0cnVjdHVyZSkKIHsKICAgICAvLyBUaGUgY29uc3RydWN0b3Igd2lsbCBiZSBh
ZGRlZCBsYXRlciBpbiBFcnJvckNvbnN0cnVjdG9yJ3MgY29uc3RydWN0b3IKSW5kZXg6IEphdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Vycm9yUHJvdG90eXBlLmgJKHJldmlzaW9uIDQ4NzczKQorKysgSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw3ICsyOSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgRXJyb3JQcm90b3R5cGUg
OiBwdWJsaWMgRXJyb3JJbnN0YW5jZSB7CiAgICAgcHVibGljOgotICAgICAgICBFcnJvclByb3Rv
dHlwZShFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPFN0cnVjdHVyZT4sIFN0cnVjdHVyZSogcHJvdG90
eXBlRnVuY3Rpb25TdHJ1Y3R1cmUpOworICAgICAgICBFcnJvclByb3RvdHlwZShFeGVjU3RhdGUq
LCBOb3ROdWxsUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+LCBTdHJ1Y3R1cmUqIHByb3RvdHlwZUZ1bmN0
aW9uU3RydWN0dXJlKTsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IEphdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24g
NDg3NzQpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBBU1NF
UlRfQ0xBU1NfRklUU19JTl9DRUxMKEZ1bmN0aW9uQ29uc3RydWN0b3IpOwogCi1GdW5jdGlvbkNv
bnN0cnVjdG9yOjpGdW5jdGlvbkNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0
cjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZSwgRnVuY3Rpb25Qcm90b3R5cGUqIGZ1bmN0aW9uUHJvdG90
eXBlKQorRnVuY3Rpb25Db25zdHJ1Y3Rvcjo6RnVuY3Rpb25Db25zdHJ1Y3RvcihFeGVjU3RhdGUq
IGV4ZWMsIE5vdE51bGxQYXNzUmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlLCBGdW5jdGlvblBy
b3RvdHlwZSogZnVuY3Rpb25Qcm90b3R5cGUpCiAgICAgOiBJbnRlcm5hbEZ1bmN0aW9uKCZleGVj
LT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZSwgSWRlbnRpZmllcihleGVjLCBmdW5jdGlvblByb3Rv
dHlwZS0+Y2xhc3NJbmZvKCktPmNsYXNzTmFtZSkpCiB7CiAgICAgcHV0RGlyZWN0V2l0aG91dFRy
YW5zaXRpb24oZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgZnVuY3Rpb25Qcm90b3R5
cGUsIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5oCShyZXZpc2lvbiA0ODc3MykKKysr
IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOSw3ICsyOSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgRnVuY3Rp
b25Db25zdHJ1Y3RvciA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKICAgICBwdWJsaWM6Ci0g
ICAgICAgIEZ1bmN0aW9uQ29uc3RydWN0b3IoRXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxTdHJ1Y3R1
cmU+LCBGdW5jdGlvblByb3RvdHlwZSopOworICAgICAgICBGdW5jdGlvbkNvbnN0cnVjdG9yKEV4
ZWNTdGF0ZSosIE5vdE51bGxQYXNzUmVmUHRyPFN0cnVjdHVyZT4sIEZ1bmN0aW9uUHJvdG90eXBl
Kik7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIENvbnN0cnVjdFR5cGUgZ2V0Q29u
c3RydWN0RGF0YShDb25zdHJ1Y3REYXRhJik7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Z1bmN0aW9uUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcAkocmV2aXNpb24gNDg3NzMpCisrKyBKYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcs
NyArMzcsNyBAQCBzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJvCiBzdGF0
aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJvdG9GdW5jQXBwbHkoRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7CiBzdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGZ1bmN0aW9uUHJvdG9GdW5jQ2FsbChFeGVjU3RhdGUqLCBKU09iamVjdCos
IEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKIAotRnVuY3Rpb25Qcm90b3R5cGU6OkZ1bmN0aW9u
UHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IHN0cnVjdHVy
ZSkKK0Z1bmN0aW9uUHJvdG90eXBlOjpGdW5jdGlvblByb3RvdHlwZShFeGVjU3RhdGUqIGV4ZWMs
IE5vdE51bGxQYXNzUmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlKQogICAgIDogSW50ZXJuYWxG
dW5jdGlvbigmZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUsIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5udWxsSWRlbnRpZmllcikKIHsKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcihleGVjLCAwKSwgRG9udERlbGV0
ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9G
dW5jdGlvblByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RnVuY3Rpb25Qcm90b3R5cGUuaAkocmV2aXNpb24gNDg3NzMpCisrKyBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBGdW5jdGlvblByb3RvdHlwZSA6IHB1Ymxp
YyBJbnRlcm5hbEZ1bmN0aW9uIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEZ1bmN0aW9uUHJvdG90
eXBlKEV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8U3RydWN0dXJlPik7CisgICAgICAgIEZ1bmN0aW9u
UHJvdG90eXBlKEV4ZWNTdGF0ZSosIE5vdE51bGxQYXNzUmVmUHRyPFN0cnVjdHVyZT4pOwogICAg
ICAgICB2b2lkIGFkZEZ1bmN0aW9uUHJvcGVydGllcyhFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqIHBy
b3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLCBOYXRpdmVGdW5jdGlvbldyYXBwZXIqKiBjYWxsRnVu
Y3Rpb24sIE5hdGl2ZUZ1bmN0aW9uV3JhcHBlcioqIGFwcGx5RnVuY3Rpb24pOwogCiAgICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFsdWUgcHJv
dG8pCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dsb2JhbEV2YWxGdW5jdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9HbG9iYWxFdmFsRnVuY3Rpb24u
Y3BwCShyZXZpc2lvbiA0ODc3MykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2xvYmFsRXZh
bEZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChHbG9iYWxFdmFsRnVuY3Rpb24pOwog
Ci1HbG9iYWxFdmFsRnVuY3Rpb246Okdsb2JhbEV2YWxGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMs
IFBhc3NSZWZQdHI8U3RydWN0dXJlPiBzdHJ1Y3R1cmUsIGludCBsZW4sIGNvbnN0IElkZW50aWZp
ZXImIG5hbWUsIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBKU0dsb2JhbE9iamVjdCogY2FjaGVk
R2xvYmFsT2JqZWN0KQorR2xvYmFsRXZhbEZ1bmN0aW9uOjpHbG9iYWxFdmFsRnVuY3Rpb24oRXhl
Y1N0YXRlKiBleGVjLCBOb3ROdWxsUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZSwgaW50
IGxlbiwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIEpT
R2xvYmFsT2JqZWN0KiBjYWNoZWRHbG9iYWxPYmplY3QpCiAgICAgOiBQcm90b3R5cGVGdW5jdGlv
bihleGVjLCBzdHJ1Y3R1cmUsIGxlbiwgbmFtZSwgZnVuY3Rpb24pCiAgICAgLCBtX2NhY2hlZEds
b2JhbE9iamVjdChjYWNoZWRHbG9iYWxPYmplY3QpCiB7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0dsb2JhbEV2YWxGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvR2xvYmFsRXZhbEZ1bmN0aW9uLmgJKHJldmlzaW9uIDQ4NzczKQorKysgSmF2YVNj
cmlwdENvcmUvcnVudGltZS9HbG9iYWxFdmFsRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAt
MzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEdsb2JhbEV2YWxGdW5j
dGlvbiA6IHB1YmxpYyBQcm90b3R5cGVGdW5jdGlvbiB7CiAgICAgcHVibGljOgotICAgICAgICBH
bG9iYWxFdmFsRnVuY3Rpb24oRXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+LCBpbnQg
bGVuLCBjb25zdCBJZGVudGlmaWVyJiwgTmF0aXZlRnVuY3Rpb24sIEpTR2xvYmFsT2JqZWN0KiBl
eHBlY3RlZFRoaXNPYmplY3QpOworICAgICAgICBHbG9iYWxFdmFsRnVuY3Rpb24oRXhlY1N0YXRl
KiwgTm90TnVsbFBhc3NSZWZQdHI8U3RydWN0dXJlPiwgaW50IGxlbiwgY29uc3QgSWRlbnRpZmll
ciYsIE5hdGl2ZUZ1bmN0aW9uLCBKU0dsb2JhbE9iamVjdCogZXhwZWN0ZWRUaGlzT2JqZWN0KTsK
ICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGNhY2hlZEdsb2JhbE9iamVjdCgpIGNvbnN0IHsgcmV0
dXJuIG1fY2FjaGVkR2xvYmFsT2JqZWN0OyB9CiAKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1ZSBwcm90b3R5cGUpIApJbmRleDogSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCShyZXZpc2lvbiA0ODc3
MykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgY29uc3QgQ2xhc3NJbmZvKiBJbnRlcm5hbEZ1bmN0
aW9uOjpjbGFzcwogICAgIHJldHVybiAmaW5mbzsKIH0KIAotSW50ZXJuYWxGdW5jdGlvbjo6SW50
ZXJuYWxGdW5jdGlvbihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFBhc3NSZWZQdHI8U3RydWN0
dXJlPiBzdHJ1Y3R1cmUsIGNvbnN0IElkZW50aWZpZXImIG5hbWUpCitJbnRlcm5hbEZ1bmN0aW9u
OjpJbnRlcm5hbEZ1bmN0aW9uKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgTm90TnVsbFBhc3NS
ZWZQdHI8U3RydWN0dXJlPiBzdHJ1Y3R1cmUsIGNvbnN0IElkZW50aWZpZXImIG5hbWUpCiAgICAg
OiBKU09iamVjdChzdHJ1Y3R1cmUpCiB7CiAgICAgcHV0RGlyZWN0KGdsb2JhbERhdGEtPnByb3Bl
cnR5TmFtZXMtPm5hbWUsIGpzU3RyaW5nKGdsb2JhbERhdGEsIG5hbWUudXN0cmluZygpKSwgRG9u
dERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRlcm5hbEZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRlcm5hbEZ1bmN0aW9uLmgJKHJldmlzaW9uIDQ4NzczKQorKysgSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDggKzQ2
LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgIHByb3RlY3RlZDoKLSAgICAg
ICAgSW50ZXJuYWxGdW5jdGlvbihQYXNzUmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlKSA6IEpT
T2JqZWN0KHN0cnVjdHVyZSkgeyB9Ci0gICAgICAgIEludGVybmFsRnVuY3Rpb24oSlNHbG9iYWxE
YXRhKiwgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+LCBjb25zdCBJZGVudGlmaWVyJik7CisgICAgICAg
IEludGVybmFsRnVuY3Rpb24oTm90TnVsbFBhc3NSZWZQdHI8U3RydWN0dXJlPiBzdHJ1Y3R1cmUp
IDogSlNPYmplY3Qoc3RydWN0dXJlKSB7IH0KKyAgICAgICAgSW50ZXJuYWxGdW5jdGlvbihKU0ds
b2JhbERhdGEqLCBOb3ROdWxsUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+LCBjb25zdCBJZGVudGlmaWVy
Jik7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIENhbGxUeXBlIGdldENhbGxEYXRh
KENhbGxEYXRhJikgPSAwOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9u
LmNwcAkocmV2aXNpb24gNDg3NzMpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZh
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgQVNTRVJUX0NMQVNTX0ZJ
VFNfSU5fQ0VMTChKU0FjdGl2YXRpb24pOwogCiBjb25zdCBDbGFzc0luZm8gSlNBY3RpdmF0aW9u
OjppbmZvID0geyAiSlNBY3RpdmF0aW9uIiwgMCwgMCwgMCB9OwogCi1KU0FjdGl2YXRpb246OkpT
QWN0aXZhdGlvbihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgUGFzc1JlZlB0cjxGdW5jdGlvbkV4ZWN1
dGFibGU+IGZ1bmN0aW9uRXhlY3V0YWJsZSkKK0pTQWN0aXZhdGlvbjo6SlNBY3RpdmF0aW9uKENh
bGxGcmFtZSogY2FsbEZyYW1lLCBOb3ROdWxsUGFzc1JlZlB0cjxGdW5jdGlvbkV4ZWN1dGFibGU+
IGZ1bmN0aW9uRXhlY3V0YWJsZSkKICAgICA6IEJhc2UoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCku
YWN0aXZhdGlvblN0cnVjdHVyZSwgbmV3IEpTQWN0aXZhdGlvbkRhdGEoZnVuY3Rpb25FeGVjdXRh
YmxlLCBjYWxsRnJhbWUtPnJlZ2lzdGVycygpKSkKIHsKIH0KSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FjdGl2YXRpb24uaAkocmV2aXNpb24gNDg3NzMpCisrKyBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQWN0aXZhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEpTQWN0aXZhdGlvbiA6IHB1YmxpYyBKU1ZhcmlhYmxl
T2JqZWN0IHsKICAgICAgICAgdHlwZWRlZiBKU1ZhcmlhYmxlT2JqZWN0IEJhc2U7CiAgICAgcHVi
bGljOgotICAgICAgICBKU0FjdGl2YXRpb24oQ2FsbEZyYW1lKiwgUGFzc1JlZlB0cjxGdW5jdGlv
bkV4ZWN1dGFibGU+KTsKKyAgICAgICAgSlNBY3RpdmF0aW9uKENhbGxGcmFtZSosIE5vdE51bGxQ
YXNzUmVmUHRyPEZ1bmN0aW9uRXhlY3V0YWJsZT4pOwogICAgICAgICB2aXJ0dWFsIH5KU0FjdGl2
YXRpb24oKTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgbWFya0NoaWxkcmVuKE1hcmtTdGFjayYp
OwpAQCAtNzAsNyArNzAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIHByaXZhdGU6CiAgICAg
ICAgIHN0cnVjdCBKU0FjdGl2YXRpb25EYXRhIDogcHVibGljIEpTVmFyaWFibGVPYmplY3REYXRh
IHsKLSAgICAgICAgICAgIEpTQWN0aXZhdGlvbkRhdGEoUGFzc1JlZlB0cjxGdW5jdGlvbkV4ZWN1
dGFibGU+IF9mdW5jdGlvbkV4ZWN1dGFibGUsIFJlZ2lzdGVyKiByZWdpc3RlcnMpCisgICAgICAg
ICAgICBKU0FjdGl2YXRpb25EYXRhKE5vdE51bGxQYXNzUmVmUHRyPEZ1bmN0aW9uRXhlY3V0YWJs
ZT4gX2Z1bmN0aW9uRXhlY3V0YWJsZSwgUmVnaXN0ZXIqIHJlZ2lzdGVycykKICAgICAgICAgICAg
ICAgICA6IEpTVmFyaWFibGVPYmplY3REYXRhKF9mdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRl
ZEJ5dGVjb2RlKCkuc3ltYm9sVGFibGUoKSwgcmVnaXN0ZXJzKQogICAgICAgICAgICAgICAgICwg
ZnVuY3Rpb25FeGVjdXRhYmxlKF9mdW5jdGlvbkV4ZWN1dGFibGUpCiAgICAgICAgICAgICB7Cklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHJldmlzaW9uIDQ4Nzc0KQorKysgSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMwLDcg
KzEzMCw3IEBAIGlubGluZSB2b2lkIEpTQXJyYXk6OmNoZWNrQ29uc2lzdGVuY3koQ28KIAogI2Vu
ZGlmCiAKLUpTQXJyYXk6OkpTQXJyYXkoUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZSkK
K0pTQXJyYXk6OkpTQXJyYXkoTm90TnVsbFBhc3NSZWZQdHI8U3RydWN0dXJlPiBzdHJ1Y3R1cmUp
CiAgICAgOiBKU09iamVjdChzdHJ1Y3R1cmUpCiB7CiAgICAgdW5zaWduZWQgaW5pdGlhbENhcGFj
aXR5ID0gMDsKQEAgLTE0Myw3ICsxNDMsNyBAQCBKU0FycmF5OjpKU0FycmF5KFBhc3NSZWZQdHI8
U3RydWN0dXJlPiBzCiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogfQogCi1KU0FycmF5OjpKU0Fy
cmF5KFBhc3NSZWZQdHI8U3RydWN0dXJlPiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGluaXRpYWxMZW5n
dGgpCitKU0FycmF5OjpKU0FycmF5KE5vdE51bGxQYXNzUmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0
dXJlLCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQogICAgIDogSlNPYmplY3Qoc3RydWN0dXJlKQog
ewogICAgIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSA9IG1pbihpbml0aWFsTGVuZ3RoLCBNSU5f
U1BBUlNFX0FSUkFZX0lOREVYKTsKQEAgLTE2Niw3ICsxNjYsNyBAQCBKU0FycmF5OjpKU0FycmF5
KFBhc3NSZWZQdHI8U3RydWN0dXJlPiBzCiAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cmVwb3J0RXh0
cmFNZW1vcnlDb3N0KGluaXRpYWxDYXBhY2l0eSAqIHNpemVvZihKU1ZhbHVlKSk7CiB9CiAKLUpT
QXJyYXk6OkpTQXJyYXkoUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZSwgY29uc3QgQXJn
TGlzdCYgbGlzdCkKK0pTQXJyYXk6OkpTQXJyYXkoTm90TnVsbFBhc3NSZWZQdHI8U3RydWN0dXJl
PiBzdHJ1Y3R1cmUsIGNvbnN0IEFyZ0xpc3QmIGxpc3QpCiAgICAgOiBKU09iamVjdChzdHJ1Y3R1
cmUpCiB7CiAgICAgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5ID0gbGlzdC5zaXplKCk7CkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkocmV2aXNpb24gNDg3NzQpCisrKyBKYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsOSArNDEsOSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgZnJpZW5kIGNsYXNzIFdhbGtlcjsKIAogICAgIHB1Ymxp
YzoKLSAgICAgICAgZXhwbGljaXQgSlNBcnJheShQYXNzUmVmUHRyPFN0cnVjdHVyZT4pOwotICAg
ICAgICBKU0FycmF5KFBhc3NSZWZQdHI8U3RydWN0dXJlPiwgdW5zaWduZWQgaW5pdGlhbExlbmd0
aCk7Ci0gICAgICAgIEpTQXJyYXkoUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+LCBjb25zdCBBcmdMaXN0
JiBpbml0aWFsVmFsdWVzKTsKKyAgICAgICAgZXhwbGljaXQgSlNBcnJheShOb3ROdWxsUGFzc1Jl
ZlB0cjxTdHJ1Y3R1cmU+KTsKKyAgICAgICAgSlNBcnJheShOb3ROdWxsUGFzc1JlZlB0cjxTdHJ1
Y3R1cmU+LCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKTsKKyAgICAgICAgSlNBcnJheShOb3ROdWxs
UGFzc1JlZlB0cjxTdHJ1Y3R1cmU+LCBjb25zdCBBcmdMaXN0JiBpbml0aWFsVmFsdWVzKTsKICAg
ICAgICAgdmlydHVhbCB+SlNBcnJheSgpOwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Q
cm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eVNsb3QmKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCeXRlQXJyYXku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCeXRlQXJyYXkuY3Bw
CShyZXZpc2lvbiA0ODc3MykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCeXRlQXJyYXku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBj
b25zdCBDbGFzc0luZm8gSlNCeXRlQXJyYXk6OnNfZGVmYXVsdEluZm8gPSB7ICJCeXRlQXJyYXki
LCAwLCAwLCAwIH07CiAKLUpTQnl0ZUFycmF5OjpKU0J5dGVBcnJheShFeGVjU3RhdGUqIGV4ZWMs
IFBhc3NSZWZQdHI8U3RydWN0dXJlPiBzdHJ1Y3R1cmUsIEJ5dGVBcnJheSogc3RvcmFnZSwgY29u
c3QgSlNDOjpDbGFzc0luZm8qIGNsYXNzSW5mbykKK0pTQnl0ZUFycmF5OjpKU0J5dGVBcnJheShF
eGVjU3RhdGUqIGV4ZWMsIE5vdE51bGxQYXNzUmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlLCBC
eXRlQXJyYXkqIHN0b3JhZ2UsIGNvbnN0IEpTQzo6Q2xhc3NJbmZvKiBjbGFzc0luZm8pCiAgICAg
OiBKU09iamVjdChzdHJ1Y3R1cmUpCiAgICAgLCBtX3N0b3JhZ2Uoc3RvcmFnZSkKICAgICAsIG1f
Y2xhc3NJbmZvKGNsYXNzSW5mbykKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCeXRl
QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQnl0ZUFycmF5
LmgJKHJldmlzaW9uIDQ4NzczKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0J5dGVBcnJh
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICAgICAgICAgIHNldEluZGV4KGksIGJ5dGVWYWx1ZSk7CiAgICAgICAgIH0KIAotICAgICAg
ICBKU0J5dGVBcnJheShFeGVjU3RhdGUqIGV4ZWMsIFBhc3NSZWZQdHI8U3RydWN0dXJlPiwgV1RG
OjpCeXRlQXJyYXkqIHN0b3JhZ2UsIGNvbnN0IEpTQzo6Q2xhc3NJbmZvKiA9ICZzX2RlZmF1bHRJ
bmZvKTsKKyAgICAgICAgSlNCeXRlQXJyYXkoRXhlY1N0YXRlKiBleGVjLCBOb3ROdWxsUGFzc1Jl
ZlB0cjxTdHJ1Y3R1cmU+LCBXVEY6OkJ5dGVBcnJheSogc3RvcmFnZSwgY29uc3QgSlNDOjpDbGFz
c0luZm8qID0gJnNfZGVmYXVsdEluZm8pOwogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1
Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1ZhbHVlIHByb3RvdHlwZSk7CiAgICAgICAgIAogICAg
ICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6RXhlY1N0YXRlKiwgY29u
c3QgSlNDOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7Cklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDQ4NzczKQor
KysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTAsMTMgKzUwLDEzIEBAIGJvb2wgSlNGdW5jdGlvbjo6aXNIb3N0RnVuY3Rpb25Ob25Jbmxp
bmUKICAgICByZXR1cm4gaXNIb3N0RnVuY3Rpb24oKTsKIH0KIAotSlNGdW5jdGlvbjo6SlNGdW5j
dGlvbihQYXNzUmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlKQorSlNGdW5jdGlvbjo6SlNGdW5j
dGlvbihOb3ROdWxsUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZSkKICAgICA6IEJhc2Uo
c3RydWN0dXJlKQogICAgICwgbV9leGVjdXRhYmxlKGFkb3B0UmVmKG5ldyBWUHRySGFja0V4ZWN1
dGFibGUoKSkpCiB7CiB9CiAKLUpTRnVuY3Rpb246OkpTRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVj
LCBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlLCBpbnQgbGVuZ3RoLCBjb25zdCBJZGVu
dGlmaWVyJiBuYW1lLCBOYXRpdmVGdW5jdGlvbiBmdW5jKQorSlNGdW5jdGlvbjo6SlNGdW5jdGlv
bihFeGVjU3RhdGUqIGV4ZWMsIE5vdE51bGxQYXNzUmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0dXJl
LCBpbnQgbGVuZ3RoLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBOYXRpdmVGdW5jdGlvbiBmdW5j
KQogICAgIDogQmFzZSgmZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUsIG5hbWUpCiAjaWYg
RU5BQkxFKEpJVCkKICAgICAsIG1fZXhlY3V0YWJsZShhZG9wdFJlZihuZXcgTmF0aXZlRXhlY3V0
YWJsZShleGVjKSkpCkBAIC03Miw3ICs3Miw3IEBAIEpTRnVuY3Rpb246OkpTRnVuY3Rpb24oRXhl
Y1N0YXRlKiBleGVjLCAKICNlbmRpZgogfQogCi1KU0Z1bmN0aW9uOjpKU0Z1bmN0aW9uKEV4ZWNT
dGF0ZSogZXhlYywgUGFzc1JlZlB0cjxGdW5jdGlvbkV4ZWN1dGFibGU+IGV4ZWN1dGFibGUsIFNj
b3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSkKK0pTRnVuY3Rpb246OkpTRnVuY3Rpb24oRXhl
Y1N0YXRlKiBleGVjLCBOb3ROdWxsUGFzc1JlZlB0cjxGdW5jdGlvbkV4ZWN1dGFibGU+IGV4ZWN1
dGFibGUsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSkKICAgICA6IEJhc2UoJmV4ZWMt
Pmdsb2JhbERhdGEoKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5mdW5jdGlvblN0cnVj
dHVyZSgpLCBleGVjdXRhYmxlLT5uYW1lKCkpCiAgICAgLCBtX2V4ZWN1dGFibGUoZXhlY3V0YWJs
ZSkKIHsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCShyZXZpc2lvbiA0ODc3
MykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MSw4ICs0MSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0eXBlZGVmIEludGVy
bmFsRnVuY3Rpb24gQmFzZTsKIAogICAgIHB1YmxpYzoKLSAgICAgICAgSlNGdW5jdGlvbihFeGVj
U3RhdGUqLCBQYXNzUmVmUHRyPFN0cnVjdHVyZT4sIGludCBsZW5ndGgsIGNvbnN0IElkZW50aWZp
ZXImLCBOYXRpdmVGdW5jdGlvbik7Ci0gICAgICAgIEpTRnVuY3Rpb24oRXhlY1N0YXRlKiwgUGFz
c1JlZlB0cjxGdW5jdGlvbkV4ZWN1dGFibGU+LCBTY29wZUNoYWluTm9kZSopOworICAgICAgICBK
U0Z1bmN0aW9uKEV4ZWNTdGF0ZSosIE5vdE51bGxQYXNzUmVmUHRyPFN0cnVjdHVyZT4sIGludCBs
ZW5ndGgsIGNvbnN0IElkZW50aWZpZXImLCBOYXRpdmVGdW5jdGlvbik7CisgICAgICAgIEpTRnVu
Y3Rpb24oRXhlY1N0YXRlKiwgTm90TnVsbFBhc3NSZWZQdHI8RnVuY3Rpb25FeGVjdXRhYmxlPiwg
U2NvcGVDaGFpbk5vZGUqKTsKICAgICAgICAgdmlydHVhbCB+SlNGdW5jdGlvbigpOwogCiAgICAg
ICAgIEpTT2JqZWN0KiBjb25zdHJ1Y3QoRXhlY1N0YXRlKiwgY29uc3QgQXJnTGlzdCYpOwpAQCAt
NzMsNyArNzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVhbCBDYWxsVHlwZSBn
ZXRDYWxsRGF0YShDYWxsRGF0YSYpOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgSlNGdW5jdGlv
bihQYXNzUmVmUHRyPFN0cnVjdHVyZT4pOworICAgICAgICBKU0Z1bmN0aW9uKE5vdE51bGxQYXNz
UmVmUHRyPFN0cnVjdHVyZT4pOwogCiAgICAgICAgIGJvb2wgaXNIb3N0RnVuY3Rpb25Ob25Jbmxp
bmUoKSBjb25zdDsKIApJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
aAkocmV2aXNpb24gNDg3NzQpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1OSw3ICsxNTksNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgfQogCiAgICAgcHJvdGVjdGVkOgotICAgICAgICBKU0dsb2JhbE9iamVjdChQYXNz
UmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlLCBKU0dsb2JhbE9iamVjdERhdGEqIGRhdGEsIEpT
T2JqZWN0KiB0aGlzVmFsdWUpCisgICAgICAgIEpTR2xvYmFsT2JqZWN0KE5vdE51bGxQYXNzUmVm
UHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlLCBKU0dsb2JhbE9iamVjdERhdGEqIGRhdGEsIEpTT2Jq
ZWN0KiB0aGlzVmFsdWUpCiAgICAgICAgICAgICA6IEpTVmFyaWFibGVPYmplY3Qoc3RydWN0dXJl
LCBkYXRhKQogICAgICAgICB7CiAgICAgICAgICAgICBpbml0KHRoaXNWYWx1ZSk7CkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuaAkocmV2aXNpb24gNDg3NzMpCisrKyBKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEpTT05PYmplY3QgOiBwdWJsaWMgSlNP
YmplY3QgewogICAgIHB1YmxpYzoKLSAgICAgICAgSlNPTk9iamVjdChQYXNzUmVmUHRyPFN0cnVj
dHVyZT4gc3RydWN0dXJlKQorICAgICAgICBKU09OT2JqZWN0KE5vdE51bGxQYXNzUmVmUHRyPFN0
cnVjdHVyZT4gc3RydWN0dXJlKQogICAgICAgICAgICAgOiBKU09iamVjdChzdHJ1Y3R1cmUpCiAg
ICAgICAgIHsKICAgICAgICAgfQpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2
aXNpb24gNDg3NzQpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTc0LDcgKzc0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGZyaWVu
ZCBjbGFzcyBKU0NlbGw7CiAKICAgICBwdWJsaWM6Ci0gICAgICAgIGV4cGxpY2l0IEpTT2JqZWN0
KFBhc3NSZWZQdHI8U3RydWN0dXJlPik7CisgICAgICAgIGV4cGxpY2l0IEpTT2JqZWN0KE5vdE51
bGxQYXNzUmVmUHRyPFN0cnVjdHVyZT4pOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBtYXJrQ2hp
bGRyZW4oTWFya1N0YWNrJik7CiAgICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBtYXJrQ2hpbGRy
ZW5EaXJlY3QoTWFya1N0YWNrJiBtYXJrU3RhY2spOwpAQCAtODYsNyArODYsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUoKSBjb25zdDsKICAgICAgICAgdm9p
ZCBzZXRQcm90b3R5cGUoSlNWYWx1ZSBwcm90b3R5cGUpOwogICAgICAgICAKLSAgICAgICAgdm9p
ZCBzZXRTdHJ1Y3R1cmUoUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+KTsKKyAgICAgICAgdm9pZCBzZXRT
dHJ1Y3R1cmUoTm90TnVsbFBhc3NSZWZQdHI8U3RydWN0dXJlPik7CiAgICAgICAgIFN0cnVjdHVy
ZSogaW5oZXJpdG9ySUQoKTsKIAogICAgICAgICB2aXJ0dWFsIFVTdHJpbmcgY2xhc3NOYW1lKCkg
Y29uc3Q7CkBAIC0yNzUsMTAgKzI3NSw5IEBAIGlubGluZSBKU09iamVjdCogYXNPYmplY3QoSlNW
YWx1ZSB2YWx1ZSkKICAgICByZXR1cm4gYXNPYmplY3QodmFsdWUuYXNDZWxsKCkpOwogfQogCi1p
bmxpbmUgSlNPYmplY3Q6OkpTT2JqZWN0KFBhc3NSZWZQdHI8U3RydWN0dXJlPiBzdHJ1Y3R1cmUp
CitpbmxpbmUgSlNPYmplY3Q6OkpTT2JqZWN0KE5vdE51bGxQYXNzUmVmUHRyPFN0cnVjdHVyZT4g
c3RydWN0dXJlKQogICAgIDogSlNDZWxsKHN0cnVjdHVyZS5yZWxlYXNlUmVmKCkpIC8vIH5KU09i
amVjdCBiYWxhbmNlcyB0aGlzIHJlZigpCiB7Ci0gICAgQVNTRVJUKG1fc3RydWN0dXJlKTsKICAg
ICBBU1NFUlQobV9zdHJ1Y3R1cmUtPnByb3BlcnR5U3RvcmFnZUNhcGFjaXR5KCkgPT0gaW5saW5l
U3RvcmFnZUNhcGFjaXR5KTsKICAgICBBU1NFUlQobV9zdHJ1Y3R1cmUtPmlzRW1wdHkoKSk7CiAg
ICAgQVNTRVJUKHByb3RvdHlwZSgpLmlzTnVsbCgpIHx8IEhlYXA6OmhlYXAodGhpcykgPT0gSGVh
cDo6aGVhcChwcm90b3R5cGUoKSkpOwpAQCAtMzA3LDcgKzMwNiw3IEBAIGlubGluZSB2b2lkIEpT
T2JqZWN0OjpzZXRQcm90b3R5cGUoSlNWYWwKICAgICBzZXRTdHJ1Y3R1cmUobmV3U3RydWN0dXJl
LnJlbGVhc2UoKSk7CiB9CiAKLWlubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRTdHJ1Y3R1cmUoUGFz
c1JlZlB0cjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZSkKK2lubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRT
dHJ1Y3R1cmUoTm90TnVsbFBhc3NSZWZQdHI8U3RydWN0dXJlPiBzdHJ1Y3R1cmUpCiB7CiAgICAg
bV9zdHJ1Y3R1cmUtPmRlcmVmKCk7CiAgICAgbV9zdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmUucmVsZWFz
ZVJlZigpOyAvLyB+SlNPYmplY3QgYmFsYW5jZXMgdGhpcyByZWYoKQpJbmRleDogSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1ZhcmlhYmxlT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1ZhcmlhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDQ4NzczKQorKysgSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhcmlhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTg0LDcgKzg0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBKU1ZhcmlhYmxlT2Jq
ZWN0RGF0YSYgb3BlcmF0b3I9KGNvbnN0IEpTVmFyaWFibGVPYmplY3REYXRhJik7CiAgICAgICAg
IH07CiAKLSAgICAgICAgSlNWYXJpYWJsZU9iamVjdChQYXNzUmVmUHRyPFN0cnVjdHVyZT4gc3Ry
dWN0dXJlLCBKU1ZhcmlhYmxlT2JqZWN0RGF0YSogZGF0YSkKKyAgICAgICAgSlNWYXJpYWJsZU9i
amVjdChOb3ROdWxsUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZSwgSlNWYXJpYWJsZU9i
amVjdERhdGEqIGRhdGEpCiAgICAgICAgICAgICA6IEpTT2JqZWN0KHN0cnVjdHVyZSkKICAgICAg
ICAgICAgICwgZChkYXRhKSAvLyBTdWJjbGFzcyBvd25zIHRoaXMgcG9pbnRlci4KICAgICAgICAg
ewpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1dyYXBwZXJPYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTV3JhcHBlck9iamVjdC5oCShyZXZpc2lv
biA0ODc3MykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNXcmFwcGVyT2JqZWN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgLy8gTnVt
YmVyLCBCb29sZWFuIGFuZCBEYXRlIHdoaWNoIGFyZSB3cmFwcGVycyBmb3IgcHJpbWl0aXZlIHR5
cGVzLgogICAgIGNsYXNzIEpTV3JhcHBlck9iamVjdCA6IHB1YmxpYyBKU09iamVjdCB7CiAgICAg
cHJvdGVjdGVkOgotICAgICAgICBleHBsaWNpdCBKU1dyYXBwZXJPYmplY3QoUGFzc1JlZlB0cjxT
dHJ1Y3R1cmU+KTsKKyAgICAgICAgZXhwbGljaXQgSlNXcmFwcGVyT2JqZWN0KE5vdE51bGxQYXNz
UmVmUHRyPFN0cnVjdHVyZT4pOwogCiAgICAgcHVibGljOgogICAgICAgICBKU1ZhbHVlIGludGVy
bmFsVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2ludGVybmFsVmFsdWU7IH0KQEAgLTQ3LDcgKzQ3
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTVmFsdWUgbV9pbnRlcm5hbFZhbHVlOwog
ICAgIH07CiAKLSAgICBpbmxpbmUgSlNXcmFwcGVyT2JqZWN0OjpKU1dyYXBwZXJPYmplY3QoUGFz
c1JlZlB0cjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZSkKKyAgICBpbmxpbmUgSlNXcmFwcGVyT2JqZWN0
OjpKU1dyYXBwZXJPYmplY3QoTm90TnVsbFBhc3NSZWZQdHI8U3RydWN0dXJlPiBzdHJ1Y3R1cmUp
CiAgICAgICAgIDogSlNPYmplY3Qoc3RydWN0dXJlKQogICAgIHsKICAgICAgICAgYWRkQW5vbnlt
b3VzU2xvdHMoMSk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hdGhPYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVjdC5jcHAJKHJl
dmlzaW9uIDQ4NzczKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXRoT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsNyBAQCBjb25zdCBDbGFzc0luZm8gTWF0aE9iamVj
dDo6aW5mbyA9IHsgIk1hCiBAZW5kCiAqLwogCi1NYXRoT2JqZWN0OjpNYXRoT2JqZWN0KEV4ZWNT
dGF0ZSogZXhlYywgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZSkKK01hdGhPYmplY3Q6
Ok1hdGhPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBOb3ROdWxsUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+
IHN0cnVjdHVyZSkKICAgICA6IEpTT2JqZWN0KHN0cnVjdHVyZSkKIHsKICAgICBwdXREaXJlY3RX
aXRob3V0VHJhbnNpdGlvbihJZGVudGlmaWVyKGV4ZWMsICJFIiksIGpzTnVtYmVyKGV4ZWMsIGV4
cCgxLjApKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgUmVhZE9ubHkpOwpJbmRleDogSmF2YVNj
cmlwdENvcmUvcnVudGltZS9NYXRoT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUvcnVudGltZS9NYXRoT2JqZWN0LmgJKHJldmlzaW9uIDQ4NzczKQorKysgSmF2YVNjcmlwdENv
cmUvcnVudGltZS9NYXRoT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBNYXRoT2JqZWN0IDogcHVibGljIEpTT2JqZWN0
IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIE1hdGhPYmplY3QoRXhlY1N0YXRlKiwgUGFzc1JlZlB0
cjxTdHJ1Y3R1cmU+KTsKKyAgICAgICAgTWF0aE9iamVjdChFeGVjU3RhdGUqLCBOb3ROdWxsUGFz
c1JlZlB0cjxTdHJ1Y3R1cmU+KTsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKICAg
ICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqLCBj
b25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlEZXNjcmlwdG9yJik7CkluZGV4OiBKYXZhU2NyaXB0
Q29yZS9ydW50aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9u
IDQ4NzczKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBBU1NFUlRfQ0xBU1NfRklUU19J
Tl9DRUxMKE5hdGl2ZUVycm9yQ29uCiAKIGNvbnN0IENsYXNzSW5mbyBOYXRpdmVFcnJvckNvbnN0
cnVjdG9yOjppbmZvID0geyAiRnVuY3Rpb24iLCAmSW50ZXJuYWxGdW5jdGlvbjo6aW5mbywgMCwg
MCB9OwogCi1OYXRpdmVFcnJvckNvbnN0cnVjdG9yOjpOYXRpdmVFcnJvckNvbnN0cnVjdG9yKEV4
ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZSwgTmF0aXZlRXJy
b3JQcm90b3R5cGUqIG5hdGl2ZUVycm9yUHJvdG90eXBlKQorTmF0aXZlRXJyb3JDb25zdHJ1Y3Rv
cjo6TmF0aXZlRXJyb3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIE5vdE51bGxQYXNzUmVm
UHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlLCBOYXRpdmVFcnJvclByb3RvdHlwZSogbmF0aXZlRXJy
b3JQcm90b3R5cGUpCiAgICAgOiBJbnRlcm5hbEZ1bmN0aW9uKCZleGVjLT5nbG9iYWxEYXRhKCks
IHN0cnVjdHVyZSwgSWRlbnRpZmllcihleGVjLCBuYXRpdmVFcnJvclByb3RvdHlwZS0+Z2V0RGly
ZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5uYW1lKS5nZXRTdHJpbmcoKSkpCiAgICAgLCBtX2Vy
cm9yU3RydWN0dXJlKEVycm9ySW5zdGFuY2U6OmNyZWF0ZVN0cnVjdHVyZShuYXRpdmVFcnJvclBy
b3RvdHlwZSkpCiB7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVycm9yQ29u
c3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVy
cm9yQ29uc3RydWN0b3IuaAkocmV2aXNpb24gNDg3NzMpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIE5hdGl2ZUVycm9yQ29uc3RydWN0b3Ig
OiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbiB7CiAgICAgcHVibGljOgotICAgICAgICBOYXRpdmVF
cnJvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8U3RydWN0dXJlPiwgTmF0aXZl
RXJyb3JQcm90b3R5cGUqKTsKKyAgICAgICAgTmF0aXZlRXJyb3JDb25zdHJ1Y3RvcihFeGVjU3Rh
dGUqLCBOb3ROdWxsUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+LCBOYXRpdmVFcnJvclByb3RvdHlwZSop
OwogCiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKIApJbmRleDogSmF2YVNj
cmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJvclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJvclByb3RvdHlwZS5jcHAJKHJldmlzaW9u
IDQ4NzczKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJvclByb3RvdHlwZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIEFT
U0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoTmF0aXZlRXJyb3JQcm90b3R5cGUpOwogCi1OYXRpdmVF
cnJvclByb3RvdHlwZTo6TmF0aXZlRXJyb3JQcm90b3R5cGUoRXhlY1N0YXRlKiBleGVjLCBQYXNz
UmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlLCBjb25zdCBVU3RyaW5nJiBuYW1lLCBjb25zdCBV
U3RyaW5nJiBtZXNzYWdlKQorTmF0aXZlRXJyb3JQcm90b3R5cGU6Ok5hdGl2ZUVycm9yUHJvdG90
eXBlKEV4ZWNTdGF0ZSogZXhlYywgTm90TnVsbFBhc3NSZWZQdHI8U3RydWN0dXJlPiBzdHJ1Y3R1
cmUsIGNvbnN0IFVTdHJpbmcmIG5hbWUsIGNvbnN0IFVTdHJpbmcmIG1lc3NhZ2UpCiAgICAgOiBK
U09iamVjdChzdHJ1Y3R1cmUpCiB7CiAgICAgcHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS5uYW1lLCBqc1N0cmluZyhleGVjLCBuYW1lKSwgMCk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL05hdGl2ZUVycm9yUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUvcnVudGltZS9OYXRpdmVFcnJvclByb3RvdHlwZS5oCShyZXZpc2lvbiA0ODc3MykKKysrIEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JQcm90b3R5cGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMjcsNyArMjcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIE5hdGl2ZUVy
cm9yUHJvdG90eXBlIDogcHVibGljIEpTT2JqZWN0IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIE5h
dGl2ZUVycm9yUHJvdG90eXBlKEV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8U3RydWN0dXJlPiwgY29u
c3QgVVN0cmluZyYgbmFtZSwgY29uc3QgVVN0cmluZyYgbWVzc2FnZSk7CisgICAgICAgIE5hdGl2
ZUVycm9yUHJvdG90eXBlKEV4ZWNTdGF0ZSosIE5vdE51bGxQYXNzUmVmUHRyPFN0cnVjdHVyZT4s
IGNvbnN0IFVTdHJpbmcmIG5hbWUsIGNvbnN0IFVTdHJpbmcmIG1lc3NhZ2UpOwogICAgIH07CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJD
b25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1i
ZXJDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDQ4NzczKQorKysgSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcg
QEAgY29uc3QgQ2xhc3NJbmZvIE51bWJlckNvbnN0cnVjdG9yOjppbmZvIAogQGVuZAogKi8KIAot
TnVtYmVyQ29uc3RydWN0b3I6Ok51bWJlckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgUGFz
c1JlZlB0cjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZSwgTnVtYmVyUHJvdG90eXBlKiBudW1iZXJQcm90
b3R5cGUpCitOdW1iZXJDb25zdHJ1Y3Rvcjo6TnVtYmVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBl
eGVjLCBOb3ROdWxsUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZSwgTnVtYmVyUHJvdG90
eXBlKiBudW1iZXJQcm90b3R5cGUpCiAgICAgOiBJbnRlcm5hbEZ1bmN0aW9uKCZleGVjLT5nbG9i
YWxEYXRhKCksIHN0cnVjdHVyZSwgSWRlbnRpZmllcihleGVjLCBudW1iZXJQcm90b3R5cGUtPmlu
Zm8uY2xhc3NOYW1lKSkKIHsKICAgICAvLyBOdW1iZXIuUHJvdG90eXBlCkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL051bWJlckNvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUvcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiA0ODc3MykKKysr
IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5
KQpAQCAtMjksNyArMjksNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIE51bWJlckNv
bnN0cnVjdG9yIDogcHVibGljIEludGVybmFsRnVuY3Rpb24gewogICAgIHB1YmxpYzoKLSAgICAg
ICAgTnVtYmVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+LCBO
dW1iZXJQcm90b3R5cGUqKTsKKyAgICAgICAgTnVtYmVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiwg
Tm90TnVsbFBhc3NSZWZQdHI8U3RydWN0dXJlPiwgTnVtYmVyUHJvdG90eXBlKik7CiAKICAgICAg
ICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVu
dGlmaWVyJiwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5RGVz
Y3JpcHRvciYpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJPYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyT2JqZWN0LmNwcAko
cmV2aXNpb24gNDg3NzMpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlck9iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAgQVNTRVJUX0NMQVNTX0ZJVFNfSU5f
Q0VMTChOdW1iZXJPYmplY3QpOwogCiBjb25zdCBDbGFzc0luZm8gTnVtYmVyT2JqZWN0OjppbmZv
ID0geyAiTnVtYmVyIiwgMCwgMCwgMCB9OwogCi1OdW1iZXJPYmplY3Q6Ok51bWJlck9iamVjdChQ
YXNzUmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlKQorTnVtYmVyT2JqZWN0OjpOdW1iZXJPYmpl
Y3QoTm90TnVsbFBhc3NSZWZQdHI8U3RydWN0dXJlPiBzdHJ1Y3R1cmUpCiAgICAgOiBKU1dyYXBw
ZXJPYmplY3Qoc3RydWN0dXJlKQogewogfQpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9O
dW1iZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJl
ck9iamVjdC5oCShyZXZpc2lvbiA0ODc3MykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVt
YmVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICAgICBjbGFzcyBOdW1iZXJPYmplY3QgOiBwdWJsaWMgSlNXcmFwcGVyT2JqZWN0IHsK
ICAgICBwdWJsaWM6Ci0gICAgICAgIGV4cGxpY2l0IE51bWJlck9iamVjdChQYXNzUmVmUHRyPFN0
cnVjdHVyZT4pOworICAgICAgICBleHBsaWNpdCBOdW1iZXJPYmplY3QoTm90TnVsbFBhc3NSZWZQ
dHI8U3RydWN0dXJlPik7CiAKICAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwog
I2lmIFVTRShKU1ZBTFVFMzIpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlclBy
b3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJQ
cm90b3R5cGUuY3BwCShyZXZpc2lvbiA0ODc3MykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TnVtYmVyUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBzdGF0
aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvCiAKIC8vIEVDTUEgMTUuNy40CiAK
LU51bWJlclByb3RvdHlwZTo6TnVtYmVyUHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhlYywgUGFzc1Jl
ZlB0cjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZSwgU3RydWN0dXJlKiBwcm90b3R5cGVGdW5jdGlvblN0
cnVjdHVyZSkKK051bWJlclByb3RvdHlwZTo6TnVtYmVyUHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhl
YywgTm90TnVsbFBhc3NSZWZQdHI8U3RydWN0dXJlPiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZSogcHJv
dG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUpCiAgICAgOiBOdW1iZXJPYmplY3Qoc3RydWN0dXJlKQog
ewogICAgIHNldEludGVybmFsVmFsdWUoanNOdW1iZXIoZXhlYywgMCkpOwpJbmRleDogSmF2YVNj
cmlwdENvcmUvcnVudGltZS9OdW1iZXJQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL051bWJlclByb3RvdHlwZS5oCShyZXZpc2lvbiA0ODc3MykKKysrIEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI3LDcgKzI3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBOdW1iZXJQcm90b3R5
cGUgOiBwdWJsaWMgTnVtYmVyT2JqZWN0IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIE51bWJlclBy
b3RvdHlwZShFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPFN0cnVjdHVyZT4sIFN0cnVjdHVyZSogcHJv
dG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUpOworICAgICAgICBOdW1iZXJQcm90b3R5cGUoRXhlY1N0
YXRlKiwgTm90TnVsbFBhc3NSZWZQdHI8U3RydWN0dXJlPiwgU3RydWN0dXJlKiBwcm90b3R5cGVG
dW5jdGlvblN0cnVjdHVyZSk7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24g
NDg3NzMpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIG9iamVjdENvbnN0CiBzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdENvbnN0
cnVjdG9yRGVmaW5lUHJvcGVydGllcyhFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNv
bnN0IEFyZ0xpc3QmKTsKIHN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0Q29uc3Ry
dWN0b3JDcmVhdGUoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0
Jik7CiAKLU9iamVjdENvbnN0cnVjdG9yOjpPYmplY3RDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4
ZWMsIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBzdHJ1Y3R1cmUsIE9iamVjdFByb3RvdHlwZSogb2Jq
ZWN0UHJvdG90eXBlLCBTdHJ1Y3R1cmUqIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlKQorT2Jq
ZWN0Q29uc3RydWN0b3I6Ok9iamVjdENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgTm90TnVs
bFBhc3NSZWZQdHI8U3RydWN0dXJlPiBzdHJ1Y3R1cmUsIE9iamVjdFByb3RvdHlwZSogb2JqZWN0
UHJvdG90eXBlLCBTdHJ1Y3R1cmUqIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlKQogOiBJbnRl
cm5hbEZ1bmN0aW9uKCZleGVjLT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZSwgSWRlbnRpZmllcihl
eGVjLCAiT2JqZWN0IikpCiB7CiAgICAgLy8gRUNNQSAxNS4yLjMuMQpJbmRleDogSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuaAkocmV2aXNpb24gNDg3NzMpCisrKyBK
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI5LDcgKzI5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBPYmplY3RDb25z
dHJ1Y3RvciA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uIHsKICAgICBwdWJsaWM6Ci0gICAgICAg
IE9iamVjdENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8U3RydWN0dXJlPiwgT2Jq
ZWN0UHJvdG90eXBlKiwgU3RydWN0dXJlKiBwcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZSk7Cisg
ICAgICAgIE9iamVjdENvbnN0cnVjdG9yKEV4ZWNTdGF0ZSosIE5vdE51bGxQYXNzUmVmUHRyPFN0
cnVjdHVyZT4sIE9iamVjdFByb3RvdHlwZSosIFN0cnVjdHVyZSogcHJvdG90eXBlRnVuY3Rpb25T
dHJ1Y3R1cmUpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBDb25zdHJ1Y3RUeXBl
IGdldENvbnN0cnVjdERhdGEoQ29uc3RydWN0RGF0YSYpOwpJbmRleDogSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcAkocmV2aXNpb24gNDg3NzMpCisrKyBKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQw
LDcgKzQwLDcgQEAgc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90bwogc3Rh
dGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNQcm9wZXJ0eUlzRW51bWVy
YWJsZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKIHN0
YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgb2JqZWN0UHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmco
RXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7CiAKLU9iamVj
dFByb3RvdHlwZTo6T2JqZWN0UHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0cjxT
dHJ1Y3R1cmU+IHN0dWN0dXJlLCBTdHJ1Y3R1cmUqIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJl
KQorT2JqZWN0UHJvdG90eXBlOjpPYmplY3RQcm90b3R5cGUoRXhlY1N0YXRlKiBleGVjLCBOb3RO
dWxsUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IHN0dWN0dXJlLCBTdHJ1Y3R1cmUqIHByb3RvdHlwZUZ1
bmN0aW9uU3RydWN0dXJlKQogICAgIDogSlNPYmplY3Qoc3R1Y3R1cmUpCiAgICAgLCBtX2hhc05v
UHJvcGVydGllc1dpdGhVSW50MzJOYW1lcyh0cnVlKQogewpJbmRleDogSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PYmplY3RQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09iamVjdFByb3RvdHlwZS5oCShyZXZpc2lvbiA0ODc3MykKKysrIEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBPYmplY3RQcm90b3R5cGUgOiBwdWJs
aWMgSlNPYmplY3QgewogICAgIHB1YmxpYzoKLSAgICAgICAgT2JqZWN0UHJvdG90eXBlKEV4ZWNT
dGF0ZSosIFBhc3NSZWZQdHI8U3RydWN0dXJlPiwgU3RydWN0dXJlKiBwcm90b3R5cGVGdW5jdGlv
blN0cnVjdHVyZSk7CisgICAgICAgIE9iamVjdFByb3RvdHlwZShFeGVjU3RhdGUqLCBOb3ROdWxs
UGFzc1JlZlB0cjxTdHJ1Y3R1cmU+LCBTdHJ1Y3R1cmUqIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0
dXJlKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRl
KiwgY29uc3QgSWRlbnRpZmllciYsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwpJbmRleDog
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU5hbWVBcnJheS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuaAkocmV2aXNpb24gNDg3
NzMpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQg
c2V0Q2FjaGVkU3RydWN0dXJlKFN0cnVjdHVyZSogc3RydWN0dXJlKSB7IG1fY2FjaGVkU3RydWN0
dXJlID0gc3RydWN0dXJlOyB9CiAgICAgICAgIFN0cnVjdHVyZSogY2FjaGVkU3RydWN0dXJlKCkg
Y29uc3QgeyByZXR1cm4gbV9jYWNoZWRTdHJ1Y3R1cmU7IH0KIAotICAgICAgICB2b2lkIHNldENh
Y2hlZFByb3RvdHlwZUNoYWluKFBhc3NSZWZQdHI8U3RydWN0dXJlQ2hhaW4+IGNhY2hlZFByb3Rv
dHlwZUNoYWluKSB7IG1fY2FjaGVkUHJvdG90eXBlQ2hhaW4gPSBjYWNoZWRQcm90b3R5cGVDaGFp
bjsgfQorICAgICAgICB2b2lkIHNldENhY2hlZFByb3RvdHlwZUNoYWluKE5vdE51bGxQYXNzUmVm
UHRyPFN0cnVjdHVyZUNoYWluPiBjYWNoZWRQcm90b3R5cGVDaGFpbikgeyBtX2NhY2hlZFByb3Rv
dHlwZUNoYWluID0gY2FjaGVkUHJvdG90eXBlQ2hhaW47IH0KICAgICAgICAgU3RydWN0dXJlQ2hh
aW4qIGNhY2hlZFByb3RvdHlwZUNoYWluKCkgeyByZXR1cm4gbV9jYWNoZWRQcm90b3R5cGVDaGFp
bi5nZXQoKTsgfQogCiAgICAgcHJpdmF0ZToKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UHJvdG90eXBlRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUHJvdG90eXBlRnVuY3Rpb24uY3BwCShyZXZpc2lvbiA0ODc3MykKKysrIEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUHJvdG90eXBlRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3
ICs0MCw3IEBAIFByb3RvdHlwZUZ1bmN0aW9uOjpQcm90b3R5cGVGdW5jdGlvbihFeGUKICAgICBw
dXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoZXhlYywgbGVu
Z3RoKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOwogfQogCi1Qcm90b3R5cGVG
dW5jdGlvbjo6UHJvdG90eXBlRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFN0
cnVjdHVyZT4gcHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUsIGludCBsZW5ndGgsIGNvbnN0IElk
ZW50aWZpZXImIG5hbWUsIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uKQorUHJvdG90eXBlRnVuY3Rp
b246OlByb3RvdHlwZUZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgTm90TnVsbFBhc3NSZWZQdHI8
U3RydWN0dXJlPiBwcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZSwgaW50IGxlbmd0aCwgY29uc3Qg
SWRlbnRpZmllciYgbmFtZSwgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24pCiAgICAgOiBJbnRlcm5h
bEZ1bmN0aW9uKCZleGVjLT5nbG9iYWxEYXRhKCksIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJl
LCBuYW1lKQogICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikKIHsKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUHJvdG90eXBlRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Byb3RvdHlwZUZ1bmN0aW9uLmgJKHJldmlzaW9uIDQ4NzczKQorKysgSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Qcm90b3R5cGVGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMiw3ICszMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIFByb3RvdHlwZUZ1bmN0
aW9uIDogcHVibGljIEludGVybmFsRnVuY3Rpb24gewogICAgIHB1YmxpYzoKICAgICAgICAgUHJv
dG90eXBlRnVuY3Rpb24oRXhlY1N0YXRlKiwgaW50IGxlbmd0aCwgY29uc3QgSWRlbnRpZmllciYs
IE5hdGl2ZUZ1bmN0aW9uKTsKLSAgICAgICAgUHJvdG90eXBlRnVuY3Rpb24oRXhlY1N0YXRlKiwg
UGFzc1JlZlB0cjxTdHJ1Y3R1cmU+LCBpbnQgbGVuZ3RoLCBjb25zdCBJZGVudGlmaWVyJiwgTmF0
aXZlRnVuY3Rpb24pOworICAgICAgICBQcm90b3R5cGVGdW5jdGlvbihFeGVjU3RhdGUqLCBOb3RO
dWxsUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+LCBpbnQgbGVuZ3RoLCBjb25zdCBJZGVudGlmaWVyJiwg
TmF0aXZlRnVuY3Rpb24pOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBDYWxsVHlw
ZSBnZXRDYWxsRGF0YShDYWxsRGF0YSYpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9S
ZWdFeHBDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDQ4NzczKQorKysgSmF2YVNjcmlwdENv
cmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiw3
ICsxMTIsNyBAQCBzdHJ1Y3QgUmVnRXhwQ29uc3RydWN0b3JQcml2YXRlIDogRmFzdEFsCiAgICAg
dW5zaWduZWQgbGFzdE92ZWN0b3JJbmRleCA6IDE7CiB9OwogCi1SZWdFeHBDb25zdHJ1Y3Rvcjo6
UmVnRXhwQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFN0cnVjdHVyZT4g
c3RydWN0dXJlLCBSZWdFeHBQcm90b3R5cGUqIHJlZ0V4cFByb3RvdHlwZSkKK1JlZ0V4cENvbnN0
cnVjdG9yOjpSZWdFeHBDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIE5vdE51bGxQYXNzUmVm
UHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlLCBSZWdFeHBQcm90b3R5cGUqIHJlZ0V4cFByb3RvdHlw
ZSkKICAgICA6IEludGVybmFsRnVuY3Rpb24oJmV4ZWMtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJl
LCBJZGVudGlmaWVyKGV4ZWMsICJSZWdFeHAiKSkKICAgICAsIGQobmV3IFJlZ0V4cENvbnN0cnVj
dG9yUHJpdmF0ZSkKIHsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3Ry
dWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cENvbnN0
cnVjdG9yLmgJKHJldmlzaW9uIDQ4NzczKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdF
eHBDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgY2xhc3MgUmVnRXhwQ29uc3RydWN0b3IgOiBwdWJsaWMgSW50ZXJuYWxG
dW5jdGlvbiB7CiAgICAgcHVibGljOgotICAgICAgICBSZWdFeHBDb25zdHJ1Y3RvcihFeGVjU3Rh
dGUqLCBQYXNzUmVmUHRyPFN0cnVjdHVyZT4sIFJlZ0V4cFByb3RvdHlwZSopOworICAgICAgICBS
ZWdFeHBDb25zdHJ1Y3RvcihFeGVjU3RhdGUqLCBOb3ROdWxsUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+
LCBSZWdFeHBQcm90b3R5cGUqKTsKIAogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1
cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1ZhbHVlIHByb3RvdHlwZSkKICAgICAgICAgewpJbmRleDog
SmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmNwcAkocmV2aXNpb24gNDg3NzMpCisr
KyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU3LDcgKzU3LDcgQEAgY29uc3QgQ2xhc3NJbmZvIFJlZ0V4cE9iamVjdDo6aW5mbyA9IHsg
IgogQGVuZAogKi8KIAotUmVnRXhwT2JqZWN0OjpSZWdFeHBPYmplY3QoUGFzc1JlZlB0cjxTdHJ1
Y3R1cmU+IHN0cnVjdHVyZSwgUGFzc1JlZlB0cjxSZWdFeHA+IHJlZ0V4cCkKK1JlZ0V4cE9iamVj
dDo6UmVnRXhwT2JqZWN0KE5vdE51bGxQYXNzUmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlLCBO
b3ROdWxsUGFzc1JlZlB0cjxSZWdFeHA+IHJlZ0V4cCkKICAgICA6IEpTT2JqZWN0KHN0cnVjdHVy
ZSkKICAgICAsIGQobmV3IFJlZ0V4cE9iamVjdERhdGEocmVnRXhwLCAwKSkKIHsKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAkocmV2aXNpb24gNDg3NzMpCisrKyBKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3
ICsyOCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgUmVnRXhwT2JqZWN0IDogcHVi
bGljIEpTT2JqZWN0IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFJlZ0V4cE9iamVjdChQYXNzUmVm
UHRyPFN0cnVjdHVyZT4sIFBhc3NSZWZQdHI8UmVnRXhwPik7CisgICAgICAgIFJlZ0V4cE9iamVj
dChOb3ROdWxsUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+LCBOb3ROdWxsUGFzc1JlZlB0cjxSZWdFeHA+
KTsKICAgICAgICAgdmlydHVhbCB+UmVnRXhwT2JqZWN0KCk7CiAKICAgICAgICAgdm9pZCBzZXRS
ZWdFeHAoUGFzc1JlZlB0cjxSZWdFeHA+IHIpIHsgZC0+cmVnRXhwID0gcjsgfQpAQCAtNTgsNyAr
NTgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVhbCBDYWxsVHlwZSBnZXRDYWxs
RGF0YShDYWxsRGF0YSYpOwogCiAgICAgICAgIHN0cnVjdCBSZWdFeHBPYmplY3REYXRhIDogRmFz
dEFsbG9jQmFzZSB7Ci0gICAgICAgICAgICBSZWdFeHBPYmplY3REYXRhKFBhc3NSZWZQdHI8UmVn
RXhwPiByZWdFeHAsIGRvdWJsZSBsYXN0SW5kZXgpCisgICAgICAgICAgICBSZWdFeHBPYmplY3RE
YXRhKE5vdE51bGxQYXNzUmVmUHRyPFJlZ0V4cD4gcmVnRXhwLCBkb3VibGUgbGFzdEluZGV4KQog
ICAgICAgICAgICAgICAgIDogcmVnRXhwKHJlZ0V4cCkKICAgICAgICAgICAgICAgICAsIGxhc3RJ
bmRleChsYXN0SW5kZXgpCiAgICAgICAgICAgICB7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9SZWdFeHBQcm90b3R5cGUuY3BwCShyZXZpc2lvbiA0ODc3MykKKysrIEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyAr
NDYsNyBAQCBzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvCiAKIGNvbnN0
IENsYXNzSW5mbyBSZWdFeHBQcm90b3R5cGU6OmluZm8gPSB7ICJSZWdFeHBQcm90b3R5cGUiLCAw
LCAwLCAwIH07CiAKLVJlZ0V4cFByb3RvdHlwZTo6UmVnRXhwUHJvdG90eXBlKEV4ZWNTdGF0ZSog
ZXhlYywgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZSwgU3RydWN0dXJlKiBwcm90b3R5
cGVGdW5jdGlvblN0cnVjdHVyZSkKK1JlZ0V4cFByb3RvdHlwZTo6UmVnRXhwUHJvdG90eXBlKEV4
ZWNTdGF0ZSogZXhlYywgTm90TnVsbFBhc3NSZWZQdHI8U3RydWN0dXJlPiBzdHJ1Y3R1cmUsIFN0
cnVjdHVyZSogcHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUpCiAgICAgOiBKU09iamVjdChzdHJ1
Y3R1cmUpCiB7CiAgICAgcHV0RGlyZWN0RnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbihleGVjLCBu
ZXcgKGV4ZWMpIE5hdGl2ZUZ1bmN0aW9uV3JhcHBlcihleGVjLCBwcm90b3R5cGVGdW5jdGlvblN0
cnVjdHVyZSwgMCwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbXBpbGUsIHJlZ0V4cFByb3RvRnVu
Y0NvbXBpbGUpLCBEb250RW51bSk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cFByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
UHJvdG90eXBlLmgJKHJldmlzaW9uIDQ4NzczKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9S
ZWdFeHBQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgIGNsYXNzIFJlZ0V4cFByb3RvdHlwZSA6IHB1YmxpYyBKU09iamVjdCB7
CiAgICAgcHVibGljOgotICAgICAgICBSZWdFeHBQcm90b3R5cGUoRXhlY1N0YXRlKiwgUGFzc1Jl
ZlB0cjxTdHJ1Y3R1cmU+LCBTdHJ1Y3R1cmUqIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlKTsK
KyAgICAgICAgUmVnRXhwUHJvdG90eXBlKEV4ZWNTdGF0ZSosIE5vdE51bGxQYXNzUmVmUHRyPFN0
cnVjdHVyZT4sIFN0cnVjdHVyZSogcHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUpOwogCiAgICAg
ICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAm
aW5mbzsgfQogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gNDg3
NzMpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHN0cmluZ0Zyb21DCiAKIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoU3RyaW5nQ29uc3RydWN0
b3IpOwogCi1TdHJpbmdDb25zdHJ1Y3Rvcjo6U3RyaW5nQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBl
eGVjLCBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlLCBTdHJ1Y3R1cmUqIHByb3RvdHlw
ZUZ1bmN0aW9uU3RydWN0dXJlLCBTdHJpbmdQcm90b3R5cGUqIHN0cmluZ1Byb3RvdHlwZSkKK1N0
cmluZ0NvbnN0cnVjdG9yOjpTdHJpbmdDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIE5vdE51
bGxQYXNzUmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlLCBTdHJ1Y3R1cmUqIHByb3RvdHlwZUZ1
bmN0aW9uU3RydWN0dXJlLCBTdHJpbmdQcm90b3R5cGUqIHN0cmluZ1Byb3RvdHlwZSkKICAgICA6
IEludGVybmFsRnVuY3Rpb24oJmV4ZWMtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJlLCBJZGVudGlm
aWVyKGV4ZWMsIHN0cmluZ1Byb3RvdHlwZS0+Y2xhc3NJbmZvKCktPmNsYXNzTmFtZSkpCiB7CiAg
ICAgLy8gRUNNQSAxNS41LjMuMSBTdHJpbmcucHJvdG90eXBlCkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cmluZ0NvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJpbmdDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiA0ODc3MykKKysrIEphdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MjksNyArMjksNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIFN0cmluZ0NvbnN0cnVj
dG9yIDogcHVibGljIEludGVybmFsRnVuY3Rpb24gewogICAgIHB1YmxpYzoKLSAgICAgICAgU3Ry
aW5nQ29uc3RydWN0b3IoRXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+LCBTdHJ1Y3R1
cmUqIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLCBTdHJpbmdQcm90b3R5cGUqKTsKKyAgICAg
ICAgU3RyaW5nQ29uc3RydWN0b3IoRXhlY1N0YXRlKiwgTm90TnVsbFBhc3NSZWZQdHI8U3RydWN0
dXJlPiwgU3RydWN0dXJlKiBwcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZSwgU3RyaW5nUHJvdG90
eXBlKik7CiAKICAgICAgICAgdmlydHVhbCBDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEo
Q29uc3RydWN0RGF0YSYpOwogICAgICAgICB2aXJ0dWFsIENhbGxUeXBlIGdldENhbGxEYXRhKENh
bGxEYXRhJik7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuY3BwCShy
ZXZpc2lvbiA0ODc3MykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjksMTkgKzI5LDE5IEBAIEFTU0VSVF9DTEFTU19GSVRTX0lO
X0NFTEwoU3RyaW5nT2JqZWN0KTsKIAogY29uc3QgQ2xhc3NJbmZvIFN0cmluZ09iamVjdDo6aW5m
byA9IHsgIlN0cmluZyIsIDAsIDAsIDAgfTsKIAotU3RyaW5nT2JqZWN0OjpTdHJpbmdPYmplY3Qo
RXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlKQorU3RyaW5n
T2JqZWN0OjpTdHJpbmdPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBOb3ROdWxsUGFzc1JlZlB0cjxT
dHJ1Y3R1cmU+IHN0cnVjdHVyZSkKICAgICA6IEpTV3JhcHBlck9iamVjdChzdHJ1Y3R1cmUpCiB7
CiAgICAgc2V0SW50ZXJuYWxWYWx1ZShqc0VtcHR5U3RyaW5nKGV4ZWMpKTsKIH0KIAotU3RyaW5n
T2JqZWN0OjpTdHJpbmdPYmplY3QoUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZSwgSlNT
dHJpbmcqIHN0cmluZykKK1N0cmluZ09iamVjdDo6U3RyaW5nT2JqZWN0KE5vdE51bGxQYXNzUmVm
UHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlLCBKU1N0cmluZyogc3RyaW5nKQogICAgIDogSlNXcmFw
cGVyT2JqZWN0KHN0cnVjdHVyZSkKIHsKICAgICBzZXRJbnRlcm5hbFZhbHVlKHN0cmluZyk7CiB9
CiAKLVN0cmluZ09iamVjdDo6U3RyaW5nT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0
cjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZSwgY29uc3QgVVN0cmluZyYgc3RyaW5nKQorU3RyaW5nT2Jq
ZWN0OjpTdHJpbmdPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBOb3ROdWxsUGFzc1JlZlB0cjxTdHJ1
Y3R1cmU+IHN0cnVjdHVyZSwgY29uc3QgVVN0cmluZyYgc3RyaW5nKQogICAgIDogSlNXcmFwcGVy
T2JqZWN0KHN0cnVjdHVyZSkKIHsKICAgICBzZXRJbnRlcm5hbFZhbHVlKGpzU3RyaW5nKGV4ZWMs
IHN0cmluZykpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5oCShyZXZp
c2lvbiA0ODc3MykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFz
cyBTdHJpbmdPYmplY3QgOiBwdWJsaWMgSlNXcmFwcGVyT2JqZWN0IHsKICAgICBwdWJsaWM6Ci0g
ICAgICAgIFN0cmluZ09iamVjdChFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPFN0cnVjdHVyZT4pOwot
ICAgICAgICBTdHJpbmdPYmplY3QoRXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+LCBj
b25zdCBVU3RyaW5nJik7CisgICAgICAgIFN0cmluZ09iamVjdChFeGVjU3RhdGUqLCBOb3ROdWxs
UGFzc1JlZlB0cjxTdHJ1Y3R1cmU+KTsKKyAgICAgICAgU3RyaW5nT2JqZWN0KEV4ZWNTdGF0ZSos
IE5vdE51bGxQYXNzUmVmUHRyPFN0cnVjdHVyZT4sIGNvbnN0IFVTdHJpbmcmKTsKIAogICAgICAg
ICBzdGF0aWMgU3RyaW5nT2JqZWN0KiBjcmVhdGUoRXhlY1N0YXRlKiwgSlNTdHJpbmcqKTsKIApA
QCAtNTIsNyArNTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAgICAgcHJvdGVj
dGVkOgotICAgICAgICBTdHJpbmdPYmplY3QoUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+LCBKU1N0cmlu
ZyopOworICAgICAgICBTdHJpbmdPYmplY3QoTm90TnVsbFBhc3NSZWZQdHI8U3RydWN0dXJlPiwg
SlNTdHJpbmcqKTsKICAgfTsKIAogICAgIFN0cmluZ09iamVjdCogYXNTdHJpbmdPYmplY3QoSlNW
YWx1ZSk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdFRoYXRNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJpbmdPYmplY3RUaGF0TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5oCShyZXZpc2lvbiA0ODc3
MykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0VGhhdE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgU3RyaW5nT2JqZWN0VGhh
dE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFN0cnVj
dHVyZT4gc3RydWN0dXJlLCBjb25zdCBVU3RyaW5nJiBzdHJpbmcpCisgICAgICAgIFN0cmluZ09i
amVjdFRoYXRNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKEV4ZWNTdGF0ZSogZXhlYywgTm90TnVsbFBh
c3NSZWZQdHI8U3RydWN0dXJlPiBzdHJ1Y3R1cmUsIGNvbnN0IFVTdHJpbmcmIHN0cmluZykKICAg
ICAgICAgICAgIDogU3RyaW5nT2JqZWN0KGV4ZWMsIHN0cnVjdHVyZSwgc3RyaW5nKQogICAgICAg
ICB7CiAgICAgICAgIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90
eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3Rv
dHlwZS5jcHAJKHJldmlzaW9uIDQ4NzczKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJp
bmdQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNyArMTIxLDcgQEAgY29uc3Qg
Q2xhc3NJbmZvIFN0cmluZ1Byb3RvdHlwZTo6aW5mbyA9IAogKi8KIAogLy8gRUNNQSAxNS41LjQK
LVN0cmluZ1Byb3RvdHlwZTo6U3RyaW5nUHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhlYywgUGFzc1Jl
ZlB0cjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZSkKK1N0cmluZ1Byb3RvdHlwZTo6U3RyaW5nUHJvdG90
eXBlKEV4ZWNTdGF0ZSogZXhlYywgTm90TnVsbFBhc3NSZWZQdHI8U3RydWN0dXJlPiBzdHJ1Y3R1
cmUpCiAgICAgOiBTdHJpbmdPYmplY3QoZXhlYywgc3RydWN0dXJlKQogewogICAgIC8vIFRoZSBj
b25zdHJ1Y3RvciB3aWxsIGJlIGFkZGVkIGxhdGVyLCBhZnRlciBTdHJpbmdDb25zdHJ1Y3RvciBo
YXMgYmVlbiBidWlsdApJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5
cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlw
ZS5oCShyZXZpc2lvbiA0ODc3MykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJv
dG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKICAgICBjbGFzcyBTdHJpbmdQcm90b3R5cGUgOiBwdWJsaWMgU3RyaW5nT2JqZWN0IHsKICAg
ICBwdWJsaWM6Ci0gICAgICAgIFN0cmluZ1Byb3RvdHlwZShFeGVjU3RhdGUqLCBQYXNzUmVmUHRy
PFN0cnVjdHVyZT4pOworICAgICAgICBTdHJpbmdQcm90b3R5cGUoRXhlY1N0YXRlKiwgTm90TnVs
bFBhc3NSZWZQdHI8U3RydWN0dXJlPik7CiAKICAgICAgICAgdmlydHVhbCBib29sIGdldE93blBy
b3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsK
SW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9QYXNzUmVmUHRyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvd3RmL1Bhc3NSZWZQdHIuaAkocmV2aXNpb24gNDg3NzMpCisrKyBKYXZhU2Ny
aXB0Q29yZS93dGYvUGFzc1JlZlB0ci5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw2IEBA
IG5hbWVzcGFjZSBXVEYgewogICAgICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJu
ICFtX3B0cjsgfQogCiAgICAgICAgIC8vIFRoaXMgY29udmVyc2lvbiBvcGVyYXRvciBhbGxvd3Mg
aW1wbGljaXQgY29udmVyc2lvbiB0byBib29sIGJ1dCBub3QgdG8gb3RoZXIgaW50ZWdlciB0eXBl
cy4KLSAgICAgICAgLy8gUGFyZW50aGVzaXMgaXMgbmVlZGVkIGZvciB3aW5zY3cgY29tcGlsZXIg
dG8gcmVzb2x2ZSBjbGFzcyBxdWFsaWZpZXIgaW4gdGhpcyBjYXNlLgogICAgICAgICB0eXBlZGVm
IFQqIChQYXNzUmVmUHRyOjoqVW5zcGVjaWZpZWRCb29sVHlwZSk7CiAgICAgICAgIG9wZXJhdG9y
IFVuc3BlY2lmaWVkQm9vbFR5cGUoKSBjb25zdCB7IHJldHVybiBtX3B0ciA/ICZQYXNzUmVmUHRy
OjptX3B0ciA6IDA7IH0KIApAQCAtODUsNiArODQsNjEgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAg
ICAgIG11dGFibGUgVCogbV9wdHI7CiAgICAgfTsKICAgICAKKyAgICAvLyBGSVhNRTogTm90TnVs
bFBhc3NSZWZQdHIgc2hvdWxkIGp1c3QgaW5oZXJpdCBmcm9tIFBhc3NSZWZQdHIuIEhvd2V2ZXIs
CisgICAgLy8gR0NDJ3Mgb3B0aW1pemVyIGdldHMgaW5leHBsaWNhYmx5IGNvbmZ1c2VkIGJ5IGlu
aGVyaXRhbmNlIGluIHRoaXMgY2FzZS4KKyAgICAvLyBTbywgZm9yIG5vdywganVzdCBjb3B5IHRo
ZSBtb3N0IGltcG9ydGFudCBjb2RlIGZyb20gUGFzc1JlZlB0ci4KKyAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4gY2xhc3MgTm90TnVsbFBhc3NSZWZQdHIgeworICAgIHB1YmxpYzoKKyAgICAgICAg
Tm90TnVsbFBhc3NSZWZQdHIoVCogcHRyKQorICAgICAgICAgICAgOiBtX3B0cihwdHIpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChtX3B0cik7CisgICAgICAgICAgICBtX3B0ci0+cmVm
KCk7CisgICAgICAgIH0KKworICAgICAgICBOb3ROdWxsUGFzc1JlZlB0cihjb25zdCBOb3ROdWxs
UGFzc1JlZlB0ciYgbykgOiBtX3B0cihvLnJlbGVhc2VSZWYoKSkKKyAgICAgICAgeworICAgICAg
ICB9CisKKyAgICAgICAgdGVtcGxhdGUgPGNsYXNzIFU+IE5vdE51bGxQYXNzUmVmUHRyKGNvbnN0
IFJlZlB0cjxVPiYgbykKKyAgICAgICAgICAgIDogbV9wdHIoby5nZXQoKSkKKyAgICAgICAgewor
ICAgICAgICAgICAgQVNTRVJUKG1fcHRyKTsKKyAgICAgICAgICAgIG1fcHRyLT5yZWYoKTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgdGVtcGxhdGUgPGNsYXNzIFU+IE5vdE51bGxQYXNz
UmVmUHRyKGNvbnN0IFBhc3NSZWZQdHI8VT4mIG8pCisgICAgICAgICAgICA6IG1fcHRyKG8ucmVs
ZWFzZVJlZigpKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQobV9wdHIpOworICAgICAg
ICB9CisKKyAgICAgICAgdGVtcGxhdGUgPGNsYXNzIFU+IE5vdE51bGxQYXNzUmVmUHRyKGNvbnN0
IE5vdE51bGxQYXNzUmVmUHRyPFU+JiBvKQorICAgICAgICAgICAgOiBtX3B0cihvLnJlbGVhc2VS
ZWYoKSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKG1fcHRyKTsKKyAgICAgICAgfQor
CisgICAgICAgIEFMV0FZU19JTkxJTkUgfk5vdE51bGxQYXNzUmVmUHRyKCkgeyBkZXJlZklmTm90
TnVsbChtX3B0cik7IH0KKworICAgICAgICBUKiBnZXQoKSBjb25zdCB7IHJldHVybiBtX3B0cjsg
fQorCisgICAgICAgIHZvaWQgY2xlYXIoKSB7IGlmIChUKiBwdHIgPSBtX3B0cikgcHRyLT5kZXJl
ZigpOyBtX3B0ciA9IDA7IH0KKyAgICAgICAgVCogcmVsZWFzZVJlZigpIGNvbnN0IHsgVCogdG1w
ID0gbV9wdHI7IG1fcHRyID0gMDsgcmV0dXJuIHRtcDsgfQorCisgICAgICAgIFQmIG9wZXJhdG9y
KigpIGNvbnN0IHsgcmV0dXJuICptX3B0cjsgfQorICAgICAgICBUKiBvcGVyYXRvci0+KCkgY29u
c3QgeyByZXR1cm4gbV9wdHI7IH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgb3BlcmF0b3IhKCkg
Y29uc3QgeyByZXR1cm4gIW1fcHRyOyB9CisKKyAgICAgICAgLy8gVGhpcyBjb252ZXJzaW9uIG9w
ZXJhdG9yIGFsbG93cyBpbXBsaWNpdCBjb252ZXJzaW9uIHRvIGJvb2wgYnV0IG5vdCB0byBvdGhl
ciBpbnRlZ2VyIHR5cGVzLgorICAgICAgICB0eXBlZGVmIFQqIChOb3ROdWxsUGFzc1JlZlB0cjo6
KlVuc3BlY2lmaWVkQm9vbFR5cGUpOworICAgICAgICBvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xU
eXBlKCkgY29uc3QgeyByZXR1cm4gbV9wdHIgPyAmTm90TnVsbFBhc3NSZWZQdHI6Om1fcHRyIDog
MDsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgbXV0YWJsZSBUKiBtX3B0cjsKKyAgICB9Owor
CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHRlbXBsYXRlIDx0eXBlbmFtZSBVPiBpbmxpbmUg
UGFzc1JlZlB0cjxUPiYgUGFzc1JlZlB0cjxUPjo6b3BlcmF0b3I9KGNvbnN0IFJlZlB0cjxVPiYg
bykgCiAgICAgewogICAgICAgICBUKiBvcHRyID0gby5nZXQoKTsKQEAgLTE5NSwxMCArMjQ5LDEx
IEBAIG5hbWVzcGFjZSBXVEYgewogICAgIHsKICAgICAgICAgcmV0dXJuIHAuZ2V0KCk7CiAgICAg
fQotCisgICAgCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RGOjpQYXNzUmVmUHRyOwor
dXNpbmcgV1RGOjpOb3ROdWxsUGFzc1JlZlB0cjsKIHVzaW5nIFdURjo6YWRvcHRSZWY7CiB1c2lu
ZyBXVEY6OnN0YXRpY19wb2ludGVyX2Nhc3Q7CiB1c2luZyBXVEY6OmNvbnN0X3BvaW50ZXJfY2Fz
dDsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9SZWZQdHIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZh
U2NyaXB0Q29yZS93dGYvUmVmUHRyLmgJKHJldmlzaW9uIDQ4NzczKQorKysgSmF2YVNjcmlwdENv
cmUvd3RmL1JlZlB0ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBAIG5hbWVzcGFj
ZSBXVEYgewogICAgIGVudW0gUGxhY2VtZW50TmV3QWRvcHRUeXBlIHsgUGxhY2VtZW50TmV3QWRv
cHQgfTsKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBQYXNzUmVmUHRyOworICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBOb3ROdWxsUGFzc1JlZlB0cjsKIAogICAgIGVu
dW0gSGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSB7IEhhc2hUYWJsZURlbGV0ZWRWYWx1ZSB9Owog
CkBAIC00MCw2ICs0MSw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBSZWZQdHIoY29uc3Qg
UmVmUHRyJiBvKSA6IG1fcHRyKG8ubV9wdHIpIHsgaWYgKFQqIHB0ciA9IG1fcHRyKSBwdHItPnJl
ZigpOyB9CiAgICAgICAgIC8vIHNlZSBjb21tZW50IGluIFBhc3NSZWZQdHIuaCBmb3Igd2h5IHRo
aXMgdGFrZXMgY29uc3QgcmVmZXJlbmNlCiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPiBS
ZWZQdHIoY29uc3QgUGFzc1JlZlB0cjxVPiYpOworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VT4gUmVmUHRyKGNvbnN0IE5vdE51bGxQYXNzUmVmUHRyPFU+Jik7CiAKICAgICAgICAgLy8gU3Bl
Y2lhbCBjb25zdHJ1Y3RvciBmb3IgY2FzZXMgd2hlcmUgd2Ugb3ZlcndyaXRlIGFuIG9iamVjdCBp
biBwbGFjZS4KICAgICAgICAgUmVmUHRyKFBsYWNlbWVudE5ld0Fkb3B0VHlwZSkgeyB9CkBAIC03
Myw4ICs3NSwxMCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgUmVmUHRyJiBvcGVyYXRvcj0o
Y29uc3QgUmVmUHRyJik7CiAgICAgICAgIFJlZlB0ciYgb3BlcmF0b3I9KFQqKTsKICAgICAgICAg
UmVmUHRyJiBvcGVyYXRvcj0oY29uc3QgUGFzc1JlZlB0cjxUPiYpOworICAgICAgICBSZWZQdHIm
IG9wZXJhdG9yPShjb25zdCBOb3ROdWxsUGFzc1JlZlB0cjxUPiYpOwogICAgICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVT4gUmVmUHRyJiBvcGVyYXRvcj0oY29uc3QgUmVmUHRyPFU+Jik7CiAgICAg
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPiBSZWZQdHImIG9wZXJhdG9yPShjb25zdCBQYXNzUmVm
UHRyPFU+Jik7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPiBSZWZQdHImIG9wZXJhdG9y
PShjb25zdCBOb3ROdWxsUGFzc1JlZlB0cjxVPiYpOwogCiAgICAgICAgIHZvaWQgc3dhcChSZWZQ
dHImKTsKIApAQCAtODksNiArOTMsMTEgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgewogICAgIH0K
IAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4gaW5saW5l
IFJlZlB0cjxUPjo6UmVmUHRyKGNvbnN0IE5vdE51bGxQYXNzUmVmUHRyPFU+JiBvKQorICAgICAg
ICA6IG1fcHRyKG8ucmVsZWFzZVJlZigpKQorICAgIHsKKyAgICB9CisKICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4gaW5saW5lIFJlZlB0cjxUPiYgUmVmUHRyPFQ+OjpvcGVyYXRvcj0oY29uc3Qg
UmVmUHRyPFQ+JiBvKQogICAgIHsKICAgICAgICAgVCogb3B0ciA9IG8uZ2V0KCk7CkBAIC0xMzMs
NiArMTQyLDE1IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAg
fQogCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBSZWZQdHI8VD4mIFJlZlB0cjxU
Pjo6b3BlcmF0b3I9KGNvbnN0IE5vdE51bGxQYXNzUmVmUHRyPFQ+JiBvKQorICAgIHsKKyAgICAg
ICAgVCogcHRyID0gbV9wdHI7CisgICAgICAgIG1fcHRyID0gby5yZWxlYXNlUmVmKCk7CisgICAg
ICAgIGlmIChwdHIpCisgICAgICAgICAgICBwdHItPmRlcmVmKCk7CisgICAgICAgIHJldHVybiAq
dGhpczsKKyAgICB9CisKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gdGVtcGxhdGUgPHR5cGVu
YW1lIFU+IGlubGluZSBSZWZQdHI8VD4mIFJlZlB0cjxUPjo6b3BlcmF0b3I9KGNvbnN0IFBhc3NS
ZWZQdHI8VT4mIG8pCiAgICAgewogICAgICAgICBUKiBwdHIgPSBtX3B0cjsKQEAgLTE0Miw2ICsx
NjAsMTUgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CiAK
KyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gdGVtcGxhdGUgPHR5cGVuYW1lIFU+IGlubGluZSBS
ZWZQdHI8VD4mIFJlZlB0cjxUPjo6b3BlcmF0b3I9KGNvbnN0IE5vdE51bGxQYXNzUmVmUHRyPFU+
JiBvKQorICAgIHsKKyAgICAgICAgVCogcHRyID0gbV9wdHI7CisgICAgICAgIG1fcHRyID0gby5y
ZWxlYXNlUmVmKCk7CisgICAgICAgIGlmIChwdHIpCisgICAgICAgICAgICBwdHItPmRlcmVmKCk7
CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4g
aW5saW5lIHZvaWQgUmVmUHRyPFQ+Ojpzd2FwKFJlZlB0cjxUPiYgbykKICAgICB7CiAgICAgICAg
IHN0ZDo6c3dhcChtX3B0ciwgby5tX3B0cik7CkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNDg4MjYpCisrKyBXZWJDb3Jl
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ3IEBACisyMDA5LTA5LTI4ICBH
ZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm90TnVsbFBhc3NSZWZQdHI6IHNtYXJ0IHBvaW50
ZXIgb3B0aW1pemVkIGZvciBwYXNzaW5nIHJlZmVyZW5jZXMgdGhhdCBhcmUgbm90IG51bGwKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI5ODIyCisgICAg
ICAgIAorICAgICAgICBBZGRlZCBOb3ROdWxsUGFzc1JlZlB0ciwgYW5kIGRlcGxveWVkIGl0IGlu
IGFsbCBwbGFjZXMgdGhhdCBpbml0aWFsaXplCisgICAgICAgIEphdmFTY3JpcHQgb2JqZWN0cy4K
KworICAgICAgICAqIGJpbmRpbmdzL2pzL0RPTU9iamVjdFdpdGhTVkdDb250ZXh0Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpET01PYmplY3RXaXRoU1ZHQ29udGV4dDo6RE9NT2JqZWN0V2l0aFNWR0Nv
bnRleHQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpjYWNoZURPTVN0cnVjdHVyZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNE
T01CaW5kaW5nLmg6CisgICAgICAgIChXZWJDb3JlOjpET01PYmplY3Q6OkRPTU9iamVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpET01PYmplY3RXaXRoR2xvYmFsUG9pbnRlcjo6RE9NT2JqZWN0V2l0
aEdsb2JhbFBvaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RE9NQ29uc3RydWN0b3JPYmplY3Q6
OkRPTUNvbnN0cnVjdG9yT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUNvbnN0cnVjdG9y
V2l0aERvY3VtZW50OjpET01Db25zdHJ1Y3RvcldpdGhEb2N1bWVudCk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNET01H
bG9iYWxPYmplY3Q6OkpTRE9NR2xvYmFsT2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0RPTUdsb2JhbE9iamVjdC5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFz
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvd0Jhc2U6OkpTRE9NV2luZG93QmFz
ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmg6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNIVE1MQWxsQ29sbGVjdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6SlNI
VE1MQWxsQ29sbGVjdGlvbjo6SlNIVE1MQWxsQ29sbGVjdGlvbik6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
SW5zcGVjdGVkT2JqZWN0V3JhcHBlcjo6SlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVyKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0luc3BlY3RlZE9iamVjdFdyYXBwZXIuaDoKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0luc3BlY3RvckNhbGxiYWNrV3JhcHBlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpKU0luc3BlY3RvckNhbGxiYWNrV3JhcHBlcjo6SlNJbnNwZWN0b3JDYWxsYmFja1dyYXBw
ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSW5zcGVjdG9yQ2FsbGJhY2tXcmFwcGVyLmg6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXI6OkpTUXVhcmFudGlu
ZWRPYmplY3RXcmFwcGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1F1YXJhbnRpbmVkT2Jq
ZWN0V3JhcHBlci5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEJhc2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNXb3JrZXJDb250ZXh0QmFzZTo6SlNXb3JrZXJDb250
ZXh0QmFzZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0QmFzZS5oOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAq
IGJyaWRnZS9ydW50aW1lX29iamVjdC5jcHA6CisgICAgICAgIChKU0M6OlJ1bnRpbWVPYmplY3RJ
bXA6OlJ1bnRpbWVPYmplY3RJbXApOgorICAgICAgICAqIGJyaWRnZS9ydW50aW1lX29iamVjdC5o
OgorCiAyMDA5LTA5LTI4ICBKYWt1YiBXaWVjem9yZWsgIDxmYXcyMTdAZ21haWwuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEhhdXNtYW5uLgpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy9qcy9ET01PYmplY3RXaXRoU1ZHQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvanMvRE9NT2JqZWN0V2l0aFNWR0NvbnRleHQuaAkocmV2aXNpb24gNDg3NzMpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0RPTU9iamVjdFdpdGhTVkdDb250ZXh0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQwLDcgKzQwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBTVkdFbGVt
ZW50KiBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9CiAKICAgICBw
cm90ZWN0ZWQ6Ci0gICAgICAgIERPTU9iamVjdFdpdGhTVkdDb250ZXh0KFBhc3NSZWZQdHI8SlND
OjpTdHJ1Y3R1cmU+IHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqLCBTVkdFbGVtZW50KiBj
b250ZXh0KQorICAgICAgICBET01PYmplY3RXaXRoU1ZHQ29udGV4dChOb3ROdWxsUGFzc1JlZlB0
cjxKU0M6OlN0cnVjdHVyZT4gc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCosIFNWR0VsZW1l
bnQqIGNvbnRleHQpCiAgICAgICAgICAgICA6IERPTU9iamVjdChzdHJ1Y3R1cmUpCiAgICAgICAg
ICAgICAsIG1fY29udGV4dChjb250ZXh0KQogICAgICAgICB7CkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NQmluZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUJpbmRpbmcuY3BwCShyZXZpc2lvbiA0ODc3MykKKysrIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01CaW5kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAwLDcgKzYwMCw3IEBAIFN0
cnVjdHVyZSogZ2V0Q2FjaGVkRE9NU3RydWN0dXJlKEpTRE9NR2wKICAgICByZXR1cm4gc3RydWN0
dXJlcy5nZXQoY2xhc3NJbmZvKS5nZXQoKTsKIH0KIAotU3RydWN0dXJlKiBjYWNoZURPTVN0cnVj
dHVyZShKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFN0cnVjdHVy
ZT4gc3RydWN0dXJlLCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKK1N0cnVjdHVyZSogY2Fj
aGVET01TdHJ1Y3R1cmUoSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgTm90TnVsbFBh
c3NSZWZQdHI8U3RydWN0dXJlPiBzdHJ1Y3R1cmUsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZv
KQogewogICAgIEpTRE9NU3RydWN0dXJlTWFwJiBzdHJ1Y3R1cmVzID0gZ2xvYmFsT2JqZWN0LT5z
dHJ1Y3R1cmVzKCk7CiAgICAgQVNTRVJUKCFzdHJ1Y3R1cmVzLmNvbnRhaW5zKGNsYXNzSW5mbykp
OwpAQCAtNjEyLDcgKzYxMiw3IEBAIFN0cnVjdHVyZSogZ2V0Q2FjaGVkRE9NU3RydWN0dXJlKEV4
ZWNTdGEKICAgICByZXR1cm4gZ2V0Q2FjaGVkRE9NU3RydWN0dXJlKHN0YXRpY19jYXN0PEpTRE9N
R2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSwgY2xhc3NJbmZvKTsK
IH0KIAotU3RydWN0dXJlKiBjYWNoZURPTVN0cnVjdHVyZShFeGVjU3RhdGUqIGV4ZWMsIFBhc3NS
ZWZQdHI8U3RydWN0dXJlPiBzdHJ1Y3R1cmUsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKQor
U3RydWN0dXJlKiBjYWNoZURPTVN0cnVjdHVyZShFeGVjU3RhdGUqIGV4ZWMsIE5vdE51bGxQYXNz
UmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlLCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykK
IHsKICAgICByZXR1cm4gY2FjaGVET01TdHJ1Y3R1cmUoc3RhdGljX2Nhc3Q8SlNET01HbG9iYWxP
YmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLCBzdHJ1Y3R1cmUsIGNsYXNzSW5m
byk7CiB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJKHJldmlzaW9uIDQ4Nzcz
KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAkod29ya2luZyBjb3B5KQpA
QCAtNTAsNyArNTAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgLy8gQmFzZSBjbGFzcyBm
b3IgYWxsIG9iamVjdHMgaW4gdGhpcyBiaW5kaW5nIGV4Y2VwdCBXaW5kb3cuCiAgICAgY2xhc3Mg
RE9NT2JqZWN0IDogcHVibGljIEpTQzo6SlNPYmplY3QgewogICAgIHByb3RlY3RlZDoKLSAgICAg
ICAgZXhwbGljaXQgRE9NT2JqZWN0KFBhc3NSZWZQdHI8SlNDOjpTdHJ1Y3R1cmU+IHN0cnVjdHVy
ZSkgCisgICAgICAgIGV4cGxpY2l0IERPTU9iamVjdChOb3ROdWxsUGFzc1JlZlB0cjxKU0M6OlN0
cnVjdHVyZT4gc3RydWN0dXJlKSAKICAgICAgICAgICAgIDogSlNPYmplY3Qoc3RydWN0dXJlKQog
ICAgICAgICB7CiAgICAgICAgIH0KQEAgLTgwLDcgKzgwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICB9CiAKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIERPTU9iamVjdFdpdGhHbG9i
YWxQb2ludGVyKFBhc3NSZWZQdHI8SlNDOjpTdHJ1Y3R1cmU+IHN0cnVjdHVyZSwgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICAgICAgRE9NT2JqZWN0V2l0aEdsb2JhbFBvaW50
ZXIoTm90TnVsbFBhc3NSZWZQdHI8SlNDOjpTdHJ1Y3R1cmU+IHN0cnVjdHVyZSwgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCkKICAgICAgICAgICAgIDogRE9NT2JqZWN0KHN0cnVjdHVy
ZSkKICAgICAgICAgICAgICwgbV9nbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0KQogICAgICAgICB7
CkBAIC0xMTAsNyArMTEwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB9CiAKICAg
ICBwcm90ZWN0ZWQ6Ci0gICAgICAgIERPTUNvbnN0cnVjdG9yT2JqZWN0KFBhc3NSZWZQdHI8SlND
OjpTdHJ1Y3R1cmU+IHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkK
KyAgICAgICAgRE9NQ29uc3RydWN0b3JPYmplY3QoTm90TnVsbFBhc3NSZWZQdHI8SlNDOjpTdHJ1
Y3R1cmU+IHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKICAgICAg
ICAgICAgIDogRE9NT2JqZWN0V2l0aEdsb2JhbFBvaW50ZXIoc3RydWN0dXJlLCBnbG9iYWxPYmpl
Y3QpCiAgICAgICAgIHsKICAgICAgICAgfQpAQCAtMTI2LDcgKzEyNiw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgfQogCiAgICAgcHJvdGVjdGVkOgotICAgICAgICBET01Db25zdHJ1
Y3RvcldpdGhEb2N1bWVudChQYXNzUmVmUHRyPEpTQzo6U3RydWN0dXJlPiBzdHJ1Y3R1cmUsIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgICAgIERPTUNvbnN0cnVjdG9yV2l0
aERvY3VtZW50KE5vdE51bGxQYXNzUmVmUHRyPEpTQzo6U3RydWN0dXJlPiBzdHJ1Y3R1cmUsIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgICAgICAgICA6IERPTUNvbnN0cnVj
dG9yT2JqZWN0KHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KQogICAgICAgICB7CiAgICAgICAgICAg
ICBBU1NFUlQoZ2xvYmFsT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzRG9jdW1l
bnQoKSk7CkBAIC0xNDcsOSArMTQ3LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHZvaWQg
bWFya0RPTU9iamVjdFdyYXBwZXIoSlNDOjpNYXJrU3RhY2smLCBKU0M6OkpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgdm9pZCogb2JqZWN0KTsKIAogICAgIEpTQzo6U3RydWN0dXJlKiBnZXRDYWNo
ZWRET01TdHJ1Y3R1cmUoSlNET01HbG9iYWxPYmplY3QqLCBjb25zdCBKU0M6OkNsYXNzSW5mbyop
OwotICAgIEpTQzo6U3RydWN0dXJlKiBjYWNoZURPTVN0cnVjdHVyZShKU0RPTUdsb2JhbE9iamVj
dCosIFBhc3NSZWZQdHI8SlNDOjpTdHJ1Y3R1cmU+LCBjb25zdCBKU0M6OkNsYXNzSW5mbyopOwor
ICAgIEpTQzo6U3RydWN0dXJlKiBjYWNoZURPTVN0cnVjdHVyZShKU0RPTUdsb2JhbE9iamVjdCos
IE5vdE51bGxQYXNzUmVmUHRyPEpTQzo6U3RydWN0dXJlPiwgY29uc3QgSlNDOjpDbGFzc0luZm8q
KTsKICAgICBKU0M6OlN0cnVjdHVyZSogZ2V0Q2FjaGVkRE9NU3RydWN0dXJlKEpTQzo6RXhlY1N0
YXRlKiwgY29uc3QgSlNDOjpDbGFzc0luZm8qKTsKLSAgICBKU0M6OlN0cnVjdHVyZSogY2FjaGVE
T01TdHJ1Y3R1cmUoSlNDOjpFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPEpTQzo6U3RydWN0dXJlPiwg
Y29uc3QgSlNDOjpDbGFzc0luZm8qKTsKKyAgICBKU0M6OlN0cnVjdHVyZSogY2FjaGVET01TdHJ1
Y3R1cmUoSlNDOjpFeGVjU3RhdGUqLCBOb3ROdWxsUGFzc1JlZlB0cjxKU0M6OlN0cnVjdHVyZT4s
IGNvbnN0IEpTQzo6Q2xhc3NJbmZvKik7CiAKICAgICBKU0M6OkpTT2JqZWN0KiBnZXRDYWNoZWRE
T01Db25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6Q2xhc3NJbmZvKik7CiAg
ICAgdm9pZCBjYWNoZURPTUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpD
bGFzc0luZm8qLCBKU0M6OkpTT2JqZWN0KiBjb25zdHJ1Y3Rvcik7CkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gNDg3NzMpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDUsNyArNDUsNyBAQCBKU0RPTUdsb2JhbE9iamVjdDo6SlNET01HbG9iYWxPYmplY3REYXRhCiB7
CiB9CiAKLUpTRE9NR2xvYmFsT2JqZWN0OjpKU0RPTUdsb2JhbE9iamVjdChQYXNzUmVmUHRyPFN0
cnVjdHVyZT4gc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdDo6SlNET01HbG9iYWxPYmplY3RE
YXRhKiBkYXRhLCBKU09iamVjdCogdGhpc1ZhbHVlKQorSlNET01HbG9iYWxPYmplY3Q6OkpTRE9N
R2xvYmFsT2JqZWN0KE5vdE51bGxQYXNzUmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlLCBKU0RP
TUdsb2JhbE9iamVjdDo6SlNET01HbG9iYWxPYmplY3REYXRhKiBkYXRhLCBKU09iamVjdCogdGhp
c1ZhbHVlKQogICAgIDogSlNHbG9iYWxPYmplY3Qoc3RydWN0dXJlLCBkYXRhLCB0aGlzVmFsdWUp
CiB7CiB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oCShyZXZp
c2lvbiA0ODc3MykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuaAko
d29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
cHJvdGVjdGVkOgogICAgICAgICBzdHJ1Y3QgSlNET01HbG9iYWxPYmplY3REYXRhOwogCi0gICAg
ICAgIEpTRE9NR2xvYmFsT2JqZWN0KFBhc3NSZWZQdHI8SlNDOjpTdHJ1Y3R1cmU+LCBKU0RPTUds
b2JhbE9iamVjdERhdGEqLCBKU0M6OkpTT2JqZWN0KiB0aGlzVmFsdWUpOworICAgICAgICBKU0RP
TUdsb2JhbE9iamVjdChOb3ROdWxsUGFzc1JlZlB0cjxKU0M6OlN0cnVjdHVyZT4sIEpTRE9NR2xv
YmFsT2JqZWN0RGF0YSosIEpTQzo6SlNPYmplY3QqIHRoaXNWYWx1ZSk7CiAKICAgICBwdWJsaWM6
CiAgICAgICAgIEpTRE9NU3RydWN0dXJlTWFwJiBzdHJ1Y3R1cmVzKCkgeyByZXR1cm4gZCgpLT5z
dHJ1Y3R1cmVzOyB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3Bw
CShyZXZpc2lvbiA0ODc3MykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBKU0RPTVdpbmRvd0Jhc2U6OkpT
RE9NV2luZG93QmFzZURhdGE6OkpTCiB7CiB9CiAKLUpTRE9NV2luZG93QmFzZTo6SlNET01XaW5k
b3dCYXNlKFBhc3NSZWZQdHI8U3RydWN0dXJlPiBzdHJ1Y3R1cmUsIFBhc3NSZWZQdHI8RE9NV2lu
ZG93PiB3aW5kb3csIEpTRE9NV2luZG93U2hlbGwqIHNoZWxsKQorSlNET01XaW5kb3dCYXNlOjpK
U0RPTVdpbmRvd0Jhc2UoTm90TnVsbFBhc3NSZWZQdHI8U3RydWN0dXJlPiBzdHJ1Y3R1cmUsIFBh
c3NSZWZQdHI8RE9NV2luZG93PiB3aW5kb3csIEpTRE9NV2luZG93U2hlbGwqIHNoZWxsKQogICAg
IDogSlNET01HbG9iYWxPYmplY3Qoc3RydWN0dXJlLCBuZXcgSlNET01XaW5kb3dCYXNlRGF0YSh3
aW5kb3csIHNoZWxsKSwgc2hlbGwpCiB7CiAgICAgR2xvYmFsUHJvcGVydHlJbmZvIHN0YXRpY0ds
b2JhbHNbXSA9IHsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaAkocmV2
aXNpb24gNDg3NzMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBj
bGFzcyBKU0RPTVdpbmRvd0Jhc2UgOiBwdWJsaWMgSlNET01HbG9iYWxPYmplY3QgewogICAgICAg
ICB0eXBlZGVmIEpTRE9NR2xvYmFsT2JqZWN0IEJhc2U7CiAgICAgcHJvdGVjdGVkOgotICAgICAg
ICBKU0RPTVdpbmRvd0Jhc2UoUGFzc1JlZlB0cjxKU0M6OlN0cnVjdHVyZT4sIFBhc3NSZWZQdHI8
RE9NV2luZG93PiwgSlNET01XaW5kb3dTaGVsbCopOworICAgICAgICBKU0RPTVdpbmRvd0Jhc2Uo
Tm90TnVsbFBhc3NSZWZQdHI8SlNDOjpTdHJ1Y3R1cmU+LCBQYXNzUmVmUHRyPERPTVdpbmRvdz4s
IEpTRE9NV2luZG93U2hlbGwqKTsKIAogICAgIHB1YmxpYzoKICAgICAgICAgdm9pZCB1cGRhdGVE
b2N1bWVudCgpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxBbGxDb2xsZWN0aW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxBbGxDb2xsZWN0aW9u
LmgJKHJldmlzaW9uIDQ4NzczKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxBbGxDb2xs
ZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAgICAgY2xhc3MgSlNIVE1MQWxsQ29sbGVjdGlvbiA6IHB1YmxpYyBKU0hUTUxDb2xs
ZWN0aW9uIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEpTSFRNTEFsbENvbGxlY3Rpb24oUGFzc1Jl
ZlB0cjxKU0M6OlN0cnVjdHVyZT4gc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBjb2xsZWN0aW9uKQorICAgICAgICBK
U0hUTUxBbGxDb2xsZWN0aW9uKE5vdE51bGxQYXNzUmVmUHRyPEpTQzo6U3RydWN0dXJlPiBzdHJ1
Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8SFRNTENv
bGxlY3Rpb24+IGNvbGxlY3Rpb24pCiAgICAgICAgICAgICA6IEpTSFRNTENvbGxlY3Rpb24oc3Ry
dWN0dXJlLCBnbG9iYWxPYmplY3QsIGNvbGxlY3Rpb24pCiAgICAgICAgIHsKICAgICAgICAgfQpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RlZE9iamVjdFdyYXBwZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVy
LmNwcAkocmV2aXNpb24gNDg3NzMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVjdGVk
T2JqZWN0V3JhcHBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDcgKzcxLDcgQEAgSlNWYWx1
ZSBKU0luc3BlY3RlZE9iamVjdFdyYXBwZXI6OndyYXAoRQogICAgIHJldHVybiBuZXcgKHVud3Jh
cHBlZEV4ZWMpIEpTSW5zcGVjdGVkT2JqZWN0V3JhcHBlcih1bndyYXBwZWRFeGVjLCB1bndyYXBw
ZWRPYmplY3QsIEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyOjpjcmVhdGVTdHJ1Y3R1cmUoYXNP
YmplY3Qod3JhcCh1bndyYXBwZWRFeGVjLCBwcm90b3R5cGUpKSkpOwogfQogCi1KU0luc3BlY3Rl
ZE9iamVjdFdyYXBwZXI6OkpTSW5zcGVjdGVkT2JqZWN0V3JhcHBlcihFeGVjU3RhdGUqIHVud3Jh
cHBlZEV4ZWMsIEpTT2JqZWN0KiB1bndyYXBwZWRPYmplY3QsIFBhc3NSZWZQdHI8U3RydWN0dXJl
PiBzdHJ1Y3R1cmUpCitKU0luc3BlY3RlZE9iamVjdFdyYXBwZXI6OkpTSW5zcGVjdGVkT2JqZWN0
V3JhcHBlcihFeGVjU3RhdGUqIHVud3JhcHBlZEV4ZWMsIEpTT2JqZWN0KiB1bndyYXBwZWRPYmpl
Y3QsIE5vdE51bGxQYXNzUmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlKQogICAgIDogSlNRdWFy
YW50aW5lZE9iamVjdFdyYXBwZXIodW53cmFwcGVkRXhlYywgdW53cmFwcGVkT2JqZWN0LCBzdHJ1
Y3R1cmUpCiB7CiAgICAgV3JhcHBlck1hcCogd3JhcHBlck1hcCA9IHdyYXBwZXJzKCkuZ2V0KHVu
d3JhcHBlZEdsb2JhbE9iamVjdCgpKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNw
ZWN0ZWRPYmplY3RXcmFwcGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0luc3BlY3RlZE9iamVjdFdyYXBwZXIuaAkocmV2aXNpb24gNDg3NzMpCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSW5zcGVjdGVkT2JqZWN0V3JhcHBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
OCw3ICszOCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgc3RhdGljIGNvbnN0IEpT
Qzo6Q2xhc3NJbmZvIHNfaW5mbzsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIEpTSW5zcGVjdGVk
T2JqZWN0V3JhcHBlcihKU0M6OkV4ZWNTdGF0ZSogdW53cmFwcGVkRXhlYywgSlNDOjpKU09iamVj
dCogdW53cmFwcGVkT2JqZWN0LCBQYXNzUmVmUHRyPEpTQzo6U3RydWN0dXJlPik7CisgICAgICAg
IEpTSW5zcGVjdGVkT2JqZWN0V3JhcHBlcihKU0M6OkV4ZWNTdGF0ZSogdW53cmFwcGVkRXhlYywg
SlNDOjpKU09iamVjdCogdW53cmFwcGVkT2JqZWN0LCBOb3ROdWxsUGFzc1JlZlB0cjxKU0M6OlN0
cnVjdHVyZT4pOwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBhbGxvd3NHZXRQcm9wZXJ0eSgpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICAgICAgdmlydHVhbCBib29sIGFsbG93c1NldFByb3Bl
cnR5KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0luc3BlY3RvckNhbGxiYWNrV3JhcHBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0luc3BlY3RvckNhbGxiYWNrV3JhcHBlci5jcHAJKHJldmlzaW9uIDQ4NzczKQor
KysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RvckNhbGxiYWNrV3JhcHBlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDcgQEAgSlNWYWx1ZSBKU0luc3BlY3RvckNhbGxiYWNr
V3JhcHBlcjo6d3JhcAogICAgIHJldHVybiBuZXcgKHVud3JhcHBlZEV4ZWMpIEpTSW5zcGVjdG9y
Q2FsbGJhY2tXcmFwcGVyKHVud3JhcHBlZEV4ZWMsIHVud3JhcHBlZE9iamVjdCwgY3JlYXRlU3Ry
dWN0dXJlKHdyYXAodW53cmFwcGVkRXhlYywgcHJvdG90eXBlKSkpOwogfQogCi1KU0luc3BlY3Rv
ckNhbGxiYWNrV3JhcHBlcjo6SlNJbnNwZWN0b3JDYWxsYmFja1dyYXBwZXIoRXhlY1N0YXRlKiB1
bndyYXBwZWRFeGVjLCBKU09iamVjdCogdW53cmFwcGVkT2JqZWN0LCBQYXNzUmVmUHRyPFN0cnVj
dHVyZT4gc3RydWN0dXJlKQorSlNJbnNwZWN0b3JDYWxsYmFja1dyYXBwZXI6OkpTSW5zcGVjdG9y
Q2FsbGJhY2tXcmFwcGVyKEV4ZWNTdGF0ZSogdW53cmFwcGVkRXhlYywgSlNPYmplY3QqIHVud3Jh
cHBlZE9iamVjdCwgTm90TnVsbFBhc3NSZWZQdHI8U3RydWN0dXJlPiBzdHJ1Y3R1cmUpCiAgICAg
OiBKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBlcih1bndyYXBwZWRFeGVjLCB1bndyYXBwZWRPYmpl
Y3QsIHN0cnVjdHVyZSkKIHsKICAgICBBU1NFUlQoIXdyYXBwZXJzKCkuY29udGFpbnModW53cmFw
cGVkT2JqZWN0KSk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW5zcGVjdG9yQ2FsbGJh
Y2tXcmFwcGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3Rv
ckNhbGxiYWNrV3JhcHBlci5oCShyZXZpc2lvbiA0ODc3MykKKysrIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNJbnNwZWN0b3JDYWxsYmFja1dyYXBwZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyAr
NDAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHN0YXRpYyBjb25zdCBKU0M6OkNs
YXNzSW5mbyBzX2luZm87CiAKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIEpTSW5zcGVjdG9yQ2Fs
bGJhY2tXcmFwcGVyKEpTQzo6RXhlY1N0YXRlKiB1bndyYXBwZWRFeGVjLCBKU0M6OkpTT2JqZWN0
KiB1bndyYXBwZWRPYmplY3QsIFBhc3NSZWZQdHI8SlNDOjpTdHJ1Y3R1cmU+KTsKKyAgICAgICAg
SlNJbnNwZWN0b3JDYWxsYmFja1dyYXBwZXIoSlNDOjpFeGVjU3RhdGUqIHVud3JhcHBlZEV4ZWMs
IEpTQzo6SlNPYmplY3QqIHVud3JhcHBlZE9iamVjdCwgTm90TnVsbFBhc3NSZWZQdHI8SlNDOjpT
dHJ1Y3R1cmU+KTsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgYWxsb3dzQ2FsbEFzRnVuY3Rpb24o
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNR
dWFyYW50aW5lZE9iamVjdFdyYXBwZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIuY3BwCShyZXZpc2lvbiA0ODc3MykKKysr
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIEpTVmFsdWUgSlNRdWFyYW50aW5lZE9iamVjdFdy
YXBwZXI6OmNhY2gKICAgICByZXR1cm4gdjsKIH0KIAotSlNRdWFyYW50aW5lZE9iamVjdFdyYXBw
ZXI6OkpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyKEV4ZWNTdGF0ZSogdW53cmFwcGVkRXhlYywg
SlNPYmplY3QqIHVud3JhcHBlZE9iamVjdCwgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IHN0cnVjdHVy
ZSkKK0pTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyOjpKU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBl
cihFeGVjU3RhdGUqIHVud3JhcHBlZEV4ZWMsIEpTT2JqZWN0KiB1bndyYXBwZWRPYmplY3QsIE5v
dE51bGxQYXNzUmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlKQogICAgIDogSlNPYmplY3Qoc3Ry
dWN0dXJlKQogICAgICwgbV91bndyYXBwZWRHbG9iYWxPYmplY3QodW53cmFwcGVkRXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpKQogICAgICwgbV91bndyYXBwZWRPYmplY3QodW53cmFwcGVkT2Jq
ZWN0KQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1F1YXJhbnRpbmVkT2JqZWN0V3JhcHBl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNRdWFyYW50aW5lZE9iamVj
dFdyYXBwZXIuaAkocmV2aXNpb24gNDg3NzMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTUXVh
cmFudGluZWRPYmplY3RXcmFwcGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB9CiAKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAg
IEpTUXVhcmFudGluZWRPYmplY3RXcmFwcGVyKEpTQzo6RXhlY1N0YXRlKiB1bndyYXBwZWRFeGVj
LCBKU0M6OkpTT2JqZWN0KiB1bndyYXBwZWRPYmplY3QsIFBhc3NSZWZQdHI8SlNDOjpTdHJ1Y3R1
cmU+KTsKKyAgICAgICAgSlNRdWFyYW50aW5lZE9iamVjdFdyYXBwZXIoSlNDOjpFeGVjU3RhdGUq
IHVud3JhcHBlZEV4ZWMsIEpTQzo6SlNPYmplY3QqIHVud3JhcHBlZE9iamVjdCwgTm90TnVsbFBh
c3NSZWZQdHI8SlNDOjpTdHJ1Y3R1cmU+KTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgbWFya0No
aWxkcmVuKEpTQzo6TWFya1N0YWNrJik7CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNX
b3JrZXJDb250ZXh0QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1dvcmtlckNvbnRleHRCYXNlLmNwcAkocmV2aXNpb24gNDg3NzMpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTV29ya2VyQ29udGV4dEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0
NCw3IEBAIEFTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoSlNXb3JrZXJDb250ZXgKIAogY29uc3Qg
Q2xhc3NJbmZvIEpTV29ya2VyQ29udGV4dEJhc2U6OnNfaW5mbyA9IHsgIldvcmtlckNvbnRleHQi
LCAwLCAwLCAwIH07CiAKLUpTV29ya2VyQ29udGV4dEJhc2U6OkpTV29ya2VyQ29udGV4dEJhc2Uo
UGFzc1JlZlB0cjxKU0M6OlN0cnVjdHVyZT4gc3RydWN0dXJlLCBQYXNzUmVmUHRyPFdvcmtlckNv
bnRleHQ+IGltcGwpCitKU1dvcmtlckNvbnRleHRCYXNlOjpKU1dvcmtlckNvbnRleHRCYXNlKE5v
dE51bGxQYXNzUmVmUHRyPEpTQzo6U3RydWN0dXJlPiBzdHJ1Y3R1cmUsIFBhc3NSZWZQdHI8V29y
a2VyQ29udGV4dD4gaW1wbCkKICAgICA6IEpTRE9NR2xvYmFsT2JqZWN0KHN0cnVjdHVyZSwgbmV3
IEpTRE9NR2xvYmFsT2JqZWN0RGF0YSwgdGhpcykKICAgICAsIG1faW1wbChpbXBsKQogewpJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRCYXNlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRCYXNlLmgJKHJldmlzaW9uIDQ4
NzczKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRCYXNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNz
IEpTV29ya2VyQ29udGV4dEJhc2UgOiBwdWJsaWMgSlNET01HbG9iYWxPYmplY3QgewogICAgICAg
ICB0eXBlZGVmIEpTRE9NR2xvYmFsT2JqZWN0IEJhc2U7CiAgICAgcHVibGljOgotICAgICAgICBK
U1dvcmtlckNvbnRleHRCYXNlKFBhc3NSZWZQdHI8SlNDOjpTdHJ1Y3R1cmU+LCBQYXNzUmVmUHRy
PFdvcmtlckNvbnRleHQ+KTsKKyAgICAgICAgSlNXb3JrZXJDb250ZXh0QmFzZShOb3ROdWxsUGFz
c1JlZlB0cjxKU0M6OlN0cnVjdHVyZT4sIFBhc3NSZWZQdHI8V29ya2VyQ29udGV4dD4pOwogICAg
ICAgICB2aXJ0dWFsIH5KU1dvcmtlckNvbnRleHRCYXNlKCk7CiAKICAgICAgICAgdmlydHVhbCBj
b25zdCBKU0M6OkNsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJnNfaW5mbzsg
fQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShy
ZXZpc2lvbiA0ODc3MykKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
SlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTU0MCwxMyArNTQwLDEzIEBAIHN1YiBHZW5lcmF0ZUhl
YWRlcgogCiAgICAgIyBDb25zdHJ1Y3RvcgogICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiRE9N
V2luZG93IikgewotICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgICRjbGFzc05hbWUo
UGFzc1JlZlB0cjxKU0M6OlN0cnVjdHVyZT4sIFBhc3NSZWZQdHI8JGltcGxUeXBlPiwgSlNET01X
aW5kb3dTaGVsbCopO1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgJGNs
YXNzTmFtZShOb3ROdWxsUGFzc1JlZlB0cjxKU0M6OlN0cnVjdHVyZT4sIFBhc3NSZWZQdHI8JGlt
cGxUeXBlPiwgSlNET01XaW5kb3dTaGVsbCopO1xuIik7CiAgICAgfSBlbHNpZiAoJGRhdGFOb2Rl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSXNXb3JrZXJDb250ZXh0In0pIHsKLSAgICAgICAgcHVz
aChAaGVhZGVyQ29udGVudCwgIiAgICAkY2xhc3NOYW1lKFBhc3NSZWZQdHI8SlNDOjpTdHJ1Y3R1
cmU+LCBQYXNzUmVmUHRyPCRpbXBsVHlwZT4pO1xuIik7CisgICAgICAgIHB1c2goQGhlYWRlckNv
bnRlbnQsICIgICAgJGNsYXNzTmFtZShOb3ROdWxsUGFzc1JlZlB0cjxKU0M6OlN0cnVjdHVyZT4s
IFBhc3NSZWZQdHI8JGltcGxUeXBlPik7XG4iKTsKICAgICB9IGVsc2lmIChJc1NWR1R5cGVOZWVk
aW5nQ29udGV4dFBhcmFtZXRlcigkaW1wbENsYXNzTmFtZSkpIHsKLSAgICAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgIiAgICAkY2xhc3NOYW1lKFBhc3NSZWZQdHI8SlNDOjpTdHJ1Y3R1cmU+LCBK
U0RPTUdsb2JhbE9iamVjdCosIFBhc3NSZWZQdHI8JGltcGxUeXBlPiwgU1ZHRWxlbWVudCogY29u
dGV4dCk7XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAkY2xhc3NOYW1l
KE5vdE51bGxQYXNzUmVmUHRyPEpTQzo6U3RydWN0dXJlPiwgSlNET01HbG9iYWxPYmplY3QqLCBQ
YXNzUmVmUHRyPCRpbXBsVHlwZT4sIFNWR0VsZW1lbnQqIGNvbnRleHQpO1xuIik7CiAgICAgfSBl
bHNlIHsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAkY2xhc3NOYW1lKFBhc3NS
ZWZQdHI8SlNDOjpTdHJ1Y3R1cmU+LCBKU0RPTUdsb2JhbE9iamVjdCosIFBhc3NSZWZQdHI8JGlt
cGxUeXBlPik7XG4iKTsKKyAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICAkY2xhc3NO
YW1lKE5vdE51bGxQYXNzUmVmUHRyPEpTQzo6U3RydWN0dXJlPiwgSlNET01HbG9iYWxPYmplY3Qq
LCBQYXNzUmVmUHRyPCRpbXBsVHlwZT4pO1xuIik7CiAgICAgfQogCiAgICAgIyBEZXN0cnVjdG9y
CkBAIC04MDgsNyArODA4LDcgQEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgIyBDdXN0b20gZGVm
aW5lR2V0dGVyIGZ1bmN0aW9uCiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAgICB2aXJ0dWFs
IHZvaWQgZGVmaW5lR2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIEpTQzo6SlNPYmplY3QqIGdldHRlckZ1bmN0aW9uLCB1bnNpZ25lZCBh
dHRyaWJ1dGVzKTtcbiIpIGlmICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3Rv
bVByb3RvdHlwZURlZmluZUdldHRlciJ9OwogCi0gICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiAg
ICAke2NsYXNzTmFtZX1Qcm90b3R5cGUoUGFzc1JlZlB0cjxKU0M6OlN0cnVjdHVyZT4gc3RydWN0
dXJlKSA6IEpTQzo6SlNPYmplY3Qoc3RydWN0dXJlKSB7IH1cbiIpOworICAgIHB1c2goQGhlYWRl
ckNvbnRlbnQsICIgICAgJHtjbGFzc05hbWV9UHJvdG90eXBlKE5vdE51bGxQYXNzUmVmUHRyPEpT
Qzo6U3RydWN0dXJlPiBzdHJ1Y3R1cmUpIDogSlNDOjpKU09iamVjdChzdHJ1Y3R1cmUpIHsgfVxu
Iik7CiAKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAifTtcblxuIik7CiAKQEAgLTExMzcsMTUg
KzExMzcsMTUgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAjIENvbnN0cnVjdG9y
CiAgICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJET01XaW5kb3ciKSB7CiAgICAgICAgIEFkZElu
Y2x1ZGVzRm9yVHlwZSgiSlNET01XaW5kb3dTaGVsbCIpOwotICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiR7Y2xhc3NOYW1lfTo6JGNsYXNzTmFtZShQYXNzUmVmUHRyPFN0cnVjdHVyZT4gc3Ry
dWN0dXJlLCBQYXNzUmVmUHRyPCRpbXBsVHlwZT4gaW1wbCwgSlNET01XaW5kb3dTaGVsbCogc2hl
bGwpXG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIke2NsYXNzTmFtZX06OiRjbGFz
c05hbWUoTm90TnVsbFBhc3NSZWZQdHI8U3RydWN0dXJlPiBzdHJ1Y3R1cmUsIFBhc3NSZWZQdHI8
JGltcGxUeXBlPiBpbXBsLCBKU0RPTVdpbmRvd1NoZWxsKiBzaGVsbClcbiIpOwogICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICA6ICRwYXJlbnRDbGFzc05hbWUoc3RydWN0dXJlLCBpbXBs
LCBzaGVsbClcbiIpOwogICAgIH0gZWxzaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IklzV29ya2VyQ29udGV4dCJ9KSB7CiAgICAgICAgIEFkZEluY2x1ZGVzRm9yVHlwZSgkaW50
ZXJmYWNlTmFtZSk7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiJHtjbGFzc05hbWV9Ojok
Y2xhc3NOYW1lKFBhc3NSZWZQdHI8U3RydWN0dXJlPiBzdHJ1Y3R1cmUsIFBhc3NSZWZQdHI8JGlt
cGxUeXBlPiBpbXBsKVxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiJHtjbGFzc05h
bWV9OjokY2xhc3NOYW1lKE5vdE51bGxQYXNzUmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlLCBQ
YXNzUmVmUHRyPCRpbXBsVHlwZT4gaW1wbClcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICA6ICRwYXJlbnRDbGFzc05hbWUoc3RydWN0dXJlLCBpbXBsKVxuIik7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgbXkgJGNvbnRleHRBcmcgPSAkbmVlZHNTVkdDb250ZXh0ID8gIiwgU1ZH
RWxlbWVudCogY29udGV4dCIgOiAiIjsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIke2Ns
YXNzTmFtZX06OiRjbGFzc05hbWUoUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZSwgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjwkaW1wbFR5cGU+IGltcGwk
Y29udGV4dEFyZylcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiR7Y2xhc3NOYW1l
fTo6JGNsYXNzTmFtZShOb3ROdWxsUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZSwgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjwkaW1wbFR5cGU+IGltcGwk
Y29udGV4dEFyZylcbiIpOwogICAgICAgICBpZiAoJGhhc1BhcmVudCkgewogICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgOiAkcGFyZW50Q2xhc3NOYW1lKHN0cnVjdHVyZSwgZ2xv
YmFsT2JqZWN0LCBpbXBsIiAuICgkcGFyZW50TmVlZHNTVkdDb250ZXh0ID8gIiwgY29udGV4dCIg
OiAiIikgLiAiKVxuIik7CiAgICAgICAgIH0gZWxzZSB7CkluZGV4OiBXZWJDb3JlL2JyaWRnZS9y
dW50aW1lX29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2UvcnVudGltZV9v
YmplY3QuY3BwCShyZXZpc2lvbiA0ODc3MykKKysrIFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfb2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBSdW50aW1lT2JqZWN0SW1w
OjpSdW50aW1lT2JqZWN0SW1wKEV4ZWNTCiB7CiB9CiAKLVJ1bnRpbWVPYmplY3RJbXA6OlJ1bnRp
bWVPYmplY3RJbXAoRXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZSwg
UGFzc1JlZlB0cjxJbnN0YW5jZT4gaW5zdGFuY2UpCitSdW50aW1lT2JqZWN0SW1wOjpSdW50aW1l
T2JqZWN0SW1wKEV4ZWNTdGF0ZSosIE5vdE51bGxQYXNzUmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0
dXJlLCBQYXNzUmVmUHRyPEluc3RhbmNlPiBpbnN0YW5jZSkKICAgICA6IEpTT2JqZWN0KHN0cnVj
dHVyZSkKICAgICAsIG1faW5zdGFuY2UoaW5zdGFuY2UpCiB7CkluZGV4OiBXZWJDb3JlL2JyaWRn
ZS9ydW50aW1lX29iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVf
b2JqZWN0LmgJKHJldmlzaW9uIDQ4NzczKQorKysgV2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmpl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBAQCBwdWJsaWM6CiAgICAgfQogCiBw
cm90ZWN0ZWQ6Ci0gICAgUnVudGltZU9iamVjdEltcChFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPFN0
cnVjdHVyZT4sIFBhc3NSZWZQdHI8QmluZGluZ3M6Okluc3RhbmNlPik7CisgICAgUnVudGltZU9i
amVjdEltcChFeGVjU3RhdGUqLCBOb3ROdWxsUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+LCBQYXNzUmVm
UHRyPEJpbmRpbmdzOjpJbnN0YW5jZT4pOwogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgY29uc3Qg
Q2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmc19pbmZvOyB9Cg==
</data>
<flag name="review"
          id="21445"
          type_id="1"
          status="+"
          setter="darin"
    />
    <flag name="commit-queue"
          id="21446"
          type_id="3"
          status="-"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>