<?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>160603</bug_id>
          
          <creation_ts>2016-08-05 11:17:14 -0700</creation_ts>
          <short_desc>Delete out of date WASM code.</short_desc>
          <delta_ts>2016-08-05 11:55:20 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>159775</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Keith Miller">keith_miller</reporter>
          <assigned_to name="Keith Miller">keith_miller</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1217982</commentid>
    <comment_count>0</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-08-05 11:17:14 -0700</bug_when>
    <thetext>Delete out of date wasm code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1217984</commentid>
    <comment_count>1</comment_count>
      <attachid>285436</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-08-05 11:25:19 -0700</bug_when>
    <thetext>Created attachment 285436
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1217990</commentid>
    <comment_count>2</comment_count>
      <attachid>285438</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-08-05 11:33:07 -0700</bug_when>
    <thetext>Created attachment 285438
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218002</commentid>
    <comment_count>3</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-08-05 11:55:20 -0700</bug_when>
    <thetext>Committed r204180: &lt;http://trac.webkit.org/changeset/204180&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285436</attachid>
            <date>2016-08-05 11:25:19 -0700</date>
            <delta_ts>2016-08-05 11:33:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160603-20160805112352.patch</filename>
            <type>text/plain</type>
            <size>230723</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA0MTIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
ZGRiOTNkZGQ0YzdhMGJmNzczMjA3MTlhMDdmZDE0MmM4NmI3YjRiLi5kMjc1M2Y4YTY4NjMyMjk5
ODVjYzA3ODAzMWEyYWViZGY0YTdhZGJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyODUgQEAKKzIwMTYtMDgtMDUgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgRGVsZXRlIG91dCBvZiBkYXRlIFdBU00gY29kZS4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MDYwMworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggcmVtb3Zl
cyBhIGJ1bmNoIG9mIHRoZSB3YXNtIGZpbGVzIHRoYXQgd2UgYXJlIHVubGlrZXkgdG8gdXNlCisg
ICAgICAgIHdpdGggdGhlIG5ld2VyIHdhc20gc3BlYy4gSWYgd2UgZW5kIHVwIG5lZWRpbmcgYW55
IG9mIHRoZSBkZWxldGVkIGNvZGUKKyAgICAgICAgbGF0ZXIgd2UgY2FuIHJlc3RvcmUgaXQgYXQg
dGhhdCB0aW1lLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICoganNj
LmNwcDoKKyAgICAgICAgKEdsb2JhbE9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOiBEZWxldGVkLgor
ICAgICAgICAoZnVuY3Rpb25Mb2FkV2ViQXNzZW1ibHkpOiBEZWxldGVkLgorICAgICAgICAqIGxs
aW50L0xMSW50U2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OnNldFVwQ2FsbCk6
IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpT
Qzo6V2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpwcmVwYXJlRm9yRXhlY3V0aW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNH
bG9iYWxPYmplY3Q6OmluaXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVj
dDo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9i
amVjdC5oOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6d2FzbU1vZHVsZVN0cnVjdHVy
ZSk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9XQVNNQ29uc3RhbnRzLmg6IFJlbW92ZWQuCisg
ICAgICAgICogd2FzbS9XQVNNRnVuY3Rpb25CM0lSR2VuZXJhdG9yLmg6IFJlbW92ZWQuCisgICAg
ICAgIChKU0M6OldBU01GdW5jdGlvbkIzSVJHZW5lcmF0b3I6Ok1lbW9yeUFkZHJlc3M6Ok1lbW9y
eUFkZHJlc3MpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25CM0lSR2VuZXJh
dG9yOjpzdGFydEZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9u
QjNJUkdlbmVyYXRvcjo6ZW5kRnVuY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNN
RnVuY3Rpb25CM0lSR2VuZXJhdG9yOjpidWlsZFNldExvY2FsKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6V0FTTUZ1bmN0aW9uQjNJUkdlbmVyYXRvcjo6YnVpbGRTZXRHbG9iYWwpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25CM0lSR2VuZXJhdG9yOjpidWlsZFJldHVybik6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlvbkIzSVJHZW5lcmF0b3I6OmJ1aWxk
SW1tZWRpYXRlSTMyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uQjNJUkdl
bmVyYXRvcjo6YnVpbGRJbW1lZGlhdGVGMzIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNN
RnVuY3Rpb25CM0lSR2VuZXJhdG9yOjpidWlsZEltbWVkaWF0ZUY2NCk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OldBU01GdW5jdGlvbkIzSVJHZW5lcmF0b3I6OmJ1aWxkR2V0TG9jYWwpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25CM0lSR2VuZXJhdG9yOjpidWlsZEdldEds
b2JhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlvbkIzSVJHZW5lcmF0b3I6
OmJ1aWxkQ29udmVydFR5cGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25C
M0lSR2VuZXJhdG9yOjpidWlsZExvYWQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVu
Y3Rpb25CM0lSR2VuZXJhdG9yOjpidWlsZFN0b3JlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
V0FTTUZ1bmN0aW9uQjNJUkdlbmVyYXRvcjo6YnVpbGRVbmFyeUkzMik6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OldBU01GdW5jdGlvbkIzSVJHZW5lcmF0b3I6OmJ1aWxkVW5hcnlGMzIpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25CM0lSR2VuZXJhdG9yOjpidWlsZFVuYXJ5
RjY0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uQjNJUkdlbmVyYXRvcjo6
YnVpbGRCaW5hcnlJMzIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25CM0lS
R2VuZXJhdG9yOjpidWlsZEJpbmFyeUYzMik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01G
dW5jdGlvbkIzSVJHZW5lcmF0b3I6OmJ1aWxkQmluYXJ5RjY0KTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6V0FTTUZ1bmN0aW9uQjNJUkdlbmVyYXRvcjo6YnVpbGRSZWxhdGlvbmFsSTMyKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uQjNJUkdlbmVyYXRvcjo6YnVpbGRSZWxh
dGlvbmFsRjMyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uQjNJUkdlbmVy
YXRvcjo6YnVpbGRSZWxhdGlvbmFsRjY0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1
bmN0aW9uQjNJUkdlbmVyYXRvcjo6YnVpbGRNaW5Pck1heEkzMik6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OldBU01GdW5jdGlvbkIzSVJHZW5lcmF0b3I6OmJ1aWxkTWluT3JNYXhGNjQpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25CM0lSR2VuZXJhdG9yOjpidWlsZENhbGxJ
bnRlcm5hbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlvbkIzSVJHZW5lcmF0
b3I6OmJ1aWxkQ2FsbEluZGlyZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0
aW9uQjNJUkdlbmVyYXRvcjo6YnVpbGRDYWxsSW1wb3J0KTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6V0FTTUZ1bmN0aW9uQjNJUkdlbmVyYXRvcjo6YXBwZW5kRXhwcmVzc2lvbkxpc3QpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25CM0lSR2VuZXJhdG9yOjpkaXNjYXJkKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uQjNJUkdlbmVyYXRvcjo6bGlua1Rh
cmdldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlvbkIzSVJHZW5lcmF0b3I6
Omp1bXBUb1RhcmdldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlvbkIzSVJH
ZW5lcmF0b3I6Omp1bXBUb1RhcmdldElmKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1
bmN0aW9uQjNJUkdlbmVyYXRvcjo6c3RhcnRMb29wKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
V0FTTUZ1bmN0aW9uQjNJUkdlbmVyYXRvcjo6ZW5kTG9vcCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OldBU01GdW5jdGlvbkIzSVJHZW5lcmF0b3I6OnN0YXJ0U3dpdGNoKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uQjNJUkdlbmVyYXRvcjo6ZW5kU3dpdGNoKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uQjNJUkdlbmVyYXRvcjo6c3RhcnRMYWJlbCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlvbkIzSVJHZW5lcmF0b3I6OmVuZExh
YmVsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uQjNJUkdlbmVyYXRvcjo6
YnJlYWtUYXJnZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25CM0lSR2Vu
ZXJhdG9yOjpjb250aW51ZVRhcmdldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5j
dGlvbkIzSVJHZW5lcmF0b3I6OmJyZWFrTGFiZWxUYXJnZXQpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpXQVNNRnVuY3Rpb25CM0lSR2VuZXJhdG9yOjpjb250aW51ZUxhYmVsVGFyZ2V0KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uQjNJUkdlbmVyYXRvcjo6YnVpbGRTd2l0
Y2gpOiBEZWxldGVkLgorICAgICAgICAqIHdhc20vV0FTTUZ1bmN0aW9uQ29tcGlsZXIuaDogUmVt
b3ZlZC4KKyAgICAgICAgKEpTQzo6b3BlcmF0aW9uQ29udmVydEpTVmFsdWVUb0ludDMyKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6b3BlcmF0aW9uQ29udmVydEpTVmFsdWVUb0RvdWJsZSk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6Om9wZXJhdGlvbkRpdik6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6Om9wZXJhdGlvbk1vZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Om9wZXJhdGlvblVuc2ln
bmVkRGl2KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6b3BlcmF0aW9uVW5zaWduZWRNb2QpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpvcGVyYXRpb25Db252ZXJ0VW5zaWduZWRJbnQzMlRvRG91
YmxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6c2l6ZU9mTWVtb3J5VHlwZSk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OldBU01GdW5jdGlvbkNvbXBpbGVyOjpNZW1vcnlBZGRyZXNzOjpNZW1v
cnlBZGRyZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uQ29tcGlsZXI6
OldBU01GdW5jdGlvbkNvbXBpbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0
aW9uQ29tcGlsZXI6OnN0YXJ0RnVuY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNN
RnVuY3Rpb25Db21waWxlcjo6ZW5kRnVuY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpX
QVNNRnVuY3Rpb25Db21waWxlcjo6YnVpbGRTZXRMb2NhbCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OldBU01GdW5jdGlvbkNvbXBpbGVyOjpidWlsZFNldEdsb2JhbCk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OldBU01GdW5jdGlvbkNvbXBpbGVyOjpidWlsZFJldHVybik6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OldBU01GdW5jdGlvbkNvbXBpbGVyOjpidWlsZEltbWVkaWF0ZUkzMik6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlvbkNvbXBpbGVyOjpidWlsZEltbWVkaWF0
ZUYzMik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlvbkNvbXBpbGVyOjpidWls
ZEltbWVkaWF0ZUY2NCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlvbkNvbXBp
bGVyOjpidWlsZEdldExvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9u
Q29tcGlsZXI6OmJ1aWxkR2V0R2xvYmFsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1
bmN0aW9uQ29tcGlsZXI6OmJ1aWxkQ29udmVydFR5cGUpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpXQVNNRnVuY3Rpb25Db21waWxlcjo6YnVpbGRMb2FkKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6V0FTTUZ1bmN0aW9uQ29tcGlsZXI6OmJ1aWxkU3RvcmUpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpXQVNNRnVuY3Rpb25Db21waWxlcjo6YnVpbGRVbmFyeUkzMik6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OldBU01GdW5jdGlvbkNvbXBpbGVyOjpidWlsZFVuYXJ5RjMyKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uQ29tcGlsZXI6OmJ1aWxkVW5hcnlGNjQpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25Db21waWxlcjo6YnVpbGRCaW5hcnlJMzIp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25Db21waWxlcjo6YnVpbGRCaW5h
cnlGMzIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25Db21waWxlcjo6YnVp
bGRCaW5hcnlGNjQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25Db21waWxl
cjo6YnVpbGRSZWxhdGlvbmFsSTMyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0
aW9uQ29tcGlsZXI6OmJ1aWxkUmVsYXRpb25hbEYzMik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OldBU01GdW5jdGlvbkNvbXBpbGVyOjpidWlsZFJlbGF0aW9uYWxGNjQpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpXQVNNRnVuY3Rpb25Db21waWxlcjo6YnVpbGRNaW5Pck1heEkzMik6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlvbkNvbXBpbGVyOjpidWlsZE1pbk9yTWF4RjY0
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uQ29tcGlsZXI6OmJ1aWxkQ2Fs
bEludGVybmFsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uQ29tcGlsZXI6
OmJ1aWxkQ2FsbEluZGlyZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9u
Q29tcGlsZXI6OmJ1aWxkQ2FsbEltcG9ydCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01G
dW5jdGlvbkNvbXBpbGVyOjphcHBlbmRFeHByZXNzaW9uTGlzdCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OldBU01GdW5jdGlvbkNvbXBpbGVyOjpkaXNjYXJkKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6V0FTTUZ1bmN0aW9uQ29tcGlsZXI6OmxpbmtUYXJnZXQpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpXQVNNRnVuY3Rpb25Db21waWxlcjo6anVtcFRvVGFyZ2V0KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uQ29tcGlsZXI6Omp1bXBUb1RhcmdldElmKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uQ29tcGlsZXI6OnN0YXJ0TG9vcCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlvbkNvbXBpbGVyOjplbmRMb29wKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uQ29tcGlsZXI6OnN0YXJ0U3dpdGNoKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uQ29tcGlsZXI6OmVuZFN3aXRjaCk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlvbkNvbXBpbGVyOjpzdGFydExhYmVsKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uQ29tcGlsZXI6OmVuZExhYmVsKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uQ29tcGlsZXI6OmJyZWFrVGFyZ2V0
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uQ29tcGlsZXI6OmNvbnRpbnVl
VGFyZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uQ29tcGlsZXI6OmJy
ZWFrTGFiZWxUYXJnZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25Db21w
aWxlcjo6Y29udGludWVMYWJlbFRhcmdldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01G
dW5jdGlvbkNvbXBpbGVyOjpidWlsZFN3aXRjaCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldB
U01GdW5jdGlvbkNvbXBpbGVyOjpsb2NhbEFkZHJlc3MpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpXQVNNRnVuY3Rpb25Db21waWxlcjo6dGVtcG9yYXJ5QWRkcmVzcyk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OldBU01GdW5jdGlvbkNvbXBpbGVyOjphcHBlbmRDYWxsKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uQ29tcGlsZXI6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2spOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25Db21waWxlcjo6ZW1p
dE5ha2VkQ2FsbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlvbkNvbXBpbGVy
OjphcHBlbmRDYWxsU2V0UmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0
aW9uQ29tcGlsZXI6OmNhbGxPcGVyYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNN
RnVuY3Rpb25Db21waWxlcjo6Ym94QXJndW1lbnRzQW5kQWRqdXN0U3RhY2tQb2ludGVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uQ29tcGlsZXI6OmNhbGxBbmRVbmJveFJl
c3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlvbkNvbXBpbGVyOjpjb252
ZXJ0VmFsdWVUb0ludDMyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uQ29t
cGlsZXI6OmNvbnZlcnRWYWx1ZVRvRG91YmxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FT
TUZ1bmN0aW9uQ29tcGlsZXI6OmNvbnZlcnREb3VibGVUb1ZhbHVlKTogRGVsZXRlZC4KKyAgICAg
ICAgKiB3YXNtL1dBU01GdW5jdGlvblBhcnNlci5jcHA6IFJlbW92ZWQuCisgICAgICAgIChKU0M6
Om5hbWVPZlR5cGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25QYXJzZXI6
OmNoZWNrU3ludGF4KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uUGFyc2Vy
Ojpjb21waWxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uUGFyc2VyOjpw
YXJzZUZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uUGFyc2Vy
OjpwYXJzZUxvY2FsVmFyaWFibGVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0
aW9uUGFyc2VyOjpwYXJzZVN0YXRlbWVudCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01G
dW5jdGlvblBhcnNlcjo6cGFyc2VSZXR1cm5TdGF0ZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlQmxvY2tTdGF0ZW1lbnQpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlSWZTdGF0ZW1lbnQpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlSWZFbHNlU3RhdGVt
ZW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZVdo
aWxlU3RhdGVtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uUGFyc2Vy
OjpwYXJzZURvU3RhdGVtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9u
UGFyc2VyOjpwYXJzZUxhYmVsU3RhdGVtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FT
TUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUJyZWFrU3RhdGVtZW50KTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6V0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUJyZWFrTGFiZWxTdGF0ZW1lbnQpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlQ29udGludWVTdGF0
ZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNl
Q29udGludWVMYWJlbFN0YXRlbWVudCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5j
dGlvblBhcnNlcjo6cGFyc2VTd2l0Y2hTdGF0ZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlRXhwcmVzc2lvbik6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OldBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VFeHByZXNzaW9uSTMyKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUNvbnN0YW50UG9vbEluZGV4
RXhwcmVzc2lvbkkzMik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlvblBhcnNl
cjo6cGFyc2VJbW1lZGlhdGVFeHByZXNzaW9uSTMyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
V0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZVVuYXJ5RXhwcmVzc2lvbkkzMik6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OldBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VCaW5hcnlFeHByZXNzaW9uSTMy
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZVJlbGF0
aW9uYWxJMzJFeHByZXNzaW9uSTMyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0
aW9uUGFyc2VyOjpwYXJzZVJlbGF0aW9uYWxGMzJFeHByZXNzaW9uSTMyKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZVJlbGF0aW9uYWxGNjRFeHByZXNz
aW9uSTMyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJz
ZU1pbk9yTWF4RXhwcmVzc2lvbkkzMik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5j
dGlvblBhcnNlcjo6cGFyc2VFeHByZXNzaW9uRjMyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
V0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUNvbnN0YW50UG9vbEluZGV4RXhwcmVzc2lvbkYzMik6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VJbW1lZGlh
dGVFeHByZXNzaW9uRjMyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uUGFy
c2VyOjpwYXJzZVVuYXJ5RXhwcmVzc2lvbkYzMik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldB
U01GdW5jdGlvblBhcnNlcjo6cGFyc2VCaW5hcnlFeHByZXNzaW9uRjMyKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUV4cHJlc3Npb25GNjQpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlQ29uc3RhbnRQb29s
SW5kZXhFeHByZXNzaW9uRjY0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9u
UGFyc2VyOjpwYXJzZUltbWVkaWF0ZUV4cHJlc3Npb25GNjQpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlVW5hcnlFeHByZXNzaW9uRjY0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUJpbmFyeUV4cHJlc3Np
b25GNjQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNl
TWluT3JNYXhFeHByZXNzaW9uRjY0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0
aW9uUGFyc2VyOjpwYXJzZUV4cHJlc3Npb25Wb2lkKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
V0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUdldExvY2FsRXhwcmVzc2lvbik6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OldBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VHZXRHbG9iYWxFeHByZXNzaW9u
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZVNldExv
Y2FsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZVNl
dEdsb2JhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlvblBhcnNlcjo6cGFy
c2VNZW1vcnlBZGRyZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uUGFy
c2VyOjpwYXJzZUxvYWQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25QYXJz
ZXI6OnBhcnNlU3RvcmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25QYXJz
ZXI6OnBhcnNlQ2FsbEFyZ3VtZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5j
dGlvblBhcnNlcjo6cGFyc2VDYWxsSW50ZXJuYWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpX
QVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlQ2FsbEluZGlyZWN0KTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6V0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUNhbGxJbXBvcnQpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlQ29uZGl0aW9uYWwpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlQ29tbWEpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlQ29udmVydFR5cGUpOiBE
ZWxldGVkLgorICAgICAgICAqIHdhc20vV0FTTUZ1bmN0aW9uUGFyc2VyLmg6IFJlbW92ZWQuCisg
ICAgICAgIChKU0M6OldBU01GdW5jdGlvblBhcnNlcjo6V0FTTUZ1bmN0aW9uUGFyc2VyKTogRGVs
ZXRlZC4KKyAgICAgICAgKiB3YXNtL1dBU01GdW5jdGlvblN5bnRheENoZWNrZXIuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uU3ludGF4Q2hlY2tlcjo6TWVtb3J5QWRkcmVz
czo6TWVtb3J5QWRkcmVzcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlvblN5
bnRheENoZWNrZXI6OnN0YXJ0RnVuY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNN
RnVuY3Rpb25TeW50YXhDaGVja2VyOjplbmRGdW5jdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OldBU01GdW5jdGlvblN5bnRheENoZWNrZXI6OmJ1aWxkU2V0TG9jYWwpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25TeW50YXhDaGVja2VyOjpidWlsZFNldEdsb2JhbCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlvblN5bnRheENoZWNrZXI6OmJ1aWxk
UmV0dXJuKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uU3ludGF4Q2hlY2tl
cjo6YnVpbGRJbW1lZGlhdGVJMzIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rp
b25TeW50YXhDaGVja2VyOjpidWlsZEltbWVkaWF0ZUYzMik6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OldBU01GdW5jdGlvblN5bnRheENoZWNrZXI6OmJ1aWxkSW1tZWRpYXRlRjY0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uU3ludGF4Q2hlY2tlcjo6YnVpbGRHZXRMb2Nh
bCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlvblN5bnRheENoZWNrZXI6OmJ1
aWxkR2V0R2xvYmFsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uU3ludGF4
Q2hlY2tlcjo6YnVpbGRDb252ZXJ0VHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01G
dW5jdGlvblN5bnRheENoZWNrZXI6OmJ1aWxkTG9hZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OldBU01GdW5jdGlvblN5bnRheENoZWNrZXI6OmJ1aWxkU3RvcmUpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpXQVNNRnVuY3Rpb25TeW50YXhDaGVja2VyOjpidWlsZFVuYXJ5STMyKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uU3ludGF4Q2hlY2tlcjo6YnVpbGRVbmFyeUYz
Mik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlvblN5bnRheENoZWNrZXI6OmJ1
aWxkVW5hcnlGNjQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25TeW50YXhD
aGVja2VyOjpidWlsZEJpbmFyeUkzMik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5j
dGlvblN5bnRheENoZWNrZXI6OmJ1aWxkQmluYXJ5RjMyKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6V0FTTUZ1bmN0aW9uU3ludGF4Q2hlY2tlcjo6YnVpbGRCaW5hcnlGNjQpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25TeW50YXhDaGVja2VyOjpidWlsZFJlbGF0aW9uYWxJ
MzIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25TeW50YXhDaGVja2VyOjpi
dWlsZFJlbGF0aW9uYWxGMzIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25T
eW50YXhDaGVja2VyOjpidWlsZFJlbGF0aW9uYWxGNjQpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpXQVNNRnVuY3Rpb25TeW50YXhDaGVja2VyOjpidWlsZE1pbk9yTWF4STMyKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uU3ludGF4Q2hlY2tlcjo6YnVpbGRNaW5Pck1heEY2
NCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlvblN5bnRheENoZWNrZXI6OmJ1
aWxkQ2FsbEludGVybmFsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uU3lu
dGF4Q2hlY2tlcjo6YnVpbGRDYWxsSW1wb3J0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FT
TUZ1bmN0aW9uU3ludGF4Q2hlY2tlcjo6YnVpbGRDYWxsSW5kaXJlY3QpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpXQVNNRnVuY3Rpb25TeW50YXhDaGVja2VyOjphcHBlbmRFeHByZXNzaW9uTGlz
dCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlvblN5bnRheENoZWNrZXI6OmRp
c2NhcmQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25TeW50YXhDaGVja2Vy
OjpsaW5rVGFyZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uU3ludGF4
Q2hlY2tlcjo6anVtcFRvVGFyZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0
aW9uU3ludGF4Q2hlY2tlcjo6anVtcFRvVGFyZ2V0SWYpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpXQVNNRnVuY3Rpb25TeW50YXhDaGVja2VyOjpzdGFydExvb3ApOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpXQVNNRnVuY3Rpb25TeW50YXhDaGVja2VyOjplbmRMb29wKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uU3ludGF4Q2hlY2tlcjo6c3RhcnRTd2l0Y2gpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25TeW50YXhDaGVja2VyOjplbmRTd2l0Y2gp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25TeW50YXhDaGVja2VyOjpzdGFy
dExhYmVsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uU3ludGF4Q2hlY2tl
cjo6ZW5kTGFiZWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25TeW50YXhD
aGVja2VyOjpicmVha1RhcmdldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlv
blN5bnRheENoZWNrZXI6OmNvbnRpbnVlVGFyZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
V0FTTUZ1bmN0aW9uU3ludGF4Q2hlY2tlcjo6YnJlYWtMYWJlbFRhcmdldCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OldBU01GdW5jdGlvblN5bnRheENoZWNrZXI6OmNvbnRpbnVlTGFiZWxUYXJn
ZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25TeW50YXhDaGVja2VyOjpi
dWlsZFN3aXRjaCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlvblN5bnRheENo
ZWNrZXI6OnN0YWNrSGVpZ2h0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9u
U3ludGF4Q2hlY2tlcjo6dXBkYXRlVGVtcFN0YWNrSGVpZ2h0KTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6V0FTTUZ1bmN0aW9uU3ludGF4Q2hlY2tlcjo6dXBkYXRlVGVtcFN0YWNrSGVpZ2h0Rm9y
Q2FsbCk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKEpTQzo6V0FTTU1vZHVsZVBhcnNlcjo6V0FTTU1vZHVsZVBhcnNlcik6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01Nb2R1bGVQYXJzZXI6OnBhcnNlKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6V0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VNb2R1bGUpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZUNvbnN0YW50UG9vbFNlY3Rp
b24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZVNpZ25h
dHVyZVNlY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNTW9kdWxlUGFyc2VyOjpw
YXJzZUZ1bmN0aW9uSW1wb3J0U2VjdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01N
b2R1bGVQYXJzZXI6OnBhcnNlR2xvYmFsU2VjdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OldBU01Nb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvblNlY3Rpb24pOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uUG9pbnRl
clRhYmxlU2VjdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01Nb2R1bGVQYXJzZXI6
OnBhcnNlRnVuY3Rpb25EZWZpbml0aW9uU2VjdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OldBU01Nb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25EZWZpbml0aW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6V0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VFeHBvcnRTZWN0aW9uKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6V0FTTU1vZHVsZVBhcnNlcjo6Z2V0SW1wb3J0ZWRWYWx1ZSk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OnBhcnNlV2ViQXNzZW1ibHkpOiBEZWxldGVkLgorICAgICAg
ICAqIHdhc20vV0FTTU1vZHVsZVBhcnNlci5oOiBSZW1vdmVkLgorICAgICAgICAqIHdhc20vV0FT
TVJlYWRlci5jcHA6IFJlbW92ZWQuCisgICAgICAgIChKU0M6OldBU01SZWFkZXI6OnJlYWRVSW50
MzIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNUmVhZGVyOjpyZWFkRmxvYXQpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpXQVNNUmVhZGVyOjpyZWFkRG91YmxlKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6V0FTTVJlYWRlcjo6cmVhZENvbXBhY3RJbnQzMik6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OldBU01SZWFkZXI6OnJlYWRDb21wYWN0VUludDMyKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6V0FTTVJlYWRlcjo6cmVhZFN0cmluZyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OldBU01SZWFkZXI6OnJlYWRUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTVJlYWRl
cjo6cmVhZEV4cHJlc3Npb25UeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTVJlYWRl
cjo6cmVhZEV4cG9ydEZvcm1hdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01SZWFkZXI6
OnJlYWRCeXRlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTVJlYWRlcjo6cmVhZE9wU3Rh
dGVtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTVJlYWRlcjo6cmVhZE9wRXhwcmVz
c2lvbkkzMik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01SZWFkZXI6OnJlYWRPcEV4cHJl
c3Npb25GMzIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNUmVhZGVyOjpyZWFkT3BFeHBy
ZXNzaW9uRjY0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTVJlYWRlcjo6cmVhZE9wRXhw
cmVzc2lvblZvaWQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNUmVhZGVyOjpyZWFkVmFy
aWFibGVUeXBlcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01SZWFkZXI6OnJlYWRPcCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01SZWFkZXI6OnJlYWRTd2l0Y2hDYXNlKTogRGVs
ZXRlZC4KKyAgICAgICAgKiB3YXNtL1dBU01SZWFkZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKEpT
Qzo6V0FTTVJlYWRlcjo6V0FTTVJlYWRlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01S
ZWFkZXI6Om9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01SZWFkZXI6OnNldE9m
ZnNldCk6IERlbGV0ZWQuCisKIDIwMTYtMDgtMDQgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRl
YUBnbWFpbC5jb20+CiAKICAgICAgICAgW0VTN10gVXBkYXRlIGZlYXR1cmVzLmpzb24gZm9yIGV4
cG9uZW50aWF0aW9uIGV4cHJlc3Npb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9n
IGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggMTk4ZWNiZTBmMGNiNjliMjFkMjQzZDk2MzRi
OGMyOTU5NGM1NWEwYi4uYWFhZjZlNjhkZDhjMGYzN2UxZGQwOTg0ODU1NDJkYTM3N2ZlMjcyOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxNCBAQAorMjAxNi0wOC0wNSAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWls
bGVyQGFwcGxlLmNvbT4KKworICAgICAgICBEZWxldGUgb3V0IG9mIGRhdGUgV0FTTSBjb2RlLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNjAzCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIEZlYXR1
cmUgZGVmaW5lIGZvciBXZWJBc3NlbWJseSBvbiBtYWMuCisKKyAgICAgICAgKiB3dGYvRmVhdHVy
ZURlZmluZXMuaDoKKwogMjAxNi0wOC0wMyAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJr
aXQub3JnPgogCiAgICAgICAgIExhY2tpbmcgc3VwcG9ydCBvbiBhIGFybS10cmFkaXRpb25hbCBk
aXNhc3NlbWJsZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGVmMGIxYmI1ODdk
OWM0MTNlNDY3NmI5MGIwNGM0ZjhlM2E0NGE4YTQuLmE1MTBmNWMyMmZmZDIwYzFhZGNjMDMwMTIw
NWIwNjgzYTA0MmFiNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMzA1LDE2
ICsxMzA1LDYgQEAKIAkJNzlFRTBDMDAxQjRBRkI4NTAwMDM4NUM5IC8qIFZhcmlhYmxlRW52aXJv
bm1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5
RUUwQkZFMUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlGOEZDMUUxQjlGRUQw
RjAwQ0E2NkFCIC8qIERGR01heGltYWxGbHVzaEluc2VydGlvblBoYXNlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5RjhGQzFDMUI5RkVEMEYwMENB
NjZBQiAvKiBERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZS5jcHAgKi87IH07CiAJCTc5RjhG
QzFGMUI5RkVEMEYwMENBNjZBQiAvKiBERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlGOEZDMUQxQjlG
RUQwRjAwQ0E2NkFCIC8qIERGR01heGltYWxGbHVzaEluc2VydGlvblBoYXNlLmggKi87IH07Ci0J
CTdCMDI0NzU1MUI4NjgyREQwMDU0MjQ0MCAvKiBXQVNNQ29uc3RhbnRzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QjAyNDc1MjFCODY4MkQ1MDA1NDI0
NDAgLyogV0FTTUNvbnN0YW50cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07Ci0JCTdCMDI0NzU2MUI4NjgyRTEwMDU0MjQ0MCAvKiBXQVNNRnVuY3Rpb25Q
YXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0IwMjQ3NTMxQjg2ODJENTAwNTQyNDQwIC8qIFdBU01GdW5jdGlvblBhcnNlci5jcHAgKi87IH07
Ci0JCTdCMDI0NzU3MUI4NjgyRTQwMDU0MjQ0MCAvKiBXQVNNRnVuY3Rpb25QYXJzZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCMDI0NzU0MUI4Njgy
RDUwMDU0MjQ0MCAvKiBXQVNNRnVuY3Rpb25QYXJzZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk3QjAyNDc1OTFCODY4RUI3MDA1NDI0NDAgLyog
V0FTTUZ1bmN0aW9uU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gN0IwMjQ3NTgxQjg2OEVBRTAwNTQyNDQwIC8qIFdBU01GdW5jdGlv
blN5bnRheENoZWNrZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwotCQk3QjJFMDEwRTFCOTdBQTY5MDBFRjVENUMgLyogV0FTTUZ1bmN0aW9uQ29tcGls
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCMkUw
MTBEMUI5N0FBNTgwMEVGNUQ1QyAvKiBXQVNNRnVuY3Rpb25Db21waWxlci5oICovOyB9OwotCQk3
QjM5Rjc2RDFCNjJERTJFMDAzNjBGQjQgLyogV0FTTU1vZHVsZVBhcnNlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QjM5Rjc2OTFCNjJERTIyMDAz
NjBGQjQgLyogV0FTTU1vZHVsZVBhcnNlci5jcHAgKi87IH07Ci0JCTdCMzlGNzZFMUI2MkRFMzIw
MDM2MEZCNCAvKiBXQVNNTW9kdWxlUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3QjM5Rjc2QTFCNjJERTIyMDAzNjBGQjQgLyogV0FTTU1vZHVs
ZVBhcnNlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
Ci0JCTdCMzlGNzcwMUI2MkRFMzIwMDM2MEZCNCAvKiBXQVNNUmVhZGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QjM5Rjc2QzFCNjJERTIyMDAzNjBG
QjQgLyogV0FTTVJlYWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07Ci0JCTdCMzlGNzcyMUI2MzU3NEQwMDM2MEZCNCAvKiBXQVNNUmVhZGVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCMzlGNzcxMUI2
MzU3NEIwMDM2MEZCNCAvKiBXQVNNUmVhZGVyLmNwcCAqLzsgfTsKLQkJN0I4MzI5QkYxQkIyMUZF
MzAwNjQ5QTZFIC8qIFdBU01GdW5jdGlvbkIzSVJHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCODMyOUJFMUJCMjFGRDEwMDY0OUE2RSAv
KiBXQVNNRnVuY3Rpb25CM0lSR2VuZXJhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0I5OEQxMzYxQjYwQ0Q1RjAwMjNCMUE0IC8qIEpTV0FT
TU1vZHVsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3Qjk4RDEzNDFCNjBDRDVBMDAyM0IxQTQgLyogSlNXQVNNTW9kdWxlLmNwcCAqLzsgfTsKIAkJ
N0I5OEQxMzcxQjYwQ0Q2MjAwMjNCMUE0IC8qIEpTV0FTTU1vZHVsZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0I5OEQxMzUxQjYwQ0Q1QTAwMjNCMUE0
IC8qIEpTV0FTTU1vZHVsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTdCQzU0N0QzMUI2OTU5QTEwMDk1OUI1OCAvKiBXQVNNRm9ybWF0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QkM1NDdEMjFCNjk1
OTlCMDA5NTlCNTggLyogV0FTTUZvcm1hdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0xNzU4LDYgKzE3NDgsNyBAQAogCQlBNzkwREQ2RjE4MkY0
OTk3MDA1ODg4MDcgLyogSlNTZXRJdGVyYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzkwREQ2OTE4MkY0OTk3MDA1ODg4MDcgLyogSlNTZXRJ
dGVyYXRvci5jcHAgKi87IH07CiAJCUE3OTBERDcwMTgyRjQ5OTcwMDU4ODgwNyAvKiBKU1NldEl0
ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
NzkwREQ2QTE4MkY0OTk3MDA1ODg4MDcgLyogSlNTZXRJdGVyYXRvci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3OTg2RDU3MTdBMEJCMUUwMEE5
NUREMCAvKiBERkdFZGdlVXNlc1N0cnVjdHVyZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTc5ODZENTYxN0EwQkIxRTAwQTk1REQwIC8qIERGR0VkZ2VV
c2VzU3RydWN0dXJlLmggKi87IH07CisJCUE3OUQzRUQ5QzUwNjRERDBBODQ2NkEzQSAvKiBNb2R1
bGVTY29wZURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDAwMEJFQUYwREY2MDQ0ODFBRjZBQjY4QyAvKiBNb2R1bGVTY29wZURhdGEuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBN0E0QUUwODE3OTcz
QjI2MDA1NjEyQjEgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBNEFFMDcxNzk3M0IyNjAwNTYxMkIx
IC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmNwcCAqLzsgfTsKIAkJQTdBOEFGMzQxN0FEQjVG
MzAwNUFCMTc0IC8qIEFycmF5QnVmZmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE3QThBRjI1MTdBREI1RjIwMDVBQjE3NCAvKiBBcnJheUJ1ZmZl
ci5jcHAgKi87IH07CiAJCUE3QThBRjM1MTdBREI1RjMwMDVBQjE3NCAvKiBBcnJheUJ1ZmZlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBOEFGMjYx
N0FEQjVGMzAwNUFCMTc0IC8qIEFycmF5QnVmZmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIxMzAsNyArMjEyMSw2IEBACiAJCUZFRDk0RjJF
MTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUQ5NEYyQjE3MUUzRTIzMDBCRTc3QTQgLyogV2F0Y2hk
b2cuY3BwICovOyB9OwogCQlGRUQ5NEYyRjE3MUUzRTIzMDBCRTc3QTQgLyogV2F0Y2hkb2cuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFRDk0RjJDMTcx
RTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUZFRjA0MDUxMUFBRTY2MkQwMEJEMjhCMCAvKiBDb21wYXJl
QW5kU3dhcFRlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRkVGMDQwNTAxQUFFNjYyRDAwQkQyOEIwIC8qIENvbXBhcmVBbmRTd2FwVGVzdC5jcHAg
Ki87IH07Ci0JCUE3OUQzRUQ5QzUwNjRERDBBODQ2NkEzQSAvKiBNb2R1bGVTY29wZURhdGEuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDAwMEJFQUYwREY2
MDQ0ODFBRjZBQjY4QyAvKiBNb2R1bGVTY29wZURhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogLyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICov
CiAKIC8qIEJlZ2luIFBCWENvbnRhaW5lckl0ZW1Qcm94eSBzZWN0aW9uICovCkBAIC0yMjc1LDYg
KzIyNjUsNyBAQAogLyogRW5kIFBCWENvcHlGaWxlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwogCiAv
KiBCZWdpbiBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KKwkJMDAwQkVBRjBERjYwNDQ4MUFG
NkFCNjhDIC8qIE1vZHVsZVNjb3BlRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBNb2R1bGVTY29wZURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYw
MTIzMzAxOTQ0RUExQjAwODQzQTBDIC8qIERGR1ZhbHVlU3RyZW5ndGguY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHVmFsdWVTdHJlbmd0aC5jcHA7IHBhdGggPSBk
ZmcvREZHVmFsdWVTdHJlbmd0aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
MDEyMzMxMTk0NEVBMUIwMDg0M0EwQyAvKiBERkdWYWx1ZVN0cmVuZ3RoLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1ZhbHVlU3RyZW5ndGguaDsgcGF0aCA9IGRmZy9ERkdW
YWx1ZVN0cmVuZ3RoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMDMzMkJGMThB
REZBRTEwMDVGOTc5QSAvKiBFeGl0aW5nSklUVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBFeGl0aW5nSklUVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0zNTEzLDE2ICszNTA0LDYgQEAKIAkJNzlFRTBCRkUxQjRBRkI4NTAwMDM4NUM5
IC8qIFZhcmlhYmxlRW52aXJvbm1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVmFyaWFibGVFbnZpcm9ubWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
OUY4RkMxQzFCOUZFRDBGMDBDQTY2QUIgLyogREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTWF4aW1hbEZsdXNo
SW5zZXJ0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR01heGltYWxGbHVzaEluc2VydGlvblBo
YXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlGOEZDMUQxQjlGRUQwRjAw
Q0E2NkFCIC8qIERGR01heGltYWxGbHVzaEluc2VydGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR01heGltYWxGbHVzaEluc2VydGlvblBoYXNlLmg7IHBhdGgg
PSBkZmcvREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJN0IwMjQ3NTIxQjg2ODJENTAwNTQyNDQwIC8qIFdBU01Db25zdGFudHMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FTTUNvbnN0YW50cy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk3QjAyNDc1MzFCODY4MkQ1MDA1NDI0NDAgLyogV0FTTUZ1
bmN0aW9uUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdB
U01GdW5jdGlvblBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTdCMDI0
NzU0MUI4NjgyRDUwMDU0MjQ0MCAvKiBXQVNNRnVuY3Rpb25QYXJzZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV0FTTUZ1bmN0aW9uUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTdCMDI0NzU4MUI4NjhFQUUwMDU0MjQ0MCAvKiBXQVNNRnVuY3Rpb25T
eW50YXhDaGVja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdBU01GdW5j
dGlvblN5bnRheENoZWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0IyRTAx
MEQxQjk3QUE1ODAwRUY1RDVDIC8qIFdBU01GdW5jdGlvbkNvbXBpbGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdBU01GdW5jdGlvbkNvbXBpbGVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTdCMzlGNzY5MUI2MkRFMjIwMDM2MEZCNCAvKiBXQVNNTW9kdWxl
UGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdBU01Nb2R1
bGVQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3QjM5Rjc2QTFCNjJE
RTIyMDAzNjBGQjQgLyogV0FTTU1vZHVsZVBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXQVNNTW9kdWxlUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTdCMzlGNzZDMUI2MkRFMjIwMDM2MEZCNCAvKiBXQVNNUmVhZGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdBU01SZWFkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJN0IzOUY3NzExQjYzNTc0QjAwMzYwRkI0IC8qIFdBU01SZWFkZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0FTTVJlYWRlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTdCODMyOUJFMUJCMjFGRDEwMDY0OUE2RSAvKiBXQVNNRnVu
Y3Rpb25CM0lSR2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdB
U01GdW5jdGlvbkIzSVJHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
N0I5OEQxMzQxQjYwQ0Q1QTAwMjNCMUE0IC8qIEpTV0FTTU1vZHVsZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dBU01Nb2R1bGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3Qjk4RDEzNTFCNjBDRDVBMDAyM0IxQTQgLyogSlNXQVNNTW9kdWxl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV0FTTU1vZHVsZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QkM1NDdEMjFCNjk1OTlCMDA5NTlCNTggLyogV0FT
TUZvcm1hdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXQVNNRm9ybWF0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NDE4LDcgKzQzOTksNiBAQAogCQlGRURB
NTBENTFCOTdGNEQ5MDA5QTNCNEYgLyogUGluZ1BvbmdTdGFja092ZXJmbG93VGVzdC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQaW5nUG9uZ1N0YWNrT3ZlcmZsb3dUZXN0Lmg7
IHBhdGggPSBBUEkvdGVzdHMvUGluZ1BvbmdTdGFja092ZXJmbG93VGVzdC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGRUYwNDA1MDFBQUU2NjJEMDBCRDI4QjAgLyogQ29tcGFyZUFu
ZFN3YXBUZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENvbXBh
cmVBbmRTd2FwVGVzdC5jcHA7IHBhdGggPSBBUEkvdGVzdHMvQ29tcGFyZUFuZFN3YXBUZXN0LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVGMDQwNTIxQUFFQzRFRDAwQkQyOEIw
IC8qIENvbXBhcmVBbmRTd2FwVGVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBDb21wYXJlQW5kU3dhcFRlc3QuaDsgcGF0aCA9IEFQSS90ZXN0cy9Db21wYXJlQW5kU3dhcFRl
c3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDAwQkVBRjBERjYwNDQ4MUFGNkFC
NjhDIC8qIE1vZHVsZVNjb3BlRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBNb2R1bGVTY29wZURhdGEuaDsgcGF0aCA9IE1vZHVsZVNjb3BlRGF0YS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogLyogRW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwogCiAv
KiBCZWdpbiBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZSBzZWN0aW9uICovCkBAIC01NTIxLDE3ICs1
NTAxLDcgQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCTdCOThEMTM0MUI2MENENUEwMDIzQjFBNCAv
KiBKU1dBU01Nb2R1bGUuY3BwICovLAogCQkJCTdCOThEMTM1MUI2MENENUEwMDIzQjFBNCAvKiBK
U1dBU01Nb2R1bGUuaCAqLywKLQkJCQk3QjAyNDc1MjFCODY4MkQ1MDA1NDI0NDAgLyogV0FTTUNv
bnN0YW50cy5oICovLAogCQkJCTdCQzU0N0QyMUI2OTU5OUIwMDk1OUI1OCAvKiBXQVNNRm9ybWF0
LmggKi8sCi0JCQkJN0IyRTAxMEQxQjk3QUE1ODAwRUY1RDVDIC8qIFdBU01GdW5jdGlvbkNvbXBp
bGVyLmggKi8sCi0JCQkJN0I4MzI5QkUxQkIyMUZEMTAwNjQ5QTZFIC8qIFdBU01GdW5jdGlvbkIz
SVJHZW5lcmF0b3IuaCAqLywKLQkJCQk3QjAyNDc1MzFCODY4MkQ1MDA1NDI0NDAgLyogV0FTTUZ1
bmN0aW9uUGFyc2VyLmNwcCAqLywKLQkJCQk3QjAyNDc1NDFCODY4MkQ1MDA1NDI0NDAgLyogV0FT
TUZ1bmN0aW9uUGFyc2VyLmggKi8sCi0JCQkJN0IwMjQ3NTgxQjg2OEVBRTAwNTQyNDQwIC8qIFdB
U01GdW5jdGlvblN5bnRheENoZWNrZXIuaCAqLywKLQkJCQk3QjM5Rjc2OTFCNjJERTIyMDAzNjBG
QjQgLyogV0FTTU1vZHVsZVBhcnNlci5jcHAgKi8sCi0JCQkJN0IzOUY3NkExQjYyREUyMjAwMzYw
RkI0IC8qIFdBU01Nb2R1bGVQYXJzZXIuaCAqLywKLQkJCQk3QjM5Rjc3MTFCNjM1NzRCMDAzNjBG
QjQgLyogV0FTTVJlYWRlci5jcHAgKi8sCi0JCQkJN0IzOUY3NkMxQjYyREUyMjAwMzYwRkI0IC8q
IFdBU01SZWFkZXIuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gd2FzbTsKIAkJCXNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7CkBAIC04MTkwLDE2ICs4MTYwLDkgQEAKIAkJCQlCQzE4QzQyMDBFMTZGNUNE
MDBCMzQ0NjAgLyogVk0uaCBpbiBIZWFkZXJzICovLAogCQkJCTY1OEQzQTU2MTk2MzgyNjgwMDND
NDVENiAvKiBWTUVudHJ5UmVjb3JkLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTU5MzJBODE4M0M1
QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmggaW4gSGVhZGVycyAqLywKLQkJCQk3QjAyNDc1
NTFCODY4MkREMDA1NDI0NDAgLyogV0FTTUNvbnN0YW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
N0JDNTQ3RDMxQjY5NTlBMTAwOTU5QjU4IC8qIFdBU01Gb3JtYXQuaCBpbiBIZWFkZXJzICovLAot
CQkJCTdCMkUwMTBFMUI5N0FBNjkwMEVGNUQ1QyAvKiBXQVNNRnVuY3Rpb25Db21waWxlci5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJN0I4MzI5QkYxQkIyMUZFMzAwNjQ5QTZFIC8qIFdBU01GdW5jdGlv
bkIzSVJHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAotCQkJCTdCMDI0NzU3MUI4NjgyRTQwMDU0
MjQ0MCAvKiBXQVNNRnVuY3Rpb25QYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNkI4QURE
MUM0RUZBQzMwMDk2OTA1MiAvKiBCM1NTQUNhbGN1bGF0b3IuaCBpbiBIZWFkZXJzICovLAotCQkJ
CTdCMDI0NzU5MUI4NjhFQjcwMDU0MjQ0MCAvKiBXQVNNRnVuY3Rpb25TeW50YXhDaGVja2VyLmgg
aW4gSGVhZGVycyAqLywKLQkJCQk3QjM5Rjc2RTFCNjJERTMyMDAzNjBGQjQgLyogV0FTTU1vZHVs
ZVBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkJEOUExQzVGRjNGNTAwMjNFRjIzIC8q
IEIzVmFyaWFibGVWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJN0IzOUY3NzAxQjYyREUzMjAw
MzYwRkI0IC8qIFdBU01SZWFkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFRDk0RjJGMTcxRTNF
MjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MTlEMjYxNTg1
M0NFMzAwNEE0RTdEIC8qIFdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MkUzMTND
MTM0RkYwQTYwMEFGQURCNSAvKiBXZWFrLmggaW4gSGVhZGVycyAqLywKQEAgLTk0OTYsMTAgKzk0
NTksNyBAQAogCQkJCTBGMjBDMjU5MUE4MDEzQUIwMERBMzIyOSAvKiBWaXJ0dWFsUmVnaXN0ZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTE4RTNBNTkwREY5Mjc4QzAwRDkwQjM0IC8qIFZNLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUZFNTkzMkE3MTgzQzVBMjYwMEExRUNDQyAvKiBWTUVudHJ5
U2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJN0IwMjQ3NTYxQjg2ODJFMTAwNTQyNDQwIC8q
IFdBU01GdW5jdGlvblBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRTE4N0EwMTFCRkJF
NTVFMDAzOEJCQ0EgLyogSklUTXVsR2VuZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTdC
MzlGNzZEMUI2MkRFMkUwMDM2MEZCNCAvKiBXQVNNTW9kdWxlUGFyc2VyLmNwcCBpbiBTb3VyY2Vz
ICovLAotCQkJCTdCMzlGNzcyMUI2MzU3NEQwMDM2MEZCNCAvKiBXQVNNUmVhZGVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTI2NzE4QkE0MUJFOTlGNzgwMDUyMDE3QiAvKiBBaXJJdGVyYXRlZFJl
Z2lzdGVyQ29hbGVzY2luZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRUQ5NEYyRTE3MUUzRTIz
MDBCRTc3QTQgLyogV2F0Y2hkb2cuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MTlEMjUxNTg1
M0NFMDAwNEE0RTdEIC8qIFdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAppbmRleCA0MmY2ZTQ3YTk0YWIxODQy
OTA1MzE4NDZkYjZkNjczZTFkYzcwMDdlLi43YWQxNTIyYTVkNTlmZWVjNzUzZGQ2MWQ4Yzg0ZGI5
MzQxNDA5MTg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5j
cHAKQEAgLTg4MCw3ICs4ODAsNiBAQCBTbG93UGF0aFJldHVyblR5cGUgSklUX09QRVJBVElPTiBv
cGVyYXRpb25MaW5rQ2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIENhbGxMaQogI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKICAgICB9IGVsc2UgaWYgKGV4ZWN1dGFibGUtPmlzV2ViQXNzZW1ibHlF
eGVjdXRhYmxlKCkpIHsKICAgICAgICAgV2ViQXNzZW1ibHlFeGVjdXRhYmxlKiB3ZWJBc3NlbWJs
eUV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxXZWJBc3NlbWJseUV4ZWN1dGFibGUqPihleGVjdXRh
YmxlKTsKLSAgICAgICAgd2ViQXNzZW1ibHlFeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9u
KGV4ZWNDYWxsZWUpOwogICAgICAgICBjb2RlQmxvY2sgPSB3ZWJBc3NlbWJseUV4ZWN1dGFibGUt
PmNvZGVCbG9ja0ZvckNhbGwoKTsKICAgICAgICAgQVNTRVJUKGNvZGVCbG9jayk7CiAgICAgICAg
IEFyaXR5Q2hlY2tNb2RlIGFyaXR5OwpAQCAtOTY5LDkgKzk2OCw2IEBAIGlubGluZSBTbG93UGF0
aFJldHVyblR5cGUgdmlydHVhbEZvcldpdGhGdW5jdGlvbigKICAgICAgICAgICAgICAgICAgICAg
dm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5j
b2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIFdlYkFzc2VtYmx5RXhlY3V0YWJsZSogd2ViQXNzZW1ibHlFeGVjdXRhYmxlID0gc3RhdGlj
X2Nhc3Q8V2ViQXNzZW1ibHlFeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7Ci0gICAgICAgICAgICB3
ZWJBc3NlbWJseUV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb24oZXhlY0NhbGxlZSk7CiAj
ZW5kaWYKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qc2MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKaW5kZXggNTA4ZmE2ZWI2
Y2IzOWU2MmJkMGFhMzY5YWFjMTYzZWI4NGJiNzM5Mi4uZWNkMmQyNTRmMDlhZTA2Yjk0NGMzNjhj
MTVmODdhNTU5Y2VkMTk4OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKQEAgLTYxLDcgKzYxLDYgQEAK
ICNpbmNsdWRlICJTdXBlclNhbXBsZXIuaCIKICNpbmNsdWRlICJUZXN0UnVubmVyVXRpbHMuaCIK
ICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKLSNpbmNsdWRlICJXQVNNTW9kdWxlUGFyc2Vy
LmgiCiAjaW5jbHVkZSA8bG9jYWxlLmg+CiAjaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgPHN0
ZGlvLmg+CkBAIC02MjQsOSArNjIzLDYgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25CYXNpY0Jsb2NrRXhlY3V0aW9uQ291bnQoRXhlY1N0YXRlKikKIHN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRW5hYmxlRXhjZXB0aW9uRnV6
eihFeGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0
aW9uRHJhaW5NaWNyb3Rhc2tzKEV4ZWNTdGF0ZSopOwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25JczMyQml0UGxhdGZvcm0oRXhlY1N0YXRlKik7Ci0jaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
Y3Rpb25Mb2FkV2ViQXNzZW1ibHkoRXhlY1N0YXRlKik7Ci0jZW5kaWYKIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTG9hZE1vZHVsZShFeGVjU3RhdGUqKTsKIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ2hlY2tNb2R1bGVTeW50
YXgoRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5j
dGlvblBsYXRmb3JtU3VwcG9ydHNTYW1wbGluZ1Byb2ZpbGVyKEV4ZWNTdGF0ZSopOwpAQCAtODUz
LDkgKzg0OSw2IEBAIHByb3RlY3RlZDoKIAogICAgICAgICBhZGRGdW5jdGlvbih2bSwgImlzMzJC
aXRQbGF0Zm9ybSIsIGZ1bmN0aW9uSXMzMkJpdFBsYXRmb3JtLCAwKTsKIAotI2lmIEVOQUJMRShX
RUJBU1NFTUJMWSkKLSAgICAgICAgYWRkRnVuY3Rpb24odm0sICJsb2FkV2ViQXNzZW1ibHkiLCBm
dW5jdGlvbkxvYWRXZWJBc3NlbWJseSwgMyk7Ci0jZW5kaWYKICAgICAgICAgYWRkRnVuY3Rpb24o
dm0sICJsb2FkTW9kdWxlIiwgZnVuY3Rpb25Mb2FkTW9kdWxlLCAxKTsKICAgICAgICAgYWRkRnVu
Y3Rpb24odm0sICJjaGVja01vZHVsZVN5bnRheCIsIGZ1bmN0aW9uQ2hlY2tNb2R1bGVTeW50YXgs
IDEpOwogCkBAIC0xNzgxLDI4ICsxNzc0LDYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvbklzMzJCaXRQbGF0Zm9ybShFeGVjU3RhdGUqKQogI2VuZGlmCiB9CiAKLSNpZiBF
TkFCTEUoV0VCQVNTRU1CTFkpCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
TG9hZFdlYkFzc2VtYmx5KEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBTdHJpbmcgZmlsZU5hbWUg
PSBleGVjLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7Ci0gICAgVmVjdG9yPGNoYXI+IGJ1ZmZlcjsKLSAgICBpZiAoIWZpbGxCdWZmZXJXaXRoQ29u
dGVudHNPZkZpbGUoZmlsZU5hbWUsIGJ1ZmZlcikpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVFcnJvcihleGVjLCBB
U0NJSUxpdGVyYWwoIkNvdWxkIG5vdCBvcGVuIGZpbGUuIikpKSk7Ci0gICAgUmVmUHRyPFdlYkFz
c2VtYmx5U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyID0gV2ViQXNzZW1ibHlTb3VyY2VQ
cm92aWRlcjo6Y3JlYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8VmVjdG9yPHVpbnQ4X3Q+Jj4oYnVmZmVy
KSwgZmlsZU5hbWUpOwotICAgIFNvdXJjZUNvZGUgc291cmNlKHNvdXJjZVByb3ZpZGVyKTsKLSAg
ICBKU09iamVjdCogaW1wb3J0cyA9IGV4ZWMtPmFyZ3VtZW50KDEpLmdldE9iamVjdCgpOwotICAg
IEpTQXJyYXlCdWZmZXIqIGFycmF5QnVmZmVyID0ganNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVy
Kj4oZXhlYy0+YXJndW1lbnQoMikpOwotCi0gICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKLSAgICBK
U1dBU01Nb2R1bGUqIG1vZHVsZSA9IHBhcnNlV2ViQXNzZW1ibHkoZXhlYywgc291cmNlLCBpbXBv
cnRzLCBhcnJheUJ1ZmZlciwgZXJyb3JNZXNzYWdlKTsKLSAgICBpZiAoIW1vZHVsZSkKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMs
IGNyZWF0ZVN5bnRheEVycm9yKGV4ZWMsIGVycm9yTWVzc2FnZSkpKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKG1vZHVsZSk7Ci19Ci0jZW5kaWYKLQogRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvbkxvYWRNb2R1bGUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFN0cmlu
ZyBmaWxlTmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKGV4ZWMpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKaW5kZXggZDI4YTUy
ZGJlNTc1M2Y2YzhkOWYzZjM3NzU5ODEzZDU5MGJjNWQ3Mi4uODhiMmJkNTlkODIxNmEwMDMxMTFk
NDVhNGE0ZGE2ODY1N2VjODkxYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xMSW50U2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRTbG93UGF0aHMuY3BwCkBAIC0xMjgwLDcgKzEyODAsNiBAQCBpbmxpbmUgU2xvd1BhdGhS
ZXR1cm5UeXBlIHNldFVwQ2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIEluc3RydWN0aW9uKiBw
YywgQ29kZQogICAgIH0gZWxzZSB7CiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogICAgICAgICBX
ZWJBc3NlbWJseUV4ZWN1dGFibGUqIHdlYkFzc2VtYmx5RXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0
PFdlYkFzc2VtYmx5RXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwotICAgICAgICB3ZWJBc3NlbWJs
eUV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb24oZXhlY0NhbGxlZSk7CiAgICAgICAgIGNv
ZGVCbG9jayA9IHdlYkFzc2VtYmx5RXhlY3V0YWJsZS0+Y29kZUJsb2NrRm9yQ2FsbCgpOwogICAg
ICAgICBBU1NFUlQoY29kZUJsb2NrKTsKICAgICAgICAgQXJpdHlDaGVja01vZGUgYXJpdHk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCmluZGV4IDA2YTBl
NzU3YjEzMTA5ZDhmYWQyNmRiN2M2NTcyMjQyMjVkY2RlMDQuLjdmMzBiN2YzYjE1OWZlM2UyNTRm
Zjk5YzcxOGFhYzcwZjM1ZTIyYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0V4ZWN1dGFibGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0V4ZWN1dGFibGUuY3BwCkBAIC0zNyw3ICszNyw2IEBACiAjaW5jbHVkZSAiUHJvZmlsZXJEYXRh
YmFzZS5oIgogI2luY2x1ZGUgIlR5cGVQcm9maWxlci5oIgogI2luY2x1ZGUgIlZNSW5saW5lcy5o
IgotI2luY2x1ZGUgIldBU01GdW5jdGlvblBhcnNlci5oIgogI2luY2x1ZGUgPHd0Zi9Db21tYVBy
aW50ZXIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nQnVpbGRlci5oPgpAQCAtNzY0LDI4ICs3NjMsNiBAQCB2b2lkIFdlYkFzc2VtYmx5RXhlY3V0
YWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQog
ICAgICAgICB0aGlzT2JqZWN0LT5tX2NvZGVCbG9ja0ZvckNhbGwtPnZpc2l0V2Vha2x5KHZpc2l0
b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX21vZHVsZSk7CiB9Ci0KLXZv
aWQgV2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpwcmVwYXJlRm9yRXhlY3V0aW9uKEV4ZWNTdGF0ZSog
ZXhlYykKLXsKLSAgICBpZiAoaGFzSklUQ29kZUZvckNhbGwoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7
Ci0KLSAgICBXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrID0gV2ViQXNzZW1ibHlDb2Rl
QmxvY2s6OmNyZWF0ZSgmdm0sCi0gICAgICAgIHRoaXMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSk7Ci0KLSAgICBXQVNNRnVuY3Rpb25QYXJzZXI6OmNvbXBpbGUodm0sIGNvZGVCbG9jaywg
bV9tb2R1bGUuZ2V0KCksIG1fc291cmNlLCBtX2Z1bmN0aW9uSW5kZXgpOwotCi0gICAgbV9qaXRD
b2RlRm9yQ2FsbCA9IGNvZGVCbG9jay0+aml0Q29kZSgpOwotICAgIG1faml0Q29kZUZvckNhbGxX
aXRoQXJpdHlDaGVjayA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpOwotICAgIG1fbnVtUGFyYW1l
dGVyc0ZvckNhbGwgPSBjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsKLQotICAgIG1fY29kZUJs
b2NrRm9yQ2FsbC5zZXQodm0sIHRoaXMsIGNvZGVCbG9jayk7Ci0KLSAgICBIZWFwOjpoZWFwKHRo
aXMpLT53cml0ZUJhcnJpZXIodGhpcyk7Ci19CiAjZW5kaWYKIAogdm9pZCBFeGVjdXRhYmxlQmFz
ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCmluZGV4IDdiMmYyNGZjMDhmNGU3YjI1NGVi
Y2M3YzQwYTQ0NmIxZmU5ZDZhZjEuLjgxOTI4ZDIwYzU4MTAwYWE5NTg5NmRhMTBiMGIwOWVlNWJj
OWVjNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdC5jcHAKQEAgLTUxMiwxMCArNTEyLDYgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6aW5pdChW
TSYgdm0pCiAgICAgICAgIG1fY2FsbGFibGVQcm94eU9iamVjdFN0cnVjdHVyZS5zZXQodm0sIHRo
aXMsIFByb3h5T2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMsIG1fb2JqZWN0UHJvdG90
eXBlLmdldCgpLCBpc0NhbGxhYmxlKSk7CiAgICAgfQogICAgIG1fcHJveHlSZXZva2VTdHJ1Y3R1
cmUuc2V0KHZtLCB0aGlzLCBQcm94eVJldm9rZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCBt
X2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSk7Ci0gICAgCi0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZ
KQotICAgIG1fd2FzbU1vZHVsZVN0cnVjdHVyZS5zZXQodm0sIHRoaXMsIEpTV0FTTU1vZHVsZTo6
Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzKSk7Ci0jZW5kaWYKIAogICAgIG1fcGFyc2VJbnRGdW5j
dGlvbi5zZXQodm0sIHRoaXMsIEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgdGhpcywgMiwgdm0ucHJv
cGVydHlOYW1lcy0+cGFyc2VJbnQuc3RyaW5nKCksIGdsb2JhbEZ1bmNQYXJzZUludCwgTm9JbnRy
aW5zaWMpKTsKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlO
YW1lcy0+cGFyc2VJbnQsIG1fcGFyc2VJbnRGdW5jdGlvbi5nZXQoKSwgRG9udEVudW0pOwpAQCAt
MTEwMCw5ICsxMDk2LDYgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlz
T2JqZWN0LT5tX3Byb3h5T2JqZWN0U3RydWN0dXJlKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhp
c09iamVjdC0+bV9jYWxsYWJsZVByb3h5T2JqZWN0U3RydWN0dXJlKTsKICAgICB2aXNpdG9yLmFw
cGVuZCgmdGhpc09iamVjdC0+bV9wcm94eVJldm9rZVN0cnVjdHVyZSk7Ci0jaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQotICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3dhc21Nb2R1bGVT
dHJ1Y3R1cmUpOwotI2VuZGlmCiAKICNkZWZpbmUgVklTSVRfU0lNUExFX1RZUEUoQ2FwaXRhbE5h
bWUsIGxvd2VyTmFtZSwgcHJvcGVyTmFtZSwgaW5zdGFuY2VUeXBlLCBqc05hbWUpIFwKICAgICB2
aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV8gIyMgbG93ZXJOYW1lICMjIFByb3RvdHlwZSk7
IFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCmlu
ZGV4IGJlODk4OWZkN2Y0MGExNGQwNDZmZTFmY2IxOGUwYjMzOWFjMzFkNDUuLjU0N2M4MzI2ZmI2
YjRhNzEwNzMwNDBiNWQ3YWZhNzE5ZGVjOWJmYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaApAQCAtMzA3LDkgKzMwNyw2IEBAIHB1YmxpYzoK
ICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3Byb3h5T2JqZWN0U3RydWN0dXJlOwogICAg
IFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fY2FsbGFibGVQcm94eU9iamVjdFN0cnVjdHVyZTsK
ICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3Byb3h5UmV2b2tlU3RydWN0dXJlOwotI2lm
IEVOQUJMRShXRUJBU1NFTUJMWSkKLSAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3dhc21N
b2R1bGVTdHJ1Y3R1cmU7Ci0jZW5kaWYKIAogI2RlZmluZSBERUZJTkVfU1RPUkFHRV9GT1JfU0lN
UExFX1RZUEUoY2FwaXRhbE5hbWUsIGxvd2VyTmFtZSwgcHJvcGVyTmFtZSwgaW5zdGFuY2VUeXBl
LCBqc05hbWUpIFwKICAgICBXcml0ZUJhcnJpZXI8Y2FwaXRhbE5hbWUgIyMgUHJvdG90eXBlPiBt
XyAjIyBsb3dlck5hbWUgIyMgUHJvdG90eXBlOyBcCkBAIC01ODMsOSArNTgwLDYgQEAgcHVibGlj
OgogICAgIFN0cnVjdHVyZSogcHJveHlPYmplY3RTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBt
X3Byb3h5T2JqZWN0U3RydWN0dXJlLmdldCgpOyB9CiAgICAgU3RydWN0dXJlKiBjYWxsYWJsZVBy
b3h5T2JqZWN0U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsYWJsZVByb3h5T2JqZWN0
U3RydWN0dXJlLmdldCgpOyB9CiAgICAgU3RydWN0dXJlKiBwcm94eVJldm9rZVN0cnVjdHVyZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcHJveHlSZXZva2VTdHJ1Y3R1cmUuZ2V0KCk7IH0KLSNpZiBFTkFC
TEUoV0VCQVNTRU1CTFkpCi0gICAgU3RydWN0dXJlKiB3YXNtTW9kdWxlU3RydWN0dXJlKCkgY29u
c3QgeyByZXR1cm4gbV93YXNtTW9kdWxlU3RydWN0dXJlLmdldCgpOyB9Ci0jZW5kaWYKIAogICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0UmVtb3RlRGVidWdnaW5nRW5hYmxlZChib29sKTsK
ICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIHJlbW90ZURlYnVnZ2luZ0VuYWJsZWQoKSBjb25z
dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01Db25zdGFudHMu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01Db25zdGFudHMuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNGUzYmQ0NDNmNTViODQ4ZTE1YzM3YzEyZmQ2YjA1ZjlmMmYx
MzUzOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNQ29uc3RhbnRzLmgKKysrIC9kZXYvbnVsbApAQCAt
MSwzMjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoK
LSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTUgYnkgdGhlIHJl
cG9zaXRvcnkgYXV0aG9ycyBvZgotICogV2ViQXNzZW1ibHkvcG9seWZpbGwtcHJvdG90eXBlLTEu
Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAo
dGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBj
b21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2Yg
dGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2Vz
L0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9y
IGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhl
IExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQg
V0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBp
bXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292
ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2Uu
Ci0gKi8KLQotI2lmbmRlZiBXQVNNQ29uc3RhbnRzX2gKLSNkZWZpbmUgV0FTTUNvbnN0YW50c19o
Ci0KLSNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0KLW5hbWVzcGFjZSBKU0MgewotCi1zdGF0aWMg
Y29uc3QgdWludDMyX3Qgd2FzbU1hZ2ljTnVtYmVyID0gMHg2ZDczNjE3NzsKLQotZW51bSBjbGFz
cyBXQVNNT3BLaW5kIHsKLSAgICBTdGF0ZW1lbnQsCi0gICAgRXhwcmVzc2lvbgotfTsKLQotZW51
bSBjbGFzcyBXQVNNT3BTdGF0ZW1lbnQgOiB1aW50OF90IHsKLSAgICBTZXRMb2NhbCwKLSAgICBT
ZXRHbG9iYWwsCi0gICAgSTMyU3RvcmU4LAotICAgIEkzMlN0b3JlV2l0aE9mZnNldDgsCi0gICAg
STMyU3RvcmUxNiwKLSAgICBJMzJTdG9yZVdpdGhPZmZzZXQxNiwKLSAgICBJMzJTdG9yZTMyLAot
ICAgIEkzMlN0b3JlV2l0aE9mZnNldDMyLAotICAgIEYzMlN0b3JlLAotICAgIEYzMlN0b3JlV2l0
aE9mZnNldCwKLSAgICBGNjRTdG9yZSwKLSAgICBGNjRTdG9yZVdpdGhPZmZzZXQsCi0gICAgQ2Fs
bEludGVybmFsLAotICAgIENhbGxJbmRpcmVjdCwKLSAgICBDYWxsSW1wb3J0LAotICAgIFJldHVy
biwKLSAgICBCbG9jaywKLSAgICBJZiwKLSAgICBJZkVsc2UsCi0gICAgV2hpbGUsCi0gICAgRG8s
Ci0gICAgTGFiZWwsCi0gICAgQnJlYWssCi0gICAgQnJlYWtMYWJlbCwKLSAgICBDb250aW51ZSwK
LSAgICBDb250aW51ZUxhYmVsLAotICAgIFN3aXRjaCwKLSAgICBOdW1iZXJPZldBU01PcFN0YXRl
bWVudHMKLX07Ci0KLWVudW0gY2xhc3MgV0FTTU9wU3RhdGVtZW50V2l0aEltbWVkaWF0ZSA6IHVp
bnQ4X3QgewotICAgIFNldExvY2FsLAotICAgIFNldEdsb2JhbCwKLSAgICBOdW1iZXJPZldBU01P
cFN0YXRlbWVudFdpdGhJbW1lZGlhdGVzCi19OwotCi1lbnVtIGNsYXNzIFdBU01PcEV4cHJlc3Np
b25JMzIgOiB1aW50OF90IHsKLSAgICBDb25zdGFudFBvb2xJbmRleCwKLSAgICBJbW1lZGlhdGUs
Ci0gICAgR2V0TG9jYWwsCi0gICAgR2V0R2xvYmFsLAotICAgIFNldExvY2FsLAotICAgIFNldEds
b2JhbCwKLSAgICBTTG9hZDgsCi0gICAgU0xvYWRXaXRoT2Zmc2V0OCwKLSAgICBVTG9hZDgsCi0g
ICAgVUxvYWRXaXRoT2Zmc2V0OCwKLSAgICBTTG9hZDE2LAotICAgIFNMb2FkV2l0aE9mZnNldDE2
LAotICAgIFVMb2FkMTYsCi0gICAgVUxvYWRXaXRoT2Zmc2V0MTYsCi0gICAgTG9hZDMyLAotICAg
IExvYWRXaXRoT2Zmc2V0MzIsCi0gICAgU3RvcmU4LAotICAgIFN0b3JlV2l0aE9mZnNldDgsCi0g
ICAgU3RvcmUxNiwKLSAgICBTdG9yZVdpdGhPZmZzZXQxNiwKLSAgICBTdG9yZTMyLAotICAgIFN0
b3JlV2l0aE9mZnNldDMyLAotICAgIENhbGxJbnRlcm5hbCwKLSAgICBDYWxsSW5kaXJlY3QsCi0g
ICAgQ2FsbEltcG9ydCwKLSAgICBDb25kaXRpb25hbCwKLSAgICBDb21tYSwKLSAgICBGcm9tRjMy
LAotICAgIEZyb21GNjQsCi0gICAgTmVnYXRlLAotICAgIEFkZCwKLSAgICBTdWIsCi0gICAgTXVs
LAotICAgIFNEaXYsCi0gICAgVURpdiwKLSAgICBTTW9kLAotICAgIFVNb2QsCi0gICAgQml0Tm90
LAotICAgIEJpdE9yLAotICAgIEJpdEFuZCwKLSAgICBCaXRYb3IsCi0gICAgTGVmdFNoaWZ0LAot
ICAgIEFyaXRobWV0aWNSaWdodFNoaWZ0LAotICAgIExvZ2ljYWxSaWdodFNoaWZ0LAotICAgIENv
dW50TGVhZGluZ1plcm9zLAotICAgIExvZ2ljYWxOb3QsCi0gICAgRXF1YWxJMzIsCi0gICAgRXF1
YWxGMzIsCi0gICAgRXF1YWxGNjQsCi0gICAgTm90RXF1YWxJMzIsCi0gICAgTm90RXF1YWxGMzIs
Ci0gICAgTm90RXF1YWxGNjQsCi0gICAgU0xlc3NUaGFuSTMyLAotICAgIFVMZXNzVGhhbkkzMiwK
LSAgICBMZXNzVGhhbkYzMiwKLSAgICBMZXNzVGhhbkY2NCwKLSAgICBTTGVzc1RoYW5PckVxdWFs
STMyLAotICAgIFVMZXNzVGhhbk9yRXF1YWxJMzIsCi0gICAgTGVzc1RoYW5PckVxdWFsRjMyLAot
ICAgIExlc3NUaGFuT3JFcXVhbEY2NCwKLSAgICBTR3JlYXRlclRoYW5JMzIsCi0gICAgVUdyZWF0
ZXJUaGFuSTMyLAotICAgIEdyZWF0ZXJUaGFuRjMyLAotICAgIEdyZWF0ZXJUaGFuRjY0LAotICAg
IFNHcmVhdGVyVGhhbk9yRXF1YWxJMzIsCi0gICAgVUdyZWF0ZXJUaGFuT3JFcXVhbEkzMiwKLSAg
ICBHcmVhdGVyVGhhbk9yRXF1YWxGMzIsCi0gICAgR3JlYXRlclRoYW5PckVxdWFsRjY0LAotICAg
IFNNaW4sCi0gICAgVU1pbiwKLSAgICBTTWF4LAotICAgIFVNYXgsCi0gICAgQWJzLAotICAgIE51
bWJlck9mV0FTTU9wRXhwcmVzc2lvbkkzMnMKLX07Ci0KLWVudW0gY2xhc3MgV0FTTU9wRXhwcmVz
c2lvbkkzMldpdGhJbW1lZGlhdGUgOiB1aW50OF90IHsKLSAgICBDb25zdGFudFBvb2xJbmRleCwK
LSAgICBJbW1lZGlhdGUsCi0gICAgR2V0TG9jYWwsCi0gICAgTnVtYmVyT2ZXQVNNT3BFeHByZXNz
aW9uSTMyV2l0aEltbWVkaWF0ZXMKLX07Ci0KLWVudW0gY2xhc3MgV0FTTU9wRXhwcmVzc2lvbkYz
MiA6IHVpbnQ4X3QgewotICAgIENvbnN0YW50UG9vbEluZGV4LAotICAgIEltbWVkaWF0ZSwKLSAg
ICBHZXRMb2NhbCwKLSAgICBHZXRHbG9iYWwsCi0gICAgU2V0TG9jYWwsCi0gICAgU2V0R2xvYmFs
LAotICAgIExvYWQsCi0gICAgTG9hZFdpdGhPZmZzZXQsCi0gICAgU3RvcmUsCi0gICAgU3RvcmVX
aXRoT2Zmc2V0LAotICAgIENhbGxJbnRlcm5hbCwKLSAgICBDYWxsSW5kaXJlY3QsCi0gICAgQ29u
ZGl0aW9uYWwsCi0gICAgQ29tbWEsCi0gICAgRnJvbVMzMiwKLSAgICBGcm9tVTMyLAotICAgIEZy
b21GNjQsCi0gICAgTmVnYXRlLAotICAgIEFkZCwKLSAgICBTdWIsCi0gICAgTXVsLAotICAgIERp
diwKLSAgICBBYnMsCi0gICAgQ2VpbCwKLSAgICBGbG9vciwKLSAgICBTcXJ0LAotICAgIE51bWJl
ck9mV0FTTU9wRXhwcmVzc2lvbkYzMnMKLX07Ci0KLWVudW0gY2xhc3MgV0FTTU9wRXhwcmVzc2lv
bkYzMldpdGhJbW1lZGlhdGUgOiB1aW50OF90IHsKLSAgICBDb25zdGFudFBvb2xJbmRleCwKLSAg
ICBHZXRMb2NhbCwKLSAgICBOdW1iZXJPZldBU01PcEV4cHJlc3Npb25GMzJXaXRoSW1tZWRpYXRl
cwotfTsKLQotZW51bSBjbGFzcyBXQVNNT3BFeHByZXNzaW9uRjY0IDogdWludDhfdCB7Ci0gICAg
Q29uc3RhbnRQb29sSW5kZXgsCi0gICAgSW1tZWRpYXRlLAotICAgIEdldExvY2FsLAotICAgIEdl
dEdsb2JhbCwKLSAgICBTZXRMb2NhbCwKLSAgICBTZXRHbG9iYWwsCi0gICAgTG9hZCwKLSAgICBM
b2FkV2l0aE9mZnNldCwKLSAgICBTdG9yZSwKLSAgICBTdG9yZVdpdGhPZmZzZXQsCi0gICAgQ2Fs
bEludGVybmFsLAotICAgIENhbGxJbmRpcmVjdCwKLSAgICBDYWxsSW1wb3J0LAotICAgIENvbmRp
dGlvbmFsLAotICAgIENvbW1hLAotICAgIEZyb21TMzIsCi0gICAgRnJvbVUzMiwKLSAgICBGcm9t
RjMyLAotICAgIE5lZ2F0ZSwKLSAgICBBZGQsCi0gICAgU3ViLAotICAgIE11bCwKLSAgICBEaXYs
Ci0gICAgTW9kLAotICAgIE1pbiwKLSAgICBNYXgsCi0gICAgQWJzLAotICAgIENlaWwsCi0gICAg
Rmxvb3IsCi0gICAgU3FydCwKLSAgICBDb3MsCi0gICAgU2luLAotICAgIFRhbiwKLSAgICBBQ29z
LAotICAgIEFTaW4sCi0gICAgQVRhbiwKLSAgICBBVGFuMiwKLSAgICBFeHAsCi0gICAgTG4sCi0g
ICAgUG93LAotICAgIE51bWJlck9mV0FTTU9wRXhwcmVzc2lvbkY2NHMKLX07Ci0KLWVudW0gY2xh
c3MgV0FTTU9wRXhwcmVzc2lvbkY2NFdpdGhJbW1lZGlhdGUgOiB1aW50OF90IHsKLSAgICBDb25z
dGFudFBvb2xJbmRleCwKLSAgICBHZXRMb2NhbCwKLSAgICBOdW1iZXJPZldBU01PcEV4cHJlc3Np
b25GNjRXaXRoSW1tZWRpYXRlcwotfTsKLQotZW51bSBjbGFzcyBXQVNNT3BFeHByZXNzaW9uVm9p
ZCA6IHVpbnQ4X3QgewotICAgIENhbGxJbnRlcm5hbCwKLSAgICBDYWxsSW5kaXJlY3QsCi0gICAg
Q2FsbEltcG9ydCwKLSAgICBOdW1iZXJPZldBU01PcEV4cHJlc3Npb25Wb2lkcwotfTsKLQotZW51
bSBjbGFzcyBXQVNNVmFyaWFibGVUeXBlcyA6IHVpbnQ4X3QgewotICAgIEkzMiA9IDEgPDwgMCwK
LSAgICBGMzIgPSAxIDw8IDEsCi0gICAgRjY0ID0gMSA8PCAyLAotICAgIE51bWJlck9mVmFyaWFi
bGVUeXBlcyA9IDgKLX07Ci0KLWVudW0gY2xhc3MgV0FTTVZhcmlhYmxlVHlwZXNXaXRoSW1tZWRp
YXRlIDogdWludDhfdCB7Ci0gICAgSTMyLAotICAgIE51bWJlck9mVmFyaWFibGVUeXBlc1dpdGhJ
bW1lZGlhdGVzCi19OwotCi1lbnVtIGNsYXNzIFdBU01Td2l0Y2hDYXNlIDogdWludDhfdCB7Ci0g
ICAgQ2FzZVdpdGhOb1N0YXRlbWVudHMsCi0gICAgQ2FzZVdpdGhTdGF0ZW1lbnQsCi0gICAgQ2Fz
ZVdpdGhCbG9ja1N0YXRlbWVudCwKLSAgICBEZWZhdWx0V2l0aE5vU3RhdGVtZW50cywKLSAgICBE
ZWZhdWx0V2l0aFN0YXRlbWVudCwKLSAgICBEZWZhdWx0V2l0aEJsb2NrU3RhdGVtZW50LAotICAg
IE51bWJlck9mU3dpdGNoQ2FzZXMKLX07Ci0KLWVudW0gY2xhc3MgV0FTTUV4cG9ydEZvcm1hdCA6
IHVpbnQ4X3QgewotICAgIERlZmF1bHQsCi0gICAgUmVjb3JkLAotICAgIE51bWJlck9mRXhwb3J0
Rm9ybWF0cwotfTsKLQotZW51bSBjbGFzcyBXQVNNVHlwZUNvbnZlcnNpb24gewotICAgIENvbnZl
cnRTaWduZWQsCi0gICAgQ29udmVydFVuc2lnbmVkLAotICAgIFByb21vdGUsCi0gICAgRGVtb3Rl
LAotfTsKLQotZW51bSBjbGFzcyBXQVNNTWVtb3J5VHlwZSB7Ci0gICAgSTgsCi0gICAgSTE2LAot
ICAgIEkzMiwKLSAgICBGMzIsCi0gICAgRjY0Ci19OwotCi1lbnVtIGNsYXNzIE1lbW9yeUFjY2Vz
c09mZnNldE1vZGUgeyBOb09mZnNldCwgV2l0aE9mZnNldCB9OwotZW51bSBjbGFzcyBNZW1vcnlB
Y2Nlc3NDb252ZXJzaW9uIHsgTm9Db252ZXJzaW9uLCBTaWduRXh0ZW5kLCBaZXJvRXh0ZW5kIH07
Ci0KLXN0YXRpYyBjb25zdCB1aW50OF90IGhhc0ltbWVkaWF0ZUluT3BGbGFnID0gMHg4MDsKLQot
c3RhdGljIGNvbnN0IHVuc2lnbmVkIG9wV2l0aEltbWVkaWF0ZUJpdHMgPSAyOwotc3RhdGljIGNv
bnN0IHVpbnQzMl90IG9wV2l0aEltbWVkaWF0ZUxpbWl0ID0gMSA8PCBvcFdpdGhJbW1lZGlhdGVC
aXRzOwotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW1tZWRpYXRlQml0cyA9IDU7Ci1zdGF0aWMg
Y29uc3QgdWludDMyX3QgaW1tZWRpYXRlTGltaXQgPSAxIDw8IGltbWVkaWF0ZUJpdHM7Ci0KLX0g
Ly8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQotCi0jZW5k
aWYgLy8gV0FTTUNvbnN0YW50c19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XQVNNRnVuY3Rpb25CM0lSR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XQVNNRnVuY3Rpb25CM0lSR2VuZXJhdG9yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDc4MTNhMjNkYWEzMWU2N2JkNjBhOTk0ZjRmZDRiZWVkMmQ3YjZhNDIuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV0FTTUZ1bmN0aW9uQjNJUkdlbmVyYXRvci5oCisrKyAvZGV2L251bGwKQEAgLTEs
Mzk0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaWZuZGVmIFdBU01GdW5jdGlvbkIzSVJHZW5lcmF0b3JfaAotI2RlZmluZSBXQVNNRnVuY3Rp
b25CM0lSR2VuZXJhdG9yX2gKLQotI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkgJiYgRU5BQkxFKEZU
TF9KSVQpCi0KLSNpbmNsdWRlICJGVExBYmJyZXZpYXRlZFR5cGVzLmgiCi0KLSNkZWZpbmUgVU5V
U0VEIDAKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLXVzaW5nIEZUTDo6TEJhc2ljQmxvY2s7Ci11c2lu
ZyBGVEw6OkxWYWx1ZTsKLQotY2xhc3MgV0FTTUZ1bmN0aW9uQjNJUkdlbmVyYXRvciB7Ci1wdWJs
aWM6Ci0gICAgdHlwZWRlZiBMVmFsdWUgRXhwcmVzc2lvbjsKLSAgICB0eXBlZGVmIGludCBTdGF0
ZW1lbnQ7Ci0gICAgdHlwZWRlZiBWZWN0b3I8TFZhbHVlPiBFeHByZXNzaW9uTGlzdDsKLSAgICBz
dHJ1Y3QgTWVtb3J5QWRkcmVzcyB7Ci0gICAgICAgIE1lbW9yeUFkZHJlc3Modm9pZCopIHsgfQot
ICAgICAgICBNZW1vcnlBZGRyZXNzKExWYWx1ZSBpbmRleCwgdWludDMyX3Qgb2Zmc2V0KQotICAg
ICAgICAgICAgOiBpbmRleChpbmRleCkKLSAgICAgICAgICAgICwgb2Zmc2V0KG9mZnNldCkKLSAg
ICAgICAgewotICAgICAgICB9Ci0gICAgICAgIExWYWx1ZSBpbmRleDsKLSAgICAgICAgdWludDMy
X3Qgb2Zmc2V0OwotICAgIH07Ci0gICAgdHlwZWRlZiBMQmFzaWNCbG9jayBKdW1wVGFyZ2V0Owot
ICAgIGVudW0gY2xhc3MgSnVtcENvbmRpdGlvbiB7IFplcm8sIE5vblplcm8gfTsKLQotICAgIHZv
aWQgc3RhcnRGdW5jdGlvbihjb25zdCBWZWN0b3I8V0FTTVR5cGU+JiBhcmd1bWVudHMsIHVpbnQz
Ml90IG51bWJlck9mSTMyTG9jYWxWYXJpYWJsZXMsIHVpbnQzMl90IG51bWJlck9mRjMyTG9jYWxW
YXJpYWJsZXMsIHVpbnQzMl90IG51bWJlck9mRjY0TG9jYWxWYXJpYWJsZXMpCi0gICAgewotICAg
ICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAgICAgICBVTlVTRURfUEFS
QU0oYXJndW1lbnRzKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKG51bWJlck9mSTMyTG9jYWxWYXJp
YWJsZXMpOwotICAgICAgICBVTlVTRURfUEFSQU0obnVtYmVyT2ZGMzJMb2NhbFZhcmlhYmxlcyk7
Ci0gICAgICAgIFVOVVNFRF9QQVJBTShudW1iZXJPZkY2NExvY2FsVmFyaWFibGVzKTsKLSAgICB9
Ci0KLSAgICB2b2lkIGVuZEZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQgdGhpcyBtZXRob2QuCi0gICAgfQotCi0gICAgTFZhbHVlIGJ1aWxkU2V0TG9jYWwoV0FT
TU9wS2luZCBvcEtpbmQsIHVpbnQzMl90IGxvY2FsSW5kZXgsIExWYWx1ZSB2YWx1ZSwgV0FTTVR5
cGUgdHlwZSkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2Qu
Ci0gICAgICAgIFVOVVNFRF9QQVJBTShvcEtpbmQpOwotICAgICAgICBVTlVTRURfUEFSQU0obG9j
YWxJbmRleCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0gICAgICAgIFVOVVNFRF9Q
QVJBTSh0eXBlKTsKLSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9Ci0KLSAgICBMVmFsdWUg
YnVpbGRTZXRHbG9iYWwoV0FTTU9wS2luZCBvcEtpbmQsIHVpbnQzMl90IGdsb2JhbEluZGV4LCBM
VmFsdWUgdmFsdWUsIFdBU01UeXBlIHR5cGUpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogSW1w
bGVtZW50IHRoaXMgbWV0aG9kLgotICAgICAgICBVTlVTRURfUEFSQU0ob3BLaW5kKTsKLSAgICAg
ICAgVU5VU0VEX1BBUkFNKGdsb2JhbEluZGV4KTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHZhbHVl
KTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHR5cGUpOwotICAgICAgICByZXR1cm4gVU5VU0VEOwot
ICAgIH0KLQotICAgIHZvaWQgYnVpbGRSZXR1cm4oTFZhbHVlIHZhbHVlLCBXQVNNRXhwcmVzc2lv
blR5cGUgcmV0dXJuVHlwZSkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhp
cyBtZXRob2QuCi0gICAgICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0gICAgICAgIFVOVVNFRF9Q
QVJBTShyZXR1cm5UeXBlKTsKLSAgICB9Ci0KLSAgICBMVmFsdWUgYnVpbGRJbW1lZGlhdGVJMzIo
dWludDMyX3QgaW1tZWRpYXRlKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0
aGlzIG1ldGhvZC4KLSAgICAgICAgVU5VU0VEX1BBUkFNKGltbWVkaWF0ZSk7Ci0gICAgICAgIHJl
dHVybiBVTlVTRUQ7Ci0gICAgfQotCi0gICAgTFZhbHVlIGJ1aWxkSW1tZWRpYXRlRjMyKGZsb2F0
IGltbWVkaWF0ZSkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRo
b2QuCi0gICAgICAgIFVOVVNFRF9QQVJBTShpbW1lZGlhdGUpOwotICAgICAgICByZXR1cm4gVU5V
U0VEOwotICAgIH0KLQotICAgIExWYWx1ZSBidWlsZEltbWVkaWF0ZUY2NChkb3VibGUgaW1tZWRp
YXRlKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KLSAg
ICAgICAgVU5VU0VEX1BBUkFNKGltbWVkaWF0ZSk7Ci0gICAgICAgIHJldHVybiBVTlVTRUQ7Ci0g
ICAgfQotCi0gICAgTFZhbHVlIGJ1aWxkR2V0TG9jYWwodWludDMyX3QgbG9jYWxJbmRleCwgV0FT
TVR5cGUgdHlwZSkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRo
b2QuCi0gICAgICAgIFVOVVNFRF9QQVJBTShsb2NhbEluZGV4KTsKLSAgICAgICAgVU5VU0VEX1BB
UkFNKHR5cGUpOwotICAgICAgICByZXR1cm4gVU5VU0VEOwotICAgIH0KLQotICAgIExWYWx1ZSBi
dWlsZEdldEdsb2JhbCh1aW50MzJfdCBnbG9iYWxJbmRleCwgV0FTTVR5cGUgdHlwZSkKLSAgICB7
Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCi0gICAgICAgIFVOVVNF
RF9QQVJBTShnbG9iYWxJbmRleCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsKLSAgICAg
ICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9Ci0KLSAgICBMVmFsdWUgYnVpbGRDb252ZXJ0VHlwZShM
VmFsdWUgdmFsdWUsIFdBU01FeHByZXNzaW9uVHlwZSBmcm9tVHlwZSwgV0FTTUV4cHJlc3Npb25U
eXBlIHRvVHlwZSwgV0FTTVR5cGVDb252ZXJzaW9uIGNvbnZlcnNpb24pCi0gICAgewotICAgICAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAgICAgICBVTlVTRURfUEFSQU0o
dmFsdWUpOwotICAgICAgICBVTlVTRURfUEFSQU0oZnJvbVR5cGUpOwotICAgICAgICBVTlVTRURf
UEFSQU0odG9UeXBlKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKGNvbnZlcnNpb24pOwotICAgICAg
ICByZXR1cm4gVU5VU0VEOwotICAgIH0KLQotICAgIExWYWx1ZSBidWlsZExvYWQoY29uc3QgTWVt
b3J5QWRkcmVzcyYgbWVtb3J5QWRkcmVzcywgV0FTTUV4cHJlc3Npb25UeXBlIGV4cHJlc3Npb25U
eXBlLCBXQVNNTWVtb3J5VHlwZSBtZW1vcnlUeXBlLCBNZW1vcnlBY2Nlc3NDb252ZXJzaW9uIGNv
bnZlcnNpb24pCi0gICAgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9k
LgotICAgICAgICBVTlVTRURfUEFSQU0obWVtb3J5QWRkcmVzcyk7Ci0gICAgICAgIFVOVVNFRF9Q
QVJBTShleHByZXNzaW9uVHlwZSk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShtZW1vcnlUeXBlKTsK
LSAgICAgICAgVU5VU0VEX1BBUkFNKGNvbnZlcnNpb24pOwotICAgICAgICByZXR1cm4gVU5VU0VE
OwotICAgIH0KLQotICAgIExWYWx1ZSBidWlsZFN0b3JlKFdBU01PcEtpbmQgb3BLaW5kLCBjb25z
dCBNZW1vcnlBZGRyZXNzJiBtZW1vcnlBZGRyZXNzLCBXQVNNRXhwcmVzc2lvblR5cGUgZXhwcmVz
c2lvblR5cGUsIFdBU01NZW1vcnlUeXBlIG1lbW9yeVR5cGUsIExWYWx1ZSB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCi0gICAgICAgIFVOVVNF
RF9QQVJBTShvcEtpbmQpOwotICAgICAgICBVTlVTRURfUEFSQU0obWVtb3J5QWRkcmVzcyk7Ci0g
ICAgICAgIFVOVVNFRF9QQVJBTShleHByZXNzaW9uVHlwZSk7Ci0gICAgICAgIFVOVVNFRF9QQVJB
TShtZW1vcnlUeXBlKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKLSAgICAgICAgcmV0
dXJuIFVOVVNFRDsKLSAgICB9Ci0KLSAgICBMVmFsdWUgYnVpbGRVbmFyeUkzMihMVmFsdWUgdmFs
dWUsIFdBU01PcEV4cHJlc3Npb25JMzIgb3ApCi0gICAgewotICAgICAgICAvLyBGSVhNRTogSW1w
bGVtZW50IHRoaXMgbWV0aG9kLgotICAgICAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotICAgICAg
ICBVTlVTRURfUEFSQU0ob3ApOwotICAgICAgICByZXR1cm4gVU5VU0VEOwotICAgIH0KLQotICAg
IExWYWx1ZSBidWlsZFVuYXJ5RjMyKExWYWx1ZSB2YWx1ZSwgV0FTTU9wRXhwcmVzc2lvbkYzMiBv
cCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCi0gICAg
ICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShvcCk7Ci0gICAg
ICAgIHJldHVybiBVTlVTRUQ7Ci0gICAgfQotCi0gICAgTFZhbHVlIGJ1aWxkVW5hcnlGNjQoTFZh
bHVlIHZhbHVlLCBXQVNNT3BFeHByZXNzaW9uRjY0IG9wKQotICAgIHsKLSAgICAgICAgLy8gRklY
TUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KLSAgICAgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsK
LSAgICAgICAgVU5VU0VEX1BBUkFNKG9wKTsKLSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9
Ci0KLSAgICBMVmFsdWUgYnVpbGRCaW5hcnlJMzIoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCwg
V0FTTU9wRXhwcmVzc2lvbkkzMiBvcCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgdGhpcyBtZXRob2QuCi0gICAgICAgIFVOVVNFRF9QQVJBTShsZWZ0KTsKLSAgICAgICAgVU5V
U0VEX1BBUkFNKHJpZ2h0KTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKG9wKTsKLSAgICAgICAgcmV0
dXJuIFVOVVNFRDsKLSAgICB9Ci0KLSAgICBMVmFsdWUgYnVpbGRCaW5hcnlGMzIoTFZhbHVlIGxl
ZnQsIExWYWx1ZSByaWdodCwgV0FTTU9wRXhwcmVzc2lvbkYzMiBvcCkKLSAgICB7Ci0gICAgICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCi0gICAgICAgIFVOVVNFRF9QQVJBTShs
ZWZ0KTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHJpZ2h0KTsKLSAgICAgICAgVU5VU0VEX1BBUkFN
KG9wKTsKLSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9Ci0KLSAgICBMVmFsdWUgYnVpbGRC
aW5hcnlGNjQoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCwgV0FTTU9wRXhwcmVzc2lvbkY2NCBv
cCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCi0gICAg
ICAgIFVOVVNFRF9QQVJBTShsZWZ0KTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHJpZ2h0KTsKLSAg
ICAgICAgVU5VU0VEX1BBUkFNKG9wKTsKLSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9Ci0K
LSAgICBMVmFsdWUgYnVpbGRSZWxhdGlvbmFsSTMyKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQs
IFdBU01PcEV4cHJlc3Npb25JMzIgb3ApCi0gICAgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IHRoaXMgbWV0aG9kLgotICAgICAgICBVTlVTRURfUEFSQU0obGVmdCk7Ci0gICAgICAgIFVO
VVNFRF9QQVJBTShyaWdodCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShvcCk7Ci0gICAgICAgIHJl
dHVybiBVTlVTRUQ7Ci0gICAgfQotCi0gICAgTFZhbHVlIGJ1aWxkUmVsYXRpb25hbEYzMihMVmFs
dWUgbGVmdCwgTFZhbHVlIHJpZ2h0LCBXQVNNT3BFeHByZXNzaW9uSTMyIG9wKQotICAgIHsKLSAg
ICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KLSAgICAgICAgVU5VU0VEX1BB
UkFNKGxlZnQpOwotICAgICAgICBVTlVTRURfUEFSQU0ocmlnaHQpOwotICAgICAgICBVTlVTRURf
UEFSQU0ob3ApOwotICAgICAgICByZXR1cm4gVU5VU0VEOwotICAgIH0KLQotICAgIExWYWx1ZSBi
dWlsZFJlbGF0aW9uYWxGNjQoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCwgV0FTTU9wRXhwcmVz
c2lvbkkzMiBvcCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRo
b2QuCi0gICAgICAgIFVOVVNFRF9QQVJBTShsZWZ0KTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHJp
Z2h0KTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKG9wKTsKLSAgICAgICAgcmV0dXJuIFVOVVNFRDsK
LSAgICB9Ci0KLSAgICBMVmFsdWUgYnVpbGRNaW5Pck1heEkzMihMVmFsdWUgbGVmdCwgTFZhbHVl
IHJpZ2h0LCBXQVNNT3BFeHByZXNzaW9uSTMyIG9wKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6
IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KLSAgICAgICAgVU5VU0VEX1BBUkFNKGxlZnQpOwotICAg
ICAgICBVTlVTRURfUEFSQU0ocmlnaHQpOwotICAgICAgICBVTlVTRURfUEFSQU0ob3ApOwotICAg
ICAgICByZXR1cm4gVU5VU0VEOwotICAgIH0KLQotICAgIExWYWx1ZSBidWlsZE1pbk9yTWF4RjY0
KExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQsIFdBU01PcEV4cHJlc3Npb25GNjQgb3ApCi0gICAg
ewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAgICAgICBVTlVT
RURfUEFSQU0obGVmdCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShyaWdodCk7Ci0gICAgICAgIFVO
VVNFRF9QQVJBTShvcCk7Ci0gICAgICAgIHJldHVybiBVTlVTRUQ7Ci0gICAgfQotCi0gICAgTFZh
bHVlIGJ1aWxkQ2FsbEludGVybmFsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFZlY3Rv
cjxMVmFsdWU+JiBhcmd1bWVudExpc3QsIGNvbnN0IFdBU01TaWduYXR1cmUmIHNpZ25hdHVyZSwg
V0FTTUV4cHJlc3Npb25UeXBlIHJldHVyblR5cGUpCi0gICAgewotICAgICAgICAvLyBGSVhNRTog
SW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAgICAgICBVTlVTRURfUEFSQU0oZnVuY3Rpb25JbmRl
eCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShhcmd1bWVudExpc3QpOwotICAgICAgICBVTlVTRURf
UEFSQU0oc2lnbmF0dXJlKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHJldHVyblR5cGUpOwotICAg
ICAgICByZXR1cm4gVU5VU0VEOwotICAgIH0KLQotICAgIExWYWx1ZSBidWlsZENhbGxJbmRpcmVj
dCh1aW50MzJfdCBmdW5jdGlvblBvaW50ZXJUYWJsZUluZGV4LCBMVmFsdWUgaW5kZXgsIGNvbnN0
IFZlY3RvcjxMVmFsdWU+JiBhcmd1bWVudExpc3QsIGNvbnN0IFdBU01TaWduYXR1cmUmIHNpZ25h
dHVyZSwgV0FTTUV4cHJlc3Npb25UeXBlIHJldHVyblR5cGUpCi0gICAgewotICAgICAgICAvLyBG
SVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAgICAgICBVTlVTRURfUEFSQU0oZnVuY3Rp
b25Qb2ludGVyVGFibGVJbmRleCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShpbmRleCk7Ci0gICAg
ICAgIFVOVVNFRF9QQVJBTShhcmd1bWVudExpc3QpOwotICAgICAgICBVTlVTRURfUEFSQU0oc2ln
bmF0dXJlKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHJldHVyblR5cGUpOwotICAgICAgICByZXR1
cm4gVU5VU0VEOwotICAgIH0KLQotICAgIExWYWx1ZSBidWlsZENhbGxJbXBvcnQodWludDMyX3Qg
ZnVuY3Rpb25JbXBvcnRJbmRleCwgY29uc3QgVmVjdG9yPExWYWx1ZT4mIGFyZ3VtZW50TGlzdCwg
Y29uc3QgV0FTTVNpZ25hdHVyZSYgc2lnbmF0dXJlLCBXQVNNRXhwcmVzc2lvblR5cGUgcmV0dXJu
VHlwZSkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCi0g
ICAgICAgIFVOVVNFRF9QQVJBTShmdW5jdGlvbkltcG9ydEluZGV4KTsKLSAgICAgICAgVU5VU0VE
X1BBUkFNKGFyZ3VtZW50TGlzdCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShzaWduYXR1cmUpOwot
ICAgICAgICBVTlVTRURfUEFSQU0ocmV0dXJuVHlwZSk7Ci0gICAgICAgIHJldHVybiBVTlVTRUQ7
Ci0gICAgfQotCi0gICAgdm9pZCBhcHBlbmRFeHByZXNzaW9uTGlzdChWZWN0b3I8TFZhbHVlPiYg
ZXhwcmVzc2lvbkxpc3QsIExWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgdGhpcyBtZXRob2QuCi0gICAgICAgIFVOVVNFRF9QQVJBTShleHByZXNzaW9uTGlz
dCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0gICAgfQotCi0gICAgdm9pZCBkaXNj
YXJkKExWYWx1ZSkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBsaW5rVGFyZ2V0KExCYXNpY0Js
b2NrIHRhcmdldCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRo
b2QuCi0gICAgICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOwotICAgIH0KLQotICAgIHZvaWQganVt
cFRvVGFyZ2V0KExCYXNpY0Jsb2NrIHRhcmdldCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgdGhpcyBtZXRob2QuCi0gICAgICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOwotICAg
IH0KLQotICAgIHZvaWQganVtcFRvVGFyZ2V0SWYoSnVtcENvbmRpdGlvbiwgTFZhbHVlIHZhbHVl
LCBMQmFzaWNCbG9jayB0YXJnZXQpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50
IHRoaXMgbWV0aG9kLgotICAgICAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotICAgICAgICBVTlVT
RURfUEFSQU0odGFyZ2V0KTsKLSAgICB9Ci0KLSAgICB2b2lkIHN0YXJ0TG9vcCgpCi0gICAgewot
ICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAgIH0KLQotICAgIHZv
aWQgZW5kTG9vcCgpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0
aG9kLgotICAgIH0KLQotICAgIHZvaWQgc3RhcnRTd2l0Y2goKQotICAgIHsKLSAgICAgICAgLy8g
RklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KLSAgICB9Ci0KLSAgICB2b2lkIGVuZFN3aXRj
aCgpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAg
IH0KLQotICAgIHZvaWQgc3RhcnRMYWJlbCgpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogSW1w
bGVtZW50IHRoaXMgbWV0aG9kLgotICAgIH0KLQotICAgIHZvaWQgZW5kTGFiZWwoKQotICAgIHsK
LSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KLSAgICB9Ci0KLSAgICBM
QmFzaWNCbG9jayBicmVha1RhcmdldCgpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IHRoaXMgbWV0aG9kLgotICAgICAgICByZXR1cm4gVU5VU0VEOwotICAgIH0KLQotICAgIExC
YXNpY0Jsb2NrIGNvbnRpbnVlVGFyZ2V0KCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQgdGhpcyBtZXRob2QuCi0gICAgICAgIHJldHVybiBVTlVTRUQ7Ci0gICAgfQotCi0gICAg
TEJhc2ljQmxvY2sgYnJlYWtMYWJlbFRhcmdldCh1aW50MzJfdCBsYWJlbEluZGV4KQotICAgIHsK
LSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KLSAgICAgICAgVU5VU0VE
X1BBUkFNKGxhYmVsSW5kZXgpOwotICAgICAgICByZXR1cm4gVU5VU0VEOwotICAgIH0KLQotICAg
IExCYXNpY0Jsb2NrIGNvbnRpbnVlTGFiZWxUYXJnZXQodWludDMyX3QgbGFiZWxJbmRleCkKLSAg
ICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCi0gICAgICAgIFVO
VVNFRF9QQVJBTShsYWJlbEluZGV4KTsKLSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9Ci0K
LSAgICB2b2lkIGJ1aWxkU3dpdGNoKExWYWx1ZSB2YWx1ZSwgY29uc3QgVmVjdG9yPGludDY0X3Q+
JiBjYXNlcywgY29uc3QgVmVjdG9yPExCYXNpY0Jsb2NrPiYgdGFyZ2V0cywgTEJhc2ljQmxvY2sg
ZGVmYXVsdFRhcmdldCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBt
ZXRob2QuCi0gICAgICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0gICAgICAgIFVOVVNFRF9QQVJB
TShjYXNlcyk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTSh0YXJnZXRzKTsKLSAgICAgICAgVU5VU0VE
X1BBUkFNKGRlZmF1bHRUYXJnZXQpOwotICAgIH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwot
Ci0jZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQotCi0jZW5kaWYgLy8gV0FTTUZ1bmN0aW9u
QjNJUkdlbmVyYXRvcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
QVNNRnVuY3Rpb25Db21waWxlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZ1
bmN0aW9uQ29tcGlsZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2FjNzI0NzNm
M2Y3NzAyMjFjNmZlZDdiYTEyMmNhZjRmNWIyNTIyNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVu
Y3Rpb25Db21waWxlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTU0MSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFdBU01G
dW5jdGlvbkNvbXBpbGVyX2gKLSNkZWZpbmUgV0FTTUZ1bmN0aW9uQ29tcGlsZXJfaAotCi0jaWYg
RU5BQkxFKFdFQkFTU0VNQkxZKQotCi0jaW5jbHVkZSAiQmluYXJ5U3dpdGNoLmgiCi0jaW5jbHVk
ZSAiQ0NhbGxIZWxwZXJzLmgiCi0jaW5jbHVkZSAiSklULmgiCi0jaW5jbHVkZSAiSklUT3BlcmF0
aW9ucy5oIgotI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKLSNpbmNsdWRlICJMaW5rQnVmZmVy
LmgiCi0jaW5jbHVkZSAiTWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaCIKLQotI2RlZmlu
ZSBVTlVTRUQgMAotCi1uYW1lc3BhY2UgSlNDIHsKLQotc3RhdGljIGludDMyX3QgSklUX09QRVJB
VElPTiBvcGVyYXRpb25Db252ZXJ0SlNWYWx1ZVRvSW50MzIoRXhlY1N0YXRlKiBleGVjLCBFbmNv
ZGVkSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKS50
b0ludDMyKGV4ZWMpOwotfQotCi1zdGF0aWMgZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
Q29udmVydEpTVmFsdWVUb0RvdWJsZShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHZh
bHVlKQotewotICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUodmFsdWUpLnRvTnVtYmVyKGV4ZWMp
OwotfQotCi0jaWYgIUNQVShYODYpICYmICFDUFUoWDg2XzY0KQotc3RhdGljIGludDMyX3QgSklU
X09QRVJBVElPTiBvcGVyYXRpb25EaXYoaW50MzJfdCBsZWZ0LCBpbnQzMl90IHJpZ2h0KQotewot
ICAgIHJldHVybiBsZWZ0IC8gcmlnaHQ7Ci19Ci0KLXN0YXRpYyBpbnQzMl90IEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uTW9kKGludDMyX3QgbGVmdCwgaW50MzJfdCByaWdodCkKLXsKLSAgICByZXR1
cm4gbGVmdCAlIHJpZ2h0OwotfQotCi1zdGF0aWMgdWludDMyX3QgSklUX09QRVJBVElPTiBvcGVy
YXRpb25VbnNpZ25lZERpdih1aW50MzJfdCBsZWZ0LCB1aW50MzJfdCByaWdodCkKLXsKLSAgICBy
ZXR1cm4gbGVmdCAvIHJpZ2h0OwotfQotCi1zdGF0aWMgdWludDMyX3QgSklUX09QRVJBVElPTiBv
cGVyYXRpb25VbnNpZ25lZE1vZCh1aW50MzJfdCBsZWZ0LCB1aW50MzJfdCByaWdodCkKLXsKLSAg
ICByZXR1cm4gbGVmdCAlIHJpZ2h0OwotfQotI2VuZGlmCi0KLSNpZiAhVVNFKEpTVkFMVUU2NCkK
LXN0YXRpYyBkb3VibGUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db252ZXJ0VW5zaWduZWRJbnQz
MlRvRG91YmxlKHVpbnQzMl90IHZhbHVlKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxkb3Vi
bGU+KHZhbHVlKTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgc2l6ZV90IHNpemVPZk1lbW9yeVR5cGUo
V0FTTU1lbW9yeVR5cGUgbWVtb3J5VHlwZSkKLXsKLSAgICBzd2l0Y2ggKG1lbW9yeVR5cGUpIHsK
LSAgICBjYXNlIFdBU01NZW1vcnlUeXBlOjpJODoKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgY2Fz
ZSBXQVNNTWVtb3J5VHlwZTo6STE2OgotICAgICAgICByZXR1cm4gMjsKLSAgICBjYXNlIFdBU01N
ZW1vcnlUeXBlOjpJMzI6Ci0gICAgY2FzZSBXQVNNTWVtb3J5VHlwZTo6RjMyOgotICAgICAgICBy
ZXR1cm4gNDsKLSAgICBjYXNlIFdBU01NZW1vcnlUeXBlOjpGNjQ6Ci0gICAgICAgIHJldHVybiA4
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLSAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwotfQotCi1jbGFz
cyBXQVNNRnVuY3Rpb25Db21waWxlciA6IHByaXZhdGUgQ0NhbGxIZWxwZXJzIHsKLXB1YmxpYzoK
LSAgICB0eXBlZGVmIGludCBFeHByZXNzaW9uOwotICAgIHR5cGVkZWYgaW50IFN0YXRlbWVudDsK
LSAgICB0eXBlZGVmIGludCBFeHByZXNzaW9uTGlzdDsKLSAgICBzdHJ1Y3QgTWVtb3J5QWRkcmVz
cyB7Ci0gICAgICAgIE1lbW9yeUFkZHJlc3Modm9pZCopIHsgfQotICAgICAgICBNZW1vcnlBZGRy
ZXNzKGludCwgdWludDMyX3Qgb2Zmc2V0KQotICAgICAgICAgICAgOiBvZmZzZXQob2Zmc2V0KQot
ICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgdWludDMyX3Qgb2Zmc2V0OwotICAgIH07Ci0g
ICAgc3RydWN0IEp1bXBUYXJnZXQgewotICAgICAgICBMYWJlbCBsYWJlbDsKLSAgICAgICAgSnVt
cExpc3QganVtcExpc3Q7Ci0gICAgfTsKLSAgICBlbnVtIGNsYXNzIEp1bXBDb25kaXRpb24geyBa
ZXJvLCBOb25aZXJvIH07Ci0KLSAgICBXQVNNRnVuY3Rpb25Db21waWxlcihWTSYgdm0sIENvZGVC
bG9jayogY29kZUJsb2NrLCBKU1dBU01Nb2R1bGUqIG1vZHVsZSwgdW5zaWduZWQgc3RhY2tIZWln
aHQpCi0gICAgICAgIDogQ0NhbGxIZWxwZXJzKCZ2bSwgY29kZUJsb2NrKQotICAgICAgICAsIG1f
bW9kdWxlKG1vZHVsZSkKLSAgICAgICAgLCBtX3N0YWNrSGVpZ2h0KHN0YWNrSGVpZ2h0KQotICAg
IHsKLSAgICB9Ci0KLSAgICB2b2lkIHN0YXJ0RnVuY3Rpb24oY29uc3QgVmVjdG9yPFdBU01UeXBl
PiYgYXJndW1lbnRzLCB1aW50MzJfdCBudW1iZXJPZkkzMkxvY2FsVmFyaWFibGVzLCB1aW50MzJf
dCBudW1iZXJPZkYzMkxvY2FsVmFyaWFibGVzLCB1aW50MzJfdCBudW1iZXJPZkY2NExvY2FsVmFy
aWFibGVzKQotICAgIHsKLSAgICAgICAgbV9jYWxsZWVTYXZlU3BhY2UgPSBXVEY6OnJvdW5kVXBU
b011bHRpcGxlT2Yoc2l6ZW9mKFN0YWNrU2xvdCksIFJlZ2lzdGVyU2V0Ojp3ZWJBc3NlbWJseUNh
bGxlZVNhdmVSZWdpc3RlcnMoKS5udW1iZXJPZlNldFJlZ2lzdGVycygpICogc2l6ZW9mKHZvaWQq
KSk7Ci0gICAgICAgIG1fY29kZUJsb2NrLT5zZXRDYWxsZWVTYXZlUmVnaXN0ZXJzKFJlZ2lzdGVy
U2V0Ojp3ZWJBc3NlbWJseUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Ci0KLSAgICAgICAgZW1pdEZ1
bmN0aW9uUHJvbG9ndWUoKTsKLSAgICAgICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKG1fY29k
ZUJsb2NrLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOwotCi0gICAgICAgIG1fYmVnaW5MYWJl
bCA9IGxhYmVsKCk7Ci0KLSAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtbV9jYWxsZWVTYXZl
U3BhY2UgLSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMo
KSwgbV9zdGFja0hlaWdodCkgKiBzaXplb2YoU3RhY2tTbG90KSAtIG1heEZyYW1lRXh0ZW50Rm9y
U2xvd1BhdGhDYWxsKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1Qx
KTsKLSAgICAgICAgbV9zdGFja092ZXJmbG93ID0gYnJhbmNoUHRyKEFib3ZlLCBBYnNvbHV0ZUFk
ZHJlc3MobV92bS0+YWRkcmVzc09mU29mdFN0YWNrTGltaXQoKSksIEdQUkluZm86OnJlZ1QxKTsK
LQotICAgICAgICBtb3ZlKEdQUkluZm86OnJlZ1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0g
ICAgICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7Ci0KLSAgICAgICAgZW1pdFNhdmVD
YWxsZWVTYXZlcygpOwotICAgICAgICBlbWl0TWF0ZXJpYWxpemVUYWdDaGVja1JlZ2lzdGVycygp
OwotCi0gICAgICAgIG1fbnVtYmVyT2ZMb2NhbHMgPSBhcmd1bWVudHMuc2l6ZSgpICsgbnVtYmVy
T2ZJMzJMb2NhbFZhcmlhYmxlcyArIG51bWJlck9mRjMyTG9jYWxWYXJpYWJsZXMgKyBudW1iZXJP
ZkY2NExvY2FsVmFyaWFibGVzOwotCi0gICAgICAgIHVuc2lnbmVkIGxvY2FsSW5kZXggPSAwOwot
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ3VtZW50cy5zaXplKCk7ICsraSkgewot
ICAgICAgICAgICAgLy8gRklYTUU6IE5vIG5lZWQgdG8gZG8gdHlwZSBjb252ZXJzaW9uIGlmIHRo
ZSBjYWxsZXIgaXMgYSBXZWJBc3NlbWJseSBmdW5jdGlvbi4KLSAgICAgICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDkzMTAKLSAgICAgICAgICAgIEFk
ZHJlc3MgYWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lOjphcmd1
bWVudE9mZnNldChpKSAqIHNpemVvZihSZWdpc3RlcikpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MoR1BSSW5mbzo6cmVnVDApOwotI2Vsc2UK
LSAgICAgICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhHUFJJbmZvOjpyZWdUMSwgR1BSSW5m
bzo6cmVnVDApOwotI2VuZGlmCi0gICAgICAgICAgICBsb2FkVmFsdWUoYWRkcmVzcywgdmFsdWVS
ZWdzKTsKLSAgICAgICAgICAgIHN3aXRjaCAoYXJndW1lbnRzW2ldKSB7Ci0gICAgICAgICAgICBj
YXNlIFdBU01UeXBlOjpJMzI6Ci0gICAgICAgICAgICAgICAgY29udmVydFZhbHVlVG9JbnQzMih2
YWx1ZVJlZ3MsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgICAgICBzdG9yZTMyKEdQUklu
Zm86OnJlZ1QwLCBsb2NhbEFkZHJlc3MobG9jYWxJbmRleCsrKSk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdBU01UeXBlOjpGMzI6Ci0gICAgICAgICAgICBjYXNl
IFdBU01UeXBlOjpGNjQ6Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAgICBjb252
ZXJ0VmFsdWVUb0RvdWJsZSh2YWx1ZVJlZ3MsIEZQUkluZm86OmZwUmVnVDAsIEdQUkluZm86OnJl
Z1QxKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgY29udmVydFZhbHVlVG9Eb3VibGUodmFsdWVS
ZWdzLCBGUFJJbmZvOjpmcFJlZ1QwLCBHUFJJbmZvOjpyZWdUMiwgRlBSSW5mbzo6ZnBSZWdUMSk7
Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzW2ldID09IFdBU01UeXBlOjpG
MzIpCi0gICAgICAgICAgICAgICAgICAgIGNvbnZlcnREb3VibGVUb0Zsb2F0KEZQUkluZm86OmZw
UmVnVDAsIEZQUkluZm86OmZwUmVnVDApOwotICAgICAgICAgICAgICAgIHN0b3JlRG91YmxlKEZQ
UkluZm86OmZwUmVnVDAsIGxvY2FsQWRkcmVzcyhsb2NhbEluZGV4KyspKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZm9yICh1
aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9mSTMyTG9jYWxWYXJpYWJsZXM7ICsraSkKLSAgICAg
ICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKDApLCBsb2NhbEFkZHJlc3MobG9jYWxJbmRleCsr
KSk7Ci0gICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkYzMkxvY2FsVmFy
aWFibGVzOyArK2kpCi0gICAgICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMigwKSwgbG9jYWxB
ZGRyZXNzKGxvY2FsSW5kZXgrKykpOwotICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwg
bnVtYmVyT2ZGNjRMb2NhbFZhcmlhYmxlczsgKytpKSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICAgICAgICAgIHN0b3JlNjQoVHJ1c3RlZEltbTY0KDApLCBsb2NhbEFkZHJlc3MobG9jYWxJbmRl
eCsrKSk7Ci0jZWxzZQotICAgICAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoMCksIGxvY2Fs
QWRkcmVzcyhsb2NhbEluZGV4KSk7Ci0gICAgICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMigw
KSwgbG9jYWxBZGRyZXNzKGxvY2FsSW5kZXgpLndpdGhPZmZzZXQoNCkpOwotICAgICAgICAgICAg
bG9jYWxJbmRleCsrOwotI2VuZGlmCi0gICAgICAgIH0KLQotICAgICAgICBtX2NvZGVCbG9jay0+
c2V0TnVtUGFyYW1ldGVycygxICsgYXJndW1lbnRzLnNpemUoKSk7Ci0gICAgfQotCi0gICAgdm9p
ZCBlbmRGdW5jdGlvbigpCi0gICAgewotICAgICAgICBBU1NFUlQoIW1fdGVtcFN0YWNrVG9wKTsK
LQotICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZXNlIGlmIHRoZSBsYXN0IHN0YXRlbWVudCBp
cyBhIHJldHVybiBzdGF0ZW1lbnQuCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgSlNWYWx1
ZVJlZ3MgcmV0dXJuVmFsdWVSZWdzKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSNlbHNlCi0g
ICAgICAgIEpTVmFsdWVSZWdzIHJldHVyblZhbHVlUmVncyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
UjIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSNlbmRpZgotICAgICAgICBtb3ZlVHJ1c3Rl
ZFZhbHVlKGpzVW5kZWZpbmVkKCksIHJldHVyblZhbHVlUmVncyk7Ci0gICAgICAgIGVtaXRSZXN0
b3JlQ2FsbGVlU2F2ZXMoKTsKLSAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKLSAgICAg
ICAgcmV0KCk7Ci0KLSAgICAgICAgbV9zdGFja092ZXJmbG93LmxpbmsodGhpcyk7Ci0gICAgICAg
IGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKLSAgICAgICAgICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIoLW1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIpOwotICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jaykpOwotICAgICAgICBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
KG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9yKTsKLQotICAgICAgICAvLyBGSVhNRTog
SW1wbGVtZW50IGFyaXR5IGNoZWNrLgotICAgICAgICBMYWJlbCBhcml0eUNoZWNrID0gbGFiZWwo
KTsKLSAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKLSAgICAgICAgZW1pdFB1dFRvQ2Fs
bEZyYW1lSGVhZGVyKG1fY29kZUJsb2NrLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOwotICAg
ICAgICBqdW1wKG1fYmVnaW5MYWJlbCk7Ci0KLSAgICAgICAgaWYgKCFtX2RpdmlkZUVycm9ySnVt
cExpc3QuZW1wdHkoKSkgewotICAgICAgICAgICAgbV9kaXZpZGVFcnJvckp1bXBMaXN0Lmxpbmso
dGhpcyk7Ci0KLSAgICAgICAgICAgIHNldHVwQXJndW1lbnRzRXhlY1N0YXRlKCk7Ci0gICAgICAg
ICAgICBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93RGl2aWRlRXJy
b3IpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFtX291dE9mQm91bmRzRXJyb3JKdW1wTGlz
dC5lbXB0eSgpKSB7Ci0gICAgICAgICAgICBtX291dE9mQm91bmRzRXJyb3JKdW1wTGlzdC5saW5r
KHRoaXMpOwotCi0gICAgICAgICAgICBzZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOwotICAgICAg
ICAgICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJvd091dE9mQm91
bmRzQWNjZXNzRXJyb3IpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFtX2V4Y2VwdGlvbkNo
ZWNrcy5lbXB0eSgpKSB7Ci0gICAgICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrcy5saW5rKHRoaXMp
OwotCi0gICAgICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVz
QnVmZmVyKCk7Ci0KLSAgICAgICAgICAgIC8vIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIgaXMgcGFz
c2VkIHR3byBhcmd1bWVudHMsIHRoZSBWTSBhbmQgdGhlIGV4ZWMgKHRoZSBDYWxsRnJhbWUqKS4K
LSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cih2bSgpKSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIwKTsKLSAgICAgICAgICAgIG1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUklu
Zm86OmFyZ3VtZW50R1BSMSk7Ci0KLSNpZiBDUFUoWDg2KQotICAgICAgICAgICAgLy8gRklYTUU6
IHNob3VsZCB1c2UgdGhlIGNhbGwgYWJzdHJhY3Rpb24sIGJ1dCB0aGlzIGlzIGN1cnJlbnRseSBp
biB0aGUgU3BlY3VsYXRpdmVKSVQgbGF5ZXIhCi0gICAgICAgICAgICBwb2tlKEdQUkluZm86OmFy
Z3VtZW50R1BSMCk7Ci0gICAgICAgICAgICBwb2tlKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgMSk7
Ci0jZW5kaWYKLSAgICAgICAgICAgIG1fY2FsbHMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGNhbGwo
KSwgRnVuY3Rpb25QdHIobG9va3VwRXhjZXB0aW9uSGFuZGxlckZyb21DYWxsZXJGcmFtZSkudmFs
dWUoKSkpOwotICAgICAgICAgICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcigpOwotICAgICAgICB9
Ci0KLSAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV92bSwgKnRoaXMsIG1fY29kZUJs
b2NrLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkKTsKLQotICAgICAgICBmb3IgKGNvbnN0IGF1
dG8mIGl0ZXJhdG9yIDogbV9jYWxscykKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoaXRl
cmF0b3IuZmlyc3QsIEZ1bmN0aW9uUHRyKGl0ZXJhdG9yLnNlY29uZCkpOwotCi0gICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jYWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgICAgICBDYWxsQ29tcGlsYXRpb25JbmZvJiBjb21waWxhdGlvbkluZm8gPSBtX2Nh
bGxDb21waWxhdGlvbkluZm9baV07Ci0gICAgICAgICAgICBDYWxsTGlua0luZm8mIGluZm8gPSAq
Y29tcGlsYXRpb25JbmZvLmNhbGxMaW5rSW5mbzsKLSAgICAgICAgICAgIGluZm8uc2V0Q2FsbExv
Y2F0aW9ucyhwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoY29tcGlsYXRpb25JbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbiksCi0gICAgICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25P
Zihjb21waWxhdGlvbkluZm8uaG90UGF0aEJlZ2luKSwKLSAgICAgICAgICAgICAgICBwYXRjaEJ1
ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoY29tcGlsYXRpb25JbmZvLmhvdFBhdGhPdGhlcikpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHdpdGhBcml0eUNoZWNr
ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihhcml0eUNoZWNrKTsKLSAgICAgICAgQ29kZVJlZiBy
ZXN1bHQgPSBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIkJhc2VsaW5lIEpJVCBjb2RlIGZv
ciBXZWJBc3NlbWJseSIpKTsKLSAgICAgICAgbV9jb2RlQmxvY2stPnNldEpJVENvZGUoYWRvcHRS
ZWYobmV3IERpcmVjdEpJVENvZGUocmVzdWx0LCB3aXRoQXJpdHlDaGVjaywgSklUQ29kZTo6QmFz
ZWxpbmVKSVQpKSk7Ci0gICAgICAgIG1fY29kZUJsb2NrLT5jYXBhYmlsaXR5TGV2ZWwoKTsKLSAg
ICB9Ci0KLSAgICBpbnQgYnVpbGRTZXRMb2NhbChXQVNNT3BLaW5kIG9wS2luZCwgdWludDMyX3Qg
bG9jYWxJbmRleCwgaW50LCBXQVNNVHlwZSB0eXBlKQotICAgIHsKLSAgICAgICAgc3dpdGNoICh0
eXBlKSB7Ci0gICAgICAgIGNhc2UgV0FTTVR5cGU6OkkzMjoKLSAgICAgICAgY2FzZSBXQVNNVHlw
ZTo6RjMyOgotICAgICAgICAgICAgbG9hZDMyKHRlbXBvcmFyeUFkZHJlc3MobV90ZW1wU3RhY2tU
b3AgLSAxKSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgc3RvcmUzMihHUFJJbmZvOjpy
ZWdUMCwgbG9jYWxBZGRyZXNzKGxvY2FsSW5kZXgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIFdBU01UeXBlOjpGNjQ6Ci0gICAgICAgICAgICBsb2FkRG91YmxlKHRlbXBvcmFy
eUFkZHJlc3MobV90ZW1wU3RhY2tUb3AgLSAxKSwgRlBSSW5mbzo6ZnBSZWdUMCk7Ci0gICAgICAg
ICAgICBzdG9yZURvdWJsZShGUFJJbmZvOjpmcFJlZ1QwLCBsb2NhbEFkZHJlc3MobG9jYWxJbmRl
eCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAob3BLaW5kID09IFdB
U01PcEtpbmQ6OlN0YXRlbWVudCkKLSAgICAgICAgICAgIG1fdGVtcFN0YWNrVG9wLS07Ci0gICAg
ICAgIHJldHVybiBVTlVTRUQ7Ci0gICAgfQotCi0gICAgaW50IGJ1aWxkU2V0R2xvYmFsKFdBU01P
cEtpbmQgb3BLaW5kLCB1aW50MzJfdCBnbG9iYWxJbmRleCwgaW50LCBXQVNNVHlwZSB0eXBlKQot
ICAgIHsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKCZtX21vZHVsZS0+Z2xvYmFsVmFyaWFi
bGVzKClbZ2xvYmFsSW5kZXhdKSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICBzd2l0Y2ggKHR5
cGUpIHsKLSAgICAgICAgY2FzZSBXQVNNVHlwZTo6STMyOgotICAgICAgICBjYXNlIFdBU01UeXBl
OjpGMzI6Ci0gICAgICAgICAgICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVzcyhtX3RlbXBTdGFja1Rv
cCAtIDEpLCBHUFJJbmZvOjpyZWdUMSk7Ci0gICAgICAgICAgICBzdG9yZTMyKEdQUkluZm86OnJl
Z1QxLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBX
QVNNVHlwZTo6RjY0OgotICAgICAgICAgICAgbG9hZERvdWJsZSh0ZW1wb3JhcnlBZGRyZXNzKG1f
dGVtcFN0YWNrVG9wIC0gMSksIEZQUkluZm86OmZwUmVnVDApOwotICAgICAgICAgICAgc3RvcmVE
b3VibGUoRlBSSW5mbzo6ZnBSZWdUMCwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgfQotICAgICAgICBpZiAob3BLaW5kID09IFdBU01PcEtpbmQ6OlN0YXRlbWVudCkK
LSAgICAgICAgICAgIG1fdGVtcFN0YWNrVG9wLS07Ci0gICAgICAgIHJldHVybiBVTlVTRUQ7Ci0g
ICAgfQotCi0gICAgdm9pZCBidWlsZFJldHVybihpbnQsIFdBU01FeHByZXNzaW9uVHlwZSByZXR1
cm5UeXBlKQotICAgIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBKU1ZhbHVlUmVncyBy
ZXR1cm5WYWx1ZVJlZ3MoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotI2Vsc2UKLSAgICAgICAg
SlNWYWx1ZVJlZ3MgcmV0dXJuVmFsdWVSZWdzKEdQUkluZm86OnJldHVyblZhbHVlR1BSMiwgR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotI2VuZGlmCi0gICAgICAgIHN3aXRjaCAocmV0dXJuVHlw
ZSkgewotICAgICAgICBjYXNlIFdBU01FeHByZXNzaW9uVHlwZTo6STMyOgotICAgICAgICAgICAg
bG9hZDMyKHRlbXBvcmFyeUFkZHJlc3MobV90ZW1wU3RhY2tUb3AgLSAxKSwgR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBvcjY0KEdQUklu
Zm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotI2Vs
c2UKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKLSNlbmRpZgotICAgICAgICAgICAgbV90ZW1wU3RhY2tU
b3AtLTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdBU01FeHByZXNzaW9uVHlw
ZTo6RjMyOgotICAgICAgICBjYXNlIFdBU01FeHByZXNzaW9uVHlwZTo6RjY0OgotICAgICAgICAg
ICAgbG9hZERvdWJsZSh0ZW1wb3JhcnlBZGRyZXNzKG1fdGVtcFN0YWNrVG9wIC0gMSksIEZQUklu
Zm86OmZwUmVnVDApOwotICAgICAgICAgICAgaWYgKHJldHVyblR5cGUgPT0gV0FTTUV4cHJlc3Np
b25UeXBlOjpGMzIpCi0gICAgICAgICAgICAgICAgY29udmVydEZsb2F0VG9Eb3VibGUoRlBSSW5m
bzo6ZnBSZWdUMCwgRlBSSW5mbzo6ZnBSZWdUMCk7Ci0gICAgICAgICAgICBjb252ZXJ0RG91Ymxl
VG9WYWx1ZShGUFJJbmZvOjpmcFJlZ1QwLCByZXR1cm5WYWx1ZVJlZ3MpOwotICAgICAgICAgICAg
bV90ZW1wU3RhY2tUb3AtLTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdBU01F
eHByZXNzaW9uVHlwZTo6Vm9pZDoKLSAgICAgICAgICAgIG1vdmVUcnVzdGVkVmFsdWUoanNVbmRl
ZmluZWQoKSwgcmV0dXJuVmFsdWVSZWdzKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwotICAgICAgICBlbWl0RnVuY3Rpb25FcGls
b2d1ZSgpOwotICAgICAgICByZXQoKTsKLSAgICB9Ci0KLSAgICBpbnQgYnVpbGRJbW1lZGlhdGVJ
MzIodWludDMyX3QgaW1tZWRpYXRlKQotICAgIHsKLSAgICAgICAgc3RvcmUzMihJbW0zMihpbW1l
ZGlhdGUpLCB0ZW1wb3JhcnlBZGRyZXNzKG1fdGVtcFN0YWNrVG9wKyspKTsKLSAgICAgICAgcmV0
dXJuIFVOVVNFRDsKLSAgICB9Ci0KLSAgICBpbnQgYnVpbGRJbW1lZGlhdGVGMzIoZmxvYXQgaW1t
ZWRpYXRlKQotICAgIHsKLSAgICAgICAgc3RvcmUzMihJbW0zMihiaXR3aXNlX2Nhc3Q8aW50MzJf
dD4oaW1tZWRpYXRlKSksIHRlbXBvcmFyeUFkZHJlc3MobV90ZW1wU3RhY2tUb3ArKykpOwotICAg
ICAgICByZXR1cm4gVU5VU0VEOwotICAgIH0KLQotICAgIGludCBidWlsZEltbWVkaWF0ZUY2NChk
b3VibGUgaW1tZWRpYXRlKQotICAgIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBzdG9y
ZTY0KEltbTY0KGJpdHdpc2VfY2FzdDxpbnQ2NF90PihpbW1lZGlhdGUpKSwgdGVtcG9yYXJ5QWRk
cmVzcyhtX3RlbXBTdGFja1RvcCsrKSk7Ci0jZWxzZQotICAgICAgICB1bmlvbiB7Ci0gICAgICAg
ICAgICBkb3VibGUgZG91YmxlVmFsdWU7Ci0gICAgICAgICAgICBpbnQzMl90IGludDMyVmFsdWVz
WzJdOwotICAgICAgICB9IHUgPSB7IGltbWVkaWF0ZSB9OwotICAgICAgICBtX3RlbXBTdGFja1Rv
cCsrOwotICAgICAgICBzdG9yZTMyKEltbTMyKHUuaW50MzJWYWx1ZXNbMF0pLCB0ZW1wb3JhcnlB
ZGRyZXNzKG1fdGVtcFN0YWNrVG9wIC0gMSkpOwotICAgICAgICBzdG9yZTMyKEltbTMyKHUuaW50
MzJWYWx1ZXNbMV0pLCB0ZW1wb3JhcnlBZGRyZXNzKG1fdGVtcFN0YWNrVG9wIC0gMSkud2l0aE9m
ZnNldCg0KSk7Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9Ci0KLSAgICBp
bnQgYnVpbGRHZXRMb2NhbCh1aW50MzJfdCBsb2NhbEluZGV4LCBXQVNNVHlwZSB0eXBlKQotICAg
IHsKLSAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgV0FTTVR5cGU6OkkzMjoK
LSAgICAgICAgY2FzZSBXQVNNVHlwZTo6RjMyOgotICAgICAgICAgICAgbG9hZDMyKGxvY2FsQWRk
cmVzcyhsb2NhbEluZGV4KSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgc3RvcmUzMihH
UFJJbmZvOjpyZWdUMCwgdGVtcG9yYXJ5QWRkcmVzcyhtX3RlbXBTdGFja1RvcCsrKSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXQVNNVHlwZTo6RjY0OgotICAgICAgICAgICAg
bG9hZERvdWJsZShsb2NhbEFkZHJlc3MobG9jYWxJbmRleCksIEZQUkluZm86OmZwUmVnVDApOwot
ICAgICAgICAgICAgc3RvcmVEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMCwgdGVtcG9yYXJ5QWRkcmVz
cyhtX3RlbXBTdGFja1RvcCsrKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiBVTlVTRUQ7Ci0gICAgfQotCi0gICAgaW50IGJ1aWxkR2V0R2xvYmFsKHVpbnQzMl90
IGdsb2JhbEluZGV4LCBXQVNNVHlwZSB0eXBlKQotICAgIHsKLSAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKCZtX21vZHVsZS0+Z2xvYmFsVmFyaWFibGVzKClbZ2xvYmFsSW5kZXhdKSwgR1BSSW5m
bzo6cmVnVDApOwotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBXQVNNVHlw
ZTo6STMyOgotICAgICAgICBjYXNlIFdBU01UeXBlOjpGMzI6Ci0gICAgICAgICAgICBsb2FkMzIo
R1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgIHN0b3JlMzIoR1BS
SW5mbzo6cmVnVDAsIHRlbXBvcmFyeUFkZHJlc3MobV90ZW1wU3RhY2tUb3ArKykpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV0FTTVR5cGU6OkY2NDoKLSAgICAgICAgICAgIGxv
YWREb3VibGUoR1BSSW5mbzo6cmVnVDAsIEZQUkluZm86OmZwUmVnVDApOwotICAgICAgICAgICAg
c3RvcmVEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMCwgdGVtcG9yYXJ5QWRkcmVzcyhtX3RlbXBTdGFj
a1RvcCsrKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBVTlVT
RUQ7Ci0gICAgfQotCi0gICAgaW50IGJ1aWxkQ29udmVydFR5cGUoaW50LCBXQVNNRXhwcmVzc2lv
blR5cGUgZnJvbVR5cGUsIFdBU01FeHByZXNzaW9uVHlwZSB0b1R5cGUsIFdBU01UeXBlQ29udmVy
c2lvbiBjb252ZXJzaW9uKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChmcm9tVHlwZSkgewotICAg
ICAgICBjYXNlIFdBU01FeHByZXNzaW9uVHlwZTo6STMyOgotICAgICAgICAgICAgbG9hZDMyKHRl
bXBvcmFyeUFkZHJlc3MobV90ZW1wU3RhY2tUb3AgLSAxKSwgR1BSSW5mbzo6cmVnVDApOwotICAg
ICAgICAgICAgQVNTRVJUKHRvVHlwZSA9PSBXQVNNRXhwcmVzc2lvblR5cGU6OkYzMiB8fCB0b1R5
cGUgPT0gV0FTTUV4cHJlc3Npb25UeXBlOjpGNjQpOwotICAgICAgICAgICAgaWYgKGNvbnZlcnNp
b24gPT0gV0FTTVR5cGVDb252ZXJzaW9uOjpDb252ZXJ0U2lnbmVkKQotICAgICAgICAgICAgICAg
IGNvbnZlcnRJbnQzMlRvRG91YmxlKEdQUkluZm86OnJlZ1QwLCBGUFJJbmZvOjpmcFJlZ1QwKTsK
LSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIEFTU0VSVChjb252ZXJzaW9uID09
IFdBU01UeXBlQ29udmVyc2lvbjo6Q29udmVydFVuc2lnbmVkKTsKLSNpZiBVU0UoSlNWQUxVRTY0
KQotICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQ2NFRvRG91YmxlKEdQUkluZm86OnJlZ1QwLCBG
UFJJbmZvOjpmcFJlZ1QwKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db252ZXJ0VW5zaWduZWRJbnQzMlRvRG91YmxlLCBHUFJJbmZvOjpyZWdUMCwgRlBS
SW5mbzo6ZnBSZWdUMCk7Ci0jZW5kaWYKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh0
b1R5cGUgPT0gV0FTTUV4cHJlc3Npb25UeXBlOjpGMzIpCi0gICAgICAgICAgICAgICAgY29udmVy
dERvdWJsZVRvRmxvYXQoRlBSSW5mbzo6ZnBSZWdUMCwgRlBSSW5mbzo6ZnBSZWdUMCk7Ci0gICAg
ICAgICAgICBzdG9yZURvdWJsZShGUFJJbmZvOjpmcFJlZ1QwLCB0ZW1wb3JhcnlBZGRyZXNzKG1f
dGVtcFN0YWNrVG9wIC0gMSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV0FT
TUV4cHJlc3Npb25UeXBlOjpGMzI6Ci0gICAgICAgICAgICBsb2FkRG91YmxlKHRlbXBvcmFyeUFk
ZHJlc3MobV90ZW1wU3RhY2tUb3AgLSAxKSwgRlBSSW5mbzo6ZnBSZWdUMCk7Ci0gICAgICAgICAg
ICBzd2l0Y2ggKHRvVHlwZSkgewotICAgICAgICAgICAgY2FzZSBXQVNNRXhwcmVzc2lvblR5cGU6
OkkzMjoKLSAgICAgICAgICAgICAgICBBU1NFUlQoY29udmVyc2lvbiA9PSBXQVNNVHlwZUNvbnZl
cnNpb246OkNvbnZlcnRTaWduZWQpOwotICAgICAgICAgICAgICAgIGNvbnZlcnRGbG9hdFRvRG91
YmxlKEZQUkluZm86OmZwUmVnVDAsIEZQUkluZm86OmZwUmVnVDApOwotICAgICAgICAgICAgICAg
IHRydW5jYXRlRG91YmxlVG9JbnQzMihGUFJJbmZvOjpmcFJlZ1QwLCBHUFJJbmZvOjpyZWdUMCk7
Ci0gICAgICAgICAgICAgICAgc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgdGVtcG9yYXJ5QWRkcmVz
cyhtX3RlbXBTdGFja1RvcCAtIDEpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGNhc2UgV0FTTUV4cHJlc3Npb25UeXBlOjpGNjQ6Ci0gICAgICAgICAgICAgICAgQVNTRVJU
KGNvbnZlcnNpb24gPT0gV0FTTVR5cGVDb252ZXJzaW9uOjpQcm9tb3RlKTsKLSAgICAgICAgICAg
ICAgICBjb252ZXJ0RmxvYXRUb0RvdWJsZShGUFJJbmZvOjpmcFJlZ1QwLCBGUFJJbmZvOjpmcFJl
Z1QwKTsKLSAgICAgICAgICAgICAgICBzdG9yZURvdWJsZShGUFJJbmZvOjpmcFJlZ1QwLCB0ZW1w
b3JhcnlBZGRyZXNzKG1fdGVtcFN0YWNrVG9wIC0gMSkpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdB
U01FeHByZXNzaW9uVHlwZTo6RjY0OgotICAgICAgICAgICAgbG9hZERvdWJsZSh0ZW1wb3JhcnlB
ZGRyZXNzKG1fdGVtcFN0YWNrVG9wIC0gMSksIEZQUkluZm86OmZwUmVnVDApOwotICAgICAgICAg
ICAgc3dpdGNoICh0b1R5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgV0FTTUV4cHJlc3Npb25UeXBl
OjpJMzI6Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGNvbnZlcnNpb24gPT0gV0FTTVR5cGVDb252
ZXJzaW9uOjpDb252ZXJ0U2lnbmVkKTsKLSAgICAgICAgICAgICAgICB0cnVuY2F0ZURvdWJsZVRv
SW50MzIoRlBSSW5mbzo6ZnBSZWdUMCwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAg
IHN0b3JlMzIoR1BSSW5mbzo6cmVnVDAsIHRlbXBvcmFyeUFkZHJlc3MobV90ZW1wU3RhY2tUb3Ag
LSAxKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdBU01FeHBy
ZXNzaW9uVHlwZTo6RjMyOgotICAgICAgICAgICAgICAgIEFTU0VSVChjb252ZXJzaW9uID09IFdB
U01UeXBlQ29udmVyc2lvbjo6RGVtb3RlKTsKLSAgICAgICAgICAgICAgICBjb252ZXJ0RG91Ymxl
VG9GbG9hdChGUFJJbmZvOjpmcFJlZ1QwLCBGUFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgICAg
ICAgICBzdG9yZURvdWJsZShGUFJJbmZvOjpmcFJlZ1QwLCB0ZW1wb3JhcnlBZGRyZXNzKG1fdGVt
cFN0YWNrVG9wIC0gMSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAg
ICB9Ci0KLSAgICBpbnQgYnVpbGRMb2FkKGNvbnN0IE1lbW9yeUFkZHJlc3MmIG1lbW9yeUFkZHJl
c3MsIFdBU01FeHByZXNzaW9uVHlwZSBleHByZXNzaW9uVHlwZSwgV0FTTU1lbW9yeVR5cGUgbWVt
b3J5VHlwZSwgTWVtb3J5QWNjZXNzQ29udmVyc2lvbiBjb252ZXJzaW9uKQotICAgIHsKLSAgICAg
ICAgY29uc3QgQXJyYXlCdWZmZXIqIGFycmF5QnVmZmVyID0gbV9tb2R1bGUtPmFycmF5QnVmZmVy
KCktPmltcGwoKTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGFycmF5QnVmZmVyLT5kYXRh
KCkpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgIGxvYWQzMih0ZW1wb3JhcnlBZGRyZXNzKG1f
dGVtcFN0YWNrVG9wIC0gMSksIEdQUkluZm86OnJlZ1QxKTsKLSAgICAgICAgaWYgKG1lbW9yeUFk
ZHJlc3Mub2Zmc2V0KQotICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKG1lbW9yeUFkZHJl
c3Mub2Zmc2V0KSwgR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QxKTsKLSAgICAgICAgYW5k
MzIoVHJ1c3RlZEltbTMyKH4oc2l6ZU9mTWVtb3J5VHlwZShtZW1vcnlUeXBlKSAtIDEpKSwgR1BS
SW5mbzo6cmVnVDEpOwotCi0gICAgICAgIEFTU0VSVChhcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aCgp
IDwgKHVuc2lnbmVkKSgxIDw8IDMxKSk7Ci0gICAgICAgIGlmIChhcnJheUJ1ZmZlci0+Ynl0ZUxl
bmd0aCgpID49IHNpemVPZk1lbW9yeVR5cGUobWVtb3J5VHlwZSkpCi0gICAgICAgICAgICBtX291
dE9mQm91bmRzRXJyb3JKdW1wTGlzdC5hcHBlbmQoYnJhbmNoMzIoQWJvdmUsIEdQUkluZm86OnJl
Z1QxLCBUcnVzdGVkSW1tMzIoYXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoKSAtIHNpemVPZk1lbW9y
eVR5cGUobWVtb3J5VHlwZSkpKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fb3V0T2ZC
b3VuZHNFcnJvckp1bXBMaXN0LmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgIEJhc2VJbmRleCBh
ZGRyZXNzID0gQmFzZUluZGV4KEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMSwgVGltZXNP
bmUpOwotCi0gICAgICAgIHN3aXRjaCAoZXhwcmVzc2lvblR5cGUpIHsKLSAgICAgICAgY2FzZSBX
QVNNRXhwcmVzc2lvblR5cGU6OkkzMjoKLSAgICAgICAgICAgIHN3aXRjaCAobWVtb3J5VHlwZSkg
ewotICAgICAgICAgICAgY2FzZSBXQVNNTWVtb3J5VHlwZTo6STg6Ci0gICAgICAgICAgICAgICAg
aWYgKGNvbnZlcnNpb24gPT0gTWVtb3J5QWNjZXNzQ29udmVyc2lvbjo6U2lnbkV4dGVuZCkKLSAg
ICAgICAgICAgICAgICAgICAgbG9hZDhTaWduZWRFeHRlbmRUbzMyKGFkZHJlc3MsIEdQUkluZm86
OnJlZ1QwKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKGNvbnZlcnNpb24gPT0gTWVtb3J5QWNjZXNzQ29udmVyc2lvbjo6WmVyb0V4dGVuZCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGxvYWQ4KGFkZHJlc3MsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdB
U01NZW1vcnlUeXBlOjpJMTY6Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnZlcnNpb24gPT0gTWVt
b3J5QWNjZXNzQ29udmVyc2lvbjo6U2lnbkV4dGVuZCkKLSAgICAgICAgICAgICAgICAgICAgbG9h
ZDE2U2lnbmVkRXh0ZW5kVG8zMihhZGRyZXNzLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChjb252ZXJzaW9uID09IE1l
bW9yeUFjY2Vzc0NvbnZlcnNpb246Olplcm9FeHRlbmQpOwotICAgICAgICAgICAgICAgICAgICBs
b2FkMTYoYWRkcmVzcywgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV0FTTU1lbW9yeVR5cGU6OkkzMjoK
LSAgICAgICAgICAgICAgICBsb2FkMzIoYWRkcmVzcywgR1BSSW5mbzo6cmVnVDApOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN0b3JlMzIo
R1BSSW5mbzo6cmVnVDAsIHRlbXBvcmFyeUFkZHJlc3MobV90ZW1wU3RhY2tUb3AgLSAxKSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXQVNNRXhwcmVzc2lvblR5cGU6OkYzMjoK
LSAgICAgICAgICAgIEFTU0VSVChtZW1vcnlUeXBlID09IFdBU01NZW1vcnlUeXBlOjpGMzIgJiYg
Y29udmVyc2lvbiA9PSBNZW1vcnlBY2Nlc3NDb252ZXJzaW9uOjpOb0NvbnZlcnNpb24pOwotICAg
ICAgICAgICAgbG9hZDMyKGFkZHJlc3MsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgIHN0
b3JlMzIoR1BSSW5mbzo6cmVnVDAsIHRlbXBvcmFyeUFkZHJlc3MobV90ZW1wU3RhY2tUb3AgLSAx
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXQVNNRXhwcmVzc2lvblR5cGU6
OkY2NDoKLSAgICAgICAgICAgIEFTU0VSVChtZW1vcnlUeXBlID09IFdBU01NZW1vcnlUeXBlOjpG
NjQgJiYgY29udmVyc2lvbiA9PSBNZW1vcnlBY2Nlc3NDb252ZXJzaW9uOjpOb0NvbnZlcnNpb24p
OwotICAgICAgICAgICAgbG9hZERvdWJsZShhZGRyZXNzLCBGUFJJbmZvOjpmcFJlZ1QwKTsKLSAg
ICAgICAgICAgIHN0b3JlRG91YmxlKEZQUkluZm86OmZwUmVnVDAsIHRlbXBvcmFyeUFkZHJlc3Mo
bV90ZW1wU3RhY2tUb3AgLSAxKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiBVTlVTRUQ7Ci0gICAgfQotCi0gICAgaW50IGJ1aWxkU3RvcmUoV0FTTU9wS2luZCBv
cEtpbmQsIGNvbnN0IE1lbW9yeUFkZHJlc3MmIG1lbW9yeUFkZHJlc3MsIFdBU01FeHByZXNzaW9u
VHlwZSBleHByZXNzaW9uVHlwZSwgV0FTTU1lbW9yeVR5cGUgbWVtb3J5VHlwZSwgaW50KQotICAg
IHsKLSAgICAgICAgY29uc3QgQXJyYXlCdWZmZXIqIGFycmF5QnVmZmVyID0gbV9tb2R1bGUtPmFy
cmF5QnVmZmVyKCktPmltcGwoKTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGFycmF5QnVm
ZmVyLT5kYXRhKCkpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgIGxvYWQzMih0ZW1wb3JhcnlB
ZGRyZXNzKG1fdGVtcFN0YWNrVG9wIC0gMiksIEdQUkluZm86OnJlZ1QxKTsKLSAgICAgICAgaWYg
KG1lbW9yeUFkZHJlc3Mub2Zmc2V0KQotICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKG1l
bW9yeUFkZHJlc3Mub2Zmc2V0KSwgR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QxKTsKLSAg
ICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKH4oc2l6ZU9mTWVtb3J5VHlwZShtZW1vcnlUeXBlKSAt
IDEpKSwgR1BSSW5mbzo6cmVnVDEpOwotCi0gICAgICAgIEFTU0VSVChhcnJheUJ1ZmZlci0+Ynl0
ZUxlbmd0aCgpIDwgKDF1IDw8IDMxKSk7Ci0gICAgICAgIGlmIChhcnJheUJ1ZmZlci0+Ynl0ZUxl
bmd0aCgpID49IHNpemVPZk1lbW9yeVR5cGUobWVtb3J5VHlwZSkpCi0gICAgICAgICAgICBtX291
dE9mQm91bmRzRXJyb3JKdW1wTGlzdC5hcHBlbmQoYnJhbmNoMzIoQWJvdmUsIEdQUkluZm86OnJl
Z1QxLCBUcnVzdGVkSW1tMzIoYXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoKSAtIHNpemVPZk1lbW9y
eVR5cGUobWVtb3J5VHlwZSkpKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fb3V0T2ZC
b3VuZHNFcnJvckp1bXBMaXN0LmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgIEJhc2VJbmRleCBh
ZGRyZXNzID0gQmFzZUluZGV4KEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMSwgVGltZXNP
bmUpOwotCi0gICAgICAgIHN3aXRjaCAoZXhwcmVzc2lvblR5cGUpIHsKLSAgICAgICAgY2FzZSBX
QVNNRXhwcmVzc2lvblR5cGU6OkkzMjoKLSAgICAgICAgICAgIGxvYWQzMih0ZW1wb3JhcnlBZGRy
ZXNzKG1fdGVtcFN0YWNrVG9wIC0gMSksIEdQUkluZm86OnJlZ1QyKTsKLSAgICAgICAgICAgIHN3
aXRjaCAobWVtb3J5VHlwZSkgewotICAgICAgICAgICAgY2FzZSBXQVNNTWVtb3J5VHlwZTo6STg6
Ci0gICAgICAgICAgICAgICAgc3RvcmU4KEdQUkluZm86OnJlZ1QyLCBhZGRyZXNzKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV0FTTU1lbW9yeVR5cGU6OkkxNjoK
LSAgICAgICAgICAgICAgICBzdG9yZTE2KEdQUkluZm86OnJlZ1QyLCBhZGRyZXNzKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV0FTTU1lbW9yeVR5cGU6OkkzMjoK
LSAgICAgICAgICAgICAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1QyLCBhZGRyZXNzKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBXQVNNRXhwcmVzc2lvblR5cGU6OkYzMjoKLSAgICAgICAgICAgIEFTU0VS
VChtZW1vcnlUeXBlID09IFdBU01NZW1vcnlUeXBlOjpGMzIpOwotICAgICAgICAgICAgbG9hZDMy
KHRlbXBvcmFyeUFkZHJlc3MobV90ZW1wU3RhY2tUb3AgLSAxKSwgR1BSSW5mbzo6cmVnVDIpOwot
ICAgICAgICAgICAgc3RvcmUzMihHUFJJbmZvOjpyZWdUMiwgYWRkcmVzcyk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBXQVNNRXhwcmVzc2lvblR5cGU6OkY2NDoKLSAgICAgICAg
ICAgIEFTU0VSVChtZW1vcnlUeXBlID09IFdBU01NZW1vcnlUeXBlOjpGNjQpOwotICAgICAgICAg
ICAgbG9hZERvdWJsZSh0ZW1wb3JhcnlBZGRyZXNzKG1fdGVtcFN0YWNrVG9wIC0gMSksIEZQUklu
Zm86OmZwUmVnVDApOwotICAgICAgICAgICAgc3RvcmVEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMCwg
YWRkcmVzcyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgICAgIG1fdGVtcFN0YWNr
VG9wIC09IDI7Ci0KLSAgICAgICAgaWYgKG9wS2luZCA9PSBXQVNNT3BLaW5kOjpFeHByZXNzaW9u
KSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGV4cHJlc3Npb25UeXBlKSB7Ci0gICAgICAgICAgICBj
YXNlIFdBU01FeHByZXNzaW9uVHlwZTo6STMyOgotICAgICAgICAgICAgY2FzZSBXQVNNRXhwcmVz
c2lvblR5cGU6OkYzMjoKLSAgICAgICAgICAgICAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1QyLCB0
ZW1wb3JhcnlBZGRyZXNzKG1fdGVtcFN0YWNrVG9wKyspKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGNhc2UgV0FTTUV4cHJlc3Npb25UeXBlOjpGNjQ6Ci0gICAgICAgICAg
ICAgICAgc3RvcmVEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMCwgdGVtcG9yYXJ5QWRkcmVzcyhtX3Rl
bXBTdGFja1RvcCsrKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBVTlVTRUQ7Ci0gICAgfQotCi0gICAgaW50IGJ1
aWxkVW5hcnlJMzIoaW50LCBXQVNNT3BFeHByZXNzaW9uSTMyIG9wKQotICAgIHsKLSAgICAgICAg
bG9hZDMyKHRlbXBvcmFyeUFkZHJlc3MobV90ZW1wU3RhY2tUb3AgLSAxKSwgR1BSSW5mbzo6cmVn
VDApOwotICAgICAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lv
bkkzMjo6TmVnYXRlOgotICAgICAgICAgICAgbmVnMzIoR1BSSW5mbzo6cmVnVDApOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6Qml0Tm90Ogot
ICAgICAgICAgICAgeG9yMzIoVHJ1c3RlZEltbTMyKC0xKSwgR1BSSW5mbzo6cmVnVDApOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6Q291bnRM
ZWFkaW5nWmVyb3M6Ci0gICAgICAgICAgICBjb3VudExlYWRpbmdaZXJvczMyKEdQUkluZm86OnJl
Z1QwLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBX
QVNNT3BFeHByZXNzaW9uSTMyOjpMb2dpY2FsTm90OiB7Ci0gICAgICAgICAgICAvLyBGSVhNRTog
RG9uJ3QgdXNlIGJyYW5jaGVzLgotICAgICAgICAgICAgSnVtcCB6ZXJvID0gYnJhbmNoVGVzdDMy
KFplcm8sIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDAp
LCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBKdW1wIGVuZCA9IGp1bXAoKTsKLSAgICAg
ICAgICAgIHplcm8ubGluayh0aGlzKTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDEp
LCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBlbmQubGluayh0aGlzKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6
QWJzOiB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogRG9uJ3QgdXNlIGJyYW5jaGVzLgotICAgICAg
ICAgICAgSnVtcCBlbmQgPSBicmFuY2hUZXN0MzIoUG9zaXRpdmVPclplcm8sIEdQUkluZm86OnJl
Z1QwKTsKLSAgICAgICAgICAgIG5lZzMyKEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgIGVu
ZC5saW5rKHRoaXMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAg
ICAgIHN0b3JlMzIoR1BSSW5mbzo6cmVnVDAsIHRlbXBvcmFyeUFkZHJlc3MobV90ZW1wU3RhY2tU
b3AgLSAxKSk7Ci0gICAgICAgIHJldHVybiBVTlVTRUQ7Ci0gICAgfQotCi0gICAgaW50IGJ1aWxk
VW5hcnlGMzIoaW50LCBXQVNNT3BFeHByZXNzaW9uRjMyIG9wKQotICAgIHsKLSAgICAgICAgbG9h
ZERvdWJsZSh0ZW1wb3JhcnlBZGRyZXNzKG1fdGVtcFN0YWNrVG9wIC0gMSksIEZQUkluZm86OmZw
UmVnVDEpOwotICAgICAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVz
c2lvbkYzMjo6TmVnYXRlOgotICAgICAgICAgICAgY29udmVydEZsb2F0VG9Eb3VibGUoRlBSSW5m
bzo6ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMSk7Ci0gICAgICAgICAgICBuZWdhdGVEb3VibGUo
RlBSSW5mbzo6ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7Ci0gICAgICAgICAgICBjb252ZXJ0
RG91YmxlVG9GbG9hdChGUFJJbmZvOjpmcFJlZ1QwLCBGUFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GMzI6OkFiczoKLSAg
ICAgICAgICAgIGNvbnZlcnRGbG9hdFRvRG91YmxlKEZQUkluZm86OmZwUmVnVDEsIEZQUkluZm86
OmZwUmVnVDEpOwotICAgICAgICAgICAgYWJzRG91YmxlKEZQUkluZm86OmZwUmVnVDEsIEZQUklu
Zm86OmZwUmVnVDApOwotICAgICAgICAgICAgY29udmVydERvdWJsZVRvRmxvYXQoRlBSSW5mbzo6
ZnBSZWdUMCwgRlBSSW5mbzo6ZnBSZWdUMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBXQVNNT3BFeHByZXNzaW9uRjMyOjpDZWlsOgotICAgICAgICAgICAgY2FsbE9wZXJhdGlv
bihjZWlsZiwgRlBSSW5mbzo6ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uRjMyOjpGbG9vcjoKLSAgICAg
ICAgICAgIGNhbGxPcGVyYXRpb24oZmxvb3JmLCBGUFJJbmZvOjpmcFJlZ1QxLCBGUFJJbmZvOjpm
cFJlZ1QwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Np
b25GMzI6OlNxcnQ6Ci0gICAgICAgICAgICBjb252ZXJ0RmxvYXRUb0RvdWJsZShGUFJJbmZvOjpm
cFJlZ1QxLCBGUFJJbmZvOjpmcFJlZ1QxKTsKLSAgICAgICAgICAgIHNxcnREb3VibGUoRlBSSW5m
bzo6ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7Ci0gICAgICAgICAgICBjb252ZXJ0RG91Ymxl
VG9GbG9hdChGUFJJbmZvOjpmcFJlZ1QwLCBGUFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgIH0KLSAgICAgICAgc3RvcmVEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMCwgdGVt
cG9yYXJ5QWRkcmVzcyhtX3RlbXBTdGFja1RvcCAtIDEpKTsKLSAgICAgICAgcmV0dXJuIFVOVVNF
RDsKLSAgICB9Ci0KLSAgICBpbnQgYnVpbGRVbmFyeUY2NChpbnQsIFdBU01PcEV4cHJlc3Npb25G
NjQgb3ApCi0gICAgewotICAgICAgICBsb2FkRG91YmxlKHRlbXBvcmFyeUFkZHJlc3MobV90ZW1w
U3RhY2tUb3AgLSAxKSwgRlBSSW5mbzo6ZnBSZWdUMSk7Ci0gICAgICAgIHN3aXRjaCAob3ApIHsK
LSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uRjY0OjpOZWdhdGU6Ci0gICAgICAgICAgICBu
ZWdhdGVEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uRjY0OjpBYnM6Ci0gICAg
ICAgICAgICBhYnNEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uRjY0OjpTcXJ0
OgotICAgICAgICAgICAgc3FydERvdWJsZShGUFJJbmZvOjpmcFJlZ1QxLCBGUFJJbmZvOjpmcFJl
Z1QwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25G
NjQ6OkNlaWw6Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkY2NDo6Rmxvb3I6Ci0gICAg
ICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkY2NDo6Q29zOgotICAgICAgICBjYXNlIFdBU01PcEV4
cHJlc3Npb25GNjQ6OlNpbjoKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uRjY0OjpUYW46
Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkY2NDo6QUNvczoKLSAgICAgICAgY2FzZSBX
QVNNT3BFeHByZXNzaW9uRjY0OjpBU2luOgotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25G
NjQ6OkFUYW46Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkY2NDo6RXhwOgotICAgICAg
ICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6OkxuOgotICAgICAgICAgICAgRF9KSVRPcGVyYXRp
b25fRCBvcGVyYXRpb247Ci0gICAgICAgICAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgICAgICBj
YXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6OkNlaWw6Ci0gICAgICAgICAgICAgICAgb3BlcmF0aW9u
ID0gY2VpbDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV0FTTU9w
RXhwcmVzc2lvbkY2NDo6Rmxvb3I6Ci0gICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gZmxvb3I7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Np
b25GNjQ6OkNvczoKLSAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBjb3M7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6OlNpbjoK
LSAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBzaW47Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6OlRhbjoKLSAgICAgICAgICAg
ICAgICBvcGVyYXRpb24gPSB0YW47Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6OkFDb3M6Ci0gICAgICAgICAgICAgICAgb3BlcmF0
aW9uID0gYWNvczsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV0FT
TU9wRXhwcmVzc2lvbkY2NDo6QVNpbjoKLSAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBhc2lu
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNz
aW9uRjY0OjpBVGFuOgotICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IGF0YW47Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6OkV4
cDoKLSAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBleHA7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6OkxuOgotICAgICAgICAg
ICAgICAgIG9wZXJhdGlvbiA9IGxvZzsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBG
UFJJbmZvOjpmcFJlZ1QxLCBGUFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgc3RvcmVEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMCwgdGVtcG9yYXJ5QWRk
cmVzcyhtX3RlbXBTdGFja1RvcCAtIDEpKTsKLSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9
Ci0KLSAgICBpbnQgYnVpbGRCaW5hcnlJMzIoaW50LCBpbnQsIFdBU01PcEV4cHJlc3Npb25JMzIg
b3ApCi0gICAgewotICAgICAgICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVzcyhtX3RlbXBTdGFja1Rv
cCAtIDIpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgIGxvYWQzMih0ZW1wb3JhcnlBZGRyZXNz
KG1fdGVtcFN0YWNrVG9wIC0gMSksIEdQUkluZm86OnJlZ1QxKTsKLSAgICAgICAgc3dpdGNoIChv
cCkgewotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OkFkZDoKLSAgICAgICAgICAg
IGFkZDMyKEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpTdWI6Ci0gICAgICAgICAgICBz
dWIzMihHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6TXVsOgotICAgICAgICAgICAgbXVs
MzIoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OlNEaXY6Ci0gICAgICAgIGNhc2UgV0FT
TU9wRXhwcmVzc2lvbkkzMjo6VURpdjoKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMy
OjpTTW9kOgotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OlVNb2Q6IHsKLSAgICAg
ICAgICAgIG1fZGl2aWRlRXJyb3JKdW1wTGlzdC5hcHBlbmQoYnJhbmNoVGVzdDMyKFplcm8sIEdQ
UkluZm86OnJlZ1QxKSk7Ci0gICAgICAgICAgICBpZiAob3AgPT0gV0FTTU9wRXhwcmVzc2lvbkkz
Mjo6U0RpdiB8fCBvcCA9PSBXQVNNT3BFeHByZXNzaW9uSTMyOjpTTW9kKSB7Ci0gICAgICAgICAg
ICAgICAgSnVtcCBkZW5vbWluYXRvck5vdE5lZzEgPSBicmFuY2gzMihOb3RFcXVhbCwgR1BSSW5m
bzo6cmVnVDEsIFRydXN0ZWRJbW0zMigtMSkpOwotICAgICAgICAgICAgICAgIG1fZGl2aWRlRXJy
b3JKdW1wTGlzdC5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIEdQUkluZm86OnJlZ1QwLCBUcnVzdGVk
SW1tMzIoLTIxNDc0ODM2NDctMSkpKTsKLSAgICAgICAgICAgICAgICBkZW5vbWluYXRvck5vdE5l
ZzEubGluayh0aGlzKTsKLSAgICAgICAgICAgIH0KLSNpZiBDUFUoWDg2KSB8fCBDUFUoWDg2XzY0
KQotICAgICAgICAgICAgQVNTRVJUKEdQUkluZm86OnJlZ1QwID09IFg4NlJlZ2lzdGVyczo6ZWF4
KTsKLSAgICAgICAgICAgIG1vdmUoR1BSSW5mbzo6cmVnVDEsIFg4NlJlZ2lzdGVyczo6ZWN4KTsK
LSAgICAgICAgICAgIGlmIChvcCA9PSBXQVNNT3BFeHByZXNzaW9uSTMyOjpTRGl2IHx8IG9wID09
IFdBU01PcEV4cHJlc3Npb25JMzI6OlNNb2QpIHsKLSAgICAgICAgICAgICAgICB4ODZDb252ZXJ0
VG9Eb3VibGVXb3JkMzIoKTsKLSAgICAgICAgICAgICAgICB4ODZEaXYzMihYODZSZWdpc3RlcnM6
OmVjeCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEFTU0VSVChvcCA9
PSBXQVNNT3BFeHByZXNzaW9uSTMyOjpVRGl2IHx8IG9wID09IFdBU01PcEV4cHJlc3Npb25JMzI6
OlVNb2QpOwotICAgICAgICAgICAgICAgIHhvcjMyKFg4NlJlZ2lzdGVyczo6ZWR4LCBYODZSZWdp
c3RlcnM6OmVkeCk7Ci0gICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuZGl2bF9yKFg4NlJlZ2lz
dGVyczo6ZWN4KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChvcCA9PSBXQVNNT3BF
eHByZXNzaW9uSTMyOjpTTW9kIHx8IG9wID09IFdBU01PcEV4cHJlc3Npb25JMzI6OlVNb2QpCi0g
ICAgICAgICAgICAgICAgbW92ZShYODZSZWdpc3RlcnM6OmVkeCwgR1BSSW5mbzo6cmVnVDApOwot
I2Vsc2UKLSAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBkbyBhbiBp
bmxpbmUgZGl2IG9uIEFSTXY3IGFuZCBBUk02NC4KLSAgICAgICAgICAgIHN3aXRjaCAob3ApIHsK
LSAgICAgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6U0RpdjoKLSAgICAgICAgICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRpdiwgR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86
OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OlVEaXY6Ci0gICAgICAgICAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25VbnNpZ25lZERpdiwgR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86
OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OlNNb2Q6Ci0gICAgICAgICAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Nb2QsIEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMSwg
R1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2Fz
ZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpVTW9kOgotICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uVW5zaWduZWRNb2QsIEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMSwg
R1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAg
IH0KLSNlbmRpZgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBX
QVNNT3BFeHByZXNzaW9uSTMyOjpCaXRPcjoKLSAgICAgICAgICAgIG9yMzIoR1BSSW5mbzo6cmVn
VDEsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdB
U01PcEV4cHJlc3Npb25JMzI6OkJpdEFuZDoKLSAgICAgICAgICAgIGFuZDMyKEdQUkluZm86OnJl
Z1QxLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBX
QVNNT3BFeHByZXNzaW9uSTMyOjpCaXRYb3I6Ci0gICAgICAgICAgICB4b3IzMihHUFJJbmZvOjpy
ZWdUMSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
V0FTTU9wRXhwcmVzc2lvbkkzMjo6TGVmdFNoaWZ0OgotICAgICAgICAgICAgbHNoaWZ0MzIoR1BS
SW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OkFyaXRobWV0aWNSaWdodFNoaWZ0OgotICAgICAg
ICAgICAgcnNoaWZ0MzIoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OkxvZ2ljYWxSaWdo
dFNoaWZ0OgotICAgICAgICAgICAgdXJzaGlmdDMyKEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpy
ZWdUMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgICAgIG1fdGVtcFN0YWNrVG9w
LS07Ci0gICAgICAgIHN0b3JlMzIoR1BSSW5mbzo6cmVnVDAsIHRlbXBvcmFyeUFkZHJlc3MobV90
ZW1wU3RhY2tUb3AgLSAxKSk7Ci0gICAgICAgIHJldHVybiBVTlVTRUQ7Ci0gICAgfQotCi0gICAg
aW50IGJ1aWxkQmluYXJ5RjMyKGludCwgaW50LCBXQVNNT3BFeHByZXNzaW9uRjMyIG9wKQotICAg
IHsKLSAgICAgICAgbG9hZERvdWJsZSh0ZW1wb3JhcnlBZGRyZXNzKG1fdGVtcFN0YWNrVG9wIC0g
MiksIEZQUkluZm86OmZwUmVnVDApOwotICAgICAgICBsb2FkRG91YmxlKHRlbXBvcmFyeUFkZHJl
c3MobV90ZW1wU3RhY2tUb3AgLSAxKSwgRlBSSW5mbzo6ZnBSZWdUMSk7Ci0gICAgICAgIGNvbnZl
cnRGbG9hdFRvRG91YmxlKEZQUkluZm86OmZwUmVnVDAsIEZQUkluZm86OmZwUmVnVDApOwotICAg
ICAgICBjb252ZXJ0RmxvYXRUb0RvdWJsZShGUFJJbmZvOjpmcFJlZ1QxLCBGUFJJbmZvOjpmcFJl
Z1QxKTsKLSAgICAgICAgc3dpdGNoIChvcCkgewotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Np
b25GMzI6OkFkZDoKLSAgICAgICAgICAgIGFkZERvdWJsZShGUFJJbmZvOjpmcFJlZ1QxLCBGUFJJ
bmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdBU01PcEV4
cHJlc3Npb25GMzI6OlN1YjoKLSAgICAgICAgICAgIHN1YkRvdWJsZShGUFJJbmZvOjpmcFJlZ1Qx
LCBGUFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdB
U01PcEV4cHJlc3Npb25GMzI6Ok11bDoKLSAgICAgICAgICAgIG11bERvdWJsZShGUFJJbmZvOjpm
cFJlZ1QxLCBGUFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIFdBU01PcEV4cHJlc3Npb25GMzI6OkRpdjoKLSAgICAgICAgICAgIGRpdkRvdWJsZShGUFJJ
bmZvOjpmcFJlZ1QxLCBGUFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgfQotICAgICAgICBjb252ZXJ0RG91YmxlVG9GbG9hdChGUFJJbmZvOjpmcFJlZ1Qw
LCBGUFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgbV90ZW1wU3RhY2tUb3AtLTsKLSAgICAgICAg
c3RvcmVEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMCwgdGVtcG9yYXJ5QWRkcmVzcyhtX3RlbXBTdGFj
a1RvcCAtIDEpKTsKLSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9Ci0KLSAgICBpbnQgYnVp
bGRCaW5hcnlGNjQoaW50LCBpbnQsIFdBU01PcEV4cHJlc3Npb25GNjQgb3ApCi0gICAgewotICAg
ICAgICBsb2FkRG91YmxlKHRlbXBvcmFyeUFkZHJlc3MobV90ZW1wU3RhY2tUb3AgLSAyKSwgRlBS
SW5mbzo6ZnBSZWdUMCk7Ci0gICAgICAgIGxvYWREb3VibGUodGVtcG9yYXJ5QWRkcmVzcyhtX3Rl
bXBTdGFja1RvcCAtIDEpLCBGUFJJbmZvOjpmcFJlZ1QxKTsKLSAgICAgICAgc3dpdGNoIChvcCkg
ewotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6OkFkZDoKLSAgICAgICAgICAgIGFk
ZERvdWJsZShGUFJJbmZvOjpmcFJlZ1QxLCBGUFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6OlN1YjoKLSAgICAgICAg
ICAgIHN1YkRvdWJsZShGUFJJbmZvOjpmcFJlZ1QxLCBGUFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6Ok11bDoKLSAg
ICAgICAgICAgIG11bERvdWJsZShGUFJJbmZvOjpmcFJlZ1QxLCBGUFJJbmZvOjpmcFJlZ1QwKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6OkRp
djoKLSAgICAgICAgICAgIGRpdkRvdWJsZShGUFJJbmZvOjpmcFJlZ1QxLCBGUFJJbmZvOjpmcFJl
Z1QwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25G
NjQ6Ok1vZDoKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uRjY0OjpBVGFuMjoKLSAgICAg
ICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uRjY0OjpQb3c6Ci0gICAgICAgICAgICBEX0pJVE9wZXJh
dGlvbl9ERCBvcGVyYXRpb247Ci0gICAgICAgICAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgICAg
ICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6Ok1vZDoKLSAgICAgICAgICAgICAgICBvcGVyYXRp
b24gPSBmbW9kOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBXQVNN
T3BFeHByZXNzaW9uRjY0OjpBVGFuMjoKLSAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBhdGFu
MjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVz
c2lvbkY2NDo6UG93OgotICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IHBvdzsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uLCBGUFJJbmZvOjpmcFJlZ1QwLCBGUFJJbmZvOjpmcFJlZ1Qx
LCBGUFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLSAgICAgICAg
bV90ZW1wU3RhY2tUb3AtLTsKLSAgICAgICAgc3RvcmVEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMCwg
dGVtcG9yYXJ5QWRkcmVzcyhtX3RlbXBTdGFja1RvcCAtIDEpKTsKLSAgICAgICAgcmV0dXJuIFVO
VVNFRDsKLSAgICB9Ci0KLSAgICBpbnQgYnVpbGRSZWxhdGlvbmFsSTMyKGludCwgaW50LCBXQVNN
T3BFeHByZXNzaW9uSTMyIG9wKQotICAgIHsKLSAgICAgICAgbG9hZDMyKHRlbXBvcmFyeUFkZHJl
c3MobV90ZW1wU3RhY2tUb3AgLSAyKSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICBsb2FkMzIo
dGVtcG9yYXJ5QWRkcmVzcyhtX3RlbXBTdGFja1RvcCAtIDEpLCBHUFJJbmZvOjpyZWdUMSk7Ci0g
ICAgICAgIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uOwotICAgICAgICBzd2l0Y2ggKG9w
KSB7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6RXF1YWxJMzI6Ci0gICAgICAg
ICAgICBjb25kaXRpb24gPSBFcXVhbDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IFdBU01PcEV4cHJlc3Npb25JMzI6Ok5vdEVxdWFsSTMyOgotICAgICAgICAgICAgY29uZGl0aW9u
ID0gTm90RXF1YWw7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXQVNNT3BFeHBy
ZXNzaW9uSTMyOjpTTGVzc1RoYW5JMzI6Ci0gICAgICAgICAgICBjb25kaXRpb24gPSBMZXNzVGhh
bjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6
OlVMZXNzVGhhbkkzMjoKLSAgICAgICAgICAgIGNvbmRpdGlvbiA9IEJlbG93OwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6U0xlc3NUaGFuT3JF
cXVhbEkzMjoKLSAgICAgICAgICAgIGNvbmRpdGlvbiA9IExlc3NUaGFuT3JFcXVhbDsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OlVMZXNzVGhh
bk9yRXF1YWxJMzI6Ci0gICAgICAgICAgICBjb25kaXRpb24gPSBCZWxvd09yRXF1YWw7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpTR3JlYXRl
clRoYW5JMzI6Ci0gICAgICAgICAgICBjb25kaXRpb24gPSBHcmVhdGVyVGhhbjsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OlVHcmVhdGVyVGhh
bkkzMjoKLSAgICAgICAgICAgIGNvbmRpdGlvbiA9IEFib3ZlOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6U0dyZWF0ZXJUaGFuT3JFcXVhbEkz
MjoKLSAgICAgICAgICAgIGNvbmRpdGlvbiA9IEdyZWF0ZXJUaGFuT3JFcXVhbDsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OlVHcmVhdGVyVGhh
bk9yRXF1YWxJMzI6Ci0gICAgICAgICAgICBjb25kaXRpb24gPSBBYm92ZU9yRXF1YWw7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLSAgICAgICAgY29tcGFyZTMyKGNvbmRpdGlv
biwgR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAg
ICAgIG1fdGVtcFN0YWNrVG9wLS07Ci0gICAgICAgIHN0b3JlMzIoR1BSSW5mbzo6cmVnVDAsIHRl
bXBvcmFyeUFkZHJlc3MobV90ZW1wU3RhY2tUb3AgLSAxKSk7Ci0gICAgICAgIHJldHVybiBVTlVT
RUQ7Ci0gICAgfQotCi0gICAgaW50IGJ1aWxkUmVsYXRpb25hbEYzMihpbnQsIGludCwgV0FTTU9w
RXhwcmVzc2lvbkkzMiBvcCkKLSAgICB7Ci0gICAgICAgIGxvYWREb3VibGUodGVtcG9yYXJ5QWRk
cmVzcyhtX3RlbXBTdGFja1RvcCAtIDIpLCBGUFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgbG9h
ZERvdWJsZSh0ZW1wb3JhcnlBZGRyZXNzKG1fdGVtcFN0YWNrVG9wIC0gMSksIEZQUkluZm86OmZw
UmVnVDEpOwotICAgICAgICBjb252ZXJ0RmxvYXRUb0RvdWJsZShGUFJJbmZvOjpmcFJlZ1QwLCBG
UFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgY29udmVydEZsb2F0VG9Eb3VibGUoRlBSSW5mbzo6
ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMSk7Ci0gICAgICAgIERvdWJsZUNvbmRpdGlvbiBjb25k
aXRpb247Ci0gICAgICAgIHN3aXRjaCAob3ApIHsKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNz
aW9uSTMyOjpFcXVhbEYzMjoKLSAgICAgICAgICAgIGNvbmRpdGlvbiA9IERvdWJsZUVxdWFsOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6Tm90
RXF1YWxGMzI6Ci0gICAgICAgICAgICBjb25kaXRpb24gPSBEb3VibGVOb3RFcXVhbDsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6Okxlc3NUaGFu
RjMyOgotICAgICAgICAgICAgY29uZGl0aW9uID0gRG91YmxlTGVzc1RoYW47Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpMZXNzVGhhbk9yRXF1
YWxGMzI6Ci0gICAgICAgICAgICBjb25kaXRpb24gPSBEb3VibGVMZXNzVGhhbk9yRXF1YWw7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpHcmVh
dGVyVGhhbkYzMjoKLSAgICAgICAgICAgIGNvbmRpdGlvbiA9IERvdWJsZUdyZWF0ZXJUaGFuOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6R3Jl
YXRlclRoYW5PckVxdWFsRjMyOgotICAgICAgICAgICAgY29uZGl0aW9uID0gRG91YmxlR3JlYXRl
clRoYW5PckVxdWFsOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgICAg
IG1fdGVtcFN0YWNrVG9wLS07Ci0gICAgICAgIEp1bXAgdHJ1ZUNhc2UgPSBicmFuY2hEb3VibGUo
Y29uZGl0aW9uLCBGUFJJbmZvOjpmcFJlZ1QwLCBGUFJJbmZvOjpmcFJlZ1QxKTsKLSAgICAgICAg
c3RvcmUzMihUcnVzdGVkSW1tMzIoMCksIHRlbXBvcmFyeUFkZHJlc3MobV90ZW1wU3RhY2tUb3Ag
LSAxKSk7Ci0gICAgICAgIEp1bXAgZW5kID0ganVtcCgpOwotICAgICAgICB0cnVlQ2FzZS5saW5r
KHRoaXMpOwotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMigxKSwgdGVtcG9yYXJ5QWRkcmVz
cyhtX3RlbXBTdGFja1RvcCAtIDEpKTsKLSAgICAgICAgZW5kLmxpbmsodGhpcyk7Ci0gICAgICAg
IHJldHVybiBVTlVTRUQ7Ci0gICAgfQotCi0gICAgaW50IGJ1aWxkUmVsYXRpb25hbEY2NChpbnQs
IGludCwgV0FTTU9wRXhwcmVzc2lvbkkzMiBvcCkKLSAgICB7Ci0gICAgICAgIGxvYWREb3VibGUo
dGVtcG9yYXJ5QWRkcmVzcyhtX3RlbXBTdGFja1RvcCAtIDIpLCBGUFJJbmZvOjpmcFJlZ1QwKTsK
LSAgICAgICAgbG9hZERvdWJsZSh0ZW1wb3JhcnlBZGRyZXNzKG1fdGVtcFN0YWNrVG9wIC0gMSks
IEZQUkluZm86OmZwUmVnVDEpOwotICAgICAgICBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uOwot
ICAgICAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6
RXF1YWxGNjQ6Ci0gICAgICAgICAgICBjb25kaXRpb24gPSBEb3VibGVFcXVhbDsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6Ok5vdEVxdWFsRjY0
OgotICAgICAgICAgICAgY29uZGl0aW9uID0gRG91YmxlTm90RXF1YWw7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpMZXNzVGhhbkY2NDoKLSAg
ICAgICAgICAgIGNvbmRpdGlvbiA9IERvdWJsZUxlc3NUaGFuOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6TGVzc1RoYW5PckVxdWFsRjY0Ogot
ICAgICAgICAgICAgY29uZGl0aW9uID0gRG91YmxlTGVzc1RoYW5PckVxdWFsOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6R3JlYXRlclRoYW5G
NjQ6Ci0gICAgICAgICAgICBjb25kaXRpb24gPSBEb3VibGVHcmVhdGVyVGhhbjsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OkdyZWF0ZXJUaGFu
T3JFcXVhbEY2NDoKLSAgICAgICAgICAgIGNvbmRpdGlvbiA9IERvdWJsZUdyZWF0ZXJUaGFuT3JF
cXVhbDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgICAgICBtX3RlbXBT
dGFja1RvcC0tOwotICAgICAgICBKdW1wIHRydWVDYXNlID0gYnJhbmNoRG91YmxlKGNvbmRpdGlv
biwgRlBSSW5mbzo6ZnBSZWdUMCwgRlBSSW5mbzo6ZnBSZWdUMSk7Ci0gICAgICAgIHN0b3JlMzIo
VHJ1c3RlZEltbTMyKDApLCB0ZW1wb3JhcnlBZGRyZXNzKG1fdGVtcFN0YWNrVG9wIC0gMSkpOwot
ICAgICAgICBKdW1wIGVuZCA9IGp1bXAoKTsKLSAgICAgICAgdHJ1ZUNhc2UubGluayh0aGlzKTsK
LSAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoMSksIHRlbXBvcmFyeUFkZHJlc3MobV90ZW1w
U3RhY2tUb3AgLSAxKSk7Ci0gICAgICAgIGVuZC5saW5rKHRoaXMpOwotICAgICAgICByZXR1cm4g
VU5VU0VEOwotICAgIH0KLQotICAgIGludCBidWlsZE1pbk9yTWF4STMyKGludCwgaW50LCBXQVNN
T3BFeHByZXNzaW9uSTMyIG9wKQotICAgIHsKLSAgICAgICAgbG9hZDMyKHRlbXBvcmFyeUFkZHJl
c3MobV90ZW1wU3RhY2tUb3AgLSAyKSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICBsb2FkMzIo
dGVtcG9yYXJ5QWRkcmVzcyhtX3RlbXBTdGFja1RvcCAtIDEpLCBHUFJJbmZvOjpyZWdUMSk7Ci0g
ICAgICAgIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uOwotICAgICAgICBzd2l0Y2ggKG9w
KSB7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6U01pbjoKLSAgICAgICAgICAg
IGNvbmRpdGlvbiA9IExlc3NUaGFuT3JFcXVhbDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OlVNaW46Ci0gICAgICAgICAgICBjb25kaXRpb24g
PSBCZWxvd09yRXF1YWw7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXQVNNT3BF
eHByZXNzaW9uSTMyOjpTTWF4OgotICAgICAgICAgICAgY29uZGl0aW9uID0gR3JlYXRlclRoYW5P
ckVxdWFsOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lv
bkkzMjo6VU1heDoKLSAgICAgICAgICAgIGNvbmRpdGlvbiA9IEFib3ZlT3JFcXVhbDsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgICAgICBKdW1wIHVzZUxlZnQgPSBicmFu
Y2gzMihjb25kaXRpb24sIEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMSk7Ci0gICAgICAg
IHN0b3JlMzIoR1BSSW5mbzo6cmVnVDEsIHRlbXBvcmFyeUFkZHJlc3MobV90ZW1wU3RhY2tUb3Ag
LSAyKSk7Ci0gICAgICAgIHVzZUxlZnQubGluayh0aGlzKTsKLSAgICAgICAgbV90ZW1wU3RhY2tU
b3AtLTsKLSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9Ci0KLSAgICBpbnQgYnVpbGRNaW5P
ck1heEY2NChpbnQsIGludCwgV0FTTU9wRXhwcmVzc2lvbkY2NCBvcCkKLSAgICB7Ci0gICAgICAg
IGxvYWREb3VibGUodGVtcG9yYXJ5QWRkcmVzcyhtX3RlbXBTdGFja1RvcCAtIDIpLCBGUFJJbmZv
OjpmcFJlZ1QwKTsKLSAgICAgICAgbG9hZERvdWJsZSh0ZW1wb3JhcnlBZGRyZXNzKG1fdGVtcFN0
YWNrVG9wIC0gMSksIEZQUkluZm86OmZwUmVnVDEpOwotICAgICAgICBEb3VibGVDb25kaXRpb24g
Y29uZGl0aW9uOwotICAgICAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhw
cmVzc2lvbkY2NDo6TWluOgotICAgICAgICAgICAgY29uZGl0aW9uID0gRG91YmxlTGVzc1RoYW5P
ckVxdWFsOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lv
bkY2NDo6TWF4OgotICAgICAgICAgICAgY29uZGl0aW9uID0gRG91YmxlR3JlYXRlclRoYW5PckVx
dWFsOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgICAgIEp1bXAgdXNl
TGVmdCA9IGJyYW5jaERvdWJsZShjb25kaXRpb24sIEZQUkluZm86OmZwUmVnVDAsIEZQUkluZm86
OmZwUmVnVDEpOwotICAgICAgICBzdG9yZURvdWJsZShGUFJJbmZvOjpmcFJlZ1QxLCB0ZW1wb3Jh
cnlBZGRyZXNzKG1fdGVtcFN0YWNrVG9wIC0gMikpOwotICAgICAgICB1c2VMZWZ0LmxpbmsodGhp
cyk7Ci0gICAgICAgIG1fdGVtcFN0YWNrVG9wLS07Ci0gICAgICAgIHJldHVybiBVTlVTRUQ7Ci0g
ICAgfQotCi0gICAgaW50IGJ1aWxkQ2FsbEludGVybmFsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgs
IGludCwgY29uc3QgV0FTTVNpZ25hdHVyZSYgc2lnbmF0dXJlLCBXQVNNRXhwcmVzc2lvblR5cGUg
cmV0dXJuVHlwZSkKLSAgICB7Ci0gICAgICAgIGJveEFyZ3VtZW50c0FuZEFkanVzdFN0YWNrUG9p
bnRlcihzaWduYXR1cmUuYXJndW1lbnRzKTsKLQotICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlv
biA9IG1fbW9kdWxlLT5mdW5jdGlvbnMoKVtmdW5jdGlvbkluZGV4XS5nZXQoKTsKLSAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKGZ1bmN0aW9uKSwgR1BSSW5mbzo6cmVnVDApOwotCi0gICAgICAg
IGNhbGxBbmRVbmJveFJlc3VsdChyZXR1cm5UeXBlKTsKLSAgICAgICAgcmV0dXJuIFVOVVNFRDsK
LSAgICB9Ci0KLSAgICBpbnQgYnVpbGRDYWxsSW5kaXJlY3QodWludDMyX3QgZnVuY3Rpb25Qb2lu
dGVyVGFibGVJbmRleCwgaW50LCBpbnQsIGNvbnN0IFdBU01TaWduYXR1cmUmIHNpZ25hdHVyZSwg
V0FTTUV4cHJlc3Npb25UeXBlIHJldHVyblR5cGUpCi0gICAgewotICAgICAgICBib3hBcmd1bWVu
dHNBbmRBZGp1c3RTdGFja1BvaW50ZXIoc2lnbmF0dXJlLmFyZ3VtZW50cyk7Ci0KLSAgICAgICAg
Y29uc3QgVmVjdG9yPEpTRnVuY3Rpb24qPiYgZnVuY3Rpb25zID0gbV9tb2R1bGUtPmZ1bmN0aW9u
UG9pbnRlclRhYmxlcygpW2Z1bmN0aW9uUG9pbnRlclRhYmxlSW5kZXhdLmZ1bmN0aW9uczsKLSAg
ICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGZ1bmN0aW9ucy5kYXRhKCkpLCBHUFJJbmZvOjpyZWdU
MCk7Ci0gICAgICAgIGxvYWQzMih0ZW1wb3JhcnlBZGRyZXNzKG1fdGVtcFN0YWNrVG9wIC0gMSks
IEdQUkluZm86OnJlZ1QxKTsKLSAgICAgICAgbV90ZW1wU3RhY2tUb3AtLTsKLSAgICAgICAgYW5k
MzIoVHJ1c3RlZEltbTMyKGZ1bmN0aW9ucy5zaXplKCkgLSAxKSwgR1BSSW5mbzo6cmVnVDEpOwot
ICAgICAgICBsb2FkUHRyKEJhc2VJbmRleChHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDEs
IHRpbWVzUHRyKCkpLCBHUFJJbmZvOjpyZWdUMCk7Ci0KLSAgICAgICAgY2FsbEFuZFVuYm94UmVz
dWx0KHJldHVyblR5cGUpOwotICAgICAgICByZXR1cm4gVU5VU0VEOwotICAgIH0KLQotICAgIGlu
dCBidWlsZENhbGxJbXBvcnQodWludDMyX3QgZnVuY3Rpb25JbXBvcnRJbmRleCwgaW50LCBjb25z
dCBXQVNNU2lnbmF0dXJlJiBzaWduYXR1cmUsIFdBU01FeHByZXNzaW9uVHlwZSByZXR1cm5UeXBl
KQotICAgIHsKLSAgICAgICAgYm94QXJndW1lbnRzQW5kQWRqdXN0U3RhY2tQb2ludGVyKHNpZ25h
dHVyZS5hcmd1bWVudHMpOwotCi0gICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0gbV9tb2R1
bGUtPmltcG9ydGVkRnVuY3Rpb25zKClbZnVuY3Rpb25JbXBvcnRJbmRleF0uZ2V0KCk7Ci0gICAg
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihmdW5jdGlvbiksIEdQUkluZm86OnJlZ1QwKTsKLQotICAg
ICAgICBjYWxsQW5kVW5ib3hSZXN1bHQocmV0dXJuVHlwZSk7Ci0gICAgICAgIHJldHVybiBVTlVT
RUQ7Ci0gICAgfQotCi0gICAgdm9pZCBhcHBlbmRFeHByZXNzaW9uTGlzdChpbnQmLCBpbnQpIHsg
fQotCi0gICAgdm9pZCBkaXNjYXJkKGludCkKLSAgICB7Ci0gICAgICAgIG1fdGVtcFN0YWNrVG9w
LS07Ci0gICAgfQotCi0gICAgdm9pZCBsaW5rVGFyZ2V0KEp1bXBUYXJnZXQmIHRhcmdldCkKLSAg
ICB7Ci0gICAgICAgIHRhcmdldC5sYWJlbCA9IGxhYmVsKCk7Ci0gICAgICAgIHRhcmdldC5qdW1w
TGlzdC5saW5rKHRoaXMpOwotICAgIH0KLQotICAgIHZvaWQganVtcFRvVGFyZ2V0KEp1bXBUYXJn
ZXQmIHRhcmdldCkKLSAgICB7Ci0gICAgICAgIGlmICh0YXJnZXQubGFiZWwuaXNTZXQoKSkKLSAg
ICAgICAgICAgIGp1bXAodGFyZ2V0LmxhYmVsKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
dGFyZ2V0Lmp1bXBMaXN0LmFwcGVuZChqdW1wKCkpOwotICAgIH0KLQotICAgIHZvaWQganVtcFRv
VGFyZ2V0SWYoSnVtcENvbmRpdGlvbiBjb25kaXRpb24sIGludCwgSnVtcFRhcmdldCYgdGFyZ2V0
KQotICAgIHsKLSAgICAgICAgbG9hZDMyKHRlbXBvcmFyeUFkZHJlc3MobV90ZW1wU3RhY2tUb3Ag
LSAxKSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICBtX3RlbXBTdGFja1RvcC0tOwotICAgICAg
ICBKdW1wIHRha2VuID0gYnJhbmNoVGVzdDMyKChjb25kaXRpb24gPT0gSnVtcENvbmRpdGlvbjo6
WmVybykgPyBaZXJvIDogTm9uWmVybywgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICBpZiAodGFy
Z2V0LmxhYmVsLmlzU2V0KCkpCi0gICAgICAgICAgICB0YWtlbi5saW5rVG8odGFyZ2V0LmxhYmVs
LCB0aGlzKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdGFyZ2V0Lmp1bXBMaXN0LmFwcGVu
ZCh0YWtlbik7Ci0gICAgfQotCi0gICAgdm9pZCBzdGFydExvb3AoKQotICAgIHsKLSAgICAgICAg
bV9icmVha1RhcmdldHMuYXBwZW5kKEp1bXBUYXJnZXQoKSk7Ci0gICAgICAgIG1fY29udGludWVU
YXJnZXRzLmFwcGVuZChKdW1wVGFyZ2V0KCkpOwotICAgIH0KLQotICAgIHZvaWQgZW5kTG9vcCgp
Ci0gICAgewotICAgICAgICBtX2JyZWFrVGFyZ2V0cy5yZW1vdmVMYXN0KCk7Ci0gICAgICAgIG1f
Y29udGludWVUYXJnZXRzLnJlbW92ZUxhc3QoKTsKLSAgICB9Ci0KLSAgICB2b2lkIHN0YXJ0U3dp
dGNoKCkKLSAgICB7Ci0gICAgICAgIG1fYnJlYWtUYXJnZXRzLmFwcGVuZChKdW1wVGFyZ2V0KCkp
OwotICAgIH0KLQotICAgIHZvaWQgZW5kU3dpdGNoKCkKLSAgICB7Ci0gICAgICAgIG1fYnJlYWtU
YXJnZXRzLnJlbW92ZUxhc3QoKTsKLSAgICB9Ci0KLSAgICB2b2lkIHN0YXJ0TGFiZWwoKQotICAg
IHsKLSAgICAgICAgbV9icmVha0xhYmVsVGFyZ2V0cy5hcHBlbmQoSnVtcFRhcmdldCgpKTsKLSAg
ICAgICAgbV9jb250aW51ZUxhYmVsVGFyZ2V0cy5hcHBlbmQoSnVtcFRhcmdldCgpKTsKLQotICAg
ICAgICBsaW5rVGFyZ2V0KG1fY29udGludWVMYWJlbFRhcmdldHMubGFzdCgpKTsKLSAgICB9Ci0K
LSAgICB2b2lkIGVuZExhYmVsKCkKLSAgICB7Ci0gICAgICAgIGxpbmtUYXJnZXQobV9icmVha0xh
YmVsVGFyZ2V0cy5sYXN0KCkpOwotCi0gICAgICAgIG1fYnJlYWtMYWJlbFRhcmdldHMucmVtb3Zl
TGFzdCgpOwotICAgICAgICBtX2NvbnRpbnVlTGFiZWxUYXJnZXRzLnJlbW92ZUxhc3QoKTsKLSAg
ICB9Ci0KLSAgICBKdW1wVGFyZ2V0JiBicmVha1RhcmdldCgpCi0gICAgewotICAgICAgICByZXR1
cm4gbV9icmVha1RhcmdldHMubGFzdCgpOwotICAgIH0KLQotICAgIEp1bXBUYXJnZXQmIGNvbnRp
bnVlVGFyZ2V0KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2NvbnRpbnVlVGFyZ2V0cy5sYXN0
KCk7Ci0gICAgfQotCi0gICAgSnVtcFRhcmdldCYgYnJlYWtMYWJlbFRhcmdldCh1aW50MzJfdCBs
YWJlbEluZGV4KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYnJlYWtMYWJlbFRhcmdldHNbbGFi
ZWxJbmRleF07Ci0gICAgfQotCi0gICAgSnVtcFRhcmdldCYgY29udGludWVMYWJlbFRhcmdldCh1
aW50MzJfdCBsYWJlbEluZGV4KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fY29udGludWVMYWJl
bFRhcmdldHNbbGFiZWxJbmRleF07Ci0gICAgfQotCi0gICAgdm9pZCBidWlsZFN3aXRjaChpbnQs
IGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgY2FzZXMsIFZlY3RvcjxKdW1wVGFyZ2V0PiYgdGFyZ2V0
cywgSnVtcFRhcmdldCBkZWZhdWx0VGFyZ2V0KQotICAgIHsKLSAgICAgICAgbG9hZDMyKHRlbXBv
cmFyeUFkZHJlc3MobV90ZW1wU3RhY2tUb3AgLSAxKSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAg
ICBtX3RlbXBTdGFja1RvcC0tOwotICAgICAgICBCaW5hcnlTd2l0Y2ggYmluYXJ5U3dpdGNoKEdQ
UkluZm86OnJlZ1QwLCBjYXNlcywgQmluYXJ5U3dpdGNoOjpJbnQzMik7Ci0gICAgICAgIHdoaWxl
IChiaW5hcnlTd2l0Y2guYWR2YW5jZSgqdGhpcykpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGlu
ZGV4ID0gYmluYXJ5U3dpdGNoLmNhc2VJbmRleCgpOwotICAgICAgICAgICAganVtcCh0YXJnZXRz
W2luZGV4XS5sYWJlbCk7Ci0gICAgICAgIH0KLSAgICAgICAgYmluYXJ5U3dpdGNoLmZhbGxUaHJv
dWdoKCkubGlua1RvKGRlZmF1bHRUYXJnZXQubGFiZWwsIHRoaXMpOwotICAgIH0KLQotcHJpdmF0
ZToKLSAgICB1bmlvbiBTdGFja1Nsb3QgewotICAgICAgICBpbnQzMl90IGludFZhbHVlOwotICAg
ICAgICBmbG9hdCBmbG9hdFZhbHVlOwotICAgICAgICBkb3VibGUgZG91YmxlVmFsdWU7Ci0gICAg
fTsKLQotICAgIGVudW0gY2xhc3MgRmxvYXRpbmdQb2ludFByZWNpc2lvbiB7IFNpbmdsZSwgRG91
YmxlIH07Ci0KLSAgICBBZGRyZXNzIGxvY2FsQWRkcmVzcyh1bnNpZ25lZCBsb2NhbEluZGV4KSBj
b25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGxvY2FsSW5kZXggPCBtX251bWJlck9mTG9jYWxz
KTsKLSAgICAgICAgcmV0dXJuIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIC1t
X2NhbGxlZVNhdmVTcGFjZSAtIChsb2NhbEluZGV4ICsgMSkgKiBzaXplb2YoU3RhY2tTbG90KSk7
Ci0gICAgfQotCi0gICAgQWRkcmVzcyB0ZW1wb3JhcnlBZGRyZXNzKHVuc2lnbmVkIHRlbXBvcmFy
eUluZGV4KSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fbnVtYmVyT2ZMb2NhbHMgKyB0
ZW1wb3JhcnlJbmRleCA8IG1fc3RhY2tIZWlnaHQpOwotICAgICAgICByZXR1cm4gQWRkcmVzcyhH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgLW1fY2FsbGVlU2F2ZVNwYWNlIC0gKG1fbnVtYmVy
T2ZMb2NhbHMgKyB0ZW1wb3JhcnlJbmRleCArIDEpICogc2l6ZW9mKFN0YWNrU2xvdCkpOwotICAg
IH0KLQotICAgIHZvaWQgYXBwZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0ciYgZnVuY3Rpb24pCi0g
ICAgewotICAgICAgICBtX2NhbGxzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihjYWxsKCksIGZ1bmN0
aW9uLnZhbHVlKCkpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2soY29uc3QgRnVuY3Rpb25QdHImIGZ1bmN0aW9uKQotICAgIHsKLSAgICAgICAgYXBwZW5k
Q2FsbChmdW5jdGlvbik7Ci0gICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChlbWl0RXhj
ZXB0aW9uQ2hlY2soKSk7Ci0gICAgfQotCi0gICAgQ2FsbCBlbWl0TmFrZWRDYWxsKENvZGVQdHIg
ZnVuY3Rpb24pCi0gICAgewotICAgICAgICBDYWxsIG5ha2VkQ2FsbCA9IG5lYXJDYWxsKCk7Ci0g
ICAgICAgIG1fY2FsbHMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKG5ha2VkQ2FsbCwgZnVuY3Rpb24u
ZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotICAgICAgICByZXR1cm4gbmFrZWRDYWxsOwotICAgIH0K
LQotICAgIHZvaWQgYXBwZW5kQ2FsbFNldFJlc3VsdChjb25zdCBGdW5jdGlvblB0ciYgZnVuY3Rp
b24sIEdQUlJlZyByZXN1bHQpCi0gICAgewotICAgICAgICBhcHBlbmRDYWxsKGZ1bmN0aW9uKTsK
LSAgICAgICAgbW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0KTsKLSAgICB9Ci0K
LSNpZiBDUFUoWDg2KQotICAgIHZvaWQgYXBwZW5kQ2FsbFNldFJlc3VsdChjb25zdCBGdW5jdGlv
blB0ciYgZnVuY3Rpb24sIEZQUlJlZyByZXN1bHQsIEZsb2F0aW5nUG9pbnRQcmVjaXNpb24gcHJl
Y2lzaW9uKQotICAgIHsKLSAgICAgICAgYXBwZW5kQ2FsbChmdW5jdGlvbik7Ci0gICAgICAgIHN3
aXRjaCAocHJlY2lzaW9uKSB7Ci0gICAgICAgIGNhc2UgRmxvYXRpbmdQb2ludFByZWNpc2lvbjo6
U2luZ2xlOgotICAgICAgICAgICAgbV9hc3NlbWJsZXIuZnN0cHMoMCwgc3RhY2tQb2ludGVyUmVn
aXN0ZXIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRmxvYXRpbmdQb2ludFBy
ZWNpc2lvbjo6RG91YmxlOgotICAgICAgICAgICAgbV9hc3NlbWJsZXIuZnN0cGwoMCwgc3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
bG9hZERvdWJsZShzdGFja1BvaW50ZXJSZWdpc3RlciwgcmVzdWx0KTsKLSAgICB9Ci0jZWxpZiBD
UFUoQVJNKSAmJiAhQ1BVKEFSTV9IQVJERlApCi0gICAgdm9pZCBhcHBlbmRDYWxsU2V0UmVzdWx0
KGNvbnN0IEZ1bmN0aW9uUHRyJiBmdW5jdGlvbiwgRlBSUmVnIHJlc3VsdCwgRmxvYXRpbmdQb2lu
dFByZWNpc2lvbikKLSAgICB7Ci0gICAgICAgIGFwcGVuZENhbGwoZnVuY3Rpb24pOwotICAgICAg
ICBtX2Fzc2VtYmxlci52bW92KHJlc3VsdCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUklu
Zm86OnJldHVyblZhbHVlR1BSMik7Ci0gICAgfQotI2Vsc2UgLy8gQ1BVKFg4Nl82NCkgfHwgKENQ
VShBUk0pICYmIENQVShBUk1fSEFSREZQKSkgfHwgQ1BVKEFSTTY0KSB8fCBDUFUoTUlQUykgfHwg
Q1BVKFNINCkKLSAgICB2b2lkIGFwcGVuZENhbGxTZXRSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHIm
IGZ1bmN0aW9uLCBGUFJSZWcgcmVzdWx0LCBGbG9hdGluZ1BvaW50UHJlY2lzaW9uKQotICAgIHsK
LSAgICAgICAgYXBwZW5kQ2FsbChmdW5jdGlvbik7Ci0gICAgICAgIG1vdmVEb3VibGUoRlBSSW5m
bzo6cmV0dXJuVmFsdWVGUFIsIHJlc3VsdCk7Ci0gICAgfQotI2VuZGlmCi0KLSNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIHZvaWQgY2FsbE9wZXJhdGlvbihaX0pJVE9wZXJhdGlvbl9FSiBvcGVyYXRp
b24sIEdQUlJlZyBzcmMsIEdQUlJlZyBkc3QpCi0gICAgewotICAgICAgICBzZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoc3JjKTsKLSAgICAgICAgYXBwZW5kQ2FsbFNldFJlc3VsdChvcGVyYXRp
b24sIGRzdCk7Ci0gICAgfQotCi0gICAgdm9pZCBjYWxsT3BlcmF0aW9uKERfSklUT3BlcmF0aW9u
X0VKIG9wZXJhdGlvbiwgR1BSUmVnIHNyYywgRlBSUmVnIGRzdCkKLSAgICB7Ci0gICAgICAgIHNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShzcmMpOwotICAgICAgICBhcHBlbmRDYWxsU2V0UmVz
dWx0KG9wZXJhdGlvbiwgZHN0LCBGbG9hdGluZ1BvaW50UHJlY2lzaW9uOjpEb3VibGUpOwotICAg
IH0KLSNlbHNlCi0vLyBFbmNvZGVkSlNWYWx1ZSBpbiBKU1ZBTFVFMzJfNjQgaXMgYSA2NC1iaXQg
aW50ZWdlci4gV2hlbiBiZWluZyBjb21waWxlZCBpbiBBUk0gRUFCSSwgaXQgbXVzdCBiZSBhbGln
bmVkIG9uIGFuIGV2ZW4tbnVtYmVyZWQgcmVnaXN0ZXIgKHIwLCByMiBvciBbc3BdKS4KLS8vIFRv
IHByZXZlbnQgdGhlIGFzc2VtYmxlciBmcm9tIHVzaW5nIHdyb25nIHJlZ2lzdGVycywgbGV0J3Mg
b2NjdXB5IHIxIG9yIHIzIHdpdGggYSBkdW1teSBhcmd1bWVudCB3aGVuIG5lY2Vzc2FyeS4KLSNp
ZiAoQ09NUElMRVJfU1VQUE9SVFMoRUFCSSkgJiYgQ1BVKEFSTSkpIHx8IENQVShNSVBTKQotI2Rl
ZmluZSBFQUJJXzMyQklUX0RVTU1ZX0FSRyAgICAgIFRydXN0ZWRJbW0zMigwKSwKLSNlbHNlCi0j
ZGVmaW5lIEVBQklfMzJCSVRfRFVNTVlfQVJHCi0jZW5kaWYKLQotICAgIHZvaWQgY2FsbE9wZXJh
dGlvbihaX0pJVE9wZXJhdGlvbl9FSiBvcGVyYXRpb24sIEdQUlJlZyBzcmNUYWcsIEdQUlJlZyBz
cmNQYXlsb2FkLCBHUFJSZWcgZHN0KQotICAgIHsKLSAgICAgICAgc2V0dXBBcmd1bWVudHNXaXRo
RXhlY1N0YXRlKEVBQklfMzJCSVRfRFVNTVlfQVJHIHNyY1BheWxvYWQsIHNyY1RhZyk7Ci0gICAg
ICAgIGFwcGVuZENhbGxTZXRSZXN1bHQob3BlcmF0aW9uLCBkc3QpOwotICAgIH0KLQotICAgIHZv
aWQgY2FsbE9wZXJhdGlvbihEX0pJVE9wZXJhdGlvbl9FSiBvcGVyYXRpb24sIEdQUlJlZyBzcmNU
YWcsIEdQUlJlZyBzcmNQYXlsb2FkLCBGUFJSZWcgZHN0KQotICAgIHsKLSAgICAgICAgc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVNTVlfQVJHIHNyY1BheWxvYWQsIHNy
Y1RhZyk7Ci0gICAgICAgIGFwcGVuZENhbGxTZXRSZXN1bHQob3BlcmF0aW9uLCBkc3QsIEZsb2F0
aW5nUG9pbnRQcmVjaXNpb246OkRvdWJsZSk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICB2b2lkIGNh
bGxPcGVyYXRpb24oZmxvYXQgSklUX09QRVJBVElPTiAoKm9wZXJhdGlvbikoZmxvYXQpLCBGUFJl
Z2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZHN0KQotICAgIHsKLSAgICAgICAgc2V0dXBBcmd1
bWVudHMoc3JjKTsKLSAgICAgICAgYXBwZW5kQ2FsbFNldFJlc3VsdChvcGVyYXRpb24sIGRzdCwg
RmxvYXRpbmdQb2ludFByZWNpc2lvbjo6U2luZ2xlKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNhbGxP
cGVyYXRpb24oRF9KSVRPcGVyYXRpb25fRCBvcGVyYXRpb24sIEZQUmVnaXN0ZXJJRCBzcmMsIEZQ
UmVnaXN0ZXJJRCBkc3QpCi0gICAgewotICAgICAgICBzZXR1cEFyZ3VtZW50cyhzcmMpOwotICAg
ICAgICBhcHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwgZHN0LCBGbG9hdGluZ1BvaW50UHJl
Y2lzaW9uOjpEb3VibGUpOwotICAgIH0KLQotICAgIHZvaWQgY2FsbE9wZXJhdGlvbihpbnQzMl90
IEpJVF9PUEVSQVRJT04gKCpvcGVyYXRpb24pKGludDMyX3QsIGludDMyX3QpLCBHUFJSZWcgc3Jj
MSwgR1BSUmVnIHNyYzIsIEdQUlJlZyBkc3QpCi0gICAgewotICAgICAgICBzZXR1cEFyZ3VtZW50
cyhzcmMxLCBzcmMyKTsKLSAgICAgICAgYXBwZW5kQ2FsbFNldFJlc3VsdChvcGVyYXRpb24sIGRz
dCk7Ci0gICAgfQotCi0gICAgdm9pZCBjYWxsT3BlcmF0aW9uKHVpbnQzMl90IEpJVF9PUEVSQVRJ
T04gKCpvcGVyYXRpb24pKHVpbnQzMl90LCB1aW50MzJfdCksIEdQUlJlZyBzcmMxLCBHUFJSZWcg
c3JjMiwgR1BSUmVnIGRzdCkKLSAgICB7Ci0gICAgICAgIHNldHVwQXJndW1lbnRzKHNyYzEsIHNy
YzIpOwotICAgICAgICBhcHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwgZHN0KTsKLSAgICB9
Ci0KLSAgICB2b2lkIGNhbGxPcGVyYXRpb24oRF9KSVRPcGVyYXRpb25fREQgb3BlcmF0aW9uLCBG
UFJlZ2lzdGVySUQgc3JjMSwgRlBSZWdpc3RlcklEIHNyYzIsIEZQUmVnaXN0ZXJJRCBkc3QpCi0g
ICAgewotICAgICAgICBzZXR1cEFyZ3VtZW50cyhzcmMxLCBzcmMyKTsKLSAgICAgICAgYXBwZW5k
Q2FsbFNldFJlc3VsdChvcGVyYXRpb24sIGRzdCwgRmxvYXRpbmdQb2ludFByZWNpc2lvbjo6RG91
YmxlKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNhbGxPcGVyYXRpb24oZG91YmxlIEpJVF9PUEVSQVRJ
T04gKCpvcGVyYXRpb24pKHVpbnQzMl90KSwgR1BSUmVnIHNyYywgRlBSZWdpc3RlcklEIGRzdCkK
LSAgICB7Ci0gICAgICAgIHNldHVwQXJndW1lbnRzKHNyYyk7Ci0gICAgICAgIGFwcGVuZENhbGxT
ZXRSZXN1bHQob3BlcmF0aW9uLCBkc3QsIEZsb2F0aW5nUG9pbnRQcmVjaXNpb246OkRvdWJsZSk7
Ci0gICAgfQotCi0gICAgdm9pZCBib3hBcmd1bWVudHNBbmRBZGp1c3RTdGFja1BvaW50ZXIoY29u
c3QgVmVjdG9yPFdBU01UeXBlPiYgYXJndW1lbnRzKQotICAgIHsKLSAgICAgICAgc2l6ZV90IGFy
Z3VtZW50Q291bnQgPSBhcmd1bWVudHMuc2l6ZSgpOwotICAgICAgICBpbnQgc3RhY2tPZmZzZXQg
PSAtbV9jYWxsZWVTYXZlU3BhY2UgLSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGln
bm1lbnRSZWdpc3RlcnMoKSwgbV9udW1iZXJPZkxvY2FscyArIG1fdGVtcFN0YWNrVG9wICsgYXJn
dW1lbnRDb3VudCArIDEgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyk7Ci0KLSAg
ICAgICAgc3RvcmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgQWRkcmVzcyhHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwgKHN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRP
ZmZzZXQoKSkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7Ci0KLSAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBhcmd1bWVudENvdW50OyArK2kpIHsKLSAgICAgICAgICAgIEFkZHJlc3MgYWRkcmVz
cyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgKHN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lOjph
cmd1bWVudE9mZnNldChpKSkgKiBzaXplb2YoUmVnaXN0ZXIpKTsKLSNpZiBVU0UoSlNWQUxVRTY0
KQotICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzKEdQUkluZm86OnJlZ1QwKTsKLSNl
bHNlCi0gICAgICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MoR1BSSW5mbzo6cmVnVDEsIEdQ
UkluZm86OnJlZ1QwKTsKLSNlbmRpZgotICAgICAgICAgICAgc3dpdGNoIChhcmd1bWVudHNbaV0p
IHsKLSAgICAgICAgICAgIGNhc2UgV0FTTVR5cGU6OkkzMjoKLSAgICAgICAgICAgICAgICBsb2Fk
MzIodGVtcG9yYXJ5QWRkcmVzcyhtX3RlbXBTdGFja1RvcCAtIGFyZ3VtZW50Q291bnQgKyBpKSwg
R1BSSW5mbzo6cmVnVDApOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICAgICAgb3I2
NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAg
ICAgICAgICAgICBzdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBhZGRyZXNzKTsKLSNlbHNlCi0gICAg
ICAgICAgICAgICAgc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgYWRkcmVzcy53aXRoT2Zmc2V0KFBh
eWxvYWRPZmZzZXQpKTsKLSAgICAgICAgICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpJbnQzMlRhZyksIGFkZHJlc3Mud2l0aE9mZnNldChUYWdPZmZzZXQpKTsKLSNlbmRpZgot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBXQVNNVHlwZTo6RjMyOgot
ICAgICAgICAgICAgY2FzZSBXQVNNVHlwZTo6RjY0OgotICAgICAgICAgICAgICAgIGxvYWREb3Vi
bGUodGVtcG9yYXJ5QWRkcmVzcyhtX3RlbXBTdGFja1RvcCAtIGFyZ3VtZW50Q291bnQgKyBpKSwg
RlBSSW5mbzo6ZnBSZWdUMCk7Ci0gICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c1tpXSA9PSBX
QVNNVHlwZTo6RjMyKQotICAgICAgICAgICAgICAgICAgICBjb252ZXJ0RmxvYXRUb0RvdWJsZShG
UFJJbmZvOjpmcFJlZ1QwLCBGUFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgICAgICAgICBjb252
ZXJ0RG91YmxlVG9WYWx1ZShGUFJJbmZvOjpmcFJlZ1QwLCB2YWx1ZVJlZ3MpOwotICAgICAgICAg
ICAgICAgIHN0b3JlVmFsdWUodmFsdWVSZWdzLCBhZGRyZXNzKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgbV90ZW1wU3RhY2tU
b3AgLT0gYXJndW1lbnRDb3VudDsKLQotICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNr
T2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgICAg
IHN0b3JlMzIoVHJ1c3RlZEltbTMyKGFyZ3VtZW50Q291bnQgKyAxKSwgQWRkcmVzcyhzdGFja1Bv
aW50ZXJSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCAqIHN0YXRpY19jYXN0
PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0IC0gc2l6ZW9mKENhbGxlckZy
YW1lQW5kUEMpKSk7Ci0gICAgfQotCi0gICAgdm9pZCBjYWxsQW5kVW5ib3hSZXN1bHQoV0FTTUV4
cHJlc3Npb25UeXBlIHJldHVyblR5cGUpCi0gICAgewotICAgICAgICAvLyByZWdUMCBob2xkcyBj
YWxsZWUuCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgc3RvcmU2NChHUFJJbmZvOjpyZWdU
MCwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICog
c3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSAtIHNpemVvZihDYWxsZXJGcmFtZUFu
ZFBDKSkpOwotI2Vsc2UKLSAgICAgICAgc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgQWRkcmVzcyhz
dGFja1BvaW50ZXJSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc3RhdGljX2Nhc3Q8
aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFBheWxvYWRPZmZzZXQgLSBzaXplb2YoQ2FsbGVyRnJh
bWVBbmRQQykpKTsKLSAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRh
ZyksIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAq
IHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBUYWdPZmZzZXQgLSBzaXplb2Yo
Q2FsbGVyRnJhbWVBbmRQQykpKTsKLSNlbmRpZgotCi0gICAgICAgIERhdGFMYWJlbFB0ciBhZGRy
ZXNzT2ZMaW5rZWRGdW5jdGlvbkNoZWNrOwotICAgICAgICBKdW1wIHNsb3dDYXNlID0gYnJhbmNo
UHRyV2l0aFBhdGNoKE5vdEVxdWFsLCBHUFJJbmZvOjpyZWdUMCwgYWRkcmVzc09mTGlua2VkRnVu
Y3Rpb25DaGVjaywgVHJ1c3RlZEltbVB0cigwKSk7Ci0KLSAgICAgICAgQ2FsbExpbmtJbmZvKiBp
bmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbygpOwotICAgICAgICBpbmZvLT5zZXRV
cENhbGwoQ2FsbExpbmtJbmZvOjpDYWxsLCBDb2RlT3JpZ2luKCksIEdQUkluZm86OnJlZ1QwKTsK
LSAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChDYWxsQ29tcGlsYXRpb25JbmZv
KCkpOwotICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm8ubGFzdCgpLmhvdFBhdGhCZWdpbiA9
IGFkZHJlc3NPZkxpbmtlZEZ1bmN0aW9uQ2hlY2s7Ci0gICAgICAgIG1fY2FsbENvbXBpbGF0aW9u
SW5mby5sYXN0KCkuY2FsbExpbmtJbmZvID0gaW5mbzsKLSAgICAgICAgbV9jYWxsQ29tcGlsYXRp
b25JbmZvLmxhc3QoKS5ob3RQYXRoT3RoZXIgPSBuZWFyQ2FsbCgpOwotICAgICAgICBKdW1wIGVu
ZCA9IGp1bXAoKTsKLQotICAgICAgICBzbG93Q2FzZS5saW5rKHRoaXMpOwotICAgICAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoaW5mbyksIEdQUkluZm86OnJlZ1QyKTsKLSAgICAgICAgbV9jYWxsQ29t
cGlsYXRpb25JbmZvLmxhc3QoKS5jYWxsUmV0dXJuTG9jYXRpb24gPSBlbWl0TmFrZWRDYWxsKG1f
dm0tPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKTsKLQotICAgICAg
ICBlbmQubGluayh0aGlzKTsKLSAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtbV9jYWxsZWVT
YXZlU3BhY2UgLSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRSZWdpc3Rl
cnMoKSwgbV9zdGFja0hlaWdodCkgKiBzaXplb2YoU3RhY2tTbG90KSAtIG1heEZyYW1lRXh0ZW50
Rm9yU2xvd1BhdGhDYWxsKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKLSAgICAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKLQotICAg
ICAgICAvLyBGSVhNRTogTm8gbmVlZCB0byBkbyB0eXBlIGNvbnZlcnNpb24gaWYgdGhlIGNhbGxl
ZSBpcyBhIFdlYkFzc2VtYmx5IGZ1bmN0aW9uLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5MzEwCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAg
ICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSNlbHNl
Ci0gICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIs
IEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSNlbmRpZgotICAgICAgICBzd2l0Y2ggKHJldHVy
blR5cGUpIHsKLSAgICAgICAgY2FzZSBXQVNNRXhwcmVzc2lvblR5cGU6OkkzMjoKLSAgICAgICAg
ICAgIGNvbnZlcnRWYWx1ZVRvSW50MzIodmFsdWVSZWdzLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAg
ICAgICAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1QwLCB0ZW1wb3JhcnlBZGRyZXNzKG1fdGVtcFN0
YWNrVG9wKyspKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdBU01FeHByZXNz
aW9uVHlwZTo6RjMyOgotICAgICAgICBjYXNlIFdBU01FeHByZXNzaW9uVHlwZTo6RjY0OgotI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBjb252ZXJ0VmFsdWVUb0RvdWJsZSh2YWx1ZVJl
Z3MsIEZQUkluZm86OmZwUmVnVDAsIEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7
Ci0jZWxzZQotICAgICAgICAgICAgY29udmVydFZhbHVlVG9Eb3VibGUodmFsdWVSZWdzLCBGUFJJ
bmZvOjpmcFJlZ1QwLCBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIsIEZQUkluZm86
OmZwUmVnVDEpOwotI2VuZGlmCi0gICAgICAgICAgICBpZiAocmV0dXJuVHlwZSA9PSBXQVNNRXhw
cmVzc2lvblR5cGU6OkYzMikKLSAgICAgICAgICAgICAgICBjb252ZXJ0RG91YmxlVG9GbG9hdChG
UFJJbmZvOjpmcFJlZ1QwLCBGUFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgICAgIHN0b3JlRG91
YmxlKEZQUkluZm86OmZwUmVnVDAsIHRlbXBvcmFyeUFkZHJlc3MobV90ZW1wU3RhY2tUb3ArKykp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV0FTTUV4cHJlc3Npb25UeXBlOjpW
b2lkOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgIH0KLQotI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgdm9pZCBjb252ZXJ0VmFsdWVUb0ludDMyKEpTVmFsdWVSZWdzIHZhbHVlUmVncywg
R1BSUmVnIGRzdCkKLSAgICB7Ci0gICAgICAgIEp1bXAgY2hlY2tKU0ludDMyID0gYnJhbmNoSWZJ
bnQzMih2YWx1ZVJlZ3MpOwotCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29udmVy
dEpTVmFsdWVUb0ludDMyLCB2YWx1ZVJlZ3MuZ3ByKCksIHZhbHVlUmVncy5ncHIoKSk7Ci0KLSAg
ICAgICAgY2hlY2tKU0ludDMyLmxpbmsodGhpcyk7Ci0gICAgICAgIG1vdmUodmFsdWVSZWdzLmdw
cigpLCBkc3QpOwotICAgIH0KLQotICAgIHZvaWQgY29udmVydFZhbHVlVG9Eb3VibGUoSlNWYWx1
ZVJlZ3MgdmFsdWVSZWdzLCBGUFJSZWcgZHN0LCBHUFJSZWcgc2NyYXRjaCkKLSAgICB7Ci0gICAg
ICAgIEp1bXAgY2hlY2tKU0ludDMyID0gYnJhbmNoSWZJbnQzMih2YWx1ZVJlZ3MpOwotICAgICAg
ICBKdW1wIGNoZWNrSlNOdW1iZXIgPSBicmFuY2hJZk51bWJlcih2YWx1ZVJlZ3MsIHNjcmF0Y2gp
OwotICAgICAgICBKdW1wTGlzdCBlbmQ7Ci0KLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Db252ZXJ0SlNWYWx1ZVRvRG91YmxlLCB2YWx1ZVJlZ3MuZ3ByKCksIGRzdCk7Ci0gICAgICAg
IGVuZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBjaGVja0pTSW50MzIubGluayh0aGlzKTsK
LSAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUodmFsdWVSZWdzLmdwcigpLCBkc3QpOwotICAg
ICAgICBlbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgY2hlY2tKU051bWJlci5saW5rKHRo
aXMpOwotICAgICAgICB1bmJveERvdWJsZVdpdGhvdXRBc3NlcnRpb25zKHZhbHVlUmVncy5ncHIo
KSwgc2NyYXRjaCwgZHN0KTsKLSAgICAgICAgZW5kLmxpbmsodGhpcyk7Ci0gICAgfQotI2Vsc2UK
LSAgICB2b2lkIGNvbnZlcnRWYWx1ZVRvSW50MzIoSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzLCBHUFJS
ZWcgZHN0KQotICAgIHsKLSAgICAgICAgSnVtcCBjaGVja0pTSW50MzIgPSBicmFuY2hJZkludDMy
KHZhbHVlUmVncyk7Ci0KLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db252ZXJ0SlNW
YWx1ZVRvSW50MzIsIHZhbHVlUmVncy50YWdHUFIoKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwg
dmFsdWVSZWdzLnBheWxvYWRHUFIoKSk7Ci0KLSAgICAgICAgY2hlY2tKU0ludDMyLmxpbmsodGhp
cyk7Ci0gICAgICAgIG1vdmUodmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgZHN0KTsKLSAgICB9Ci0K
LSAgICB2b2lkIGNvbnZlcnRWYWx1ZVRvRG91YmxlKEpTVmFsdWVSZWdzIHZhbHVlUmVncywgRlBS
UmVnIGRzdCwgR1BSUmVnIHNjcmF0Y2gsIEZQUlJlZyBmcFNjcmF0Y2gpCi0gICAgewotICAgICAg
ICBKdW1wIGNoZWNrSlNJbnQzMiA9IGJyYW5jaElmSW50MzIodmFsdWVSZWdzKTsKLSAgICAgICAg
SnVtcCBjaGVja0pTTnVtYmVyID0gYnJhbmNoSWZOdW1iZXIodmFsdWVSZWdzLCBzY3JhdGNoKTsK
LSAgICAgICAgSnVtcExpc3QgZW5kOwotCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
Q29udmVydEpTVmFsdWVUb0RvdWJsZSwgdmFsdWVSZWdzLnRhZ0dQUigpLCB2YWx1ZVJlZ3MucGF5
bG9hZEdQUigpLCBkc3QpOwotICAgICAgICBlbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAg
Y2hlY2tKU0ludDMyLmxpbmsodGhpcyk7Ci0gICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHZh
bHVlUmVncy5wYXlsb2FkR1BSKCksIGRzdCk7Ci0gICAgICAgIGVuZC5hcHBlbmQoanVtcCgpKTsK
LQotICAgICAgICBjaGVja0pTTnVtYmVyLmxpbmsodGhpcyk7Ci0gICAgICAgIHVuYm94RG91Ymxl
KHZhbHVlUmVncy50YWdHUFIoKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgZHN0LCBmcFNjcmF0
Y2gpOwotICAgICAgICBlbmQubGluayh0aGlzKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIHZvaWQg
Y29udmVydERvdWJsZVRvVmFsdWUoRlBSUmVnIGZwciwgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzKQot
ICAgIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBib3hEb3VibGUoZnByLCB2YWx1ZVJl
Z3MuZ3ByKCkpOwotI2Vsc2UKLSAgICAgICAgYm94RG91YmxlKGZwciwgdmFsdWVSZWdzLnRhZ0dQ
UigpLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsKLSNlbmRpZgotICAgIH0KLQotICAgIEpTV0FT
TU1vZHVsZSogbV9tb2R1bGU7Ci0gICAgdW5zaWduZWQgbV9zdGFja0hlaWdodDsKLSAgICB1bnNp
Z25lZCBtX251bWJlck9mTG9jYWxzOwotICAgIHVuc2lnbmVkIG1fdGVtcFN0YWNrVG9wIHsgMCB9
OwotICAgIHVuc2lnbmVkIG1fY2FsbGVlU2F2ZVNwYWNlOwotCi0gICAgVmVjdG9yPEp1bXBUYXJn
ZXQ+IG1fYnJlYWtUYXJnZXRzOwotICAgIFZlY3RvcjxKdW1wVGFyZ2V0PiBtX2NvbnRpbnVlVGFy
Z2V0czsKLSAgICBWZWN0b3I8SnVtcFRhcmdldD4gbV9icmVha0xhYmVsVGFyZ2V0czsKLSAgICBW
ZWN0b3I8SnVtcFRhcmdldD4gbV9jb250aW51ZUxhYmVsVGFyZ2V0czsKLQotICAgIExhYmVsIG1f
YmVnaW5MYWJlbDsKLSAgICBKdW1wIG1fc3RhY2tPdmVyZmxvdzsKLSAgICBKdW1wTGlzdCBtX2Rp
dmlkZUVycm9ySnVtcExpc3Q7Ci0gICAgSnVtcExpc3QgbV9vdXRPZkJvdW5kc0Vycm9ySnVtcExp
c3Q7Ci0gICAgSnVtcExpc3QgbV9leGNlcHRpb25DaGVja3M7Ci0KLSAgICBWZWN0b3I8c3RkOjpw
YWlyPENhbGwsIHZvaWQqPj4gbV9jYWxsczsKLSAgICBWZWN0b3I8Q2FsbENvbXBpbGF0aW9uSW5m
bz4gbV9jYWxsQ29tcGlsYXRpb25JbmZvOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNl
bmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCi0KLSNlbmRpZiAvLyBXQVNNRnVuY3Rpb25Db21w
aWxlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rp
b25QYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZ1bmN0aW9uUGFy
c2VyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY1ZGE1ODg1YjQyYTA3YTE1
ODFkNWFiZjkzOGIyNTE2ZDAxMjZlMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rpb25QYXJz
ZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTIyNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIldBU01GdW5jdGlvblBhcnNlci5oIgotCi0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotCi0j
aW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU1dBU01Nb2R1bGUuaCIK
LSNpbmNsdWRlICJXQVNNRnVuY3Rpb25Db21waWxlci5oIgotI2luY2x1ZGUgIldBU01GdW5jdGlv
bkIzSVJHZW5lcmF0b3IuaCIKLSNpbmNsdWRlICJXQVNNRnVuY3Rpb25TeW50YXhDaGVja2VyLmgi
Ci0KLSNkZWZpbmUgUFJPUEFHQVRFX0VSUk9SKCkgZG8geyBpZiAoIW1fZXJyb3JNZXNzYWdlLmlz
TnVsbCgpKSByZXR1cm4gMDsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgRkFJTF9XSVRIX01FU1NBR0Uo
ZXJyb3JNZXNzYWdlKSBkbyB7ICBtX2Vycm9yTWVzc2FnZSA9IGVycm9yTWVzc2FnZTsgcmV0dXJu
IDA7IH0gd2hpbGUgKDApCi0jZGVmaW5lIFJFQURfRkxPQVRfT1JfRkFJTChyZXN1bHQsIGVycm9y
TWVzc2FnZSkgZG8geyBpZiAoIW1fcmVhZGVyLnJlYWRGbG9hdChyZXN1bHQpKSBGQUlMX1dJVEhf
TUVTU0FHRShlcnJvck1lc3NhZ2UpOyB9IHdoaWxlICgwKQotI2RlZmluZSBSRUFEX0RPVUJMRV9P
Ul9GQUlMKHJlc3VsdCwgZXJyb3JNZXNzYWdlKSBkbyB7IGlmICghbV9yZWFkZXIucmVhZERvdWJs
ZShyZXN1bHQpKSBGQUlMX1dJVEhfTUVTU0FHRShlcnJvck1lc3NhZ2UpOyB9IHdoaWxlICgwKQot
I2RlZmluZSBSRUFEX0NPTVBBQ1RfSU5UMzJfT1JfRkFJTChyZXN1bHQsIGVycm9yTWVzc2FnZSkg
ZG8geyBpZiAoIW1fcmVhZGVyLnJlYWRDb21wYWN0SW50MzIocmVzdWx0KSkgRkFJTF9XSVRIX01F
U1NBR0UoZXJyb3JNZXNzYWdlKTsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgUkVBRF9DT01QQUNUX1VJ
TlQzMl9PUl9GQUlMKHJlc3VsdCwgZXJyb3JNZXNzYWdlKSBkbyB7IGlmICghbV9yZWFkZXIucmVh
ZENvbXBhY3RVSW50MzIocmVzdWx0KSkgRkFJTF9XSVRIX01FU1NBR0UoZXJyb3JNZXNzYWdlKTsg
fSB3aGlsZSAoMCkKLSNkZWZpbmUgUkVBRF9FWFBSRVNTSU9OX1RZUEVfT1JfRkFJTChyZXN1bHQs
IGVycm9yTWVzc2FnZSkgZG8geyBpZiAoIW1fcmVhZGVyLnJlYWRFeHByZXNzaW9uVHlwZShyZXN1
bHQpKSBGQUlMX1dJVEhfTUVTU0FHRShlcnJvck1lc3NhZ2UpOyB9IHdoaWxlICgwKQotI2RlZmlu
ZSBSRUFEX09QX1NUQVRFTUVOVF9PUl9GQUlMKGhhc0ltbWVkaWF0ZSwgb3AsIG9wV2l0aEltbWVk
aWF0ZSwgaW1tZWRpYXRlLCBlcnJvck1lc3NhZ2UpIGRvIHsgaWYgKCFtX3JlYWRlci5yZWFkT3BT
dGF0ZW1lbnQoaGFzSW1tZWRpYXRlLCBvcCwgb3BXaXRoSW1tZWRpYXRlLCBpbW1lZGlhdGUpKSBG
QUlMX1dJVEhfTUVTU0FHRShlcnJvck1lc3NhZ2UpOyB9IHdoaWxlICgwKQotI2RlZmluZSBSRUFE
X09QX0VYUFJFU1NJT05fSTMyX09SX0ZBSUwoaGFzSW1tZWRpYXRlLCBvcCwgb3BXaXRoSW1tZWRp
YXRlLCBpbW1lZGlhdGUsIGVycm9yTWVzc2FnZSkgZG8geyBpZiAoIW1fcmVhZGVyLnJlYWRPcEV4
cHJlc3Npb25JMzIoaGFzSW1tZWRpYXRlLCBvcCwgb3BXaXRoSW1tZWRpYXRlLCBpbW1lZGlhdGUp
KSBGQUlMX1dJVEhfTUVTU0FHRShlcnJvck1lc3NhZ2UpOyB9IHdoaWxlICgwKQotI2RlZmluZSBS
RUFEX09QX0VYUFJFU1NJT05fRjMyX09SX0ZBSUwoaGFzSW1tZWRpYXRlLCBvcCwgb3BXaXRoSW1t
ZWRpYXRlLCBpbW1lZGlhdGUsIGVycm9yTWVzc2FnZSkgZG8geyBpZiAoIW1fcmVhZGVyLnJlYWRP
cEV4cHJlc3Npb25GMzIoaGFzSW1tZWRpYXRlLCBvcCwgb3BXaXRoSW1tZWRpYXRlLCBpbW1lZGlh
dGUpKSBGQUlMX1dJVEhfTUVTU0FHRShlcnJvck1lc3NhZ2UpOyB9IHdoaWxlICgwKQotI2RlZmlu
ZSBSRUFEX09QX0VYUFJFU1NJT05fRjY0X09SX0ZBSUwoaGFzSW1tZWRpYXRlLCBvcCwgb3BXaXRo
SW1tZWRpYXRlLCBpbW1lZGlhdGUsIGVycm9yTWVzc2FnZSkgZG8geyBpZiAoIW1fcmVhZGVyLnJl
YWRPcEV4cHJlc3Npb25GNjQoaGFzSW1tZWRpYXRlLCBvcCwgb3BXaXRoSW1tZWRpYXRlLCBpbW1l
ZGlhdGUpKSBGQUlMX1dJVEhfTUVTU0FHRShlcnJvck1lc3NhZ2UpOyB9IHdoaWxlICgwKQotI2Rl
ZmluZSBSRUFEX09QX0VYUFJFU1NJT05fVk9JRF9PUl9GQUlMKG9wLCBlcnJvck1lc3NhZ2UpIGRv
IHsgaWYgKCFtX3JlYWRlci5yZWFkT3BFeHByZXNzaW9uVm9pZChvcCkpIEZBSUxfV0lUSF9NRVNT
QUdFKGVycm9yTWVzc2FnZSk7IH0gd2hpbGUgKDApCi0jZGVmaW5lIFJFQURfVkFSSUFCTEVfVFlQ
RVNfT1JfRkFJTChoYXNJbW1lZGlhdGUsIHZhcmlhYmxlVHlwZXMsIHZhcmlhYmxlVHlwZXNXaXRo
SW1tZWRpYXRlLCBpbW1lZGlhdGUsIGVycm9yTWVzc2FnZSkgZG8geyBpZiAoIW1fcmVhZGVyLnJl
YWRWYXJpYWJsZVR5cGVzKGhhc0ltbWVkaWF0ZSwgdmFyaWFibGVUeXBlcywgdmFyaWFibGVUeXBl
c1dpdGhJbW1lZGlhdGUsIGltbWVkaWF0ZSkpIEZBSUxfV0lUSF9NRVNTQUdFKGVycm9yTWVzc2Fn
ZSk7IH0gd2hpbGUgKDApCi0jZGVmaW5lIFJFQURfU1dJVENIX0NBU0VfT1JfRkFJTChyZXN1bHQs
IGVycm9yTWVzc2FnZSkgZG8geyBpZiAoIW1fcmVhZGVyLnJlYWRTd2l0Y2hDYXNlKHJlc3VsdCkp
IEZBSUxfV0lUSF9NRVNTQUdFKGVycm9yTWVzc2FnZSk7IH0gd2hpbGUgKDApCi0jZGVmaW5lIEZB
SUxfSUZfRkFMU0UoY29uZGl0aW9uLCBlcnJvck1lc3NhZ2UpIGRvIHsgaWYgKCEoY29uZGl0aW9u
KSkgRkFJTF9XSVRIX01FU1NBR0UoZXJyb3JNZXNzYWdlKTsgfSB3aGlsZSAoMCkKLQotI2RlZmlu
ZSBVTlVTRUQgMAotCi1uYW1lc3BhY2UgSlNDIHsKLQotc3RhdGljIFN0cmluZyBuYW1lT2ZUeXBl
KFdBU01UeXBlIHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBXQVNNVHlw
ZTo6STMyOgotICAgICAgICByZXR1cm4gImludDMyIjsKLSAgICBjYXNlIFdBU01UeXBlOjpGMzI6
Ci0gICAgICAgIHJldHVybiAiZmxvYXQzMiI7Ci0gICAgY2FzZSBXQVNNVHlwZTo6RjY0OgotICAg
ICAgICByZXR1cm4gImZsb2F0NjQiOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotfQotCi1ib29sIFdBU01GdW5jdGlvblBhcnNlcjo6
Y2hlY2tTeW50YXgoSlNXQVNNTW9kdWxlKiBtb2R1bGUsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJj
ZSwgc2l6ZV90IGZ1bmN0aW9uSW5kZXgsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0SW5Tb3VyY2UsIHVu
c2lnbmVkJiBlbmRPZmZzZXRJblNvdXJjZSwgdW5zaWduZWQmIHN0YWNrSGVpZ2h0LCBTdHJpbmcm
IGVycm9yTWVzc2FnZSkKLXsKLSAgICBXQVNNRnVuY3Rpb25QYXJzZXIgcGFyc2VyKG1vZHVsZSwg
c291cmNlLCBmdW5jdGlvbkluZGV4KTsKLSAgICBXQVNNRnVuY3Rpb25TeW50YXhDaGVja2VyIHN5
bnRheENoZWNrZXI7Ci0gICAgcGFyc2VyLm1fcmVhZGVyLnNldE9mZnNldChzdGFydE9mZnNldElu
U291cmNlKTsKLSAgICBwYXJzZXIucGFyc2VGdW5jdGlvbihzeW50YXhDaGVja2VyKTsKLSAgICBp
ZiAoIXBhcnNlci5tX2Vycm9yTWVzc2FnZS5pc051bGwoKSkgewotICAgICAgICBlcnJvck1lc3Nh
Z2UgPSBwYXJzZXIubV9lcnJvck1lc3NhZ2U7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0gICAgZW5kT2Zmc2V0SW5Tb3VyY2UgPSBwYXJzZXIubV9yZWFkZXIub2Zmc2V0KCk7Ci0gICAg
c3RhY2tIZWlnaHQgPSBzeW50YXhDaGVja2VyLnN0YWNrSGVpZ2h0KCk7Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLXZvaWQgV0FTTUZ1bmN0aW9uUGFyc2VyOjpjb21waWxlKFZNJiB2bSwgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEpTV0FTTU1vZHVsZSogbW9kdWxlLCBjb25zdCBTb3VyY2VDb2RlJiBz
b3VyY2UsIHNpemVfdCBmdW5jdGlvbkluZGV4KQotewotICAgIFdBU01GdW5jdGlvblBhcnNlciBw
YXJzZXIobW9kdWxlLCBzb3VyY2UsIGZ1bmN0aW9uSW5kZXgpOwotICAgIFdBU01GdW5jdGlvbkNv
bXBpbGVyIGNvbXBpbGVyKHZtLCBjb2RlQmxvY2ssIG1vZHVsZSwgbW9kdWxlLT5mdW5jdGlvblN0
YWNrSGVpZ2h0cygpW2Z1bmN0aW9uSW5kZXhdKTsKLSAgICBwYXJzZXIubV9yZWFkZXIuc2V0T2Zm
c2V0KG1vZHVsZS0+ZnVuY3Rpb25TdGFydE9mZnNldHNJblNvdXJjZSgpW2Z1bmN0aW9uSW5kZXhd
KTsKLSAgICBwYXJzZXIucGFyc2VGdW5jdGlvbihjb21waWxlcik7Ci0gICAgQVNTRVJUKHBhcnNl
ci5tX2Vycm9yTWVzc2FnZS5pc051bGwoKSk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBDb250ZXh0
PgotYm9vbCBXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlRnVuY3Rpb24oQ29udGV4dCYgY29udGV4
dCkKLXsKLSAgICBjb25zdCBXQVNNU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBtX21vZHVsZS0+c2ln
bmF0dXJlcygpW21fbW9kdWxlLT5mdW5jdGlvbkRlY2xhcmF0aW9ucygpW21fZnVuY3Rpb25JbmRl
eF0uc2lnbmF0dXJlSW5kZXhdOwotCi0gICAgbV9yZXR1cm5UeXBlID0gc2lnbmF0dXJlLnJldHVy
blR5cGU7Ci0KLSAgICBwYXJzZUxvY2FsVmFyaWFibGVzKCk7Ci0gICAgUFJPUEFHQVRFX0VSUk9S
KCk7Ci0KLSAgICBjb25zdCBWZWN0b3I8V0FTTVR5cGU+JiBhcmd1bWVudHMgPSBzaWduYXR1cmUu
YXJndW1lbnRzOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJndW1lbnRzLnNpemUoKTsg
KytpKQotICAgICAgICBtX2xvY2FsVHlwZXMuYXBwZW5kKGFyZ3VtZW50c1tpXSk7Ci0gICAgZm9y
ICh1aW50MzJfdCBpID0gMDsgaSA8IG1fbnVtYmVyT2ZJMzJMb2NhbFZhcmlhYmxlczsgKytpKQot
ICAgICAgICBtX2xvY2FsVHlwZXMuYXBwZW5kKFdBU01UeXBlOjpJMzIpOwotICAgIGZvciAodWlu
dDMyX3QgaSA9IDA7IGkgPCBtX251bWJlck9mRjMyTG9jYWxWYXJpYWJsZXM7ICsraSkKLSAgICAg
ICAgbV9sb2NhbFR5cGVzLmFwcGVuZChXQVNNVHlwZTo6RjMyKTsKLSAgICBmb3IgKHVpbnQzMl90
IGkgPSAwOyBpIDwgbV9udW1iZXJPZkY2NExvY2FsVmFyaWFibGVzOyArK2kpCi0gICAgICAgIG1f
bG9jYWxUeXBlcy5hcHBlbmQoV0FTTVR5cGU6OkY2NCk7Ci0KLSAgICBjb250ZXh0LnN0YXJ0RnVu
Y3Rpb24oYXJndW1lbnRzLCBtX251bWJlck9mSTMyTG9jYWxWYXJpYWJsZXMsIG1fbnVtYmVyT2ZG
MzJMb2NhbFZhcmlhYmxlcywgbV9udW1iZXJPZkY2NExvY2FsVmFyaWFibGVzKTsKLQotICAgIHBh
cnNlQmxvY2tTdGF0ZW1lbnQoY29udGV4dCk7Ci0gICAgUFJPUEFHQVRFX0VSUk9SKCk7Ci0KLSAg
ICBjb250ZXh0LmVuZEZ1bmN0aW9uKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV0FT
TUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUxvY2FsVmFyaWFibGVzKCkKLXsKLSAgICBtX251bWJlck9m
STMyTG9jYWxWYXJpYWJsZXMgPSAwOwotICAgIG1fbnVtYmVyT2ZGMzJMb2NhbFZhcmlhYmxlcyA9
IDA7Ci0gICAgbV9udW1iZXJPZkY2NExvY2FsVmFyaWFibGVzID0gMDsKLQotICAgIGJvb2wgaGFz
SW1tZWRpYXRlOwotICAgIFdBU01WYXJpYWJsZVR5cGVzIHZhcmlhYmxlVHlwZXM7Ci0gICAgV0FT
TVZhcmlhYmxlVHlwZXNXaXRoSW1tZWRpYXRlIHZhcmlhYmxlVHlwZXNXaXRoSW1tZWRpYXRlOwot
ICAgIHVpbnQ4X3QgaW1tZWRpYXRlOwotICAgIFJFQURfVkFSSUFCTEVfVFlQRVNfT1JfRkFJTCho
YXNJbW1lZGlhdGUsIHZhcmlhYmxlVHlwZXMsIHZhcmlhYmxlVHlwZXNXaXRoSW1tZWRpYXRlLCBp
bW1lZGlhdGUsICJDYW5ub3QgcmVhZCB0aGUgdHlwZXMgb2YgbG9jYWwgdmFyaWFibGVzLiIpOwot
ICAgIGlmICghaGFzSW1tZWRpYXRlKSB7Ci0gICAgICAgIGlmIChzdGF0aWNfY2FzdDx1aW50OF90
Pih2YXJpYWJsZVR5cGVzKSAmIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KFdBU01WYXJpYWJsZVR5cGVz
OjpJMzIpKQotICAgICAgICAgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKG1fbnVtYmVy
T2ZJMzJMb2NhbFZhcmlhYmxlcywgIkNhbm5vdCByZWFkIHRoZSBudW1iZXIgb2YgaW50MzIgbG9j
YWwgdmFyaWFibGVzLiIpOwotICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8dWludDhfdD4odmFyaWFi
bGVUeXBlcykgJiBzdGF0aWNfY2FzdDx1aW50OF90PihXQVNNVmFyaWFibGVUeXBlczo6RjMyKSkK
LSAgICAgICAgICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChtX251bWJlck9mRjMyTG9j
YWxWYXJpYWJsZXMsICJDYW5ub3QgcmVhZCB0aGUgbnVtYmVyIG9mIGZsb2F0MzIgbG9jYWwgdmFy
aWFibGVzLiIpOwotICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8dWludDhfdD4odmFyaWFibGVUeXBl
cykgJiBzdGF0aWNfY2FzdDx1aW50OF90PihXQVNNVmFyaWFibGVUeXBlczo6RjY0KSkKLSAgICAg
ICAgICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChtX251bWJlck9mRjY0TG9jYWxWYXJp
YWJsZXMsICJDYW5ub3QgcmVhZCB0aGUgbnVtYmVyIG9mIGZsb2F0NjQgbG9jYWwgdmFyaWFibGVz
LiIpOwotICAgIH0gZWxzZQotICAgICAgICBtX251bWJlck9mSTMyTG9jYWxWYXJpYWJsZXMgPSBp
bW1lZGlhdGU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBDb250ZXh0
PgotQ29udGV4dFN0YXRlbWVudCBXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlU3RhdGVtZW50KENv
bnRleHQmIGNvbnRleHQpCi17Ci0gICAgYm9vbCBoYXNJbW1lZGlhdGU7Ci0gICAgV0FTTU9wU3Rh
dGVtZW50IG9wOwotICAgIFdBU01PcFN0YXRlbWVudFdpdGhJbW1lZGlhdGUgb3BXaXRoSW1tZWRp
YXRlOwotICAgIHVpbnQ4X3QgaW1tZWRpYXRlOwotICAgIFJFQURfT1BfU1RBVEVNRU5UX09SX0ZB
SUwoaGFzSW1tZWRpYXRlLCBvcCwgb3BXaXRoSW1tZWRpYXRlLCBpbW1lZGlhdGUsICJDYW5ub3Qg
cmVhZCB0aGUgc3RhdGVtZW50IG9wY29kZS4iKTsKLSAgICBpZiAoIWhhc0ltbWVkaWF0ZSkgewot
ICAgICAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgIGNhc2UgV0FTTU9wU3RhdGVtZW50OjpTZXRM
b2NhbDoKLSAgICAgICAgICAgIHBhcnNlU2V0TG9jYWwoY29udGV4dCwgV0FTTU9wS2luZDo6U3Rh
dGVtZW50LCBXQVNNRXhwcmVzc2lvblR5cGU6OlZvaWQpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgV0FTTU9wU3RhdGVtZW50OjpTZXRHbG9iYWw6Ci0gICAgICAgICAgICBwYXJz
ZVNldEdsb2JhbChjb250ZXh0LCBXQVNNT3BLaW5kOjpTdGF0ZW1lbnQsIFdBU01FeHByZXNzaW9u
VHlwZTo6Vm9pZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXQVNNT3BTdGF0
ZW1lbnQ6OkkzMlN0b3JlODoKLSAgICAgICAgICAgIHBhcnNlU3RvcmUoY29udGV4dCwgV0FTTU9w
S2luZDo6U3RhdGVtZW50LCBXQVNNRXhwcmVzc2lvblR5cGU6OkkzMiwgV0FTTU1lbW9yeVR5cGU6
Okk4LCBNZW1vcnlBY2Nlc3NPZmZzZXRNb2RlOjpOb09mZnNldCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBXQVNNT3BTdGF0ZW1lbnQ6OkkzMlN0b3JlV2l0aE9mZnNldDg6Ci0g
ICAgICAgICAgICBwYXJzZVN0b3JlKGNvbnRleHQsIFdBU01PcEtpbmQ6OlN0YXRlbWVudCwgV0FT
TUV4cHJlc3Npb25UeXBlOjpJMzIsIFdBU01NZW1vcnlUeXBlOjpJOCwgTWVtb3J5QWNjZXNzT2Zm
c2V0TW9kZTo6V2l0aE9mZnNldCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBX
QVNNT3BTdGF0ZW1lbnQ6OkkzMlN0b3JlMTY6Ci0gICAgICAgICAgICBwYXJzZVN0b3JlKGNvbnRl
eHQsIFdBU01PcEtpbmQ6OlN0YXRlbWVudCwgV0FTTUV4cHJlc3Npb25UeXBlOjpJMzIsIFdBU01N
ZW1vcnlUeXBlOjpJMTYsIE1lbW9yeUFjY2Vzc09mZnNldE1vZGU6Ok5vT2Zmc2V0KTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdBU01PcFN0YXRlbWVudDo6STMyU3RvcmVXaXRo
T2Zmc2V0MTY6Ci0gICAgICAgICAgICBwYXJzZVN0b3JlKGNvbnRleHQsIFdBU01PcEtpbmQ6OlN0
YXRlbWVudCwgV0FTTUV4cHJlc3Npb25UeXBlOjpJMzIsIFdBU01NZW1vcnlUeXBlOjpJMTYsIE1l
bW9yeUFjY2Vzc09mZnNldE1vZGU6OldpdGhPZmZzZXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgV0FTTU9wU3RhdGVtZW50OjpJMzJTdG9yZTMyOgotICAgICAgICAgICAgcGFy
c2VTdG9yZShjb250ZXh0LCBXQVNNT3BLaW5kOjpTdGF0ZW1lbnQsIFdBU01FeHByZXNzaW9uVHlw
ZTo6STMyLCBXQVNNTWVtb3J5VHlwZTo6STMyLCBNZW1vcnlBY2Nlc3NPZmZzZXRNb2RlOjpOb09m
ZnNldCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXQVNNT3BTdGF0ZW1lbnQ6
OkkzMlN0b3JlV2l0aE9mZnNldDMyOgotICAgICAgICAgICAgcGFyc2VTdG9yZShjb250ZXh0LCBX
QVNNT3BLaW5kOjpTdGF0ZW1lbnQsIFdBU01FeHByZXNzaW9uVHlwZTo6STMyLCBXQVNNTWVtb3J5
VHlwZTo6STMyLCBNZW1vcnlBY2Nlc3NPZmZzZXRNb2RlOjpXaXRoT2Zmc2V0KTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdBU01PcFN0YXRlbWVudDo6RjMyU3RvcmU6Ci0gICAg
ICAgICAgICBwYXJzZVN0b3JlKGNvbnRleHQsIFdBU01PcEtpbmQ6OlN0YXRlbWVudCwgV0FTTUV4
cHJlc3Npb25UeXBlOjpGMzIsIFdBU01NZW1vcnlUeXBlOjpGMzIsIE1lbW9yeUFjY2Vzc09mZnNl
dE1vZGU6Ok5vT2Zmc2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdBU01P
cFN0YXRlbWVudDo6RjMyU3RvcmVXaXRoT2Zmc2V0OgotICAgICAgICAgICAgcGFyc2VTdG9yZShj
b250ZXh0LCBXQVNNT3BLaW5kOjpTdGF0ZW1lbnQsIFdBU01FeHByZXNzaW9uVHlwZTo6RjMyLCBX
QVNNTWVtb3J5VHlwZTo6RjMyLCBNZW1vcnlBY2Nlc3NPZmZzZXRNb2RlOjpXaXRoT2Zmc2V0KTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdBU01PcFN0YXRlbWVudDo6RjY0U3Rv
cmU6Ci0gICAgICAgICAgICBwYXJzZVN0b3JlKGNvbnRleHQsIFdBU01PcEtpbmQ6OlN0YXRlbWVu
dCwgV0FTTUV4cHJlc3Npb25UeXBlOjpGNjQsIFdBU01NZW1vcnlUeXBlOjpGNjQsIE1lbW9yeUFj
Y2Vzc09mZnNldE1vZGU6Ok5vT2Zmc2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIFdBU01PcFN0YXRlbWVudDo6RjY0U3RvcmVXaXRoT2Zmc2V0OgotICAgICAgICAgICAgcGFy
c2VTdG9yZShjb250ZXh0LCBXQVNNT3BLaW5kOjpTdGF0ZW1lbnQsIFdBU01FeHByZXNzaW9uVHlw
ZTo6RjY0LCBXQVNNTWVtb3J5VHlwZTo6RjY0LCBNZW1vcnlBY2Nlc3NPZmZzZXRNb2RlOjpXaXRo
T2Zmc2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdBU01PcFN0YXRlbWVu
dDo6Q2FsbEludGVybmFsOgotICAgICAgICAgICAgcGFyc2VDYWxsSW50ZXJuYWwoY29udGV4dCwg
V0FTTU9wS2luZDo6U3RhdGVtZW50LCBXQVNNRXhwcmVzc2lvblR5cGU6OlZvaWQpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV0FTTU9wU3RhdGVtZW50OjpDYWxsSW5kaXJlY3Q6
Ci0gICAgICAgICAgICBwYXJzZUNhbGxJbmRpcmVjdChjb250ZXh0LCBXQVNNT3BLaW5kOjpTdGF0
ZW1lbnQsIFdBU01FeHByZXNzaW9uVHlwZTo6Vm9pZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBXQVNNT3BTdGF0ZW1lbnQ6OkNhbGxJbXBvcnQ6Ci0gICAgICAgICAgICBwYXJz
ZUNhbGxJbXBvcnQoY29udGV4dCwgV0FTTU9wS2luZDo6U3RhdGVtZW50LCBXQVNNRXhwcmVzc2lv
blR5cGU6OlZvaWQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV0FTTU9wU3Rh
dGVtZW50OjpSZXR1cm46Ci0gICAgICAgICAgICBwYXJzZVJldHVyblN0YXRlbWVudChjb250ZXh0
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdBU01PcFN0YXRlbWVudDo6Qmxv
Y2s6Ci0gICAgICAgICAgICBwYXJzZUJsb2NrU3RhdGVtZW50KGNvbnRleHQpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV0FTTU9wU3RhdGVtZW50OjpJZjoKLSAgICAgICAgICAg
IHBhcnNlSWZTdGF0ZW1lbnQoY29udGV4dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBXQVNNT3BTdGF0ZW1lbnQ6OklmRWxzZToKLSAgICAgICAgICAgIHBhcnNlSWZFbHNlU3Rh
dGVtZW50KGNvbnRleHQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV0FTTU9w
U3RhdGVtZW50OjpXaGlsZToKLSAgICAgICAgICAgIHBhcnNlV2hpbGVTdGF0ZW1lbnQoY29udGV4
dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXQVNNT3BTdGF0ZW1lbnQ6OkRv
OgotICAgICAgICAgICAgcGFyc2VEb1N0YXRlbWVudChjb250ZXh0KTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIFdBU01PcFN0YXRlbWVudDo6TGFiZWw6Ci0gICAgICAgICAgICBw
YXJzZUxhYmVsU3RhdGVtZW50KGNvbnRleHQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgV0FTTU9wU3RhdGVtZW50OjpCcmVhazoKLSAgICAgICAgICAgIHBhcnNlQnJlYWtTdGF0
ZW1lbnQoY29udGV4dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXQVNNT3BT
dGF0ZW1lbnQ6OkJyZWFrTGFiZWw6Ci0gICAgICAgICAgICBwYXJzZUJyZWFrTGFiZWxTdGF0ZW1l
bnQoY29udGV4dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXQVNNT3BTdGF0
ZW1lbnQ6OkNvbnRpbnVlOgotICAgICAgICAgICAgcGFyc2VDb250aW51ZVN0YXRlbWVudChjb250
ZXh0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdBU01PcFN0YXRlbWVudDo6
Q29udGludWVMYWJlbDoKLSAgICAgICAgICAgIHBhcnNlQ29udGludWVMYWJlbFN0YXRlbWVudChj
b250ZXh0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdBU01PcFN0YXRlbWVu
dDo6U3dpdGNoOgotICAgICAgICAgICAgcGFyc2VTd2l0Y2hTdGF0ZW1lbnQoY29udGV4dCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3dpdGNoIChv
cFdpdGhJbW1lZGlhdGUpIHsKLSAgICAgICAgY2FzZSBXQVNNT3BTdGF0ZW1lbnRXaXRoSW1tZWRp
YXRlOjpTZXRMb2NhbDoKLSAgICAgICAgICAgIHBhcnNlU2V0TG9jYWwoY29udGV4dCwgV0FTTU9w
S2luZDo6U3RhdGVtZW50LCBXQVNNRXhwcmVzc2lvblR5cGU6OlZvaWQsIGltbWVkaWF0ZSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXQVNNT3BTdGF0ZW1lbnRXaXRoSW1tZWRp
YXRlOjpTZXRHbG9iYWw6Ci0gICAgICAgICAgICBwYXJzZVNldEdsb2JhbChjb250ZXh0LCBXQVNN
T3BLaW5kOjpTdGF0ZW1lbnQsIFdBU01FeHByZXNzaW9uVHlwZTo6Vm9pZCwgaW1tZWRpYXRlKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIFVOVVNFRDsKLX0K
LQotdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+Ci1Db250ZXh0U3RhdGVtZW50IFdBU01GdW5jdGlv
blBhcnNlcjo6cGFyc2VSZXR1cm5TdGF0ZW1lbnQoQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBD
b250ZXh0RXhwcmVzc2lvbiBleHByZXNzaW9uID0gMDsKLSAgICBpZiAobV9yZXR1cm5UeXBlICE9
IFdBU01FeHByZXNzaW9uVHlwZTo6Vm9pZCkgewotICAgICAgICBleHByZXNzaW9uID0gcGFyc2VF
eHByZXNzaW9uKGNvbnRleHQsIG1fcmV0dXJuVHlwZSk7Ci0gICAgICAgIFBST1BBR0FURV9FUlJP
UigpOwotICAgIH0KLSAgICBjb250ZXh0LmJ1aWxkUmV0dXJuKGV4cHJlc3Npb24sIG1fcmV0dXJu
VHlwZSk7Ci0gICAgcmV0dXJuIFVOVVNFRDsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+
Ci1Db250ZXh0U3RhdGVtZW50IFdBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VCbG9ja1N0YXRlbWVu
dChDb250ZXh0JiBjb250ZXh0KQotewotICAgIHVpbnQzMl90IG51bWJlck9mU3RhdGVtZW50czsK
LSAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwobnVtYmVyT2ZTdGF0ZW1lbnRzLCAiQ2Fu
bm90IHJlYWQgdGhlIG51bWJlciBvZiBzdGF0ZW1lbnRzLiIpOwotICAgIGZvciAodWludDMyX3Qg
aSA9IDA7IGkgPCBudW1iZXJPZlN0YXRlbWVudHM7ICsraSkgewotICAgICAgICBwYXJzZVN0YXRl
bWVudChjb250ZXh0KTsKLSAgICAgICAgUFJPUEFHQVRFX0VSUk9SKCk7Ci0gICAgfQotICAgIHJl
dHVybiBVTlVTRUQ7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PgotQ29udGV4dFN0YXRl
bWVudCBXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlSWZTdGF0ZW1lbnQoQ29udGV4dCYgY29udGV4
dCkKLXsKLSAgICBDb250ZXh0SnVtcFRhcmdldCBlbmQ7Ci0KLSAgICBDb250ZXh0RXhwcmVzc2lv
biBleHByZXNzaW9uID0gcGFyc2VFeHByZXNzaW9uSTMyKGNvbnRleHQpOwotICAgIFBST1BBR0FU
RV9FUlJPUigpOwotCi0gICAgY29udGV4dC5qdW1wVG9UYXJnZXRJZihDb250ZXh0OjpKdW1wQ29u
ZGl0aW9uOjpaZXJvLCBleHByZXNzaW9uLCBlbmQpOwotCi0gICAgcGFyc2VTdGF0ZW1lbnQoY29u
dGV4dCk7Ci0gICAgUFJPUEFHQVRFX0VSUk9SKCk7Ci0KLSAgICBjb250ZXh0LmxpbmtUYXJnZXQo
ZW5kKTsKLSAgICByZXR1cm4gVU5VU0VEOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4K
LUNvbnRleHRTdGF0ZW1lbnQgV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUlmRWxzZVN0YXRlbWVu
dChDb250ZXh0JiBjb250ZXh0KQotewotICAgIENvbnRleHRKdW1wVGFyZ2V0IGVsc2VUYXJnZXQ7
Ci0gICAgQ29udGV4dEp1bXBUYXJnZXQgZW5kOwotCi0gICAgQ29udGV4dEV4cHJlc3Npb24gZXhw
cmVzc2lvbiA9IHBhcnNlRXhwcmVzc2lvbkkzMihjb250ZXh0KTsKLSAgICBQUk9QQUdBVEVfRVJS
T1IoKTsKLQotICAgIGNvbnRleHQuanVtcFRvVGFyZ2V0SWYoQ29udGV4dDo6SnVtcENvbmRpdGlv
bjo6WmVybywgZXhwcmVzc2lvbiwgZWxzZVRhcmdldCk7Ci0KLSAgICBwYXJzZVN0YXRlbWVudChj
b250ZXh0KTsKLSAgICBQUk9QQUdBVEVfRVJST1IoKTsKLQotICAgIGNvbnRleHQuanVtcFRvVGFy
Z2V0KGVuZCk7Ci0gICAgY29udGV4dC5saW5rVGFyZ2V0KGVsc2VUYXJnZXQpOwotCi0gICAgcGFy
c2VTdGF0ZW1lbnQoY29udGV4dCk7Ci0gICAgUFJPUEFHQVRFX0VSUk9SKCk7Ci0KLSAgICBjb250
ZXh0LmxpbmtUYXJnZXQoZW5kKTsKLSAgICByZXR1cm4gVU5VU0VEOwotfQotCi10ZW1wbGF0ZSA8
Y2xhc3MgQ29udGV4dD4KLUNvbnRleHRTdGF0ZW1lbnQgV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJz
ZVdoaWxlU3RhdGVtZW50KENvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgY29udGV4dC5zdGFydExv
b3AoKTsKLSAgICBjb250ZXh0LmxpbmtUYXJnZXQoY29udGV4dC5jb250aW51ZVRhcmdldCgpKTsK
LQotICAgIENvbnRleHRFeHByZXNzaW9uIGV4cHJlc3Npb24gPSBwYXJzZUV4cHJlc3Npb25JMzIo
Y29udGV4dCk7Ci0gICAgUFJPUEFHQVRFX0VSUk9SKCk7Ci0KLSAgICBjb250ZXh0Lmp1bXBUb1Rh
cmdldElmKENvbnRleHQ6Okp1bXBDb25kaXRpb246Olplcm8sIGV4cHJlc3Npb24sIGNvbnRleHQu
YnJlYWtUYXJnZXQoKSk7Ci0KLSAgICBtX2JyZWFrU2NvcGVEZXB0aCsrOwotICAgIG1fY29udGlu
dWVTY29wZURlcHRoKys7Ci0gICAgcGFyc2VTdGF0ZW1lbnQoY29udGV4dCk7Ci0gICAgUFJPUEFH
QVRFX0VSUk9SKCk7Ci0gICAgbV9jb250aW51ZVNjb3BlRGVwdGgtLTsKLSAgICBtX2JyZWFrU2Nv
cGVEZXB0aC0tOwotCi0gICAgY29udGV4dC5qdW1wVG9UYXJnZXQoY29udGV4dC5jb250aW51ZVRh
cmdldCgpKTsKLQotICAgIGNvbnRleHQubGlua1RhcmdldChjb250ZXh0LmJyZWFrVGFyZ2V0KCkp
OwotICAgIGNvbnRleHQuZW5kTG9vcCgpOwotICAgIHJldHVybiBVTlVTRUQ7Ci19Ci0KLXRlbXBs
YXRlIDxjbGFzcyBDb250ZXh0PgotQ29udGV4dFN0YXRlbWVudCBXQVNNRnVuY3Rpb25QYXJzZXI6
OnBhcnNlRG9TdGF0ZW1lbnQoQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBjb250ZXh0LnN0YXJ0
TG9vcCgpOwotCi0gICAgQ29udGV4dEp1bXBUYXJnZXQgdG9wT2ZMb29wOwotICAgIGNvbnRleHQu
bGlua1RhcmdldCh0b3BPZkxvb3ApOwotCi0gICAgbV9icmVha1Njb3BlRGVwdGgrKzsKLSAgICBt
X2NvbnRpbnVlU2NvcGVEZXB0aCsrOwotICAgIHBhcnNlU3RhdGVtZW50KGNvbnRleHQpOwotICAg
IFBST1BBR0FURV9FUlJPUigpOwotICAgIG1fY29udGludWVTY29wZURlcHRoLS07Ci0gICAgbV9i
cmVha1Njb3BlRGVwdGgtLTsKLQotICAgIGNvbnRleHQubGlua1RhcmdldChjb250ZXh0LmNvbnRp
bnVlVGFyZ2V0KCkpOwotCi0gICAgQ29udGV4dEV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IHBhcnNl
RXhwcmVzc2lvbkkzMihjb250ZXh0KTsKLSAgICBQUk9QQUdBVEVfRVJST1IoKTsKLQotICAgIGNv
bnRleHQuanVtcFRvVGFyZ2V0SWYoQ29udGV4dDo6SnVtcENvbmRpdGlvbjo6Tm9uWmVybywgZXhw
cmVzc2lvbiwgdG9wT2ZMb29wKTsKLQotICAgIGNvbnRleHQubGlua1RhcmdldChjb250ZXh0LmJy
ZWFrVGFyZ2V0KCkpOwotICAgIGNvbnRleHQuZW5kTG9vcCgpOwotICAgIHJldHVybiBVTlVTRUQ7
Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PgotQ29udGV4dFN0YXRlbWVudCBXQVNNRnVu
Y3Rpb25QYXJzZXI6OnBhcnNlTGFiZWxTdGF0ZW1lbnQoQ29udGV4dCYgY29udGV4dCkKLXsKLSAg
ICBjb250ZXh0LnN0YXJ0TGFiZWwoKTsKLSAgICBtX2xhYmVsRGVwdGgrKzsKLSAgICBwYXJzZVN0
YXRlbWVudChjb250ZXh0KTsKLSAgICBQUk9QQUdBVEVfRVJST1IoKTsKLSAgICBtX2xhYmVsRGVw
dGgtLTsKLSAgICBjb250ZXh0LmVuZExhYmVsKCk7Ci0gICAgcmV0dXJuIFVOVVNFRDsKLX0KLQot
dGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+Ci1Db250ZXh0U3RhdGVtZW50IFdBU01GdW5jdGlvblBh
cnNlcjo6cGFyc2VCcmVha1N0YXRlbWVudChDb250ZXh0JiBjb250ZXh0KQotewotICAgIEZBSUxf
SUZfRkFMU0UobV9icmVha1Njb3BlRGVwdGgsICInYnJlYWsnIGlzIG9ubHkgdmFsaWQgaW5zaWRl
IGEgc3dpdGNoIG9yIGxvb3Agc3RhdGVtZW50LiIpOwotICAgIGNvbnRleHQuanVtcFRvVGFyZ2V0
KGNvbnRleHQuYnJlYWtUYXJnZXQoKSk7Ci0gICAgcmV0dXJuIFVOVVNFRDsKLX0KLQotdGVtcGxh
dGUgPGNsYXNzIENvbnRleHQ+Ci1Db250ZXh0U3RhdGVtZW50IFdBU01GdW5jdGlvblBhcnNlcjo6
cGFyc2VCcmVha0xhYmVsU3RhdGVtZW50KENvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgdWludDMy
X3QgbGFiZWxJbmRleDsKLSAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwobGFiZWxJbmRl
eCwgIkNhbm5vdCByZWFkIHRoZSBsYWJlbCBpbmRleC4iKTsKLSAgICBGQUlMX0lGX0ZBTFNFKGxh
YmVsSW5kZXggPCBtX2xhYmVsRGVwdGgsICJUaGUgbGFiZWwgaW5kZXggaXMgaW5jb3JyZWN0LiIp
OwotICAgIGNvbnRleHQuanVtcFRvVGFyZ2V0KGNvbnRleHQuYnJlYWtMYWJlbFRhcmdldChsYWJl
bEluZGV4KSk7Ci0gICAgcmV0dXJuIFVOVVNFRDsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIENvbnRl
eHQ+Ci1Db250ZXh0U3RhdGVtZW50IFdBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VDb250aW51ZVN0
YXRlbWVudChDb250ZXh0JiBjb250ZXh0KQotewotICAgIEZBSUxfSUZfRkFMU0UobV9jb250aW51
ZVNjb3BlRGVwdGgsICInY29udGludWUnIGlzIG9ubHkgdmFsaWQgaW5zaWRlIGEgbG9vcCBzdGF0
ZW1lbnQuIik7Ci0gICAgY29udGV4dC5qdW1wVG9UYXJnZXQoY29udGV4dC5jb250aW51ZVRhcmdl
dCgpKTsKLSAgICByZXR1cm4gVU5VU0VEOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4K
LUNvbnRleHRTdGF0ZW1lbnQgV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUNvbnRpbnVlTGFiZWxT
dGF0ZW1lbnQoQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICB1aW50MzJfdCBsYWJlbEluZGV4Owot
ICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChsYWJlbEluZGV4LCAiQ2Fubm90IHJlYWQg
dGhlIGxhYmVsIGluZGV4LiIpOwotICAgIEZBSUxfSUZfRkFMU0UobGFiZWxJbmRleCA8IG1fbGFi
ZWxEZXB0aCwgIlRoZSBsYWJlbCBpbmRleCBpcyBpbmNvcnJlY3QuIik7Ci0gICAgY29udGV4dC5q
dW1wVG9UYXJnZXQoY29udGV4dC5jb250aW51ZUxhYmVsVGFyZ2V0KGxhYmVsSW5kZXgpKTsKLSAg
ICByZXR1cm4gVU5VU0VEOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4KLUNvbnRleHRT
dGF0ZW1lbnQgV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZVN3aXRjaFN0YXRlbWVudChDb250ZXh0
JiBjb250ZXh0KQotewotICAgIGNvbnRleHQuc3RhcnRTd2l0Y2goKTsKLSAgICB1aW50MzJfdCBu
dW1iZXJPZkNhc2VzOwotICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChudW1iZXJPZkNh
c2VzLCAiQ2Fubm90IHJlYWQgdGhlIG51bWJlciBvZiBjYXNlcy4iKTsKLSAgICBDb250ZXh0RXhw
cmVzc2lvbiBleHByZXNzaW9uID0gcGFyc2VFeHByZXNzaW9uSTMyKGNvbnRleHQpOwotICAgIFBS
T1BBR0FURV9FUlJPUigpOwotCi0gICAgQ29udGV4dEp1bXBUYXJnZXQgY29tcGFyZTsKLSAgICBj
b250ZXh0Lmp1bXBUb1RhcmdldChjb21wYXJlKTsKLQotICAgIFZlY3RvcjxpbnQ2NF90PiBjYXNl
czsKLSAgICBWZWN0b3I8Q29udGV4dEp1bXBUYXJnZXQ+IHRhcmdldHM7Ci0gICAgY2FzZXMucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1iZXJPZkNhc2VzKTsKLSAgICB0YXJnZXRzLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkobnVtYmVyT2ZDYXNlcyk7Ci0gICAgYm9vbCBoYXNEZWZhdWx0ID0gZmFs
c2U7Ci0gICAgQ29udGV4dEp1bXBUYXJnZXQgZGVmYXVsdFRhcmdldDsKLQotICAgIG1fYnJlYWtT
Y29wZURlcHRoKys7Ci0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9mQ2FzZXM7
ICsraSkgewotICAgICAgICBXQVNNU3dpdGNoQ2FzZSBzd2l0Y2hDYXNlOwotICAgICAgICBSRUFE
X1NXSVRDSF9DQVNFX09SX0ZBSUwoc3dpdGNoQ2FzZSwgIkNhbm5vdCByZWFkIHRoZSBzd2l0Y2gg
Y2FzZS4iKTsKLSAgICAgICAgc3dpdGNoIChzd2l0Y2hDYXNlKSB7Ci0gICAgICAgIGNhc2UgV0FT
TVN3aXRjaENhc2U6OkNhc2VXaXRoTm9TdGF0ZW1lbnRzOgotICAgICAgICBjYXNlIFdBU01Td2l0
Y2hDYXNlOjpDYXNlV2l0aFN0YXRlbWVudDoKLSAgICAgICAgY2FzZSBXQVNNU3dpdGNoQ2FzZTo6
Q2FzZVdpdGhCbG9ja1N0YXRlbWVudDogewotICAgICAgICAgICAgdWludDMyX3QgdmFsdWU7Ci0g
ICAgICAgICAgICBSRUFEX0NPTVBBQ1RfSU5UMzJfT1JfRkFJTCh2YWx1ZSwgIkNhbm5vdCByZWFk
IHRoZSB2YWx1ZSBvZiB0aGUgc3dpdGNoIGNhc2UuIik7Ci0gICAgICAgICAgICBjYXNlcy51bmNo
ZWNrZWRBcHBlbmQodmFsdWUpOwotICAgICAgICAgICAgQ29udGV4dEp1bXBUYXJnZXQgdGFyZ2V0
OwotICAgICAgICAgICAgY29udGV4dC5saW5rVGFyZ2V0KHRhcmdldCk7Ci0gICAgICAgICAgICB0
YXJnZXRzLnVuY2hlY2tlZEFwcGVuZCh0YXJnZXQpOwotICAgICAgICAgICAgaWYgKHN3aXRjaENh
c2UgPT0gV0FTTVN3aXRjaENhc2U6OkNhc2VXaXRoU3RhdGVtZW50KSB7Ci0gICAgICAgICAgICAg
ICAgcGFyc2VTdGF0ZW1lbnQoY29udGV4dCk7Ci0gICAgICAgICAgICAgICAgUFJPUEFHQVRFX0VS
Uk9SKCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHN3aXRjaENhc2UgPT0gV0FTTVN3aXRjaENh
c2U6OkNhc2VXaXRoQmxvY2tTdGF0ZW1lbnQpIHsKLSAgICAgICAgICAgICAgICBwYXJzZUJsb2Nr
U3RhdGVtZW50KGNvbnRleHQpOwotICAgICAgICAgICAgICAgIFBST1BBR0FURV9FUlJPUigpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBXQVNNU3dpdGNoQ2FzZTo6RGVmYXVsdFdpdGhOb1N0YXRlbWVudHM6Ci0gICAgICAgIGNhc2Ug
V0FTTVN3aXRjaENhc2U6OkRlZmF1bHRXaXRoU3RhdGVtZW50OgotICAgICAgICBjYXNlIFdBU01T
d2l0Y2hDYXNlOjpEZWZhdWx0V2l0aEJsb2NrU3RhdGVtZW50OiB7Ci0gICAgICAgICAgICBGQUlM
X0lGX0ZBTFNFKGkgPT0gbnVtYmVyT2ZDYXNlcyAtIDEsICJUaGUgZGVmYXVsdCBjYXNlIG11c3Qg
YmUgdGhlIGxhc3QgY2FzZS4iKTsKLSAgICAgICAgICAgIGhhc0RlZmF1bHQgPSB0cnVlOwotICAg
ICAgICAgICAgY29udGV4dC5saW5rVGFyZ2V0KGRlZmF1bHRUYXJnZXQpOwotICAgICAgICAgICAg
aWYgKHN3aXRjaENhc2UgPT0gV0FTTVN3aXRjaENhc2U6OkRlZmF1bHRXaXRoU3RhdGVtZW50KSB7
Ci0gICAgICAgICAgICAgICAgcGFyc2VTdGF0ZW1lbnQoY29udGV4dCk7Ci0gICAgICAgICAgICAg
ICAgUFJPUEFHQVRFX0VSUk9SKCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHN3aXRjaENhc2Ug
PT0gV0FTTVN3aXRjaENhc2U6OkRlZmF1bHRXaXRoQmxvY2tTdGF0ZW1lbnQpIHsKLSAgICAgICAg
ICAgICAgICBwYXJzZUJsb2NrU3RhdGVtZW50KGNvbnRleHQpOwotICAgICAgICAgICAgICAgIFBS
T1BBR0FURV9FUlJPUigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICB9Ci0gICAgfQotICAgIGlmICghaGFzRGVmYXVsdCkKLSAgICAgICAgY29udGV4
dC5saW5rVGFyZ2V0KGRlZmF1bHRUYXJnZXQpOwotCi0gICAgbV9icmVha1Njb3BlRGVwdGgtLTsK
LQotICAgIGNvbnRleHQuanVtcFRvVGFyZ2V0KGNvbnRleHQuYnJlYWtUYXJnZXQoKSk7Ci0gICAg
Y29udGV4dC5saW5rVGFyZ2V0KGNvbXBhcmUpOwotCi0gICAgY29udGV4dC5idWlsZFN3aXRjaChl
eHByZXNzaW9uLCBjYXNlcywgdGFyZ2V0cywgZGVmYXVsdFRhcmdldCk7Ci0KLSAgICBjb250ZXh0
LmxpbmtUYXJnZXQoY29udGV4dC5icmVha1RhcmdldCgpKTsKLSAgICBjb250ZXh0LmVuZFN3aXRj
aCgpOwotICAgIHJldHVybiBVTlVTRUQ7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBDb250ZXh0Pgot
Q29udGV4dEV4cHJlc3Npb24gV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUV4cHJlc3Npb24oQ29u
dGV4dCYgY29udGV4dCwgV0FTTUV4cHJlc3Npb25UeXBlIGV4cHJlc3Npb25UeXBlKQotewotICAg
IHN3aXRjaCAoZXhwcmVzc2lvblR5cGUpIHsKLSAgICBjYXNlIFdBU01FeHByZXNzaW9uVHlwZTo6
STMyOgotICAgICAgICByZXR1cm4gcGFyc2VFeHByZXNzaW9uSTMyKGNvbnRleHQpOwotICAgIGNh
c2UgV0FTTUV4cHJlc3Npb25UeXBlOjpGMzI6Ci0gICAgICAgIHJldHVybiBwYXJzZUV4cHJlc3Np
b25GMzIoY29udGV4dCk7Ci0gICAgY2FzZSBXQVNNRXhwcmVzc2lvblR5cGU6OkY2NDoKLSAgICAg
ICAgcmV0dXJuIHBhcnNlRXhwcmVzc2lvbkY2NChjb250ZXh0KTsKLSAgICBjYXNlIFdBU01FeHBy
ZXNzaW9uVHlwZTo6Vm9pZDoKLSAgICAgICAgcmV0dXJuIHBhcnNlRXhwcmVzc2lvblZvaWQoY29u
dGV4dCk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PgotQ29udGV4dEV4cHJlc3Np
b24gV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUV4cHJlc3Npb25JMzIoQ29udGV4dCYgY29udGV4
dCkKLXsKLSAgICBib29sIGhhc0ltbWVkaWF0ZTsKLSAgICBXQVNNT3BFeHByZXNzaW9uSTMyIG9w
OwotICAgIFdBU01PcEV4cHJlc3Npb25JMzJXaXRoSW1tZWRpYXRlIG9wV2l0aEltbWVkaWF0ZTsK
LSAgICB1aW50OF90IGltbWVkaWF0ZTsKLSAgICBSRUFEX09QX0VYUFJFU1NJT05fSTMyX09SX0ZB
SUwoaGFzSW1tZWRpYXRlLCBvcCwgb3BXaXRoSW1tZWRpYXRlLCBpbW1lZGlhdGUsICJDYW5ub3Qg
cmVhZCB0aGUgaW50MzIgZXhwcmVzc2lvbiBvcGNvZGUuIik7Ci0gICAgaWYgKCFoYXNJbW1lZGlh
dGUpIHsKLSAgICAgICAgc3dpdGNoIChvcCkgewotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Np
b25JMzI6OkNvbnN0YW50UG9vbEluZGV4OgotICAgICAgICAgICAgcmV0dXJuIHBhcnNlQ29uc3Rh
bnRQb29sSW5kZXhFeHByZXNzaW9uSTMyKGNvbnRleHQpOwotICAgICAgICBjYXNlIFdBU01PcEV4
cHJlc3Npb25JMzI6OkltbWVkaWF0ZToKLSAgICAgICAgICAgIHJldHVybiBwYXJzZUltbWVkaWF0
ZUV4cHJlc3Npb25JMzIoY29udGV4dCk7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkz
Mjo6R2V0TG9jYWw6Ci0gICAgICAgICAgICByZXR1cm4gcGFyc2VHZXRMb2NhbEV4cHJlc3Npb24o
Y29udGV4dCwgV0FTTVR5cGU6OkkzMik7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkz
Mjo6R2V0R2xvYmFsOgotICAgICAgICAgICAgcmV0dXJuIHBhcnNlR2V0R2xvYmFsRXhwcmVzc2lv
bihjb250ZXh0LCBXQVNNVHlwZTo6STMyKTsKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9u
STMyOjpTZXRMb2NhbDoKLSAgICAgICAgICAgIHJldHVybiBwYXJzZVNldExvY2FsKGNvbnRleHQs
IFdBU01PcEtpbmQ6OkV4cHJlc3Npb24sIFdBU01FeHByZXNzaW9uVHlwZTo6STMyKTsKLSAgICAg
ICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpTZXRHbG9iYWw6Ci0gICAgICAgICAgICByZXR1
cm4gcGFyc2VTZXRHbG9iYWwoY29udGV4dCwgV0FTTU9wS2luZDo6RXhwcmVzc2lvbiwgV0FTTUV4
cHJlc3Npb25UeXBlOjpJMzIpOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OlNM
b2FkODoKLSAgICAgICAgICAgIHJldHVybiBwYXJzZUxvYWQoY29udGV4dCwgV0FTTUV4cHJlc3Np
b25UeXBlOjpJMzIsIFdBU01NZW1vcnlUeXBlOjpJOCwgTWVtb3J5QWNjZXNzT2Zmc2V0TW9kZTo6
Tm9PZmZzZXQsIE1lbW9yeUFjY2Vzc0NvbnZlcnNpb246OlNpZ25FeHRlbmQpOwotICAgICAgICBj
YXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OlNMb2FkV2l0aE9mZnNldDg6Ci0gICAgICAgICAgICBy
ZXR1cm4gcGFyc2VMb2FkKGNvbnRleHQsIFdBU01FeHByZXNzaW9uVHlwZTo6STMyLCBXQVNNTWVt
b3J5VHlwZTo6STgsIE1lbW9yeUFjY2Vzc09mZnNldE1vZGU6OldpdGhPZmZzZXQsIE1lbW9yeUFj
Y2Vzc0NvbnZlcnNpb246OlNpZ25FeHRlbmQpOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Np
b25JMzI6OlVMb2FkODoKLSAgICAgICAgICAgIHJldHVybiBwYXJzZUxvYWQoY29udGV4dCwgV0FT
TUV4cHJlc3Npb25UeXBlOjpJMzIsIFdBU01NZW1vcnlUeXBlOjpJOCwgTWVtb3J5QWNjZXNzT2Zm
c2V0TW9kZTo6Tm9PZmZzZXQsIE1lbW9yeUFjY2Vzc0NvbnZlcnNpb246Olplcm9FeHRlbmQpOwot
ICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OlVMb2FkV2l0aE9mZnNldDg6Ci0gICAg
ICAgICAgICByZXR1cm4gcGFyc2VMb2FkKGNvbnRleHQsIFdBU01FeHByZXNzaW9uVHlwZTo6STMy
LCBXQVNNTWVtb3J5VHlwZTo6STgsIE1lbW9yeUFjY2Vzc09mZnNldE1vZGU6OldpdGhPZmZzZXQs
IE1lbW9yeUFjY2Vzc0NvbnZlcnNpb246Olplcm9FeHRlbmQpOwotICAgICAgICBjYXNlIFdBU01P
cEV4cHJlc3Npb25JMzI6OlNMb2FkMTY6Ci0gICAgICAgICAgICByZXR1cm4gcGFyc2VMb2FkKGNv
bnRleHQsIFdBU01FeHByZXNzaW9uVHlwZTo6STMyLCBXQVNNTWVtb3J5VHlwZTo6STE2LCBNZW1v
cnlBY2Nlc3NPZmZzZXRNb2RlOjpOb09mZnNldCwgTWVtb3J5QWNjZXNzQ29udmVyc2lvbjo6U2ln
bkV4dGVuZCk7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6U0xvYWRXaXRoT2Zm
c2V0MTY6Ci0gICAgICAgICAgICByZXR1cm4gcGFyc2VMb2FkKGNvbnRleHQsIFdBU01FeHByZXNz
aW9uVHlwZTo6STMyLCBXQVNNTWVtb3J5VHlwZTo6STE2LCBNZW1vcnlBY2Nlc3NPZmZzZXRNb2Rl
OjpXaXRoT2Zmc2V0LCBNZW1vcnlBY2Nlc3NDb252ZXJzaW9uOjpTaWduRXh0ZW5kKTsKLSAgICAg
ICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpVTG9hZDE2OgotICAgICAgICAgICAgcmV0dXJu
IHBhcnNlTG9hZChjb250ZXh0LCBXQVNNRXhwcmVzc2lvblR5cGU6OkkzMiwgV0FTTU1lbW9yeVR5
cGU6OkkxNiwgTWVtb3J5QWNjZXNzT2Zmc2V0TW9kZTo6Tm9PZmZzZXQsIE1lbW9yeUFjY2Vzc0Nv
bnZlcnNpb246Olplcm9FeHRlbmQpOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6
OlVMb2FkV2l0aE9mZnNldDE2OgotICAgICAgICAgICAgcmV0dXJuIHBhcnNlTG9hZChjb250ZXh0
LCBXQVNNRXhwcmVzc2lvblR5cGU6OkkzMiwgV0FTTU1lbW9yeVR5cGU6OkkxNiwgTWVtb3J5QWNj
ZXNzT2Zmc2V0TW9kZTo6V2l0aE9mZnNldCwgTWVtb3J5QWNjZXNzQ29udmVyc2lvbjo6WmVyb0V4
dGVuZCk7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6TG9hZDMyOgotICAgICAg
ICAgICAgcmV0dXJuIHBhcnNlTG9hZChjb250ZXh0LCBXQVNNRXhwcmVzc2lvblR5cGU6OkkzMiwg
V0FTTU1lbW9yeVR5cGU6OkkzMiwgTWVtb3J5QWNjZXNzT2Zmc2V0TW9kZTo6Tm9PZmZzZXQpOwot
ICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OkxvYWRXaXRoT2Zmc2V0MzI6Ci0gICAg
ICAgICAgICByZXR1cm4gcGFyc2VMb2FkKGNvbnRleHQsIFdBU01FeHByZXNzaW9uVHlwZTo6STMy
LCBXQVNNTWVtb3J5VHlwZTo6STMyLCBNZW1vcnlBY2Nlc3NPZmZzZXRNb2RlOjpXaXRoT2Zmc2V0
KTsKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpTdG9yZTg6Ci0gICAgICAgICAg
ICByZXR1cm4gcGFyc2VTdG9yZShjb250ZXh0LCBXQVNNT3BLaW5kOjpFeHByZXNzaW9uLCBXQVNN
RXhwcmVzc2lvblR5cGU6OkkzMiwgV0FTTU1lbW9yeVR5cGU6Okk4LCBNZW1vcnlBY2Nlc3NPZmZz
ZXRNb2RlOjpOb09mZnNldCk7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6U3Rv
cmVXaXRoT2Zmc2V0ODoKLSAgICAgICAgICAgIHJldHVybiBwYXJzZVN0b3JlKGNvbnRleHQsIFdB
U01PcEtpbmQ6OkV4cHJlc3Npb24sIFdBU01FeHByZXNzaW9uVHlwZTo6STMyLCBXQVNNTWVtb3J5
VHlwZTo6STgsIE1lbW9yeUFjY2Vzc09mZnNldE1vZGU6OldpdGhPZmZzZXQpOwotICAgICAgICBj
YXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OlN0b3JlMTY6Ci0gICAgICAgICAgICByZXR1cm4gcGFy
c2VTdG9yZShjb250ZXh0LCBXQVNNT3BLaW5kOjpFeHByZXNzaW9uLCBXQVNNRXhwcmVzc2lvblR5
cGU6OkkzMiwgV0FTTU1lbW9yeVR5cGU6OkkxNiwgTWVtb3J5QWNjZXNzT2Zmc2V0TW9kZTo6Tm9P
ZmZzZXQpOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OlN0b3JlV2l0aE9mZnNl
dDE2OgotICAgICAgICAgICAgcmV0dXJuIHBhcnNlU3RvcmUoY29udGV4dCwgV0FTTU9wS2luZDo6
RXhwcmVzc2lvbiwgV0FTTUV4cHJlc3Npb25UeXBlOjpJMzIsIFdBU01NZW1vcnlUeXBlOjpJMTYs
IE1lbW9yeUFjY2Vzc09mZnNldE1vZGU6OldpdGhPZmZzZXQpOwotICAgICAgICBjYXNlIFdBU01P
cEV4cHJlc3Npb25JMzI6OlN0b3JlMzI6Ci0gICAgICAgICAgICByZXR1cm4gcGFyc2VTdG9yZShj
b250ZXh0LCBXQVNNT3BLaW5kOjpFeHByZXNzaW9uLCBXQVNNRXhwcmVzc2lvblR5cGU6OkkzMiwg
V0FTTU1lbW9yeVR5cGU6OkkzMiwgTWVtb3J5QWNjZXNzT2Zmc2V0TW9kZTo6Tm9PZmZzZXQpOwot
ICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OlN0b3JlV2l0aE9mZnNldDMyOgotICAg
ICAgICAgICAgcmV0dXJuIHBhcnNlU3RvcmUoY29udGV4dCwgV0FTTU9wS2luZDo6RXhwcmVzc2lv
biwgV0FTTUV4cHJlc3Npb25UeXBlOjpJMzIsIFdBU01NZW1vcnlUeXBlOjpJMzIsIE1lbW9yeUFj
Y2Vzc09mZnNldE1vZGU6OldpdGhPZmZzZXQpOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Np
b25JMzI6OkNhbGxJbnRlcm5hbDoKLSAgICAgICAgICAgIHJldHVybiBwYXJzZUNhbGxJbnRlcm5h
bChjb250ZXh0LCBXQVNNT3BLaW5kOjpFeHByZXNzaW9uLCBXQVNNRXhwcmVzc2lvblR5cGU6Okkz
Mik7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6Q2FsbEluZGlyZWN0OgotICAg
ICAgICAgICAgcmV0dXJuIHBhcnNlQ2FsbEluZGlyZWN0KGNvbnRleHQsIFdBU01PcEtpbmQ6OkV4
cHJlc3Npb24sIFdBU01FeHByZXNzaW9uVHlwZTo6STMyKTsKLSAgICAgICAgY2FzZSBXQVNNT3BF
eHByZXNzaW9uSTMyOjpDYWxsSW1wb3J0OgotICAgICAgICAgICAgcmV0dXJuIHBhcnNlQ2FsbElt
cG9ydChjb250ZXh0LCBXQVNNT3BLaW5kOjpFeHByZXNzaW9uLCBXQVNNRXhwcmVzc2lvblR5cGU6
OkkzMik7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6Q29uZGl0aW9uYWw6Ci0g
ICAgICAgICAgICByZXR1cm4gcGFyc2VDb25kaXRpb25hbChjb250ZXh0LCBXQVNNRXhwcmVzc2lv
blR5cGU6OkkzMik7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6Q29tbWE6Ci0g
ICAgICAgICAgICByZXR1cm4gcGFyc2VDb21tYShjb250ZXh0LCBXQVNNRXhwcmVzc2lvblR5cGU6
OkkzMik7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6RnJvbUYzMjoKLSAgICAg
ICAgICAgIHJldHVybiBwYXJzZUNvbnZlcnRUeXBlKGNvbnRleHQsIFdBU01FeHByZXNzaW9uVHlw
ZTo6RjMyLCBXQVNNRXhwcmVzc2lvblR5cGU6OkkzMiwgV0FTTVR5cGVDb252ZXJzaW9uOjpDb252
ZXJ0U2lnbmVkKTsKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpGcm9tRjY0Ogot
ICAgICAgICAgICAgcmV0dXJuIHBhcnNlQ29udmVydFR5cGUoY29udGV4dCwgV0FTTUV4cHJlc3Np
b25UeXBlOjpGNjQsIFdBU01FeHByZXNzaW9uVHlwZTo6STMyLCBXQVNNVHlwZUNvbnZlcnNpb246
OkNvbnZlcnRTaWduZWQpOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6Ok5lZ2F0
ZToKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpCaXROb3Q6Ci0gICAgICAgIGNh
c2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6Q291bnRMZWFkaW5nWmVyb3M6Ci0gICAgICAgIGNhc2Ug
V0FTTU9wRXhwcmVzc2lvbkkzMjo6TG9naWNhbE5vdDoKLSAgICAgICAgY2FzZSBXQVNNT3BFeHBy
ZXNzaW9uSTMyOjpBYnM6Ci0gICAgICAgICAgICByZXR1cm4gcGFyc2VVbmFyeUV4cHJlc3Npb25J
MzIoY29udGV4dCwgb3ApOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OkFkZDoK
LSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpTdWI6Ci0gICAgICAgIGNhc2UgV0FT
TU9wRXhwcmVzc2lvbkkzMjo6TXVsOgotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6
OlNEaXY6Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6VURpdjoKLSAgICAgICAg
Y2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpTTW9kOgotICAgICAgICBjYXNlIFdBU01PcEV4cHJl
c3Npb25JMzI6OlVNb2Q6Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6Qml0T3I6
Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6Qml0QW5kOgotICAgICAgICBjYXNl
IFdBU01PcEV4cHJlc3Npb25JMzI6OkJpdFhvcjoKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNz
aW9uSTMyOjpMZWZ0U2hpZnQ6Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6QXJp
dGhtZXRpY1JpZ2h0U2hpZnQ6Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6TG9n
aWNhbFJpZ2h0U2hpZnQ6Ci0gICAgICAgICAgICByZXR1cm4gcGFyc2VCaW5hcnlFeHByZXNzaW9u
STMyKGNvbnRleHQsIG9wKTsKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpFcXVh
bEkzMjoKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpOb3RFcXVhbEkzMjoKLSAg
ICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpTTGVzc1RoYW5JMzI6Ci0gICAgICAgIGNh
c2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6VUxlc3NUaGFuSTMyOgotICAgICAgICBjYXNlIFdBU01P
cEV4cHJlc3Npb25JMzI6OlNMZXNzVGhhbk9yRXF1YWxJMzI6Ci0gICAgICAgIGNhc2UgV0FTTU9w
RXhwcmVzc2lvbkkzMjo6VUxlc3NUaGFuT3JFcXVhbEkzMjoKLSAgICAgICAgY2FzZSBXQVNNT3BF
eHByZXNzaW9uSTMyOjpTR3JlYXRlclRoYW5JMzI6Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVz
c2lvbkkzMjo6VUdyZWF0ZXJUaGFuSTMyOgotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25J
MzI6OlNHcmVhdGVyVGhhbk9yRXF1YWxJMzI6Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lv
bkkzMjo6VUdyZWF0ZXJUaGFuT3JFcXVhbEkzMjoKLSAgICAgICAgICAgIHJldHVybiBwYXJzZVJl
bGF0aW9uYWxJMzJFeHByZXNzaW9uSTMyKGNvbnRleHQsIG9wKTsKLSAgICAgICAgY2FzZSBXQVNN
T3BFeHByZXNzaW9uSTMyOjpFcXVhbEYzMjoKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9u
STMyOjpOb3RFcXVhbEYzMjoKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpMZXNz
VGhhbkYzMjoKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpMZXNzVGhhbk9yRXF1
YWxGMzI6Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6R3JlYXRlclRoYW5GMzI6
Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6R3JlYXRlclRoYW5PckVxdWFsRjMy
OgotICAgICAgICAgICAgcmV0dXJuIHBhcnNlUmVsYXRpb25hbEYzMkV4cHJlc3Npb25JMzIoY29u
dGV4dCwgb3ApOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OkVxdWFsRjY0Ogot
ICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6Ok5vdEVxdWFsRjY0OgotICAgICAgICBj
YXNlIFdBU01PcEV4cHJlc3Npb25JMzI6Okxlc3NUaGFuRjY0OgotICAgICAgICBjYXNlIFdBU01P
cEV4cHJlc3Npb25JMzI6Okxlc3NUaGFuT3JFcXVhbEY2NDoKLSAgICAgICAgY2FzZSBXQVNNT3BF
eHByZXNzaW9uSTMyOjpHcmVhdGVyVGhhbkY2NDoKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNz
aW9uSTMyOjpHcmVhdGVyVGhhbk9yRXF1YWxGNjQ6Ci0gICAgICAgICAgICByZXR1cm4gcGFyc2VS
ZWxhdGlvbmFsRjY0RXhwcmVzc2lvbkkzMihjb250ZXh0LCBvcCk7Ci0gICAgICAgIGNhc2UgV0FT
TU9wRXhwcmVzc2lvbkkzMjo6U01pbjoKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMy
OjpVTWluOgotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OlNNYXg6Ci0gICAgICAg
IGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6VU1heDoKLSAgICAgICAgICAgIHJldHVybiBwYXJz
ZU1pbk9yTWF4RXhwcmVzc2lvbkkzMihjb250ZXh0LCBvcCk7Ci0gICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7
Ci0gICAgICAgIHN3aXRjaCAob3BXaXRoSW1tZWRpYXRlKSB7Ci0gICAgICAgIGNhc2UgV0FTTU9w
RXhwcmVzc2lvbkkzMldpdGhJbW1lZGlhdGU6OkNvbnN0YW50UG9vbEluZGV4OgotICAgICAgICAg
ICAgcmV0dXJuIHBhcnNlQ29uc3RhbnRQb29sSW5kZXhFeHByZXNzaW9uSTMyKGNvbnRleHQsIGlt
bWVkaWF0ZSk7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMldpdGhJbW1lZGlhdGU6
OkltbWVkaWF0ZToKLSAgICAgICAgICAgIHJldHVybiBwYXJzZUltbWVkaWF0ZUV4cHJlc3Npb25J
MzIoY29udGV4dCwgaW1tZWRpYXRlKTsKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMy
V2l0aEltbWVkaWF0ZTo6R2V0TG9jYWw6Ci0gICAgICAgICAgICByZXR1cm4gcGFyc2VHZXRMb2Nh
bEV4cHJlc3Npb24oY29udGV4dCwgV0FTTVR5cGU6OkkzMiwgaW1tZWRpYXRlKTsKLSAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0g
ICAgfQotICAgIHJldHVybiAwOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4KLUNvbnRl
eHRFeHByZXNzaW9uIFdBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VDb25zdGFudFBvb2xJbmRleEV4
cHJlc3Npb25JMzIoQ29udGV4dCYgY29udGV4dCwgdWludDMyX3QgY29uc3RhbnRQb29sSW5kZXgp
Ci17Ci0gICAgRkFJTF9JRl9GQUxTRShjb25zdGFudFBvb2xJbmRleCA8IG1fbW9kdWxlLT5pMzJD
b25zdGFudHMoKS5zaXplKCksICJUaGUgY29uc3RhbnQgcG9vbCBpbmRleCBpcyBpbmNvcnJlY3Qu
Iik7Ci0gICAgcmV0dXJuIGNvbnRleHQuYnVpbGRJbW1lZGlhdGVJMzIobV9tb2R1bGUtPmkzMkNv
bnN0YW50cygpW2NvbnN0YW50UG9vbEluZGV4XSk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBDb250
ZXh0PgotQ29udGV4dEV4cHJlc3Npb24gV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUNvbnN0YW50
UG9vbEluZGV4RXhwcmVzc2lvbkkzMihDb250ZXh0JiBjb250ZXh0KQotewotICAgIHVpbnQzMl90
IGNvbnN0YW50UG9vbEluZGV4OwotICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChjb25z
dGFudFBvb2xJbmRleCwgIkNhbm5vdCByZWFkIHRoZSBjb25zdGFudCBwb29sIGluZGV4LiIpOwot
ICAgIHJldHVybiBwYXJzZUNvbnN0YW50UG9vbEluZGV4RXhwcmVzc2lvbkkzMihjb250ZXh0LCBj
b25zdGFudFBvb2xJbmRleCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PgotQ29udGV4
dEV4cHJlc3Npb24gV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUltbWVkaWF0ZUV4cHJlc3Npb25J
MzIoQ29udGV4dCYgY29udGV4dCwgdWludDMyX3QgaW1tZWRpYXRlKQotewotICAgIHJldHVybiBj
b250ZXh0LmJ1aWxkSW1tZWRpYXRlSTMyKGltbWVkaWF0ZSk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFz
cyBDb250ZXh0PgotQ29udGV4dEV4cHJlc3Npb24gV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUlt
bWVkaWF0ZUV4cHJlc3Npb25JMzIoQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICB1aW50MzJfdCBp
bW1lZGlhdGU7Ci0gICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKGltbWVkaWF0ZSwgIkNh
bm5vdCByZWFkIHRoZSBpbW1lZGlhdGUuIik7Ci0gICAgcmV0dXJuIHBhcnNlSW1tZWRpYXRlRXhw
cmVzc2lvbkkzMihjb250ZXh0LCBpbW1lZGlhdGUpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgQ29u
dGV4dD4KLUNvbnRleHRFeHByZXNzaW9uIFdBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VVbmFyeUV4
cHJlc3Npb25JMzIoQ29udGV4dCYgY29udGV4dCwgV0FTTU9wRXhwcmVzc2lvbkkzMiBvcCkKLXsK
LSAgICBDb250ZXh0RXhwcmVzc2lvbiBleHByZXNzaW9uID0gcGFyc2VFeHByZXNzaW9uSTMyKGNv
bnRleHQpOwotICAgIFBST1BBR0FURV9FUlJPUigpOwotICAgIHJldHVybiBjb250ZXh0LmJ1aWxk
VW5hcnlJMzIoZXhwcmVzc2lvbiwgb3ApOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4K
LUNvbnRleHRFeHByZXNzaW9uIFdBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VCaW5hcnlFeHByZXNz
aW9uSTMyKENvbnRleHQmIGNvbnRleHQsIFdBU01PcEV4cHJlc3Npb25JMzIgb3ApCi17Ci0gICAg
Q29udGV4dEV4cHJlc3Npb24gbGVmdCA9IHBhcnNlRXhwcmVzc2lvbkkzMihjb250ZXh0KTsKLSAg
ICBQUk9QQUdBVEVfRVJST1IoKTsKLSAgICBDb250ZXh0RXhwcmVzc2lvbiByaWdodCA9IHBhcnNl
RXhwcmVzc2lvbkkzMihjb250ZXh0KTsKLSAgICBQUk9QQUdBVEVfRVJST1IoKTsKLSAgICByZXR1
cm4gY29udGV4dC5idWlsZEJpbmFyeUkzMihsZWZ0LCByaWdodCwgb3ApOwotfQotCi10ZW1wbGF0
ZSA8Y2xhc3MgQ29udGV4dD4KLUNvbnRleHRFeHByZXNzaW9uIFdBU01GdW5jdGlvblBhcnNlcjo6
cGFyc2VSZWxhdGlvbmFsSTMyRXhwcmVzc2lvbkkzMihDb250ZXh0JiBjb250ZXh0LCBXQVNNT3BF
eHByZXNzaW9uSTMyIG9wKQotewotICAgIENvbnRleHRFeHByZXNzaW9uIGxlZnQgPSBwYXJzZUV4
cHJlc3Npb25JMzIoY29udGV4dCk7Ci0gICAgUFJPUEFHQVRFX0VSUk9SKCk7Ci0gICAgQ29udGV4
dEV4cHJlc3Npb24gcmlnaHQgPSBwYXJzZUV4cHJlc3Npb25JMzIoY29udGV4dCk7Ci0gICAgUFJP
UEFHQVRFX0VSUk9SKCk7Ci0gICAgcmV0dXJuIGNvbnRleHQuYnVpbGRSZWxhdGlvbmFsSTMyKGxl
ZnQsIHJpZ2h0LCBvcCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PgotQ29udGV4dEV4
cHJlc3Npb24gV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZVJlbGF0aW9uYWxGMzJFeHByZXNzaW9u
STMyKENvbnRleHQmIGNvbnRleHQsIFdBU01PcEV4cHJlc3Npb25JMzIgb3ApCi17Ci0gICAgQ29u
dGV4dEV4cHJlc3Npb24gbGVmdCA9IHBhcnNlRXhwcmVzc2lvbkYzMihjb250ZXh0KTsKLSAgICBQ
Uk9QQUdBVEVfRVJST1IoKTsKLSAgICBDb250ZXh0RXhwcmVzc2lvbiByaWdodCA9IHBhcnNlRXhw
cmVzc2lvbkYzMihjb250ZXh0KTsKLSAgICBQUk9QQUdBVEVfRVJST1IoKTsKLSAgICByZXR1cm4g
Y29udGV4dC5idWlsZFJlbGF0aW9uYWxGMzIobGVmdCwgcmlnaHQsIG9wKTsKLX0KLQotdGVtcGxh
dGUgPGNsYXNzIENvbnRleHQ+Ci1Db250ZXh0RXhwcmVzc2lvbiBXQVNNRnVuY3Rpb25QYXJzZXI6
OnBhcnNlUmVsYXRpb25hbEY2NEV4cHJlc3Npb25JMzIoQ29udGV4dCYgY29udGV4dCwgV0FTTU9w
RXhwcmVzc2lvbkkzMiBvcCkKLXsKLSAgICBDb250ZXh0RXhwcmVzc2lvbiBsZWZ0ID0gcGFyc2VF
eHByZXNzaW9uRjY0KGNvbnRleHQpOwotICAgIFBST1BBR0FURV9FUlJPUigpOwotICAgIENvbnRl
eHRFeHByZXNzaW9uIHJpZ2h0ID0gcGFyc2VFeHByZXNzaW9uRjY0KGNvbnRleHQpOwotICAgIFBS
T1BBR0FURV9FUlJPUigpOwotICAgIHJldHVybiBjb250ZXh0LmJ1aWxkUmVsYXRpb25hbEY2NChs
ZWZ0LCByaWdodCwgb3ApOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4KLUNvbnRleHRF
eHByZXNzaW9uIFdBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VNaW5Pck1heEV4cHJlc3Npb25JMzIo
Q29udGV4dCYgY29udGV4dCwgV0FTTU9wRXhwcmVzc2lvbkkzMiBvcCkKLXsKLSAgICB1aW50MzJf
dCBudW1iZXJPZkFyZ3VtZW50czsKLSAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwobnVt
YmVyT2ZBcmd1bWVudHMsICJDYW5ub3QgcmVhZCB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBt
aW4vbWF4LiIpOwotICAgIEZBSUxfSUZfRkFMU0UobnVtYmVyT2ZBcmd1bWVudHMgPj0gMiwgIk1p
bi9tYXggbXVzdCBiZSBwYXNzZWQgYXQgbGVhc3QgMiBhcmd1bWVudHMuIik7Ci0gICAgQ29udGV4
dEV4cHJlc3Npb24gY3VycmVudCA9IHBhcnNlRXhwcmVzc2lvbkkzMihjb250ZXh0KTsKLSAgICBQ
Uk9QQUdBVEVfRVJST1IoKTsKLSAgICBmb3IgKHVpbnQzMl90IGkgPSAxOyBpIDwgbnVtYmVyT2ZB
cmd1bWVudHM7ICsraSkgewotICAgICAgICBDb250ZXh0RXhwcmVzc2lvbiBleHByZXNzaW9uID0g
cGFyc2VFeHByZXNzaW9uSTMyKGNvbnRleHQpOwotICAgICAgICBQUk9QQUdBVEVfRVJST1IoKTsK
LSAgICAgICAgY3VycmVudCA9IGNvbnRleHQuYnVpbGRNaW5Pck1heEkzMihjdXJyZW50LCBleHBy
ZXNzaW9uLCBvcCk7Ci0gICAgfQotICAgIHJldHVybiBjdXJyZW50OwotfQotCi10ZW1wbGF0ZSA8
Y2xhc3MgQ29udGV4dD4KLUNvbnRleHRFeHByZXNzaW9uIFdBU01GdW5jdGlvblBhcnNlcjo6cGFy
c2VFeHByZXNzaW9uRjMyKENvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgYm9vbCBoYXNJbW1lZGlh
dGU7Ci0gICAgV0FTTU9wRXhwcmVzc2lvbkYzMiBvcDsKLSAgICBXQVNNT3BFeHByZXNzaW9uRjMy
V2l0aEltbWVkaWF0ZSBvcFdpdGhJbW1lZGlhdGU7Ci0gICAgdWludDhfdCBpbW1lZGlhdGU7Ci0g
ICAgUkVBRF9PUF9FWFBSRVNTSU9OX0YzMl9PUl9GQUlMKGhhc0ltbWVkaWF0ZSwgb3AsIG9wV2l0
aEltbWVkaWF0ZSwgaW1tZWRpYXRlLCAiQ2Fubm90IHJlYWQgdGhlIGZsb2F0MzIgZXhwcmVzc2lv
biBvcGNvZGUuIik7Ci0gICAgaWYgKCFoYXNJbW1lZGlhdGUpIHsKLSAgICAgICAgc3dpdGNoIChv
cCkgewotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GMzI6OkNvbnN0YW50UG9vbEluZGV4
OgotICAgICAgICAgICAgcmV0dXJuIHBhcnNlQ29uc3RhbnRQb29sSW5kZXhFeHByZXNzaW9uRjMy
KGNvbnRleHQpOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GMzI6OkltbWVkaWF0ZToK
LSAgICAgICAgICAgIHJldHVybiBwYXJzZUltbWVkaWF0ZUV4cHJlc3Npb25GMzIoY29udGV4dCk7
Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkYzMjo6R2V0TG9jYWw6Ci0gICAgICAgICAg
ICByZXR1cm4gcGFyc2VHZXRMb2NhbEV4cHJlc3Npb24oY29udGV4dCwgV0FTTVR5cGU6OkYzMik7
Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkYzMjo6R2V0R2xvYmFsOgotICAgICAgICAg
ICAgcmV0dXJuIHBhcnNlR2V0R2xvYmFsRXhwcmVzc2lvbihjb250ZXh0LCBXQVNNVHlwZTo6RjMy
KTsKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uRjMyOjpTZXRMb2NhbDoKLSAgICAgICAg
ICAgIHJldHVybiBwYXJzZVNldExvY2FsKGNvbnRleHQsIFdBU01PcEtpbmQ6OkV4cHJlc3Npb24s
IFdBU01FeHByZXNzaW9uVHlwZTo6RjMyKTsKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9u
RjMyOjpTZXRHbG9iYWw6Ci0gICAgICAgICAgICByZXR1cm4gcGFyc2VTZXRHbG9iYWwoY29udGV4
dCwgV0FTTU9wS2luZDo6RXhwcmVzc2lvbiwgV0FTTUV4cHJlc3Npb25UeXBlOjpGMzIpOwotICAg
ICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GMzI6OkxvYWQ6Ci0gICAgICAgICAgICByZXR1cm4g
cGFyc2VMb2FkKGNvbnRleHQsIFdBU01FeHByZXNzaW9uVHlwZTo6RjMyLCBXQVNNTWVtb3J5VHlw
ZTo6RjMyLCBNZW1vcnlBY2Nlc3NPZmZzZXRNb2RlOjpOb09mZnNldCk7Ci0gICAgICAgIGNhc2Ug
V0FTTU9wRXhwcmVzc2lvbkYzMjo6TG9hZFdpdGhPZmZzZXQ6Ci0gICAgICAgICAgICByZXR1cm4g
cGFyc2VMb2FkKGNvbnRleHQsIFdBU01FeHByZXNzaW9uVHlwZTo6RjMyLCBXQVNNTWVtb3J5VHlw
ZTo6RjMyLCBNZW1vcnlBY2Nlc3NPZmZzZXRNb2RlOjpXaXRoT2Zmc2V0KTsKLSAgICAgICAgY2Fz
ZSBXQVNNT3BFeHByZXNzaW9uRjMyOjpTdG9yZToKLSAgICAgICAgICAgIHJldHVybiBwYXJzZVN0
b3JlKGNvbnRleHQsIFdBU01PcEtpbmQ6OkV4cHJlc3Npb24sIFdBU01FeHByZXNzaW9uVHlwZTo6
RjMyLCBXQVNNTWVtb3J5VHlwZTo6RjMyLCBNZW1vcnlBY2Nlc3NPZmZzZXRNb2RlOjpOb09mZnNl
dCk7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkYzMjo6U3RvcmVXaXRoT2Zmc2V0Ogot
ICAgICAgICAgICAgcmV0dXJuIHBhcnNlU3RvcmUoY29udGV4dCwgV0FTTU9wS2luZDo6RXhwcmVz
c2lvbiwgV0FTTUV4cHJlc3Npb25UeXBlOjpGMzIsIFdBU01NZW1vcnlUeXBlOjpGMzIsIE1lbW9y
eUFjY2Vzc09mZnNldE1vZGU6OldpdGhPZmZzZXQpOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJl
c3Npb25GMzI6OkNhbGxJbnRlcm5hbDoKLSAgICAgICAgICAgIHJldHVybiBwYXJzZUNhbGxJbnRl
cm5hbChjb250ZXh0LCBXQVNNT3BLaW5kOjpFeHByZXNzaW9uLCBXQVNNRXhwcmVzc2lvblR5cGU6
OkYzMik7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkYzMjo6Q2FsbEluZGlyZWN0Ogot
ICAgICAgICAgICAgcmV0dXJuIHBhcnNlQ2FsbEluZGlyZWN0KGNvbnRleHQsIFdBU01PcEtpbmQ6
OkV4cHJlc3Npb24sIFdBU01FeHByZXNzaW9uVHlwZTo6RjMyKTsKLSAgICAgICAgY2FzZSBXQVNN
T3BFeHByZXNzaW9uRjMyOjpDb25kaXRpb25hbDoKLSAgICAgICAgICAgIHJldHVybiBwYXJzZUNv
bmRpdGlvbmFsKGNvbnRleHQsIFdBU01FeHByZXNzaW9uVHlwZTo6RjMyKTsKLSAgICAgICAgY2Fz
ZSBXQVNNT3BFeHByZXNzaW9uRjMyOjpDb21tYToKLSAgICAgICAgICAgIHJldHVybiBwYXJzZUNv
bW1hKGNvbnRleHQsIFdBU01FeHByZXNzaW9uVHlwZTo6RjMyKTsKLSAgICAgICAgY2FzZSBXQVNN
T3BFeHByZXNzaW9uRjMyOjpGcm9tUzMyOgotICAgICAgICAgICAgcmV0dXJuIHBhcnNlQ29udmVy
dFR5cGUoY29udGV4dCwgV0FTTUV4cHJlc3Npb25UeXBlOjpJMzIsIFdBU01FeHByZXNzaW9uVHlw
ZTo6RjMyLCBXQVNNVHlwZUNvbnZlcnNpb246OkNvbnZlcnRTaWduZWQpOwotICAgICAgICBjYXNl
IFdBU01PcEV4cHJlc3Npb25GMzI6OkZyb21VMzI6Ci0gICAgICAgICAgICByZXR1cm4gcGFyc2VD
b252ZXJ0VHlwZShjb250ZXh0LCBXQVNNRXhwcmVzc2lvblR5cGU6OkkzMiwgV0FTTUV4cHJlc3Np
b25UeXBlOjpGMzIsIFdBU01UeXBlQ29udmVyc2lvbjo6Q29udmVydFVuc2lnbmVkKTsKLSAgICAg
ICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uRjMyOjpGcm9tRjY0OgotICAgICAgICAgICAgcmV0dXJu
IHBhcnNlQ29udmVydFR5cGUoY29udGV4dCwgV0FTTUV4cHJlc3Npb25UeXBlOjpGNjQsIFdBU01F
eHByZXNzaW9uVHlwZTo6RjMyLCBXQVNNVHlwZUNvbnZlcnNpb246OkRlbW90ZSk7Ci0gICAgICAg
IGNhc2UgV0FTTU9wRXhwcmVzc2lvbkYzMjo6TmVnYXRlOgotICAgICAgICBjYXNlIFdBU01PcEV4
cHJlc3Npb25GMzI6OkFiczoKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uRjMyOjpDZWls
OgotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GMzI6OkZsb29yOgotICAgICAgICBjYXNl
IFdBU01PcEV4cHJlc3Npb25GMzI6OlNxcnQ6Ci0gICAgICAgICAgICByZXR1cm4gcGFyc2VVbmFy
eUV4cHJlc3Npb25GMzIoY29udGV4dCwgb3ApOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Np
b25GMzI6OkFkZDoKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uRjMyOjpTdWI6Ci0gICAg
ICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkYzMjo6TXVsOgotICAgICAgICBjYXNlIFdBU01PcEV4
cHJlc3Npb25GMzI6OkRpdjoKLSAgICAgICAgICAgIHJldHVybiBwYXJzZUJpbmFyeUV4cHJlc3Np
b25GMzIoY29udGV4dCwgb3ApOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBzd2l0Y2gg
KG9wV2l0aEltbWVkaWF0ZSkgewotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GMzJXaXRo
SW1tZWRpYXRlOjpDb25zdGFudFBvb2xJbmRleDoKLSAgICAgICAgICAgIHJldHVybiBwYXJzZUNv
bnN0YW50UG9vbEluZGV4RXhwcmVzc2lvbkYzMihjb250ZXh0LCBpbW1lZGlhdGUpOwotICAgICAg
ICBjYXNlIFdBU01PcEV4cHJlc3Npb25GMzJXaXRoSW1tZWRpYXRlOjpHZXRMb2NhbDoKLSAgICAg
ICAgICAgIHJldHVybiBwYXJzZUdldExvY2FsRXhwcmVzc2lvbihjb250ZXh0LCBXQVNNVHlwZTo6
RjMyLCBpbW1lZGlhdGUpOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXRlbXBs
YXRlIDxjbGFzcyBDb250ZXh0PgotQ29udGV4dEV4cHJlc3Npb24gV0FTTUZ1bmN0aW9uUGFyc2Vy
OjpwYXJzZUNvbnN0YW50UG9vbEluZGV4RXhwcmVzc2lvbkYzMihDb250ZXh0JiBjb250ZXh0LCB1
aW50MzJfdCBjb25zdGFudEluZGV4KQotewotICAgIEZBSUxfSUZfRkFMU0UoY29uc3RhbnRJbmRl
eCA8IG1fbW9kdWxlLT5mMzJDb25zdGFudHMoKS5zaXplKCksICJUaGUgY29uc3RhbnQgcG9vbCBp
bmRleCBpcyBpbmNvcnJlY3QuIik7Ci0gICAgcmV0dXJuIGNvbnRleHQuYnVpbGRJbW1lZGlhdGVG
MzIobV9tb2R1bGUtPmYzMkNvbnN0YW50cygpW2NvbnN0YW50SW5kZXhdKTsKLX0KLQotdGVtcGxh
dGUgPGNsYXNzIENvbnRleHQ+Ci1Db250ZXh0RXhwcmVzc2lvbiBXQVNNRnVuY3Rpb25QYXJzZXI6
OnBhcnNlQ29uc3RhbnRQb29sSW5kZXhFeHByZXNzaW9uRjMyKENvbnRleHQmIGNvbnRleHQpCi17
Ci0gICAgdWludDMyX3QgY29uc3RhbnRJbmRleDsKLSAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09S
X0ZBSUwoY29uc3RhbnRJbmRleCwgIkNhbm5vdCByZWFkIHRoZSBjb25zdGFudCBwb29sIGluZGV4
LiIpOwotICAgIHJldHVybiBwYXJzZUNvbnN0YW50UG9vbEluZGV4RXhwcmVzc2lvbkYzMihjb250
ZXh0LCBjb25zdGFudEluZGV4KTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+Ci1Db250
ZXh0RXhwcmVzc2lvbiBXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlSW1tZWRpYXRlRXhwcmVzc2lv
bkYzMihDb250ZXh0JiBjb250ZXh0KQotewotICAgIGZsb2F0IGltbWVkaWF0ZTsKLSAgICBSRUFE
X0ZMT0FUX09SX0ZBSUwoaW1tZWRpYXRlLCAiQ2Fubm90IHJlYWQgdGhlIGltbWVkaWF0ZS4iKTsK
LSAgICByZXR1cm4gY29udGV4dC5idWlsZEltbWVkaWF0ZUYzMihpbW1lZGlhdGUpOwotfQotCi10
ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4KLUNvbnRleHRFeHByZXNzaW9uIFdBU01GdW5jdGlvblBh
cnNlcjo6cGFyc2VVbmFyeUV4cHJlc3Npb25GMzIoQ29udGV4dCYgY29udGV4dCwgV0FTTU9wRXhw
cmVzc2lvbkYzMiBvcCkKLXsKLSAgICBDb250ZXh0RXhwcmVzc2lvbiBleHByZXNzaW9uID0gcGFy
c2VFeHByZXNzaW9uRjMyKGNvbnRleHQpOwotICAgIFBST1BBR0FURV9FUlJPUigpOwotICAgIHJl
dHVybiBjb250ZXh0LmJ1aWxkVW5hcnlGMzIoZXhwcmVzc2lvbiwgb3ApOwotfQotCi10ZW1wbGF0
ZSA8Y2xhc3MgQ29udGV4dD4KLUNvbnRleHRFeHByZXNzaW9uIFdBU01GdW5jdGlvblBhcnNlcjo6
cGFyc2VCaW5hcnlFeHByZXNzaW9uRjMyKENvbnRleHQmIGNvbnRleHQsIFdBU01PcEV4cHJlc3Np
b25GMzIgb3ApCi17Ci0gICAgQ29udGV4dEV4cHJlc3Npb24gbGVmdCA9IHBhcnNlRXhwcmVzc2lv
bkYzMihjb250ZXh0KTsKLSAgICBQUk9QQUdBVEVfRVJST1IoKTsKLSAgICBDb250ZXh0RXhwcmVz
c2lvbiByaWdodCA9IHBhcnNlRXhwcmVzc2lvbkYzMihjb250ZXh0KTsKLSAgICBQUk9QQUdBVEVf
RVJST1IoKTsKLSAgICByZXR1cm4gY29udGV4dC5idWlsZEJpbmFyeUYzMihsZWZ0LCByaWdodCwg
b3ApOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4KLUNvbnRleHRFeHByZXNzaW9uIFdB
U01GdW5jdGlvblBhcnNlcjo6cGFyc2VFeHByZXNzaW9uRjY0KENvbnRleHQmIGNvbnRleHQpCi17
Ci0gICAgYm9vbCBoYXNJbW1lZGlhdGU7Ci0gICAgV0FTTU9wRXhwcmVzc2lvbkY2NCBvcDsKLSAg
ICBXQVNNT3BFeHByZXNzaW9uRjY0V2l0aEltbWVkaWF0ZSBvcFdpdGhJbW1lZGlhdGU7Ci0gICAg
dWludDhfdCBpbW1lZGlhdGU7Ci0gICAgUkVBRF9PUF9FWFBSRVNTSU9OX0Y2NF9PUl9GQUlMKGhh
c0ltbWVkaWF0ZSwgb3AsIG9wV2l0aEltbWVkaWF0ZSwgaW1tZWRpYXRlLCAiQ2Fubm90IHJlYWQg
dGhlIGZsb2F0NjQgZXhwcmVzc2lvbiBvcGNvZGUuIik7Ci0gICAgaWYgKCFoYXNJbW1lZGlhdGUp
IHsKLSAgICAgICAgc3dpdGNoIChvcCkgewotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25G
NjQ6OkNvbnN0YW50UG9vbEluZGV4OgotICAgICAgICAgICAgcmV0dXJuIHBhcnNlQ29uc3RhbnRQ
b29sSW5kZXhFeHByZXNzaW9uRjY0KGNvbnRleHQpOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJl
c3Npb25GNjQ6OkltbWVkaWF0ZToKLSAgICAgICAgICAgIHJldHVybiBwYXJzZUltbWVkaWF0ZUV4
cHJlc3Npb25GNjQoY29udGV4dCk7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkY2NDo6
R2V0TG9jYWw6Ci0gICAgICAgICAgICByZXR1cm4gcGFyc2VHZXRMb2NhbEV4cHJlc3Npb24oY29u
dGV4dCwgV0FTTVR5cGU6OkY2NCk7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkY2NDo6
R2V0R2xvYmFsOgotICAgICAgICAgICAgcmV0dXJuIHBhcnNlR2V0R2xvYmFsRXhwcmVzc2lvbihj
b250ZXh0LCBXQVNNVHlwZTo6RjY0KTsKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uRjY0
OjpTZXRMb2NhbDoKLSAgICAgICAgICAgIHJldHVybiBwYXJzZVNldExvY2FsKGNvbnRleHQsIFdB
U01PcEtpbmQ6OkV4cHJlc3Npb24sIFdBU01FeHByZXNzaW9uVHlwZTo6RjY0KTsKLSAgICAgICAg
Y2FzZSBXQVNNT3BFeHByZXNzaW9uRjY0OjpTZXRHbG9iYWw6Ci0gICAgICAgICAgICByZXR1cm4g
cGFyc2VTZXRHbG9iYWwoY29udGV4dCwgV0FTTU9wS2luZDo6RXhwcmVzc2lvbiwgV0FTTUV4cHJl
c3Npb25UeXBlOjpGNjQpOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6OkxvYWQ6
Ci0gICAgICAgICAgICByZXR1cm4gcGFyc2VMb2FkKGNvbnRleHQsIFdBU01FeHByZXNzaW9uVHlw
ZTo6RjY0LCBXQVNNTWVtb3J5VHlwZTo6RjY0LCBNZW1vcnlBY2Nlc3NPZmZzZXRNb2RlOjpOb09m
ZnNldCk7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkY2NDo6TG9hZFdpdGhPZmZzZXQ6
Ci0gICAgICAgICAgICByZXR1cm4gcGFyc2VMb2FkKGNvbnRleHQsIFdBU01FeHByZXNzaW9uVHlw
ZTo6RjY0LCBXQVNNTWVtb3J5VHlwZTo6RjY0LCBNZW1vcnlBY2Nlc3NPZmZzZXRNb2RlOjpXaXRo
T2Zmc2V0KTsKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uRjY0OjpTdG9yZToKLSAgICAg
ICAgICAgIHJldHVybiBwYXJzZVN0b3JlKGNvbnRleHQsIFdBU01PcEtpbmQ6OkV4cHJlc3Npb24s
IFdBU01FeHByZXNzaW9uVHlwZTo6RjY0LCBXQVNNTWVtb3J5VHlwZTo6RjY0LCBNZW1vcnlBY2Nl
c3NPZmZzZXRNb2RlOjpOb09mZnNldCk7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkY2
NDo6U3RvcmVXaXRoT2Zmc2V0OgotICAgICAgICAgICAgcmV0dXJuIHBhcnNlU3RvcmUoY29udGV4
dCwgV0FTTU9wS2luZDo6RXhwcmVzc2lvbiwgV0FTTUV4cHJlc3Npb25UeXBlOjpGNjQsIFdBU01N
ZW1vcnlUeXBlOjpGNjQsIE1lbW9yeUFjY2Vzc09mZnNldE1vZGU6OldpdGhPZmZzZXQpOwotICAg
ICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6OkNhbGxJbnRlcm5hbDoKLSAgICAgICAgICAg
IHJldHVybiBwYXJzZUNhbGxJbnRlcm5hbChjb250ZXh0LCBXQVNNT3BLaW5kOjpFeHByZXNzaW9u
LCBXQVNNRXhwcmVzc2lvblR5cGU6OkY2NCk7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lv
bkY2NDo6Q2FsbEltcG9ydDoKLSAgICAgICAgICAgIHJldHVybiBwYXJzZUNhbGxJbXBvcnQoY29u
dGV4dCwgV0FTTU9wS2luZDo6RXhwcmVzc2lvbiwgV0FTTUV4cHJlc3Npb25UeXBlOjpGNjQpOwot
ICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6OkNhbGxJbmRpcmVjdDoKLSAgICAgICAg
ICAgIHJldHVybiBwYXJzZUNhbGxJbmRpcmVjdChjb250ZXh0LCBXQVNNT3BLaW5kOjpFeHByZXNz
aW9uLCBXQVNNRXhwcmVzc2lvblR5cGU6OkY2NCk7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVz
c2lvbkY2NDo6Q29uZGl0aW9uYWw6Ci0gICAgICAgICAgICByZXR1cm4gcGFyc2VDb25kaXRpb25h
bChjb250ZXh0LCBXQVNNRXhwcmVzc2lvblR5cGU6OkY2NCk7Ci0gICAgICAgIGNhc2UgV0FTTU9w
RXhwcmVzc2lvbkY2NDo6Q29tbWE6Ci0gICAgICAgICAgICByZXR1cm4gcGFyc2VDb21tYShjb250
ZXh0LCBXQVNNRXhwcmVzc2lvblR5cGU6OkY2NCk7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVz
c2lvbkY2NDo6RnJvbVMzMjoKLSAgICAgICAgICAgIHJldHVybiBwYXJzZUNvbnZlcnRUeXBlKGNv
bnRleHQsIFdBU01FeHByZXNzaW9uVHlwZTo6STMyLCBXQVNNRXhwcmVzc2lvblR5cGU6OkY2NCwg
V0FTTVR5cGVDb252ZXJzaW9uOjpDb252ZXJ0U2lnbmVkKTsKLSAgICAgICAgY2FzZSBXQVNNT3BF
eHByZXNzaW9uRjY0OjpGcm9tVTMyOgotICAgICAgICAgICAgcmV0dXJuIHBhcnNlQ29udmVydFR5
cGUoY29udGV4dCwgV0FTTUV4cHJlc3Npb25UeXBlOjpJMzIsIFdBU01FeHByZXNzaW9uVHlwZTo6
RjY0LCBXQVNNVHlwZUNvbnZlcnNpb246OkNvbnZlcnRVbnNpZ25lZCk7Ci0gICAgICAgIGNhc2Ug
V0FTTU9wRXhwcmVzc2lvbkY2NDo6RnJvbUYzMjoKLSAgICAgICAgICAgIHJldHVybiBwYXJzZUNv
bnZlcnRUeXBlKGNvbnRleHQsIFdBU01FeHByZXNzaW9uVHlwZTo6RjMyLCBXQVNNRXhwcmVzc2lv
blR5cGU6OkY2NCwgV0FTTVR5cGVDb252ZXJzaW9uOjpQcm9tb3RlKTsKLSAgICAgICAgY2FzZSBX
QVNNT3BFeHByZXNzaW9uRjY0OjpOZWdhdGU6Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lv
bkY2NDo6QWJzOgotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6OkNlaWw6Ci0gICAg
ICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkY2NDo6Rmxvb3I6Ci0gICAgICAgIGNhc2UgV0FTTU9w
RXhwcmVzc2lvbkY2NDo6U3FydDoKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uRjY0OjpD
b3M6Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkY2NDo6U2luOgotICAgICAgICBjYXNl
IFdBU01PcEV4cHJlc3Npb25GNjQ6OlRhbjoKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9u
RjY0OjpBQ29zOgotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6OkFTaW46Ci0gICAg
ICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkY2NDo6QVRhbjoKLSAgICAgICAgY2FzZSBXQVNNT3BF
eHByZXNzaW9uRjY0OjpFeHA6Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkY2NDo6TG46
Ci0gICAgICAgICAgICByZXR1cm4gcGFyc2VVbmFyeUV4cHJlc3Npb25GNjQoY29udGV4dCwgb3Ap
OwotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6OkFkZDoKLSAgICAgICAgY2FzZSBX
QVNNT3BFeHByZXNzaW9uRjY0OjpTdWI6Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkY2
NDo6TXVsOgotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6OkRpdjoKLSAgICAgICAg
Y2FzZSBXQVNNT3BFeHByZXNzaW9uRjY0OjpNb2Q6Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVz
c2lvbkY2NDo6QVRhbjI6Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkY2NDo6UG93Ogot
ICAgICAgICAgICAgcmV0dXJuIHBhcnNlQmluYXJ5RXhwcmVzc2lvbkY2NChjb250ZXh0LCBvcCk7
Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkY2NDo6TWluOgotICAgICAgICBjYXNlIFdB
U01PcEV4cHJlc3Npb25GNjQ6Ok1heDoKLSAgICAgICAgICAgIHJldHVybiBwYXJzZU1pbk9yTWF4
RXhwcmVzc2lvbkY2NChjb250ZXh0LCBvcCk7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAg
IHN3aXRjaCAob3BXaXRoSW1tZWRpYXRlKSB7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lv
bkY2NFdpdGhJbW1lZGlhdGU6OkNvbnN0YW50UG9vbEluZGV4OgotICAgICAgICAgICAgcmV0dXJu
IHBhcnNlQ29uc3RhbnRQb29sSW5kZXhFeHByZXNzaW9uRjY0KGNvbnRleHQsIGltbWVkaWF0ZSk7
Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkY2NFdpdGhJbW1lZGlhdGU6OkdldExvY2Fs
OgotICAgICAgICAgICAgcmV0dXJuIHBhcnNlR2V0TG9jYWxFeHByZXNzaW9uKGNvbnRleHQsIFdB
U01UeXBlOjpGNjQsIGltbWVkaWF0ZSk7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gMDsKLX0K
LQotdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+Ci1Db250ZXh0RXhwcmVzc2lvbiBXQVNNRnVuY3Rp
b25QYXJzZXI6OnBhcnNlQ29uc3RhbnRQb29sSW5kZXhFeHByZXNzaW9uRjY0KENvbnRleHQmIGNv
bnRleHQsIHVpbnQzMl90IGNvbnN0YW50SW5kZXgpCi17Ci0gICAgRkFJTF9JRl9GQUxTRShjb25z
dGFudEluZGV4IDwgbV9tb2R1bGUtPmY2NENvbnN0YW50cygpLnNpemUoKSwgIlRoZSBjb25zdGFu
dCBpbmRleCBpcyBpbmNvcnJlY3QuIik7Ci0gICAgcmV0dXJuIGNvbnRleHQuYnVpbGRJbW1lZGlh
dGVGNjQobV9tb2R1bGUtPmY2NENvbnN0YW50cygpW2NvbnN0YW50SW5kZXhdKTsKLX0KLQotdGVt
cGxhdGUgPGNsYXNzIENvbnRleHQ+Ci1Db250ZXh0RXhwcmVzc2lvbiBXQVNNRnVuY3Rpb25QYXJz
ZXI6OnBhcnNlQ29uc3RhbnRQb29sSW5kZXhFeHByZXNzaW9uRjY0KENvbnRleHQmIGNvbnRleHQp
Ci17Ci0gICAgdWludDMyX3QgY29uc3RhbnRJbmRleDsKLSAgICBSRUFEX0NPTVBBQ1RfVUlOVDMy
X09SX0ZBSUwoY29uc3RhbnRJbmRleCwgIkNhbm5vdCByZWFkIHRoZSBjb25zdGFudCBpbmRleC4i
KTsKLSAgICByZXR1cm4gcGFyc2VDb25zdGFudFBvb2xJbmRleEV4cHJlc3Npb25GNjQoY29udGV4
dCwgY29uc3RhbnRJbmRleCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PgotQ29udGV4
dEV4cHJlc3Npb24gV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUltbWVkaWF0ZUV4cHJlc3Npb25G
NjQoQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBkb3VibGUgaW1tZWRpYXRlOwotICAgIFJFQURf
RE9VQkxFX09SX0ZBSUwoaW1tZWRpYXRlLCAiQ2Fubm90IHJlYWQgdGhlIGltbWVkaWF0ZS4iKTsK
LSAgICByZXR1cm4gY29udGV4dC5idWlsZEltbWVkaWF0ZUY2NChpbW1lZGlhdGUpOwotfQotCi10
ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4KLUNvbnRleHRFeHByZXNzaW9uIFdBU01GdW5jdGlvblBh
cnNlcjo6cGFyc2VVbmFyeUV4cHJlc3Npb25GNjQoQ29udGV4dCYgY29udGV4dCwgV0FTTU9wRXhw
cmVzc2lvbkY2NCBvcCkKLXsKLSAgICBDb250ZXh0RXhwcmVzc2lvbiBleHByZXNzaW9uID0gcGFy
c2VFeHByZXNzaW9uRjY0KGNvbnRleHQpOwotICAgIFBST1BBR0FURV9FUlJPUigpOwotICAgIHJl
dHVybiBjb250ZXh0LmJ1aWxkVW5hcnlGNjQoZXhwcmVzc2lvbiwgb3ApOwotfQotCi10ZW1wbGF0
ZSA8Y2xhc3MgQ29udGV4dD4KLUNvbnRleHRFeHByZXNzaW9uIFdBU01GdW5jdGlvblBhcnNlcjo6
cGFyc2VCaW5hcnlFeHByZXNzaW9uRjY0KENvbnRleHQmIGNvbnRleHQsIFdBU01PcEV4cHJlc3Np
b25GNjQgb3ApCi17Ci0gICAgQ29udGV4dEV4cHJlc3Npb24gbGVmdCA9IHBhcnNlRXhwcmVzc2lv
bkY2NChjb250ZXh0KTsKLSAgICBQUk9QQUdBVEVfRVJST1IoKTsKLSAgICBDb250ZXh0RXhwcmVz
c2lvbiByaWdodCA9IHBhcnNlRXhwcmVzc2lvbkY2NChjb250ZXh0KTsKLSAgICBQUk9QQUdBVEVf
RVJST1IoKTsKLSAgICByZXR1cm4gY29udGV4dC5idWlsZEJpbmFyeUY2NChsZWZ0LCByaWdodCwg
b3ApOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4KLUNvbnRleHRFeHByZXNzaW9uIFdB
U01GdW5jdGlvblBhcnNlcjo6cGFyc2VNaW5Pck1heEV4cHJlc3Npb25GNjQoQ29udGV4dCYgY29u
dGV4dCwgV0FTTU9wRXhwcmVzc2lvbkY2NCBvcCkKLXsKLSAgICB1aW50MzJfdCBudW1iZXJPZkFy
Z3VtZW50czsKLSAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwobnVtYmVyT2ZBcmd1bWVu
dHMsICJDYW5ub3QgcmVhZCB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBtaW4vbWF4LiIpOwot
ICAgIEZBSUxfSUZfRkFMU0UobnVtYmVyT2ZBcmd1bWVudHMgPj0gMiwgIk1pbi9tYXggbXVzdCBi
ZSBwYXNzZWQgYXQgbGVhc3QgMiBhcmd1bWVudHMuIik7Ci0gICAgQ29udGV4dEV4cHJlc3Npb24g
Y3VycmVudCA9IHBhcnNlRXhwcmVzc2lvbkY2NChjb250ZXh0KTsKLSAgICBQUk9QQUdBVEVfRVJS
T1IoKTsKLSAgICBmb3IgKHVpbnQzMl90IGkgPSAxOyBpIDwgbnVtYmVyT2ZBcmd1bWVudHM7ICsr
aSkgewotICAgICAgICBDb250ZXh0RXhwcmVzc2lvbiBleHByZXNzaW9uID0gcGFyc2VFeHByZXNz
aW9uRjY0KGNvbnRleHQpOwotICAgICAgICBQUk9QQUdBVEVfRVJST1IoKTsKLSAgICAgICAgY3Vy
cmVudCA9IGNvbnRleHQuYnVpbGRNaW5Pck1heEY2NChjdXJyZW50LCBleHByZXNzaW9uLCBvcCk7
Ci0gICAgfQotICAgIHJldHVybiBjdXJyZW50OwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4
dD4KLUNvbnRleHRFeHByZXNzaW9uIFdBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VFeHByZXNzaW9u
Vm9pZChDb250ZXh0JiBjb250ZXh0KQotewotICAgIFdBU01PcEV4cHJlc3Npb25Wb2lkIG9wOwot
ICAgIFJFQURfT1BfRVhQUkVTU0lPTl9WT0lEX09SX0ZBSUwob3AsICJDYW5ub3QgcmVhZCB0aGUg
dm9pZCBleHByZXNzaW9uIG9wY29kZS4iKTsKLSAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgY2FzZSBX
QVNNT3BFeHByZXNzaW9uVm9pZDo6Q2FsbEludGVybmFsOgotICAgICAgICByZXR1cm4gcGFyc2VD
YWxsSW50ZXJuYWwoY29udGV4dCwgV0FTTU9wS2luZDo6RXhwcmVzc2lvbiwgV0FTTUV4cHJlc3Np
b25UeXBlOjpWb2lkKTsKLSAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25Wb2lkOjpDYWxsSW5kaXJl
Y3Q6Ci0gICAgICAgIHJldHVybiBwYXJzZUNhbGxJbmRpcmVjdChjb250ZXh0LCBXQVNNT3BLaW5k
OjpFeHByZXNzaW9uLCBXQVNNRXhwcmVzc2lvblR5cGU6OlZvaWQpOwotICAgIGNhc2UgV0FTTU9w
RXhwcmVzc2lvblZvaWQ6OkNhbGxJbXBvcnQ6Ci0gICAgICAgIHJldHVybiBwYXJzZUNhbGxJbXBv
cnQoY29udGV4dCwgV0FTTU9wS2luZDo6RXhwcmVzc2lvbiwgV0FTTUV4cHJlc3Npb25UeXBlOjpW
b2lkKTsKLSAgICBkZWZhdWx0OgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgIH0KLX0KLQotdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+Ci1Db250ZXh0RXhwcmVzc2lv
biBXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlR2V0TG9jYWxFeHByZXNzaW9uKENvbnRleHQmIGNv
bnRleHQsIFdBU01UeXBlIHR5cGUsIHVpbnQzMl90IGxvY2FsSW5kZXgpCi17Ci0gICAgRkFJTF9J
Rl9GQUxTRShsb2NhbEluZGV4IDwgbV9sb2NhbFR5cGVzLnNpemUoKSwgIlRoZSBsb2NhbCBpbmRl
eCBpcyBpbmNvcnJlY3QuIik7Ci0gICAgRkFJTF9JRl9GQUxTRShtX2xvY2FsVHlwZXNbbG9jYWxJ
bmRleF0gPT0gdHlwZSwgIkV4cGVjdGVkIGEgbG9jYWwgb2YgdHlwZSAiICsgbmFtZU9mVHlwZSh0
eXBlKSArICcuJyk7Ci0gICAgcmV0dXJuIGNvbnRleHQuYnVpbGRHZXRMb2NhbChsb2NhbEluZGV4
LCB0eXBlKTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+Ci1Db250ZXh0RXhwcmVzc2lv
biBXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlR2V0TG9jYWxFeHByZXNzaW9uKENvbnRleHQmIGNv
bnRleHQsIFdBU01UeXBlIHR5cGUpCi17Ci0gICAgdWludDMyX3QgbG9jYWxJbmRleDsKLSAgICBS
RUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwobG9jYWxJbmRleCwgIkNhbm5vdCByZWFkIHRoZSBs
b2NhbCBpbmRleC4iKTsKLSAgICByZXR1cm4gcGFyc2VHZXRMb2NhbEV4cHJlc3Npb24oY29udGV4
dCwgdHlwZSwgbG9jYWxJbmRleCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PgotQ29u
dGV4dEV4cHJlc3Npb24gV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUdldEdsb2JhbEV4cHJlc3Np
b24oQ29udGV4dCYgY29udGV4dCwgV0FTTVR5cGUgdHlwZSkKLXsKLSAgICB1aW50MzJfdCBnbG9i
YWxJbmRleDsKLSAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwoZ2xvYmFsSW5kZXgsICJD
YW5ub3QgcmVhZCB0aGUgZ2xvYmFsIGluZGV4LiIpOwotICAgIEZBSUxfSUZfRkFMU0UoZ2xvYmFs
SW5kZXggPCBtX21vZHVsZS0+Z2xvYmFsVmFyaWFibGVUeXBlcygpLnNpemUoKSwgIlRoZSBnbG9i
YWwgaW5kZXggaXMgaW5jb3JyZWN0LiIpOwotICAgIEZBSUxfSUZfRkFMU0UobV9tb2R1bGUtPmds
b2JhbFZhcmlhYmxlVHlwZXMoKVtnbG9iYWxJbmRleF0gPT0gdHlwZSwgIkV4cGVjdGVkIGEgZ2xv
YmFsIG9mIHR5cGUgIiArIG5hbWVPZlR5cGUodHlwZSkgKyAnLicpOwotICAgIHJldHVybiBjb250
ZXh0LmJ1aWxkR2V0R2xvYmFsKGdsb2JhbEluZGV4LCB0eXBlKTsKLX0KLQotdGVtcGxhdGUgPGNs
YXNzIENvbnRleHQ+Ci1Db250ZXh0RXhwcmVzc2lvbiBXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNl
U2V0TG9jYWwoQ29udGV4dCYgY29udGV4dCwgV0FTTU9wS2luZCBvcEtpbmQsIFdBU01FeHByZXNz
aW9uVHlwZSBleHByZXNzaW9uVHlwZSwgdWludDMyX3QgbG9jYWxJbmRleCkKLXsKLSAgICBGQUlM
X0lGX0ZBTFNFKGxvY2FsSW5kZXggPCBtX2xvY2FsVHlwZXMuc2l6ZSgpLCAiVGhlIGxvY2FsIHZh
cmlhYmxlIGluZGV4IGlzIGluY29ycmVjdC4iKTsKLSAgICBXQVNNVHlwZSB0eXBlID0gbV9sb2Nh
bFR5cGVzW2xvY2FsSW5kZXhdOwotICAgIGlmIChvcEtpbmQgPT0gV0FTTU9wS2luZDo6RXhwcmVz
c2lvbikKLSAgICAgICAgRkFJTF9JRl9GQUxTRShleHByZXNzaW9uVHlwZSA9PSBXQVNNRXhwcmVz
c2lvblR5cGUodHlwZSksICJUaGUgdHlwZSBkb2Vzbid0IG1hdGNoLiIpOwotICAgIENvbnRleHRF
eHByZXNzaW9uIGV4cHJlc3Npb24gPSBwYXJzZUV4cHJlc3Npb24oY29udGV4dCwgV0FTTUV4cHJl
c3Npb25UeXBlKHR5cGUpKTsKLSAgICBQUk9QQUdBVEVfRVJST1IoKTsKLSAgICByZXR1cm4gY29u
dGV4dC5idWlsZFNldExvY2FsKG9wS2luZCwgbG9jYWxJbmRleCwgZXhwcmVzc2lvbiwgdHlwZSk7
Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PgotQ29udGV4dEV4cHJlc3Npb24gV0FTTUZ1
bmN0aW9uUGFyc2VyOjpwYXJzZVNldExvY2FsKENvbnRleHQmIGNvbnRleHQsIFdBU01PcEtpbmQg
b3BLaW5kLCBXQVNNRXhwcmVzc2lvblR5cGUgZXhwcmVzc2lvblR5cGUpCi17Ci0gICAgdWludDMy
X3QgbG9jYWxJbmRleDsKLSAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwobG9jYWxJbmRl
eCwgIkNhbm5vdCByZWFkIHRoZSBsb2NhbCBpbmRleC4iKTsKLSAgICByZXR1cm4gcGFyc2VTZXRM
b2NhbChjb250ZXh0LCBvcEtpbmQsIGV4cHJlc3Npb25UeXBlLCBsb2NhbEluZGV4KTsKLX0KLQot
dGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+Ci1Db250ZXh0RXhwcmVzc2lvbiBXQVNNRnVuY3Rpb25Q
YXJzZXI6OnBhcnNlU2V0R2xvYmFsKENvbnRleHQmIGNvbnRleHQsIFdBU01PcEtpbmQgb3BLaW5k
LCBXQVNNRXhwcmVzc2lvblR5cGUgZXhwcmVzc2lvblR5cGUsIHVpbnQzMl90IGdsb2JhbEluZGV4
KQotewotICAgIEZBSUxfSUZfRkFMU0UoZ2xvYmFsSW5kZXggPCBtX21vZHVsZS0+Z2xvYmFsVmFy
aWFibGVUeXBlcygpLnNpemUoKSwgIlRoZSBnbG9iYWwgaW5kZXggaXMgaW5jb3JyZWN0LiIpOwot
ICAgIFdBU01UeXBlIHR5cGUgPSBtX21vZHVsZS0+Z2xvYmFsVmFyaWFibGVUeXBlcygpW2dsb2Jh
bEluZGV4XTsKLSAgICBpZiAob3BLaW5kID09IFdBU01PcEtpbmQ6OkV4cHJlc3Npb24pCi0gICAg
ICAgIEZBSUxfSUZfRkFMU0UoZXhwcmVzc2lvblR5cGUgPT0gV0FTTUV4cHJlc3Npb25UeXBlKHR5
cGUpLCAiVGhlIHR5cGUgZG9lc24ndCBtYXRjaC4iKTsKLSAgICBDb250ZXh0RXhwcmVzc2lvbiBl
eHByZXNzaW9uID0gcGFyc2VFeHByZXNzaW9uKGNvbnRleHQsIFdBU01FeHByZXNzaW9uVHlwZSh0
eXBlKSk7Ci0gICAgUFJPUEFHQVRFX0VSUk9SKCk7Ci0gICAgcmV0dXJuIGNvbnRleHQuYnVpbGRT
ZXRHbG9iYWwob3BLaW5kLCBnbG9iYWxJbmRleCwgZXhwcmVzc2lvbiwgdHlwZSk7Ci19Ci0KLXRl
bXBsYXRlIDxjbGFzcyBDb250ZXh0PgotQ29udGV4dEV4cHJlc3Npb24gV0FTTUZ1bmN0aW9uUGFy
c2VyOjpwYXJzZVNldEdsb2JhbChDb250ZXh0JiBjb250ZXh0LCBXQVNNT3BLaW5kIG9wS2luZCwg
V0FTTUV4cHJlc3Npb25UeXBlIGV4cHJlc3Npb25UeXBlKQotewotICAgIHVpbnQzMl90IGdsb2Jh
bEluZGV4OwotICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChnbG9iYWxJbmRleCwgIkNh
bm5vdCByZWFkIHRoZSBnbG9iYWwgaW5kZXguIik7Ci0gICAgcmV0dXJuIHBhcnNlU2V0R2xvYmFs
KGNvbnRleHQsIG9wS2luZCwgZXhwcmVzc2lvblR5cGUsIGdsb2JhbEluZGV4KTsKLX0KLQotdGVt
cGxhdGUgPGNsYXNzIENvbnRleHQ+Ci1Db250ZXh0TWVtb3J5QWRkcmVzcyBXQVNNRnVuY3Rpb25Q
YXJzZXI6OnBhcnNlTWVtb3J5QWRkcmVzcyhDb250ZXh0JiBjb250ZXh0LCBNZW1vcnlBY2Nlc3NP
ZmZzZXRNb2RlIG9mZnNldE1vZGUpCi17Ci0gICAgdWludDMyX3Qgb2Zmc2V0ID0gMDsKLSAgICBp
ZiAob2Zmc2V0TW9kZSA9PSBNZW1vcnlBY2Nlc3NPZmZzZXRNb2RlOjpXaXRoT2Zmc2V0KQotICAg
ICAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwob2Zmc2V0LCAiQ2Fubm90IHJlYWQgdGhl
IGFkZHJlc3Mgb2Zmc2V0LiIpOwotICAgIENvbnRleHRFeHByZXNzaW9uIGluZGV4ID0gcGFyc2VF
eHByZXNzaW9uSTMyKGNvbnRleHQpOwotICAgIFBST1BBR0FURV9FUlJPUigpOwotICAgIHJldHVy
biBDb250ZXh0TWVtb3J5QWRkcmVzcyhpbmRleCwgb2Zmc2V0KTsKLX0KLQotdGVtcGxhdGUgPGNs
YXNzIENvbnRleHQ+Ci1Db250ZXh0RXhwcmVzc2lvbiBXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNl
TG9hZChDb250ZXh0JiBjb250ZXh0LCBXQVNNRXhwcmVzc2lvblR5cGUgZXhwcmVzc2lvblR5cGUs
IFdBU01NZW1vcnlUeXBlIG1lbW9yeVR5cGUsIE1lbW9yeUFjY2Vzc09mZnNldE1vZGUgb2Zmc2V0
TW9kZSwgTWVtb3J5QWNjZXNzQ29udmVyc2lvbiBjb252ZXJzaW9uKQotewotICAgIEZBSUxfSUZf
RkFMU0UobV9tb2R1bGUtPmFycmF5QnVmZmVyKCksICJBbiBBcnJheUJ1ZmZlciBpcyBub3QgcHJv
dmlkZWQuIik7Ci0gICAgY29uc3QgQ29udGV4dE1lbW9yeUFkZHJlc3MmIG1lbW9yeUFkZHJlc3Mg
PSBwYXJzZU1lbW9yeUFkZHJlc3MoY29udGV4dCwgb2Zmc2V0TW9kZSk7Ci0gICAgUFJPUEFHQVRF
X0VSUk9SKCk7Ci0gICAgcmV0dXJuIGNvbnRleHQuYnVpbGRMb2FkKG1lbW9yeUFkZHJlc3MsIGV4
cHJlc3Npb25UeXBlLCBtZW1vcnlUeXBlLCBjb252ZXJzaW9uKTsKLX0KLQotdGVtcGxhdGUgPGNs
YXNzIENvbnRleHQ+Ci1Db250ZXh0RXhwcmVzc2lvbiBXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNl
U3RvcmUoQ29udGV4dCYgY29udGV4dCwgV0FTTU9wS2luZCBvcEtpbmQsIFdBU01FeHByZXNzaW9u
VHlwZSBleHByZXNzaW9uVHlwZSwgV0FTTU1lbW9yeVR5cGUgbWVtb3J5VHlwZSwgTWVtb3J5QWNj
ZXNzT2Zmc2V0TW9kZSBvZmZzZXRNb2RlKQotewotICAgIEZBSUxfSUZfRkFMU0UobV9tb2R1bGUt
PmFycmF5QnVmZmVyKCksICJBbiBBcnJheUJ1ZmZlciBpcyBub3QgcHJvdmlkZWQuIik7Ci0gICAg
Y29uc3QgQ29udGV4dE1lbW9yeUFkZHJlc3MmIG1lbW9yeUFkZHJlc3MgPSBwYXJzZU1lbW9yeUFk
ZHJlc3MoY29udGV4dCwgb2Zmc2V0TW9kZSk7Ci0gICAgUFJPUEFHQVRFX0VSUk9SKCk7Ci0KLSAg
ICBDb250ZXh0RXhwcmVzc2lvbiB2YWx1ZSA9IHBhcnNlRXhwcmVzc2lvbihjb250ZXh0LCBleHBy
ZXNzaW9uVHlwZSk7Ci0gICAgUFJPUEFHQVRFX0VSUk9SKCk7Ci0gICAgcmV0dXJuIGNvbnRleHQu
YnVpbGRTdG9yZShvcEtpbmQsIG1lbW9yeUFkZHJlc3MsIGV4cHJlc3Npb25UeXBlLCBtZW1vcnlU
eXBlLCB2YWx1ZSk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PgotQ29udGV4dEV4cHJl
c3Npb25MaXN0IFdBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VDYWxsQXJndW1lbnRzKENvbnRleHQm
IGNvbnRleHQsIGNvbnN0IFZlY3RvcjxXQVNNVHlwZT4mIGFyZ3VtZW50cykKLXsKLSAgICBDb250
ZXh0RXhwcmVzc2lvbkxpc3QgYXJndW1lbnRMaXN0OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgYXJndW1lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIENvbnRleHRFeHByZXNzaW9uIGV4
cHJlc3Npb24gPSBwYXJzZUV4cHJlc3Npb24oY29udGV4dCwgV0FTTUV4cHJlc3Npb25UeXBlKGFy
Z3VtZW50c1tpXSkpOwotICAgICAgICBQUk9QQUdBVEVfRVJST1IoKTsKLSAgICAgICAgY29udGV4
dC5hcHBlbmRFeHByZXNzaW9uTGlzdChhcmd1bWVudExpc3QsIGV4cHJlc3Npb24pOwotICAgIH0K
LSAgICByZXR1cm4gYXJndW1lbnRMaXN0OwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4K
LUNvbnRleHRFeHByZXNzaW9uIFdBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VDYWxsSW50ZXJuYWwo
Q29udGV4dCYgY29udGV4dCwgV0FTTU9wS2luZCBvcEtpbmQsIFdBU01FeHByZXNzaW9uVHlwZSBy
ZXR1cm5UeXBlKQotewotICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXg7Ci0gICAgUkVBRF9DT01Q
QUNUX1VJTlQzMl9PUl9GQUlMKGZ1bmN0aW9uSW5kZXgsICJDYW5ub3QgcmVhZCB0aGUgZnVuY3Rp
b24gaW5kZXguIik7Ci0gICAgRkFJTF9JRl9GQUxTRShmdW5jdGlvbkluZGV4IDwgbV9tb2R1bGUt
PmZ1bmN0aW9uRGVjbGFyYXRpb25zKCkuc2l6ZSgpLCAiVGhlIGZ1bmN0aW9uIGluZGV4IGlzIGlu
Y29ycmVjdC4iKTsKLSAgICBjb25zdCBXQVNNU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBtX21vZHVs
ZS0+c2lnbmF0dXJlcygpW21fbW9kdWxlLT5mdW5jdGlvbkRlY2xhcmF0aW9ucygpW2Z1bmN0aW9u
SW5kZXhdLnNpZ25hdHVyZUluZGV4XTsKLSAgICBpZiAob3BLaW5kID09IFdBU01PcEtpbmQ6OkV4
cHJlc3Npb24pCi0gICAgICAgIEZBSUxfSUZfRkFMU0Uoc2lnbmF0dXJlLnJldHVyblR5cGUgPT0g
cmV0dXJuVHlwZSwgIldyb25nIHJldHVybiB0eXBlLiIpOwotCi0gICAgQ29udGV4dEV4cHJlc3Np
b25MaXN0IGFyZ3VtZW50TGlzdCA9IHBhcnNlQ2FsbEFyZ3VtZW50cyhjb250ZXh0LCBzaWduYXR1
cmUuYXJndW1lbnRzKTsKLSAgICBQUk9QQUdBVEVfRVJST1IoKTsKLSAgICByZXR1cm4gY29udGV4
dC5idWlsZENhbGxJbnRlcm5hbChmdW5jdGlvbkluZGV4LCBhcmd1bWVudExpc3QsIHNpZ25hdHVy
ZSwgcmV0dXJuVHlwZSk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PgotQ29udGV4dEV4
cHJlc3Npb24gV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUNhbGxJbmRpcmVjdChDb250ZXh0JiBj
b250ZXh0LCBXQVNNT3BLaW5kIG9wS2luZCwgV0FTTUV4cHJlc3Npb25UeXBlIHJldHVyblR5cGUp
Ci17Ci0gICAgdWludDMyX3QgZnVuY3Rpb25Qb2ludGVyVGFibGVJbmRleDsKLSAgICBSRUFEX0NP
TVBBQ1RfVUlOVDMyX09SX0ZBSUwoZnVuY3Rpb25Qb2ludGVyVGFibGVJbmRleCwgIkNhbm5vdCBy
ZWFkIHRoZSBmdW5jdGlvbiBwb2ludGVyIHRhYmxlIGluZGV4LiIpOwotICAgIEZBSUxfSUZfRkFM
U0UoZnVuY3Rpb25Qb2ludGVyVGFibGVJbmRleCA8IG1fbW9kdWxlLT5mdW5jdGlvblBvaW50ZXJU
YWJsZXMoKS5zaXplKCksICJUaGUgZnVuY3Rpb24gcG9pbnRlciB0YWJsZSBpbmRleCBpcyBpbmNv
cnJlY3QuIik7Ci0gICAgY29uc3QgV0FTTUZ1bmN0aW9uUG9pbnRlclRhYmxlJiBmdW5jdGlvblBv
aW50ZXJUYWJsZSA9IG1fbW9kdWxlLT5mdW5jdGlvblBvaW50ZXJUYWJsZXMoKVtmdW5jdGlvblBv
aW50ZXJUYWJsZUluZGV4XTsKLSAgICBjb25zdCBXQVNNU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBt
X21vZHVsZS0+c2lnbmF0dXJlcygpW2Z1bmN0aW9uUG9pbnRlclRhYmxlLnNpZ25hdHVyZUluZGV4
XTsKLSAgICBpZiAob3BLaW5kID09IFdBU01PcEtpbmQ6OkV4cHJlc3Npb24pCi0gICAgICAgIEZB
SUxfSUZfRkFMU0Uoc2lnbmF0dXJlLnJldHVyblR5cGUgPT0gcmV0dXJuVHlwZSwgIldyb25nIHJl
dHVybiB0eXBlLiIpOwotCi0gICAgQ29udGV4dEV4cHJlc3Npb24gaW5kZXggPSBwYXJzZUV4cHJl
c3Npb25JMzIoY29udGV4dCk7Ci0gICAgUFJPUEFHQVRFX0VSUk9SKCk7Ci0KLSAgICBDb250ZXh0
RXhwcmVzc2lvbkxpc3QgYXJndW1lbnRMaXN0ID0gcGFyc2VDYWxsQXJndW1lbnRzKGNvbnRleHQs
IHNpZ25hdHVyZS5hcmd1bWVudHMpOwotICAgIFBST1BBR0FURV9FUlJPUigpOwotICAgIHJldHVy
biBjb250ZXh0LmJ1aWxkQ2FsbEluZGlyZWN0KGZ1bmN0aW9uUG9pbnRlclRhYmxlSW5kZXgsIGlu
ZGV4LCBhcmd1bWVudExpc3QsIHNpZ25hdHVyZSwgcmV0dXJuVHlwZSk7Ci19Ci0KLXRlbXBsYXRl
IDxjbGFzcyBDb250ZXh0PgotQ29udGV4dEV4cHJlc3Npb24gV0FTTUZ1bmN0aW9uUGFyc2VyOjpw
YXJzZUNhbGxJbXBvcnQoQ29udGV4dCYgY29udGV4dCwgV0FTTU9wS2luZCBvcEtpbmQsIFdBU01F
eHByZXNzaW9uVHlwZSByZXR1cm5UeXBlKQotewotICAgIHVpbnQzMl90IGZ1bmN0aW9uSW1wb3J0
U2lnbmF0dXJlSW5kZXg7Ci0gICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKGZ1bmN0aW9u
SW1wb3J0U2lnbmF0dXJlSW5kZXgsICJDYW5ub3QgcmVhZCB0aGUgZnVuY3Rpb24gaW1wb3J0IHNp
Z25hdHVyZSBpbmRleC4iKTsKLSAgICBGQUlMX0lGX0ZBTFNFKGZ1bmN0aW9uSW1wb3J0U2lnbmF0
dXJlSW5kZXggPCBtX21vZHVsZS0+ZnVuY3Rpb25JbXBvcnRTaWduYXR1cmVzKCkuc2l6ZSgpLCAi
VGhlIGZ1bmN0aW9uIGltcG9ydCBzaWduYXR1cmUgaW5kZXggaXMgaW5jb3JyZWN0LiIpOwotICAg
IGNvbnN0IFdBU01GdW5jdGlvbkltcG9ydFNpZ25hdHVyZSYgZnVuY3Rpb25JbXBvcnRTaWduYXR1
cmUgPSBtX21vZHVsZS0+ZnVuY3Rpb25JbXBvcnRTaWduYXR1cmVzKClbZnVuY3Rpb25JbXBvcnRT
aWduYXR1cmVJbmRleF07Ci0gICAgY29uc3QgV0FTTVNpZ25hdHVyZSYgc2lnbmF0dXJlID0gbV9t
b2R1bGUtPnNpZ25hdHVyZXMoKVtmdW5jdGlvbkltcG9ydFNpZ25hdHVyZS5zaWduYXR1cmVJbmRl
eF07Ci0gICAgaWYgKG9wS2luZCA9PSBXQVNNT3BLaW5kOjpFeHByZXNzaW9uKQotICAgICAgICBG
QUlMX0lGX0ZBTFNFKHNpZ25hdHVyZS5yZXR1cm5UeXBlID09IHJldHVyblR5cGUsICJXcm9uZyBy
ZXR1cm4gdHlwZS4iKTsKLQotICAgIENvbnRleHRFeHByZXNzaW9uTGlzdCBhcmd1bWVudExpc3Qg
PSBwYXJzZUNhbGxBcmd1bWVudHMoY29udGV4dCwgc2lnbmF0dXJlLmFyZ3VtZW50cyk7Ci0gICAg
UFJPUEFHQVRFX0VSUk9SKCk7Ci0gICAgcmV0dXJuIGNvbnRleHQuYnVpbGRDYWxsSW1wb3J0KGZ1
bmN0aW9uSW1wb3J0U2lnbmF0dXJlLmZ1bmN0aW9uSW1wb3J0SW5kZXgsIGFyZ3VtZW50TGlzdCwg
c2lnbmF0dXJlLCByZXR1cm5UeXBlKTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+Ci1D
b250ZXh0RXhwcmVzc2lvbiBXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlQ29uZGl0aW9uYWwoQ29u
dGV4dCYgY29udGV4dCwgV0FTTUV4cHJlc3Npb25UeXBlIGV4cHJlc3Npb25UeXBlKQotewotICAg
IENvbnRleHRKdW1wVGFyZ2V0IGVsc2VUYXJnZXQ7Ci0gICAgQ29udGV4dEp1bXBUYXJnZXQgZW5k
OwotCi0gICAgQ29udGV4dEV4cHJlc3Npb24gY29uZGl0aW9uID0gcGFyc2VFeHByZXNzaW9uSTMy
KGNvbnRleHQpOwotICAgIFBST1BBR0FURV9FUlJPUigpOwotCi0gICAgY29udGV4dC5qdW1wVG9U
YXJnZXRJZihDb250ZXh0OjpKdW1wQ29uZGl0aW9uOjpaZXJvLCBjb25kaXRpb24sIGVsc2VUYXJn
ZXQpOwotCi0gICAgcGFyc2VFeHByZXNzaW9uKGNvbnRleHQsIGV4cHJlc3Npb25UeXBlKTsKLSAg
ICBQUk9QQUdBVEVfRVJST1IoKTsKLSAgICAKLSAgICBjb250ZXh0Lmp1bXBUb1RhcmdldChlbmQp
OwotICAgIGNvbnRleHQubGlua1RhcmdldChlbHNlVGFyZ2V0KTsKLQotICAgIC8vIFdlIHVzZSBk
aXNjYXJkKCkgaGVyZSB0byBkZWNyZW1lbnQgdGhlIHN0YWNrIHRvcCBpbiB0aGUgYmFzZWxpbmUg
SklULgotICAgIGNvbnRleHQuZGlzY2FyZChVTlVTRUQpOwotICAgIHBhcnNlRXhwcmVzc2lvbihj
b250ZXh0LCBleHByZXNzaW9uVHlwZSk7Ci0gICAgUFJPUEFHQVRFX0VSUk9SKCk7Ci0gICAgCi0g
ICAgY29udGV4dC5saW5rVGFyZ2V0KGVuZCk7Ci0gICAgcmV0dXJuIFVOVVNFRDsKLX0KLQotdGVt
cGxhdGUgPGNsYXNzIENvbnRleHQ+Ci1Db250ZXh0RXhwcmVzc2lvbiBXQVNNRnVuY3Rpb25QYXJz
ZXI6OnBhcnNlQ29tbWEoQ29udGV4dCYgY29udGV4dCwgV0FTTUV4cHJlc3Npb25UeXBlIGV4cHJl
c3Npb25UeXBlKQotewotICAgIFdBU01FeHByZXNzaW9uVHlwZSBsZWZ0RXhwcmVzc2lvblR5cGU7
Ci0gICAgUkVBRF9FWFBSRVNTSU9OX1RZUEVfT1JfRkFJTChsZWZ0RXhwcmVzc2lvblR5cGUsICJD
YW5ub3QgcmVhZCB0aGUgZXhwcmVzc2lvbiB0eXBlLiIpOwotICAgIENvbnRleHRFeHByZXNzaW9u
IGxlZnRFeHByZXNzaW9uID0gcGFyc2VFeHByZXNzaW9uKGNvbnRleHQsIGxlZnRFeHByZXNzaW9u
VHlwZSk7Ci0gICAgUFJPUEFHQVRFX0VSUk9SKCk7Ci0gICAgaWYgKGxlZnRFeHByZXNzaW9uVHlw
ZSAhPSBXQVNNRXhwcmVzc2lvblR5cGU6OlZvaWQpCi0gICAgICAgIGNvbnRleHQuZGlzY2FyZChs
ZWZ0RXhwcmVzc2lvbik7Ci0gICAgcmV0dXJuIHBhcnNlRXhwcmVzc2lvbihjb250ZXh0LCBleHBy
ZXNzaW9uVHlwZSk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PgotQ29udGV4dEV4cHJl
c3Npb24gV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUNvbnZlcnRUeXBlKENvbnRleHQmIGNvbnRl
eHQsIFdBU01FeHByZXNzaW9uVHlwZSBmcm9tVHlwZSwgV0FTTUV4cHJlc3Npb25UeXBlIHRvVHlw
ZSwgV0FTTVR5cGVDb252ZXJzaW9uIGNvbnZlcnNpb24pCi17Ci0gICAgQ29udGV4dEV4cHJlc3Np
b24gZXhwcmVzc2lvbiA9IHBhcnNlRXhwcmVzc2lvbihjb250ZXh0LCBmcm9tVHlwZSk7Ci0gICAg
UFJPUEFHQVRFX0VSUk9SKCk7Ci0KLSAgICByZXR1cm4gY29udGV4dC5idWlsZENvbnZlcnRUeXBl
KGV4cHJlc3Npb24sIGZyb21UeXBlLCB0b1R5cGUsIGNvbnZlcnNpb24pOwotfQotCi19IC8vIG5h
bWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01GdW5jdGlvblBhcnNlci5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZ1bmN0aW9uUGFyc2VyLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDdmMDllM2U4NWUzMTdhZTJiMGM2ZjgxYWY1MDliNDRhM2I3ZGYwOTIu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV0FTTUZ1bmN0aW9uUGFyc2VyLmgKKysrIC9kZXYvbnVsbApAQCAt
MSwxNDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpZm5kZWYgV0FTTUZ1bmN0aW9uUGFyc2VyX2gKLSNkZWZpbmUgV0FTTUZ1bmN0aW9uUGFy
c2VyX2gKLQotI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLQotI2luY2x1ZGUgIlNvdXJjZUNvZGUu
aCIKLSNpbmNsdWRlICJXQVNNUmVhZGVyLmgiCi0KLSNkZWZpbmUgQ29udGV4dEV4cHJlc3Npb24g
dHlwZW5hbWUgQ29udGV4dDo6RXhwcmVzc2lvbgotI2RlZmluZSBDb250ZXh0U3RhdGVtZW50IHR5
cGVuYW1lIENvbnRleHQ6OlN0YXRlbWVudAotI2RlZmluZSBDb250ZXh0RXhwcmVzc2lvbkxpc3Qg
dHlwZW5hbWUgQ29udGV4dDo6RXhwcmVzc2lvbkxpc3QKLSNkZWZpbmUgQ29udGV4dE1lbW9yeUFk
ZHJlc3MgdHlwZW5hbWUgQ29udGV4dDo6TWVtb3J5QWRkcmVzcwotI2RlZmluZSBDb250ZXh0SnVt
cFRhcmdldCB0eXBlbmFtZSBDb250ZXh0OjpKdW1wVGFyZ2V0Ci0KLW5hbWVzcGFjZSBKU0Mgewot
Ci1jbGFzcyBDb2RlQmxvY2s7Ci1jbGFzcyBKU1dBU01Nb2R1bGU7Ci1jbGFzcyBWTTsKLQotY2xh
c3MgV0FTTUZ1bmN0aW9uUGFyc2VyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgYm9vbCBjaGVja1N5
bnRheChKU1dBU01Nb2R1bGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgc2l6ZV90IGZ1bmN0aW9uSW5k
ZXgsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0SW5Tb3VyY2UsIHVuc2lnbmVkJiBlbmRPZmZzZXRJblNv
dXJjZSwgdW5zaWduZWQmIHN0YWNrSGVpZ2h0LCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7Ci0gICAg
c3RhdGljIHZvaWQgY29tcGlsZShWTSYsIENvZGVCbG9jayosIEpTV0FTTU1vZHVsZSosIGNvbnN0
IFNvdXJjZUNvZGUmLCBzaXplX3QgZnVuY3Rpb25JbmRleCk7Ci0KLXByaXZhdGU6Ci0gICAgV0FT
TUZ1bmN0aW9uUGFyc2VyKEpTV0FTTU1vZHVsZSogbW9kdWxlLCBjb25zdCBTb3VyY2VDb2RlJiBz
b3VyY2UsIHNpemVfdCBmdW5jdGlvbkluZGV4KQotICAgICAgICA6IG1fbW9kdWxlKG1vZHVsZSkK
LSAgICAgICAgLCBtX3JlYWRlcihzdGF0aWNfY2FzdDxXZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVy
Kj4oc291cmNlLnByb3ZpZGVyKCkpLT5kYXRhKCkpCi0gICAgICAgICwgbV9mdW5jdGlvbkluZGV4
KGZ1bmN0aW9uSW5kZXgpCi0gICAgICAgICwgbV9icmVha1Njb3BlRGVwdGgoMCkKLSAgICAgICAg
LCBtX2NvbnRpbnVlU2NvcGVEZXB0aCgwKQotICAgICAgICAsIG1fbGFiZWxEZXB0aCgwKQotICAg
IHsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gYm9vbCBwYXJzZUZ1bmN0
aW9uKENvbnRleHQmKTsKLSAgICBib29sIHBhcnNlTG9jYWxWYXJpYWJsZXMoKTsKLQotICAgIHRl
bXBsYXRlIDxjbGFzcyBDb250ZXh0PiBDb250ZXh0U3RhdGVtZW50IHBhcnNlU3RhdGVtZW50KENv
bnRleHQmKTsKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dFN0YXRlbWVudCBw
YXJzZVJldHVyblN0YXRlbWVudChDb250ZXh0Jik7Ci0gICAgdGVtcGxhdGUgPGNsYXNzIENvbnRl
eHQ+IENvbnRleHRTdGF0ZW1lbnQgcGFyc2VCbG9ja1N0YXRlbWVudChDb250ZXh0Jik7Ci0gICAg
dGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRTdGF0ZW1lbnQgcGFyc2VJZlN0YXRlbWVu
dChDb250ZXh0Jik7Ci0gICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRTdGF0ZW1l
bnQgcGFyc2VJZkVsc2VTdGF0ZW1lbnQoQ29udGV4dCYpOwotICAgIHRlbXBsYXRlIDxjbGFzcyBD
b250ZXh0PiBDb250ZXh0U3RhdGVtZW50IHBhcnNlV2hpbGVTdGF0ZW1lbnQoQ29udGV4dCYpOwot
ICAgIHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PiBDb250ZXh0U3RhdGVtZW50IHBhcnNlRG9TdGF0
ZW1lbnQoQ29udGV4dCYpOwotICAgIHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PiBDb250ZXh0U3Rh
dGVtZW50IHBhcnNlTGFiZWxTdGF0ZW1lbnQoQ29udGV4dCYpOwotICAgIHRlbXBsYXRlIDxjbGFz
cyBDb250ZXh0PiBDb250ZXh0U3RhdGVtZW50IHBhcnNlQnJlYWtTdGF0ZW1lbnQoQ29udGV4dCYp
OwotICAgIHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PiBDb250ZXh0U3RhdGVtZW50IHBhcnNlQnJl
YWtMYWJlbFN0YXRlbWVudChDb250ZXh0Jik7Ci0gICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+
IENvbnRleHRTdGF0ZW1lbnQgcGFyc2VDb250aW51ZVN0YXRlbWVudChDb250ZXh0Jik7Ci0gICAg
dGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRTdGF0ZW1lbnQgcGFyc2VDb250aW51ZUxh
YmVsU3RhdGVtZW50KENvbnRleHQmKTsKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29u
dGV4dFN0YXRlbWVudCBwYXJzZVN3aXRjaFN0YXRlbWVudChDb250ZXh0Jik7Ci0KLSAgICB0ZW1w
bGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dEV4cHJlc3Npb24gcGFyc2VFeHByZXNzaW9uKENv
bnRleHQmLCBXQVNNRXhwcmVzc2lvblR5cGUpOwotCi0gICAgdGVtcGxhdGUgPGNsYXNzIENvbnRl
eHQ+IENvbnRleHRFeHByZXNzaW9uIHBhcnNlRXhwcmVzc2lvbkkzMihDb250ZXh0Jik7Ci0gICAg
dGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRFeHByZXNzaW9uIHBhcnNlQ29uc3RhbnRQ
b29sSW5kZXhFeHByZXNzaW9uSTMyKENvbnRleHQmLCB1aW50MzJfdCBjb25zdGFudFBvb2xJbmRl
eCk7Ci0gICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRFeHByZXNzaW9uIHBhcnNl
Q29uc3RhbnRQb29sSW5kZXhFeHByZXNzaW9uSTMyKENvbnRleHQmKTsKLSAgICB0ZW1wbGF0ZSA8
Y2xhc3MgQ29udGV4dD4gQ29udGV4dEV4cHJlc3Npb24gcGFyc2VJbW1lZGlhdGVFeHByZXNzaW9u
STMyKENvbnRleHQmLCB1aW50MzJfdCBpbW1lZGlhdGUpOwotICAgIHRlbXBsYXRlIDxjbGFzcyBD
b250ZXh0PiBDb250ZXh0RXhwcmVzc2lvbiBwYXJzZUltbWVkaWF0ZUV4cHJlc3Npb25JMzIoQ29u
dGV4dCYpOwotICAgIHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PiBDb250ZXh0RXhwcmVzc2lvbiBw
YXJzZVVuYXJ5RXhwcmVzc2lvbkkzMihDb250ZXh0JiwgV0FTTU9wRXhwcmVzc2lvbkkzMik7Ci0g
ICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRFeHByZXNzaW9uIHBhcnNlQmluYXJ5
RXhwcmVzc2lvbkkzMihDb250ZXh0JiwgV0FTTU9wRXhwcmVzc2lvbkkzMik7Ci0gICAgdGVtcGxh
dGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRFeHByZXNzaW9uIHBhcnNlUmVsYXRpb25hbEkzMkV4
cHJlc3Npb25JMzIoQ29udGV4dCYsIFdBU01PcEV4cHJlc3Npb25JMzIpOwotICAgIHRlbXBsYXRl
IDxjbGFzcyBDb250ZXh0PiBDb250ZXh0RXhwcmVzc2lvbiBwYXJzZVJlbGF0aW9uYWxGMzJFeHBy
ZXNzaW9uSTMyKENvbnRleHQmLCBXQVNNT3BFeHByZXNzaW9uSTMyKTsKLSAgICB0ZW1wbGF0ZSA8
Y2xhc3MgQ29udGV4dD4gQ29udGV4dEV4cHJlc3Npb24gcGFyc2VSZWxhdGlvbmFsRjY0RXhwcmVz
c2lvbkkzMihDb250ZXh0JiwgV0FTTU9wRXhwcmVzc2lvbkkzMik7Ci0gICAgdGVtcGxhdGUgPGNs
YXNzIENvbnRleHQ+IENvbnRleHRFeHByZXNzaW9uIHBhcnNlTWluT3JNYXhFeHByZXNzaW9uSTMy
KENvbnRleHQmLCBXQVNNT3BFeHByZXNzaW9uSTMyKTsKLQotICAgIHRlbXBsYXRlIDxjbGFzcyBD
b250ZXh0PiBDb250ZXh0RXhwcmVzc2lvbiBwYXJzZUV4cHJlc3Npb25GMzIoQ29udGV4dCYpOwot
ICAgIHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PiBDb250ZXh0RXhwcmVzc2lvbiBwYXJzZUNvbnN0
YW50UG9vbEluZGV4RXhwcmVzc2lvbkYzMihDb250ZXh0JiwgdWludDMyX3QgY29uc3RhbnRJbmRl
eCk7Ci0gICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRFeHByZXNzaW9uIHBhcnNl
Q29uc3RhbnRQb29sSW5kZXhFeHByZXNzaW9uRjMyKENvbnRleHQmKTsKLSAgICB0ZW1wbGF0ZSA8
Y2xhc3MgQ29udGV4dD4gQ29udGV4dEV4cHJlc3Npb24gcGFyc2VJbW1lZGlhdGVFeHByZXNzaW9u
RjMyKENvbnRleHQmKTsKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dEV4cHJl
c3Npb24gcGFyc2VVbmFyeUV4cHJlc3Npb25GMzIoQ29udGV4dCYsIFdBU01PcEV4cHJlc3Npb25G
MzIpOwotICAgIHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PiBDb250ZXh0RXhwcmVzc2lvbiBwYXJz
ZUJpbmFyeUV4cHJlc3Npb25GMzIoQ29udGV4dCYsIFdBU01PcEV4cHJlc3Npb25GMzIpOwotCi0g
ICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRFeHByZXNzaW9uIHBhcnNlRXhwcmVz
c2lvbkY2NChDb250ZXh0Jik7Ci0gICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRF
eHByZXNzaW9uIHBhcnNlQ29uc3RhbnRQb29sSW5kZXhFeHByZXNzaW9uRjY0KENvbnRleHQmLCB1
aW50MzJfdCBjb25zdGFudEluZGV4KTsKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29u
dGV4dEV4cHJlc3Npb24gcGFyc2VDb25zdGFudFBvb2xJbmRleEV4cHJlc3Npb25GNjQoQ29udGV4
dCYpOwotICAgIHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PiBDb250ZXh0RXhwcmVzc2lvbiBwYXJz
ZUltbWVkaWF0ZUV4cHJlc3Npb25GNjQoQ29udGV4dCYpOwotICAgIHRlbXBsYXRlIDxjbGFzcyBD
b250ZXh0PiBDb250ZXh0RXhwcmVzc2lvbiBwYXJzZVVuYXJ5RXhwcmVzc2lvbkY2NChDb250ZXh0
JiwgV0FTTU9wRXhwcmVzc2lvbkY2NCk7Ci0gICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENv
bnRleHRFeHByZXNzaW9uIHBhcnNlQmluYXJ5RXhwcmVzc2lvbkY2NChDb250ZXh0JiwgV0FTTU9w
RXhwcmVzc2lvbkY2NCk7Ci0gICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRFeHBy
ZXNzaW9uIHBhcnNlTWluT3JNYXhFeHByZXNzaW9uRjY0KENvbnRleHQmLCBXQVNNT3BFeHByZXNz
aW9uRjY0KTsKLQotICAgIHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PiBDb250ZXh0RXhwcmVzc2lv
biBwYXJzZUV4cHJlc3Npb25Wb2lkKENvbnRleHQmKTsKLQotICAgIHRlbXBsYXRlIDxjbGFzcyBD
b250ZXh0PiBDb250ZXh0RXhwcmVzc2lvbiBwYXJzZUdldExvY2FsRXhwcmVzc2lvbihDb250ZXh0
JiwgV0FTTVR5cGUsIHVpbnQzMl90IGxvY2FsSW5kZXgpOwotICAgIHRlbXBsYXRlIDxjbGFzcyBD
b250ZXh0PiBDb250ZXh0RXhwcmVzc2lvbiBwYXJzZUdldExvY2FsRXhwcmVzc2lvbihDb250ZXh0
JiwgV0FTTVR5cGUpOwotICAgIHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PiBDb250ZXh0RXhwcmVz
c2lvbiBwYXJzZUdldEdsb2JhbEV4cHJlc3Npb24oQ29udGV4dCYsIFdBU01UeXBlKTsKLSAgICB0
ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dEV4cHJlc3Npb24gcGFyc2VTZXRMb2NhbChD
b250ZXh0JiwgV0FTTU9wS2luZCwgV0FTTUV4cHJlc3Npb25UeXBlLCB1aW50MzJfdCBsb2NhbElu
ZGV4KTsKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dEV4cHJlc3Npb24gcGFy
c2VTZXRMb2NhbChDb250ZXh0JiwgV0FTTU9wS2luZCwgV0FTTUV4cHJlc3Npb25UeXBlKTsKLSAg
ICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dEV4cHJlc3Npb24gcGFyc2VTZXRHbG9i
YWwoQ29udGV4dCYsIFdBU01PcEtpbmQsIFdBU01FeHByZXNzaW9uVHlwZSwgdWludDMyX3QgZ2xv
YmFsSW5kZXgpOwotICAgIHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PiBDb250ZXh0RXhwcmVzc2lv
biBwYXJzZVNldEdsb2JhbChDb250ZXh0JiwgV0FTTU9wS2luZCwgV0FTTUV4cHJlc3Npb25UeXBl
KTsKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dE1lbW9yeUFkZHJlc3MgcGFy
c2VNZW1vcnlBZGRyZXNzKENvbnRleHQmLCBNZW1vcnlBY2Nlc3NPZmZzZXRNb2RlKTsKLSAgICB0
ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dEV4cHJlc3Npb24gcGFyc2VMb2FkKENvbnRl
eHQmLCBXQVNNRXhwcmVzc2lvblR5cGUsIFdBU01NZW1vcnlUeXBlLCBNZW1vcnlBY2Nlc3NPZmZz
ZXRNb2RlLCBNZW1vcnlBY2Nlc3NDb252ZXJzaW9uID0gTWVtb3J5QWNjZXNzQ29udmVyc2lvbjo6
Tm9Db252ZXJzaW9uKTsKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dEV4cHJl
c3Npb24gcGFyc2VTdG9yZShDb250ZXh0JiwgV0FTTU9wS2luZCwgV0FTTUV4cHJlc3Npb25UeXBl
LCBXQVNNTWVtb3J5VHlwZSwgTWVtb3J5QWNjZXNzT2Zmc2V0TW9kZSk7Ci0gICAgdGVtcGxhdGUg
PGNsYXNzIENvbnRleHQ+IENvbnRleHRFeHByZXNzaW9uTGlzdCBwYXJzZUNhbGxBcmd1bWVudHMo
Q29udGV4dCYsIGNvbnN0IFZlY3RvcjxXQVNNVHlwZT4mIGFyZ3VtZW50cyk7Ci0gICAgdGVtcGxh
dGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRFeHByZXNzaW9uIHBhcnNlQ2FsbEludGVybmFsKENv
bnRleHQmLCBXQVNNT3BLaW5kLCBXQVNNRXhwcmVzc2lvblR5cGUgcmV0dXJuVHlwZSk7Ci0gICAg
dGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRFeHByZXNzaW9uIHBhcnNlQ2FsbEluZGly
ZWN0KENvbnRleHQmLCBXQVNNT3BLaW5kLCBXQVNNRXhwcmVzc2lvblR5cGUgcmV0dXJuVHlwZSk7
Ci0gICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRFeHByZXNzaW9uIHBhcnNlQ2Fs
bEltcG9ydChDb250ZXh0JiwgV0FTTU9wS2luZCwgV0FTTUV4cHJlc3Npb25UeXBlIHJldHVyblR5
cGUpOwotICAgIHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PiBDb250ZXh0RXhwcmVzc2lvbiBwYXJz
ZUNvbmRpdGlvbmFsKENvbnRleHQmLCBXQVNNRXhwcmVzc2lvblR5cGUpOwotICAgIHRlbXBsYXRl
IDxjbGFzcyBDb250ZXh0PiBDb250ZXh0RXhwcmVzc2lvbiBwYXJzZUNvbW1hKENvbnRleHQmLCBX
QVNNRXhwcmVzc2lvblR5cGUpOwotICAgIHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PiBDb250ZXh0
RXhwcmVzc2lvbiBwYXJzZUNvbnZlcnRUeXBlKENvbnRleHQmLCBXQVNNRXhwcmVzc2lvblR5cGUg
ZnJvbVR5cGUsIFdBU01FeHByZXNzaW9uVHlwZSB0b1R5cGUsIFdBU01UeXBlQ29udmVyc2lvbik7
Ci0KLSAgICBKU1dBU01Nb2R1bGUqIG1fbW9kdWxlOwotICAgIFdBU01SZWFkZXIgbV9yZWFkZXI7
Ci0gICAgc2l6ZV90IG1fZnVuY3Rpb25JbmRleDsKLSAgICBTdHJpbmcgbV9lcnJvck1lc3NhZ2U7
Ci0KLSAgICBXQVNNRXhwcmVzc2lvblR5cGUgbV9yZXR1cm5UeXBlOwotICAgIFZlY3RvcjxXQVNN
VHlwZT4gbV9sb2NhbFR5cGVzOwotICAgIHVpbnQzMl90IG1fbnVtYmVyT2ZJMzJMb2NhbFZhcmlh
YmxlczsKLSAgICB1aW50MzJfdCBtX251bWJlck9mRjMyTG9jYWxWYXJpYWJsZXM7Ci0gICAgdWlu
dDMyX3QgbV9udW1iZXJPZkY2NExvY2FsVmFyaWFibGVzOwotCi0gICAgdW5zaWduZWQgbV9icmVh
a1Njb3BlRGVwdGg7Ci0gICAgdW5zaWduZWQgbV9jb250aW51ZVNjb3BlRGVwdGg7Ci0gICAgdW5z
aWduZWQgbV9sYWJlbERlcHRoOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAv
LyBFTkFCTEUoV0VCQVNTRU1CTFkpCi0KLSNlbmRpZiAvLyBXQVNNRnVuY3Rpb25QYXJzZXJfaApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZ1bmN0aW9uU3ludGF4
Q2hlY2tlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZ1bmN0aW9uU3ludGF4
Q2hlY2tlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjcyZGE4N2U3NWQ4YjUx
ODgzMjIwOGZjNDRkYzIzZDlhOGRlMDBhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01GdW5jdGlvblN5
bnRheENoZWNrZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDI4NyArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXQVNNRnVuY3Rpb25T
eW50YXhDaGVja2VyX2gKLSNkZWZpbmUgV0FTTUZ1bmN0aW9uU3ludGF4Q2hlY2tlcl9oCi0KLSNp
ZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0KLSNkZWZpbmUgVU5VU0VEIDAKLQotbmFtZXNwYWNlIEpT
QyB7Ci0KLWNsYXNzIFdBU01GdW5jdGlvblN5bnRheENoZWNrZXIgewotcHVibGljOgotICAgIHR5
cGVkZWYgaW50IEV4cHJlc3Npb247Ci0gICAgdHlwZWRlZiBpbnQgU3RhdGVtZW50OwotICAgIHR5
cGVkZWYgaW50IEV4cHJlc3Npb25MaXN0OwotICAgIHN0cnVjdCBNZW1vcnlBZGRyZXNzIHsKLSAg
ICAgICAgTWVtb3J5QWRkcmVzcyh2b2lkKikgeyB9Ci0gICAgICAgIE1lbW9yeUFkZHJlc3MoaW50
LCB1aW50MzJfdCkgeyB9Ci0gICAgfTsKLSAgICB0eXBlZGVmIGludCBKdW1wVGFyZ2V0OwotICAg
IGVudW0gY2xhc3MgSnVtcENvbmRpdGlvbiB7IFplcm8sIE5vblplcm8gfTsKLQotICAgIHZvaWQg
c3RhcnRGdW5jdGlvbihjb25zdCBWZWN0b3I8V0FTTVR5cGU+JiBhcmd1bWVudHMsIHVpbnQzMl90
IG51bWJlck9mSTMyTG9jYWxWYXJpYWJsZXMsIHVpbnQzMl90IG51bWJlck9mRjMyTG9jYWxWYXJp
YWJsZXMsIHVpbnQzMl90IG51bWJlck9mRjY0TG9jYWxWYXJpYWJsZXMpCi0gICAgewotICAgICAg
ICBtX251bWJlck9mTG9jYWxzID0gYXJndW1lbnRzLnNpemUoKSArIG51bWJlck9mSTMyTG9jYWxW
YXJpYWJsZXMgKyBudW1iZXJPZkYzMkxvY2FsVmFyaWFibGVzICsgbnVtYmVyT2ZGNjRMb2NhbFZh
cmlhYmxlczsKLSAgICB9Ci0KLSAgICB2b2lkIGVuZEZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAg
IEFTU0VSVCghbV90ZW1wU3RhY2tUb3ApOwotICAgIH0KLQotICAgIGludCBidWlsZFNldExvY2Fs
KFdBU01PcEtpbmQgb3BLaW5kLCB1aW50MzJfdCwgaW50LCBXQVNNVHlwZSkKLSAgICB7Ci0gICAg
ICAgIGlmIChvcEtpbmQgPT0gV0FTTU9wS2luZDo6U3RhdGVtZW50KQotICAgICAgICAgICAgbV90
ZW1wU3RhY2tUb3AtLTsKLSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9Ci0KLSAgICBpbnQg
YnVpbGRTZXRHbG9iYWwoV0FTTU9wS2luZCBvcEtpbmQsIHVpbnQzMl90LCBpbnQsIFdBU01UeXBl
KQotICAgIHsKLSAgICAgICAgaWYgKG9wS2luZCA9PSBXQVNNT3BLaW5kOjpTdGF0ZW1lbnQpCi0g
ICAgICAgICAgICBtX3RlbXBTdGFja1RvcC0tOwotICAgICAgICByZXR1cm4gVU5VU0VEOwotICAg
IH0KLQotICAgIHZvaWQgYnVpbGRSZXR1cm4oaW50LCBXQVNNRXhwcmVzc2lvblR5cGUgcmV0dXJu
VHlwZSkKLSAgICB7Ci0gICAgICAgIGlmIChyZXR1cm5UeXBlICE9IFdBU01FeHByZXNzaW9uVHlw
ZTo6Vm9pZCkKLSAgICAgICAgICAgIG1fdGVtcFN0YWNrVG9wLS07Ci0gICAgfQotCi0gICAgaW50
IGJ1aWxkSW1tZWRpYXRlSTMyKHVpbnQzMl90KQotICAgIHsKLSAgICAgICAgbV90ZW1wU3RhY2tU
b3ArKzsKLSAgICAgICAgdXBkYXRlVGVtcFN0YWNrSGVpZ2h0KCk7Ci0gICAgICAgIHJldHVybiBV
TlVTRUQ7Ci0gICAgfQotCi0gICAgaW50IGJ1aWxkSW1tZWRpYXRlRjMyKGZsb2F0KQotICAgIHsK
LSAgICAgICAgbV90ZW1wU3RhY2tUb3ArKzsKLSAgICAgICAgdXBkYXRlVGVtcFN0YWNrSGVpZ2h0
KCk7Ci0gICAgICAgIHJldHVybiBVTlVTRUQ7Ci0gICAgfQotCi0gICAgaW50IGJ1aWxkSW1tZWRp
YXRlRjY0KGRvdWJsZSkKLSAgICB7Ci0gICAgICAgIG1fdGVtcFN0YWNrVG9wKys7Ci0gICAgICAg
IHVwZGF0ZVRlbXBTdGFja0hlaWdodCgpOwotICAgICAgICByZXR1cm4gVU5VU0VEOwotICAgIH0K
LQotICAgIGludCBidWlsZEdldExvY2FsKHVpbnQzMl90LCBXQVNNVHlwZSkKLSAgICB7Ci0gICAg
ICAgIG1fdGVtcFN0YWNrVG9wKys7Ci0gICAgICAgIHVwZGF0ZVRlbXBTdGFja0hlaWdodCgpOwot
ICAgICAgICByZXR1cm4gVU5VU0VEOwotICAgIH0KLQotICAgIGludCBidWlsZEdldEdsb2JhbCh1
aW50MzJfdCwgV0FTTVR5cGUpCi0gICAgewotICAgICAgICBtX3RlbXBTdGFja1RvcCsrOwotICAg
ICAgICB1cGRhdGVUZW1wU3RhY2tIZWlnaHQoKTsKLSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAg
ICB9Ci0KLSAgICBpbnQgYnVpbGRDb252ZXJ0VHlwZShpbnQsIFdBU01FeHByZXNzaW9uVHlwZSwg
V0FTTUV4cHJlc3Npb25UeXBlLCBXQVNNVHlwZUNvbnZlcnNpb24pCi0gICAgewotICAgICAgICBy
ZXR1cm4gVU5VU0VEOwotICAgIH0KLQotICAgIGludCBidWlsZExvYWQoY29uc3QgTWVtb3J5QWRk
cmVzcyYsIFdBU01FeHByZXNzaW9uVHlwZSwgV0FTTU1lbW9yeVR5cGUsIE1lbW9yeUFjY2Vzc0Nv
bnZlcnNpb24pCi0gICAgewotICAgICAgICByZXR1cm4gVU5VU0VEOwotICAgIH0KLQotICAgIGlu
dCBidWlsZFN0b3JlKFdBU01PcEtpbmQgb3BLaW5kLCBjb25zdCBNZW1vcnlBZGRyZXNzJiwgV0FT
TUV4cHJlc3Npb25UeXBlLCBXQVNNTWVtb3J5VHlwZSwgaW50KQotICAgIHsKLSAgICAgICAgbV90
ZW1wU3RhY2tUb3AgLT0gMjsKLSAgICAgICAgaWYgKG9wS2luZCA9PSBXQVNNT3BLaW5kOjpFeHBy
ZXNzaW9uKQotICAgICAgICAgICAgbV90ZW1wU3RhY2tUb3ArKzsKLSAgICAgICAgcmV0dXJuIFVO
VVNFRDsKLSAgICB9Ci0KLSAgICBpbnQgYnVpbGRVbmFyeUkzMihpbnQsIFdBU01PcEV4cHJlc3Np
b25JMzIpCi0gICAgewotICAgICAgICByZXR1cm4gVU5VU0VEOwotICAgIH0KLQotICAgIGludCBi
dWlsZFVuYXJ5RjMyKGludCwgV0FTTU9wRXhwcmVzc2lvbkYzMikKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBVTlVTRUQ7Ci0gICAgfQotCi0gICAgaW50IGJ1aWxkVW5hcnlGNjQoaW50LCBXQVNNT3BF
eHByZXNzaW9uRjY0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9Ci0KLSAg
ICBpbnQgYnVpbGRCaW5hcnlJMzIoaW50LCBpbnQsIFdBU01PcEV4cHJlc3Npb25JMzIpCi0gICAg
ewotICAgICAgICBtX3RlbXBTdGFja1RvcC0tOwotICAgICAgICByZXR1cm4gVU5VU0VEOwotICAg
IH0KLQotICAgIGludCBidWlsZEJpbmFyeUYzMihpbnQsIGludCwgV0FTTU9wRXhwcmVzc2lvbkYz
MikKLSAgICB7Ci0gICAgICAgIG1fdGVtcFN0YWNrVG9wLS07Ci0gICAgICAgIHJldHVybiBVTlVT
RUQ7Ci0gICAgfQotCi0gICAgaW50IGJ1aWxkQmluYXJ5RjY0KGludCwgaW50LCBXQVNNT3BFeHBy
ZXNzaW9uRjY0KQotICAgIHsKLSAgICAgICAgbV90ZW1wU3RhY2tUb3AtLTsKLSAgICAgICAgcmV0
dXJuIFVOVVNFRDsKLSAgICB9Ci0KLSAgICBpbnQgYnVpbGRSZWxhdGlvbmFsSTMyKGludCwgaW50
LCBXQVNNT3BFeHByZXNzaW9uSTMyKQotICAgIHsKLSAgICAgICAgbV90ZW1wU3RhY2tUb3AtLTsK
LSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9Ci0KLSAgICBpbnQgYnVpbGRSZWxhdGlvbmFs
RjMyKGludCwgaW50LCBXQVNNT3BFeHByZXNzaW9uSTMyKQotICAgIHsKLSAgICAgICAgbV90ZW1w
U3RhY2tUb3AtLTsKLSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9Ci0KLSAgICBpbnQgYnVp
bGRSZWxhdGlvbmFsRjY0KGludCwgaW50LCBXQVNNT3BFeHByZXNzaW9uSTMyKQotICAgIHsKLSAg
ICAgICAgbV90ZW1wU3RhY2tUb3AtLTsKLSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9Ci0K
LSAgICBpbnQgYnVpbGRNaW5Pck1heEkzMihpbnQsIGludCwgV0FTTU9wRXhwcmVzc2lvbkkzMikK
LSAgICB7Ci0gICAgICAgIG1fdGVtcFN0YWNrVG9wLS07Ci0gICAgICAgIHJldHVybiBVTlVTRUQ7
Ci0gICAgfQotCi0gICAgaW50IGJ1aWxkTWluT3JNYXhGNjQoaW50LCBpbnQsIFdBU01PcEV4cHJl
c3Npb25GNjQpCi0gICAgewotICAgICAgICBtX3RlbXBTdGFja1RvcC0tOwotICAgICAgICByZXR1
cm4gVU5VU0VEOwotICAgIH0KLQotICAgIGludCBidWlsZENhbGxJbnRlcm5hbCh1aW50MzJfdCwg
aW50LCBjb25zdCBXQVNNU2lnbmF0dXJlJiBzaWduYXR1cmUsIFdBU01FeHByZXNzaW9uVHlwZSBy
ZXR1cm5UeXBlKQotICAgIHsKLSAgICAgICAgc2l6ZV90IGFyZ3VtZW50Q291bnQgPSBzaWduYXR1
cmUuYXJndW1lbnRzLnNpemUoKTsKLSAgICAgICAgdXBkYXRlVGVtcFN0YWNrSGVpZ2h0Rm9yQ2Fs
bChhcmd1bWVudENvdW50KTsKLSAgICAgICAgbV90ZW1wU3RhY2tUb3AgLT0gYXJndW1lbnRDb3Vu
dDsKLSAgICAgICAgaWYgKHJldHVyblR5cGUgIT0gV0FTTUV4cHJlc3Npb25UeXBlOjpWb2lkKSB7
Ci0gICAgICAgICAgICBtX3RlbXBTdGFja1RvcCsrOwotICAgICAgICAgICAgdXBkYXRlVGVtcFN0
YWNrSGVpZ2h0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9Ci0K
LSAgICBpbnQgYnVpbGRDYWxsSW1wb3J0KHVpbnQzMl90LCBpbnQsIGNvbnN0IFdBU01TaWduYXR1
cmUmIHNpZ25hdHVyZSwgV0FTTUV4cHJlc3Npb25UeXBlIHJldHVyblR5cGUpCi0gICAgewotICAg
ICAgICBzaXplX3QgYXJndW1lbnRDb3VudCA9IHNpZ25hdHVyZS5hcmd1bWVudHMuc2l6ZSgpOwot
ICAgICAgICB1cGRhdGVUZW1wU3RhY2tIZWlnaHRGb3JDYWxsKGFyZ3VtZW50Q291bnQpOwotICAg
ICAgICBtX3RlbXBTdGFja1RvcCAtPSBhcmd1bWVudENvdW50OwotICAgICAgICBpZiAocmV0dXJu
VHlwZSAhPSBXQVNNRXhwcmVzc2lvblR5cGU6OlZvaWQpIHsKLSAgICAgICAgICAgIG1fdGVtcFN0
YWNrVG9wKys7Ci0gICAgICAgICAgICB1cGRhdGVUZW1wU3RhY2tIZWlnaHQoKTsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gVU5VU0VEOwotICAgIH0KLQotICAgIGludCBidWlsZENhbGxJbmRp
cmVjdCh1aW50MzJfdCwgaW50LCBpbnQsIGNvbnN0IFdBU01TaWduYXR1cmUmIHNpZ25hdHVyZSwg
V0FTTUV4cHJlc3Npb25UeXBlIHJldHVyblR5cGUpCi0gICAgewotICAgICAgICBzaXplX3QgYXJn
dW1lbnRDb3VudCA9IHNpZ25hdHVyZS5hcmd1bWVudHMuc2l6ZSgpOwotICAgICAgICB1cGRhdGVU
ZW1wU3RhY2tIZWlnaHRGb3JDYWxsKGFyZ3VtZW50Q291bnQpOwotICAgICAgICBtX3RlbXBTdGFj
a1RvcCAtPSBhcmd1bWVudENvdW50ICsgMTsKLSAgICAgICAgaWYgKHJldHVyblR5cGUgIT0gV0FT
TUV4cHJlc3Npb25UeXBlOjpWb2lkKQotICAgICAgICAgICAgbV90ZW1wU3RhY2tUb3ArKzsKLSAg
ICAgICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGVuZEV4cHJlc3Npb25M
aXN0KGludCYsIGludCkgeyB9Ci0KLSAgICB2b2lkIGRpc2NhcmQoaW50KQotICAgIHsKLSAgICAg
ICAgbV90ZW1wU3RhY2tUb3AtLTsKLSAgICB9Ci0KLSAgICB2b2lkIGxpbmtUYXJnZXQoY29uc3Qg
aW50JikgeyB9Ci0gICAgdm9pZCBqdW1wVG9UYXJnZXQoY29uc3QgaW50JikgeyB9Ci0gICAgdm9p
ZCBqdW1wVG9UYXJnZXRJZihKdW1wQ29uZGl0aW9uLCBpbnQsIGNvbnN0IGludCYpCi0gICAgewot
ICAgICAgICBtX3RlbXBTdGFja1RvcC0tOwotICAgIH0KLQotICAgIHZvaWQgc3RhcnRMb29wKCkg
eyB9Ci0gICAgdm9pZCBlbmRMb29wKCkgeyB9Ci0gICAgdm9pZCBzdGFydFN3aXRjaCgpIHsgfQot
ICAgIHZvaWQgZW5kU3dpdGNoKCkgeyB9Ci0gICAgdm9pZCBzdGFydExhYmVsKCkgeyB9Ci0gICAg
dm9pZCBlbmRMYWJlbCgpIHsgfQotCi0gICAgaW50IGJyZWFrVGFyZ2V0KCkgeyByZXR1cm4gVU5V
U0VEOyB9Ci0gICAgaW50IGNvbnRpbnVlVGFyZ2V0KCkgeyByZXR1cm4gVU5VU0VEOyB9Ci0gICAg
aW50IGJyZWFrTGFiZWxUYXJnZXQodWludDMyX3QpIHsgcmV0dXJuIFVOVVNFRDsgfQotICAgIGlu
dCBjb250aW51ZUxhYmVsVGFyZ2V0KHVpbnQzMl90KSB7IHJldHVybiBVTlVTRUQ7IH0KLQotICAg
IHZvaWQgYnVpbGRTd2l0Y2goaW50LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mLCBjb25zdCBWZWN0
b3I8aW50PiYsIGNvbnN0IGludCYpCi0gICAgewotICAgICAgICBtX3RlbXBTdGFja1RvcC0tOwot
ICAgIH0KLQotICAgIHVuc2lnbmVkIHN0YWNrSGVpZ2h0KCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBtX251bWJlck9mTG9jYWxzICsgbV90ZW1wU3RhY2tIZWlnaHQ7Ci0gICAgfQotCi1wcml2YXRl
OgotICAgIHZvaWQgdXBkYXRlVGVtcFN0YWNrSGVpZ2h0KCkKLSAgICB7Ci0gICAgICAgIGlmICht
X3RlbXBTdGFja1RvcCA+IG1fdGVtcFN0YWNrSGVpZ2h0KQotICAgICAgICAgICAgbV90ZW1wU3Rh
Y2tIZWlnaHQgPSBtX3RlbXBTdGFja1RvcDsKLSAgICB9Ci0KLSAgICB2b2lkIHVwZGF0ZVRlbXBT
dGFja0hlaWdodEZvckNhbGwoc2l6ZV90IGFyZ3VtZW50Q291bnQpCi0gICAgewotICAgICAgICAv
LyBCb3hlZCBhcmd1bWVudHMgKyB0aGlzIGFyZ3VtZW50ICsgY2FsbCBmcmFtZSBoZWFkZXIgKyBt
YXhpbXVtIHBhZGRpbmcuCi0gICAgICAgIG1fdGVtcFN0YWNrVG9wICs9IGFyZ3VtZW50Q291bnQg
KyAxICsgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKyAxOwotICAgICAgICB1cGRh
dGVUZW1wU3RhY2tIZWlnaHQoKTsKLSAgICAgICAgbV90ZW1wU3RhY2tUb3AgLT0gYXJndW1lbnRD
b3VudCArIDEgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyArIDE7Ci0gICAgfQot
Ci0gICAgdW5zaWduZWQgbV9udW1iZXJPZkxvY2FsczsKLSAgICB1bnNpZ25lZCBtX3RlbXBTdGFj
a1RvcCB7IDAgfTsKLSAgICB1bnNpZ25lZCBtX3RlbXBTdGFja0hlaWdodCB7IDAgfTsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQotCi0j
ZW5kaWYgLy8gV0FTTUZ1bmN0aW9uU3ludGF4Q2hlY2tlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dBU01Nb2R1bGVQYXJzZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA4Y2UzNWY0ODNlYWI3MWE1ODVjZjJkZTE0OTYyNmUzNGZiNDczNDgxLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dBU01Nb2R1bGVQYXJzZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzc3ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV0FTTU1vZHVsZVBhcnNlci5oIgotCi0jaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQotCi0jaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgotI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJKU1dBU01Nb2R1bGUuaCIKLSNpbmNsdWRlICJTdHJv
bmdJbmxpbmVzLmgiCi0jaW5jbHVkZSAiV0FTTUNvbnN0YW50cy5oIgotI2luY2x1ZGUgIldBU01G
dW5jdGlvblBhcnNlci5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLSNkZWZpbmUg
RkFJTF9XSVRIX01FU1NBR0UoZXJyb3JNZXNzYWdlKSBkbyB7IG1fZXJyb3JNZXNzYWdlID0gZXJy
b3JNZXNzYWdlOyByZXR1cm47IH0gd2hpbGUgKDApCi0jZGVmaW5lIFJFQURfVUlOVDMyX09SX0ZB
SUwocmVzdWx0LCBlcnJvck1lc3NhZ2UpIGRvIHsgaWYgKCFtX3JlYWRlci5yZWFkVUludDMyKHJl
c3VsdCkpIEZBSUxfV0lUSF9NRVNTQUdFKGVycm9yTWVzc2FnZSk7IH0gd2hpbGUgKDApCi0jZGVm
aW5lIFJFQURfRkxPQVRfT1JfRkFJTChyZXN1bHQsIGVycm9yTWVzc2FnZSkgZG8geyBpZiAoIW1f
cmVhZGVyLnJlYWRGbG9hdChyZXN1bHQpKSBGQUlMX1dJVEhfTUVTU0FHRShlcnJvck1lc3NhZ2Up
OyB9IHdoaWxlICgwKQotI2RlZmluZSBSRUFEX0RPVUJMRV9PUl9GQUlMKHJlc3VsdCwgZXJyb3JN
ZXNzYWdlKSBkbyB7IGlmICghbV9yZWFkZXIucmVhZERvdWJsZShyZXN1bHQpKSBGQUlMX1dJVEhf
TUVTU0FHRShlcnJvck1lc3NhZ2UpOyB9IHdoaWxlICgwKQotI2RlZmluZSBSRUFEX0NPTVBBQ1Rf
VUlOVDMyX09SX0ZBSUwocmVzdWx0LCBlcnJvck1lc3NhZ2UpIGRvIHsgaWYgKCFtX3JlYWRlci5y
ZWFkQ29tcGFjdFVJbnQzMihyZXN1bHQpKSBGQUlMX1dJVEhfTUVTU0FHRShlcnJvck1lc3NhZ2Up
OyB9IHdoaWxlICgwKQotI2RlZmluZSBSRUFEX1NUUklOR19PUl9GQUlMKHJlc3VsdCwgZXJyb3JN
ZXNzYWdlKSBkbyB7IGlmICghbV9yZWFkZXIucmVhZFN0cmluZyhyZXN1bHQpKSBGQUlMX1dJVEhf
TUVTU0FHRShlcnJvck1lc3NhZ2UpOyB9IHdoaWxlICgwKQotI2RlZmluZSBSRUFEX1RZUEVfT1Jf
RkFJTChyZXN1bHQsIGVycm9yTWVzc2FnZSkgZG8geyBpZiAoIW1fcmVhZGVyLnJlYWRUeXBlKHJl
c3VsdCkpIEZBSUxfV0lUSF9NRVNTQUdFKGVycm9yTWVzc2FnZSk7IH0gd2hpbGUgKDApCi0jZGVm
aW5lIFJFQURfRVhQUkVTU0lPTl9UWVBFX09SX0ZBSUwocmVzdWx0LCBlcnJvck1lc3NhZ2UpIGRv
IHsgaWYgKCFtX3JlYWRlci5yZWFkRXhwcmVzc2lvblR5cGUocmVzdWx0KSkgRkFJTF9XSVRIX01F
U1NBR0UoZXJyb3JNZXNzYWdlKTsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgUkVBRF9FWFBPUlRfRk9S
TUFUX09SX0ZBSUwocmVzdWx0LCBlcnJvck1lc3NhZ2UpIGRvIHsgaWYgKCFtX3JlYWRlci5yZWFk
RXhwb3J0Rm9ybWF0KHJlc3VsdCkpIEZBSUxfV0lUSF9NRVNTQUdFKGVycm9yTWVzc2FnZSk7IH0g
d2hpbGUgKDApCi0jZGVmaW5lIEZBSUxfSUZfRkFMU0UoY29uZGl0aW9uLCBlcnJvck1lc3NhZ2Up
IGRvIHsgaWYgKCEoY29uZGl0aW9uKSkgRkFJTF9XSVRIX01FU1NBR0UoZXJyb3JNZXNzYWdlKTsg
fSB3aGlsZSAoMCkKLSNkZWZpbmUgUFJPUEFHQVRFX0VSUk9SKCkgZG8geyBpZiAoIW1fZXJyb3JN
ZXNzYWdlLmlzTnVsbCgpKSByZXR1cm47IH0gd2hpbGUgKDApCi0KLW5hbWVzcGFjZSBKU0Mgewot
Ci1XQVNNTW9kdWxlUGFyc2VyOjpXQVNNTW9kdWxlUGFyc2VyKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBKU09iamVjdCogaW1w
b3J0cywgSlNBcnJheUJ1ZmZlciogYXJyYXlCdWZmZXIpCi0gICAgOiBtX3ZtKHZtKQotICAgICwg
bV9nbG9iYWxPYmplY3Qodm0sIGdsb2JhbE9iamVjdCkKLSAgICAsIG1fc291cmNlKHNvdXJjZSkK
LSAgICAsIG1faW1wb3J0cyh2bSwgaW1wb3J0cykKLSAgICAsIG1fcmVhZGVyKHN0YXRpY19jYXN0
PFdlYkFzc2VtYmx5U291cmNlUHJvdmlkZXIqPihzb3VyY2UucHJvdmlkZXIoKSktPmRhdGEoKSkK
LSAgICAsIG1fbW9kdWxlKHZtLCBKU1dBU01Nb2R1bGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LT53YXNtTW9kdWxlU3RydWN0dXJlKCksIGFycmF5QnVmZmVyKSkKLXsKLX0KLQotSlNXQVNNTW9k
dWxlKiBXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZShFeGVjU3RhdGUqIGV4ZWMsIFN0cmluZyYgZXJy
b3JNZXNzYWdlKQotewotICAgIHBhcnNlTW9kdWxlKGV4ZWMpOwotICAgIGlmICghbV9lcnJvck1l
c3NhZ2UuaXNOdWxsKCkpIHsKLSAgICAgICAgZXJyb3JNZXNzYWdlID0gbV9lcnJvck1lc3NhZ2U7
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICByZXR1cm4gbV9tb2R1bGUuZ2V0
KCk7Ci19Ci0KLXZvaWQgV0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VNb2R1bGUoRXhlY1N0YXRlKiBl
eGVjKQotewotICAgIHVpbnQzMl90IG1hZ2ljTnVtYmVyOwotICAgIFJFQURfVUlOVDMyX09SX0ZB
SUwobWFnaWNOdW1iZXIsICJDYW5ub3QgcmVhZCB0aGUgbWFnaWMgbnVtYmVyLiIpOwotICAgIEZB
SUxfSUZfRkFMU0UobWFnaWNOdW1iZXIgPT0gd2FzbU1hZ2ljTnVtYmVyLCAiVGhlIG1hZ2ljIG51
bWJlciBpcyBpbmNvcnJlY3QuIik7Ci0KLSAgICB1aW50MzJfdCBvdXRwdXRTaXplSW5BU01KUzsK
LSAgICBSRUFEX1VJTlQzMl9PUl9GQUlMKG91dHB1dFNpemVJbkFTTUpTLCAiQ2Fubm90IHJlYWQg
dGhlIG91dHB1dCBzaXplIGluIGFzbS5qcyBmb3JtYXQuIik7Ci0KLSAgICBwYXJzZUNvbnN0YW50
UG9vbFNlY3Rpb24oKTsKLSAgICBQUk9QQUdBVEVfRVJST1IoKTsKLSAgICBwYXJzZVNpZ25hdHVy
ZVNlY3Rpb24oKTsKLSAgICBQUk9QQUdBVEVfRVJST1IoKTsKLSAgICBwYXJzZUZ1bmN0aW9uSW1w
b3J0U2VjdGlvbihleGVjKTsKLSAgICBQUk9QQUdBVEVfRVJST1IoKTsKLSAgICBwYXJzZUdsb2Jh
bFNlY3Rpb24oZXhlYyk7Ci0gICAgUFJPUEFHQVRFX0VSUk9SKCk7Ci0gICAgcGFyc2VGdW5jdGlv
bkRlY2xhcmF0aW9uU2VjdGlvbigpOwotICAgIFBST1BBR0FURV9FUlJPUigpOwotICAgIHBhcnNl
RnVuY3Rpb25Qb2ludGVyVGFibGVTZWN0aW9uKCk7Ci0gICAgUFJPUEFHQVRFX0VSUk9SKCk7Ci0g
ICAgcGFyc2VGdW5jdGlvbkRlZmluaXRpb25TZWN0aW9uKCk7Ci0gICAgUFJPUEFHQVRFX0VSUk9S
KCk7Ci0gICAgcGFyc2VFeHBvcnRTZWN0aW9uKCk7Ci0gICAgUFJPUEFHQVRFX0VSUk9SKCk7Ci0K
LSAgICBGQUlMX0lGX0ZBTFNFKCFtX21vZHVsZS0+YXJyYXlCdWZmZXIoKSB8fCBtX21vZHVsZS0+
YXJyYXlCdWZmZXIoKS0+aW1wbCgpLT5ieXRlTGVuZ3RoKCkgPCAoMXUgPDwgMzEpLCAiVGhlIEFy
cmF5QnVmZmVyJ3MgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIDJeMzEuIik7Ci19Ci0KLXZvaWQg
V0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VDb25zdGFudFBvb2xTZWN0aW9uKCkKLXsKLSAgICB1aW50
MzJfdCBudW1iZXJPZkkzMkNvbnN0YW50czsKLSAgICB1aW50MzJfdCBudW1iZXJPZkYzMkNvbnN0
YW50czsKLSAgICB1aW50MzJfdCBudW1iZXJPZkY2NENvbnN0YW50czsKLSAgICBSRUFEX0NPTVBB
Q1RfVUlOVDMyX09SX0ZBSUwobnVtYmVyT2ZJMzJDb25zdGFudHMsICJDYW5ub3QgcmVhZCB0aGUg
bnVtYmVyIG9mIGludDMyIGNvbnN0YW50cy4iKTsKLSAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09S
X0ZBSUwobnVtYmVyT2ZGMzJDb25zdGFudHMsICJDYW5ub3QgcmVhZCB0aGUgbnVtYmVyIG9mIGZs
b2F0MzIgY29uc3RhbnRzLiIpOwotICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChudW1i
ZXJPZkY2NENvbnN0YW50cywgIkNhbm5vdCByZWFkIHRoZSBudW1iZXIgb2YgZmxvYXQ2NCBjb25z
dGFudHMuIik7Ci0gICAgbV9tb2R1bGUtPmkzMkNvbnN0YW50cygpLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkobnVtYmVyT2ZJMzJDb25zdGFudHMpOwotICAgIG1fbW9kdWxlLT5mMzJDb25zdGFudHMo
KS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG51bWJlck9mRjMyQ29uc3RhbnRzKTsKLSAgICBtX21v
ZHVsZS0+ZjY0Q29uc3RhbnRzKCkucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1iZXJPZkY2NENv
bnN0YW50cyk7Ci0KLSAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZJMzJDb25z
dGFudHM7ICsraSkgewotICAgICAgICB1aW50MzJfdCBjb25zdGFudDsKLSAgICAgICAgUkVBRF9D
T01QQUNUX1VJTlQzMl9PUl9GQUlMKGNvbnN0YW50LCAiQ2Fubm90IHJlYWQgYW4gaW50MzIgY29u
c3RhbnQuIik7Ci0gICAgICAgIG1fbW9kdWxlLT5pMzJDb25zdGFudHMoKS51bmNoZWNrZWRBcHBl
bmQoY29uc3RhbnQpOwotICAgIH0KLSAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVy
T2ZGMzJDb25zdGFudHM7ICsraSkgewotICAgICAgICBmbG9hdCBjb25zdGFudDsKLSAgICAgICAg
UkVBRF9GTE9BVF9PUl9GQUlMKGNvbnN0YW50LCAiQ2Fubm90IHJlYWQgYSBmbG9hdDMyIGNvbnN0
YW50LiIpOwotICAgICAgICBtX21vZHVsZS0+ZjMyQ29uc3RhbnRzKCkudW5jaGVja2VkQXBwZW5k
KGNvbnN0YW50KTsKLSAgICB9Ci0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9m
RjY0Q29uc3RhbnRzOyArK2kpIHsKLSAgICAgICAgZG91YmxlIGNvbnN0YW50OwotICAgICAgICBS
RUFEX0RPVUJMRV9PUl9GQUlMKGNvbnN0YW50LCAiQ2Fubm90IHJlYWQgYSBmbG9hdDY0IGNvbnN0
YW50LiIpOwotICAgICAgICBtX21vZHVsZS0+ZjY0Q29uc3RhbnRzKCkudW5jaGVja2VkQXBwZW5k
KGNvbnN0YW50KTsKLSAgICB9Ci19Ci0KLXZvaWQgV0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VTaWdu
YXR1cmVTZWN0aW9uKCkKLXsKLSAgICB1aW50MzJfdCBudW1iZXJPZlNpZ25hdHVyZXM7Ci0gICAg
UkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKG51bWJlck9mU2lnbmF0dXJlcywgIkNhbm5vdCBy
ZWFkIHRoZSBudW1iZXIgb2Ygc2lnbmF0dXJlcy4iKTsKLSAgICBtX21vZHVsZS0+c2lnbmF0dXJl
cygpLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobnVtYmVyT2ZTaWduYXR1cmVzKTsKLSAgICBmb3Ig
KHVpbnQzMl90IHNpZ25hdHVyZUluZGV4ID0gMDsgc2lnbmF0dXJlSW5kZXggPCBudW1iZXJPZlNp
Z25hdHVyZXM7ICsrc2lnbmF0dXJlSW5kZXgpIHsKLSAgICAgICAgV0FTTVNpZ25hdHVyZSBzaWdu
YXR1cmU7Ci0gICAgICAgIFJFQURfRVhQUkVTU0lPTl9UWVBFX09SX0ZBSUwoc2lnbmF0dXJlLnJl
dHVyblR5cGUsICJDYW5ub3QgcmVhZCB0aGUgcmV0dXJuIHR5cGUuIik7Ci0gICAgICAgIHVpbnQz
Ml90IGFyZ3VtZW50Q291bnQ7Ci0gICAgICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChh
cmd1bWVudENvdW50LCAiQ2Fubm90IHJlYWQgdGhlIG51bWJlciBvZiBhcmd1bWVudHMuIik7Ci0g
ICAgICAgIHNpZ25hdHVyZS5hcmd1bWVudHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShhcmd1bWVu
dENvdW50KTsKLSAgICAgICAgZm9yICh1aW50MzJfdCBhcmd1bWVudEluZGV4ID0gMDsgYXJndW1l
bnRJbmRleCA8IGFyZ3VtZW50Q291bnQ7ICsrYXJndW1lbnRJbmRleCkgewotICAgICAgICAgICAg
V0FTTVR5cGUgdHlwZTsKLSAgICAgICAgICAgIFJFQURfVFlQRV9PUl9GQUlMKHR5cGUsICJDYW5u
b3QgcmVhZCB0aGUgdHlwZSBvZiBhbiBhcmd1bWVudC4iKTsKLSAgICAgICAgICAgIHNpZ25hdHVy
ZS5hcmd1bWVudHMudW5jaGVja2VkQXBwZW5kKHR5cGUpOwotICAgICAgICB9Ci0gICAgICAgIG1f
bW9kdWxlLT5zaWduYXR1cmVzKCkudW5jaGVja2VkQXBwZW5kKHNpZ25hdHVyZSk7Ci0gICAgfQot
fQotCi12b2lkIFdBU01Nb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25JbXBvcnRTZWN0aW9uKEV4
ZWNTdGF0ZSogZXhlYykKLXsKLSAgICB1aW50MzJfdCBudW1iZXJPZkZ1bmN0aW9uSW1wb3J0czsK
LSAgICB1aW50MzJfdCBudW1iZXJPZkZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJlczsKLSAgICBSRUFE
X0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwobnVtYmVyT2ZGdW5jdGlvbkltcG9ydHMsICJDYW5ub3Qg
cmVhZCB0aGUgbnVtYmVyIG9mIGZ1bmN0aW9uIGltcG9ydHMuIik7Ci0gICAgUkVBRF9DT01QQUNU
X1VJTlQzMl9PUl9GQUlMKG51bWJlck9mRnVuY3Rpb25JbXBvcnRTaWduYXR1cmVzLCAiQ2Fubm90
IHJlYWQgdGhlIG51bWJlciBvZiBmdW5jdGlvbiBpbXBvcnQgc2lnbmF0dXJlcy4iKTsKLSAgICBt
X21vZHVsZS0+ZnVuY3Rpb25JbXBvcnRzKCkucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1iZXJP
ZkZ1bmN0aW9uSW1wb3J0cyk7Ci0gICAgbV9tb2R1bGUtPmZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJl
cygpLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobnVtYmVyT2ZGdW5jdGlvbkltcG9ydFNpZ25hdHVy
ZXMpOwotICAgIG1fbW9kdWxlLT5pbXBvcnRlZEZ1bmN0aW9ucygpLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkobnVtYmVyT2ZGdW5jdGlvbkltcG9ydHMpOwotCi0gICAgZm9yICh1aW50MzJfdCBmdW5j
dGlvbkltcG9ydEluZGV4ID0gMDsgZnVuY3Rpb25JbXBvcnRJbmRleCA8IG51bWJlck9mRnVuY3Rp
b25JbXBvcnRzOyArK2Z1bmN0aW9uSW1wb3J0SW5kZXgpIHsKLSAgICAgICAgV0FTTUZ1bmN0aW9u
SW1wb3J0IGZ1bmN0aW9uSW1wb3J0OwotICAgICAgICBSRUFEX1NUUklOR19PUl9GQUlMKGZ1bmN0
aW9uSW1wb3J0LmZ1bmN0aW9uTmFtZSwgIkNhbm5vdCByZWFkIHRoZSBmdW5jdGlvbiBpbXBvcnQg
bmFtZS4iKTsKLSAgICAgICAgbV9tb2R1bGUtPmZ1bmN0aW9uSW1wb3J0cygpLnVuY2hlY2tlZEFw
cGVuZChmdW5jdGlvbkltcG9ydCk7Ci0KLSAgICAgICAgdWludDMyX3QgbnVtYmVyT2ZTaWduYXR1
cmVzOwotICAgICAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwobnVtYmVyT2ZTaWduYXR1
cmVzLCAiQ2Fubm90IHJlYWQgdGhlIG51bWJlciBvZiBzaWduYXR1cmVzLiIpOwotICAgICAgICBG
QUlMX0lGX0ZBTFNFKG51bWJlck9mU2lnbmF0dXJlcyA8PSBudW1iZXJPZkZ1bmN0aW9uSW1wb3J0
U2lnbmF0dXJlcyAtIG1fbW9kdWxlLT5mdW5jdGlvbkltcG9ydFNpZ25hdHVyZXMoKS5zaXplKCks
ICJUaGUgbnVtYmVyIG9mIHNpZ25hdHVyZXMgaXMgaW5jb3JyZWN0LiIpOwotCi0gICAgICAgIGZv
ciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZlNpZ25hdHVyZXM7ICsraSkgewotICAgICAg
ICAgICAgV0FTTUZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJlIGZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJl
OwotICAgICAgICAgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKGZ1bmN0aW9uSW1wb3J0
U2lnbmF0dXJlLnNpZ25hdHVyZUluZGV4LCAiQ2Fubm90IHJlYWQgdGhlIHNpZ25hdHVyZSBpbmRl
eC4iKTsKLSAgICAgICAgICAgIEZBSUxfSUZfRkFMU0UoZnVuY3Rpb25JbXBvcnRTaWduYXR1cmUu
c2lnbmF0dXJlSW5kZXggPCBtX21vZHVsZS0+c2lnbmF0dXJlcygpLnNpemUoKSwgIlRoZSBzaWdu
YXR1cmUgaW5kZXggaXMgaW5jb3JyZWN0LiIpOwotICAgICAgICAgICAgZnVuY3Rpb25JbXBvcnRT
aWduYXR1cmUuZnVuY3Rpb25JbXBvcnRJbmRleCA9IGZ1bmN0aW9uSW1wb3J0SW5kZXg7Ci0gICAg
ICAgICAgICBtX21vZHVsZS0+ZnVuY3Rpb25JbXBvcnRTaWduYXR1cmVzKCkudW5jaGVja2VkQXBw
ZW5kKGZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJlKTsKLSAgICAgICAgfQotCi0gICAgICAgIEpTVmFs
dWUgdmFsdWU7Ci0gICAgICAgIGdldEltcG9ydGVkVmFsdWUoZXhlYywgZnVuY3Rpb25JbXBvcnQu
ZnVuY3Rpb25OYW1lLCB2YWx1ZSk7Ci0gICAgICAgIFBST1BBR0FURV9FUlJPUigpOwotICAgICAg
ICBGQUlMX0lGX0ZBTFNFKHZhbHVlLmlzRnVuY3Rpb24oKSwgIlwiIiArIGZ1bmN0aW9uSW1wb3J0
LmZ1bmN0aW9uTmFtZSArICJcIiBpcyBub3QgYSBmdW5jdGlvbi4iKTsKLSAgICAgICAgSlNGdW5j
dGlvbiogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KHZhbHVlLmFzQ2VsbCgpKTsKLSAg
ICAgICAgbV9tb2R1bGUtPmltcG9ydGVkRnVuY3Rpb25zKCkudW5jaGVja2VkQXBwZW5kKFdyaXRl
QmFycmllcjxKU0Z1bmN0aW9uPihtX3ZtLCBtX21vZHVsZS5nZXQoKSwgZnVuY3Rpb24pKTsKLSAg
ICB9Ci0gICAgRkFJTF9JRl9GQUxTRShtX21vZHVsZS0+ZnVuY3Rpb25JbXBvcnRTaWduYXR1cmVz
KCkuc2l6ZSgpID09IG51bWJlck9mRnVuY3Rpb25JbXBvcnRTaWduYXR1cmVzLCAiVGhlIG51bWJl
ciBvZiBmdW5jdGlvbiBpbXBvcnQgc2lnbmF0dXJlcyBpcyBpbmNvcnJlY3QuIik7Ci19Ci0KLXZv
aWQgV0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VHbG9iYWxTZWN0aW9uKEV4ZWNTdGF0ZSogZXhlYykK
LXsKLSAgICB1aW50MzJfdCBudW1iZXJPZkludGVybmFsSTMyR2xvYmFsVmFyaWFibGVzOwotICAg
IHVpbnQzMl90IG51bWJlck9mSW50ZXJuYWxGMzJHbG9iYWxWYXJpYWJsZXM7Ci0gICAgdWludDMy
X3QgbnVtYmVyT2ZJbnRlcm5hbEY2NEdsb2JhbFZhcmlhYmxlczsKLSAgICB1aW50MzJfdCBudW1i
ZXJPZkltcG9ydGVkSTMyR2xvYmFsVmFyaWFibGVzOwotICAgIHVpbnQzMl90IG51bWJlck9mSW1w
b3J0ZWRGMzJHbG9iYWxWYXJpYWJsZXM7Ci0gICAgdWludDMyX3QgbnVtYmVyT2ZJbXBvcnRlZEY2
NEdsb2JhbFZhcmlhYmxlczsKLSAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwobnVtYmVy
T2ZJbnRlcm5hbEkzMkdsb2JhbFZhcmlhYmxlcywgIkNhbm5vdCByZWFkIHRoZSBudW1iZXIgb2Yg
aW50ZXJuYWwgaW50MzIgZ2xvYmFsIHZhcmlhYmxlcy4iKTsKLSAgICBSRUFEX0NPTVBBQ1RfVUlO
VDMyX09SX0ZBSUwobnVtYmVyT2ZJbnRlcm5hbEYzMkdsb2JhbFZhcmlhYmxlcywgIkNhbm5vdCBy
ZWFkIHRoZSBudW1iZXIgb2YgaW50ZXJuYWwgZmxvYXQzMiBnbG9iYWwgdmFyaWFibGVzLiIpOwot
ICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChudW1iZXJPZkludGVybmFsRjY0R2xvYmFs
VmFyaWFibGVzLCAiQ2Fubm90IHJlYWQgdGhlIG51bWJlciBvZiBpbnRlcm5hbCBmbG9hdDY0IGds
b2JhbCB2YXJpYWJsZXMuIik7Ci0gICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKG51bWJl
ck9mSW1wb3J0ZWRJMzJHbG9iYWxWYXJpYWJsZXMsICJDYW5ub3QgcmVhZCB0aGUgbnVtYmVyIG9m
IGltcG9ydGVkIGludDMyIGdsb2JhbCB2YXJpYWJsZXMuIik7Ci0gICAgUkVBRF9DT01QQUNUX1VJ
TlQzMl9PUl9GQUlMKG51bWJlck9mSW1wb3J0ZWRGMzJHbG9iYWxWYXJpYWJsZXMsICJDYW5ub3Qg
cmVhZCB0aGUgbnVtYmVyIG9mIGltcG9ydGVkIGZsb2F0MzIgZ2xvYmFsIHZhcmlhYmxlcy4iKTsK
LSAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwobnVtYmVyT2ZJbXBvcnRlZEY2NEdsb2Jh
bFZhcmlhYmxlcywgIkNhbm5vdCByZWFkIHRoZSBudW1iZXIgb2YgaW1wb3J0ZWQgZmxvYXQ2NCBn
bG9iYWwgdmFyaWFibGVzLiIpOwotICAgIHVpbnQzMl90IG51bWJlck9mR2xvYmFsVmFyaWFibGVz
ID0gbnVtYmVyT2ZJbnRlcm5hbEkzMkdsb2JhbFZhcmlhYmxlcyArIG51bWJlck9mSW50ZXJuYWxG
MzJHbG9iYWxWYXJpYWJsZXMgKyBudW1iZXJPZkludGVybmFsRjY0R2xvYmFsVmFyaWFibGVzICsK
LSAgICAgICAgbnVtYmVyT2ZJbXBvcnRlZEkzMkdsb2JhbFZhcmlhYmxlcyArIG51bWJlck9mSW1w
b3J0ZWRGMzJHbG9iYWxWYXJpYWJsZXMgKyBudW1iZXJPZkltcG9ydGVkRjY0R2xvYmFsVmFyaWFi
bGVzOwotCi0gICAgVmVjdG9yPFdBU01UeXBlPiYgZ2xvYmFsVmFyaWFibGVUeXBlcyA9IG1fbW9k
dWxlLT5nbG9iYWxWYXJpYWJsZVR5cGVzKCk7Ci0gICAgZ2xvYmFsVmFyaWFibGVUeXBlcy5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KG51bWJlck9mR2xvYmFsVmFyaWFibGVzKTsKLSAgICBWZWN0b3I8
SlNXQVNNTW9kdWxlOjpHbG9iYWxWYXJpYWJsZT4mIGdsb2JhbFZhcmlhYmxlcyA9IG1fbW9kdWxl
LT5nbG9iYWxWYXJpYWJsZXMoKTsKLSAgICBnbG9iYWxWYXJpYWJsZXMucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShudW1iZXJPZkdsb2JhbFZhcmlhYmxlcyk7Ci0gICAgZm9yICh1aW50MzJfdCBpID0g
MDsgaSA8IG51bWJlck9mSW50ZXJuYWxJMzJHbG9iYWxWYXJpYWJsZXM7ICsraSkgewotICAgICAg
ICBnbG9iYWxWYXJpYWJsZVR5cGVzLnVuY2hlY2tlZEFwcGVuZChXQVNNVHlwZTo6STMyKTsKLSAg
ICAgICAgZ2xvYmFsVmFyaWFibGVzLnVuY2hlY2tlZEFwcGVuZChKU1dBU01Nb2R1bGU6Okdsb2Jh
bFZhcmlhYmxlKDApKTsKLSAgICB9Ci0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJl
ck9mSW50ZXJuYWxGMzJHbG9iYWxWYXJpYWJsZXM7ICsraSkgewotICAgICAgICBnbG9iYWxWYXJp
YWJsZVR5cGVzLnVuY2hlY2tlZEFwcGVuZChXQVNNVHlwZTo6RjMyKTsKLSAgICAgICAgZ2xvYmFs
VmFyaWFibGVzLnVuY2hlY2tlZEFwcGVuZChKU1dBU01Nb2R1bGU6Okdsb2JhbFZhcmlhYmxlKDAu
MGYpKTsKLSAgICB9Ci0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9mSW50ZXJu
YWxGNjRHbG9iYWxWYXJpYWJsZXM7ICsraSkgewotICAgICAgICBnbG9iYWxWYXJpYWJsZVR5cGVz
LnVuY2hlY2tlZEFwcGVuZChXQVNNVHlwZTo6RjY0KTsKLSAgICAgICAgZ2xvYmFsVmFyaWFibGVz
LnVuY2hlY2tlZEFwcGVuZChKU1dBU01Nb2R1bGU6Okdsb2JhbFZhcmlhYmxlKDAuMCkpOwotICAg
IH0KLSAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZJbXBvcnRlZEkzMkdsb2Jh
bFZhcmlhYmxlczsgKytpKSB7Ci0gICAgICAgIFN0cmluZyBpbXBvcnROYW1lOwotICAgICAgICBS
RUFEX1NUUklOR19PUl9GQUlMKGltcG9ydE5hbWUsICJDYW5ub3QgcmVhZCB0aGUgaW1wb3J0IG5h
bWUgb2YgYW4gaW50MzIgZ2xvYmFsIHZhcmlhYmxlLiIpOwotICAgICAgICBnbG9iYWxWYXJpYWJs
ZVR5cGVzLnVuY2hlY2tlZEFwcGVuZChXQVNNVHlwZTo6STMyKTsKLSAgICAgICAgSlNWYWx1ZSB2
YWx1ZTsKLSAgICAgICAgZ2V0SW1wb3J0ZWRWYWx1ZShleGVjLCBpbXBvcnROYW1lLCB2YWx1ZSk7
Ci0gICAgICAgIFBST1BBR0FURV9FUlJPUigpOwotICAgICAgICBGQUlMX0lGX0ZBTFNFKHZhbHVl
LmlzUHJpbWl0aXZlKCkgJiYgIXZhbHVlLmlzU3ltYm9sKCksICJcIiIgKyBpbXBvcnROYW1lICsg
IlwiIGlzIG5vdCBhIHByaW1pdGl2ZSBvciBpcyBhIFN5bWJvbC4iKTsKLSAgICAgICAgZ2xvYmFs
VmFyaWFibGVzLnVuY2hlY2tlZEFwcGVuZChKU1dBU01Nb2R1bGU6Okdsb2JhbFZhcmlhYmxlKHZh
bHVlLnRvSW50MzIoZXhlYykpKTsKLSAgICB9Ci0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8
IG51bWJlck9mSW1wb3J0ZWRGMzJHbG9iYWxWYXJpYWJsZXM7ICsraSkgewotICAgICAgICBTdHJp
bmcgaW1wb3J0TmFtZTsKLSAgICAgICAgUkVBRF9TVFJJTkdfT1JfRkFJTChpbXBvcnROYW1lLCAi
Q2Fubm90IHJlYWQgdGhlIGltcG9ydCBuYW1lIG9mIGEgZmxvYXQzMiBnbG9iYWwgdmFyaWFibGUu
Iik7Ci0gICAgICAgIGdsb2JhbFZhcmlhYmxlVHlwZXMudW5jaGVja2VkQXBwZW5kKFdBU01UeXBl
OjpGMzIpOwotICAgICAgICBKU1ZhbHVlIHZhbHVlOwotICAgICAgICBnZXRJbXBvcnRlZFZhbHVl
KGV4ZWMsIGltcG9ydE5hbWUsIHZhbHVlKTsKLSAgICAgICAgUFJPUEFHQVRFX0VSUk9SKCk7Ci0g
ICAgICAgIEZBSUxfSUZfRkFMU0UodmFsdWUuaXNQcmltaXRpdmUoKSAmJiAhdmFsdWUuaXNTeW1i
b2woKSwgIlwiIiArIGltcG9ydE5hbWUgKyAiXCIgaXMgbm90IGEgcHJpbWl0aXZlIG9yIGlzIGEg
U3ltYm9sLiIpOwotICAgICAgICBnbG9iYWxWYXJpYWJsZXMudW5jaGVja2VkQXBwZW5kKEpTV0FT
TU1vZHVsZTo6R2xvYmFsVmFyaWFibGUoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbHVlLnRvTnVtYmVy
KGV4ZWMpKSkpOwotICAgIH0KLSAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZJ
bXBvcnRlZEY2NEdsb2JhbFZhcmlhYmxlczsgKytpKSB7Ci0gICAgICAgIFN0cmluZyBpbXBvcnRO
YW1lOwotICAgICAgICBSRUFEX1NUUklOR19PUl9GQUlMKGltcG9ydE5hbWUsICJDYW5ub3QgcmVh
ZCB0aGUgaW1wb3J0IG5hbWUgb2YgYSBmbG9hdDY0IGdsb2JhbCB2YXJpYWJsZS4iKTsKLSAgICAg
ICAgZ2xvYmFsVmFyaWFibGVUeXBlcy51bmNoZWNrZWRBcHBlbmQoV0FTTVR5cGU6OkY2NCk7Ci0g
ICAgICAgIEpTVmFsdWUgdmFsdWU7Ci0gICAgICAgIGdldEltcG9ydGVkVmFsdWUoZXhlYywgaW1w
b3J0TmFtZSwgdmFsdWUpOwotICAgICAgICBQUk9QQUdBVEVfRVJST1IoKTsKLSAgICAgICAgRkFJ
TF9JRl9GQUxTRSh2YWx1ZS5pc1ByaW1pdGl2ZSgpICYmICF2YWx1ZS5pc1N5bWJvbCgpLCAiXCIi
ICsgaW1wb3J0TmFtZSArICJcIiBpcyBub3QgYSBwcmltaXRpdmUgb3IgaXMgYSBTeW1ib2wuIik7
Ci0gICAgICAgIGdsb2JhbFZhcmlhYmxlcy51bmNoZWNrZWRBcHBlbmQoSlNXQVNNTW9kdWxlOjpH
bG9iYWxWYXJpYWJsZSh2YWx1ZS50b051bWJlcihleGVjKSkpOwotICAgIH0KLX0KLQotdm9pZCBX
QVNNTW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb25TZWN0aW9uKCkKLXsKLSAg
ICB1aW50MzJfdCBudW1iZXJPZkZ1bmN0aW9uRGVjbGFyYXRpb25zOwotICAgIFJFQURfQ09NUEFD
VF9VSU5UMzJfT1JfRkFJTChudW1iZXJPZkZ1bmN0aW9uRGVjbGFyYXRpb25zLCAiQ2Fubm90IHJl
YWQgdGhlIG51bWJlciBvZiBmdW5jdGlvbiBkZWNsYXJhdGlvbnMuIik7Ci0gICAgbV9tb2R1bGUt
PmZ1bmN0aW9uRGVjbGFyYXRpb25zKCkucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1iZXJPZkZ1
bmN0aW9uRGVjbGFyYXRpb25zKTsKLSAgICBtX21vZHVsZS0+ZnVuY3Rpb25zKCkucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShudW1iZXJPZkZ1bmN0aW9uRGVjbGFyYXRpb25zKTsKLSAgICBtX21vZHVs
ZS0+ZnVuY3Rpb25TdGFydE9mZnNldHNJblNvdXJjZSgpLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
bnVtYmVyT2ZGdW5jdGlvbkRlY2xhcmF0aW9ucyk7Ci0gICAgbV9tb2R1bGUtPmZ1bmN0aW9uU3Rh
Y2tIZWlnaHRzKCkucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1iZXJPZkZ1bmN0aW9uRGVjbGFy
YXRpb25zKTsKLSAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZGdW5jdGlvbkRl
Y2xhcmF0aW9uczsgKytpKSB7Ci0gICAgICAgIFdBU01GdW5jdGlvbkRlY2xhcmF0aW9uIGZ1bmN0
aW9uRGVjbGFyYXRpb247Ci0gICAgICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChmdW5j
dGlvbkRlY2xhcmF0aW9uLnNpZ25hdHVyZUluZGV4LCAiQ2Fubm90IHJlYWQgdGhlIHNpZ25hdHVy
ZSBpbmRleC4iKTsKLSAgICAgICAgRkFJTF9JRl9GQUxTRShmdW5jdGlvbkRlY2xhcmF0aW9uLnNp
Z25hdHVyZUluZGV4IDwgbV9tb2R1bGUtPnNpZ25hdHVyZXMoKS5zaXplKCksICJUaGUgc2lnbmF0
dXJlIGluZGV4IGlzIGluY29ycmVjdC4iKTsKLSAgICAgICAgbV9tb2R1bGUtPmZ1bmN0aW9uRGVj
bGFyYXRpb25zKCkudW5jaGVja2VkQXBwZW5kKGZ1bmN0aW9uRGVjbGFyYXRpb24pOwotICAgIH0K
LX0KLQotdm9pZCBXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uUG9pbnRlclRhYmxlU2Vj
dGlvbigpCi17Ci0gICAgdWludDMyX3QgbnVtYmVyT2ZGdW5jdGlvblBvaW50ZXJUYWJsZXM7Ci0g
ICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKG51bWJlck9mRnVuY3Rpb25Qb2ludGVyVGFi
bGVzLCAiQ2Fubm90IHJlYWQgdGhlIG51bWJlciBvZiBmdW5jdGlvbiBwb2ludGVyIHRhYmxlcy4i
KTsKLSAgICBtX21vZHVsZS0+ZnVuY3Rpb25Qb2ludGVyVGFibGVzKCkucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShudW1iZXJPZkZ1bmN0aW9uUG9pbnRlclRhYmxlcyk7Ci0gICAgZm9yICh1aW50MzJf
dCBpID0gMDsgaSA8IG51bWJlck9mRnVuY3Rpb25Qb2ludGVyVGFibGVzOyArK2kpIHsKLSAgICAg
ICAgV0FTTUZ1bmN0aW9uUG9pbnRlclRhYmxlIGZ1bmN0aW9uUG9pbnRlclRhYmxlOwotICAgICAg
ICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwoZnVuY3Rpb25Qb2ludGVyVGFibGUuc2lnbmF0
dXJlSW5kZXgsICJDYW5ub3QgcmVhZCB0aGUgc2lnbmF0dXJlIGluZGV4LiIpOwotICAgICAgICBG
QUlMX0lGX0ZBTFNFKGZ1bmN0aW9uUG9pbnRlclRhYmxlLnNpZ25hdHVyZUluZGV4IDwgbV9tb2R1
bGUtPnNpZ25hdHVyZXMoKS5zaXplKCksICJUaGUgc2lnbmF0dXJlIGluZGV4IGlzIGluY29ycmVj
dC4iKTsKLSAgICAgICAgdWludDMyX3QgbnVtYmVyT2ZGdW5jdGlvbnM7Ci0gICAgICAgIFJFQURf
Q09NUEFDVF9VSU5UMzJfT1JfRkFJTChudW1iZXJPZkZ1bmN0aW9ucywgIkNhbm5vdCByZWFkIHRo
ZSBudW1iZXIgb2YgZnVuY3Rpb25zIG9mIGEgZnVuY3Rpb24gcG9pbnRlciB0YWJsZS4iKTsKLSAg
ICAgICAgRkFJTF9JRl9GQUxTRShoYXNPbmVCaXRTZXQobnVtYmVyT2ZGdW5jdGlvbnMpLCAiVGhl
IG51bWJlciBvZiBmdW5jdGlvbnMgbXVzdCBiZSBhIHBvd2VyIG9mIHR3by4iKTsKLSAgICAgICAg
ZnVuY3Rpb25Qb2ludGVyVGFibGUuZnVuY3Rpb25JbmRpY2VzLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkobnVtYmVyT2ZGdW5jdGlvbnMpOwotICAgICAgICBmdW5jdGlvblBvaW50ZXJUYWJsZS5mdW5j
dGlvbnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1iZXJPZkZ1bmN0aW9ucyk7Ci0gICAgICAg
IGZvciAodWludDMyX3QgaiA9IDA7IGogPCBudW1iZXJPZkZ1bmN0aW9uczsgKytqKSB7Ci0gICAg
ICAgICAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4OwotICAgICAgICAgICAgUkVBRF9DT01QQUNU
X1VJTlQzMl9PUl9GQUlMKGZ1bmN0aW9uSW5kZXgsICJDYW5ub3QgcmVhZCBhIGZ1bmN0aW9uIGlu
ZGV4IG9mIGEgZnVuY3Rpb24gcG9pbnRlciB0YWJsZS4iKTsKLSAgICAgICAgICAgIEZBSUxfSUZf
RkFMU0UoZnVuY3Rpb25JbmRleCA8IG1fbW9kdWxlLT5mdW5jdGlvbkRlY2xhcmF0aW9ucygpLnNp
emUoKSwgIlRoZSBmdW5jdGlvbiBpbmRleCBpcyBpbmNvcnJlY3QuIik7Ci0gICAgICAgICAgICBG
QUlMX0lGX0ZBTFNFKG1fbW9kdWxlLT5mdW5jdGlvbkRlY2xhcmF0aW9ucygpW2Z1bmN0aW9uSW5k
ZXhdLnNpZ25hdHVyZUluZGV4ID09IGZ1bmN0aW9uUG9pbnRlclRhYmxlLnNpZ25hdHVyZUluZGV4
LCAiVGhlIHNpZ25hdHVyZSBvZiB0aGUgZnVuY3Rpb24gZG9lc24ndCBtYXRjaCB0aGF0IG9mIHRo
ZSBmdW5jdGlvbiBwb2ludGVyIHRhYmxlLiIpOwotICAgICAgICAgICAgZnVuY3Rpb25Qb2ludGVy
VGFibGUuZnVuY3Rpb25JbmRpY2VzLnVuY2hlY2tlZEFwcGVuZChmdW5jdGlvbkluZGV4KTsKLSAg
ICAgICAgfQotICAgICAgICBtX21vZHVsZS0+ZnVuY3Rpb25Qb2ludGVyVGFibGVzKCkudW5jaGVj
a2VkQXBwZW5kKGZ1bmN0aW9uUG9pbnRlclRhYmxlKTsKLSAgICB9Ci19Ci0KLXZvaWQgV0FTTU1v
ZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbkRlZmluaXRpb25TZWN0aW9uKCkKLXsKLSAgICBmb3Ig
KHNpemVfdCBmdW5jdGlvbkluZGV4ID0gMDsgZnVuY3Rpb25JbmRleCA8IG1fbW9kdWxlLT5mdW5j
dGlvbkRlY2xhcmF0aW9ucygpLnNpemUoKTsgKytmdW5jdGlvbkluZGV4KSB7Ci0gICAgICAgIHBh
cnNlRnVuY3Rpb25EZWZpbml0aW9uKGZ1bmN0aW9uSW5kZXgpOwotICAgICAgICBQUk9QQUdBVEVf
RVJST1IoKTsKLSAgICB9Ci0KLSAgICBmb3IgKFdBU01GdW5jdGlvblBvaW50ZXJUYWJsZSYgZnVu
Y3Rpb25Qb2ludGVyVGFibGUgOiBtX21vZHVsZS0+ZnVuY3Rpb25Qb2ludGVyVGFibGVzKCkpIHsK
LSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvblBvaW50ZXJUYWJsZS5mdW5j
dGlvbkluZGljZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBmdW5jdGlvblBvaW50ZXJUYWJs
ZS5mdW5jdGlvbnMudW5jaGVja2VkQXBwZW5kKG1fbW9kdWxlLT5mdW5jdGlvbnMoKVtmdW5jdGlv
blBvaW50ZXJUYWJsZS5mdW5jdGlvbkluZGljZXNbaV1dLmdldCgpKTsKLSAgICB9Ci19Ci0KLXZv
aWQgV0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbkRlZmluaXRpb24oc2l6ZV90IGZ1bmN0
aW9uSW5kZXgpCi17Ci0gICAgdW5zaWduZWQgc3RhcnRPZmZzZXRJblNvdXJjZSA9IG1fcmVhZGVy
Lm9mZnNldCgpOwotICAgIHVuc2lnbmVkIGVuZE9mZnNldEluU291cmNlOwotICAgIHVuc2lnbmVk
IHN0YWNrSGVpZ2h0OwotICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7Ci0gICAgaWYgKCFXQVNNRnVu
Y3Rpb25QYXJzZXI6OmNoZWNrU3ludGF4KG1fbW9kdWxlLmdldCgpLCBtX3NvdXJjZSwgZnVuY3Rp
b25JbmRleCwgc3RhcnRPZmZzZXRJblNvdXJjZSwgZW5kT2Zmc2V0SW5Tb3VyY2UsIHN0YWNrSGVp
Z2h0LCBlcnJvck1lc3NhZ2UpKSB7Ci0gICAgICAgIG1fZXJyb3JNZXNzYWdlID0gZXJyb3JNZXNz
YWdlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fcmVhZGVyLnNldE9mZnNldChlbmRP
ZmZzZXRJblNvdXJjZSk7Ci0KLSAgICBXZWJBc3NlbWJseUV4ZWN1dGFibGUqIHdlYkFzc2VtYmx5
RXhlY3V0YWJsZSA9IFdlYkFzc2VtYmx5RXhlY3V0YWJsZTo6Y3JlYXRlKG1fdm0sIG1fc291cmNl
LCBtX21vZHVsZS5nZXQoKSwgZnVuY3Rpb25JbmRleCk7Ci0gICAgSlNGdW5jdGlvbiogZnVuY3Rp
b24gPSBKU0Z1bmN0aW9uOjpjcmVhdGUobV92bSwgd2ViQXNzZW1ibHlFeGVjdXRhYmxlLCBtX2ds
b2JhbE9iamVjdC5nZXQoKSk7Ci0gICAgbV9tb2R1bGUtPmZ1bmN0aW9ucygpLnVuY2hlY2tlZEFw
cGVuZChXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4obV92bSwgbV9tb2R1bGUuZ2V0KCksIGZ1bmN0
aW9uKSk7Ci0gICAgbV9tb2R1bGUtPmZ1bmN0aW9uU3RhcnRPZmZzZXRzSW5Tb3VyY2UoKS51bmNo
ZWNrZWRBcHBlbmQoc3RhcnRPZmZzZXRJblNvdXJjZSk7Ci0gICAgbV9tb2R1bGUtPmZ1bmN0aW9u
U3RhY2tIZWlnaHRzKCkudW5jaGVja2VkQXBwZW5kKHN0YWNrSGVpZ2h0KTsKLX0KLQotdm9pZCBX
QVNNTW9kdWxlUGFyc2VyOjpwYXJzZUV4cG9ydFNlY3Rpb24oKQotewotICAgIFdBU01FeHBvcnRG
b3JtYXQgZXhwb3J0Rm9ybWF0OwotICAgIFJFQURfRVhQT1JUX0ZPUk1BVF9PUl9GQUlMKGV4cG9y
dEZvcm1hdCwgIkNhbm5vdCByZWFkIHRoZSBleHBvcnQgZm9ybWF0LiIpOwotICAgIHN3aXRjaCAo
ZXhwb3J0Rm9ybWF0KSB7Ci0gICAgY2FzZSBXQVNNRXhwb3J0Rm9ybWF0OjpEZWZhdWx0OiB7Ci0g
ICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXg7Ci0gICAgICAgIFJFQURfQ09NUEFDVF9VSU5U
MzJfT1JfRkFJTChmdW5jdGlvbkluZGV4LCAiQ2Fubm90IHJlYWQgdGhlIGZ1bmN0aW9uIGluZGV4
LiIpOwotICAgICAgICBGQUlMX0lGX0ZBTFNFKGZ1bmN0aW9uSW5kZXggPCBtX21vZHVsZS0+ZnVu
Y3Rpb25EZWNsYXJhdGlvbnMoKS5zaXplKCksICJUaGUgZnVuY3Rpb24gaW5kZXggaXMgaW5jb3Jy
ZWN0LiIpOwotICAgICAgICAvLyBGSVhNRTogRXhwb3J0IHRoZSBmdW5jdGlvbi4KLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIGNhc2UgV0FTTUV4cG9ydEZvcm1hdDo6UmVjb3JkOiB7Ci0gICAg
ICAgIHVpbnQzMl90IG51bWJlck9mRXhwb3J0czsKLSAgICAgICAgUkVBRF9DT01QQUNUX1VJTlQz
Ml9PUl9GQUlMKG51bWJlck9mRXhwb3J0cywgIkNhbm5vdCByZWFkIHRoZSBudW1iZXIgb2YgZXhw
b3J0cy4iKTsKLSAgICAgICAgZm9yICh1aW50MzJfdCBleHBvcnRJbmRleCA9IDA7IGV4cG9ydElu
ZGV4IDwgbnVtYmVyT2ZFeHBvcnRzOyArK2V4cG9ydEluZGV4KSB7Ci0gICAgICAgICAgICBTdHJp
bmcgZXhwb3J0TmFtZTsKLSAgICAgICAgICAgIFJFQURfU1RSSU5HX09SX0ZBSUwoZXhwb3J0TmFt
ZSwgIkNhbm5vdCByZWFkIHRoZSBmdW5jdGlvbiBleHBvcnQgbmFtZS4iKTsKLSAgICAgICAgICAg
IHVpbnQzMl90IGZ1bmN0aW9uSW5kZXg7Ci0gICAgICAgICAgICBSRUFEX0NPTVBBQ1RfVUlOVDMy
X09SX0ZBSUwoZnVuY3Rpb25JbmRleCwgIkNhbm5vdCByZWFkIHRoZSBmdW5jdGlvbiBpbmRleC4i
KTsKLSAgICAgICAgICAgIEZBSUxfSUZfRkFMU0UoZnVuY3Rpb25JbmRleCA8IG1fbW9kdWxlLT5m
dW5jdGlvbkRlY2xhcmF0aW9ucygpLnNpemUoKSwgIlRoZSBmdW5jdGlvbiBpbmRleCBpcyBpbmNv
cnJlY3QuIik7Ci0gICAgICAgICAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZtX3ZtLCBleHBvcnROYW1lKTsKLSAgICAgICAgICAgIG1fbW9kdWxlLT5w
dXREaXJlY3QobV92bSwgaWRlbnRpZmllciwgbV9tb2R1bGUtPmZ1bmN0aW9ucygpW2Z1bmN0aW9u
SW5kZXhdLmdldCgpKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotfQotCi12b2lkIFdB
U01Nb2R1bGVQYXJzZXI6OmdldEltcG9ydGVkVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBT
dHJpbmcmIGltcG9ydE5hbWUsIEpTVmFsdWUmIHZhbHVlKQotewotICAgIEZBSUxfSUZfRkFMU0Uo
bV9pbXBvcnRzLCAiQWNjZXNzaW5nIHByb3BlcnR5IG9mIG5vbi1vYmplY3QuIik7Ci0gICAgSWRl
bnRpZmllciBpZGVudGlmaWVyID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmbV92bSwgaW1wb3J0
TmFtZSk7Ci0gICAgUHJvcGVydHlTbG90IHNsb3QobV9pbXBvcnRzLmdldCgpLCBQcm9wZXJ0eVNs
b3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0KTsKLSAgICBpZiAoIW1faW1wb3J0cy0+Z2V0UHJv
cGVydHlTbG90KGV4ZWMsIGlkZW50aWZpZXIsIHNsb3QpKQotICAgICAgICBGQUlMX1dJVEhfTUVT
U0FHRSgiQ2FuJ3QgZmluZCBhIHByb3BlcnR5IG5hbWVkIFwiIiArIGltcG9ydE5hbWUgKyAnIicp
OwotICAgIEZBSUxfSUZfRkFMU0Uoc2xvdC5pc1ZhbHVlKCksICJcIiIgKyBpbXBvcnROYW1lICsg
IlwiIGlzIG5vdCBhIGRhdGEgcHJvcGVydHkuIik7Ci0gICAgLy8gV2Ugb25seSByZXRyaWV2ZSBk
YXRhIHByb3BlcnRpZXMuIFNvLCB0aGlzIGRvZXMgbm90IGNhdXNlIGFueSB1c2VyLW9ic2VydmFi
bGUgZWZmZWN0LgotICAgIHZhbHVlID0gc2xvdC5nZXRWYWx1ZShleGVjLCBpZGVudGlmaWVyKTsK
LX0KLQotSlNXQVNNTW9kdWxlKiBwYXJzZVdlYkFzc2VtYmx5KEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgU291cmNlQ29kZSYgc291cmNlLCBKU09iamVjdCogaW1wb3J0cywgSlNBcnJheUJ1ZmZlciog
YXJyYXlCdWZmZXIsIFN0cmluZyYgZXJyb3JNZXNzYWdlKQotewotICAgIFdBU01Nb2R1bGVQYXJz
ZXIgbW9kdWxlUGFyc2VyKGV4ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwg
c291cmNlLCBpbXBvcnRzLCBhcnJheUJ1ZmZlcik7Ci0gICAgcmV0dXJuIG1vZHVsZVBhcnNlci5w
YXJzZShleGVjLCBlcnJvck1lc3NhZ2UpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2Vu
ZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dBU01Nb2R1bGVQYXJzZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dBU01Nb2R1bGVQYXJzZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTAxN2Jj
MWNlYTY2NzE3ZTc1ZGI2MTVjNzlmNDQ0YTBmMjlmNDM1Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNN
TW9kdWxlUGFyc2VyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXQVNNTW9kdWxlUGFy
c2VyX2gKLSNkZWZpbmUgV0FTTU1vZHVsZVBhcnNlcl9oCi0KLSNpZiBFTkFCTEUoV0VCQVNTRU1C
TFkpCi0KLSNpbmNsdWRlICJTdHJvbmcuaCIKLSNpbmNsdWRlICJXQVNNUmVhZGVyLmgiCi0jaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBF
eGVjU3RhdGU7Ci1jbGFzcyBKU0FycmF5QnVmZmVyOwotY2xhc3MgSlNHbG9iYWxPYmplY3Q7Ci1j
bGFzcyBKU1dBU01Nb2R1bGU7Ci1jbGFzcyBTb3VyY2VDb2RlOwotY2xhc3MgVk07Ci0KLWNsYXNz
IFdBU01Nb2R1bGVQYXJzZXIgewotcHVibGljOgotICAgIFdBU01Nb2R1bGVQYXJzZXIoVk0mLCBK
U0dsb2JhbE9iamVjdCosIGNvbnN0IFNvdXJjZUNvZGUmLCBKU09iamVjdCogaW1wb3J0cywgSlNB
cnJheUJ1ZmZlciopOwotICAgIEpTV0FTTU1vZHVsZSogcGFyc2UoRXhlY1N0YXRlKiwgU3RyaW5n
JiBlcnJvck1lc3NhZ2UpOwotCi1wcml2YXRlOgotICAgIHZvaWQgcGFyc2VNb2R1bGUoRXhlY1N0
YXRlKik7Ci0gICAgdm9pZCBwYXJzZUNvbnN0YW50UG9vbFNlY3Rpb24oKTsKLSAgICB2b2lkIHBh
cnNlU2lnbmF0dXJlU2VjdGlvbigpOwotICAgIHZvaWQgcGFyc2VGdW5jdGlvbkltcG9ydFNlY3Rp
b24oRXhlY1N0YXRlKik7Ci0gICAgdm9pZCBwYXJzZUdsb2JhbFNlY3Rpb24oRXhlY1N0YXRlKik7
Ci0gICAgdm9pZCBwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb25TZWN0aW9uKCk7Ci0gICAgdm9pZCBw
YXJzZUZ1bmN0aW9uUG9pbnRlclRhYmxlU2VjdGlvbigpOwotICAgIHZvaWQgcGFyc2VGdW5jdGlv
bkRlZmluaXRpb25TZWN0aW9uKCk7Ci0gICAgdm9pZCBwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvbihz
aXplX3QgZnVuY3Rpb25JbmRleCk7Ci0gICAgdm9pZCBwYXJzZUV4cG9ydFNlY3Rpb24oKTsKLSAg
ICB2b2lkIGdldEltcG9ydGVkVmFsdWUoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiBpbXBvcnRO
YW1lLCBKU1ZhbHVlJik7Ci0KLSAgICBWTSYgbV92bTsKLSAgICBTdHJvbmc8SlNHbG9iYWxPYmpl
Y3Q+IG1fZ2xvYmFsT2JqZWN0OwotICAgIGNvbnN0IFNvdXJjZUNvZGUmIG1fc291cmNlOwotICAg
IFN0cm9uZzxKU09iamVjdD4gbV9pbXBvcnRzOwotICAgIFdBU01SZWFkZXIgbV9yZWFkZXI7Ci0g
ICAgU3Ryb25nPEpTV0FTTU1vZHVsZT4gbV9tb2R1bGU7Ci0gICAgU3RyaW5nIG1fZXJyb3JNZXNz
YWdlOwotfTsKLQotSlNfRVhQT1JUX1BSSVZBVEUgSlNXQVNNTW9kdWxlKiBwYXJzZVdlYkFzc2Vt
Ymx5KEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBKU09iamVjdCogaW1wb3J0cywgSlNB
cnJheUJ1ZmZlciosIFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKLQotfSAvLyBuYW1lc3BhY2UgSlND
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCi0KLSNlbmRpZiAvLyBXQVNNTW9kdWxl
UGFyc2VyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01SZWFk
ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTVJlYWRlci5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2YWM4ZTJmY2FjMGVkYmExOTY1YjUwYTliMTVmMmFk
MzZiM2MyYTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTVJlYWRlci5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSwyNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICoKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTUgYnkgdGhl
IHJlcG9zaXRvcnkgYXV0aG9ycyBvZgotICogV2ViQXNzZW1ibHkvcG9seWZpbGwtcHJvdG90eXBl
LTEuCi0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIu
MCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBp
biBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkg
b2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vu
c2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3
IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIg
dGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhP
VVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBv
ciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2Ug
Z292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vu
c2UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldBU01SZWFkZXIuaCIK
LQotI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLQotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1
aWxkZXIuaD4KLQotI2RlZmluZSBDSEVDS19SRUFEKGxlbmd0aCkgZG8geyBpZiAobV9jdXJzb3Ig
KyBsZW5ndGggPiBtX2J1ZmZlci5lbmQoKSkgcmV0dXJuIGZhbHNlOyB9IHdoaWxlICgwKQotCi1u
YW1lc3BhY2UgSlNDIHsKLQotYm9vbCBXQVNNUmVhZGVyOjpyZWFkVUludDMyKHVpbnQzMl90JiBy
ZXN1bHQpCi17Ci0gICAgQ0hFQ0tfUkVBRCg0KTsKLSAgICByZXN1bHQgPSBtX2N1cnNvclswXSB8
IG1fY3Vyc29yWzFdIDw8IDggfCBtX2N1cnNvclsyXSA8PCAxNiB8IG1fY3Vyc29yWzNdIDw8IDI0
OwotICAgIG1fY3Vyc29yICs9IDQ7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV0FTTVJl
YWRlcjo6cmVhZEZsb2F0KGZsb2F0JiByZXN1bHQpCi17Ci0gICAgQ0hFQ0tfUkVBRCg0KTsKLSAg
ICB1bmlvbiB7Ci0gICAgICAgIHVpbnQ4X3QgYnl0ZXNbNF07Ci0gICAgICAgIGZsb2F0IGZsb2F0
VmFsdWU7Ci0gICAgfSB1ID0gewotI2lmIENQVShCSUdfRU5ESUFOKQotICAgICAgICB7IG1fY3Vy
c29yWzNdLCBtX2N1cnNvclsyXSwgbV9jdXJzb3JbMV0sIG1fY3Vyc29yWzBdIH0KLSNlbHNlCi0g
ICAgICAgIHsgbV9jdXJzb3JbMF0sIG1fY3Vyc29yWzFdLCBtX2N1cnNvclsyXSwgbV9jdXJzb3Jb
M10gfQotI2VuZGlmCi0gICAgfTsKLSAgICByZXN1bHQgPSB1LmZsb2F0VmFsdWU7Ci0gICAgbV9j
dXJzb3IgKz0gNDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXQVNNUmVhZGVyOjpyZWFk
RG91YmxlKGRvdWJsZSYgcmVzdWx0KQotewotICAgIENIRUNLX1JFQUQoOCk7Ci0gICAgdW5pb24g
ewotICAgICAgICB1aW50OF90IGJ5dGVzWzhdOwotICAgICAgICBkb3VibGUgZG91YmxlVmFsdWU7
Ci0gICAgfSB1ID0gewotI2lmIENQVShCSUdfRU5ESUFOKQotICAgICAgICB7IG1fY3Vyc29yWzdd
LCBtX2N1cnNvcls2XSwgbV9jdXJzb3JbNV0sIG1fY3Vyc29yWzRdLCBtX2N1cnNvclszXSwgbV9j
dXJzb3JbMl0sIG1fY3Vyc29yWzFdLCBtX2N1cnNvclswXSB9Ci0jZWxzZQotICAgICAgICB7IG1f
Y3Vyc29yWzBdLCBtX2N1cnNvclsxXSwgbV9jdXJzb3JbMl0sIG1fY3Vyc29yWzNdLCBtX2N1cnNv
cls0XSwgbV9jdXJzb3JbNV0sIG1fY3Vyc29yWzZdLCBtX2N1cnNvcls3XSB9Ci0jZW5kaWYKLSAg
ICB9OwotICAgIHJlc3VsdCA9IHUuZG91YmxlVmFsdWU7Ci0gICAgbV9jdXJzb3IgKz0gODsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXQVNNUmVhZGVyOjpyZWFkQ29tcGFjdEludDMyKHVp
bnQzMl90JiByZXN1bHQpCi17Ci0gICAgdWludDMyX3Qgc3VtID0gMDsKLSAgICB1bnNpZ25lZCBz
aGlmdCA9IDA7Ci0gICAgZG8gewotICAgICAgICBDSEVDS19SRUFEKDEpOwotICAgICAgICB1aW50
OF90IGJ5dGUgPSAqbV9jdXJzb3IrKzsKLSAgICAgICAgaWYgKGJ5dGUgPCAweDgwKSB7Ci0gICAg
ICAgICAgICBzdW0gfD0gYnl0ZSA8PCBzaGlmdDsKLSAgICAgICAgICAgIGludCBzaWduRXh0ZW5k
ID0gKDMyIC0gNykgLSBzaGlmdDsKLSAgICAgICAgICAgIGlmIChzaWduRXh0ZW5kID4gMCkKLSAg
ICAgICAgICAgICAgICByZXN1bHQgPSBpbnQzMl90KHN1bSkgPDwgc2lnbkV4dGVuZCA+PiBzaWdu
RXh0ZW5kOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGludDMy
X3Qoc3VtKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHN1
bSB8PSAoYnl0ZSAmIGZpcnN0U2V2ZW5CaXRzTWFzaykgPDwgc2hpZnQ7Ci0gICAgICAgIHNoaWZ0
ICs9IDc7Ci0gICAgfSB3aGlsZSAoc2hpZnQgPCAzNSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci1ib29sIFdBU01SZWFkZXI6OnJlYWRDb21wYWN0VUludDMyKHVpbnQzMl90JiByZXN1bHQpCi17
Ci0gICAgdWludDMyX3Qgc3VtID0gMDsKLSAgICB1bnNpZ25lZCBzaGlmdCA9IDA7Ci0gICAgZG8g
ewotICAgICAgICBDSEVDS19SRUFEKDEpOwotICAgICAgICB1aW50MzJfdCBieXRlID0gKm1fY3Vy
c29yKys7Ci0gICAgICAgIGlmIChieXRlIDwgMHg4MCkgewotICAgICAgICAgICAgaWYgKChzaGlm
dCA9PSAyOCAmJiBieXRlID49IDB4MTApIHx8IChzaGlmdCAmJiAhYnl0ZSkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgcmVzdWx0ID0gc3VtIHwgKGJ5dGUgPDwg
c2hpZnQpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgc3Vt
IHw9IChieXRlICYgZmlyc3RTZXZlbkJpdHNNYXNrKSA8PCBzaGlmdDsKLSAgICAgICAgc2hpZnQg
Kz0gNzsKLSAgICB9IHdoaWxlIChzaGlmdCA8IDM1KTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LWJvb2wgV0FTTVJlYWRlcjo6cmVhZFN0cmluZyhTdHJpbmcmIHJlc3VsdCkKLXsKLSAgICBTdHJp
bmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgQ0hFQ0tfUkVB
RCgxKTsKLSAgICAgICAgY2hhciBjID0gKm1fY3Vyc29yKys7Ci0gICAgICAgIGlmICghYykKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBidWlsZGVyLmFwcGVuZChjKTsKLSAgICB9Ci0gICAg
cmVzdWx0ID0gYnVpbGRlci50b1N0cmluZygpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29s
IFdBU01SZWFkZXI6OnJlYWRUeXBlKFdBU01UeXBlJiByZXN1bHQpCi17Ci0gICAgcmV0dXJuIHJl
YWRCeXRlPFdBU01UeXBlPihyZXN1bHQsIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KFdBU01UeXBlOjpO
dW1iZXJPZlR5cGVzKSk7Ci19Ci0KLWJvb2wgV0FTTVJlYWRlcjo6cmVhZEV4cHJlc3Npb25UeXBl
KFdBU01FeHByZXNzaW9uVHlwZSYgcmVzdWx0KQotewotICAgIHJldHVybiByZWFkQnl0ZTxXQVNN
RXhwcmVzc2lvblR5cGU+KHJlc3VsdCwgc3RhdGljX2Nhc3Q8dWludDhfdD4oV0FTTUV4cHJlc3Np
b25UeXBlOjpOdW1iZXJPZkV4cHJlc3Npb25UeXBlcykpOwotfQotCi1ib29sIFdBU01SZWFkZXI6
OnJlYWRFeHBvcnRGb3JtYXQoV0FTTUV4cG9ydEZvcm1hdCYgcmVzdWx0KQotewotICAgIHJldHVy
biByZWFkQnl0ZTxXQVNNRXhwb3J0Rm9ybWF0PihyZXN1bHQsIHN0YXRpY19jYXN0PHVpbnQ4X3Q+
KFdBU01FeHBvcnRGb3JtYXQ6Ok51bWJlck9mRXhwb3J0Rm9ybWF0cykpOwotfQotCi10ZW1wbGF0
ZSA8Y2xhc3MgVD4gYm9vbCBXQVNNUmVhZGVyOjpyZWFkQnl0ZShUJiByZXN1bHQsIHVpbnQ4X3Qg
bnVtYmVyT2ZWYWx1ZXMpCi17Ci0gICAgQ0hFQ0tfUkVBRCgxKTsKLSAgICB1aW50OF90IGJ5dGUg
PSAqbV9jdXJzb3IrKzsKLSAgICBpZiAoYnl0ZSA+PSBudW1iZXJPZlZhbHVlcykKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIHJlc3VsdCA9IFQoYnl0ZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgV0FTTVJlYWRlcjo6cmVhZE9wU3RhdGVtZW50KGJvb2wmIGhhc0ltbWVkaWF0ZSwg
V0FTTU9wU3RhdGVtZW50JiBvcCwgV0FTTU9wU3RhdGVtZW50V2l0aEltbWVkaWF0ZSYgb3BXaXRo
SW1tZWRpYXRlLCB1aW50OF90JiBpbW1lZGlhdGUpCi17Ci0gICAgcmV0dXJuIHJlYWRPcChoYXNJ
bW1lZGlhdGUsIG9wLCBvcFdpdGhJbW1lZGlhdGUsIGltbWVkaWF0ZSwKLSAgICAgICAgc3RhdGlj
X2Nhc3Q8dWludDhfdD4oV0FTTU9wU3RhdGVtZW50OjpOdW1iZXJPZldBU01PcFN0YXRlbWVudHMp
LAotICAgICAgICBzdGF0aWNfY2FzdDx1aW50OF90PihXQVNNT3BTdGF0ZW1lbnRXaXRoSW1tZWRp
YXRlOjpOdW1iZXJPZldBU01PcFN0YXRlbWVudFdpdGhJbW1lZGlhdGVzKSk7Ci19Ci0KLWJvb2wg
V0FTTVJlYWRlcjo6cmVhZE9wRXhwcmVzc2lvbkkzMihib29sJiBoYXNJbW1lZGlhdGUsIFdBU01P
cEV4cHJlc3Npb25JMzImIG9wLCBXQVNNT3BFeHByZXNzaW9uSTMyV2l0aEltbWVkaWF0ZSYgb3BX
aXRoSW1tZWRpYXRlLCB1aW50OF90JiBpbW1lZGlhdGUpCi17Ci0gICAgcmV0dXJuIHJlYWRPcCho
YXNJbW1lZGlhdGUsIG9wLCBvcFdpdGhJbW1lZGlhdGUsIGltbWVkaWF0ZSwKLSAgICAgICAgc3Rh
dGljX2Nhc3Q8dWludDhfdD4oV0FTTU9wRXhwcmVzc2lvbkkzMjo6TnVtYmVyT2ZXQVNNT3BFeHBy
ZXNzaW9uSTMycyksCi0gICAgICAgIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KFdBU01PcEV4cHJlc3Np
b25JMzJXaXRoSW1tZWRpYXRlOjpOdW1iZXJPZldBU01PcEV4cHJlc3Npb25JMzJXaXRoSW1tZWRp
YXRlcykpOwotfQotCi1ib29sIFdBU01SZWFkZXI6OnJlYWRPcEV4cHJlc3Npb25GMzIoYm9vbCYg
aGFzSW1tZWRpYXRlLCBXQVNNT3BFeHByZXNzaW9uRjMyJiBvcCwgV0FTTU9wRXhwcmVzc2lvbkYz
MldpdGhJbW1lZGlhdGUmIG9wV2l0aEltbWVkaWF0ZSwgdWludDhfdCYgaW1tZWRpYXRlKQotewot
ICAgIHJldHVybiByZWFkT3AoaGFzSW1tZWRpYXRlLCBvcCwgb3BXaXRoSW1tZWRpYXRlLCBpbW1l
ZGlhdGUsCi0gICAgICAgIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KFdBU01PcEV4cHJlc3Npb25GMzI6
Ok51bWJlck9mV0FTTU9wRXhwcmVzc2lvbkYzMnMpLAotICAgICAgICBzdGF0aWNfY2FzdDx1aW50
OF90PihXQVNNT3BFeHByZXNzaW9uRjMyV2l0aEltbWVkaWF0ZTo6TnVtYmVyT2ZXQVNNT3BFeHBy
ZXNzaW9uRjMyV2l0aEltbWVkaWF0ZXMpKTsKLX0KLQotYm9vbCBXQVNNUmVhZGVyOjpyZWFkT3BF
eHByZXNzaW9uRjY0KGJvb2wmIGhhc0ltbWVkaWF0ZSwgV0FTTU9wRXhwcmVzc2lvbkY2NCYgb3As
IFdBU01PcEV4cHJlc3Npb25GNjRXaXRoSW1tZWRpYXRlJiBvcFdpdGhJbW1lZGlhdGUsIHVpbnQ4
X3QmIGltbWVkaWF0ZSkKLXsKLSAgICByZXR1cm4gcmVhZE9wKGhhc0ltbWVkaWF0ZSwgb3AsIG9w
V2l0aEltbWVkaWF0ZSwgaW1tZWRpYXRlLAotICAgICAgICBzdGF0aWNfY2FzdDx1aW50OF90PihX
QVNNT3BFeHByZXNzaW9uRjY0OjpOdW1iZXJPZldBU01PcEV4cHJlc3Npb25GNjRzKSwKLSAgICAg
ICAgc3RhdGljX2Nhc3Q8dWludDhfdD4oV0FTTU9wRXhwcmVzc2lvbkY2NFdpdGhJbW1lZGlhdGU6
Ok51bWJlck9mV0FTTU9wRXhwcmVzc2lvbkY2NFdpdGhJbW1lZGlhdGVzKSk7Ci19Ci0KLWJvb2wg
V0FTTVJlYWRlcjo6cmVhZE9wRXhwcmVzc2lvblZvaWQoV0FTTU9wRXhwcmVzc2lvblZvaWQmIG9w
KQotewotICAgIHJldHVybiByZWFkQnl0ZTxXQVNNT3BFeHByZXNzaW9uVm9pZD4ob3AsCi0gICAg
ICAgIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KFdBU01PcEV4cHJlc3Npb25Wb2lkOjpOdW1iZXJPZldB
U01PcEV4cHJlc3Npb25Wb2lkcykpOwotfQotCi1ib29sIFdBU01SZWFkZXI6OnJlYWRWYXJpYWJs
ZVR5cGVzKGJvb2wmIGhhc0ltbWVkaWF0ZSwgV0FTTVZhcmlhYmxlVHlwZXMmIHZhcmlhYmxlVHlw
ZXMsIFdBU01WYXJpYWJsZVR5cGVzV2l0aEltbWVkaWF0ZSYgdmFyaWFibGVUeXBlc1dpdGhJbW1l
ZGlhdGUsIHVpbnQ4X3QmIGltbWVkaWF0ZSkKLXsKLSAgICByZXR1cm4gcmVhZE9wKGhhc0ltbWVk
aWF0ZSwgdmFyaWFibGVUeXBlcywgdmFyaWFibGVUeXBlc1dpdGhJbW1lZGlhdGUsIGltbWVkaWF0
ZSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8dWludDhfdD4oV0FTTVZhcmlhYmxlVHlwZXM6Ok51bWJl
ck9mVmFyaWFibGVUeXBlcyksCi0gICAgICAgIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KFdBU01WYXJp
YWJsZVR5cGVzV2l0aEltbWVkaWF0ZTo6TnVtYmVyT2ZWYXJpYWJsZVR5cGVzV2l0aEltbWVkaWF0
ZXMpKTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFRXaXRoSW1tZWRpYXRlPgotYm9v
bCBXQVNNUmVhZGVyOjpyZWFkT3AoYm9vbCYgaGFzSW1tZWRpYXRlLCBUJiBvcCwgVFdpdGhJbW1l
ZGlhdGUmIG9wV2l0aEltbWVkaWF0ZSwgdWludDhfdCYgaW1tZWRpYXRlLCB1aW50OF90IG51bWJl
ck9mVmFsdWVzLCB1aW50OF90IG51bWJlck9mVmFsdWVzV2l0aEltbWVkaWF0ZSkKLXsKLSAgICBD
SEVDS19SRUFEKDEpOwotICAgIHVpbnQ4X3QgYnl0ZSA9ICptX2N1cnNvcisrOwotCi0gICAgaWYg
KCEoYnl0ZSAmIGhhc0ltbWVkaWF0ZUluT3BGbGFnKSkgewotICAgICAgICBpZiAoYnl0ZSA+PSBu
dW1iZXJPZlZhbHVlcykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaGFzSW1t
ZWRpYXRlID0gZmFsc2U7Ci0gICAgICAgIG9wID0gVChieXRlKTsKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotCi0gICAgdWludDhfdCBieXRlV2l0aG91dEltbWVkaWF0ZSA9IChieXRlID4+
IGltbWVkaWF0ZUJpdHMpICYgKG9wV2l0aEltbWVkaWF0ZUxpbWl0IC0gMSk7Ci0gICAgaWYgKGJ5
dGVXaXRob3V0SW1tZWRpYXRlID49IG51bWJlck9mVmFsdWVzV2l0aEltbWVkaWF0ZSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGhhc0ltbWVkaWF0ZSA9IHRydWU7Ci0gICAgb3BXaXRoSW1t
ZWRpYXRlID0gVFdpdGhJbW1lZGlhdGUoYnl0ZVdpdGhvdXRJbW1lZGlhdGUpOwotICAgIGltbWVk
aWF0ZSA9IGJ5dGUgJiAoaW1tZWRpYXRlTGltaXQgLSAxKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBXQVNNUmVhZGVyOjpyZWFkU3dpdGNoQ2FzZShXQVNNU3dpdGNoQ2FzZSYgcmVzdWx0
KQotewotICAgIHJldHVybiByZWFkQnl0ZTxXQVNNU3dpdGNoQ2FzZT4ocmVzdWx0LCBzdGF0aWNf
Y2FzdDx1aW50OF90PihXQVNNU3dpdGNoQ2FzZTo6TnVtYmVyT2ZTd2l0Y2hDYXNlcykpOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01SZWFkZXIuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01SZWFkZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggODNkYzI5NjgxMDJkYjJjOGM5YmI1YzVmOWI0MjE0ZWE4Y2Y5ZDdkZi4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XQVNNUmVhZGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXQVNN
UmVhZGVyX2gKLSNkZWZpbmUgV0FTTVJlYWRlcl9oCi0KLSNpZiBFTkFCTEUoV0VCQVNTRU1CTFkp
Ci0KLSNpbmNsdWRlICJXQVNNQ29uc3RhbnRzLmgiCi0jaW5jbHVkZSAiV0FTTUZvcm1hdC5oIgot
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIFdBU01S
ZWFkZXIgewotcHVibGljOgotICAgIFdBU01SZWFkZXIoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBi
dWZmZXIpCi0gICAgICAgIDogbV9idWZmZXIoYnVmZmVyKQotICAgICAgICAsIG1fY3Vyc29yKGJ1
ZmZlci5kYXRhKCkpCi0gICAgewotICAgIH0KLQotICAgIHVuc2lnbmVkIG9mZnNldCgpIGNvbnN0
IHsgcmV0dXJuIG1fY3Vyc29yIC0gbV9idWZmZXIuZGF0YSgpOyB9Ci0gICAgdm9pZCBzZXRPZmZz
ZXQodW5zaWduZWQgb2Zmc2V0KSB7IG1fY3Vyc29yID0gbV9idWZmZXIuZGF0YSgpICsgb2Zmc2V0
OyB9Ci0KLSAgICBib29sIHJlYWRVSW50MzIodWludDMyX3QmIHJlc3VsdCk7Ci0gICAgYm9vbCBy
ZWFkRmxvYXQoZmxvYXQmIHJlc3VsdCk7Ci0gICAgYm9vbCByZWFkRG91YmxlKGRvdWJsZSYgcmVz
dWx0KTsKLSAgICBib29sIHJlYWRDb21wYWN0SW50MzIodWludDMyX3QmIHJlc3VsdCk7Ci0gICAg
Ym9vbCByZWFkQ29tcGFjdFVJbnQzMih1aW50MzJfdCYgcmVzdWx0KTsKLSAgICBib29sIHJlYWRT
dHJpbmcoU3RyaW5nJiByZXN1bHQpOwotICAgIGJvb2wgcmVhZFR5cGUoV0FTTVR5cGUmIHJlc3Vs
dCk7Ci0gICAgYm9vbCByZWFkRXhwcmVzc2lvblR5cGUoV0FTTUV4cHJlc3Npb25UeXBlJiByZXN1
bHQpOwotICAgIGJvb2wgcmVhZEV4cG9ydEZvcm1hdChXQVNNRXhwb3J0Rm9ybWF0JiByZXN1bHQp
OwotICAgIGJvb2wgcmVhZE9wU3RhdGVtZW50KGJvb2wmIGhhc0ltbWVkaWF0ZSwgV0FTTU9wU3Rh
dGVtZW50JiwgV0FTTU9wU3RhdGVtZW50V2l0aEltbWVkaWF0ZSYsIHVpbnQ4X3QmIGltbWVkaWF0
ZSk7Ci0gICAgYm9vbCByZWFkT3BFeHByZXNzaW9uSTMyKGJvb2wmIGhhc0ltbWVkaWF0ZSwgV0FT
TU9wRXhwcmVzc2lvbkkzMiYsIFdBU01PcEV4cHJlc3Npb25JMzJXaXRoSW1tZWRpYXRlJiwgdWlu
dDhfdCYgaW1tZWRpYXRlKTsKLSAgICBib29sIHJlYWRPcEV4cHJlc3Npb25GMzIoYm9vbCYgaGFz
SW1tZWRpYXRlLCBXQVNNT3BFeHByZXNzaW9uRjMyJiwgV0FTTU9wRXhwcmVzc2lvbkYzMldpdGhJ
bW1lZGlhdGUmLCB1aW50OF90JiBpbW1lZGlhdGUpOwotICAgIGJvb2wgcmVhZE9wRXhwcmVzc2lv
bkY2NChib29sJiBoYXNJbW1lZGlhdGUsIFdBU01PcEV4cHJlc3Npb25GNjQmLCBXQVNNT3BFeHBy
ZXNzaW9uRjY0V2l0aEltbWVkaWF0ZSYsIHVpbnQ4X3QmIGltbWVkaWF0ZSk7Ci0gICAgYm9vbCBy
ZWFkT3BFeHByZXNzaW9uVm9pZChXQVNNT3BFeHByZXNzaW9uVm9pZCYpOwotICAgIGJvb2wgcmVh
ZFZhcmlhYmxlVHlwZXMoYm9vbCYgaGFzSW1tZWRpYXRlLCBXQVNNVmFyaWFibGVUeXBlcyYsIFdB
U01WYXJpYWJsZVR5cGVzV2l0aEltbWVkaWF0ZSYsIHVpbnQ4X3QmIGltbWVkaWF0ZSk7Ci0gICAg
Ym9vbCByZWFkU3dpdGNoQ2FzZShXQVNNU3dpdGNoQ2FzZSYgcmVzdWx0KTsKLQotcHJpdmF0ZToK
LSAgICBzdGF0aWMgY29uc3QgdWludDMyX3QgZmlyc3RTZXZlbkJpdHNNYXNrID0gMHg3ZjsKLQot
ICAgIHRlbXBsYXRlIDxjbGFzcyBUPiBib29sIHJlYWRCeXRlKFQmIHJlc3VsdCwgdWludDhfdCBu
dW1iZXJPZlZhbHVlcyk7Ci0gICAgdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFRXaXRoSW1tZWRp
YXRlPiBib29sIHJlYWRPcChib29sJiBoYXNJbW1lZGlhdGUsIFQmLCBUV2l0aEltbWVkaWF0ZSYs
IHVpbnQ4X3QmIGltbWVkaWF0ZSwgdWludDhfdCBudW1iZXJPZlZhbHVlcywgdWludDhfdCBudW1i
ZXJPZlZhbHVlc1dpdGhJbW1lZGlhdGUpOwotCi0gICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBt
X2J1ZmZlcjsKLSAgICBjb25zdCB1aW50OF90KiBtX2N1cnNvcjsKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIEpTQwotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQotCi0jZW5kaWYgLy8gV0FT
TVJlYWRlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9GZWF0dXJlRGVmaW5lcy5oIGIv
U291cmNlL1dURi93dGYvRmVhdHVyZURlZmluZXMuaAppbmRleCAwMWYwZDY3ZTZhNTY4MzhlNTkz
MDhlMWU3OWVmMmU0OTIzMzMxNTNiLi42NzkwM2I4Y2MyODI2OGJkZmNhNmUwMjAxZjJjNzYwNjI4
Y2ExMDVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9GZWF0dXJlRGVmaW5lcy5oCisrKyBi
L1NvdXJjZS9XVEYvd3RmL0ZlYXR1cmVEZWZpbmVzLmgKQEAgLTIyMiw2ICsyMjIsMTAgQEAgdGhl
IHB1YmxpYyBpT1MgU0RLLiBXZSB3aWxsIGFsc28gbmVlZCB0byB1cGRhdGUgdGhlIEZlYXR1cmVE
ZWZpbmVzLnhjY29uZmlnIGZpbGUKICNkZWZpbmUgRU5BQkxFX1ZJRVdfTU9ERV9DU1NfTUVESUEg
MAogI2VuZGlmCiAKKyNpZiAhZGVmaW5lZChFTkFCTEVfV0VCQVNTRU1CTFkpCisjZGVmaW5lIEVO
QUJMRV9XRUJBU1NFTUJMWSAwCisjZW5kaWYKKwogI2lmICFkZWZpbmVkKEVOQUJMRV9XRUJfQVJD
SElWRSkKICNkZWZpbmUgRU5BQkxFX1dFQl9BUkNISVZFIDEKICNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285438</attachid>
            <date>2016-08-05 11:33:07 -0700</date>
            <delta_ts>2016-08-05 11:35:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160603-20160805113140.patch</filename>
            <type>text/plain</type>
            <size>231290</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA0MTIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
ZGRiOTNkZGQ0YzdhMGJmNzczMjA3MTlhMDdmZDE0MmM4NmI3YjRiLi40ZGU3NTdmYzJkNWNkOTE1
YWYwNTEwNjc1NjFmMzcyMjUyMTQxNmEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyODYgQEAKKzIwMTYtMDgtMDUgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgRGVsZXRlIG91dCBvZiBkYXRlIFdBU00gY29kZS4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MDYwMworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggcmVtb3Zl
cyBhIGJ1bmNoIG9mIHRoZSB3YXNtIGZpbGVzIHRoYXQgd2UgYXJlIHVubGlrZXkgdG8gdXNlCisg
ICAgICAgIHdpdGggdGhlIG5ld2VyIHdhc20gc3BlYy4gSWYgd2UgZW5kIHVwIG5lZWRpbmcgYW55
IG9mIHRoZSBkZWxldGVkIGNvZGUKKyAgICAgICAgbGF0ZXIgd2UgY2FuIHJlc3RvcmUgaXQgYXQg
dGhhdCB0aW1lLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBqaXQvSklUT3Bl
cmF0aW9ucy5jcHA6CisgICAgICAgICoganNjLmNwcDoKKyAgICAgICAgKEdsb2JhbE9iamVjdDo6
ZmluaXNoQ3JlYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoZnVuY3Rpb25Mb2FkV2ViQXNzZW1i
bHkpOiBEZWxldGVkLgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmNwcDoKKyAgICAg
ICAgKEpTQzo6TExJbnQ6OnNldFVwQ2FsbCk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9F
eGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpwcmVw
YXJlRm9yRXhlY3V0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmluaXQpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisg
ICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5oOgorICAgICAgICAoSlNDOjpKU0dsb2Jh
bE9iamVjdDo6d2FzbU1vZHVsZVN0cnVjdHVyZSk6IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9X
QVNNQ29uc3RhbnRzLmg6IFJlbW92ZWQuCisgICAgICAgICogd2FzbS9XQVNNRnVuY3Rpb25CM0lS
R2VuZXJhdG9yLmg6IFJlbW92ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlvbkIzSVJHZW5l
cmF0b3I6Ok1lbW9yeUFkZHJlc3M6Ok1lbW9yeUFkZHJlc3MpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpXQVNNRnVuY3Rpb25CM0lSR2VuZXJhdG9yOjpzdGFydEZ1bmN0aW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uQjNJUkdlbmVyYXRvcjo6ZW5kRnVuY3Rpb24pOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25CM0lSR2VuZXJhdG9yOjpidWlsZFNl
dExvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uQjNJUkdlbmVyYXRv
cjo6YnVpbGRTZXRHbG9iYWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25C
M0lSR2VuZXJhdG9yOjpidWlsZFJldHVybik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01G
dW5jdGlvbkIzSVJHZW5lcmF0b3I6OmJ1aWxkSW1tZWRpYXRlSTMyKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6V0FTTUZ1bmN0aW9uQjNJUkdlbmVyYXRvcjo6YnVpbGRJbW1lZGlhdGVGMzIpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25CM0lSR2VuZXJhdG9yOjpidWlsZElt
bWVkaWF0ZUY2NCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlvbkIzSVJHZW5l
cmF0b3I6OmJ1aWxkR2V0TG9jYWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rp
b25CM0lSR2VuZXJhdG9yOjpidWlsZEdldEdsb2JhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OldBU01GdW5jdGlvbkIzSVJHZW5lcmF0b3I6OmJ1aWxkQ29udmVydFR5cGUpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25CM0lSR2VuZXJhdG9yOjpidWlsZExvYWQpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25CM0lSR2VuZXJhdG9yOjpidWlsZFN0b3Jl
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uQjNJUkdlbmVyYXRvcjo6YnVp
bGRVbmFyeUkzMik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlvbkIzSVJHZW5l
cmF0b3I6OmJ1aWxkVW5hcnlGMzIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rp
b25CM0lSR2VuZXJhdG9yOjpidWlsZFVuYXJ5RjY0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
V0FTTUZ1bmN0aW9uQjNJUkdlbmVyYXRvcjo6YnVpbGRCaW5hcnlJMzIpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpXQVNNRnVuY3Rpb25CM0lSR2VuZXJhdG9yOjpidWlsZEJpbmFyeUYzMik6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlvbkIzSVJHZW5lcmF0b3I6OmJ1aWxkQmlu
YXJ5RjY0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uQjNJUkdlbmVyYXRv
cjo6YnVpbGRSZWxhdGlvbmFsSTMyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0
aW9uQjNJUkdlbmVyYXRvcjo6YnVpbGRSZWxhdGlvbmFsRjMyKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6V0FTTUZ1bmN0aW9uQjNJUkdlbmVyYXRvcjo6YnVpbGRSZWxhdGlvbmFsRjY0KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uQjNJUkdlbmVyYXRvcjo6YnVpbGRNaW5P
ck1heEkzMik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlvbkIzSVJHZW5lcmF0
b3I6OmJ1aWxkTWluT3JNYXhGNjQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rp
b25CM0lSR2VuZXJhdG9yOjpidWlsZENhbGxJbnRlcm5hbCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OldBU01GdW5jdGlvbkIzSVJHZW5lcmF0b3I6OmJ1aWxkQ2FsbEluZGlyZWN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uQjNJUkdlbmVyYXRvcjo6YnVpbGRDYWxsSW1w
b3J0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uQjNJUkdlbmVyYXRvcjo6
YXBwZW5kRXhwcmVzc2lvbkxpc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rp
b25CM0lSR2VuZXJhdG9yOjpkaXNjYXJkKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1
bmN0aW9uQjNJUkdlbmVyYXRvcjo6bGlua1RhcmdldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OldBU01GdW5jdGlvbkIzSVJHZW5lcmF0b3I6Omp1bXBUb1RhcmdldCk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OldBU01GdW5jdGlvbkIzSVJHZW5lcmF0b3I6Omp1bXBUb1RhcmdldElmKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uQjNJUkdlbmVyYXRvcjo6c3RhcnRMb29w
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uQjNJUkdlbmVyYXRvcjo6ZW5k
TG9vcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlvbkIzSVJHZW5lcmF0b3I6
OnN0YXJ0U3dpdGNoKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uQjNJUkdl
bmVyYXRvcjo6ZW5kU3dpdGNoKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9u
QjNJUkdlbmVyYXRvcjo6c3RhcnRMYWJlbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01G
dW5jdGlvbkIzSVJHZW5lcmF0b3I6OmVuZExhYmVsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
V0FTTUZ1bmN0aW9uQjNJUkdlbmVyYXRvcjo6YnJlYWtUYXJnZXQpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpXQVNNRnVuY3Rpb25CM0lSR2VuZXJhdG9yOjpjb250aW51ZVRhcmdldCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlvbkIzSVJHZW5lcmF0b3I6OmJyZWFrTGFiZWxU
YXJnZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25CM0lSR2VuZXJhdG9y
Ojpjb250aW51ZUxhYmVsVGFyZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0
aW9uQjNJUkdlbmVyYXRvcjo6YnVpbGRTd2l0Y2gpOiBEZWxldGVkLgorICAgICAgICAqIHdhc20v
V0FTTUZ1bmN0aW9uQ29tcGlsZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKEpTQzo6b3BlcmF0aW9u
Q29udmVydEpTVmFsdWVUb0ludDMyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6b3BlcmF0aW9u
Q29udmVydEpTVmFsdWVUb0RvdWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Om9wZXJhdGlv
bkRpdik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Om9wZXJhdGlvbk1vZCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6Om9wZXJhdGlvblVuc2lnbmVkRGl2KTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6b3BlcmF0aW9uVW5zaWduZWRNb2QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpvcGVyYXRp
b25Db252ZXJ0VW5zaWduZWRJbnQzMlRvRG91YmxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
c2l6ZU9mTWVtb3J5VHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlvbkNv
bXBpbGVyOjpNZW1vcnlBZGRyZXNzOjpNZW1vcnlBZGRyZXNzKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6V0FTTUZ1bmN0aW9uQ29tcGlsZXI6OldBU01GdW5jdGlvbkNvbXBpbGVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uQ29tcGlsZXI6OnN0YXJ0RnVuY3Rpb24pOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25Db21waWxlcjo6ZW5kRnVuY3Rpb24p
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25Db21waWxlcjo6YnVpbGRTZXRM
b2NhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlvbkNvbXBpbGVyOjpidWls
ZFNldEdsb2JhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlvbkNvbXBpbGVy
OjpidWlsZFJldHVybik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlvbkNvbXBp
bGVyOjpidWlsZEltbWVkaWF0ZUkzMik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5j
dGlvbkNvbXBpbGVyOjpidWlsZEltbWVkaWF0ZUYzMik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OldBU01GdW5jdGlvbkNvbXBpbGVyOjpidWlsZEltbWVkaWF0ZUY2NCk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OldBU01GdW5jdGlvbkNvbXBpbGVyOjpidWlsZEdldExvY2FsKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uQ29tcGlsZXI6OmJ1aWxkR2V0R2xvYmFsKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uQ29tcGlsZXI6OmJ1aWxkQ29udmVydFR5
cGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25Db21waWxlcjo6YnVpbGRM
b2FkKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uQ29tcGlsZXI6OmJ1aWxk
U3RvcmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25Db21waWxlcjo6YnVp
bGRVbmFyeUkzMik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlvbkNvbXBpbGVy
OjpidWlsZFVuYXJ5RjMyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uQ29t
cGlsZXI6OmJ1aWxkVW5hcnlGNjQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rp
b25Db21waWxlcjo6YnVpbGRCaW5hcnlJMzIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNN
RnVuY3Rpb25Db21waWxlcjo6YnVpbGRCaW5hcnlGMzIpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpXQVNNRnVuY3Rpb25Db21waWxlcjo6YnVpbGRCaW5hcnlGNjQpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpXQVNNRnVuY3Rpb25Db21waWxlcjo6YnVpbGRSZWxhdGlvbmFsSTMyKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uQ29tcGlsZXI6OmJ1aWxkUmVsYXRpb25hbEYz
Mik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlvbkNvbXBpbGVyOjpidWlsZFJl
bGF0aW9uYWxGNjQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25Db21waWxl
cjo6YnVpbGRNaW5Pck1heEkzMik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlv
bkNvbXBpbGVyOjpidWlsZE1pbk9yTWF4RjY0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FT
TUZ1bmN0aW9uQ29tcGlsZXI6OmJ1aWxkQ2FsbEludGVybmFsKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6V0FTTUZ1bmN0aW9uQ29tcGlsZXI6OmJ1aWxkQ2FsbEluZGlyZWN0KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uQ29tcGlsZXI6OmJ1aWxkQ2FsbEltcG9ydCk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlvbkNvbXBpbGVyOjphcHBlbmRFeHByZXNz
aW9uTGlzdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlvbkNvbXBpbGVyOjpk
aXNjYXJkKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uQ29tcGlsZXI6Omxp
bmtUYXJnZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25Db21waWxlcjo6
anVtcFRvVGFyZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uQ29tcGls
ZXI6Omp1bXBUb1RhcmdldElmKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9u
Q29tcGlsZXI6OnN0YXJ0TG9vcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlv
bkNvbXBpbGVyOjplbmRMb29wKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9u
Q29tcGlsZXI6OnN0YXJ0U3dpdGNoKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0
aW9uQ29tcGlsZXI6OmVuZFN3aXRjaCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5j
dGlvbkNvbXBpbGVyOjpzdGFydExhYmVsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1
bmN0aW9uQ29tcGlsZXI6OmVuZExhYmVsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1
bmN0aW9uQ29tcGlsZXI6OmJyZWFrVGFyZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FT
TUZ1bmN0aW9uQ29tcGlsZXI6OmNvbnRpbnVlVGFyZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6V0FTTUZ1bmN0aW9uQ29tcGlsZXI6OmJyZWFrTGFiZWxUYXJnZXQpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpXQVNNRnVuY3Rpb25Db21waWxlcjo6Y29udGludWVMYWJlbFRhcmdldCk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlvbkNvbXBpbGVyOjpidWlsZFN3aXRjaCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlvbkNvbXBpbGVyOjpsb2NhbEFkZHJl
c3MpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25Db21waWxlcjo6dGVtcG9y
YXJ5QWRkcmVzcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlvbkNvbXBpbGVy
OjphcHBlbmRDYWxsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uQ29tcGls
ZXI6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2spOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpXQVNNRnVuY3Rpb25Db21waWxlcjo6ZW1pdE5ha2VkQ2FsbCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OldBU01GdW5jdGlvbkNvbXBpbGVyOjphcHBlbmRDYWxsU2V0UmVzdWx0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uQ29tcGlsZXI6OmNhbGxPcGVyYXRpb24pOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25Db21waWxlcjo6Ym94QXJndW1lbnRz
QW5kQWRqdXN0U3RhY2tQb2ludGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0
aW9uQ29tcGlsZXI6OmNhbGxBbmRVbmJveFJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OldBU01GdW5jdGlvbkNvbXBpbGVyOjpjb252ZXJ0VmFsdWVUb0ludDMyKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uQ29tcGlsZXI6OmNvbnZlcnRWYWx1ZVRvRG91YmxlKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uQ29tcGlsZXI6OmNvbnZlcnREb3Vi
bGVUb1ZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL1dBU01GdW5jdGlvblBhcnNlci5j
cHA6IFJlbW92ZWQuCisgICAgICAgIChKU0M6Om5hbWVPZlR5cGUpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpXQVNNRnVuY3Rpb25QYXJzZXI6OmNoZWNrU3ludGF4KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6V0FTTUZ1bmN0aW9uUGFyc2VyOjpjb21waWxlKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6V0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6V0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUxvY2FsVmFyaWFibGVzKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZVN0YXRlbWVudCk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VSZXR1cm5TdGF0
ZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNl
QmxvY2tTdGF0ZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25QYXJz
ZXI6OnBhcnNlSWZTdGF0ZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rp
b25QYXJzZXI6OnBhcnNlSWZFbHNlU3RhdGVtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
V0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZVdoaWxlU3RhdGVtZW50KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6V0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZURvU3RhdGVtZW50KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUxhYmVsU3RhdGVtZW50KTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUJyZWFrU3Rh
dGVtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJz
ZUJyZWFrTGFiZWxTdGF0ZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rp
b25QYXJzZXI6OnBhcnNlQ29udGludWVTdGF0ZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlQ29udGludWVMYWJlbFN0YXRlbWVudCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VTd2l0Y2hTdGF0ZW1l
bnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlRXhw
cmVzc2lvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlvblBhcnNlcjo6cGFy
c2VFeHByZXNzaW9uSTMyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uUGFy
c2VyOjpwYXJzZUNvbnN0YW50UG9vbEluZGV4RXhwcmVzc2lvbkkzMik6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OldBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VJbW1lZGlhdGVFeHByZXNzaW9uSTMy
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZVVuYXJ5
RXhwcmVzc2lvbkkzMik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlvblBhcnNl
cjo6cGFyc2VCaW5hcnlFeHByZXNzaW9uSTMyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FT
TUZ1bmN0aW9uUGFyc2VyOjpwYXJzZVJlbGF0aW9uYWxJMzJFeHByZXNzaW9uSTMyKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZVJlbGF0aW9uYWxGMzJF
eHByZXNzaW9uSTMyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uUGFyc2Vy
OjpwYXJzZVJlbGF0aW9uYWxGNjRFeHByZXNzaW9uSTMyKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6V0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZU1pbk9yTWF4RXhwcmVzc2lvbkkzMik6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VFeHByZXNzaW9uRjMy
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUNvbnN0
YW50UG9vbEluZGV4RXhwcmVzc2lvbkYzMik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01G
dW5jdGlvblBhcnNlcjo6cGFyc2VJbW1lZGlhdGVFeHByZXNzaW9uRjMyKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZVVuYXJ5RXhwcmVzc2lvbkYzMik6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VCaW5hcnlF
eHByZXNzaW9uRjMyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uUGFyc2Vy
OjpwYXJzZUV4cHJlc3Npb25GNjQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rp
b25QYXJzZXI6OnBhcnNlQ29uc3RhbnRQb29sSW5kZXhFeHByZXNzaW9uRjY0KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUltbWVkaWF0ZUV4cHJlc3Np
b25GNjQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNl
VW5hcnlFeHByZXNzaW9uRjY0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9u
UGFyc2VyOjpwYXJzZUJpbmFyeUV4cHJlc3Npb25GNjQpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlTWluT3JNYXhFeHByZXNzaW9uRjY0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUV4cHJlc3Npb25Wb2lk
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUdldExv
Y2FsRXhwcmVzc2lvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlvblBhcnNl
cjo6cGFyc2VHZXRHbG9iYWxFeHByZXNzaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FT
TUZ1bmN0aW9uUGFyc2VyOjpwYXJzZVNldExvY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
V0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZVNldEdsb2JhbCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OldBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VNZW1vcnlBZGRyZXNzKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUxvYWQpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlU3RvcmUpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlQ2FsbEFyZ3VtZW50cyk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VDYWxsSW50ZXJuYWwp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlQ2FsbElu
ZGlyZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJz
ZUNhbGxJbXBvcnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25QYXJzZXI6
OnBhcnNlQ29uZGl0aW9uYWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25Q
YXJzZXI6OnBhcnNlQ29tbWEpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25Q
YXJzZXI6OnBhcnNlQ29udmVydFR5cGUpOiBEZWxldGVkLgorICAgICAgICAqIHdhc20vV0FTTUZ1
bmN0aW9uUGFyc2VyLmg6IFJlbW92ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlvblBhcnNl
cjo6V0FTTUZ1bmN0aW9uUGFyc2VyKTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL1dBU01GdW5j
dGlvblN5bnRheENoZWNrZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9u
U3ludGF4Q2hlY2tlcjo6TWVtb3J5QWRkcmVzczo6TWVtb3J5QWRkcmVzcyk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OldBU01GdW5jdGlvblN5bnRheENoZWNrZXI6OnN0YXJ0RnVuY3Rpb24pOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25TeW50YXhDaGVja2VyOjplbmRGdW5j
dGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlvblN5bnRheENoZWNrZXI6
OmJ1aWxkU2V0TG9jYWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25TeW50
YXhDaGVja2VyOjpidWlsZFNldEdsb2JhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01G
dW5jdGlvblN5bnRheENoZWNrZXI6OmJ1aWxkUmV0dXJuKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6V0FTTUZ1bmN0aW9uU3ludGF4Q2hlY2tlcjo6YnVpbGRJbW1lZGlhdGVJMzIpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25TeW50YXhDaGVja2VyOjpidWlsZEltbWVkaWF0
ZUYzMik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlvblN5bnRheENoZWNrZXI6
OmJ1aWxkSW1tZWRpYXRlRjY0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9u
U3ludGF4Q2hlY2tlcjo6YnVpbGRHZXRMb2NhbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldB
U01GdW5jdGlvblN5bnRheENoZWNrZXI6OmJ1aWxkR2V0R2xvYmFsKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6V0FTTUZ1bmN0aW9uU3ludGF4Q2hlY2tlcjo6YnVpbGRDb252ZXJ0VHlwZSk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlvblN5bnRheENoZWNrZXI6OmJ1aWxkTG9h
ZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlvblN5bnRheENoZWNrZXI6OmJ1
aWxkU3RvcmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25TeW50YXhDaGVj
a2VyOjpidWlsZFVuYXJ5STMyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9u
U3ludGF4Q2hlY2tlcjo6YnVpbGRVbmFyeUYzMik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldB
U01GdW5jdGlvblN5bnRheENoZWNrZXI6OmJ1aWxkVW5hcnlGNjQpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpXQVNNRnVuY3Rpb25TeW50YXhDaGVja2VyOjpidWlsZEJpbmFyeUkzMik6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlvblN5bnRheENoZWNrZXI6OmJ1aWxkQmluYXJ5
RjMyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uU3ludGF4Q2hlY2tlcjo6
YnVpbGRCaW5hcnlGNjQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25TeW50
YXhDaGVja2VyOjpidWlsZFJlbGF0aW9uYWxJMzIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpX
QVNNRnVuY3Rpb25TeW50YXhDaGVja2VyOjpidWlsZFJlbGF0aW9uYWxGMzIpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25TeW50YXhDaGVja2VyOjpidWlsZFJlbGF0aW9uYWxG
NjQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25TeW50YXhDaGVja2VyOjpi
dWlsZE1pbk9yTWF4STMyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uU3lu
dGF4Q2hlY2tlcjo6YnVpbGRNaW5Pck1heEY2NCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldB
U01GdW5jdGlvblN5bnRheENoZWNrZXI6OmJ1aWxkQ2FsbEludGVybmFsKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uU3ludGF4Q2hlY2tlcjo6YnVpbGRDYWxsSW1wb3J0KTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uU3ludGF4Q2hlY2tlcjo6YnVpbGRD
YWxsSW5kaXJlY3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25TeW50YXhD
aGVja2VyOjphcHBlbmRFeHByZXNzaW9uTGlzdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldB
U01GdW5jdGlvblN5bnRheENoZWNrZXI6OmRpc2NhcmQpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpXQVNNRnVuY3Rpb25TeW50YXhDaGVja2VyOjpsaW5rVGFyZ2V0KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6V0FTTUZ1bmN0aW9uU3ludGF4Q2hlY2tlcjo6anVtcFRvVGFyZ2V0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uU3ludGF4Q2hlY2tlcjo6anVtcFRvVGFyZ2V0
SWYpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25TeW50YXhDaGVja2VyOjpz
dGFydExvb3ApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25TeW50YXhDaGVj
a2VyOjplbmRMb29wKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uU3ludGF4
Q2hlY2tlcjo6c3RhcnRTd2l0Y2gpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rp
b25TeW50YXhDaGVja2VyOjplbmRTd2l0Y2gpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNN
RnVuY3Rpb25TeW50YXhDaGVja2VyOjpzdGFydExhYmVsKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6V0FTTUZ1bmN0aW9uU3ludGF4Q2hlY2tlcjo6ZW5kTGFiZWwpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpXQVNNRnVuY3Rpb25TeW50YXhDaGVja2VyOjpicmVha1RhcmdldCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OldBU01GdW5jdGlvblN5bnRheENoZWNrZXI6OmNvbnRpbnVlVGFyZ2V0
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uU3ludGF4Q2hlY2tlcjo6YnJl
YWtMYWJlbFRhcmdldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01GdW5jdGlvblN5bnRh
eENoZWNrZXI6OmNvbnRpbnVlTGFiZWxUYXJnZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpX
QVNNRnVuY3Rpb25TeW50YXhDaGVja2VyOjpidWlsZFN3aXRjaCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OldBU01GdW5jdGlvblN5bnRheENoZWNrZXI6OnN0YWNrSGVpZ2h0KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uU3ludGF4Q2hlY2tlcjo6dXBkYXRlVGVtcFN0YWNr
SGVpZ2h0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uU3ludGF4Q2hlY2tl
cjo6dXBkYXRlVGVtcFN0YWNrSGVpZ2h0Rm9yQ2FsbCk6IERlbGV0ZWQuCisgICAgICAgICogd2Fz
bS9XQVNNTW9kdWxlUGFyc2VyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKEpTQzo6V0FTTU1vZHVs
ZVBhcnNlcjo6V0FTTU1vZHVsZVBhcnNlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01N
b2R1bGVQYXJzZXI6OnBhcnNlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTU1vZHVsZVBh
cnNlcjo6cGFyc2VNb2R1bGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNTW9kdWxlUGFy
c2VyOjpwYXJzZUNvbnN0YW50UG9vbFNlY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpX
QVNNTW9kdWxlUGFyc2VyOjpwYXJzZVNpZ25hdHVyZVNlY3Rpb24pOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uSW1wb3J0U2VjdGlvbik6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OldBU01Nb2R1bGVQYXJzZXI6OnBhcnNlR2xvYmFsU2VjdGlv
bik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01Nb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rp
b25EZWNsYXJhdGlvblNlY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNTW9kdWxl
UGFyc2VyOjpwYXJzZUZ1bmN0aW9uUG9pbnRlclRhYmxlU2VjdGlvbik6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OldBU01Nb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25EZWZpbml0aW9uU2VjdGlv
bik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01Nb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rp
b25EZWZpbml0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTU1vZHVsZVBhcnNlcjo6
cGFyc2VFeHBvcnRTZWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTU1vZHVsZVBh
cnNlcjo6Z2V0SW1wb3J0ZWRWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OnBhcnNlV2Vi
QXNzZW1ibHkpOiBEZWxldGVkLgorICAgICAgICAqIHdhc20vV0FTTU1vZHVsZVBhcnNlci5oOiBS
ZW1vdmVkLgorICAgICAgICAqIHdhc20vV0FTTVJlYWRlci5jcHA6IFJlbW92ZWQuCisgICAgICAg
IChKU0M6OldBU01SZWFkZXI6OnJlYWRVSW50MzIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpX
QVNNUmVhZGVyOjpyZWFkRmxvYXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXQVNNUmVhZGVy
OjpyZWFkRG91YmxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTVJlYWRlcjo6cmVhZENv
bXBhY3RJbnQzMik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01SZWFkZXI6OnJlYWRDb21w
YWN0VUludDMyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V0FTTVJlYWRlcjo6cmVhZFN0cmlu
Zyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01SZWFkZXI6OnJlYWRUeXBlKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6V0FTTVJlYWRlcjo6cmVhZEV4cHJlc3Npb25UeXBlKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6V0FTTVJlYWRlcjo6cmVhZEV4cG9ydEZvcm1hdCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OldBU01SZWFkZXI6OnJlYWRCeXRlKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6V0FTTVJlYWRlcjo6cmVhZE9wU3RhdGVtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6V0FTTVJlYWRlcjo6cmVhZE9wRXhwcmVzc2lvbkkzMik6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OldBU01SZWFkZXI6OnJlYWRPcEV4cHJlc3Npb25GMzIpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpXQVNNUmVhZGVyOjpyZWFkT3BFeHByZXNzaW9uRjY0KTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6V0FTTVJlYWRlcjo6cmVhZE9wRXhwcmVzc2lvblZvaWQpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpXQVNNUmVhZGVyOjpyZWFkVmFyaWFibGVUeXBlcyk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OldBU01SZWFkZXI6OnJlYWRPcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldBU01S
ZWFkZXI6OnJlYWRTd2l0Y2hDYXNlKTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL1dBU01SZWFk
ZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKEpTQzo6V0FTTVJlYWRlcjo6V0FTTVJlYWRlcik6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OldBU01SZWFkZXI6Om9mZnNldCk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OldBU01SZWFkZXI6OnNldE9mZnNldCk6IERlbGV0ZWQuCisKIDIwMTYtMDgtMDQg
IFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CiAKICAgICAgICAgW0VTN10g
VXBkYXRlIGZlYXR1cmVzLmpzb24gZm9yIGV4cG9uZW50aWF0aW9uIGV4cHJlc3Npb24KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXgg
MTk4ZWNiZTBmMGNiNjliMjFkMjQzZDk2MzRiOGMyOTU5NGM1NWEwYi4uYWFhZjZlNjhkZDhjMGYz
N2UxZGQwOTg0ODU1NDJkYTM3N2ZlMjcyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxNi0wOC0w
NSAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KKworICAgICAgICBEZWxl
dGUgb3V0IG9mIGRhdGUgV0FTTSBjb2RlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNjAzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkIEZlYXR1cmUgZGVmaW5lIGZvciBXZWJBc3NlbWJseSBvbiBt
YWMuCisKKyAgICAgICAgKiB3dGYvRmVhdHVyZURlZmluZXMuaDoKKwogMjAxNi0wOC0wMyAgQ3Nh
YmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAgICAgIExhY2tpbmcgc3Vw
cG9ydCBvbiBhIGFybS10cmFkaXRpb25hbCBkaXNhc3NlbWJsZXIuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q01ha2VMaXN0cy50eHQKaW5kZXggNjVjNjY5MDM5MjQwNjM5NzExZWNlZDRmMmQ1YmUwMTliNzhj
NGVmOS4uODQ1OGI5MzljYmQyMjJlYmEwNGM2MjI5OGVmMDZlMDc3MDc4MjVjNiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dApAQCAtODM5LDkgKzgzOSw2IEBAIHNldChKYXZhU2Ny
aXB0Q29yZV9TT1VSQ0VTCiAgICAgdG9vbHMvSlNEb2xsYXJWTVByb3RvdHlwZS5jcHAKIAogICAg
IHdhc20vSlNXQVNNTW9kdWxlLmNwcAotICAgIHdhc20vV0FTTUZ1bmN0aW9uUGFyc2VyLmNwcAot
ICAgIHdhc20vV0FTTU1vZHVsZVBhcnNlci5jcHAKLSAgICB3YXNtL1dBU01SZWFkZXIuY3BwCiAK
ICAgICB5YXJyL1JlZ3VsYXJFeHByZXNzaW9uLmNwcAogICAgIHlhcnIvWWFyckNhbm9uaWNhbGl6
ZVVDUzIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGVmMGIxYmI1ODdkOWM0
MTNlNDY3NmI5MGIwNGM0ZjhlM2E0NGE4YTQuLmE1MTBmNWMyMmZmZDIwYzFhZGNjMDMwMTIwNWIw
NjgzYTA0MmFiNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMzA1LDE2ICsx
MzA1LDYgQEAKIAkJNzlFRTBDMDAxQjRBRkI4NTAwMDM4NUM5IC8qIFZhcmlhYmxlRW52aXJvbm1l
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5RUUw
QkZFMUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlGOEZDMUUxQjlGRUQwRjAw
Q0E2NkFCIC8qIERGR01heGltYWxGbHVzaEluc2VydGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5RjhGQzFDMUI5RkVEMEYwMENBNjZB
QiAvKiBERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZS5jcHAgKi87IH07CiAJCTc5RjhGQzFG
MUI5RkVEMEYwMENBNjZBQiAvKiBERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlGOEZDMUQxQjlGRUQw
RjAwQ0E2NkFCIC8qIERGR01heGltYWxGbHVzaEluc2VydGlvblBoYXNlLmggKi87IH07Ci0JCTdC
MDI0NzU1MUI4NjgyREQwMDU0MjQ0MCAvKiBXQVNNQ29uc3RhbnRzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QjAyNDc1MjFCODY4MkQ1MDA1NDI0NDAg
LyogV0FTTUNvbnN0YW50cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07Ci0JCTdCMDI0NzU2MUI4NjgyRTEwMDU0MjQ0MCAvKiBXQVNNRnVuY3Rpb25QYXJz
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0Iw
MjQ3NTMxQjg2ODJENTAwNTQyNDQwIC8qIFdBU01GdW5jdGlvblBhcnNlci5jcHAgKi87IH07Ci0J
CTdCMDI0NzU3MUI4NjgyRTQwMDU0MjQ0MCAvKiBXQVNNRnVuY3Rpb25QYXJzZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCMDI0NzU0MUI4NjgyRDUw
MDU0MjQ0MCAvKiBXQVNNRnVuY3Rpb25QYXJzZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk3QjAyNDc1OTFCODY4RUI3MDA1NDI0NDAgLyogV0FT
TUZ1bmN0aW9uU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0IwMjQ3NTgxQjg2OEVBRTAwNTQyNDQwIC8qIFdBU01GdW5jdGlvblN5
bnRheENoZWNrZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwotCQk3QjJFMDEwRTFCOTdBQTY5MDBFRjVENUMgLyogV0FTTUZ1bmN0aW9uQ29tcGlsZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCMkUwMTBE
MUI5N0FBNTgwMEVGNUQ1QyAvKiBXQVNNRnVuY3Rpb25Db21waWxlci5oICovOyB9OwotCQk3QjM5
Rjc2RDFCNjJERTJFMDAzNjBGQjQgLyogV0FTTU1vZHVsZVBhcnNlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QjM5Rjc2OTFCNjJERTIyMDAzNjBG
QjQgLyogV0FTTU1vZHVsZVBhcnNlci5jcHAgKi87IH07Ci0JCTdCMzlGNzZFMUI2MkRFMzIwMDM2
MEZCNCAvKiBXQVNNTW9kdWxlUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3QjM5Rjc2QTFCNjJERTIyMDAzNjBGQjQgLyogV0FTTU1vZHVsZVBh
cnNlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0J
CTdCMzlGNzcwMUI2MkRFMzIwMDM2MEZCNCAvKiBXQVNNUmVhZGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QjM5Rjc2QzFCNjJERTIyMDAzNjBGQjQg
LyogV0FTTVJlYWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07Ci0JCTdCMzlGNzcyMUI2MzU3NEQwMDM2MEZCNCAvKiBXQVNNUmVhZGVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCMzlGNzcxMUI2MzU3
NEIwMDM2MEZCNCAvKiBXQVNNUmVhZGVyLmNwcCAqLzsgfTsKLQkJN0I4MzI5QkYxQkIyMUZFMzAw
NjQ5QTZFIC8qIFdBU01GdW5jdGlvbkIzSVJHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCODMyOUJFMUJCMjFGRDEwMDY0OUE2RSAvKiBX
QVNNRnVuY3Rpb25CM0lSR2VuZXJhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0I5OEQxMzYxQjYwQ0Q1RjAwMjNCMUE0IC8qIEpTV0FTTU1v
ZHVsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
Qjk4RDEzNDFCNjBDRDVBMDAyM0IxQTQgLyogSlNXQVNNTW9kdWxlLmNwcCAqLzsgfTsKIAkJN0I5
OEQxMzcxQjYwQ0Q2MjAwMjNCMUE0IC8qIEpTV0FTTU1vZHVsZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0I5OEQxMzUxQjYwQ0Q1QTAwMjNCMUE0IC8q
IEpTV0FTTU1vZHVsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTdCQzU0N0QzMUI2OTU5QTEwMDk1OUI1OCAvKiBXQVNNRm9ybWF0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QkM1NDdEMjFCNjk1OTlC
MDA5NTlCNTggLyogV0FTTUZvcm1hdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC0xNzU4LDYgKzE3NDgsNyBAQAogCQlBNzkwREQ2RjE4MkY0OTk3
MDA1ODg4MDcgLyogSlNTZXRJdGVyYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBNzkwREQ2OTE4MkY0OTk3MDA1ODg4MDcgLyogSlNTZXRJdGVy
YXRvci5jcHAgKi87IH07CiAJCUE3OTBERDcwMTgyRjQ5OTcwMDU4ODgwNyAvKiBKU1NldEl0ZXJh
dG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzkw
REQ2QTE4MkY0OTk3MDA1ODg4MDcgLyogSlNTZXRJdGVyYXRvci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3OTg2RDU3MTdBMEJCMUUwMEE5NURE
MCAvKiBERkdFZGdlVXNlc1N0cnVjdHVyZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTc5ODZENTYxN0EwQkIxRTAwQTk1REQwIC8qIERGR0VkZ2VVc2Vz
U3RydWN0dXJlLmggKi87IH07CisJCUE3OUQzRUQ5QzUwNjRERDBBODQ2NkEzQSAvKiBNb2R1bGVT
Y29wZURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDAwMEJFQUYwREY2MDQ0ODFBRjZBQjY4QyAvKiBNb2R1bGVTY29wZURhdGEuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBN0E0QUUwODE3OTczQjI2
MDA1NjEyQjEgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBNEFFMDcxNzk3M0IyNjAwNTYxMkIxIC8q
IE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmNwcCAqLzsgfTsKIAkJQTdBOEFGMzQxN0FEQjVGMzAw
NUFCMTc0IC8qIEFycmF5QnVmZmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE3QThBRjI1MTdBREI1RjIwMDVBQjE3NCAvKiBBcnJheUJ1ZmZlci5j
cHAgKi87IH07CiAJCUE3QThBRjM1MTdBREI1RjMwMDVBQjE3NCAvKiBBcnJheUJ1ZmZlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBOEFGMjYxN0FE
QjVGMzAwNUFCMTc0IC8qIEFycmF5QnVmZmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIxMzAsNyArMjEyMSw2IEBACiAJCUZFRDk0RjJFMTcx
RTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGRUQ5NEYyQjE3MUUzRTIzMDBCRTc3QTQgLyogV2F0Y2hkb2cu
Y3BwICovOyB9OwogCQlGRUQ5NEYyRjE3MUUzRTIzMDBCRTc3QTQgLyogV2F0Y2hkb2cuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFRDk0RjJDMTcxRTNF
MjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUZFRjA0MDUxMUFBRTY2MkQwMEJEMjhCMCAvKiBDb21wYXJlQW5k
U3dhcFRlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkVGMDQwNTAxQUFFNjYyRDAwQkQyOEIwIC8qIENvbXBhcmVBbmRTd2FwVGVzdC5jcHAgKi87
IH07Ci0JCUE3OUQzRUQ5QzUwNjRERDBBODQ2NkEzQSAvKiBNb2R1bGVTY29wZURhdGEuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDAwMEJFQUYwREY2MDQ0
ODFBRjZBQjY4QyAvKiBNb2R1bGVTY29wZURhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogLyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCiAK
IC8qIEJlZ2luIFBCWENvbnRhaW5lckl0ZW1Qcm94eSBzZWN0aW9uICovCkBAIC0yMjc1LDYgKzIy
NjUsNyBAQAogLyogRW5kIFBCWENvcHlGaWxlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwogCiAvKiBC
ZWdpbiBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KKwkJMDAwQkVBRjBERjYwNDQ4MUFGNkFC
NjhDIC8qIE1vZHVsZVNjb3BlRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBNb2R1bGVTY29wZURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYwMTIz
MzAxOTQ0RUExQjAwODQzQTBDIC8qIERGR1ZhbHVlU3RyZW5ndGguY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHVmFsdWVTdHJlbmd0aC5jcHA7IHBhdGggPSBkZmcv
REZHVmFsdWVTdHJlbmd0aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMDEy
MzMxMTk0NEVBMUIwMDg0M0EwQyAvKiBERkdWYWx1ZVN0cmVuZ3RoLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR1ZhbHVlU3RyZW5ndGguaDsgcGF0aCA9IGRmZy9ERkdWYWx1
ZVN0cmVuZ3RoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMDMzMkJGMThBREZB
RTEwMDVGOTc5QSAvKiBFeGl0aW5nSklUVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBFeGl0aW5nSklUVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0zNTEzLDE2ICszNTA0LDYgQEAKIAkJNzlFRTBCRkUxQjRBRkI4NTAwMDM4NUM5IC8q
IFZhcmlhYmxlRW52aXJvbm1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VmFyaWFibGVFbnZpcm9ubWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OUY4
RkMxQzFCOUZFRDBGMDBDQTY2QUIgLyogREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTWF4aW1hbEZsdXNoSW5z
ZXJ0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR01heGltYWxGbHVzaEluc2VydGlvblBoYXNl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlGOEZDMUQxQjlGRUQwRjAwQ0E2
NkFCIC8qIERGR01heGltYWxGbHVzaEluc2VydGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR01heGltYWxGbHVzaEluc2VydGlvblBoYXNlLmg7IHBhdGggPSBk
ZmcvREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJN0IwMjQ3NTIxQjg2ODJENTAwNTQyNDQwIC8qIFdBU01Db25zdGFudHMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FTTUNvbnN0YW50cy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk3QjAyNDc1MzFCODY4MkQ1MDA1NDI0NDAgLyogV0FTTUZ1bmN0
aW9uUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdBU01G
dW5jdGlvblBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTdCMDI0NzU0
MUI4NjgyRDUwMDU0MjQ0MCAvKiBXQVNNRnVuY3Rpb25QYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV0FTTUZ1bmN0aW9uUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTdCMDI0NzU4MUI4NjhFQUUwMDU0MjQ0MCAvKiBXQVNNRnVuY3Rpb25TeW50
YXhDaGVja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdBU01GdW5jdGlv
blN5bnRheENoZWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0IyRTAxMEQx
Qjk3QUE1ODAwRUY1RDVDIC8qIFdBU01GdW5jdGlvbkNvbXBpbGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdBU01GdW5jdGlvbkNvbXBpbGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTdCMzlGNzY5MUI2MkRFMjIwMDM2MEZCNCAvKiBXQVNNTW9kdWxlUGFy
c2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdBU01Nb2R1bGVQ
YXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3QjM5Rjc2QTFCNjJERTIy
MDAzNjBGQjQgLyogV0FTTU1vZHVsZVBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXQVNNTW9kdWxlUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTdCMzlGNzZDMUI2MkRFMjIwMDM2MEZCNCAvKiBXQVNNUmVhZGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdBU01SZWFkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJN0IzOUY3NzExQjYzNTc0QjAwMzYwRkI0IC8qIFdBU01SZWFkZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0FTTVJlYWRlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTdCODMyOUJFMUJCMjFGRDEwMDY0OUE2RSAvKiBXQVNNRnVuY3Rp
b25CM0lSR2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdBU01G
dW5jdGlvbkIzSVJHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0I5
OEQxMzQxQjYwQ0Q1QTAwMjNCMUE0IC8qIEpTV0FTTU1vZHVsZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dBU01Nb2R1bGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3Qjk4RDEzNTFCNjBDRDVBMDAyM0IxQTQgLyogSlNXQVNNTW9kdWxlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV0FTTU1vZHVsZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3QkM1NDdEMjFCNjk1OTlCMDA5NTlCNTggLyogV0FTTUZv
cm1hdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXQVNNRm9ybWF0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NDE4LDcgKzQzOTksNiBAQAogCQlGRURBNTBE
NTFCOTdGNEQ5MDA5QTNCNEYgLyogUGluZ1BvbmdTdGFja092ZXJmbG93VGVzdC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQaW5nUG9uZ1N0YWNrT3ZlcmZsb3dUZXN0Lmg7IHBh
dGggPSBBUEkvdGVzdHMvUGluZ1BvbmdTdGFja092ZXJmbG93VGVzdC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlGRUYwNDA1MDFBQUU2NjJEMDBCRDI4QjAgLyogQ29tcGFyZUFuZFN3
YXBUZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENvbXBhcmVB
bmRTd2FwVGVzdC5jcHA7IHBhdGggPSBBUEkvdGVzdHMvQ29tcGFyZUFuZFN3YXBUZXN0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVGMDQwNTIxQUFFQzRFRDAwQkQyOEIwIC8q
IENvbXBhcmVBbmRTd2FwVGVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBD
b21wYXJlQW5kU3dhcFRlc3QuaDsgcGF0aCA9IEFQSS90ZXN0cy9Db21wYXJlQW5kU3dhcFRlc3Qu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDAwQkVBRjBERjYwNDQ4MUFGNkFCNjhD
IC8qIE1vZHVsZVNjb3BlRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBN
b2R1bGVTY29wZURhdGEuaDsgcGF0aCA9IE1vZHVsZVNjb3BlRGF0YS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogLyogRW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwogCiAvKiBC
ZWdpbiBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZSBzZWN0aW9uICovCkBAIC01NTIxLDE3ICs1NTAx
LDcgQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCTdCOThEMTM0MUI2MENENUEwMDIzQjFBNCAvKiBK
U1dBU01Nb2R1bGUuY3BwICovLAogCQkJCTdCOThEMTM1MUI2MENENUEwMDIzQjFBNCAvKiBKU1dB
U01Nb2R1bGUuaCAqLywKLQkJCQk3QjAyNDc1MjFCODY4MkQ1MDA1NDI0NDAgLyogV0FTTUNvbnN0
YW50cy5oICovLAogCQkJCTdCQzU0N0QyMUI2OTU5OUIwMDk1OUI1OCAvKiBXQVNNRm9ybWF0Lmgg
Ki8sCi0JCQkJN0IyRTAxMEQxQjk3QUE1ODAwRUY1RDVDIC8qIFdBU01GdW5jdGlvbkNvbXBpbGVy
LmggKi8sCi0JCQkJN0I4MzI5QkUxQkIyMUZEMTAwNjQ5QTZFIC8qIFdBU01GdW5jdGlvbkIzSVJH
ZW5lcmF0b3IuaCAqLywKLQkJCQk3QjAyNDc1MzFCODY4MkQ1MDA1NDI0NDAgLyogV0FTTUZ1bmN0
aW9uUGFyc2VyLmNwcCAqLywKLQkJCQk3QjAyNDc1NDFCODY4MkQ1MDA1NDI0NDAgLyogV0FTTUZ1
bmN0aW9uUGFyc2VyLmggKi8sCi0JCQkJN0IwMjQ3NTgxQjg2OEVBRTAwNTQyNDQwIC8qIFdBU01G
dW5jdGlvblN5bnRheENoZWNrZXIuaCAqLywKLQkJCQk3QjM5Rjc2OTFCNjJERTIyMDAzNjBGQjQg
LyogV0FTTU1vZHVsZVBhcnNlci5jcHAgKi8sCi0JCQkJN0IzOUY3NkExQjYyREUyMjAwMzYwRkI0
IC8qIFdBU01Nb2R1bGVQYXJzZXIuaCAqLywKLQkJCQk3QjM5Rjc3MTFCNjM1NzRCMDAzNjBGQjQg
LyogV0FTTVJlYWRlci5jcHAgKi8sCi0JCQkJN0IzOUY3NkMxQjYyREUyMjAwMzYwRkI0IC8qIFdB
U01SZWFkZXIuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gd2FzbTsKIAkJCXNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7CkBAIC04MTkwLDE2ICs4MTYwLDkgQEAKIAkJCQlCQzE4QzQyMDBFMTZGNUNEMDBC
MzQ0NjAgLyogVk0uaCBpbiBIZWFkZXJzICovLAogCQkJCTY1OEQzQTU2MTk2MzgyNjgwMDNDNDVE
NiAvKiBWTUVudHJ5UmVjb3JkLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTU5MzJBODE4M0M1QTI2
MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmggaW4gSGVhZGVycyAqLywKLQkJCQk3QjAyNDc1NTFC
ODY4MkREMDA1NDI0NDAgLyogV0FTTUNvbnN0YW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0JD
NTQ3RDMxQjY5NTlBMTAwOTU5QjU4IC8qIFdBU01Gb3JtYXQuaCBpbiBIZWFkZXJzICovLAotCQkJ
CTdCMkUwMTBFMUI5N0FBNjkwMEVGNUQ1QyAvKiBXQVNNRnVuY3Rpb25Db21waWxlci5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJN0I4MzI5QkYxQkIyMUZFMzAwNjQ5QTZFIC8qIFdBU01GdW5jdGlvbkIz
SVJHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAotCQkJCTdCMDI0NzU3MUI4NjgyRTQwMDU0MjQ0
MCAvKiBXQVNNRnVuY3Rpb25QYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNkI4QUREMUM0
RUZBQzMwMDk2OTA1MiAvKiBCM1NTQUNhbGN1bGF0b3IuaCBpbiBIZWFkZXJzICovLAotCQkJCTdC
MDI0NzU5MUI4NjhFQjcwMDU0MjQ0MCAvKiBXQVNNRnVuY3Rpb25TeW50YXhDaGVja2VyLmggaW4g
SGVhZGVycyAqLywKLQkJCQk3QjM5Rjc2RTFCNjJERTMyMDAzNjBGQjQgLyogV0FTTU1vZHVsZVBh
cnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkJEOUExQzVGRjNGNTAwMjNFRjIzIC8qIEIz
VmFyaWFibGVWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJN0IzOUY3NzAxQjYyREUzMjAwMzYw
RkI0IC8qIFdBU01SZWFkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFRDk0RjJGMTcxRTNFMjMw
MEJFNzdBNCAvKiBXYXRjaGRvZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MTlEMjYxNTg1M0NF
MzAwNEE0RTdEIC8qIFdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MkUzMTNDMTM0
RkYwQTYwMEFGQURCNSAvKiBXZWFrLmggaW4gSGVhZGVycyAqLywKQEAgLTk0OTYsMTAgKzk0NTks
NyBAQAogCQkJCTBGMjBDMjU5MUE4MDEzQUIwMERBMzIyOSAvKiBWaXJ0dWFsUmVnaXN0ZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJRTE4RTNBNTkwREY5Mjc4QzAwRDkwQjM0IC8qIFZNLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUZFNTkzMkE3MTgzQzVBMjYwMEExRUNDQyAvKiBWTUVudHJ5U2Nv
cGUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJN0IwMjQ3NTYxQjg2ODJFMTAwNTQyNDQwIC8qIFdB
U01GdW5jdGlvblBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRTE4N0EwMTFCRkJFNTVF
MDAzOEJCQ0EgLyogSklUTXVsR2VuZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTdCMzlG
NzZEMUI2MkRFMkUwMDM2MEZCNCAvKiBXQVNNTW9kdWxlUGFyc2VyLmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCTdCMzlGNzcyMUI2MzU3NEQwMDM2MEZCNCAvKiBXQVNNUmVhZGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTI2NzE4QkE0MUJFOTlGNzgwMDUyMDE3QiAvKiBBaXJJdGVyYXRlZFJlZ2lz
dGVyQ29hbGVzY2luZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRUQ5NEYyRTE3MUUzRTIzMDBC
RTc3QTQgLyogV2F0Y2hkb2cuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MTlEMjUxNTg1M0NF
MDAwNEE0RTdEIC8qIFdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAppbmRleCA0MmY2ZTQ3YTk0YWIxODQyOTA1
MzE4NDZkYjZkNjczZTFkYzcwMDdlLi43YWQxNTIyYTVkNTlmZWVjNzUzZGQ2MWQ4Yzg0ZGI5MzQx
NDA5MTg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlv
bnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAK
QEAgLTg4MCw3ICs4ODAsNiBAQCBTbG93UGF0aFJldHVyblR5cGUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25MaW5rQ2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIENhbGxMaQogI2lmIEVOQUJMRShX
RUJBU1NFTUJMWSkKICAgICB9IGVsc2UgaWYgKGV4ZWN1dGFibGUtPmlzV2ViQXNzZW1ibHlFeGVj
dXRhYmxlKCkpIHsKICAgICAgICAgV2ViQXNzZW1ibHlFeGVjdXRhYmxlKiB3ZWJBc3NlbWJseUV4
ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxXZWJBc3NlbWJseUV4ZWN1dGFibGUqPihleGVjdXRhYmxl
KTsKLSAgICAgICAgd2ViQXNzZW1ibHlFeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uKGV4
ZWNDYWxsZWUpOwogICAgICAgICBjb2RlQmxvY2sgPSB3ZWJBc3NlbWJseUV4ZWN1dGFibGUtPmNv
ZGVCbG9ja0ZvckNhbGwoKTsKICAgICAgICAgQVNTRVJUKGNvZGVCbG9jayk7CiAgICAgICAgIEFy
aXR5Q2hlY2tNb2RlIGFyaXR5OwpAQCAtOTY5LDkgKzk2OCw2IEBAIGlubGluZSBTbG93UGF0aFJl
dHVyblR5cGUgdmlydHVhbEZvcldpdGhGdW5jdGlvbigKICAgICAgICAgICAgICAgICAgICAgdm0t
PmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2Rl
KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IFdlYkFzc2VtYmx5RXhlY3V0YWJsZSogd2ViQXNzZW1ibHlFeGVjdXRhYmxlID0gc3RhdGljX2Nh
c3Q8V2ViQXNzZW1ibHlFeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7Ci0gICAgICAgICAgICB3ZWJB
c3NlbWJseUV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb24oZXhlY0NhbGxlZSk7CiAjZW5k
aWYKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
c2MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKaW5kZXggNTA4ZmE2ZWI2Y2Iz
OWU2MmJkMGFhMzY5YWFjMTYzZWI4NGJiNzM5Mi4uZWNkMmQyNTRmMDlhZTA2Yjk0NGMzNjhjMTVm
ODdhNTU5Y2VkMTk4OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKQEAgLTYxLDcgKzYxLDYgQEAKICNp
bmNsdWRlICJTdXBlclNhbXBsZXIuaCIKICNpbmNsdWRlICJUZXN0UnVubmVyVXRpbHMuaCIKICNp
bmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKLSNpbmNsdWRlICJXQVNNTW9kdWxlUGFyc2VyLmgi
CiAjaW5jbHVkZSA8bG9jYWxlLmg+CiAjaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgPHN0ZGlv
Lmg+CkBAIC02MjQsOSArNjIzLDYgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuY3Rpb25CYXNpY0Jsb2NrRXhlY3V0aW9uQ291bnQoRXhlY1N0YXRlKikKIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRW5hYmxlRXhjZXB0aW9uRnV6eihF
eGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
RHJhaW5NaWNyb3Rhc2tzKEV4ZWNTdGF0ZSopOwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25JczMyQml0UGxhdGZvcm0oRXhlY1N0YXRlKik7Ci0jaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rp
b25Mb2FkV2ViQXNzZW1ibHkoRXhlY1N0YXRlKik7Ci0jZW5kaWYKIHN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTG9hZE1vZHVsZShFeGVjU3RhdGUqKTsKIHN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ2hlY2tNb2R1bGVTeW50YXgo
RXhlY1N0YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlv
blBsYXRmb3JtU3VwcG9ydHNTYW1wbGluZ1Byb2ZpbGVyKEV4ZWNTdGF0ZSopOwpAQCAtODUzLDkg
Kzg0OSw2IEBAIHByb3RlY3RlZDoKIAogICAgICAgICBhZGRGdW5jdGlvbih2bSwgImlzMzJCaXRQ
bGF0Zm9ybSIsIGZ1bmN0aW9uSXMzMkJpdFBsYXRmb3JtLCAwKTsKIAotI2lmIEVOQUJMRShXRUJB
U1NFTUJMWSkKLSAgICAgICAgYWRkRnVuY3Rpb24odm0sICJsb2FkV2ViQXNzZW1ibHkiLCBmdW5j
dGlvbkxvYWRXZWJBc3NlbWJseSwgMyk7Ci0jZW5kaWYKICAgICAgICAgYWRkRnVuY3Rpb24odm0s
ICJsb2FkTW9kdWxlIiwgZnVuY3Rpb25Mb2FkTW9kdWxlLCAxKTsKICAgICAgICAgYWRkRnVuY3Rp
b24odm0sICJjaGVja01vZHVsZVN5bnRheCIsIGZ1bmN0aW9uQ2hlY2tNb2R1bGVTeW50YXgsIDEp
OwogCkBAIC0xNzgxLDI4ICsxNzc0LDYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvbklzMzJCaXRQbGF0Zm9ybShFeGVjU3RhdGUqKQogI2VuZGlmCiB9CiAKLSNpZiBFTkFC
TEUoV0VCQVNTRU1CTFkpCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTG9h
ZFdlYkFzc2VtYmx5KEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBTdHJpbmcgZmlsZU5hbWUgPSBl
eGVjLT5hcmd1bWVudCgwKS50b1dURlN0cmluZyhleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
Ci0gICAgVmVjdG9yPGNoYXI+IGJ1ZmZlcjsKLSAgICBpZiAoIWZpbGxCdWZmZXJXaXRoQ29udGVu
dHNPZkZpbGUoZmlsZU5hbWUsIGJ1ZmZlcikpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVFcnJvcihleGVjLCBBU0NJ
SUxpdGVyYWwoIkNvdWxkIG5vdCBvcGVuIGZpbGUuIikpKSk7Ci0gICAgUmVmUHRyPFdlYkFzc2Vt
Ymx5U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyID0gV2ViQXNzZW1ibHlTb3VyY2VQcm92
aWRlcjo6Y3JlYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8VmVjdG9yPHVpbnQ4X3Q+Jj4oYnVmZmVyKSwg
ZmlsZU5hbWUpOwotICAgIFNvdXJjZUNvZGUgc291cmNlKHNvdXJjZVByb3ZpZGVyKTsKLSAgICBK
U09iamVjdCogaW1wb3J0cyA9IGV4ZWMtPmFyZ3VtZW50KDEpLmdldE9iamVjdCgpOwotICAgIEpT
QXJyYXlCdWZmZXIqIGFycmF5QnVmZmVyID0ganNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVyKj4o
ZXhlYy0+YXJndW1lbnQoMikpOwotCi0gICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKLSAgICBKU1dB
U01Nb2R1bGUqIG1vZHVsZSA9IHBhcnNlV2ViQXNzZW1ibHkoZXhlYywgc291cmNlLCBpbXBvcnRz
LCBhcnJheUJ1ZmZlciwgZXJyb3JNZXNzYWdlKTsKLSAgICBpZiAoIW1vZHVsZSkKLSAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNy
ZWF0ZVN5bnRheEVycm9yKGV4ZWMsIGVycm9yTWVzc2FnZSkpKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKG1vZHVsZSk7Ci19Ci0jZW5kaWYKLQogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBmdW5jdGlvbkxvYWRNb2R1bGUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFN0cmluZyBm
aWxlTmFtZSA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKGV4ZWMpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKaW5kZXggZDI4YTUyZGJl
NTc1M2Y2YzhkOWYzZjM3NzU5ODEzZDU5MGJjNWQ3Mi4uODhiMmJkNTlkODIxNmEwMDMxMTFkNDVh
NGE0ZGE2ODY1N2VjODkxYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xMSW50U2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJ
bnRTbG93UGF0aHMuY3BwCkBAIC0xMjgwLDcgKzEyODAsNiBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1
cm5UeXBlIHNldFVwQ2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIEluc3RydWN0aW9uKiBwYywg
Q29kZQogICAgIH0gZWxzZSB7CiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogICAgICAgICBXZWJB
c3NlbWJseUV4ZWN1dGFibGUqIHdlYkFzc2VtYmx5RXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PFdl
YkFzc2VtYmx5RXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwotICAgICAgICB3ZWJBc3NlbWJseUV4
ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb24oZXhlY0NhbGxlZSk7CiAgICAgICAgIGNvZGVC
bG9jayA9IHdlYkFzc2VtYmx5RXhlY3V0YWJsZS0+Y29kZUJsb2NrRm9yQ2FsbCgpOwogICAgICAg
ICBBU1NFUlQoY29kZUJsb2NrKTsKICAgICAgICAgQXJpdHlDaGVja01vZGUgYXJpdHk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCmluZGV4IDA2YTBlNzU3
YjEzMTA5ZDhmYWQyNmRiN2M2NTcyMjQyMjVkY2RlMDQuLjdmMzBiN2YzYjE1OWZlM2UyNTRmZjk5
YzcxOGFhYzcwZjM1ZTIyYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0V4ZWN1dGFibGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4
ZWN1dGFibGUuY3BwCkBAIC0zNyw3ICszNyw2IEBACiAjaW5jbHVkZSAiUHJvZmlsZXJEYXRhYmFz
ZS5oIgogI2luY2x1ZGUgIlR5cGVQcm9maWxlci5oIgogI2luY2x1ZGUgIlZNSW5saW5lcy5oIgot
I2luY2x1ZGUgIldBU01GdW5jdGlvblBhcnNlci5oIgogI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50
ZXIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
QnVpbGRlci5oPgpAQCAtNzY0LDI4ICs3NjMsNiBAQCB2b2lkIFdlYkFzc2VtYmx5RXhlY3V0YWJs
ZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAg
ICAgICB0aGlzT2JqZWN0LT5tX2NvZGVCbG9ja0ZvckNhbGwtPnZpc2l0V2Vha2x5KHZpc2l0b3Ip
OwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX21vZHVsZSk7CiB9Ci0KLXZvaWQg
V2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpwcmVwYXJlRm9yRXhlY3V0aW9uKEV4ZWNTdGF0ZSogZXhl
YykKLXsKLSAgICBpZiAoaGFzSklUQ29kZUZvckNhbGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0K
LSAgICBXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrID0gV2ViQXNzZW1ibHlDb2RlQmxv
Y2s6OmNyZWF0ZSgmdm0sCi0gICAgICAgIHRoaXMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KSk7Ci0KLSAgICBXQVNNRnVuY3Rpb25QYXJzZXI6OmNvbXBpbGUodm0sIGNvZGVCbG9jaywgbV9t
b2R1bGUuZ2V0KCksIG1fc291cmNlLCBtX2Z1bmN0aW9uSW5kZXgpOwotCi0gICAgbV9qaXRDb2Rl
Rm9yQ2FsbCA9IGNvZGVCbG9jay0+aml0Q29kZSgpOwotICAgIG1faml0Q29kZUZvckNhbGxXaXRo
QXJpdHlDaGVjayA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpOwotICAgIG1fbnVtUGFyYW1ldGVy
c0ZvckNhbGwgPSBjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsKLQotICAgIG1fY29kZUJsb2Nr
Rm9yQ2FsbC5zZXQodm0sIHRoaXMsIGNvZGVCbG9jayk7Ci0KLSAgICBIZWFwOjpoZWFwKHRoaXMp
LT53cml0ZUJhcnJpZXIodGhpcyk7Ci19CiAjZW5kaWYKIAogdm9pZCBFeGVjdXRhYmxlQmFzZTo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCmluZGV4IDdiMmYyNGZjMDhmNGU3YjI1NGViY2M3
YzQwYTQ0NmIxZmU5ZDZhZjEuLjgxOTI4ZDIwYzU4MTAwYWE5NTg5NmRhMTBiMGIwOWVlNWJjOWVj
NTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dC5jcHAKQEAgLTUxMiwxMCArNTEyLDYgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6aW5pdChWTSYg
dm0pCiAgICAgICAgIG1fY2FsbGFibGVQcm94eU9iamVjdFN0cnVjdHVyZS5zZXQodm0sIHRoaXMs
IFByb3h5T2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMsIG1fb2JqZWN0UHJvdG90eXBl
LmdldCgpLCBpc0NhbGxhYmxlKSk7CiAgICAgfQogICAgIG1fcHJveHlSZXZva2VTdHJ1Y3R1cmUu
c2V0KHZtLCB0aGlzLCBQcm94eVJldm9rZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCBtX2Z1
bmN0aW9uUHJvdG90eXBlLmdldCgpKSk7Ci0gICAgCi0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQot
ICAgIG1fd2FzbU1vZHVsZVN0cnVjdHVyZS5zZXQodm0sIHRoaXMsIEpTV0FTTU1vZHVsZTo6Y3Jl
YXRlU3RydWN0dXJlKHZtLCB0aGlzKSk7Ci0jZW5kaWYKIAogICAgIG1fcGFyc2VJbnRGdW5jdGlv
bi5zZXQodm0sIHRoaXMsIEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgdGhpcywgMiwgdm0ucHJvcGVy
dHlOYW1lcy0+cGFyc2VJbnQuc3RyaW5nKCksIGdsb2JhbEZ1bmNQYXJzZUludCwgTm9JbnRyaW5z
aWMpKTsKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1l
cy0+cGFyc2VJbnQsIG1fcGFyc2VJbnRGdW5jdGlvbi5nZXQoKSwgRG9udEVudW0pOwpAQCAtMTEw
MCw5ICsxMDk2LDYgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2Jq
ZWN0LT5tX3Byb3h5T2JqZWN0U3RydWN0dXJlKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09i
amVjdC0+bV9jYWxsYWJsZVByb3h5T2JqZWN0U3RydWN0dXJlKTsKICAgICB2aXNpdG9yLmFwcGVu
ZCgmdGhpc09iamVjdC0+bV9wcm94eVJldm9rZVN0cnVjdHVyZSk7Ci0jaWYgRU5BQkxFKFdFQkFT
U0VNQkxZKQotICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3dhc21Nb2R1bGVTdHJ1
Y3R1cmUpOwotI2VuZGlmCiAKICNkZWZpbmUgVklTSVRfU0lNUExFX1RZUEUoQ2FwaXRhbE5hbWUs
IGxvd2VyTmFtZSwgcHJvcGVyTmFtZSwgaW5zdGFuY2VUeXBlLCBqc05hbWUpIFwKICAgICB2aXNp
dG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV8gIyMgbG93ZXJOYW1lICMjIFByb3RvdHlwZSk7IFwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCmluZGV4
IGJlODk4OWZkN2Y0MGExNGQwNDZmZTFmY2IxOGUwYjMzOWFjMzFkNDUuLjU0N2M4MzI2ZmI2YjRh
NzEwNzMwNDBiNWQ3YWZhNzE5ZGVjOWJmYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaApAQCAtMzA3LDkgKzMwNyw2IEBAIHB1YmxpYzoKICAg
ICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3Byb3h5T2JqZWN0U3RydWN0dXJlOwogICAgIFdy
aXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fY2FsbGFibGVQcm94eU9iamVjdFN0cnVjdHVyZTsKICAg
ICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3Byb3h5UmV2b2tlU3RydWN0dXJlOwotI2lmIEVO
QUJMRShXRUJBU1NFTUJMWSkKLSAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3dhc21Nb2R1
bGVTdHJ1Y3R1cmU7Ci0jZW5kaWYKIAogI2RlZmluZSBERUZJTkVfU1RPUkFHRV9GT1JfU0lNUExF
X1RZUEUoY2FwaXRhbE5hbWUsIGxvd2VyTmFtZSwgcHJvcGVyTmFtZSwgaW5zdGFuY2VUeXBlLCBq
c05hbWUpIFwKICAgICBXcml0ZUJhcnJpZXI8Y2FwaXRhbE5hbWUgIyMgUHJvdG90eXBlPiBtXyAj
IyBsb3dlck5hbWUgIyMgUHJvdG90eXBlOyBcCkBAIC01ODMsOSArNTgwLDYgQEAgcHVibGljOgog
ICAgIFN0cnVjdHVyZSogcHJveHlPYmplY3RTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3By
b3h5T2JqZWN0U3RydWN0dXJlLmdldCgpOyB9CiAgICAgU3RydWN0dXJlKiBjYWxsYWJsZVByb3h5
T2JqZWN0U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsYWJsZVByb3h5T2JqZWN0U3Ry
dWN0dXJlLmdldCgpOyB9CiAgICAgU3RydWN0dXJlKiBwcm94eVJldm9rZVN0cnVjdHVyZSgpIGNv
bnN0IHsgcmV0dXJuIG1fcHJveHlSZXZva2VTdHJ1Y3R1cmUuZ2V0KCk7IH0KLSNpZiBFTkFCTEUo
V0VCQVNTRU1CTFkpCi0gICAgU3RydWN0dXJlKiB3YXNtTW9kdWxlU3RydWN0dXJlKCkgY29uc3Qg
eyByZXR1cm4gbV93YXNtTW9kdWxlU3RydWN0dXJlLmdldCgpOyB9Ci0jZW5kaWYKIAogICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0UmVtb3RlRGVidWdnaW5nRW5hYmxlZChib29sKTsKICAg
ICBKU19FWFBPUlRfUFJJVkFURSBib29sIHJlbW90ZURlYnVnZ2luZ0VuYWJsZWQoKSBjb25zdDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01Db25zdGFudHMuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01Db25zdGFudHMuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNGUzYmQ0NDNmNTViODQ4ZTE1YzM3YzEyZmQ2YjA1ZjlmMmYxMzUz
OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNQ29uc3RhbnRzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwz
MjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAq
ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTUgYnkgdGhlIHJlcG9z
aXRvcnkgYXV0aG9ycyBvZgotICogV2ViQXNzZW1ibHkvcG9seWZpbGwtcHJvdG90eXBlLTEuCi0g
KgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhl
ICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21w
bGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhl
IExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJ
Q0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFn
cmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExp
Y2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FS
UkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBs
aWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJu
aW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0g
Ki8KLQotI2lmbmRlZiBXQVNNQ29uc3RhbnRzX2gKLSNkZWZpbmUgV0FTTUNvbnN0YW50c19oCi0K
LSNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0KLW5hbWVzcGFjZSBKU0MgewotCi1zdGF0aWMgY29u
c3QgdWludDMyX3Qgd2FzbU1hZ2ljTnVtYmVyID0gMHg2ZDczNjE3NzsKLQotZW51bSBjbGFzcyBX
QVNNT3BLaW5kIHsKLSAgICBTdGF0ZW1lbnQsCi0gICAgRXhwcmVzc2lvbgotfTsKLQotZW51bSBj
bGFzcyBXQVNNT3BTdGF0ZW1lbnQgOiB1aW50OF90IHsKLSAgICBTZXRMb2NhbCwKLSAgICBTZXRH
bG9iYWwsCi0gICAgSTMyU3RvcmU4LAotICAgIEkzMlN0b3JlV2l0aE9mZnNldDgsCi0gICAgSTMy
U3RvcmUxNiwKLSAgICBJMzJTdG9yZVdpdGhPZmZzZXQxNiwKLSAgICBJMzJTdG9yZTMyLAotICAg
IEkzMlN0b3JlV2l0aE9mZnNldDMyLAotICAgIEYzMlN0b3JlLAotICAgIEYzMlN0b3JlV2l0aE9m
ZnNldCwKLSAgICBGNjRTdG9yZSwKLSAgICBGNjRTdG9yZVdpdGhPZmZzZXQsCi0gICAgQ2FsbElu
dGVybmFsLAotICAgIENhbGxJbmRpcmVjdCwKLSAgICBDYWxsSW1wb3J0LAotICAgIFJldHVybiwK
LSAgICBCbG9jaywKLSAgICBJZiwKLSAgICBJZkVsc2UsCi0gICAgV2hpbGUsCi0gICAgRG8sCi0g
ICAgTGFiZWwsCi0gICAgQnJlYWssCi0gICAgQnJlYWtMYWJlbCwKLSAgICBDb250aW51ZSwKLSAg
ICBDb250aW51ZUxhYmVsLAotICAgIFN3aXRjaCwKLSAgICBOdW1iZXJPZldBU01PcFN0YXRlbWVu
dHMKLX07Ci0KLWVudW0gY2xhc3MgV0FTTU9wU3RhdGVtZW50V2l0aEltbWVkaWF0ZSA6IHVpbnQ4
X3QgewotICAgIFNldExvY2FsLAotICAgIFNldEdsb2JhbCwKLSAgICBOdW1iZXJPZldBU01PcFN0
YXRlbWVudFdpdGhJbW1lZGlhdGVzCi19OwotCi1lbnVtIGNsYXNzIFdBU01PcEV4cHJlc3Npb25J
MzIgOiB1aW50OF90IHsKLSAgICBDb25zdGFudFBvb2xJbmRleCwKLSAgICBJbW1lZGlhdGUsCi0g
ICAgR2V0TG9jYWwsCi0gICAgR2V0R2xvYmFsLAotICAgIFNldExvY2FsLAotICAgIFNldEdsb2Jh
bCwKLSAgICBTTG9hZDgsCi0gICAgU0xvYWRXaXRoT2Zmc2V0OCwKLSAgICBVTG9hZDgsCi0gICAg
VUxvYWRXaXRoT2Zmc2V0OCwKLSAgICBTTG9hZDE2LAotICAgIFNMb2FkV2l0aE9mZnNldDE2LAot
ICAgIFVMb2FkMTYsCi0gICAgVUxvYWRXaXRoT2Zmc2V0MTYsCi0gICAgTG9hZDMyLAotICAgIExv
YWRXaXRoT2Zmc2V0MzIsCi0gICAgU3RvcmU4LAotICAgIFN0b3JlV2l0aE9mZnNldDgsCi0gICAg
U3RvcmUxNiwKLSAgICBTdG9yZVdpdGhPZmZzZXQxNiwKLSAgICBTdG9yZTMyLAotICAgIFN0b3Jl
V2l0aE9mZnNldDMyLAotICAgIENhbGxJbnRlcm5hbCwKLSAgICBDYWxsSW5kaXJlY3QsCi0gICAg
Q2FsbEltcG9ydCwKLSAgICBDb25kaXRpb25hbCwKLSAgICBDb21tYSwKLSAgICBGcm9tRjMyLAot
ICAgIEZyb21GNjQsCi0gICAgTmVnYXRlLAotICAgIEFkZCwKLSAgICBTdWIsCi0gICAgTXVsLAot
ICAgIFNEaXYsCi0gICAgVURpdiwKLSAgICBTTW9kLAotICAgIFVNb2QsCi0gICAgQml0Tm90LAot
ICAgIEJpdE9yLAotICAgIEJpdEFuZCwKLSAgICBCaXRYb3IsCi0gICAgTGVmdFNoaWZ0LAotICAg
IEFyaXRobWV0aWNSaWdodFNoaWZ0LAotICAgIExvZ2ljYWxSaWdodFNoaWZ0LAotICAgIENvdW50
TGVhZGluZ1plcm9zLAotICAgIExvZ2ljYWxOb3QsCi0gICAgRXF1YWxJMzIsCi0gICAgRXF1YWxG
MzIsCi0gICAgRXF1YWxGNjQsCi0gICAgTm90RXF1YWxJMzIsCi0gICAgTm90RXF1YWxGMzIsCi0g
ICAgTm90RXF1YWxGNjQsCi0gICAgU0xlc3NUaGFuSTMyLAotICAgIFVMZXNzVGhhbkkzMiwKLSAg
ICBMZXNzVGhhbkYzMiwKLSAgICBMZXNzVGhhbkY2NCwKLSAgICBTTGVzc1RoYW5PckVxdWFsSTMy
LAotICAgIFVMZXNzVGhhbk9yRXF1YWxJMzIsCi0gICAgTGVzc1RoYW5PckVxdWFsRjMyLAotICAg
IExlc3NUaGFuT3JFcXVhbEY2NCwKLSAgICBTR3JlYXRlclRoYW5JMzIsCi0gICAgVUdyZWF0ZXJU
aGFuSTMyLAotICAgIEdyZWF0ZXJUaGFuRjMyLAotICAgIEdyZWF0ZXJUaGFuRjY0LAotICAgIFNH
cmVhdGVyVGhhbk9yRXF1YWxJMzIsCi0gICAgVUdyZWF0ZXJUaGFuT3JFcXVhbEkzMiwKLSAgICBH
cmVhdGVyVGhhbk9yRXF1YWxGMzIsCi0gICAgR3JlYXRlclRoYW5PckVxdWFsRjY0LAotICAgIFNN
aW4sCi0gICAgVU1pbiwKLSAgICBTTWF4LAotICAgIFVNYXgsCi0gICAgQWJzLAotICAgIE51bWJl
ck9mV0FTTU9wRXhwcmVzc2lvbkkzMnMKLX07Ci0KLWVudW0gY2xhc3MgV0FTTU9wRXhwcmVzc2lv
bkkzMldpdGhJbW1lZGlhdGUgOiB1aW50OF90IHsKLSAgICBDb25zdGFudFBvb2xJbmRleCwKLSAg
ICBJbW1lZGlhdGUsCi0gICAgR2V0TG9jYWwsCi0gICAgTnVtYmVyT2ZXQVNNT3BFeHByZXNzaW9u
STMyV2l0aEltbWVkaWF0ZXMKLX07Ci0KLWVudW0gY2xhc3MgV0FTTU9wRXhwcmVzc2lvbkYzMiA6
IHVpbnQ4X3QgewotICAgIENvbnN0YW50UG9vbEluZGV4LAotICAgIEltbWVkaWF0ZSwKLSAgICBH
ZXRMb2NhbCwKLSAgICBHZXRHbG9iYWwsCi0gICAgU2V0TG9jYWwsCi0gICAgU2V0R2xvYmFsLAot
ICAgIExvYWQsCi0gICAgTG9hZFdpdGhPZmZzZXQsCi0gICAgU3RvcmUsCi0gICAgU3RvcmVXaXRo
T2Zmc2V0LAotICAgIENhbGxJbnRlcm5hbCwKLSAgICBDYWxsSW5kaXJlY3QsCi0gICAgQ29uZGl0
aW9uYWwsCi0gICAgQ29tbWEsCi0gICAgRnJvbVMzMiwKLSAgICBGcm9tVTMyLAotICAgIEZyb21G
NjQsCi0gICAgTmVnYXRlLAotICAgIEFkZCwKLSAgICBTdWIsCi0gICAgTXVsLAotICAgIERpdiwK
LSAgICBBYnMsCi0gICAgQ2VpbCwKLSAgICBGbG9vciwKLSAgICBTcXJ0LAotICAgIE51bWJlck9m
V0FTTU9wRXhwcmVzc2lvbkYzMnMKLX07Ci0KLWVudW0gY2xhc3MgV0FTTU9wRXhwcmVzc2lvbkYz
MldpdGhJbW1lZGlhdGUgOiB1aW50OF90IHsKLSAgICBDb25zdGFudFBvb2xJbmRleCwKLSAgICBH
ZXRMb2NhbCwKLSAgICBOdW1iZXJPZldBU01PcEV4cHJlc3Npb25GMzJXaXRoSW1tZWRpYXRlcwot
fTsKLQotZW51bSBjbGFzcyBXQVNNT3BFeHByZXNzaW9uRjY0IDogdWludDhfdCB7Ci0gICAgQ29u
c3RhbnRQb29sSW5kZXgsCi0gICAgSW1tZWRpYXRlLAotICAgIEdldExvY2FsLAotICAgIEdldEds
b2JhbCwKLSAgICBTZXRMb2NhbCwKLSAgICBTZXRHbG9iYWwsCi0gICAgTG9hZCwKLSAgICBMb2Fk
V2l0aE9mZnNldCwKLSAgICBTdG9yZSwKLSAgICBTdG9yZVdpdGhPZmZzZXQsCi0gICAgQ2FsbElu
dGVybmFsLAotICAgIENhbGxJbmRpcmVjdCwKLSAgICBDYWxsSW1wb3J0LAotICAgIENvbmRpdGlv
bmFsLAotICAgIENvbW1hLAotICAgIEZyb21TMzIsCi0gICAgRnJvbVUzMiwKLSAgICBGcm9tRjMy
LAotICAgIE5lZ2F0ZSwKLSAgICBBZGQsCi0gICAgU3ViLAotICAgIE11bCwKLSAgICBEaXYsCi0g
ICAgTW9kLAotICAgIE1pbiwKLSAgICBNYXgsCi0gICAgQWJzLAotICAgIENlaWwsCi0gICAgRmxv
b3IsCi0gICAgU3FydCwKLSAgICBDb3MsCi0gICAgU2luLAotICAgIFRhbiwKLSAgICBBQ29zLAot
ICAgIEFTaW4sCi0gICAgQVRhbiwKLSAgICBBVGFuMiwKLSAgICBFeHAsCi0gICAgTG4sCi0gICAg
UG93LAotICAgIE51bWJlck9mV0FTTU9wRXhwcmVzc2lvbkY2NHMKLX07Ci0KLWVudW0gY2xhc3Mg
V0FTTU9wRXhwcmVzc2lvbkY2NFdpdGhJbW1lZGlhdGUgOiB1aW50OF90IHsKLSAgICBDb25zdGFu
dFBvb2xJbmRleCwKLSAgICBHZXRMb2NhbCwKLSAgICBOdW1iZXJPZldBU01PcEV4cHJlc3Npb25G
NjRXaXRoSW1tZWRpYXRlcwotfTsKLQotZW51bSBjbGFzcyBXQVNNT3BFeHByZXNzaW9uVm9pZCA6
IHVpbnQ4X3QgewotICAgIENhbGxJbnRlcm5hbCwKLSAgICBDYWxsSW5kaXJlY3QsCi0gICAgQ2Fs
bEltcG9ydCwKLSAgICBOdW1iZXJPZldBU01PcEV4cHJlc3Npb25Wb2lkcwotfTsKLQotZW51bSBj
bGFzcyBXQVNNVmFyaWFibGVUeXBlcyA6IHVpbnQ4X3QgewotICAgIEkzMiA9IDEgPDwgMCwKLSAg
ICBGMzIgPSAxIDw8IDEsCi0gICAgRjY0ID0gMSA8PCAyLAotICAgIE51bWJlck9mVmFyaWFibGVU
eXBlcyA9IDgKLX07Ci0KLWVudW0gY2xhc3MgV0FTTVZhcmlhYmxlVHlwZXNXaXRoSW1tZWRpYXRl
IDogdWludDhfdCB7Ci0gICAgSTMyLAotICAgIE51bWJlck9mVmFyaWFibGVUeXBlc1dpdGhJbW1l
ZGlhdGVzCi19OwotCi1lbnVtIGNsYXNzIFdBU01Td2l0Y2hDYXNlIDogdWludDhfdCB7Ci0gICAg
Q2FzZVdpdGhOb1N0YXRlbWVudHMsCi0gICAgQ2FzZVdpdGhTdGF0ZW1lbnQsCi0gICAgQ2FzZVdp
dGhCbG9ja1N0YXRlbWVudCwKLSAgICBEZWZhdWx0V2l0aE5vU3RhdGVtZW50cywKLSAgICBEZWZh
dWx0V2l0aFN0YXRlbWVudCwKLSAgICBEZWZhdWx0V2l0aEJsb2NrU3RhdGVtZW50LAotICAgIE51
bWJlck9mU3dpdGNoQ2FzZXMKLX07Ci0KLWVudW0gY2xhc3MgV0FTTUV4cG9ydEZvcm1hdCA6IHVp
bnQ4X3QgewotICAgIERlZmF1bHQsCi0gICAgUmVjb3JkLAotICAgIE51bWJlck9mRXhwb3J0Rm9y
bWF0cwotfTsKLQotZW51bSBjbGFzcyBXQVNNVHlwZUNvbnZlcnNpb24gewotICAgIENvbnZlcnRT
aWduZWQsCi0gICAgQ29udmVydFVuc2lnbmVkLAotICAgIFByb21vdGUsCi0gICAgRGVtb3RlLAot
fTsKLQotZW51bSBjbGFzcyBXQVNNTWVtb3J5VHlwZSB7Ci0gICAgSTgsCi0gICAgSTE2LAotICAg
IEkzMiwKLSAgICBGMzIsCi0gICAgRjY0Ci19OwotCi1lbnVtIGNsYXNzIE1lbW9yeUFjY2Vzc09m
ZnNldE1vZGUgeyBOb09mZnNldCwgV2l0aE9mZnNldCB9OwotZW51bSBjbGFzcyBNZW1vcnlBY2Nl
c3NDb252ZXJzaW9uIHsgTm9Db252ZXJzaW9uLCBTaWduRXh0ZW5kLCBaZXJvRXh0ZW5kIH07Ci0K
LXN0YXRpYyBjb25zdCB1aW50OF90IGhhc0ltbWVkaWF0ZUluT3BGbGFnID0gMHg4MDsKLQotc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIG9wV2l0aEltbWVkaWF0ZUJpdHMgPSAyOwotc3RhdGljIGNvbnN0
IHVpbnQzMl90IG9wV2l0aEltbWVkaWF0ZUxpbWl0ID0gMSA8PCBvcFdpdGhJbW1lZGlhdGVCaXRz
OwotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW1tZWRpYXRlQml0cyA9IDU7Ci1zdGF0aWMgY29u
c3QgdWludDMyX3QgaW1tZWRpYXRlTGltaXQgPSAxIDw8IGltbWVkaWF0ZUJpdHM7Ci0KLX0gLy8g
bmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQotCi0jZW5kaWYg
Ly8gV0FTTUNvbnN0YW50c19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XQVNNRnVuY3Rpb25CM0lSR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XQVNNRnVuY3Rpb25CM0lSR2VuZXJhdG9yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDc4MTNhMjNkYWEzMWU2N2JkNjBhOTk0ZjRmZDRiZWVkMmQ3YjZhNDIuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV0FTTUZ1bmN0aW9uQjNJUkdlbmVyYXRvci5oCisrKyAvZGV2L251bGwKQEAgLTEsMzk0
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aWZuZGVmIFdBU01GdW5jdGlvbkIzSVJHZW5lcmF0b3JfaAotI2RlZmluZSBXQVNNRnVuY3Rpb25C
M0lSR2VuZXJhdG9yX2gKLQotI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkgJiYgRU5BQkxFKEZUTF9K
SVQpCi0KLSNpbmNsdWRlICJGVExBYmJyZXZpYXRlZFR5cGVzLmgiCi0KLSNkZWZpbmUgVU5VU0VE
IDAKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLXVzaW5nIEZUTDo6TEJhc2ljQmxvY2s7Ci11c2luZyBG
VEw6OkxWYWx1ZTsKLQotY2xhc3MgV0FTTUZ1bmN0aW9uQjNJUkdlbmVyYXRvciB7Ci1wdWJsaWM6
Ci0gICAgdHlwZWRlZiBMVmFsdWUgRXhwcmVzc2lvbjsKLSAgICB0eXBlZGVmIGludCBTdGF0ZW1l
bnQ7Ci0gICAgdHlwZWRlZiBWZWN0b3I8TFZhbHVlPiBFeHByZXNzaW9uTGlzdDsKLSAgICBzdHJ1
Y3QgTWVtb3J5QWRkcmVzcyB7Ci0gICAgICAgIE1lbW9yeUFkZHJlc3Modm9pZCopIHsgfQotICAg
ICAgICBNZW1vcnlBZGRyZXNzKExWYWx1ZSBpbmRleCwgdWludDMyX3Qgb2Zmc2V0KQotICAgICAg
ICAgICAgOiBpbmRleChpbmRleCkKLSAgICAgICAgICAgICwgb2Zmc2V0KG9mZnNldCkKLSAgICAg
ICAgewotICAgICAgICB9Ci0gICAgICAgIExWYWx1ZSBpbmRleDsKLSAgICAgICAgdWludDMyX3Qg
b2Zmc2V0OwotICAgIH07Ci0gICAgdHlwZWRlZiBMQmFzaWNCbG9jayBKdW1wVGFyZ2V0OwotICAg
IGVudW0gY2xhc3MgSnVtcENvbmRpdGlvbiB7IFplcm8sIE5vblplcm8gfTsKLQotICAgIHZvaWQg
c3RhcnRGdW5jdGlvbihjb25zdCBWZWN0b3I8V0FTTVR5cGU+JiBhcmd1bWVudHMsIHVpbnQzMl90
IG51bWJlck9mSTMyTG9jYWxWYXJpYWJsZXMsIHVpbnQzMl90IG51bWJlck9mRjMyTG9jYWxWYXJp
YWJsZXMsIHVpbnQzMl90IG51bWJlck9mRjY0TG9jYWxWYXJpYWJsZXMpCi0gICAgewotICAgICAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAgICAgICBVTlVTRURfUEFSQU0o
YXJndW1lbnRzKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKG51bWJlck9mSTMyTG9jYWxWYXJpYWJs
ZXMpOwotICAgICAgICBVTlVTRURfUEFSQU0obnVtYmVyT2ZGMzJMb2NhbFZhcmlhYmxlcyk7Ci0g
ICAgICAgIFVOVVNFRF9QQVJBTShudW1iZXJPZkY2NExvY2FsVmFyaWFibGVzKTsKLSAgICB9Ci0K
LSAgICB2b2lkIGVuZEZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgdGhpcyBtZXRob2QuCi0gICAgfQotCi0gICAgTFZhbHVlIGJ1aWxkU2V0TG9jYWwoV0FTTU9w
S2luZCBvcEtpbmQsIHVpbnQzMl90IGxvY2FsSW5kZXgsIExWYWx1ZSB2YWx1ZSwgV0FTTVR5cGUg
dHlwZSkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCi0g
ICAgICAgIFVOVVNFRF9QQVJBTShvcEtpbmQpOwotICAgICAgICBVTlVTRURfUEFSQU0obG9jYWxJ
bmRleCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0gICAgICAgIFVOVVNFRF9QQVJB
TSh0eXBlKTsKLSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9Ci0KLSAgICBMVmFsdWUgYnVp
bGRTZXRHbG9iYWwoV0FTTU9wS2luZCBvcEtpbmQsIHVpbnQzMl90IGdsb2JhbEluZGV4LCBMVmFs
dWUgdmFsdWUsIFdBU01UeXBlIHR5cGUpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IHRoaXMgbWV0aG9kLgotICAgICAgICBVTlVTRURfUEFSQU0ob3BLaW5kKTsKLSAgICAgICAg
VU5VU0VEX1BBUkFNKGdsb2JhbEluZGV4KTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsK
LSAgICAgICAgVU5VU0VEX1BBUkFNKHR5cGUpOwotICAgICAgICByZXR1cm4gVU5VU0VEOwotICAg
IH0KLQotICAgIHZvaWQgYnVpbGRSZXR1cm4oTFZhbHVlIHZhbHVlLCBXQVNNRXhwcmVzc2lvblR5
cGUgcmV0dXJuVHlwZSkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBt
ZXRob2QuCi0gICAgICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0gICAgICAgIFVOVVNFRF9QQVJB
TShyZXR1cm5UeXBlKTsKLSAgICB9Ci0KLSAgICBMVmFsdWUgYnVpbGRJbW1lZGlhdGVJMzIodWlu
dDMyX3QgaW1tZWRpYXRlKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlz
IG1ldGhvZC4KLSAgICAgICAgVU5VU0VEX1BBUkFNKGltbWVkaWF0ZSk7Ci0gICAgICAgIHJldHVy
biBVTlVTRUQ7Ci0gICAgfQotCi0gICAgTFZhbHVlIGJ1aWxkSW1tZWRpYXRlRjMyKGZsb2F0IGlt
bWVkaWF0ZSkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2Qu
Ci0gICAgICAgIFVOVVNFRF9QQVJBTShpbW1lZGlhdGUpOwotICAgICAgICByZXR1cm4gVU5VU0VE
OwotICAgIH0KLQotICAgIExWYWx1ZSBidWlsZEltbWVkaWF0ZUY2NChkb3VibGUgaW1tZWRpYXRl
KQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KLSAgICAg
ICAgVU5VU0VEX1BBUkFNKGltbWVkaWF0ZSk7Ci0gICAgICAgIHJldHVybiBVTlVTRUQ7Ci0gICAg
fQotCi0gICAgTFZhbHVlIGJ1aWxkR2V0TG9jYWwodWludDMyX3QgbG9jYWxJbmRleCwgV0FTTVR5
cGUgdHlwZSkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2Qu
Ci0gICAgICAgIFVOVVNFRF9QQVJBTShsb2NhbEluZGV4KTsKLSAgICAgICAgVU5VU0VEX1BBUkFN
KHR5cGUpOwotICAgICAgICByZXR1cm4gVU5VU0VEOwotICAgIH0KLQotICAgIExWYWx1ZSBidWls
ZEdldEdsb2JhbCh1aW50MzJfdCBnbG9iYWxJbmRleCwgV0FTTVR5cGUgdHlwZSkKLSAgICB7Ci0g
ICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCi0gICAgICAgIFVOVVNFRF9Q
QVJBTShnbG9iYWxJbmRleCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsKLSAgICAgICAg
cmV0dXJuIFVOVVNFRDsKLSAgICB9Ci0KLSAgICBMVmFsdWUgYnVpbGRDb252ZXJ0VHlwZShMVmFs
dWUgdmFsdWUsIFdBU01FeHByZXNzaW9uVHlwZSBmcm9tVHlwZSwgV0FTTUV4cHJlc3Npb25UeXBl
IHRvVHlwZSwgV0FTTVR5cGVDb252ZXJzaW9uIGNvbnZlcnNpb24pCi0gICAgewotICAgICAgICAv
LyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAgICAgICBVTlVTRURfUEFSQU0odmFs
dWUpOwotICAgICAgICBVTlVTRURfUEFSQU0oZnJvbVR5cGUpOwotICAgICAgICBVTlVTRURfUEFS
QU0odG9UeXBlKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKGNvbnZlcnNpb24pOwotICAgICAgICBy
ZXR1cm4gVU5VU0VEOwotICAgIH0KLQotICAgIExWYWx1ZSBidWlsZExvYWQoY29uc3QgTWVtb3J5
QWRkcmVzcyYgbWVtb3J5QWRkcmVzcywgV0FTTUV4cHJlc3Npb25UeXBlIGV4cHJlc3Npb25UeXBl
LCBXQVNNTWVtb3J5VHlwZSBtZW1vcnlUeXBlLCBNZW1vcnlBY2Nlc3NDb252ZXJzaW9uIGNvbnZl
cnNpb24pCi0gICAgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgot
ICAgICAgICBVTlVTRURfUEFSQU0obWVtb3J5QWRkcmVzcyk7Ci0gICAgICAgIFVOVVNFRF9QQVJB
TShleHByZXNzaW9uVHlwZSk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShtZW1vcnlUeXBlKTsKLSAg
ICAgICAgVU5VU0VEX1BBUkFNKGNvbnZlcnNpb24pOwotICAgICAgICByZXR1cm4gVU5VU0VEOwot
ICAgIH0KLQotICAgIExWYWx1ZSBidWlsZFN0b3JlKFdBU01PcEtpbmQgb3BLaW5kLCBjb25zdCBN
ZW1vcnlBZGRyZXNzJiBtZW1vcnlBZGRyZXNzLCBXQVNNRXhwcmVzc2lvblR5cGUgZXhwcmVzc2lv
blR5cGUsIFdBU01NZW1vcnlUeXBlIG1lbW9yeVR5cGUsIExWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCi0gICAgICAgIFVOVVNFRF9Q
QVJBTShvcEtpbmQpOwotICAgICAgICBVTlVTRURfUEFSQU0obWVtb3J5QWRkcmVzcyk7Ci0gICAg
ICAgIFVOVVNFRF9QQVJBTShleHByZXNzaW9uVHlwZSk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTSht
ZW1vcnlUeXBlKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKLSAgICAgICAgcmV0dXJu
IFVOVVNFRDsKLSAgICB9Ci0KLSAgICBMVmFsdWUgYnVpbGRVbmFyeUkzMihMVmFsdWUgdmFsdWUs
IFdBU01PcEV4cHJlc3Npb25JMzIgb3ApCi0gICAgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IHRoaXMgbWV0aG9kLgotICAgICAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotICAgICAgICBV
TlVTRURfUEFSQU0ob3ApOwotICAgICAgICByZXR1cm4gVU5VU0VEOwotICAgIH0KLQotICAgIExW
YWx1ZSBidWlsZFVuYXJ5RjMyKExWYWx1ZSB2YWx1ZSwgV0FTTU9wRXhwcmVzc2lvbkYzMiBvcCkK
LSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCi0gICAgICAg
IFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShvcCk7Ci0gICAgICAg
IHJldHVybiBVTlVTRUQ7Ci0gICAgfQotCi0gICAgTFZhbHVlIGJ1aWxkVW5hcnlGNjQoTFZhbHVl
IHZhbHVlLCBXQVNNT3BFeHByZXNzaW9uRjY0IG9wKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6
IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KLSAgICAgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKLSAg
ICAgICAgVU5VU0VEX1BBUkFNKG9wKTsKLSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9Ci0K
LSAgICBMVmFsdWUgYnVpbGRCaW5hcnlJMzIoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCwgV0FT
TU9wRXhwcmVzc2lvbkkzMiBvcCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
dGhpcyBtZXRob2QuCi0gICAgICAgIFVOVVNFRF9QQVJBTShsZWZ0KTsKLSAgICAgICAgVU5VU0VE
X1BBUkFNKHJpZ2h0KTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKG9wKTsKLSAgICAgICAgcmV0dXJu
IFVOVVNFRDsKLSAgICB9Ci0KLSAgICBMVmFsdWUgYnVpbGRCaW5hcnlGMzIoTFZhbHVlIGxlZnQs
IExWYWx1ZSByaWdodCwgV0FTTU9wRXhwcmVzc2lvbkYzMiBvcCkKLSAgICB7Ci0gICAgICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCi0gICAgICAgIFVOVVNFRF9QQVJBTShsZWZ0
KTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHJpZ2h0KTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKG9w
KTsKLSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9Ci0KLSAgICBMVmFsdWUgYnVpbGRCaW5h
cnlGNjQoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCwgV0FTTU9wRXhwcmVzc2lvbkY2NCBvcCkK
LSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCi0gICAgICAg
IFVOVVNFRF9QQVJBTShsZWZ0KTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHJpZ2h0KTsKLSAgICAg
ICAgVU5VU0VEX1BBUkFNKG9wKTsKLSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9Ci0KLSAg
ICBMVmFsdWUgYnVpbGRSZWxhdGlvbmFsSTMyKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQsIFdB
U01PcEV4cHJlc3Npb25JMzIgb3ApCi0gICAgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50
IHRoaXMgbWV0aG9kLgotICAgICAgICBVTlVTRURfUEFSQU0obGVmdCk7Ci0gICAgICAgIFVOVVNF
RF9QQVJBTShyaWdodCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShvcCk7Ci0gICAgICAgIHJldHVy
biBVTlVTRUQ7Ci0gICAgfQotCi0gICAgTFZhbHVlIGJ1aWxkUmVsYXRpb25hbEYzMihMVmFsdWUg
bGVmdCwgTFZhbHVlIHJpZ2h0LCBXQVNNT3BFeHByZXNzaW9uSTMyIG9wKQotICAgIHsKLSAgICAg
ICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KLSAgICAgICAgVU5VU0VEX1BBUkFN
KGxlZnQpOwotICAgICAgICBVTlVTRURfUEFSQU0ocmlnaHQpOwotICAgICAgICBVTlVTRURfUEFS
QU0ob3ApOwotICAgICAgICByZXR1cm4gVU5VU0VEOwotICAgIH0KLQotICAgIExWYWx1ZSBidWls
ZFJlbGF0aW9uYWxGNjQoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCwgV0FTTU9wRXhwcmVzc2lv
bkkzMiBvcCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2Qu
Ci0gICAgICAgIFVOVVNFRF9QQVJBTShsZWZ0KTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHJpZ2h0
KTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKG9wKTsKLSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAg
ICB9Ci0KLSAgICBMVmFsdWUgYnVpbGRNaW5Pck1heEkzMihMVmFsdWUgbGVmdCwgTFZhbHVlIHJp
Z2h0LCBXQVNNT3BFeHByZXNzaW9uSTMyIG9wKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IElt
cGxlbWVudCB0aGlzIG1ldGhvZC4KLSAgICAgICAgVU5VU0VEX1BBUkFNKGxlZnQpOwotICAgICAg
ICBVTlVTRURfUEFSQU0ocmlnaHQpOwotICAgICAgICBVTlVTRURfUEFSQU0ob3ApOwotICAgICAg
ICByZXR1cm4gVU5VU0VEOwotICAgIH0KLQotICAgIExWYWx1ZSBidWlsZE1pbk9yTWF4RjY0KExW
YWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQsIFdBU01PcEV4cHJlc3Npb25GNjQgb3ApCi0gICAgewot
ICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAgICAgICBVTlVTRURf
UEFSQU0obGVmdCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShyaWdodCk7Ci0gICAgICAgIFVOVVNF
RF9QQVJBTShvcCk7Ci0gICAgICAgIHJldHVybiBVTlVTRUQ7Ci0gICAgfQotCi0gICAgTFZhbHVl
IGJ1aWxkQ2FsbEludGVybmFsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFZlY3RvcjxM
VmFsdWU+JiBhcmd1bWVudExpc3QsIGNvbnN0IFdBU01TaWduYXR1cmUmIHNpZ25hdHVyZSwgV0FT
TUV4cHJlc3Npb25UeXBlIHJldHVyblR5cGUpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogSW1w
bGVtZW50IHRoaXMgbWV0aG9kLgotICAgICAgICBVTlVTRURfUEFSQU0oZnVuY3Rpb25JbmRleCk7
Ci0gICAgICAgIFVOVVNFRF9QQVJBTShhcmd1bWVudExpc3QpOwotICAgICAgICBVTlVTRURfUEFS
QU0oc2lnbmF0dXJlKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHJldHVyblR5cGUpOwotICAgICAg
ICByZXR1cm4gVU5VU0VEOwotICAgIH0KLQotICAgIExWYWx1ZSBidWlsZENhbGxJbmRpcmVjdCh1
aW50MzJfdCBmdW5jdGlvblBvaW50ZXJUYWJsZUluZGV4LCBMVmFsdWUgaW5kZXgsIGNvbnN0IFZl
Y3RvcjxMVmFsdWU+JiBhcmd1bWVudExpc3QsIGNvbnN0IFdBU01TaWduYXR1cmUmIHNpZ25hdHVy
ZSwgV0FTTUV4cHJlc3Npb25UeXBlIHJldHVyblR5cGUpCi0gICAgewotICAgICAgICAvLyBGSVhN
RTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAgICAgICBVTlVTRURfUEFSQU0oZnVuY3Rpb25Q
b2ludGVyVGFibGVJbmRleCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShpbmRleCk7Ci0gICAgICAg
IFVOVVNFRF9QQVJBTShhcmd1bWVudExpc3QpOwotICAgICAgICBVTlVTRURfUEFSQU0oc2lnbmF0
dXJlKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHJldHVyblR5cGUpOwotICAgICAgICByZXR1cm4g
VU5VU0VEOwotICAgIH0KLQotICAgIExWYWx1ZSBidWlsZENhbGxJbXBvcnQodWludDMyX3QgZnVu
Y3Rpb25JbXBvcnRJbmRleCwgY29uc3QgVmVjdG9yPExWYWx1ZT4mIGFyZ3VtZW50TGlzdCwgY29u
c3QgV0FTTVNpZ25hdHVyZSYgc2lnbmF0dXJlLCBXQVNNRXhwcmVzc2lvblR5cGUgcmV0dXJuVHlw
ZSkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCi0gICAg
ICAgIFVOVVNFRF9QQVJBTShmdW5jdGlvbkltcG9ydEluZGV4KTsKLSAgICAgICAgVU5VU0VEX1BB
UkFNKGFyZ3VtZW50TGlzdCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShzaWduYXR1cmUpOwotICAg
ICAgICBVTlVTRURfUEFSQU0ocmV0dXJuVHlwZSk7Ci0gICAgICAgIHJldHVybiBVTlVTRUQ7Ci0g
ICAgfQotCi0gICAgdm9pZCBhcHBlbmRFeHByZXNzaW9uTGlzdChWZWN0b3I8TFZhbHVlPiYgZXhw
cmVzc2lvbkxpc3QsIExWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQgdGhpcyBtZXRob2QuCi0gICAgICAgIFVOVVNFRF9QQVJBTShleHByZXNzaW9uTGlzdCk7
Ci0gICAgICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0gICAgfQotCi0gICAgdm9pZCBkaXNjYXJk
KExWYWx1ZSkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBsaW5rVGFyZ2V0KExCYXNpY0Jsb2Nr
IHRhcmdldCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2Qu
Ci0gICAgICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOwotICAgIH0KLQotICAgIHZvaWQganVtcFRv
VGFyZ2V0KExCYXNpY0Jsb2NrIHRhcmdldCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQgdGhpcyBtZXRob2QuCi0gICAgICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOwotICAgIH0K
LQotICAgIHZvaWQganVtcFRvVGFyZ2V0SWYoSnVtcENvbmRpdGlvbiwgTFZhbHVlIHZhbHVlLCBM
QmFzaWNCbG9jayB0YXJnZXQpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRo
aXMgbWV0aG9kLgotICAgICAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotICAgICAgICBVTlVTRURf
UEFSQU0odGFyZ2V0KTsKLSAgICB9Ci0KLSAgICB2b2lkIHN0YXJ0TG9vcCgpCi0gICAgewotICAg
ICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAgIH0KLQotICAgIHZvaWQg
ZW5kTG9vcCgpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9k
LgotICAgIH0KLQotICAgIHZvaWQgc3RhcnRTd2l0Y2goKQotICAgIHsKLSAgICAgICAgLy8gRklY
TUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KLSAgICB9Ci0KLSAgICB2b2lkIGVuZFN3aXRjaCgp
Ci0gICAgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAgIH0K
LQotICAgIHZvaWQgc3RhcnRMYWJlbCgpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IHRoaXMgbWV0aG9kLgotICAgIH0KLQotICAgIHZvaWQgZW5kTGFiZWwoKQotICAgIHsKLSAg
ICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KLSAgICB9Ci0KLSAgICBMQmFz
aWNCbG9jayBicmVha1RhcmdldCgpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50
IHRoaXMgbWV0aG9kLgotICAgICAgICByZXR1cm4gVU5VU0VEOwotICAgIH0KLQotICAgIExCYXNp
Y0Jsb2NrIGNvbnRpbnVlVGFyZ2V0KCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgdGhpcyBtZXRob2QuCi0gICAgICAgIHJldHVybiBVTlVTRUQ7Ci0gICAgfQotCi0gICAgTEJh
c2ljQmxvY2sgYnJlYWtMYWJlbFRhcmdldCh1aW50MzJfdCBsYWJlbEluZGV4KQotICAgIHsKLSAg
ICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KLSAgICAgICAgVU5VU0VEX1BB
UkFNKGxhYmVsSW5kZXgpOwotICAgICAgICByZXR1cm4gVU5VU0VEOwotICAgIH0KLQotICAgIExC
YXNpY0Jsb2NrIGNvbnRpbnVlTGFiZWxUYXJnZXQodWludDMyX3QgbGFiZWxJbmRleCkKLSAgICB7
Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCi0gICAgICAgIFVOVVNF
RF9QQVJBTShsYWJlbEluZGV4KTsKLSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9Ci0KLSAg
ICB2b2lkIGJ1aWxkU3dpdGNoKExWYWx1ZSB2YWx1ZSwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBj
YXNlcywgY29uc3QgVmVjdG9yPExCYXNpY0Jsb2NrPiYgdGFyZ2V0cywgTEJhc2ljQmxvY2sgZGVm
YXVsdFRhcmdldCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRo
b2QuCi0gICAgICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShj
YXNlcyk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTSh0YXJnZXRzKTsKLSAgICAgICAgVU5VU0VEX1BB
UkFNKGRlZmF1bHRUYXJnZXQpOwotICAgIH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0j
ZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQotCi0jZW5kaWYgLy8gV0FTTUZ1bmN0aW9uQjNJ
UkdlbmVyYXRvcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNN
RnVuY3Rpb25Db21waWxlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZ1bmN0
aW9uQ29tcGlsZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2FjNzI0NzNmM2Y3
NzAyMjFjNmZlZDdiYTEyMmNhZjRmNWIyNTIyNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rp
b25Db21waWxlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTU0MSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFdBU01GdW5j
dGlvbkNvbXBpbGVyX2gKLSNkZWZpbmUgV0FTTUZ1bmN0aW9uQ29tcGlsZXJfaAotCi0jaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQotCi0jaW5jbHVkZSAiQmluYXJ5U3dpdGNoLmgiCi0jaW5jbHVkZSAi
Q0NhbGxIZWxwZXJzLmgiCi0jaW5jbHVkZSAiSklULmgiCi0jaW5jbHVkZSAiSklUT3BlcmF0aW9u
cy5oIgotI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKLSNpbmNsdWRlICJMaW5rQnVmZmVyLmgi
Ci0jaW5jbHVkZSAiTWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaCIKLQotI2RlZmluZSBV
TlVTRUQgMAotCi1uYW1lc3BhY2UgSlNDIHsKLQotc3RhdGljIGludDMyX3QgSklUX09QRVJBVElP
TiBvcGVyYXRpb25Db252ZXJ0SlNWYWx1ZVRvSW50MzIoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVk
SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKS50b0lu
dDMyKGV4ZWMpOwotfQotCi1zdGF0aWMgZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29u
dmVydEpTVmFsdWVUb0RvdWJsZShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHZhbHVl
KQotewotICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUodmFsdWUpLnRvTnVtYmVyKGV4ZWMpOwot
fQotCi0jaWYgIUNQVShYODYpICYmICFDUFUoWDg2XzY0KQotc3RhdGljIGludDMyX3QgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25EaXYoaW50MzJfdCBsZWZ0LCBpbnQzMl90IHJpZ2h0KQotewotICAg
IHJldHVybiBsZWZ0IC8gcmlnaHQ7Ci19Ci0KLXN0YXRpYyBpbnQzMl90IEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uTW9kKGludDMyX3QgbGVmdCwgaW50MzJfdCByaWdodCkKLXsKLSAgICByZXR1cm4g
bGVmdCAlIHJpZ2h0OwotfQotCi1zdGF0aWMgdWludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRp
b25VbnNpZ25lZERpdih1aW50MzJfdCBsZWZ0LCB1aW50MzJfdCByaWdodCkKLXsKLSAgICByZXR1
cm4gbGVmdCAvIHJpZ2h0OwotfQotCi1zdGF0aWMgdWludDMyX3QgSklUX09QRVJBVElPTiBvcGVy
YXRpb25VbnNpZ25lZE1vZCh1aW50MzJfdCBsZWZ0LCB1aW50MzJfdCByaWdodCkKLXsKLSAgICBy
ZXR1cm4gbGVmdCAlIHJpZ2h0OwotfQotI2VuZGlmCi0KLSNpZiAhVVNFKEpTVkFMVUU2NCkKLXN0
YXRpYyBkb3VibGUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Db252ZXJ0VW5zaWduZWRJbnQzMlRv
RG91YmxlKHVpbnQzMl90IHZhbHVlKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+
KHZhbHVlKTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgc2l6ZV90IHNpemVPZk1lbW9yeVR5cGUoV0FT
TU1lbW9yeVR5cGUgbWVtb3J5VHlwZSkKLXsKLSAgICBzd2l0Y2ggKG1lbW9yeVR5cGUpIHsKLSAg
ICBjYXNlIFdBU01NZW1vcnlUeXBlOjpJODoKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgY2FzZSBX
QVNNTWVtb3J5VHlwZTo6STE2OgotICAgICAgICByZXR1cm4gMjsKLSAgICBjYXNlIFdBU01NZW1v
cnlUeXBlOjpJMzI6Ci0gICAgY2FzZSBXQVNNTWVtb3J5VHlwZTo6RjMyOgotICAgICAgICByZXR1
cm4gNDsKLSAgICBjYXNlIFdBU01NZW1vcnlUeXBlOjpGNjQ6Ci0gICAgICAgIHJldHVybiA4Owot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLSAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwotfQotCi1jbGFzcyBX
QVNNRnVuY3Rpb25Db21waWxlciA6IHByaXZhdGUgQ0NhbGxIZWxwZXJzIHsKLXB1YmxpYzoKLSAg
ICB0eXBlZGVmIGludCBFeHByZXNzaW9uOwotICAgIHR5cGVkZWYgaW50IFN0YXRlbWVudDsKLSAg
ICB0eXBlZGVmIGludCBFeHByZXNzaW9uTGlzdDsKLSAgICBzdHJ1Y3QgTWVtb3J5QWRkcmVzcyB7
Ci0gICAgICAgIE1lbW9yeUFkZHJlc3Modm9pZCopIHsgfQotICAgICAgICBNZW1vcnlBZGRyZXNz
KGludCwgdWludDMyX3Qgb2Zmc2V0KQotICAgICAgICAgICAgOiBvZmZzZXQob2Zmc2V0KQotICAg
ICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgdWludDMyX3Qgb2Zmc2V0OwotICAgIH07Ci0gICAg
c3RydWN0IEp1bXBUYXJnZXQgewotICAgICAgICBMYWJlbCBsYWJlbDsKLSAgICAgICAgSnVtcExp
c3QganVtcExpc3Q7Ci0gICAgfTsKLSAgICBlbnVtIGNsYXNzIEp1bXBDb25kaXRpb24geyBaZXJv
LCBOb25aZXJvIH07Ci0KLSAgICBXQVNNRnVuY3Rpb25Db21waWxlcihWTSYgdm0sIENvZGVCbG9j
ayogY29kZUJsb2NrLCBKU1dBU01Nb2R1bGUqIG1vZHVsZSwgdW5zaWduZWQgc3RhY2tIZWlnaHQp
Ci0gICAgICAgIDogQ0NhbGxIZWxwZXJzKCZ2bSwgY29kZUJsb2NrKQotICAgICAgICAsIG1fbW9k
dWxlKG1vZHVsZSkKLSAgICAgICAgLCBtX3N0YWNrSGVpZ2h0KHN0YWNrSGVpZ2h0KQotICAgIHsK
LSAgICB9Ci0KLSAgICB2b2lkIHN0YXJ0RnVuY3Rpb24oY29uc3QgVmVjdG9yPFdBU01UeXBlPiYg
YXJndW1lbnRzLCB1aW50MzJfdCBudW1iZXJPZkkzMkxvY2FsVmFyaWFibGVzLCB1aW50MzJfdCBu
dW1iZXJPZkYzMkxvY2FsVmFyaWFibGVzLCB1aW50MzJfdCBudW1iZXJPZkY2NExvY2FsVmFyaWFi
bGVzKQotICAgIHsKLSAgICAgICAgbV9jYWxsZWVTYXZlU3BhY2UgPSBXVEY6OnJvdW5kVXBUb011
bHRpcGxlT2Yoc2l6ZW9mKFN0YWNrU2xvdCksIFJlZ2lzdGVyU2V0Ojp3ZWJBc3NlbWJseUNhbGxl
ZVNhdmVSZWdpc3RlcnMoKS5udW1iZXJPZlNldFJlZ2lzdGVycygpICogc2l6ZW9mKHZvaWQqKSk7
Ci0gICAgICAgIG1fY29kZUJsb2NrLT5zZXRDYWxsZWVTYXZlUmVnaXN0ZXJzKFJlZ2lzdGVyU2V0
Ojp3ZWJBc3NlbWJseUNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Ci0KLSAgICAgICAgZW1pdEZ1bmN0
aW9uUHJvbG9ndWUoKTsKLSAgICAgICAgZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKG1fY29kZUJs
b2NrLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOwotCi0gICAgICAgIG1fYmVnaW5MYWJlbCA9
IGxhYmVsKCk7Ci0KLSAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtbV9jYWxsZWVTYXZlU3Bh
Y2UgLSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwg
bV9zdGFja0hlaWdodCkgKiBzaXplb2YoU3RhY2tTbG90KSAtIG1heEZyYW1lRXh0ZW50Rm9yU2xv
d1BhdGhDYWxsKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1QxKTsK
LSAgICAgICAgbV9zdGFja092ZXJmbG93ID0gYnJhbmNoUHRyKEFib3ZlLCBBYnNvbHV0ZUFkZHJl
c3MobV92bS0+YWRkcmVzc09mU29mdFN0YWNrTGltaXQoKSksIEdQUkluZm86OnJlZ1QxKTsKLQot
ICAgICAgICBtb3ZlKEdQUkluZm86OnJlZ1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAg
ICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7Ci0KLSAgICAgICAgZW1pdFNhdmVDYWxs
ZWVTYXZlcygpOwotICAgICAgICBlbWl0TWF0ZXJpYWxpemVUYWdDaGVja1JlZ2lzdGVycygpOwot
Ci0gICAgICAgIG1fbnVtYmVyT2ZMb2NhbHMgPSBhcmd1bWVudHMuc2l6ZSgpICsgbnVtYmVyT2ZJ
MzJMb2NhbFZhcmlhYmxlcyArIG51bWJlck9mRjMyTG9jYWxWYXJpYWJsZXMgKyBudW1iZXJPZkY2
NExvY2FsVmFyaWFibGVzOwotCi0gICAgICAgIHVuc2lnbmVkIGxvY2FsSW5kZXggPSAwOwotICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ3VtZW50cy5zaXplKCk7ICsraSkgewotICAg
ICAgICAgICAgLy8gRklYTUU6IE5vIG5lZWQgdG8gZG8gdHlwZSBjb252ZXJzaW9uIGlmIHRoZSBj
YWxsZXIgaXMgYSBXZWJBc3NlbWJseSBmdW5jdGlvbi4KLSAgICAgICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDkzMTAKLSAgICAgICAgICAgIEFkZHJl
c3MgYWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lOjphcmd1bWVu
dE9mZnNldChpKSAqIHNpemVvZihSZWdpc3RlcikpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
ICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MoR1BSSW5mbzo6cmVnVDApOwotI2Vsc2UKLSAg
ICAgICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6
cmVnVDApOwotI2VuZGlmCi0gICAgICAgICAgICBsb2FkVmFsdWUoYWRkcmVzcywgdmFsdWVSZWdz
KTsKLSAgICAgICAgICAgIHN3aXRjaCAoYXJndW1lbnRzW2ldKSB7Ci0gICAgICAgICAgICBjYXNl
IFdBU01UeXBlOjpJMzI6Ci0gICAgICAgICAgICAgICAgY29udmVydFZhbHVlVG9JbnQzMih2YWx1
ZVJlZ3MsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgICAgICBzdG9yZTMyKEdQUkluZm86
OnJlZ1QwLCBsb2NhbEFkZHJlc3MobG9jYWxJbmRleCsrKSk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIFdBU01UeXBlOjpGMzI6Ci0gICAgICAgICAgICBjYXNlIFdB
U01UeXBlOjpGNjQ6Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAgICBjb252ZXJ0
VmFsdWVUb0RvdWJsZSh2YWx1ZVJlZ3MsIEZQUkluZm86OmZwUmVnVDAsIEdQUkluZm86OnJlZ1Qx
KTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgY29udmVydFZhbHVlVG9Eb3VibGUodmFsdWVSZWdz
LCBGUFJJbmZvOjpmcFJlZ1QwLCBHUFJJbmZvOjpyZWdUMiwgRlBSSW5mbzo6ZnBSZWdUMSk7Ci0j
ZW5kaWYKLSAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzW2ldID09IFdBU01UeXBlOjpGMzIp
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnZlcnREb3VibGVUb0Zsb2F0KEZQUkluZm86OmZwUmVn
VDAsIEZQUkluZm86OmZwUmVnVDApOwotICAgICAgICAgICAgICAgIHN0b3JlRG91YmxlKEZQUklu
Zm86OmZwUmVnVDAsIGxvY2FsQWRkcmVzcyhsb2NhbEluZGV4KyspKTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZm9yICh1aW50
MzJfdCBpID0gMDsgaSA8IG51bWJlck9mSTMyTG9jYWxWYXJpYWJsZXM7ICsraSkKLSAgICAgICAg
ICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKDApLCBsb2NhbEFkZHJlc3MobG9jYWxJbmRleCsrKSk7
Ci0gICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZkYzMkxvY2FsVmFyaWFi
bGVzOyArK2kpCi0gICAgICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMigwKSwgbG9jYWxBZGRy
ZXNzKGxvY2FsSW5kZXgrKykpOwotICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVt
YmVyT2ZGNjRMb2NhbFZhcmlhYmxlczsgKytpKSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAg
ICAgICAgIHN0b3JlNjQoVHJ1c3RlZEltbTY0KDApLCBsb2NhbEFkZHJlc3MobG9jYWxJbmRleCsr
KSk7Ci0jZWxzZQotICAgICAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoMCksIGxvY2FsQWRk
cmVzcyhsb2NhbEluZGV4KSk7Ci0gICAgICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMigwKSwg
bG9jYWxBZGRyZXNzKGxvY2FsSW5kZXgpLndpdGhPZmZzZXQoNCkpOwotICAgICAgICAgICAgbG9j
YWxJbmRleCsrOwotI2VuZGlmCi0gICAgICAgIH0KLQotICAgICAgICBtX2NvZGVCbG9jay0+c2V0
TnVtUGFyYW1ldGVycygxICsgYXJndW1lbnRzLnNpemUoKSk7Ci0gICAgfQotCi0gICAgdm9pZCBl
bmRGdW5jdGlvbigpCi0gICAgewotICAgICAgICBBU1NFUlQoIW1fdGVtcFN0YWNrVG9wKTsKLQot
ICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZXNlIGlmIHRoZSBsYXN0IHN0YXRlbWVudCBpcyBh
IHJldHVybiBzdGF0ZW1lbnQuCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgSlNWYWx1ZVJl
Z3MgcmV0dXJuVmFsdWVSZWdzKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSNlbHNlCi0gICAg
ICAgIEpTVmFsdWVSZWdzIHJldHVyblZhbHVlUmVncyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIs
IEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSNlbmRpZgotICAgICAgICBtb3ZlVHJ1c3RlZFZh
bHVlKGpzVW5kZWZpbmVkKCksIHJldHVyblZhbHVlUmVncyk7Ci0gICAgICAgIGVtaXRSZXN0b3Jl
Q2FsbGVlU2F2ZXMoKTsKLSAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKLSAgICAgICAg
cmV0KCk7Ci0KLSAgICAgICAgbV9zdGFja092ZXJmbG93LmxpbmsodGhpcyk7Ci0gICAgICAgIGlm
IChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKLSAgICAgICAgICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIoLW1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSwgc3RhY2tQb2ludGVyUmVn
aXN0ZXIpOwotICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jaykpOwotICAgICAgICBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9w
ZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9yKTsKLQotICAgICAgICAvLyBGSVhNRTogSW1w
bGVtZW50IGFyaXR5IGNoZWNrLgotICAgICAgICBMYWJlbCBhcml0eUNoZWNrID0gbGFiZWwoKTsK
LSAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKLSAgICAgICAgZW1pdFB1dFRvQ2FsbEZy
YW1lSGVhZGVyKG1fY29kZUJsb2NrLCBDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spOwotICAgICAg
ICBqdW1wKG1fYmVnaW5MYWJlbCk7Ci0KLSAgICAgICAgaWYgKCFtX2RpdmlkZUVycm9ySnVtcExp
c3QuZW1wdHkoKSkgewotICAgICAgICAgICAgbV9kaXZpZGVFcnJvckp1bXBMaXN0LmxpbmsodGhp
cyk7Ci0KLSAgICAgICAgICAgIHNldHVwQXJndW1lbnRzRXhlY1N0YXRlKCk7Ci0gICAgICAgICAg
ICBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93RGl2aWRlRXJyb3Ip
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFtX291dE9mQm91bmRzRXJyb3JKdW1wTGlzdC5l
bXB0eSgpKSB7Ci0gICAgICAgICAgICBtX291dE9mQm91bmRzRXJyb3JKdW1wTGlzdC5saW5rKHRo
aXMpOwotCi0gICAgICAgICAgICBzZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOwotICAgICAgICAg
ICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJvd091dE9mQm91bmRz
QWNjZXNzRXJyb3IpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFtX2V4Y2VwdGlvbkNoZWNr
cy5lbXB0eSgpKSB7Ci0gICAgICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrcy5saW5rKHRoaXMpOwot
Ci0gICAgICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVm
ZmVyKCk7Ci0KLSAgICAgICAgICAgIC8vIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIgaXMgcGFzc2Vk
IHR3byBhcmd1bWVudHMsIHRoZSBWTSBhbmQgdGhlIGV4ZWMgKHRoZSBDYWxsRnJhbWUqKS4KLSAg
ICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cih2bSgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIw
KTsKLSAgICAgICAgICAgIG1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86
OmFyZ3VtZW50R1BSMSk7Ci0KLSNpZiBDUFUoWDg2KQotICAgICAgICAgICAgLy8gRklYTUU6IHNo
b3VsZCB1c2UgdGhlIGNhbGwgYWJzdHJhY3Rpb24sIGJ1dCB0aGlzIGlzIGN1cnJlbnRseSBpbiB0
aGUgU3BlY3VsYXRpdmVKSVQgbGF5ZXIhCi0gICAgICAgICAgICBwb2tlKEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCk7Ci0gICAgICAgICAgICBwb2tlKEdQUkluZm86OmFyZ3VtZW50R1BSMSwgMSk7Ci0j
ZW5kaWYKLSAgICAgICAgICAgIG1fY2FsbHMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGNhbGwoKSwg
RnVuY3Rpb25QdHIobG9va3VwRXhjZXB0aW9uSGFuZGxlckZyb21DYWxsZXJGcmFtZSkudmFsdWUo
KSkpOwotICAgICAgICAgICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcigpOwotICAgICAgICB9Ci0K
LSAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV92bSwgKnRoaXMsIG1fY29kZUJsb2Nr
LCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkKTsKLQotICAgICAgICBmb3IgKGNvbnN0IGF1dG8m
IGl0ZXJhdG9yIDogbV9jYWxscykKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoaXRlcmF0
b3IuZmlyc3QsIEZ1bmN0aW9uUHRyKGl0ZXJhdG9yLnNlY29uZCkpOwotCi0gICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9jYWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgICAgICBDYWxsQ29tcGlsYXRpb25JbmZvJiBjb21waWxhdGlvbkluZm8gPSBtX2NhbGxD
b21waWxhdGlvbkluZm9baV07Ci0gICAgICAgICAgICBDYWxsTGlua0luZm8mIGluZm8gPSAqY29t
cGlsYXRpb25JbmZvLmNhbGxMaW5rSW5mbzsKLSAgICAgICAgICAgIGluZm8uc2V0Q2FsbExvY2F0
aW9ucyhwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoY29tcGlsYXRpb25JbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbiksCi0gICAgICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZihj
b21waWxhdGlvbkluZm8uaG90UGF0aEJlZ2luKSwKLSAgICAgICAgICAgICAgICBwYXRjaEJ1ZmZl
ci5sb2NhdGlvbk9mTmVhckNhbGwoY29tcGlsYXRpb25JbmZvLmhvdFBhdGhPdGhlcikpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHdpdGhBcml0eUNoZWNrID0g
cGF0Y2hCdWZmZXIubG9jYXRpb25PZihhcml0eUNoZWNrKTsKLSAgICAgICAgQ29kZVJlZiByZXN1
bHQgPSBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIkJhc2VsaW5lIEpJVCBjb2RlIGZvciBX
ZWJBc3NlbWJseSIpKTsKLSAgICAgICAgbV9jb2RlQmxvY2stPnNldEpJVENvZGUoYWRvcHRSZWYo
bmV3IERpcmVjdEpJVENvZGUocmVzdWx0LCB3aXRoQXJpdHlDaGVjaywgSklUQ29kZTo6QmFzZWxp
bmVKSVQpKSk7Ci0gICAgICAgIG1fY29kZUJsb2NrLT5jYXBhYmlsaXR5TGV2ZWwoKTsKLSAgICB9
Ci0KLSAgICBpbnQgYnVpbGRTZXRMb2NhbChXQVNNT3BLaW5kIG9wS2luZCwgdWludDMyX3QgbG9j
YWxJbmRleCwgaW50LCBXQVNNVHlwZSB0eXBlKQotICAgIHsKLSAgICAgICAgc3dpdGNoICh0eXBl
KSB7Ci0gICAgICAgIGNhc2UgV0FTTVR5cGU6OkkzMjoKLSAgICAgICAgY2FzZSBXQVNNVHlwZTo6
RjMyOgotICAgICAgICAgICAgbG9hZDMyKHRlbXBvcmFyeUFkZHJlc3MobV90ZW1wU3RhY2tUb3Ag
LSAxKSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgc3RvcmUzMihHUFJJbmZvOjpyZWdU
MCwgbG9jYWxBZGRyZXNzKGxvY2FsSW5kZXgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIFdBU01UeXBlOjpGNjQ6Ci0gICAgICAgICAgICBsb2FkRG91YmxlKHRlbXBvcmFyeUFk
ZHJlc3MobV90ZW1wU3RhY2tUb3AgLSAxKSwgRlBSSW5mbzo6ZnBSZWdUMCk7Ci0gICAgICAgICAg
ICBzdG9yZURvdWJsZShGUFJJbmZvOjpmcFJlZ1QwLCBsb2NhbEFkZHJlc3MobG9jYWxJbmRleCkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAob3BLaW5kID09IFdBU01P
cEtpbmQ6OlN0YXRlbWVudCkKLSAgICAgICAgICAgIG1fdGVtcFN0YWNrVG9wLS07Ci0gICAgICAg
IHJldHVybiBVTlVTRUQ7Ci0gICAgfQotCi0gICAgaW50IGJ1aWxkU2V0R2xvYmFsKFdBU01PcEtp
bmQgb3BLaW5kLCB1aW50MzJfdCBnbG9iYWxJbmRleCwgaW50LCBXQVNNVHlwZSB0eXBlKQotICAg
IHsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKCZtX21vZHVsZS0+Z2xvYmFsVmFyaWFibGVz
KClbZ2xvYmFsSW5kZXhdKSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICBzd2l0Y2ggKHR5cGUp
IHsKLSAgICAgICAgY2FzZSBXQVNNVHlwZTo6STMyOgotICAgICAgICBjYXNlIFdBU01UeXBlOjpG
MzI6Ci0gICAgICAgICAgICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVzcyhtX3RlbXBTdGFja1RvcCAt
IDEpLCBHUFJJbmZvOjpyZWdUMSk7Ci0gICAgICAgICAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1Qx
LCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXQVNN
VHlwZTo6RjY0OgotICAgICAgICAgICAgbG9hZERvdWJsZSh0ZW1wb3JhcnlBZGRyZXNzKG1fdGVt
cFN0YWNrVG9wIC0gMSksIEZQUkluZm86OmZwUmVnVDApOwotICAgICAgICAgICAgc3RvcmVEb3Vi
bGUoRlBSSW5mbzo6ZnBSZWdUMCwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgfQotICAgICAgICBpZiAob3BLaW5kID09IFdBU01PcEtpbmQ6OlN0YXRlbWVudCkKLSAg
ICAgICAgICAgIG1fdGVtcFN0YWNrVG9wLS07Ci0gICAgICAgIHJldHVybiBVTlVTRUQ7Ci0gICAg
fQotCi0gICAgdm9pZCBidWlsZFJldHVybihpbnQsIFdBU01FeHByZXNzaW9uVHlwZSByZXR1cm5U
eXBlKQotICAgIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBKU1ZhbHVlUmVncyByZXR1
cm5WYWx1ZVJlZ3MoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotI2Vsc2UKLSAgICAgICAgSlNW
YWx1ZVJlZ3MgcmV0dXJuVmFsdWVSZWdzKEdQUkluZm86OnJldHVyblZhbHVlR1BSMiwgR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIpOwotI2VuZGlmCi0gICAgICAgIHN3aXRjaCAocmV0dXJuVHlwZSkg
ewotICAgICAgICBjYXNlIFdBU01FeHByZXNzaW9uVHlwZTo6STMyOgotICAgICAgICAgICAgbG9h
ZDMyKHRlbXBvcmFyeUFkZHJlc3MobV90ZW1wU3RhY2tUb3AgLSAxKSwgR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBvcjY0KEdQUkluZm86
OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotI2Vsc2UK
LSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIyKTsKLSNlbmRpZgotICAgICAgICAgICAgbV90ZW1wU3RhY2tUb3At
LTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdBU01FeHByZXNzaW9uVHlwZTo6
RjMyOgotICAgICAgICBjYXNlIFdBU01FeHByZXNzaW9uVHlwZTo6RjY0OgotICAgICAgICAgICAg
bG9hZERvdWJsZSh0ZW1wb3JhcnlBZGRyZXNzKG1fdGVtcFN0YWNrVG9wIC0gMSksIEZQUkluZm86
OmZwUmVnVDApOwotICAgICAgICAgICAgaWYgKHJldHVyblR5cGUgPT0gV0FTTUV4cHJlc3Npb25U
eXBlOjpGMzIpCi0gICAgICAgICAgICAgICAgY29udmVydEZsb2F0VG9Eb3VibGUoRlBSSW5mbzo6
ZnBSZWdUMCwgRlBSSW5mbzo6ZnBSZWdUMCk7Ci0gICAgICAgICAgICBjb252ZXJ0RG91YmxlVG9W
YWx1ZShGUFJJbmZvOjpmcFJlZ1QwLCByZXR1cm5WYWx1ZVJlZ3MpOwotICAgICAgICAgICAgbV90
ZW1wU3RhY2tUb3AtLTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdBU01FeHBy
ZXNzaW9uVHlwZTo6Vm9pZDoKLSAgICAgICAgICAgIG1vdmVUcnVzdGVkVmFsdWUoanNVbmRlZmlu
ZWQoKSwgcmV0dXJuVmFsdWVSZWdzKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwotICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1
ZSgpOwotICAgICAgICByZXQoKTsKLSAgICB9Ci0KLSAgICBpbnQgYnVpbGRJbW1lZGlhdGVJMzIo
dWludDMyX3QgaW1tZWRpYXRlKQotICAgIHsKLSAgICAgICAgc3RvcmUzMihJbW0zMihpbW1lZGlh
dGUpLCB0ZW1wb3JhcnlBZGRyZXNzKG1fdGVtcFN0YWNrVG9wKyspKTsKLSAgICAgICAgcmV0dXJu
IFVOVVNFRDsKLSAgICB9Ci0KLSAgICBpbnQgYnVpbGRJbW1lZGlhdGVGMzIoZmxvYXQgaW1tZWRp
YXRlKQotICAgIHsKLSAgICAgICAgc3RvcmUzMihJbW0zMihiaXR3aXNlX2Nhc3Q8aW50MzJfdD4o
aW1tZWRpYXRlKSksIHRlbXBvcmFyeUFkZHJlc3MobV90ZW1wU3RhY2tUb3ArKykpOwotICAgICAg
ICByZXR1cm4gVU5VU0VEOwotICAgIH0KLQotICAgIGludCBidWlsZEltbWVkaWF0ZUY2NChkb3Vi
bGUgaW1tZWRpYXRlKQotICAgIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBzdG9yZTY0
KEltbTY0KGJpdHdpc2VfY2FzdDxpbnQ2NF90PihpbW1lZGlhdGUpKSwgdGVtcG9yYXJ5QWRkcmVz
cyhtX3RlbXBTdGFja1RvcCsrKSk7Ci0jZWxzZQotICAgICAgICB1bmlvbiB7Ci0gICAgICAgICAg
ICBkb3VibGUgZG91YmxlVmFsdWU7Ci0gICAgICAgICAgICBpbnQzMl90IGludDMyVmFsdWVzWzJd
OwotICAgICAgICB9IHUgPSB7IGltbWVkaWF0ZSB9OwotICAgICAgICBtX3RlbXBTdGFja1RvcCsr
OwotICAgICAgICBzdG9yZTMyKEltbTMyKHUuaW50MzJWYWx1ZXNbMF0pLCB0ZW1wb3JhcnlBZGRy
ZXNzKG1fdGVtcFN0YWNrVG9wIC0gMSkpOwotICAgICAgICBzdG9yZTMyKEltbTMyKHUuaW50MzJW
YWx1ZXNbMV0pLCB0ZW1wb3JhcnlBZGRyZXNzKG1fdGVtcFN0YWNrVG9wIC0gMSkud2l0aE9mZnNl
dCg0KSk7Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9Ci0KLSAgICBpbnQg
YnVpbGRHZXRMb2NhbCh1aW50MzJfdCBsb2NhbEluZGV4LCBXQVNNVHlwZSB0eXBlKQotICAgIHsK
LSAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgV0FTTVR5cGU6OkkzMjoKLSAg
ICAgICAgY2FzZSBXQVNNVHlwZTo6RjMyOgotICAgICAgICAgICAgbG9hZDMyKGxvY2FsQWRkcmVz
cyhsb2NhbEluZGV4KSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgc3RvcmUzMihHUFJJ
bmZvOjpyZWdUMCwgdGVtcG9yYXJ5QWRkcmVzcyhtX3RlbXBTdGFja1RvcCsrKSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXQVNNVHlwZTo6RjY0OgotICAgICAgICAgICAgbG9h
ZERvdWJsZShsb2NhbEFkZHJlc3MobG9jYWxJbmRleCksIEZQUkluZm86OmZwUmVnVDApOwotICAg
ICAgICAgICAgc3RvcmVEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMCwgdGVtcG9yYXJ5QWRkcmVzcyht
X3RlbXBTdGFja1RvcCsrKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiBVTlVTRUQ7Ci0gICAgfQotCi0gICAgaW50IGJ1aWxkR2V0R2xvYmFsKHVpbnQzMl90IGds
b2JhbEluZGV4LCBXQVNNVHlwZSB0eXBlKQotICAgIHsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1t
UHRyKCZtX21vZHVsZS0+Z2xvYmFsVmFyaWFibGVzKClbZ2xvYmFsSW5kZXhdKSwgR1BSSW5mbzo6
cmVnVDApOwotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBXQVNNVHlwZTo6
STMyOgotICAgICAgICBjYXNlIFdBU01UeXBlOjpGMzI6Ci0gICAgICAgICAgICBsb2FkMzIoR1BS
SW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgIHN0b3JlMzIoR1BSSW5m
bzo6cmVnVDAsIHRlbXBvcmFyeUFkZHJlc3MobV90ZW1wU3RhY2tUb3ArKykpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV0FTTVR5cGU6OkY2NDoKLSAgICAgICAgICAgIGxvYWRE
b3VibGUoR1BSSW5mbzo6cmVnVDAsIEZQUkluZm86OmZwUmVnVDApOwotICAgICAgICAgICAgc3Rv
cmVEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMCwgdGVtcG9yYXJ5QWRkcmVzcyhtX3RlbXBTdGFja1Rv
cCsrKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBVTlVTRUQ7
Ci0gICAgfQotCi0gICAgaW50IGJ1aWxkQ29udmVydFR5cGUoaW50LCBXQVNNRXhwcmVzc2lvblR5
cGUgZnJvbVR5cGUsIFdBU01FeHByZXNzaW9uVHlwZSB0b1R5cGUsIFdBU01UeXBlQ29udmVyc2lv
biBjb252ZXJzaW9uKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChmcm9tVHlwZSkgewotICAgICAg
ICBjYXNlIFdBU01FeHByZXNzaW9uVHlwZTo6STMyOgotICAgICAgICAgICAgbG9hZDMyKHRlbXBv
cmFyeUFkZHJlc3MobV90ZW1wU3RhY2tUb3AgLSAxKSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAg
ICAgICAgQVNTRVJUKHRvVHlwZSA9PSBXQVNNRXhwcmVzc2lvblR5cGU6OkYzMiB8fCB0b1R5cGUg
PT0gV0FTTUV4cHJlc3Npb25UeXBlOjpGNjQpOwotICAgICAgICAgICAgaWYgKGNvbnZlcnNpb24g
PT0gV0FTTVR5cGVDb252ZXJzaW9uOjpDb252ZXJ0U2lnbmVkKQotICAgICAgICAgICAgICAgIGNv
bnZlcnRJbnQzMlRvRG91YmxlKEdQUkluZm86OnJlZ1QwLCBGUFJJbmZvOjpmcFJlZ1QwKTsKLSAg
ICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIEFTU0VSVChjb252ZXJzaW9uID09IFdB
U01UeXBlQ29udmVyc2lvbjo6Q29udmVydFVuc2lnbmVkKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgICAgICAgICAgICAgIGNvbnZlcnRJbnQ2NFRvRG91YmxlKEdQUkluZm86OnJlZ1QwLCBGUFJJ
bmZvOjpmcFJlZ1QwKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db252ZXJ0VW5zaWduZWRJbnQzMlRvRG91YmxlLCBHUFJJbmZvOjpyZWdUMCwgRlBSSW5m
bzo6ZnBSZWdUMCk7Ci0jZW5kaWYKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh0b1R5
cGUgPT0gV0FTTUV4cHJlc3Npb25UeXBlOjpGMzIpCi0gICAgICAgICAgICAgICAgY29udmVydERv
dWJsZVRvRmxvYXQoRlBSSW5mbzo6ZnBSZWdUMCwgRlBSSW5mbzo6ZnBSZWdUMCk7Ci0gICAgICAg
ICAgICBzdG9yZURvdWJsZShGUFJJbmZvOjpmcFJlZ1QwLCB0ZW1wb3JhcnlBZGRyZXNzKG1fdGVt
cFN0YWNrVG9wIC0gMSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV0FTTUV4
cHJlc3Npb25UeXBlOjpGMzI6Ci0gICAgICAgICAgICBsb2FkRG91YmxlKHRlbXBvcmFyeUFkZHJl
c3MobV90ZW1wU3RhY2tUb3AgLSAxKSwgRlBSSW5mbzo6ZnBSZWdUMCk7Ci0gICAgICAgICAgICBz
d2l0Y2ggKHRvVHlwZSkgewotICAgICAgICAgICAgY2FzZSBXQVNNRXhwcmVzc2lvblR5cGU6Okkz
MjoKLSAgICAgICAgICAgICAgICBBU1NFUlQoY29udmVyc2lvbiA9PSBXQVNNVHlwZUNvbnZlcnNp
b246OkNvbnZlcnRTaWduZWQpOwotICAgICAgICAgICAgICAgIGNvbnZlcnRGbG9hdFRvRG91Ymxl
KEZQUkluZm86OmZwUmVnVDAsIEZQUkluZm86OmZwUmVnVDApOwotICAgICAgICAgICAgICAgIHRy
dW5jYXRlRG91YmxlVG9JbnQzMihGUFJJbmZvOjpmcFJlZ1QwLCBHUFJJbmZvOjpyZWdUMCk7Ci0g
ICAgICAgICAgICAgICAgc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgdGVtcG9yYXJ5QWRkcmVzcyht
X3RlbXBTdGFja1RvcCAtIDEpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGNhc2UgV0FTTUV4cHJlc3Npb25UeXBlOjpGNjQ6Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGNv
bnZlcnNpb24gPT0gV0FTTVR5cGVDb252ZXJzaW9uOjpQcm9tb3RlKTsKLSAgICAgICAgICAgICAg
ICBjb252ZXJ0RmxvYXRUb0RvdWJsZShGUFJJbmZvOjpmcFJlZ1QwLCBGUFJJbmZvOjpmcFJlZ1Qw
KTsKLSAgICAgICAgICAgICAgICBzdG9yZURvdWJsZShGUFJJbmZvOjpmcFJlZ1QwLCB0ZW1wb3Jh
cnlBZGRyZXNzKG1fdGVtcFN0YWNrVG9wIC0gMSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdBU01F
eHByZXNzaW9uVHlwZTo6RjY0OgotICAgICAgICAgICAgbG9hZERvdWJsZSh0ZW1wb3JhcnlBZGRy
ZXNzKG1fdGVtcFN0YWNrVG9wIC0gMSksIEZQUkluZm86OmZwUmVnVDApOwotICAgICAgICAgICAg
c3dpdGNoICh0b1R5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgV0FTTUV4cHJlc3Npb25UeXBlOjpJ
MzI6Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGNvbnZlcnNpb24gPT0gV0FTTVR5cGVDb252ZXJz
aW9uOjpDb252ZXJ0U2lnbmVkKTsKLSAgICAgICAgICAgICAgICB0cnVuY2F0ZURvdWJsZVRvSW50
MzIoRlBSSW5mbzo6ZnBSZWdUMCwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAgIHN0
b3JlMzIoR1BSSW5mbzo6cmVnVDAsIHRlbXBvcmFyeUFkZHJlc3MobV90ZW1wU3RhY2tUb3AgLSAx
KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdBU01FeHByZXNz
aW9uVHlwZTo6RjMyOgotICAgICAgICAgICAgICAgIEFTU0VSVChjb252ZXJzaW9uID09IFdBU01U
eXBlQ29udmVyc2lvbjo6RGVtb3RlKTsKLSAgICAgICAgICAgICAgICBjb252ZXJ0RG91YmxlVG9G
bG9hdChGUFJJbmZvOjpmcFJlZ1QwLCBGUFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgICAgICAg
ICBzdG9yZURvdWJsZShGUFJJbmZvOjpmcFJlZ1QwLCB0ZW1wb3JhcnlBZGRyZXNzKG1fdGVtcFN0
YWNrVG9wIC0gMSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9
Ci0KLSAgICBpbnQgYnVpbGRMb2FkKGNvbnN0IE1lbW9yeUFkZHJlc3MmIG1lbW9yeUFkZHJlc3Ms
IFdBU01FeHByZXNzaW9uVHlwZSBleHByZXNzaW9uVHlwZSwgV0FTTU1lbW9yeVR5cGUgbWVtb3J5
VHlwZSwgTWVtb3J5QWNjZXNzQ29udmVyc2lvbiBjb252ZXJzaW9uKQotICAgIHsKLSAgICAgICAg
Y29uc3QgQXJyYXlCdWZmZXIqIGFycmF5QnVmZmVyID0gbV9tb2R1bGUtPmFycmF5QnVmZmVyKCkt
PmltcGwoKTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGFycmF5QnVmZmVyLT5kYXRhKCkp
LCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgIGxvYWQzMih0ZW1wb3JhcnlBZGRyZXNzKG1fdGVt
cFN0YWNrVG9wIC0gMSksIEdQUkluZm86OnJlZ1QxKTsKLSAgICAgICAgaWYgKG1lbW9yeUFkZHJl
c3Mub2Zmc2V0KQotICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKG1lbW9yeUFkZHJlc3Mu
b2Zmc2V0KSwgR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QxKTsKLSAgICAgICAgYW5kMzIo
VHJ1c3RlZEltbTMyKH4oc2l6ZU9mTWVtb3J5VHlwZShtZW1vcnlUeXBlKSAtIDEpKSwgR1BSSW5m
bzo6cmVnVDEpOwotCi0gICAgICAgIEFTU0VSVChhcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpIDwg
KHVuc2lnbmVkKSgxIDw8IDMxKSk7Ci0gICAgICAgIGlmIChhcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0
aCgpID49IHNpemVPZk1lbW9yeVR5cGUobWVtb3J5VHlwZSkpCi0gICAgICAgICAgICBtX291dE9m
Qm91bmRzRXJyb3JKdW1wTGlzdC5hcHBlbmQoYnJhbmNoMzIoQWJvdmUsIEdQUkluZm86OnJlZ1Qx
LCBUcnVzdGVkSW1tMzIoYXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoKSAtIHNpemVPZk1lbW9yeVR5
cGUobWVtb3J5VHlwZSkpKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fb3V0T2ZCb3Vu
ZHNFcnJvckp1bXBMaXN0LmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgIEJhc2VJbmRleCBhZGRy
ZXNzID0gQmFzZUluZGV4KEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMSwgVGltZXNPbmUp
OwotCi0gICAgICAgIHN3aXRjaCAoZXhwcmVzc2lvblR5cGUpIHsKLSAgICAgICAgY2FzZSBXQVNN
RXhwcmVzc2lvblR5cGU6OkkzMjoKLSAgICAgICAgICAgIHN3aXRjaCAobWVtb3J5VHlwZSkgewot
ICAgICAgICAgICAgY2FzZSBXQVNNTWVtb3J5VHlwZTo6STg6Ci0gICAgICAgICAgICAgICAgaWYg
KGNvbnZlcnNpb24gPT0gTWVtb3J5QWNjZXNzQ29udmVyc2lvbjo6U2lnbkV4dGVuZCkKLSAgICAg
ICAgICAgICAgICAgICAgbG9hZDhTaWduZWRFeHRlbmRUbzMyKGFkZHJlc3MsIEdQUkluZm86OnJl
Z1QwKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KGNvbnZlcnNpb24gPT0gTWVtb3J5QWNjZXNzQ29udmVyc2lvbjo6WmVyb0V4dGVuZCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGxvYWQ4KGFkZHJlc3MsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdBU01N
ZW1vcnlUeXBlOjpJMTY6Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnZlcnNpb24gPT0gTWVtb3J5
QWNjZXNzQ29udmVyc2lvbjo6U2lnbkV4dGVuZCkKLSAgICAgICAgICAgICAgICAgICAgbG9hZDE2
U2lnbmVkRXh0ZW5kVG8zMihhZGRyZXNzLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChjb252ZXJzaW9uID09IE1lbW9y
eUFjY2Vzc0NvbnZlcnNpb246Olplcm9FeHRlbmQpOwotICAgICAgICAgICAgICAgICAgICBsb2Fk
MTYoYWRkcmVzcywgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV0FTTU1lbW9yeVR5cGU6OkkzMjoKLSAg
ICAgICAgICAgICAgICBsb2FkMzIoYWRkcmVzcywgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN0b3JlMzIoR1BS
SW5mbzo6cmVnVDAsIHRlbXBvcmFyeUFkZHJlc3MobV90ZW1wU3RhY2tUb3AgLSAxKSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXQVNNRXhwcmVzc2lvblR5cGU6OkYzMjoKLSAg
ICAgICAgICAgIEFTU0VSVChtZW1vcnlUeXBlID09IFdBU01NZW1vcnlUeXBlOjpGMzIgJiYgY29u
dmVyc2lvbiA9PSBNZW1vcnlBY2Nlc3NDb252ZXJzaW9uOjpOb0NvbnZlcnNpb24pOwotICAgICAg
ICAgICAgbG9hZDMyKGFkZHJlc3MsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgIHN0b3Jl
MzIoR1BSSW5mbzo6cmVnVDAsIHRlbXBvcmFyeUFkZHJlc3MobV90ZW1wU3RhY2tUb3AgLSAxKSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXQVNNRXhwcmVzc2lvblR5cGU6OkY2
NDoKLSAgICAgICAgICAgIEFTU0VSVChtZW1vcnlUeXBlID09IFdBU01NZW1vcnlUeXBlOjpGNjQg
JiYgY29udmVyc2lvbiA9PSBNZW1vcnlBY2Nlc3NDb252ZXJzaW9uOjpOb0NvbnZlcnNpb24pOwot
ICAgICAgICAgICAgbG9hZERvdWJsZShhZGRyZXNzLCBGUFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAg
ICAgICAgIHN0b3JlRG91YmxlKEZQUkluZm86OmZwUmVnVDAsIHRlbXBvcmFyeUFkZHJlc3MobV90
ZW1wU3RhY2tUb3AgLSAxKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiBVTlVTRUQ7Ci0gICAgfQotCi0gICAgaW50IGJ1aWxkU3RvcmUoV0FTTU9wS2luZCBvcEtp
bmQsIGNvbnN0IE1lbW9yeUFkZHJlc3MmIG1lbW9yeUFkZHJlc3MsIFdBU01FeHByZXNzaW9uVHlw
ZSBleHByZXNzaW9uVHlwZSwgV0FTTU1lbW9yeVR5cGUgbWVtb3J5VHlwZSwgaW50KQotICAgIHsK
LSAgICAgICAgY29uc3QgQXJyYXlCdWZmZXIqIGFycmF5QnVmZmVyID0gbV9tb2R1bGUtPmFycmF5
QnVmZmVyKCktPmltcGwoKTsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGFycmF5QnVmZmVy
LT5kYXRhKCkpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgIGxvYWQzMih0ZW1wb3JhcnlBZGRy
ZXNzKG1fdGVtcFN0YWNrVG9wIC0gMiksIEdQUkluZm86OnJlZ1QxKTsKLSAgICAgICAgaWYgKG1l
bW9yeUFkZHJlc3Mub2Zmc2V0KQotICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKG1lbW9y
eUFkZHJlc3Mub2Zmc2V0KSwgR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QxKTsKLSAgICAg
ICAgYW5kMzIoVHJ1c3RlZEltbTMyKH4oc2l6ZU9mTWVtb3J5VHlwZShtZW1vcnlUeXBlKSAtIDEp
KSwgR1BSSW5mbzo6cmVnVDEpOwotCi0gICAgICAgIEFTU0VSVChhcnJheUJ1ZmZlci0+Ynl0ZUxl
bmd0aCgpIDwgKDF1IDw8IDMxKSk7Ci0gICAgICAgIGlmIChhcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0
aCgpID49IHNpemVPZk1lbW9yeVR5cGUobWVtb3J5VHlwZSkpCi0gICAgICAgICAgICBtX291dE9m
Qm91bmRzRXJyb3JKdW1wTGlzdC5hcHBlbmQoYnJhbmNoMzIoQWJvdmUsIEdQUkluZm86OnJlZ1Qx
LCBUcnVzdGVkSW1tMzIoYXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoKSAtIHNpemVPZk1lbW9yeVR5
cGUobWVtb3J5VHlwZSkpKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fb3V0T2ZCb3Vu
ZHNFcnJvckp1bXBMaXN0LmFwcGVuZChqdW1wKCkpOwotCi0gICAgICAgIEJhc2VJbmRleCBhZGRy
ZXNzID0gQmFzZUluZGV4KEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMSwgVGltZXNPbmUp
OwotCi0gICAgICAgIHN3aXRjaCAoZXhwcmVzc2lvblR5cGUpIHsKLSAgICAgICAgY2FzZSBXQVNN
RXhwcmVzc2lvblR5cGU6OkkzMjoKLSAgICAgICAgICAgIGxvYWQzMih0ZW1wb3JhcnlBZGRyZXNz
KG1fdGVtcFN0YWNrVG9wIC0gMSksIEdQUkluZm86OnJlZ1QyKTsKLSAgICAgICAgICAgIHN3aXRj
aCAobWVtb3J5VHlwZSkgewotICAgICAgICAgICAgY2FzZSBXQVNNTWVtb3J5VHlwZTo6STg6Ci0g
ICAgICAgICAgICAgICAgc3RvcmU4KEdQUkluZm86OnJlZ1QyLCBhZGRyZXNzKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV0FTTU1lbW9yeVR5cGU6OkkxNjoKLSAg
ICAgICAgICAgICAgICBzdG9yZTE2KEdQUkluZm86OnJlZ1QyLCBhZGRyZXNzKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV0FTTU1lbW9yeVR5cGU6OkkzMjoKLSAg
ICAgICAgICAgICAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1QyLCBhZGRyZXNzKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBXQVNNRXhwcmVzc2lvblR5cGU6OkYzMjoKLSAgICAgICAgICAgIEFTU0VSVCht
ZW1vcnlUeXBlID09IFdBU01NZW1vcnlUeXBlOjpGMzIpOwotICAgICAgICAgICAgbG9hZDMyKHRl
bXBvcmFyeUFkZHJlc3MobV90ZW1wU3RhY2tUb3AgLSAxKSwgR1BSSW5mbzo6cmVnVDIpOwotICAg
ICAgICAgICAgc3RvcmUzMihHUFJJbmZvOjpyZWdUMiwgYWRkcmVzcyk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBXQVNNRXhwcmVzc2lvblR5cGU6OkY2NDoKLSAgICAgICAgICAg
IEFTU0VSVChtZW1vcnlUeXBlID09IFdBU01NZW1vcnlUeXBlOjpGNjQpOwotICAgICAgICAgICAg
bG9hZERvdWJsZSh0ZW1wb3JhcnlBZGRyZXNzKG1fdGVtcFN0YWNrVG9wIC0gMSksIEZQUkluZm86
OmZwUmVnVDApOwotICAgICAgICAgICAgc3RvcmVEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMCwgYWRk
cmVzcyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgICAgIG1fdGVtcFN0YWNrVG9w
IC09IDI7Ci0KLSAgICAgICAgaWYgKG9wS2luZCA9PSBXQVNNT3BLaW5kOjpFeHByZXNzaW9uKSB7
Ci0gICAgICAgICAgICBzd2l0Y2ggKGV4cHJlc3Npb25UeXBlKSB7Ci0gICAgICAgICAgICBjYXNl
IFdBU01FeHByZXNzaW9uVHlwZTo6STMyOgotICAgICAgICAgICAgY2FzZSBXQVNNRXhwcmVzc2lv
blR5cGU6OkYzMjoKLSAgICAgICAgICAgICAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1QyLCB0ZW1w
b3JhcnlBZGRyZXNzKG1fdGVtcFN0YWNrVG9wKyspKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGNhc2UgV0FTTUV4cHJlc3Npb25UeXBlOjpGNjQ6Ci0gICAgICAgICAgICAg
ICAgc3RvcmVEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMCwgdGVtcG9yYXJ5QWRkcmVzcyhtX3RlbXBT
dGFja1RvcCsrKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiBVTlVTRUQ7Ci0gICAgfQotCi0gICAgaW50IGJ1aWxk
VW5hcnlJMzIoaW50LCBXQVNNT3BFeHByZXNzaW9uSTMyIG9wKQotICAgIHsKLSAgICAgICAgbG9h
ZDMyKHRlbXBvcmFyeUFkZHJlc3MobV90ZW1wU3RhY2tUb3AgLSAxKSwgR1BSSW5mbzo6cmVnVDAp
OwotICAgICAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkz
Mjo6TmVnYXRlOgotICAgICAgICAgICAgbmVnMzIoR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6Qml0Tm90OgotICAg
ICAgICAgICAgeG9yMzIoVHJ1c3RlZEltbTMyKC0xKSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6Q291bnRMZWFk
aW5nWmVyb3M6Ci0gICAgICAgICAgICBjb3VudExlYWRpbmdaZXJvczMyKEdQUkluZm86OnJlZ1Qw
LCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXQVNN
T3BFeHByZXNzaW9uSTMyOjpMb2dpY2FsTm90OiB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogRG9u
J3QgdXNlIGJyYW5jaGVzLgotICAgICAgICAgICAgSnVtcCB6ZXJvID0gYnJhbmNoVGVzdDMyKFpl
cm8sIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCBH
UFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBKdW1wIGVuZCA9IGp1bXAoKTsKLSAgICAgICAg
ICAgIHplcm8ubGluayh0aGlzKTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDEpLCBH
UFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBlbmQubGluayh0aGlzKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6QWJz
OiB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogRG9uJ3QgdXNlIGJyYW5jaGVzLgotICAgICAgICAg
ICAgSnVtcCBlbmQgPSBicmFuY2hUZXN0MzIoUG9zaXRpdmVPclplcm8sIEdQUkluZm86OnJlZ1Qw
KTsKLSAgICAgICAgICAgIG5lZzMyKEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgIGVuZC5s
aW5rKHRoaXMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgICAg
IHN0b3JlMzIoR1BSSW5mbzo6cmVnVDAsIHRlbXBvcmFyeUFkZHJlc3MobV90ZW1wU3RhY2tUb3Ag
LSAxKSk7Ci0gICAgICAgIHJldHVybiBVTlVTRUQ7Ci0gICAgfQotCi0gICAgaW50IGJ1aWxkVW5h
cnlGMzIoaW50LCBXQVNNT3BFeHByZXNzaW9uRjMyIG9wKQotICAgIHsKLSAgICAgICAgbG9hZERv
dWJsZSh0ZW1wb3JhcnlBZGRyZXNzKG1fdGVtcFN0YWNrVG9wIC0gMSksIEZQUkluZm86OmZwUmVn
VDEpOwotICAgICAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lv
bkYzMjo6TmVnYXRlOgotICAgICAgICAgICAgY29udmVydEZsb2F0VG9Eb3VibGUoRlBSSW5mbzo6
ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMSk7Ci0gICAgICAgICAgICBuZWdhdGVEb3VibGUoRlBS
SW5mbzo6ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7Ci0gICAgICAgICAgICBjb252ZXJ0RG91
YmxlVG9GbG9hdChGUFJJbmZvOjpmcFJlZ1QwLCBGUFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GMzI6OkFiczoKLSAgICAg
ICAgICAgIGNvbnZlcnRGbG9hdFRvRG91YmxlKEZQUkluZm86OmZwUmVnVDEsIEZQUkluZm86OmZw
UmVnVDEpOwotICAgICAgICAgICAgYWJzRG91YmxlKEZQUkluZm86OmZwUmVnVDEsIEZQUkluZm86
OmZwUmVnVDApOwotICAgICAgICAgICAgY29udmVydERvdWJsZVRvRmxvYXQoRlBSSW5mbzo6ZnBS
ZWdUMCwgRlBSSW5mbzo6ZnBSZWdUMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBXQVNNT3BFeHByZXNzaW9uRjMyOjpDZWlsOgotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihj
ZWlsZiwgRlBSSW5mbzo6ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uRjMyOjpGbG9vcjoKLSAgICAgICAg
ICAgIGNhbGxPcGVyYXRpb24oZmxvb3JmLCBGUFJJbmZvOjpmcFJlZ1QxLCBGUFJJbmZvOjpmcFJl
Z1QwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25G
MzI6OlNxcnQ6Ci0gICAgICAgICAgICBjb252ZXJ0RmxvYXRUb0RvdWJsZShGUFJJbmZvOjpmcFJl
Z1QxLCBGUFJJbmZvOjpmcFJlZ1QxKTsKLSAgICAgICAgICAgIHNxcnREb3VibGUoRlBSSW5mbzo6
ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7Ci0gICAgICAgICAgICBjb252ZXJ0RG91YmxlVG9G
bG9hdChGUFJJbmZvOjpmcFJlZ1QwLCBGUFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgIH0KLSAgICAgICAgc3RvcmVEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMCwgdGVtcG9y
YXJ5QWRkcmVzcyhtX3RlbXBTdGFja1RvcCAtIDEpKTsKLSAgICAgICAgcmV0dXJuIFVOVVNFRDsK
LSAgICB9Ci0KLSAgICBpbnQgYnVpbGRVbmFyeUY2NChpbnQsIFdBU01PcEV4cHJlc3Npb25GNjQg
b3ApCi0gICAgewotICAgICAgICBsb2FkRG91YmxlKHRlbXBvcmFyeUFkZHJlc3MobV90ZW1wU3Rh
Y2tUb3AgLSAxKSwgRlBSSW5mbzo6ZnBSZWdUMSk7Ci0gICAgICAgIHN3aXRjaCAob3ApIHsKLSAg
ICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uRjY0OjpOZWdhdGU6Ci0gICAgICAgICAgICBuZWdh
dGVEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uRjY0OjpBYnM6Ci0gICAgICAg
ICAgICBhYnNEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uRjY0OjpTcXJ0Ogot
ICAgICAgICAgICAgc3FydERvdWJsZShGUFJJbmZvOjpmcFJlZ1QxLCBGUFJJbmZvOjpmcFJlZ1Qw
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6
OkNlaWw6Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkY2NDo6Rmxvb3I6Ci0gICAgICAg
IGNhc2UgV0FTTU9wRXhwcmVzc2lvbkY2NDo6Q29zOgotICAgICAgICBjYXNlIFdBU01PcEV4cHJl
c3Npb25GNjQ6OlNpbjoKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uRjY0OjpUYW46Ci0g
ICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkY2NDo6QUNvczoKLSAgICAgICAgY2FzZSBXQVNN
T3BFeHByZXNzaW9uRjY0OjpBU2luOgotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6
OkFUYW46Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkY2NDo6RXhwOgotICAgICAgICBj
YXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6OkxuOgotICAgICAgICAgICAgRF9KSVRPcGVyYXRpb25f
RCBvcGVyYXRpb247Ci0gICAgICAgICAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgICAgICBjYXNl
IFdBU01PcEV4cHJlc3Npb25GNjQ6OkNlaWw6Ci0gICAgICAgICAgICAgICAgb3BlcmF0aW9uID0g
Y2VpbDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV0FTTU9wRXhw
cmVzc2lvbkY2NDo6Rmxvb3I6Ci0gICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gZmxvb3I7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25G
NjQ6OkNvczoKLSAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBjb3M7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6OlNpbjoKLSAg
ICAgICAgICAgICAgICBvcGVyYXRpb24gPSBzaW47Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6OlRhbjoKLSAgICAgICAgICAgICAg
ICBvcGVyYXRpb24gPSB0YW47Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBj
YXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6OkFDb3M6Ci0gICAgICAgICAgICAgICAgb3BlcmF0aW9u
ID0gYWNvczsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV0FTTU9w
RXhwcmVzc2lvbkY2NDo6QVNpbjoKLSAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBhc2luOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9u
RjY0OjpBVGFuOgotICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IGF0YW47Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6OkV4cDoK
LSAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBleHA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6OkxuOgotICAgICAgICAgICAg
ICAgIG9wZXJhdGlvbiA9IGxvZzsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBGUFJJ
bmZvOjpmcFJlZ1QxLCBGUFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
IH0KLSAgICAgICAgc3RvcmVEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMCwgdGVtcG9yYXJ5QWRkcmVz
cyhtX3RlbXBTdGFja1RvcCAtIDEpKTsKLSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9Ci0K
LSAgICBpbnQgYnVpbGRCaW5hcnlJMzIoaW50LCBpbnQsIFdBU01PcEV4cHJlc3Npb25JMzIgb3Ap
Ci0gICAgewotICAgICAgICBsb2FkMzIodGVtcG9yYXJ5QWRkcmVzcyhtX3RlbXBTdGFja1RvcCAt
IDIpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgIGxvYWQzMih0ZW1wb3JhcnlBZGRyZXNzKG1f
dGVtcFN0YWNrVG9wIC0gMSksIEdQUkluZm86OnJlZ1QxKTsKLSAgICAgICAgc3dpdGNoIChvcCkg
ewotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OkFkZDoKLSAgICAgICAgICAgIGFk
ZDMyKEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpTdWI6Ci0gICAgICAgICAgICBzdWIz
MihHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6TXVsOgotICAgICAgICAgICAgbXVsMzIo
R1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OlNEaXY6Ci0gICAgICAgIGNhc2UgV0FTTU9w
RXhwcmVzc2lvbkkzMjo6VURpdjoKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpT
TW9kOgotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OlVNb2Q6IHsKLSAgICAgICAg
ICAgIG1fZGl2aWRlRXJyb3JKdW1wTGlzdC5hcHBlbmQoYnJhbmNoVGVzdDMyKFplcm8sIEdQUklu
Zm86OnJlZ1QxKSk7Ci0gICAgICAgICAgICBpZiAob3AgPT0gV0FTTU9wRXhwcmVzc2lvbkkzMjo6
U0RpdiB8fCBvcCA9PSBXQVNNT3BFeHByZXNzaW9uSTMyOjpTTW9kKSB7Ci0gICAgICAgICAgICAg
ICAgSnVtcCBkZW5vbWluYXRvck5vdE5lZzEgPSBicmFuY2gzMihOb3RFcXVhbCwgR1BSSW5mbzo6
cmVnVDEsIFRydXN0ZWRJbW0zMigtMSkpOwotICAgICAgICAgICAgICAgIG1fZGl2aWRlRXJyb3JK
dW1wTGlzdC5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIEdQUkluZm86OnJlZ1QwLCBUcnVzdGVkSW1t
MzIoLTIxNDc0ODM2NDctMSkpKTsKLSAgICAgICAgICAgICAgICBkZW5vbWluYXRvck5vdE5lZzEu
bGluayh0aGlzKTsKLSAgICAgICAgICAgIH0KLSNpZiBDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KQot
ICAgICAgICAgICAgQVNTRVJUKEdQUkluZm86OnJlZ1QwID09IFg4NlJlZ2lzdGVyczo6ZWF4KTsK
LSAgICAgICAgICAgIG1vdmUoR1BSSW5mbzo6cmVnVDEsIFg4NlJlZ2lzdGVyczo6ZWN4KTsKLSAg
ICAgICAgICAgIGlmIChvcCA9PSBXQVNNT3BFeHByZXNzaW9uSTMyOjpTRGl2IHx8IG9wID09IFdB
U01PcEV4cHJlc3Npb25JMzI6OlNNb2QpIHsKLSAgICAgICAgICAgICAgICB4ODZDb252ZXJ0VG9E
b3VibGVXb3JkMzIoKTsKLSAgICAgICAgICAgICAgICB4ODZEaXYzMihYODZSZWdpc3RlcnM6OmVj
eCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEFTU0VSVChvcCA9PSBX
QVNNT3BFeHByZXNzaW9uSTMyOjpVRGl2IHx8IG9wID09IFdBU01PcEV4cHJlc3Npb25JMzI6OlVN
b2QpOwotICAgICAgICAgICAgICAgIHhvcjMyKFg4NlJlZ2lzdGVyczo6ZWR4LCBYODZSZWdpc3Rl
cnM6OmVkeCk7Ci0gICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuZGl2bF9yKFg4NlJlZ2lzdGVy
czo6ZWN4KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChvcCA9PSBXQVNNT3BFeHBy
ZXNzaW9uSTMyOjpTTW9kIHx8IG9wID09IFdBU01PcEV4cHJlc3Npb25JMzI6OlVNb2QpCi0gICAg
ICAgICAgICAgICAgbW92ZShYODZSZWdpc3RlcnM6OmVkeCwgR1BSSW5mbzo6cmVnVDApOwotI2Vs
c2UKLSAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBkbyBhbiBpbmxp
bmUgZGl2IG9uIEFSTXY3IGFuZCBBUk02NC4KLSAgICAgICAgICAgIHN3aXRjaCAob3ApIHsKLSAg
ICAgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6U0RpdjoKLSAgICAgICAgICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRpdiwgR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJl
Z1QxLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OlVEaXY6Ci0gICAgICAgICAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25VbnNpZ25lZERpdiwgR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJl
Z1QxLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OlNNb2Q6Ci0gICAgICAgICAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Nb2QsIEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMSwgR1BS
SW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBX
QVNNT3BFeHByZXNzaW9uSTMyOjpVTW9kOgotICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uVW5zaWduZWRNb2QsIEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMSwgR1BS
SW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIH0K
LSNlbmRpZgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBXQVNN
T3BFeHByZXNzaW9uSTMyOjpCaXRPcjoKLSAgICAgICAgICAgIG9yMzIoR1BSSW5mbzo6cmVnVDEs
IEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdBU01P
cEV4cHJlc3Npb25JMzI6OkJpdEFuZDoKLSAgICAgICAgICAgIGFuZDMyKEdQUkluZm86OnJlZ1Qx
LCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXQVNN
T3BFeHByZXNzaW9uSTMyOjpCaXRYb3I6Ci0gICAgICAgICAgICB4b3IzMihHUFJJbmZvOjpyZWdU
MSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV0FT
TU9wRXhwcmVzc2lvbkkzMjo6TGVmdFNoaWZ0OgotICAgICAgICAgICAgbHNoaWZ0MzIoR1BSSW5m
bzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OkFyaXRobWV0aWNSaWdodFNoaWZ0OgotICAgICAgICAg
ICAgcnNoaWZ0MzIoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OkxvZ2ljYWxSaWdodFNo
aWZ0OgotICAgICAgICAgICAgdXJzaGlmdDMyKEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdU
MCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgICAgIG1fdGVtcFN0YWNrVG9wLS07
Ci0gICAgICAgIHN0b3JlMzIoR1BSSW5mbzo6cmVnVDAsIHRlbXBvcmFyeUFkZHJlc3MobV90ZW1w
U3RhY2tUb3AgLSAxKSk7Ci0gICAgICAgIHJldHVybiBVTlVTRUQ7Ci0gICAgfQotCi0gICAgaW50
IGJ1aWxkQmluYXJ5RjMyKGludCwgaW50LCBXQVNNT3BFeHByZXNzaW9uRjMyIG9wKQotICAgIHsK
LSAgICAgICAgbG9hZERvdWJsZSh0ZW1wb3JhcnlBZGRyZXNzKG1fdGVtcFN0YWNrVG9wIC0gMiks
IEZQUkluZm86OmZwUmVnVDApOwotICAgICAgICBsb2FkRG91YmxlKHRlbXBvcmFyeUFkZHJlc3Mo
bV90ZW1wU3RhY2tUb3AgLSAxKSwgRlBSSW5mbzo6ZnBSZWdUMSk7Ci0gICAgICAgIGNvbnZlcnRG
bG9hdFRvRG91YmxlKEZQUkluZm86OmZwUmVnVDAsIEZQUkluZm86OmZwUmVnVDApOwotICAgICAg
ICBjb252ZXJ0RmxvYXRUb0RvdWJsZShGUFJJbmZvOjpmcFJlZ1QxLCBGUFJJbmZvOjpmcFJlZ1Qx
KTsKLSAgICAgICAgc3dpdGNoIChvcCkgewotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25G
MzI6OkFkZDoKLSAgICAgICAgICAgIGFkZERvdWJsZShGUFJJbmZvOjpmcFJlZ1QxLCBGUFJJbmZv
OjpmcFJlZ1QwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJl
c3Npb25GMzI6OlN1YjoKLSAgICAgICAgICAgIHN1YkRvdWJsZShGUFJJbmZvOjpmcFJlZ1QxLCBG
UFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdBU01P
cEV4cHJlc3Npb25GMzI6Ok11bDoKLSAgICAgICAgICAgIG11bERvdWJsZShGUFJJbmZvOjpmcFJl
Z1QxLCBGUFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IFdBU01PcEV4cHJlc3Npb25GMzI6OkRpdjoKLSAgICAgICAgICAgIGRpdkRvdWJsZShGUFJJbmZv
OjpmcFJlZ1QxLCBGUFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgfQotICAgICAgICBjb252ZXJ0RG91YmxlVG9GbG9hdChGUFJJbmZvOjpmcFJlZ1QwLCBG
UFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgbV90ZW1wU3RhY2tUb3AtLTsKLSAgICAgICAgc3Rv
cmVEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMCwgdGVtcG9yYXJ5QWRkcmVzcyhtX3RlbXBTdGFja1Rv
cCAtIDEpKTsKLSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9Ci0KLSAgICBpbnQgYnVpbGRC
aW5hcnlGNjQoaW50LCBpbnQsIFdBU01PcEV4cHJlc3Npb25GNjQgb3ApCi0gICAgewotICAgICAg
ICBsb2FkRG91YmxlKHRlbXBvcmFyeUFkZHJlc3MobV90ZW1wU3RhY2tUb3AgLSAyKSwgRlBSSW5m
bzo6ZnBSZWdUMCk7Ci0gICAgICAgIGxvYWREb3VibGUodGVtcG9yYXJ5QWRkcmVzcyhtX3RlbXBT
dGFja1RvcCAtIDEpLCBGUFJJbmZvOjpmcFJlZ1QxKTsKLSAgICAgICAgc3dpdGNoIChvcCkgewot
ICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6OkFkZDoKLSAgICAgICAgICAgIGFkZERv
dWJsZShGUFJJbmZvOjpmcFJlZ1QxLCBGUFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6OlN1YjoKLSAgICAgICAgICAg
IHN1YkRvdWJsZShGUFJJbmZvOjpmcFJlZ1QxLCBGUFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6Ok11bDoKLSAgICAg
ICAgICAgIG11bERvdWJsZShGUFJJbmZvOjpmcFJlZ1QxLCBGUFJJbmZvOjpmcFJlZ1QwKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6OkRpdjoK
LSAgICAgICAgICAgIGRpdkRvdWJsZShGUFJJbmZvOjpmcFJlZ1QxLCBGUFJJbmZvOjpmcFJlZ1Qw
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6
Ok1vZDoKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uRjY0OjpBVGFuMjoKLSAgICAgICAg
Y2FzZSBXQVNNT3BFeHByZXNzaW9uRjY0OjpQb3c6Ci0gICAgICAgICAgICBEX0pJVE9wZXJhdGlv
bl9ERCBvcGVyYXRpb247Ci0gICAgICAgICAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgICAgICBj
YXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6Ok1vZDoKLSAgICAgICAgICAgICAgICBvcGVyYXRpb24g
PSBmbW9kOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBXQVNNT3BF
eHByZXNzaW9uRjY0OjpBVGFuMjoKLSAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBhdGFuMjsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lv
bkY2NDo6UG93OgotICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IHBvdzsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uLCBGUFJJbmZvOjpmcFJlZ1QwLCBGUFJJbmZvOjpmcFJlZ1QxLCBG
UFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLSAgICAgICAgbV90
ZW1wU3RhY2tUb3AtLTsKLSAgICAgICAgc3RvcmVEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMCwgdGVt
cG9yYXJ5QWRkcmVzcyhtX3RlbXBTdGFja1RvcCAtIDEpKTsKLSAgICAgICAgcmV0dXJuIFVOVVNF
RDsKLSAgICB9Ci0KLSAgICBpbnQgYnVpbGRSZWxhdGlvbmFsSTMyKGludCwgaW50LCBXQVNNT3BF
eHByZXNzaW9uSTMyIG9wKQotICAgIHsKLSAgICAgICAgbG9hZDMyKHRlbXBvcmFyeUFkZHJlc3Mo
bV90ZW1wU3RhY2tUb3AgLSAyKSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICBsb2FkMzIodGVt
cG9yYXJ5QWRkcmVzcyhtX3RlbXBTdGFja1RvcCAtIDEpLCBHUFJJbmZvOjpyZWdUMSk7Ci0gICAg
ICAgIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uOwotICAgICAgICBzd2l0Y2ggKG9wKSB7
Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6RXF1YWxJMzI6Ci0gICAgICAgICAg
ICBjb25kaXRpb24gPSBFcXVhbDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdB
U01PcEV4cHJlc3Npb25JMzI6Ok5vdEVxdWFsSTMyOgotICAgICAgICAgICAgY29uZGl0aW9uID0g
Tm90RXF1YWw7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNz
aW9uSTMyOjpTTGVzc1RoYW5JMzI6Ci0gICAgICAgICAgICBjb25kaXRpb24gPSBMZXNzVGhhbjsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OlVM
ZXNzVGhhbkkzMjoKLSAgICAgICAgICAgIGNvbmRpdGlvbiA9IEJlbG93OwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6U0xlc3NUaGFuT3JFcXVh
bEkzMjoKLSAgICAgICAgICAgIGNvbmRpdGlvbiA9IExlc3NUaGFuT3JFcXVhbDsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OlVMZXNzVGhhbk9y
RXF1YWxJMzI6Ci0gICAgICAgICAgICBjb25kaXRpb24gPSBCZWxvd09yRXF1YWw7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpTR3JlYXRlclRo
YW5JMzI6Ci0gICAgICAgICAgICBjb25kaXRpb24gPSBHcmVhdGVyVGhhbjsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OlVHcmVhdGVyVGhhbkkz
MjoKLSAgICAgICAgICAgIGNvbmRpdGlvbiA9IEFib3ZlOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6U0dyZWF0ZXJUaGFuT3JFcXVhbEkzMjoK
LSAgICAgICAgICAgIGNvbmRpdGlvbiA9IEdyZWF0ZXJUaGFuT3JFcXVhbDsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OlVHcmVhdGVyVGhhbk9y
RXF1YWxJMzI6Ci0gICAgICAgICAgICBjb25kaXRpb24gPSBBYm92ZU9yRXF1YWw7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLSAgICAgICAgY29tcGFyZTMyKGNvbmRpdGlvbiwg
R1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAg
IG1fdGVtcFN0YWNrVG9wLS07Ci0gICAgICAgIHN0b3JlMzIoR1BSSW5mbzo6cmVnVDAsIHRlbXBv
cmFyeUFkZHJlc3MobV90ZW1wU3RhY2tUb3AgLSAxKSk7Ci0gICAgICAgIHJldHVybiBVTlVTRUQ7
Ci0gICAgfQotCi0gICAgaW50IGJ1aWxkUmVsYXRpb25hbEYzMihpbnQsIGludCwgV0FTTU9wRXhw
cmVzc2lvbkkzMiBvcCkKLSAgICB7Ci0gICAgICAgIGxvYWREb3VibGUodGVtcG9yYXJ5QWRkcmVz
cyhtX3RlbXBTdGFja1RvcCAtIDIpLCBGUFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgbG9hZERv
dWJsZSh0ZW1wb3JhcnlBZGRyZXNzKG1fdGVtcFN0YWNrVG9wIC0gMSksIEZQUkluZm86OmZwUmVn
VDEpOwotICAgICAgICBjb252ZXJ0RmxvYXRUb0RvdWJsZShGUFJJbmZvOjpmcFJlZ1QwLCBGUFJJ
bmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgY29udmVydEZsb2F0VG9Eb3VibGUoRlBSSW5mbzo6ZnBS
ZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMSk7Ci0gICAgICAgIERvdWJsZUNvbmRpdGlvbiBjb25kaXRp
b247Ci0gICAgICAgIHN3aXRjaCAob3ApIHsKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9u
STMyOjpFcXVhbEYzMjoKLSAgICAgICAgICAgIGNvbmRpdGlvbiA9IERvdWJsZUVxdWFsOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6Tm90RXF1
YWxGMzI6Ci0gICAgICAgICAgICBjb25kaXRpb24gPSBEb3VibGVOb3RFcXVhbDsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6Okxlc3NUaGFuRjMy
OgotICAgICAgICAgICAgY29uZGl0aW9uID0gRG91YmxlTGVzc1RoYW47Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpMZXNzVGhhbk9yRXF1YWxG
MzI6Ci0gICAgICAgICAgICBjb25kaXRpb24gPSBEb3VibGVMZXNzVGhhbk9yRXF1YWw7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpHcmVhdGVy
VGhhbkYzMjoKLSAgICAgICAgICAgIGNvbmRpdGlvbiA9IERvdWJsZUdyZWF0ZXJUaGFuOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6R3JlYXRl
clRoYW5PckVxdWFsRjMyOgotICAgICAgICAgICAgY29uZGl0aW9uID0gRG91YmxlR3JlYXRlclRo
YW5PckVxdWFsOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgICAgIG1f
dGVtcFN0YWNrVG9wLS07Ci0gICAgICAgIEp1bXAgdHJ1ZUNhc2UgPSBicmFuY2hEb3VibGUoY29u
ZGl0aW9uLCBGUFJJbmZvOjpmcFJlZ1QwLCBGUFJJbmZvOjpmcFJlZ1QxKTsKLSAgICAgICAgc3Rv
cmUzMihUcnVzdGVkSW1tMzIoMCksIHRlbXBvcmFyeUFkZHJlc3MobV90ZW1wU3RhY2tUb3AgLSAx
KSk7Ci0gICAgICAgIEp1bXAgZW5kID0ganVtcCgpOwotICAgICAgICB0cnVlQ2FzZS5saW5rKHRo
aXMpOwotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMigxKSwgdGVtcG9yYXJ5QWRkcmVzcyht
X3RlbXBTdGFja1RvcCAtIDEpKTsKLSAgICAgICAgZW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIHJl
dHVybiBVTlVTRUQ7Ci0gICAgfQotCi0gICAgaW50IGJ1aWxkUmVsYXRpb25hbEY2NChpbnQsIGlu
dCwgV0FTTU9wRXhwcmVzc2lvbkkzMiBvcCkKLSAgICB7Ci0gICAgICAgIGxvYWREb3VibGUodGVt
cG9yYXJ5QWRkcmVzcyhtX3RlbXBTdGFja1RvcCAtIDIpLCBGUFJJbmZvOjpmcFJlZ1QwKTsKLSAg
ICAgICAgbG9hZERvdWJsZSh0ZW1wb3JhcnlBZGRyZXNzKG1fdGVtcFN0YWNrVG9wIC0gMSksIEZQ
UkluZm86OmZwUmVnVDEpOwotICAgICAgICBEb3VibGVDb25kaXRpb24gY29uZGl0aW9uOwotICAg
ICAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6RXF1
YWxGNjQ6Ci0gICAgICAgICAgICBjb25kaXRpb24gPSBEb3VibGVFcXVhbDsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6Ok5vdEVxdWFsRjY0Ogot
ICAgICAgICAgICAgY29uZGl0aW9uID0gRG91YmxlTm90RXF1YWw7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpMZXNzVGhhbkY2NDoKLSAgICAg
ICAgICAgIGNvbmRpdGlvbiA9IERvdWJsZUxlc3NUaGFuOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6TGVzc1RoYW5PckVxdWFsRjY0OgotICAg
ICAgICAgICAgY29uZGl0aW9uID0gRG91YmxlTGVzc1RoYW5PckVxdWFsOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6R3JlYXRlclRoYW5GNjQ6
Ci0gICAgICAgICAgICBjb25kaXRpb24gPSBEb3VibGVHcmVhdGVyVGhhbjsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OkdyZWF0ZXJUaGFuT3JF
cXVhbEY2NDoKLSAgICAgICAgICAgIGNvbmRpdGlvbiA9IERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVh
bDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgICAgICBtX3RlbXBTdGFj
a1RvcC0tOwotICAgICAgICBKdW1wIHRydWVDYXNlID0gYnJhbmNoRG91YmxlKGNvbmRpdGlvbiwg
RlBSSW5mbzo6ZnBSZWdUMCwgRlBSSW5mbzo6ZnBSZWdUMSk7Ci0gICAgICAgIHN0b3JlMzIoVHJ1
c3RlZEltbTMyKDApLCB0ZW1wb3JhcnlBZGRyZXNzKG1fdGVtcFN0YWNrVG9wIC0gMSkpOwotICAg
ICAgICBKdW1wIGVuZCA9IGp1bXAoKTsKLSAgICAgICAgdHJ1ZUNhc2UubGluayh0aGlzKTsKLSAg
ICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoMSksIHRlbXBvcmFyeUFkZHJlc3MobV90ZW1wU3Rh
Y2tUb3AgLSAxKSk7Ci0gICAgICAgIGVuZC5saW5rKHRoaXMpOwotICAgICAgICByZXR1cm4gVU5V
U0VEOwotICAgIH0KLQotICAgIGludCBidWlsZE1pbk9yTWF4STMyKGludCwgaW50LCBXQVNNT3BF
eHByZXNzaW9uSTMyIG9wKQotICAgIHsKLSAgICAgICAgbG9hZDMyKHRlbXBvcmFyeUFkZHJlc3Mo
bV90ZW1wU3RhY2tUb3AgLSAyKSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICBsb2FkMzIodGVt
cG9yYXJ5QWRkcmVzcyhtX3RlbXBTdGFja1RvcCAtIDEpLCBHUFJJbmZvOjpyZWdUMSk7Ci0gICAg
ICAgIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uOwotICAgICAgICBzd2l0Y2ggKG9wKSB7
Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6U01pbjoKLSAgICAgICAgICAgIGNv
bmRpdGlvbiA9IExlc3NUaGFuT3JFcXVhbDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OlVNaW46Ci0gICAgICAgICAgICBjb25kaXRpb24gPSBC
ZWxvd09yRXF1YWw7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXQVNNT3BFeHBy
ZXNzaW9uSTMyOjpTTWF4OgotICAgICAgICAgICAgY29uZGl0aW9uID0gR3JlYXRlclRoYW5PckVx
dWFsOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkz
Mjo6VU1heDoKLSAgICAgICAgICAgIGNvbmRpdGlvbiA9IEFib3ZlT3JFcXVhbDsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgICAgICBKdW1wIHVzZUxlZnQgPSBicmFuY2gz
Mihjb25kaXRpb24sIEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMSk7Ci0gICAgICAgIHN0
b3JlMzIoR1BSSW5mbzo6cmVnVDEsIHRlbXBvcmFyeUFkZHJlc3MobV90ZW1wU3RhY2tUb3AgLSAy
KSk7Ci0gICAgICAgIHVzZUxlZnQubGluayh0aGlzKTsKLSAgICAgICAgbV90ZW1wU3RhY2tUb3At
LTsKLSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9Ci0KLSAgICBpbnQgYnVpbGRNaW5Pck1h
eEY2NChpbnQsIGludCwgV0FTTU9wRXhwcmVzc2lvbkY2NCBvcCkKLSAgICB7Ci0gICAgICAgIGxv
YWREb3VibGUodGVtcG9yYXJ5QWRkcmVzcyhtX3RlbXBTdGFja1RvcCAtIDIpLCBGUFJJbmZvOjpm
cFJlZ1QwKTsKLSAgICAgICAgbG9hZERvdWJsZSh0ZW1wb3JhcnlBZGRyZXNzKG1fdGVtcFN0YWNr
VG9wIC0gMSksIEZQUkluZm86OmZwUmVnVDEpOwotICAgICAgICBEb3VibGVDb25kaXRpb24gY29u
ZGl0aW9uOwotICAgICAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVz
c2lvbkY2NDo6TWluOgotICAgICAgICAgICAgY29uZGl0aW9uID0gRG91YmxlTGVzc1RoYW5PckVx
dWFsOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkY2
NDo6TWF4OgotICAgICAgICAgICAgY29uZGl0aW9uID0gRG91YmxlR3JlYXRlclRoYW5PckVxdWFs
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgICAgIEp1bXAgdXNlTGVm
dCA9IGJyYW5jaERvdWJsZShjb25kaXRpb24sIEZQUkluZm86OmZwUmVnVDAsIEZQUkluZm86OmZw
UmVnVDEpOwotICAgICAgICBzdG9yZURvdWJsZShGUFJJbmZvOjpmcFJlZ1QxLCB0ZW1wb3JhcnlB
ZGRyZXNzKG1fdGVtcFN0YWNrVG9wIC0gMikpOwotICAgICAgICB1c2VMZWZ0LmxpbmsodGhpcyk7
Ci0gICAgICAgIG1fdGVtcFN0YWNrVG9wLS07Ci0gICAgICAgIHJldHVybiBVTlVTRUQ7Ci0gICAg
fQotCi0gICAgaW50IGJ1aWxkQ2FsbEludGVybmFsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGlu
dCwgY29uc3QgV0FTTVNpZ25hdHVyZSYgc2lnbmF0dXJlLCBXQVNNRXhwcmVzc2lvblR5cGUgcmV0
dXJuVHlwZSkKLSAgICB7Ci0gICAgICAgIGJveEFyZ3VtZW50c0FuZEFkanVzdFN0YWNrUG9pbnRl
cihzaWduYXR1cmUuYXJndW1lbnRzKTsKLQotICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9
IG1fbW9kdWxlLT5mdW5jdGlvbnMoKVtmdW5jdGlvbkluZGV4XS5nZXQoKTsKLSAgICAgICAgbW92
ZShUcnVzdGVkSW1tUHRyKGZ1bmN0aW9uKSwgR1BSSW5mbzo6cmVnVDApOwotCi0gICAgICAgIGNh
bGxBbmRVbmJveFJlc3VsdChyZXR1cm5UeXBlKTsKLSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAg
ICB9Ci0KLSAgICBpbnQgYnVpbGRDYWxsSW5kaXJlY3QodWludDMyX3QgZnVuY3Rpb25Qb2ludGVy
VGFibGVJbmRleCwgaW50LCBpbnQsIGNvbnN0IFdBU01TaWduYXR1cmUmIHNpZ25hdHVyZSwgV0FT
TUV4cHJlc3Npb25UeXBlIHJldHVyblR5cGUpCi0gICAgewotICAgICAgICBib3hBcmd1bWVudHNB
bmRBZGp1c3RTdGFja1BvaW50ZXIoc2lnbmF0dXJlLmFyZ3VtZW50cyk7Ci0KLSAgICAgICAgY29u
c3QgVmVjdG9yPEpTRnVuY3Rpb24qPiYgZnVuY3Rpb25zID0gbV9tb2R1bGUtPmZ1bmN0aW9uUG9p
bnRlclRhYmxlcygpW2Z1bmN0aW9uUG9pbnRlclRhYmxlSW5kZXhdLmZ1bmN0aW9uczsKLSAgICAg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKGZ1bmN0aW9ucy5kYXRhKCkpLCBHUFJJbmZvOjpyZWdUMCk7
Ci0gICAgICAgIGxvYWQzMih0ZW1wb3JhcnlBZGRyZXNzKG1fdGVtcFN0YWNrVG9wIC0gMSksIEdQ
UkluZm86OnJlZ1QxKTsKLSAgICAgICAgbV90ZW1wU3RhY2tUb3AtLTsKLSAgICAgICAgYW5kMzIo
VHJ1c3RlZEltbTMyKGZ1bmN0aW9ucy5zaXplKCkgLSAxKSwgR1BSSW5mbzo6cmVnVDEpOwotICAg
ICAgICBsb2FkUHRyKEJhc2VJbmRleChHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDEsIHRp
bWVzUHRyKCkpLCBHUFJJbmZvOjpyZWdUMCk7Ci0KLSAgICAgICAgY2FsbEFuZFVuYm94UmVzdWx0
KHJldHVyblR5cGUpOwotICAgICAgICByZXR1cm4gVU5VU0VEOwotICAgIH0KLQotICAgIGludCBi
dWlsZENhbGxJbXBvcnQodWludDMyX3QgZnVuY3Rpb25JbXBvcnRJbmRleCwgaW50LCBjb25zdCBX
QVNNU2lnbmF0dXJlJiBzaWduYXR1cmUsIFdBU01FeHByZXNzaW9uVHlwZSByZXR1cm5UeXBlKQot
ICAgIHsKLSAgICAgICAgYm94QXJndW1lbnRzQW5kQWRqdXN0U3RhY2tQb2ludGVyKHNpZ25hdHVy
ZS5hcmd1bWVudHMpOwotCi0gICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0gbV9tb2R1bGUt
PmltcG9ydGVkRnVuY3Rpb25zKClbZnVuY3Rpb25JbXBvcnRJbmRleF0uZ2V0KCk7Ci0gICAgICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihmdW5jdGlvbiksIEdQUkluZm86OnJlZ1QwKTsKLQotICAgICAg
ICBjYWxsQW5kVW5ib3hSZXN1bHQocmV0dXJuVHlwZSk7Ci0gICAgICAgIHJldHVybiBVTlVTRUQ7
Ci0gICAgfQotCi0gICAgdm9pZCBhcHBlbmRFeHByZXNzaW9uTGlzdChpbnQmLCBpbnQpIHsgfQot
Ci0gICAgdm9pZCBkaXNjYXJkKGludCkKLSAgICB7Ci0gICAgICAgIG1fdGVtcFN0YWNrVG9wLS07
Ci0gICAgfQotCi0gICAgdm9pZCBsaW5rVGFyZ2V0KEp1bXBUYXJnZXQmIHRhcmdldCkKLSAgICB7
Ci0gICAgICAgIHRhcmdldC5sYWJlbCA9IGxhYmVsKCk7Ci0gICAgICAgIHRhcmdldC5qdW1wTGlz
dC5saW5rKHRoaXMpOwotICAgIH0KLQotICAgIHZvaWQganVtcFRvVGFyZ2V0KEp1bXBUYXJnZXQm
IHRhcmdldCkKLSAgICB7Ci0gICAgICAgIGlmICh0YXJnZXQubGFiZWwuaXNTZXQoKSkKLSAgICAg
ICAgICAgIGp1bXAodGFyZ2V0LmxhYmVsKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdGFy
Z2V0Lmp1bXBMaXN0LmFwcGVuZChqdW1wKCkpOwotICAgIH0KLQotICAgIHZvaWQganVtcFRvVGFy
Z2V0SWYoSnVtcENvbmRpdGlvbiBjb25kaXRpb24sIGludCwgSnVtcFRhcmdldCYgdGFyZ2V0KQot
ICAgIHsKLSAgICAgICAgbG9hZDMyKHRlbXBvcmFyeUFkZHJlc3MobV90ZW1wU3RhY2tUb3AgLSAx
KSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICBtX3RlbXBTdGFja1RvcC0tOwotICAgICAgICBK
dW1wIHRha2VuID0gYnJhbmNoVGVzdDMyKChjb25kaXRpb24gPT0gSnVtcENvbmRpdGlvbjo6WmVy
bykgPyBaZXJvIDogTm9uWmVybywgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICBpZiAodGFyZ2V0
LmxhYmVsLmlzU2V0KCkpCi0gICAgICAgICAgICB0YWtlbi5saW5rVG8odGFyZ2V0LmxhYmVsLCB0
aGlzKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdGFyZ2V0Lmp1bXBMaXN0LmFwcGVuZCh0
YWtlbik7Ci0gICAgfQotCi0gICAgdm9pZCBzdGFydExvb3AoKQotICAgIHsKLSAgICAgICAgbV9i
cmVha1RhcmdldHMuYXBwZW5kKEp1bXBUYXJnZXQoKSk7Ci0gICAgICAgIG1fY29udGludWVUYXJn
ZXRzLmFwcGVuZChKdW1wVGFyZ2V0KCkpOwotICAgIH0KLQotICAgIHZvaWQgZW5kTG9vcCgpCi0g
ICAgewotICAgICAgICBtX2JyZWFrVGFyZ2V0cy5yZW1vdmVMYXN0KCk7Ci0gICAgICAgIG1fY29u
dGludWVUYXJnZXRzLnJlbW92ZUxhc3QoKTsKLSAgICB9Ci0KLSAgICB2b2lkIHN0YXJ0U3dpdGNo
KCkKLSAgICB7Ci0gICAgICAgIG1fYnJlYWtUYXJnZXRzLmFwcGVuZChKdW1wVGFyZ2V0KCkpOwot
ICAgIH0KLQotICAgIHZvaWQgZW5kU3dpdGNoKCkKLSAgICB7Ci0gICAgICAgIG1fYnJlYWtUYXJn
ZXRzLnJlbW92ZUxhc3QoKTsKLSAgICB9Ci0KLSAgICB2b2lkIHN0YXJ0TGFiZWwoKQotICAgIHsK
LSAgICAgICAgbV9icmVha0xhYmVsVGFyZ2V0cy5hcHBlbmQoSnVtcFRhcmdldCgpKTsKLSAgICAg
ICAgbV9jb250aW51ZUxhYmVsVGFyZ2V0cy5hcHBlbmQoSnVtcFRhcmdldCgpKTsKLQotICAgICAg
ICBsaW5rVGFyZ2V0KG1fY29udGludWVMYWJlbFRhcmdldHMubGFzdCgpKTsKLSAgICB9Ci0KLSAg
ICB2b2lkIGVuZExhYmVsKCkKLSAgICB7Ci0gICAgICAgIGxpbmtUYXJnZXQobV9icmVha0xhYmVs
VGFyZ2V0cy5sYXN0KCkpOwotCi0gICAgICAgIG1fYnJlYWtMYWJlbFRhcmdldHMucmVtb3ZlTGFz
dCgpOwotICAgICAgICBtX2NvbnRpbnVlTGFiZWxUYXJnZXRzLnJlbW92ZUxhc3QoKTsKLSAgICB9
Ci0KLSAgICBKdW1wVGFyZ2V0JiBicmVha1RhcmdldCgpCi0gICAgewotICAgICAgICByZXR1cm4g
bV9icmVha1RhcmdldHMubGFzdCgpOwotICAgIH0KLQotICAgIEp1bXBUYXJnZXQmIGNvbnRpbnVl
VGFyZ2V0KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2NvbnRpbnVlVGFyZ2V0cy5sYXN0KCk7
Ci0gICAgfQotCi0gICAgSnVtcFRhcmdldCYgYnJlYWtMYWJlbFRhcmdldCh1aW50MzJfdCBsYWJl
bEluZGV4KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYnJlYWtMYWJlbFRhcmdldHNbbGFiZWxJ
bmRleF07Ci0gICAgfQotCi0gICAgSnVtcFRhcmdldCYgY29udGludWVMYWJlbFRhcmdldCh1aW50
MzJfdCBsYWJlbEluZGV4KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fY29udGludWVMYWJlbFRh
cmdldHNbbGFiZWxJbmRleF07Ci0gICAgfQotCi0gICAgdm9pZCBidWlsZFN3aXRjaChpbnQsIGNv
bnN0IFZlY3RvcjxpbnQ2NF90PiYgY2FzZXMsIFZlY3RvcjxKdW1wVGFyZ2V0PiYgdGFyZ2V0cywg
SnVtcFRhcmdldCBkZWZhdWx0VGFyZ2V0KQotICAgIHsKLSAgICAgICAgbG9hZDMyKHRlbXBvcmFy
eUFkZHJlc3MobV90ZW1wU3RhY2tUb3AgLSAxKSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICBt
X3RlbXBTdGFja1RvcC0tOwotICAgICAgICBCaW5hcnlTd2l0Y2ggYmluYXJ5U3dpdGNoKEdQUklu
Zm86OnJlZ1QwLCBjYXNlcywgQmluYXJ5U3dpdGNoOjpJbnQzMik7Ci0gICAgICAgIHdoaWxlIChi
aW5hcnlTd2l0Y2guYWR2YW5jZSgqdGhpcykpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4
ID0gYmluYXJ5U3dpdGNoLmNhc2VJbmRleCgpOwotICAgICAgICAgICAganVtcCh0YXJnZXRzW2lu
ZGV4XS5sYWJlbCk7Ci0gICAgICAgIH0KLSAgICAgICAgYmluYXJ5U3dpdGNoLmZhbGxUaHJvdWdo
KCkubGlua1RvKGRlZmF1bHRUYXJnZXQubGFiZWwsIHRoaXMpOwotICAgIH0KLQotcHJpdmF0ZToK
LSAgICB1bmlvbiBTdGFja1Nsb3QgewotICAgICAgICBpbnQzMl90IGludFZhbHVlOwotICAgICAg
ICBmbG9hdCBmbG9hdFZhbHVlOwotICAgICAgICBkb3VibGUgZG91YmxlVmFsdWU7Ci0gICAgfTsK
LQotICAgIGVudW0gY2xhc3MgRmxvYXRpbmdQb2ludFByZWNpc2lvbiB7IFNpbmdsZSwgRG91Ymxl
IH07Ci0KLSAgICBBZGRyZXNzIGxvY2FsQWRkcmVzcyh1bnNpZ25lZCBsb2NhbEluZGV4KSBjb25z
dAotICAgIHsKLSAgICAgICAgQVNTRVJUKGxvY2FsSW5kZXggPCBtX251bWJlck9mTG9jYWxzKTsK
LSAgICAgICAgcmV0dXJuIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIC1tX2Nh
bGxlZVNhdmVTcGFjZSAtIChsb2NhbEluZGV4ICsgMSkgKiBzaXplb2YoU3RhY2tTbG90KSk7Ci0g
ICAgfQotCi0gICAgQWRkcmVzcyB0ZW1wb3JhcnlBZGRyZXNzKHVuc2lnbmVkIHRlbXBvcmFyeUlu
ZGV4KSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fbnVtYmVyT2ZMb2NhbHMgKyB0ZW1w
b3JhcnlJbmRleCA8IG1fc3RhY2tIZWlnaHQpOwotICAgICAgICByZXR1cm4gQWRkcmVzcyhHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgLW1fY2FsbGVlU2F2ZVNwYWNlIC0gKG1fbnVtYmVyT2ZM
b2NhbHMgKyB0ZW1wb3JhcnlJbmRleCArIDEpICogc2l6ZW9mKFN0YWNrU2xvdCkpOwotICAgIH0K
LQotICAgIHZvaWQgYXBwZW5kQ2FsbChjb25zdCBGdW5jdGlvblB0ciYgZnVuY3Rpb24pCi0gICAg
ewotICAgICAgICBtX2NhbGxzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihjYWxsKCksIGZ1bmN0aW9u
LnZhbHVlKCkpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2soY29uc3QgRnVuY3Rpb25QdHImIGZ1bmN0aW9uKQotICAgIHsKLSAgICAgICAgYXBwZW5kQ2Fs
bChmdW5jdGlvbik7Ci0gICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChlbWl0RXhjZXB0
aW9uQ2hlY2soKSk7Ci0gICAgfQotCi0gICAgQ2FsbCBlbWl0TmFrZWRDYWxsKENvZGVQdHIgZnVu
Y3Rpb24pCi0gICAgewotICAgICAgICBDYWxsIG5ha2VkQ2FsbCA9IG5lYXJDYWxsKCk7Ci0gICAg
ICAgIG1fY2FsbHMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKG5ha2VkQ2FsbCwgZnVuY3Rpb24uZXhl
Y3V0YWJsZUFkZHJlc3MoKSkpOwotICAgICAgICByZXR1cm4gbmFrZWRDYWxsOwotICAgIH0KLQot
ICAgIHZvaWQgYXBwZW5kQ2FsbFNldFJlc3VsdChjb25zdCBGdW5jdGlvblB0ciYgZnVuY3Rpb24s
IEdQUlJlZyByZXN1bHQpCi0gICAgewotICAgICAgICBhcHBlbmRDYWxsKGZ1bmN0aW9uKTsKLSAg
ICAgICAgbW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0KTsKLSAgICB9Ci0KLSNp
ZiBDUFUoWDg2KQotICAgIHZvaWQgYXBwZW5kQ2FsbFNldFJlc3VsdChjb25zdCBGdW5jdGlvblB0
ciYgZnVuY3Rpb24sIEZQUlJlZyByZXN1bHQsIEZsb2F0aW5nUG9pbnRQcmVjaXNpb24gcHJlY2lz
aW9uKQotICAgIHsKLSAgICAgICAgYXBwZW5kQ2FsbChmdW5jdGlvbik7Ci0gICAgICAgIHN3aXRj
aCAocHJlY2lzaW9uKSB7Ci0gICAgICAgIGNhc2UgRmxvYXRpbmdQb2ludFByZWNpc2lvbjo6U2lu
Z2xlOgotICAgICAgICAgICAgbV9hc3NlbWJsZXIuZnN0cHMoMCwgc3RhY2tQb2ludGVyUmVnaXN0
ZXIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRmxvYXRpbmdQb2ludFByZWNp
c2lvbjo6RG91YmxlOgotICAgICAgICAgICAgbV9hc3NlbWJsZXIuZnN0cGwoMCwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgbG9h
ZERvdWJsZShzdGFja1BvaW50ZXJSZWdpc3RlciwgcmVzdWx0KTsKLSAgICB9Ci0jZWxpZiBDUFUo
QVJNKSAmJiAhQ1BVKEFSTV9IQVJERlApCi0gICAgdm9pZCBhcHBlbmRDYWxsU2V0UmVzdWx0KGNv
bnN0IEZ1bmN0aW9uUHRyJiBmdW5jdGlvbiwgRlBSUmVnIHJlc3VsdCwgRmxvYXRpbmdQb2ludFBy
ZWNpc2lvbikKLSAgICB7Ci0gICAgICAgIGFwcGVuZENhbGwoZnVuY3Rpb24pOwotICAgICAgICBt
X2Fzc2VtYmxlci52bW92KHJlc3VsdCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86
OnJldHVyblZhbHVlR1BSMik7Ci0gICAgfQotI2Vsc2UgLy8gQ1BVKFg4Nl82NCkgfHwgKENQVShB
Uk0pICYmIENQVShBUk1fSEFSREZQKSkgfHwgQ1BVKEFSTTY0KSB8fCBDUFUoTUlQUykgfHwgQ1BV
KFNINCkKLSAgICB2b2lkIGFwcGVuZENhbGxTZXRSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHImIGZ1
bmN0aW9uLCBGUFJSZWcgcmVzdWx0LCBGbG9hdGluZ1BvaW50UHJlY2lzaW9uKQotICAgIHsKLSAg
ICAgICAgYXBwZW5kQ2FsbChmdW5jdGlvbik7Ci0gICAgICAgIG1vdmVEb3VibGUoRlBSSW5mbzo6
cmV0dXJuVmFsdWVGUFIsIHJlc3VsdCk7Ci0gICAgfQotI2VuZGlmCi0KLSNpZiBVU0UoSlNWQUxV
RTY0KQotICAgIHZvaWQgY2FsbE9wZXJhdGlvbihaX0pJVE9wZXJhdGlvbl9FSiBvcGVyYXRpb24s
IEdQUlJlZyBzcmMsIEdQUlJlZyBkc3QpCi0gICAgewotICAgICAgICBzZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoc3JjKTsKLSAgICAgICAgYXBwZW5kQ2FsbFNldFJlc3VsdChvcGVyYXRpb24s
IGRzdCk7Ci0gICAgfQotCi0gICAgdm9pZCBjYWxsT3BlcmF0aW9uKERfSklUT3BlcmF0aW9uX0VK
IG9wZXJhdGlvbiwgR1BSUmVnIHNyYywgRlBSUmVnIGRzdCkKLSAgICB7Ci0gICAgICAgIHNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShzcmMpOwotICAgICAgICBhcHBlbmRDYWxsU2V0UmVzdWx0
KG9wZXJhdGlvbiwgZHN0LCBGbG9hdGluZ1BvaW50UHJlY2lzaW9uOjpEb3VibGUpOwotICAgIH0K
LSNlbHNlCi0vLyBFbmNvZGVkSlNWYWx1ZSBpbiBKU1ZBTFVFMzJfNjQgaXMgYSA2NC1iaXQgaW50
ZWdlci4gV2hlbiBiZWluZyBjb21waWxlZCBpbiBBUk0gRUFCSSwgaXQgbXVzdCBiZSBhbGlnbmVk
IG9uIGFuIGV2ZW4tbnVtYmVyZWQgcmVnaXN0ZXIgKHIwLCByMiBvciBbc3BdKS4KLS8vIFRvIHBy
ZXZlbnQgdGhlIGFzc2VtYmxlciBmcm9tIHVzaW5nIHdyb25nIHJlZ2lzdGVycywgbGV0J3Mgb2Nj
dXB5IHIxIG9yIHIzIHdpdGggYSBkdW1teSBhcmd1bWVudCB3aGVuIG5lY2Vzc2FyeS4KLSNpZiAo
Q09NUElMRVJfU1VQUE9SVFMoRUFCSSkgJiYgQ1BVKEFSTSkpIHx8IENQVShNSVBTKQotI2RlZmlu
ZSBFQUJJXzMyQklUX0RVTU1ZX0FSRyAgICAgIFRydXN0ZWRJbW0zMigwKSwKLSNlbHNlCi0jZGVm
aW5lIEVBQklfMzJCSVRfRFVNTVlfQVJHCi0jZW5kaWYKLQotICAgIHZvaWQgY2FsbE9wZXJhdGlv
bihaX0pJVE9wZXJhdGlvbl9FSiBvcGVyYXRpb24sIEdQUlJlZyBzcmNUYWcsIEdQUlJlZyBzcmNQ
YXlsb2FkLCBHUFJSZWcgZHN0KQotICAgIHsKLSAgICAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKEVBQklfMzJCSVRfRFVNTVlfQVJHIHNyY1BheWxvYWQsIHNyY1RhZyk7Ci0gICAgICAg
IGFwcGVuZENhbGxTZXRSZXN1bHQob3BlcmF0aW9uLCBkc3QpOwotICAgIH0KLQotICAgIHZvaWQg
Y2FsbE9wZXJhdGlvbihEX0pJVE9wZXJhdGlvbl9FSiBvcGVyYXRpb24sIEdQUlJlZyBzcmNUYWcs
IEdQUlJlZyBzcmNQYXlsb2FkLCBGUFJSZWcgZHN0KQotICAgIHsKLSAgICAgICAgc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVNTVlfQVJHIHNyY1BheWxvYWQsIHNyY1Rh
Zyk7Ci0gICAgICAgIGFwcGVuZENhbGxTZXRSZXN1bHQob3BlcmF0aW9uLCBkc3QsIEZsb2F0aW5n
UG9pbnRQcmVjaXNpb246OkRvdWJsZSk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICB2b2lkIGNhbGxP
cGVyYXRpb24oZmxvYXQgSklUX09QRVJBVElPTiAoKm9wZXJhdGlvbikoZmxvYXQpLCBGUFJlZ2lz
dGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZHN0KQotICAgIHsKLSAgICAgICAgc2V0dXBBcmd1bWVu
dHMoc3JjKTsKLSAgICAgICAgYXBwZW5kQ2FsbFNldFJlc3VsdChvcGVyYXRpb24sIGRzdCwgRmxv
YXRpbmdQb2ludFByZWNpc2lvbjo6U2luZ2xlKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNhbGxPcGVy
YXRpb24oRF9KSVRPcGVyYXRpb25fRCBvcGVyYXRpb24sIEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVn
aXN0ZXJJRCBkc3QpCi0gICAgewotICAgICAgICBzZXR1cEFyZ3VtZW50cyhzcmMpOwotICAgICAg
ICBhcHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwgZHN0LCBGbG9hdGluZ1BvaW50UHJlY2lz
aW9uOjpEb3VibGUpOwotICAgIH0KLQotICAgIHZvaWQgY2FsbE9wZXJhdGlvbihpbnQzMl90IEpJ
VF9PUEVSQVRJT04gKCpvcGVyYXRpb24pKGludDMyX3QsIGludDMyX3QpLCBHUFJSZWcgc3JjMSwg
R1BSUmVnIHNyYzIsIEdQUlJlZyBkc3QpCi0gICAgewotICAgICAgICBzZXR1cEFyZ3VtZW50cyhz
cmMxLCBzcmMyKTsKLSAgICAgICAgYXBwZW5kQ2FsbFNldFJlc3VsdChvcGVyYXRpb24sIGRzdCk7
Ci0gICAgfQotCi0gICAgdm9pZCBjYWxsT3BlcmF0aW9uKHVpbnQzMl90IEpJVF9PUEVSQVRJT04g
KCpvcGVyYXRpb24pKHVpbnQzMl90LCB1aW50MzJfdCksIEdQUlJlZyBzcmMxLCBHUFJSZWcgc3Jj
MiwgR1BSUmVnIGRzdCkKLSAgICB7Ci0gICAgICAgIHNldHVwQXJndW1lbnRzKHNyYzEsIHNyYzIp
OwotICAgICAgICBhcHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwgZHN0KTsKLSAgICB9Ci0K
LSAgICB2b2lkIGNhbGxPcGVyYXRpb24oRF9KSVRPcGVyYXRpb25fREQgb3BlcmF0aW9uLCBGUFJl
Z2lzdGVySUQgc3JjMSwgRlBSZWdpc3RlcklEIHNyYzIsIEZQUmVnaXN0ZXJJRCBkc3QpCi0gICAg
ewotICAgICAgICBzZXR1cEFyZ3VtZW50cyhzcmMxLCBzcmMyKTsKLSAgICAgICAgYXBwZW5kQ2Fs
bFNldFJlc3VsdChvcGVyYXRpb24sIGRzdCwgRmxvYXRpbmdQb2ludFByZWNpc2lvbjo6RG91Ymxl
KTsKLSAgICB9Ci0KLSAgICB2b2lkIGNhbGxPcGVyYXRpb24oZG91YmxlIEpJVF9PUEVSQVRJT04g
KCpvcGVyYXRpb24pKHVpbnQzMl90KSwgR1BSUmVnIHNyYywgRlBSZWdpc3RlcklEIGRzdCkKLSAg
ICB7Ci0gICAgICAgIHNldHVwQXJndW1lbnRzKHNyYyk7Ci0gICAgICAgIGFwcGVuZENhbGxTZXRS
ZXN1bHQob3BlcmF0aW9uLCBkc3QsIEZsb2F0aW5nUG9pbnRQcmVjaXNpb246OkRvdWJsZSk7Ci0g
ICAgfQotCi0gICAgdm9pZCBib3hBcmd1bWVudHNBbmRBZGp1c3RTdGFja1BvaW50ZXIoY29uc3Qg
VmVjdG9yPFdBU01UeXBlPiYgYXJndW1lbnRzKQotICAgIHsKLSAgICAgICAgc2l6ZV90IGFyZ3Vt
ZW50Q291bnQgPSBhcmd1bWVudHMuc2l6ZSgpOwotICAgICAgICBpbnQgc3RhY2tPZmZzZXQgPSAt
bV9jYWxsZWVTYXZlU3BhY2UgLSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1l
bnRSZWdpc3RlcnMoKSwgbV9udW1iZXJPZkxvY2FscyArIG1fdGVtcFN0YWNrVG9wICsgYXJndW1l
bnRDb3VudCArIDEgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyk7Ci0KLSAgICAg
ICAgc3RvcmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgQWRkcmVzcyhHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgKHN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZz
ZXQoKSkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7Ci0KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBhcmd1bWVudENvdW50OyArK2kpIHsKLSAgICAgICAgICAgIEFkZHJlc3MgYWRkcmVzcyhH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgKHN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1
bWVudE9mZnNldChpKSkgKiBzaXplb2YoUmVnaXN0ZXIpKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzKEdQUkluZm86OnJlZ1QwKTsKLSNlbHNl
Ci0gICAgICAgICAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MoR1BSSW5mbzo6cmVnVDEsIEdQUklu
Zm86OnJlZ1QwKTsKLSNlbmRpZgotICAgICAgICAgICAgc3dpdGNoIChhcmd1bWVudHNbaV0pIHsK
LSAgICAgICAgICAgIGNhc2UgV0FTTVR5cGU6OkkzMjoKLSAgICAgICAgICAgICAgICBsb2FkMzIo
dGVtcG9yYXJ5QWRkcmVzcyhtX3RlbXBTdGFja1RvcCAtIGFyZ3VtZW50Q291bnQgKyBpKSwgR1BS
SW5mbzo6cmVnVDApOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICAgICAgb3I2NChH
UFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAg
ICAgICAgICBzdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBhZGRyZXNzKTsKLSNlbHNlCi0gICAgICAg
ICAgICAgICAgc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgYWRkcmVzcy53aXRoT2Zmc2V0KFBheWxv
YWRPZmZzZXQpKTsKLSAgICAgICAgICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpJbnQzMlRhZyksIGFkZHJlc3Mud2l0aE9mZnNldChUYWdPZmZzZXQpKTsKLSNlbmRpZgotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBXQVNNVHlwZTo6RjMyOgotICAg
ICAgICAgICAgY2FzZSBXQVNNVHlwZTo6RjY0OgotICAgICAgICAgICAgICAgIGxvYWREb3VibGUo
dGVtcG9yYXJ5QWRkcmVzcyhtX3RlbXBTdGFja1RvcCAtIGFyZ3VtZW50Q291bnQgKyBpKSwgRlBS
SW5mbzo6ZnBSZWdUMCk7Ci0gICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c1tpXSA9PSBXQVNN
VHlwZTo6RjMyKQotICAgICAgICAgICAgICAgICAgICBjb252ZXJ0RmxvYXRUb0RvdWJsZShGUFJJ
bmZvOjpmcFJlZ1QwLCBGUFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgICAgICAgICBjb252ZXJ0
RG91YmxlVG9WYWx1ZShGUFJJbmZvOjpmcFJlZ1QwLCB2YWx1ZVJlZ3MpOwotICAgICAgICAgICAg
ICAgIHN0b3JlVmFsdWUodmFsdWVSZWdzLCBhZGRyZXNzKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgbV90ZW1wU3RhY2tUb3Ag
LT0gYXJndW1lbnRDb3VudDsKLQotICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrT2Zm
c2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgICAgIHN0
b3JlMzIoVHJ1c3RlZEltbTMyKGFyZ3VtZW50Q291bnQgKyAxKSwgQWRkcmVzcyhzdGFja1BvaW50
ZXJSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCAqIHN0YXRpY19jYXN0PGlu
dD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0IC0gc2l6ZW9mKENhbGxlckZyYW1l
QW5kUEMpKSk7Ci0gICAgfQotCi0gICAgdm9pZCBjYWxsQW5kVW5ib3hSZXN1bHQoV0FTTUV4cHJl
c3Npb25UeXBlIHJldHVyblR5cGUpCi0gICAgewotICAgICAgICAvLyByZWdUMCBob2xkcyBjYWxs
ZWUuCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwg
QWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc3Rh
dGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBD
KSkpOwotI2Vsc2UKLSAgICAgICAgc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgQWRkcmVzcyhzdGFj
a1BvaW50ZXJSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc3RhdGljX2Nhc3Q8aW50
PihzaXplb2YoUmVnaXN0ZXIpKSArIFBheWxvYWRPZmZzZXQgLSBzaXplb2YoQ2FsbGVyRnJhbWVB
bmRQQykpKTsKLSAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyks
IEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0
YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBUYWdPZmZzZXQgLSBzaXplb2YoQ2Fs
bGVyRnJhbWVBbmRQQykpKTsKLSNlbmRpZgotCi0gICAgICAgIERhdGFMYWJlbFB0ciBhZGRyZXNz
T2ZMaW5rZWRGdW5jdGlvbkNoZWNrOwotICAgICAgICBKdW1wIHNsb3dDYXNlID0gYnJhbmNoUHRy
V2l0aFBhdGNoKE5vdEVxdWFsLCBHUFJJbmZvOjpyZWdUMCwgYWRkcmVzc09mTGlua2VkRnVuY3Rp
b25DaGVjaywgVHJ1c3RlZEltbVB0cigwKSk7Ci0KLSAgICAgICAgQ2FsbExpbmtJbmZvKiBpbmZv
ID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbygpOwotICAgICAgICBpbmZvLT5zZXRVcENh
bGwoQ2FsbExpbmtJbmZvOjpDYWxsLCBDb2RlT3JpZ2luKCksIEdQUkluZm86OnJlZ1QwKTsKLSAg
ICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChDYWxsQ29tcGlsYXRpb25JbmZvKCkp
OwotICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm8ubGFzdCgpLmhvdFBhdGhCZWdpbiA9IGFk
ZHJlc3NPZkxpbmtlZEZ1bmN0aW9uQ2hlY2s7Ci0gICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5m
by5sYXN0KCkuY2FsbExpbmtJbmZvID0gaW5mbzsKLSAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25J
bmZvLmxhc3QoKS5ob3RQYXRoT3RoZXIgPSBuZWFyQ2FsbCgpOwotICAgICAgICBKdW1wIGVuZCA9
IGp1bXAoKTsKLQotICAgICAgICBzbG93Q2FzZS5saW5rKHRoaXMpOwotICAgICAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIoaW5mbyksIEdQUkluZm86OnJlZ1QyKTsKLSAgICAgICAgbV9jYWxsQ29tcGls
YXRpb25JbmZvLmxhc3QoKS5jYWxsUmV0dXJuTG9jYXRpb24gPSBlbWl0TmFrZWRDYWxsKG1fdm0t
PmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKTsKLQotICAgICAgICBl
bmQubGluayh0aGlzKTsKLSAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtbV9jYWxsZWVTYXZl
U3BhY2UgLSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMo
KSwgbV9zdGFja0hlaWdodCkgKiBzaXplb2YoU3RhY2tTbG90KSAtIG1heEZyYW1lRXh0ZW50Rm9y
U2xvd1BhdGhDYWxsKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKLSAgICAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKLQotICAgICAg
ICAvLyBGSVhNRTogTm8gbmVlZCB0byBkbyB0eXBlIGNvbnZlcnNpb24gaWYgdGhlIGNhbGxlZSBp
cyBhIFdlYkFzc2VtYmx5IGZ1bmN0aW9uLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5MzEwCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAg
SlNWYWx1ZVJlZ3MgdmFsdWVSZWdzKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSNlbHNlCi0g
ICAgICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIEdQ
UkluZm86OnJldHVyblZhbHVlR1BSKTsKLSNlbmRpZgotICAgICAgICBzd2l0Y2ggKHJldHVyblR5
cGUpIHsKLSAgICAgICAgY2FzZSBXQVNNRXhwcmVzc2lvblR5cGU6OkkzMjoKLSAgICAgICAgICAg
IGNvbnZlcnRWYWx1ZVRvSW50MzIodmFsdWVSZWdzLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAg
ICAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1QwLCB0ZW1wb3JhcnlBZGRyZXNzKG1fdGVtcFN0YWNr
VG9wKyspKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdBU01FeHByZXNzaW9u
VHlwZTo6RjMyOgotICAgICAgICBjYXNlIFdBU01FeHByZXNzaW9uVHlwZTo6RjY0OgotI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBjb252ZXJ0VmFsdWVUb0RvdWJsZSh2YWx1ZVJlZ3Ms
IEZQUkluZm86OmZwUmVnVDAsIEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7Ci0j
ZWxzZQotICAgICAgICAgICAgY29udmVydFZhbHVlVG9Eb3VibGUodmFsdWVSZWdzLCBGUFJJbmZv
OjpmcFJlZ1QwLCBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIsIEZQUkluZm86OmZw
UmVnVDEpOwotI2VuZGlmCi0gICAgICAgICAgICBpZiAocmV0dXJuVHlwZSA9PSBXQVNNRXhwcmVz
c2lvblR5cGU6OkYzMikKLSAgICAgICAgICAgICAgICBjb252ZXJ0RG91YmxlVG9GbG9hdChGUFJJ
bmZvOjpmcFJlZ1QwLCBGUFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgICAgIHN0b3JlRG91Ymxl
KEZQUkluZm86OmZwUmVnVDAsIHRlbXBvcmFyeUFkZHJlc3MobV90ZW1wU3RhY2tUb3ArKykpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV0FTTUV4cHJlc3Npb25UeXBlOjpWb2lk
OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgIH0KLQotI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgdm9pZCBjb252ZXJ0VmFsdWVUb0ludDMyKEpTVmFsdWVSZWdzIHZhbHVlUmVncywgR1BS
UmVnIGRzdCkKLSAgICB7Ci0gICAgICAgIEp1bXAgY2hlY2tKU0ludDMyID0gYnJhbmNoSWZJbnQz
Mih2YWx1ZVJlZ3MpOwotCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29udmVydEpT
VmFsdWVUb0ludDMyLCB2YWx1ZVJlZ3MuZ3ByKCksIHZhbHVlUmVncy5ncHIoKSk7Ci0KLSAgICAg
ICAgY2hlY2tKU0ludDMyLmxpbmsodGhpcyk7Ci0gICAgICAgIG1vdmUodmFsdWVSZWdzLmdwcigp
LCBkc3QpOwotICAgIH0KLQotICAgIHZvaWQgY29udmVydFZhbHVlVG9Eb3VibGUoSlNWYWx1ZVJl
Z3MgdmFsdWVSZWdzLCBGUFJSZWcgZHN0LCBHUFJSZWcgc2NyYXRjaCkKLSAgICB7Ci0gICAgICAg
IEp1bXAgY2hlY2tKU0ludDMyID0gYnJhbmNoSWZJbnQzMih2YWx1ZVJlZ3MpOwotICAgICAgICBK
dW1wIGNoZWNrSlNOdW1iZXIgPSBicmFuY2hJZk51bWJlcih2YWx1ZVJlZ3MsIHNjcmF0Y2gpOwot
ICAgICAgICBKdW1wTGlzdCBlbmQ7Ci0KLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25D
b252ZXJ0SlNWYWx1ZVRvRG91YmxlLCB2YWx1ZVJlZ3MuZ3ByKCksIGRzdCk7Ci0gICAgICAgIGVu
ZC5hcHBlbmQoanVtcCgpKTsKLQotICAgICAgICBjaGVja0pTSW50MzIubGluayh0aGlzKTsKLSAg
ICAgICAgY29udmVydEludDMyVG9Eb3VibGUodmFsdWVSZWdzLmdwcigpLCBkc3QpOwotICAgICAg
ICBlbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgY2hlY2tKU051bWJlci5saW5rKHRoaXMp
OwotICAgICAgICB1bmJveERvdWJsZVdpdGhvdXRBc3NlcnRpb25zKHZhbHVlUmVncy5ncHIoKSwg
c2NyYXRjaCwgZHN0KTsKLSAgICAgICAgZW5kLmxpbmsodGhpcyk7Ci0gICAgfQotI2Vsc2UKLSAg
ICB2b2lkIGNvbnZlcnRWYWx1ZVRvSW50MzIoSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzLCBHUFJSZWcg
ZHN0KQotICAgIHsKLSAgICAgICAgSnVtcCBjaGVja0pTSW50MzIgPSBicmFuY2hJZkludDMyKHZh
bHVlUmVncyk7Ci0KLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db252ZXJ0SlNWYWx1
ZVRvSW50MzIsIHZhbHVlUmVncy50YWdHUFIoKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgdmFs
dWVSZWdzLnBheWxvYWRHUFIoKSk7Ci0KLSAgICAgICAgY2hlY2tKU0ludDMyLmxpbmsodGhpcyk7
Ci0gICAgICAgIG1vdmUodmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgZHN0KTsKLSAgICB9Ci0KLSAg
ICB2b2lkIGNvbnZlcnRWYWx1ZVRvRG91YmxlKEpTVmFsdWVSZWdzIHZhbHVlUmVncywgRlBSUmVn
IGRzdCwgR1BSUmVnIHNjcmF0Y2gsIEZQUlJlZyBmcFNjcmF0Y2gpCi0gICAgewotICAgICAgICBK
dW1wIGNoZWNrSlNJbnQzMiA9IGJyYW5jaElmSW50MzIodmFsdWVSZWdzKTsKLSAgICAgICAgSnVt
cCBjaGVja0pTTnVtYmVyID0gYnJhbmNoSWZOdW1iZXIodmFsdWVSZWdzLCBzY3JhdGNoKTsKLSAg
ICAgICAgSnVtcExpc3QgZW5kOwotCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29u
dmVydEpTVmFsdWVUb0RvdWJsZSwgdmFsdWVSZWdzLnRhZ0dQUigpLCB2YWx1ZVJlZ3MucGF5bG9h
ZEdQUigpLCBkc3QpOwotICAgICAgICBlbmQuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAgICAgY2hl
Y2tKU0ludDMyLmxpbmsodGhpcyk7Ci0gICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHZhbHVl
UmVncy5wYXlsb2FkR1BSKCksIGRzdCk7Ci0gICAgICAgIGVuZC5hcHBlbmQoanVtcCgpKTsKLQot
ICAgICAgICBjaGVja0pTTnVtYmVyLmxpbmsodGhpcyk7Ci0gICAgICAgIHVuYm94RG91YmxlKHZh
bHVlUmVncy50YWdHUFIoKSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgZHN0LCBmcFNjcmF0Y2gp
OwotICAgICAgICBlbmQubGluayh0aGlzKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIHZvaWQgY29u
dmVydERvdWJsZVRvVmFsdWUoRlBSUmVnIGZwciwgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzKQotICAg
IHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBib3hEb3VibGUoZnByLCB2YWx1ZVJlZ3Mu
Z3ByKCkpOwotI2Vsc2UKLSAgICAgICAgYm94RG91YmxlKGZwciwgdmFsdWVSZWdzLnRhZ0dQUigp
LCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsKLSNlbmRpZgotICAgIH0KLQotICAgIEpTV0FTTU1v
ZHVsZSogbV9tb2R1bGU7Ci0gICAgdW5zaWduZWQgbV9zdGFja0hlaWdodDsKLSAgICB1bnNpZ25l
ZCBtX251bWJlck9mTG9jYWxzOwotICAgIHVuc2lnbmVkIG1fdGVtcFN0YWNrVG9wIHsgMCB9Owot
ICAgIHVuc2lnbmVkIG1fY2FsbGVlU2F2ZVNwYWNlOwotCi0gICAgVmVjdG9yPEp1bXBUYXJnZXQ+
IG1fYnJlYWtUYXJnZXRzOwotICAgIFZlY3RvcjxKdW1wVGFyZ2V0PiBtX2NvbnRpbnVlVGFyZ2V0
czsKLSAgICBWZWN0b3I8SnVtcFRhcmdldD4gbV9icmVha0xhYmVsVGFyZ2V0czsKLSAgICBWZWN0
b3I8SnVtcFRhcmdldD4gbV9jb250aW51ZUxhYmVsVGFyZ2V0czsKLQotICAgIExhYmVsIG1fYmVn
aW5MYWJlbDsKLSAgICBKdW1wIG1fc3RhY2tPdmVyZmxvdzsKLSAgICBKdW1wTGlzdCBtX2Rpdmlk
ZUVycm9ySnVtcExpc3Q7Ci0gICAgSnVtcExpc3QgbV9vdXRPZkJvdW5kc0Vycm9ySnVtcExpc3Q7
Ci0gICAgSnVtcExpc3QgbV9leGNlcHRpb25DaGVja3M7Ci0KLSAgICBWZWN0b3I8c3RkOjpwYWly
PENhbGwsIHZvaWQqPj4gbV9jYWxsczsKLSAgICBWZWN0b3I8Q2FsbENvbXBpbGF0aW9uSW5mbz4g
bV9jYWxsQ29tcGlsYXRpb25JbmZvOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRp
ZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCi0KLSNlbmRpZiAvLyBXQVNNRnVuY3Rpb25Db21waWxl
cl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rpb25Q
YXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZ1bmN0aW9uUGFyc2Vy
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY1ZGE1ODg1YjQyYTA3YTE1ODFk
NWFiZjkzOGIyNTE2ZDAxMjZlMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rpb25QYXJzZXIu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTIyNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IldBU01GdW5jdGlvblBhcnNlci5oIgotCi0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotCi0jaW5j
bHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU1dBU01Nb2R1bGUuaCIKLSNp
bmNsdWRlICJXQVNNRnVuY3Rpb25Db21waWxlci5oIgotI2luY2x1ZGUgIldBU01GdW5jdGlvbkIz
SVJHZW5lcmF0b3IuaCIKLSNpbmNsdWRlICJXQVNNRnVuY3Rpb25TeW50YXhDaGVja2VyLmgiCi0K
LSNkZWZpbmUgUFJPUEFHQVRFX0VSUk9SKCkgZG8geyBpZiAoIW1fZXJyb3JNZXNzYWdlLmlzTnVs
bCgpKSByZXR1cm4gMDsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgRkFJTF9XSVRIX01FU1NBR0UoZXJy
b3JNZXNzYWdlKSBkbyB7ICBtX2Vycm9yTWVzc2FnZSA9IGVycm9yTWVzc2FnZTsgcmV0dXJuIDA7
IH0gd2hpbGUgKDApCi0jZGVmaW5lIFJFQURfRkxPQVRfT1JfRkFJTChyZXN1bHQsIGVycm9yTWVz
c2FnZSkgZG8geyBpZiAoIW1fcmVhZGVyLnJlYWRGbG9hdChyZXN1bHQpKSBGQUlMX1dJVEhfTUVT
U0FHRShlcnJvck1lc3NhZ2UpOyB9IHdoaWxlICgwKQotI2RlZmluZSBSRUFEX0RPVUJMRV9PUl9G
QUlMKHJlc3VsdCwgZXJyb3JNZXNzYWdlKSBkbyB7IGlmICghbV9yZWFkZXIucmVhZERvdWJsZShy
ZXN1bHQpKSBGQUlMX1dJVEhfTUVTU0FHRShlcnJvck1lc3NhZ2UpOyB9IHdoaWxlICgwKQotI2Rl
ZmluZSBSRUFEX0NPTVBBQ1RfSU5UMzJfT1JfRkFJTChyZXN1bHQsIGVycm9yTWVzc2FnZSkgZG8g
eyBpZiAoIW1fcmVhZGVyLnJlYWRDb21wYWN0SW50MzIocmVzdWx0KSkgRkFJTF9XSVRIX01FU1NB
R0UoZXJyb3JNZXNzYWdlKTsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgUkVBRF9DT01QQUNUX1VJTlQz
Ml9PUl9GQUlMKHJlc3VsdCwgZXJyb3JNZXNzYWdlKSBkbyB7IGlmICghbV9yZWFkZXIucmVhZENv
bXBhY3RVSW50MzIocmVzdWx0KSkgRkFJTF9XSVRIX01FU1NBR0UoZXJyb3JNZXNzYWdlKTsgfSB3
aGlsZSAoMCkKLSNkZWZpbmUgUkVBRF9FWFBSRVNTSU9OX1RZUEVfT1JfRkFJTChyZXN1bHQsIGVy
cm9yTWVzc2FnZSkgZG8geyBpZiAoIW1fcmVhZGVyLnJlYWRFeHByZXNzaW9uVHlwZShyZXN1bHQp
KSBGQUlMX1dJVEhfTUVTU0FHRShlcnJvck1lc3NhZ2UpOyB9IHdoaWxlICgwKQotI2RlZmluZSBS
RUFEX09QX1NUQVRFTUVOVF9PUl9GQUlMKGhhc0ltbWVkaWF0ZSwgb3AsIG9wV2l0aEltbWVkaWF0
ZSwgaW1tZWRpYXRlLCBlcnJvck1lc3NhZ2UpIGRvIHsgaWYgKCFtX3JlYWRlci5yZWFkT3BTdGF0
ZW1lbnQoaGFzSW1tZWRpYXRlLCBvcCwgb3BXaXRoSW1tZWRpYXRlLCBpbW1lZGlhdGUpKSBGQUlM
X1dJVEhfTUVTU0FHRShlcnJvck1lc3NhZ2UpOyB9IHdoaWxlICgwKQotI2RlZmluZSBSRUFEX09Q
X0VYUFJFU1NJT05fSTMyX09SX0ZBSUwoaGFzSW1tZWRpYXRlLCBvcCwgb3BXaXRoSW1tZWRpYXRl
LCBpbW1lZGlhdGUsIGVycm9yTWVzc2FnZSkgZG8geyBpZiAoIW1fcmVhZGVyLnJlYWRPcEV4cHJl
c3Npb25JMzIoaGFzSW1tZWRpYXRlLCBvcCwgb3BXaXRoSW1tZWRpYXRlLCBpbW1lZGlhdGUpKSBG
QUlMX1dJVEhfTUVTU0FHRShlcnJvck1lc3NhZ2UpOyB9IHdoaWxlICgwKQotI2RlZmluZSBSRUFE
X09QX0VYUFJFU1NJT05fRjMyX09SX0ZBSUwoaGFzSW1tZWRpYXRlLCBvcCwgb3BXaXRoSW1tZWRp
YXRlLCBpbW1lZGlhdGUsIGVycm9yTWVzc2FnZSkgZG8geyBpZiAoIW1fcmVhZGVyLnJlYWRPcEV4
cHJlc3Npb25GMzIoaGFzSW1tZWRpYXRlLCBvcCwgb3BXaXRoSW1tZWRpYXRlLCBpbW1lZGlhdGUp
KSBGQUlMX1dJVEhfTUVTU0FHRShlcnJvck1lc3NhZ2UpOyB9IHdoaWxlICgwKQotI2RlZmluZSBS
RUFEX09QX0VYUFJFU1NJT05fRjY0X09SX0ZBSUwoaGFzSW1tZWRpYXRlLCBvcCwgb3BXaXRoSW1t
ZWRpYXRlLCBpbW1lZGlhdGUsIGVycm9yTWVzc2FnZSkgZG8geyBpZiAoIW1fcmVhZGVyLnJlYWRP
cEV4cHJlc3Npb25GNjQoaGFzSW1tZWRpYXRlLCBvcCwgb3BXaXRoSW1tZWRpYXRlLCBpbW1lZGlh
dGUpKSBGQUlMX1dJVEhfTUVTU0FHRShlcnJvck1lc3NhZ2UpOyB9IHdoaWxlICgwKQotI2RlZmlu
ZSBSRUFEX09QX0VYUFJFU1NJT05fVk9JRF9PUl9GQUlMKG9wLCBlcnJvck1lc3NhZ2UpIGRvIHsg
aWYgKCFtX3JlYWRlci5yZWFkT3BFeHByZXNzaW9uVm9pZChvcCkpIEZBSUxfV0lUSF9NRVNTQUdF
KGVycm9yTWVzc2FnZSk7IH0gd2hpbGUgKDApCi0jZGVmaW5lIFJFQURfVkFSSUFCTEVfVFlQRVNf
T1JfRkFJTChoYXNJbW1lZGlhdGUsIHZhcmlhYmxlVHlwZXMsIHZhcmlhYmxlVHlwZXNXaXRoSW1t
ZWRpYXRlLCBpbW1lZGlhdGUsIGVycm9yTWVzc2FnZSkgZG8geyBpZiAoIW1fcmVhZGVyLnJlYWRW
YXJpYWJsZVR5cGVzKGhhc0ltbWVkaWF0ZSwgdmFyaWFibGVUeXBlcywgdmFyaWFibGVUeXBlc1dp
dGhJbW1lZGlhdGUsIGltbWVkaWF0ZSkpIEZBSUxfV0lUSF9NRVNTQUdFKGVycm9yTWVzc2FnZSk7
IH0gd2hpbGUgKDApCi0jZGVmaW5lIFJFQURfU1dJVENIX0NBU0VfT1JfRkFJTChyZXN1bHQsIGVy
cm9yTWVzc2FnZSkgZG8geyBpZiAoIW1fcmVhZGVyLnJlYWRTd2l0Y2hDYXNlKHJlc3VsdCkpIEZB
SUxfV0lUSF9NRVNTQUdFKGVycm9yTWVzc2FnZSk7IH0gd2hpbGUgKDApCi0jZGVmaW5lIEZBSUxf
SUZfRkFMU0UoY29uZGl0aW9uLCBlcnJvck1lc3NhZ2UpIGRvIHsgaWYgKCEoY29uZGl0aW9uKSkg
RkFJTF9XSVRIX01FU1NBR0UoZXJyb3JNZXNzYWdlKTsgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBV
TlVTRUQgMAotCi1uYW1lc3BhY2UgSlNDIHsKLQotc3RhdGljIFN0cmluZyBuYW1lT2ZUeXBlKFdB
U01UeXBlIHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBXQVNNVHlwZTo6
STMyOgotICAgICAgICByZXR1cm4gImludDMyIjsKLSAgICBjYXNlIFdBU01UeXBlOjpGMzI6Ci0g
ICAgICAgIHJldHVybiAiZmxvYXQzMiI7Ci0gICAgY2FzZSBXQVNNVHlwZTo6RjY0OgotICAgICAg
ICByZXR1cm4gImZsb2F0NjQiOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgfQotfQotCi1ib29sIFdBU01GdW5jdGlvblBhcnNlcjo6Y2hl
Y2tTeW50YXgoSlNXQVNNTW9kdWxlKiBtb2R1bGUsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwg
c2l6ZV90IGZ1bmN0aW9uSW5kZXgsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0SW5Tb3VyY2UsIHVuc2ln
bmVkJiBlbmRPZmZzZXRJblNvdXJjZSwgdW5zaWduZWQmIHN0YWNrSGVpZ2h0LCBTdHJpbmcmIGVy
cm9yTWVzc2FnZSkKLXsKLSAgICBXQVNNRnVuY3Rpb25QYXJzZXIgcGFyc2VyKG1vZHVsZSwgc291
cmNlLCBmdW5jdGlvbkluZGV4KTsKLSAgICBXQVNNRnVuY3Rpb25TeW50YXhDaGVja2VyIHN5bnRh
eENoZWNrZXI7Ci0gICAgcGFyc2VyLm1fcmVhZGVyLnNldE9mZnNldChzdGFydE9mZnNldEluU291
cmNlKTsKLSAgICBwYXJzZXIucGFyc2VGdW5jdGlvbihzeW50YXhDaGVja2VyKTsKLSAgICBpZiAo
IXBhcnNlci5tX2Vycm9yTWVzc2FnZS5pc051bGwoKSkgewotICAgICAgICBlcnJvck1lc3NhZ2Ug
PSBwYXJzZXIubV9lcnJvck1lc3NhZ2U7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0g
ICAgZW5kT2Zmc2V0SW5Tb3VyY2UgPSBwYXJzZXIubV9yZWFkZXIub2Zmc2V0KCk7Ci0gICAgc3Rh
Y2tIZWlnaHQgPSBzeW50YXhDaGVja2VyLnN0YWNrSGVpZ2h0KCk7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLXZvaWQgV0FTTUZ1bmN0aW9uUGFyc2VyOjpjb21waWxlKFZNJiB2bSwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEpTV0FTTU1vZHVsZSogbW9kdWxlLCBjb25zdCBTb3VyY2VDb2RlJiBzb3Vy
Y2UsIHNpemVfdCBmdW5jdGlvbkluZGV4KQotewotICAgIFdBU01GdW5jdGlvblBhcnNlciBwYXJz
ZXIobW9kdWxlLCBzb3VyY2UsIGZ1bmN0aW9uSW5kZXgpOwotICAgIFdBU01GdW5jdGlvbkNvbXBp
bGVyIGNvbXBpbGVyKHZtLCBjb2RlQmxvY2ssIG1vZHVsZSwgbW9kdWxlLT5mdW5jdGlvblN0YWNr
SGVpZ2h0cygpW2Z1bmN0aW9uSW5kZXhdKTsKLSAgICBwYXJzZXIubV9yZWFkZXIuc2V0T2Zmc2V0
KG1vZHVsZS0+ZnVuY3Rpb25TdGFydE9mZnNldHNJblNvdXJjZSgpW2Z1bmN0aW9uSW5kZXhdKTsK
LSAgICBwYXJzZXIucGFyc2VGdW5jdGlvbihjb21waWxlcik7Ci0gICAgQVNTRVJUKHBhcnNlci5t
X2Vycm9yTWVzc2FnZS5pc051bGwoKSk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBDb250ZXh0Pgot
Ym9vbCBXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlRnVuY3Rpb24oQ29udGV4dCYgY29udGV4dCkK
LXsKLSAgICBjb25zdCBXQVNNU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBtX21vZHVsZS0+c2lnbmF0
dXJlcygpW21fbW9kdWxlLT5mdW5jdGlvbkRlY2xhcmF0aW9ucygpW21fZnVuY3Rpb25JbmRleF0u
c2lnbmF0dXJlSW5kZXhdOwotCi0gICAgbV9yZXR1cm5UeXBlID0gc2lnbmF0dXJlLnJldHVyblR5
cGU7Ci0KLSAgICBwYXJzZUxvY2FsVmFyaWFibGVzKCk7Ci0gICAgUFJPUEFHQVRFX0VSUk9SKCk7
Ci0KLSAgICBjb25zdCBWZWN0b3I8V0FTTVR5cGU+JiBhcmd1bWVudHMgPSBzaWduYXR1cmUuYXJn
dW1lbnRzOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJndW1lbnRzLnNpemUoKTsgKytp
KQotICAgICAgICBtX2xvY2FsVHlwZXMuYXBwZW5kKGFyZ3VtZW50c1tpXSk7Ci0gICAgZm9yICh1
aW50MzJfdCBpID0gMDsgaSA8IG1fbnVtYmVyT2ZJMzJMb2NhbFZhcmlhYmxlczsgKytpKQotICAg
ICAgICBtX2xvY2FsVHlwZXMuYXBwZW5kKFdBU01UeXBlOjpJMzIpOwotICAgIGZvciAodWludDMy
X3QgaSA9IDA7IGkgPCBtX251bWJlck9mRjMyTG9jYWxWYXJpYWJsZXM7ICsraSkKLSAgICAgICAg
bV9sb2NhbFR5cGVzLmFwcGVuZChXQVNNVHlwZTo6RjMyKTsKLSAgICBmb3IgKHVpbnQzMl90IGkg
PSAwOyBpIDwgbV9udW1iZXJPZkY2NExvY2FsVmFyaWFibGVzOyArK2kpCi0gICAgICAgIG1fbG9j
YWxUeXBlcy5hcHBlbmQoV0FTTVR5cGU6OkY2NCk7Ci0KLSAgICBjb250ZXh0LnN0YXJ0RnVuY3Rp
b24oYXJndW1lbnRzLCBtX251bWJlck9mSTMyTG9jYWxWYXJpYWJsZXMsIG1fbnVtYmVyT2ZGMzJM
b2NhbFZhcmlhYmxlcywgbV9udW1iZXJPZkY2NExvY2FsVmFyaWFibGVzKTsKLQotICAgIHBhcnNl
QmxvY2tTdGF0ZW1lbnQoY29udGV4dCk7Ci0gICAgUFJPUEFHQVRFX0VSUk9SKCk7Ci0KLSAgICBj
b250ZXh0LmVuZEZ1bmN0aW9uKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV0FTTUZ1
bmN0aW9uUGFyc2VyOjpwYXJzZUxvY2FsVmFyaWFibGVzKCkKLXsKLSAgICBtX251bWJlck9mSTMy
TG9jYWxWYXJpYWJsZXMgPSAwOwotICAgIG1fbnVtYmVyT2ZGMzJMb2NhbFZhcmlhYmxlcyA9IDA7
Ci0gICAgbV9udW1iZXJPZkY2NExvY2FsVmFyaWFibGVzID0gMDsKLQotICAgIGJvb2wgaGFzSW1t
ZWRpYXRlOwotICAgIFdBU01WYXJpYWJsZVR5cGVzIHZhcmlhYmxlVHlwZXM7Ci0gICAgV0FTTVZh
cmlhYmxlVHlwZXNXaXRoSW1tZWRpYXRlIHZhcmlhYmxlVHlwZXNXaXRoSW1tZWRpYXRlOwotICAg
IHVpbnQ4X3QgaW1tZWRpYXRlOwotICAgIFJFQURfVkFSSUFCTEVfVFlQRVNfT1JfRkFJTChoYXNJ
bW1lZGlhdGUsIHZhcmlhYmxlVHlwZXMsIHZhcmlhYmxlVHlwZXNXaXRoSW1tZWRpYXRlLCBpbW1l
ZGlhdGUsICJDYW5ub3QgcmVhZCB0aGUgdHlwZXMgb2YgbG9jYWwgdmFyaWFibGVzLiIpOwotICAg
IGlmICghaGFzSW1tZWRpYXRlKSB7Ci0gICAgICAgIGlmIChzdGF0aWNfY2FzdDx1aW50OF90Pih2
YXJpYWJsZVR5cGVzKSAmIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KFdBU01WYXJpYWJsZVR5cGVzOjpJ
MzIpKQotICAgICAgICAgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKG1fbnVtYmVyT2ZJ
MzJMb2NhbFZhcmlhYmxlcywgIkNhbm5vdCByZWFkIHRoZSBudW1iZXIgb2YgaW50MzIgbG9jYWwg
dmFyaWFibGVzLiIpOwotICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8dWludDhfdD4odmFyaWFibGVU
eXBlcykgJiBzdGF0aWNfY2FzdDx1aW50OF90PihXQVNNVmFyaWFibGVUeXBlczo6RjMyKSkKLSAg
ICAgICAgICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChtX251bWJlck9mRjMyTG9jYWxW
YXJpYWJsZXMsICJDYW5ub3QgcmVhZCB0aGUgbnVtYmVyIG9mIGZsb2F0MzIgbG9jYWwgdmFyaWFi
bGVzLiIpOwotICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8dWludDhfdD4odmFyaWFibGVUeXBlcykg
JiBzdGF0aWNfY2FzdDx1aW50OF90PihXQVNNVmFyaWFibGVUeXBlczo6RjY0KSkKLSAgICAgICAg
ICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChtX251bWJlck9mRjY0TG9jYWxWYXJpYWJs
ZXMsICJDYW5ub3QgcmVhZCB0aGUgbnVtYmVyIG9mIGZsb2F0NjQgbG9jYWwgdmFyaWFibGVzLiIp
OwotICAgIH0gZWxzZQotICAgICAgICBtX251bWJlck9mSTMyTG9jYWxWYXJpYWJsZXMgPSBpbW1l
ZGlhdGU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBDb250ZXh0Pgot
Q29udGV4dFN0YXRlbWVudCBXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlU3RhdGVtZW50KENvbnRl
eHQmIGNvbnRleHQpCi17Ci0gICAgYm9vbCBoYXNJbW1lZGlhdGU7Ci0gICAgV0FTTU9wU3RhdGVt
ZW50IG9wOwotICAgIFdBU01PcFN0YXRlbWVudFdpdGhJbW1lZGlhdGUgb3BXaXRoSW1tZWRpYXRl
OwotICAgIHVpbnQ4X3QgaW1tZWRpYXRlOwotICAgIFJFQURfT1BfU1RBVEVNRU5UX09SX0ZBSUwo
aGFzSW1tZWRpYXRlLCBvcCwgb3BXaXRoSW1tZWRpYXRlLCBpbW1lZGlhdGUsICJDYW5ub3QgcmVh
ZCB0aGUgc3RhdGVtZW50IG9wY29kZS4iKTsKLSAgICBpZiAoIWhhc0ltbWVkaWF0ZSkgewotICAg
ICAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgIGNhc2UgV0FTTU9wU3RhdGVtZW50OjpTZXRMb2Nh
bDoKLSAgICAgICAgICAgIHBhcnNlU2V0TG9jYWwoY29udGV4dCwgV0FTTU9wS2luZDo6U3RhdGVt
ZW50LCBXQVNNRXhwcmVzc2lvblR5cGU6OlZvaWQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgV0FTTU9wU3RhdGVtZW50OjpTZXRHbG9iYWw6Ci0gICAgICAgICAgICBwYXJzZVNl
dEdsb2JhbChjb250ZXh0LCBXQVNNT3BLaW5kOjpTdGF0ZW1lbnQsIFdBU01FeHByZXNzaW9uVHlw
ZTo6Vm9pZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXQVNNT3BTdGF0ZW1l
bnQ6OkkzMlN0b3JlODoKLSAgICAgICAgICAgIHBhcnNlU3RvcmUoY29udGV4dCwgV0FTTU9wS2lu
ZDo6U3RhdGVtZW50LCBXQVNNRXhwcmVzc2lvblR5cGU6OkkzMiwgV0FTTU1lbW9yeVR5cGU6Okk4
LCBNZW1vcnlBY2Nlc3NPZmZzZXRNb2RlOjpOb09mZnNldCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBXQVNNT3BTdGF0ZW1lbnQ6OkkzMlN0b3JlV2l0aE9mZnNldDg6Ci0gICAg
ICAgICAgICBwYXJzZVN0b3JlKGNvbnRleHQsIFdBU01PcEtpbmQ6OlN0YXRlbWVudCwgV0FTTUV4
cHJlc3Npb25UeXBlOjpJMzIsIFdBU01NZW1vcnlUeXBlOjpJOCwgTWVtb3J5QWNjZXNzT2Zmc2V0
TW9kZTo6V2l0aE9mZnNldCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXQVNN
T3BTdGF0ZW1lbnQ6OkkzMlN0b3JlMTY6Ci0gICAgICAgICAgICBwYXJzZVN0b3JlKGNvbnRleHQs
IFdBU01PcEtpbmQ6OlN0YXRlbWVudCwgV0FTTUV4cHJlc3Npb25UeXBlOjpJMzIsIFdBU01NZW1v
cnlUeXBlOjpJMTYsIE1lbW9yeUFjY2Vzc09mZnNldE1vZGU6Ok5vT2Zmc2V0KTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdBU01PcFN0YXRlbWVudDo6STMyU3RvcmVXaXRoT2Zm
c2V0MTY6Ci0gICAgICAgICAgICBwYXJzZVN0b3JlKGNvbnRleHQsIFdBU01PcEtpbmQ6OlN0YXRl
bWVudCwgV0FTTUV4cHJlc3Npb25UeXBlOjpJMzIsIFdBU01NZW1vcnlUeXBlOjpJMTYsIE1lbW9y
eUFjY2Vzc09mZnNldE1vZGU6OldpdGhPZmZzZXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgV0FTTU9wU3RhdGVtZW50OjpJMzJTdG9yZTMyOgotICAgICAgICAgICAgcGFyc2VT
dG9yZShjb250ZXh0LCBXQVNNT3BLaW5kOjpTdGF0ZW1lbnQsIFdBU01FeHByZXNzaW9uVHlwZTo6
STMyLCBXQVNNTWVtb3J5VHlwZTo6STMyLCBNZW1vcnlBY2Nlc3NPZmZzZXRNb2RlOjpOb09mZnNl
dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXQVNNT3BTdGF0ZW1lbnQ6Okkz
MlN0b3JlV2l0aE9mZnNldDMyOgotICAgICAgICAgICAgcGFyc2VTdG9yZShjb250ZXh0LCBXQVNN
T3BLaW5kOjpTdGF0ZW1lbnQsIFdBU01FeHByZXNzaW9uVHlwZTo6STMyLCBXQVNNTWVtb3J5VHlw
ZTo6STMyLCBNZW1vcnlBY2Nlc3NPZmZzZXRNb2RlOjpXaXRoT2Zmc2V0KTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIFdBU01PcFN0YXRlbWVudDo6RjMyU3RvcmU6Ci0gICAgICAg
ICAgICBwYXJzZVN0b3JlKGNvbnRleHQsIFdBU01PcEtpbmQ6OlN0YXRlbWVudCwgV0FTTUV4cHJl
c3Npb25UeXBlOjpGMzIsIFdBU01NZW1vcnlUeXBlOjpGMzIsIE1lbW9yeUFjY2Vzc09mZnNldE1v
ZGU6Ok5vT2Zmc2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdBU01PcFN0
YXRlbWVudDo6RjMyU3RvcmVXaXRoT2Zmc2V0OgotICAgICAgICAgICAgcGFyc2VTdG9yZShjb250
ZXh0LCBXQVNNT3BLaW5kOjpTdGF0ZW1lbnQsIFdBU01FeHByZXNzaW9uVHlwZTo6RjMyLCBXQVNN
TWVtb3J5VHlwZTo6RjMyLCBNZW1vcnlBY2Nlc3NPZmZzZXRNb2RlOjpXaXRoT2Zmc2V0KTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdBU01PcFN0YXRlbWVudDo6RjY0U3RvcmU6
Ci0gICAgICAgICAgICBwYXJzZVN0b3JlKGNvbnRleHQsIFdBU01PcEtpbmQ6OlN0YXRlbWVudCwg
V0FTTUV4cHJlc3Npb25UeXBlOjpGNjQsIFdBU01NZW1vcnlUeXBlOjpGNjQsIE1lbW9yeUFjY2Vz
c09mZnNldE1vZGU6Ok5vT2Zmc2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IFdBU01PcFN0YXRlbWVudDo6RjY0U3RvcmVXaXRoT2Zmc2V0OgotICAgICAgICAgICAgcGFyc2VT
dG9yZShjb250ZXh0LCBXQVNNT3BLaW5kOjpTdGF0ZW1lbnQsIFdBU01FeHByZXNzaW9uVHlwZTo6
RjY0LCBXQVNNTWVtb3J5VHlwZTo6RjY0LCBNZW1vcnlBY2Nlc3NPZmZzZXRNb2RlOjpXaXRoT2Zm
c2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdBU01PcFN0YXRlbWVudDo6
Q2FsbEludGVybmFsOgotICAgICAgICAgICAgcGFyc2VDYWxsSW50ZXJuYWwoY29udGV4dCwgV0FT
TU9wS2luZDo6U3RhdGVtZW50LCBXQVNNRXhwcmVzc2lvblR5cGU6OlZvaWQpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV0FTTU9wU3RhdGVtZW50OjpDYWxsSW5kaXJlY3Q6Ci0g
ICAgICAgICAgICBwYXJzZUNhbGxJbmRpcmVjdChjb250ZXh0LCBXQVNNT3BLaW5kOjpTdGF0ZW1l
bnQsIFdBU01FeHByZXNzaW9uVHlwZTo6Vm9pZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBXQVNNT3BTdGF0ZW1lbnQ6OkNhbGxJbXBvcnQ6Ci0gICAgICAgICAgICBwYXJzZUNh
bGxJbXBvcnQoY29udGV4dCwgV0FTTU9wS2luZDo6U3RhdGVtZW50LCBXQVNNRXhwcmVzc2lvblR5
cGU6OlZvaWQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV0FTTU9wU3RhdGVt
ZW50OjpSZXR1cm46Ci0gICAgICAgICAgICBwYXJzZVJldHVyblN0YXRlbWVudChjb250ZXh0KTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdBU01PcFN0YXRlbWVudDo6QmxvY2s6
Ci0gICAgICAgICAgICBwYXJzZUJsb2NrU3RhdGVtZW50KGNvbnRleHQpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgV0FTTU9wU3RhdGVtZW50OjpJZjoKLSAgICAgICAgICAgIHBh
cnNlSWZTdGF0ZW1lbnQoY29udGV4dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBXQVNNT3BTdGF0ZW1lbnQ6OklmRWxzZToKLSAgICAgICAgICAgIHBhcnNlSWZFbHNlU3RhdGVt
ZW50KGNvbnRleHQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV0FTTU9wU3Rh
dGVtZW50OjpXaGlsZToKLSAgICAgICAgICAgIHBhcnNlV2hpbGVTdGF0ZW1lbnQoY29udGV4dCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXQVNNT3BTdGF0ZW1lbnQ6OkRvOgot
ICAgICAgICAgICAgcGFyc2VEb1N0YXRlbWVudChjb250ZXh0KTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIFdBU01PcFN0YXRlbWVudDo6TGFiZWw6Ci0gICAgICAgICAgICBwYXJz
ZUxhYmVsU3RhdGVtZW50KGNvbnRleHQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgV0FTTU9wU3RhdGVtZW50OjpCcmVhazoKLSAgICAgICAgICAgIHBhcnNlQnJlYWtTdGF0ZW1l
bnQoY29udGV4dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXQVNNT3BTdGF0
ZW1lbnQ6OkJyZWFrTGFiZWw6Ci0gICAgICAgICAgICBwYXJzZUJyZWFrTGFiZWxTdGF0ZW1lbnQo
Y29udGV4dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXQVNNT3BTdGF0ZW1l
bnQ6OkNvbnRpbnVlOgotICAgICAgICAgICAgcGFyc2VDb250aW51ZVN0YXRlbWVudChjb250ZXh0
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdBU01PcFN0YXRlbWVudDo6Q29u
dGludWVMYWJlbDoKLSAgICAgICAgICAgIHBhcnNlQ29udGludWVMYWJlbFN0YXRlbWVudChjb250
ZXh0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdBU01PcFN0YXRlbWVudDo6
U3dpdGNoOgotICAgICAgICAgICAgcGFyc2VTd2l0Y2hTdGF0ZW1lbnQoY29udGV4dCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3dpdGNoIChvcFdp
dGhJbW1lZGlhdGUpIHsKLSAgICAgICAgY2FzZSBXQVNNT3BTdGF0ZW1lbnRXaXRoSW1tZWRpYXRl
OjpTZXRMb2NhbDoKLSAgICAgICAgICAgIHBhcnNlU2V0TG9jYWwoY29udGV4dCwgV0FTTU9wS2lu
ZDo6U3RhdGVtZW50LCBXQVNNRXhwcmVzc2lvblR5cGU6OlZvaWQsIGltbWVkaWF0ZSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXQVNNT3BTdGF0ZW1lbnRXaXRoSW1tZWRpYXRl
OjpTZXRHbG9iYWw6Ci0gICAgICAgICAgICBwYXJzZVNldEdsb2JhbChjb250ZXh0LCBXQVNNT3BL
aW5kOjpTdGF0ZW1lbnQsIFdBU01FeHByZXNzaW9uVHlwZTo6Vm9pZCwgaW1tZWRpYXRlKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIFVOVVNFRDsKLX0KLQot
dGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+Ci1Db250ZXh0U3RhdGVtZW50IFdBU01GdW5jdGlvblBh
cnNlcjo6cGFyc2VSZXR1cm5TdGF0ZW1lbnQoQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBDb250
ZXh0RXhwcmVzc2lvbiBleHByZXNzaW9uID0gMDsKLSAgICBpZiAobV9yZXR1cm5UeXBlICE9IFdB
U01FeHByZXNzaW9uVHlwZTo6Vm9pZCkgewotICAgICAgICBleHByZXNzaW9uID0gcGFyc2VFeHBy
ZXNzaW9uKGNvbnRleHQsIG1fcmV0dXJuVHlwZSk7Ci0gICAgICAgIFBST1BBR0FURV9FUlJPUigp
OwotICAgIH0KLSAgICBjb250ZXh0LmJ1aWxkUmV0dXJuKGV4cHJlc3Npb24sIG1fcmV0dXJuVHlw
ZSk7Ci0gICAgcmV0dXJuIFVOVVNFRDsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+Ci1D
b250ZXh0U3RhdGVtZW50IFdBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VCbG9ja1N0YXRlbWVudChD
b250ZXh0JiBjb250ZXh0KQotewotICAgIHVpbnQzMl90IG51bWJlck9mU3RhdGVtZW50czsKLSAg
ICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwobnVtYmVyT2ZTdGF0ZW1lbnRzLCAiQ2Fubm90
IHJlYWQgdGhlIG51bWJlciBvZiBzdGF0ZW1lbnRzLiIpOwotICAgIGZvciAodWludDMyX3QgaSA9
IDA7IGkgPCBudW1iZXJPZlN0YXRlbWVudHM7ICsraSkgewotICAgICAgICBwYXJzZVN0YXRlbWVu
dChjb250ZXh0KTsKLSAgICAgICAgUFJPUEFHQVRFX0VSUk9SKCk7Ci0gICAgfQotICAgIHJldHVy
biBVTlVTRUQ7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PgotQ29udGV4dFN0YXRlbWVu
dCBXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlSWZTdGF0ZW1lbnQoQ29udGV4dCYgY29udGV4dCkK
LXsKLSAgICBDb250ZXh0SnVtcFRhcmdldCBlbmQ7Ci0KLSAgICBDb250ZXh0RXhwcmVzc2lvbiBl
eHByZXNzaW9uID0gcGFyc2VFeHByZXNzaW9uSTMyKGNvbnRleHQpOwotICAgIFBST1BBR0FURV9F
UlJPUigpOwotCi0gICAgY29udGV4dC5qdW1wVG9UYXJnZXRJZihDb250ZXh0OjpKdW1wQ29uZGl0
aW9uOjpaZXJvLCBleHByZXNzaW9uLCBlbmQpOwotCi0gICAgcGFyc2VTdGF0ZW1lbnQoY29udGV4
dCk7Ci0gICAgUFJPUEFHQVRFX0VSUk9SKCk7Ci0KLSAgICBjb250ZXh0LmxpbmtUYXJnZXQoZW5k
KTsKLSAgICByZXR1cm4gVU5VU0VEOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4KLUNv
bnRleHRTdGF0ZW1lbnQgV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUlmRWxzZVN0YXRlbWVudChD
b250ZXh0JiBjb250ZXh0KQotewotICAgIENvbnRleHRKdW1wVGFyZ2V0IGVsc2VUYXJnZXQ7Ci0g
ICAgQ29udGV4dEp1bXBUYXJnZXQgZW5kOwotCi0gICAgQ29udGV4dEV4cHJlc3Npb24gZXhwcmVz
c2lvbiA9IHBhcnNlRXhwcmVzc2lvbkkzMihjb250ZXh0KTsKLSAgICBQUk9QQUdBVEVfRVJST1Io
KTsKLQotICAgIGNvbnRleHQuanVtcFRvVGFyZ2V0SWYoQ29udGV4dDo6SnVtcENvbmRpdGlvbjo6
WmVybywgZXhwcmVzc2lvbiwgZWxzZVRhcmdldCk7Ci0KLSAgICBwYXJzZVN0YXRlbWVudChjb250
ZXh0KTsKLSAgICBQUk9QQUdBVEVfRVJST1IoKTsKLQotICAgIGNvbnRleHQuanVtcFRvVGFyZ2V0
KGVuZCk7Ci0gICAgY29udGV4dC5saW5rVGFyZ2V0KGVsc2VUYXJnZXQpOwotCi0gICAgcGFyc2VT
dGF0ZW1lbnQoY29udGV4dCk7Ci0gICAgUFJPUEFHQVRFX0VSUk9SKCk7Ci0KLSAgICBjb250ZXh0
LmxpbmtUYXJnZXQoZW5kKTsKLSAgICByZXR1cm4gVU5VU0VEOwotfQotCi10ZW1wbGF0ZSA8Y2xh
c3MgQ29udGV4dD4KLUNvbnRleHRTdGF0ZW1lbnQgV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZVdo
aWxlU3RhdGVtZW50KENvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgY29udGV4dC5zdGFydExvb3Ao
KTsKLSAgICBjb250ZXh0LmxpbmtUYXJnZXQoY29udGV4dC5jb250aW51ZVRhcmdldCgpKTsKLQot
ICAgIENvbnRleHRFeHByZXNzaW9uIGV4cHJlc3Npb24gPSBwYXJzZUV4cHJlc3Npb25JMzIoY29u
dGV4dCk7Ci0gICAgUFJPUEFHQVRFX0VSUk9SKCk7Ci0KLSAgICBjb250ZXh0Lmp1bXBUb1Rhcmdl
dElmKENvbnRleHQ6Okp1bXBDb25kaXRpb246Olplcm8sIGV4cHJlc3Npb24sIGNvbnRleHQuYnJl
YWtUYXJnZXQoKSk7Ci0KLSAgICBtX2JyZWFrU2NvcGVEZXB0aCsrOwotICAgIG1fY29udGludWVT
Y29wZURlcHRoKys7Ci0gICAgcGFyc2VTdGF0ZW1lbnQoY29udGV4dCk7Ci0gICAgUFJPUEFHQVRF
X0VSUk9SKCk7Ci0gICAgbV9jb250aW51ZVNjb3BlRGVwdGgtLTsKLSAgICBtX2JyZWFrU2NvcGVE
ZXB0aC0tOwotCi0gICAgY29udGV4dC5qdW1wVG9UYXJnZXQoY29udGV4dC5jb250aW51ZVRhcmdl
dCgpKTsKLQotICAgIGNvbnRleHQubGlua1RhcmdldChjb250ZXh0LmJyZWFrVGFyZ2V0KCkpOwot
ICAgIGNvbnRleHQuZW5kTG9vcCgpOwotICAgIHJldHVybiBVTlVTRUQ7Ci19Ci0KLXRlbXBsYXRl
IDxjbGFzcyBDb250ZXh0PgotQ29udGV4dFN0YXRlbWVudCBXQVNNRnVuY3Rpb25QYXJzZXI6OnBh
cnNlRG9TdGF0ZW1lbnQoQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBjb250ZXh0LnN0YXJ0TG9v
cCgpOwotCi0gICAgQ29udGV4dEp1bXBUYXJnZXQgdG9wT2ZMb29wOwotICAgIGNvbnRleHQubGlu
a1RhcmdldCh0b3BPZkxvb3ApOwotCi0gICAgbV9icmVha1Njb3BlRGVwdGgrKzsKLSAgICBtX2Nv
bnRpbnVlU2NvcGVEZXB0aCsrOwotICAgIHBhcnNlU3RhdGVtZW50KGNvbnRleHQpOwotICAgIFBS
T1BBR0FURV9FUlJPUigpOwotICAgIG1fY29udGludWVTY29wZURlcHRoLS07Ci0gICAgbV9icmVh
a1Njb3BlRGVwdGgtLTsKLQotICAgIGNvbnRleHQubGlua1RhcmdldChjb250ZXh0LmNvbnRpbnVl
VGFyZ2V0KCkpOwotCi0gICAgQ29udGV4dEV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IHBhcnNlRXhw
cmVzc2lvbkkzMihjb250ZXh0KTsKLSAgICBQUk9QQUdBVEVfRVJST1IoKTsKLQotICAgIGNvbnRl
eHQuanVtcFRvVGFyZ2V0SWYoQ29udGV4dDo6SnVtcENvbmRpdGlvbjo6Tm9uWmVybywgZXhwcmVz
c2lvbiwgdG9wT2ZMb29wKTsKLQotICAgIGNvbnRleHQubGlua1RhcmdldChjb250ZXh0LmJyZWFr
VGFyZ2V0KCkpOwotICAgIGNvbnRleHQuZW5kTG9vcCgpOwotICAgIHJldHVybiBVTlVTRUQ7Ci19
Ci0KLXRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PgotQ29udGV4dFN0YXRlbWVudCBXQVNNRnVuY3Rp
b25QYXJzZXI6OnBhcnNlTGFiZWxTdGF0ZW1lbnQoQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBj
b250ZXh0LnN0YXJ0TGFiZWwoKTsKLSAgICBtX2xhYmVsRGVwdGgrKzsKLSAgICBwYXJzZVN0YXRl
bWVudChjb250ZXh0KTsKLSAgICBQUk9QQUdBVEVfRVJST1IoKTsKLSAgICBtX2xhYmVsRGVwdGgt
LTsKLSAgICBjb250ZXh0LmVuZExhYmVsKCk7Ci0gICAgcmV0dXJuIFVOVVNFRDsKLX0KLQotdGVt
cGxhdGUgPGNsYXNzIENvbnRleHQ+Ci1Db250ZXh0U3RhdGVtZW50IFdBU01GdW5jdGlvblBhcnNl
cjo6cGFyc2VCcmVha1N0YXRlbWVudChDb250ZXh0JiBjb250ZXh0KQotewotICAgIEZBSUxfSUZf
RkFMU0UobV9icmVha1Njb3BlRGVwdGgsICInYnJlYWsnIGlzIG9ubHkgdmFsaWQgaW5zaWRlIGEg
c3dpdGNoIG9yIGxvb3Agc3RhdGVtZW50LiIpOwotICAgIGNvbnRleHQuanVtcFRvVGFyZ2V0KGNv
bnRleHQuYnJlYWtUYXJnZXQoKSk7Ci0gICAgcmV0dXJuIFVOVVNFRDsKLX0KLQotdGVtcGxhdGUg
PGNsYXNzIENvbnRleHQ+Ci1Db250ZXh0U3RhdGVtZW50IFdBU01GdW5jdGlvblBhcnNlcjo6cGFy
c2VCcmVha0xhYmVsU3RhdGVtZW50KENvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgdWludDMyX3Qg
bGFiZWxJbmRleDsKLSAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwobGFiZWxJbmRleCwg
IkNhbm5vdCByZWFkIHRoZSBsYWJlbCBpbmRleC4iKTsKLSAgICBGQUlMX0lGX0ZBTFNFKGxhYmVs
SW5kZXggPCBtX2xhYmVsRGVwdGgsICJUaGUgbGFiZWwgaW5kZXggaXMgaW5jb3JyZWN0LiIpOwot
ICAgIGNvbnRleHQuanVtcFRvVGFyZ2V0KGNvbnRleHQuYnJlYWtMYWJlbFRhcmdldChsYWJlbElu
ZGV4KSk7Ci0gICAgcmV0dXJuIFVOVVNFRDsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+
Ci1Db250ZXh0U3RhdGVtZW50IFdBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VDb250aW51ZVN0YXRl
bWVudChDb250ZXh0JiBjb250ZXh0KQotewotICAgIEZBSUxfSUZfRkFMU0UobV9jb250aW51ZVNj
b3BlRGVwdGgsICInY29udGludWUnIGlzIG9ubHkgdmFsaWQgaW5zaWRlIGEgbG9vcCBzdGF0ZW1l
bnQuIik7Ci0gICAgY29udGV4dC5qdW1wVG9UYXJnZXQoY29udGV4dC5jb250aW51ZVRhcmdldCgp
KTsKLSAgICByZXR1cm4gVU5VU0VEOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4KLUNv
bnRleHRTdGF0ZW1lbnQgV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUNvbnRpbnVlTGFiZWxTdGF0
ZW1lbnQoQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICB1aW50MzJfdCBsYWJlbEluZGV4OwotICAg
IFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChsYWJlbEluZGV4LCAiQ2Fubm90IHJlYWQgdGhl
IGxhYmVsIGluZGV4LiIpOwotICAgIEZBSUxfSUZfRkFMU0UobGFiZWxJbmRleCA8IG1fbGFiZWxE
ZXB0aCwgIlRoZSBsYWJlbCBpbmRleCBpcyBpbmNvcnJlY3QuIik7Ci0gICAgY29udGV4dC5qdW1w
VG9UYXJnZXQoY29udGV4dC5jb250aW51ZUxhYmVsVGFyZ2V0KGxhYmVsSW5kZXgpKTsKLSAgICBy
ZXR1cm4gVU5VU0VEOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4KLUNvbnRleHRTdGF0
ZW1lbnQgV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZVN3aXRjaFN0YXRlbWVudChDb250ZXh0JiBj
b250ZXh0KQotewotICAgIGNvbnRleHQuc3RhcnRTd2l0Y2goKTsKLSAgICB1aW50MzJfdCBudW1i
ZXJPZkNhc2VzOwotICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChudW1iZXJPZkNhc2Vz
LCAiQ2Fubm90IHJlYWQgdGhlIG51bWJlciBvZiBjYXNlcy4iKTsKLSAgICBDb250ZXh0RXhwcmVz
c2lvbiBleHByZXNzaW9uID0gcGFyc2VFeHByZXNzaW9uSTMyKGNvbnRleHQpOwotICAgIFBST1BB
R0FURV9FUlJPUigpOwotCi0gICAgQ29udGV4dEp1bXBUYXJnZXQgY29tcGFyZTsKLSAgICBjb250
ZXh0Lmp1bXBUb1RhcmdldChjb21wYXJlKTsKLQotICAgIFZlY3RvcjxpbnQ2NF90PiBjYXNlczsK
LSAgICBWZWN0b3I8Q29udGV4dEp1bXBUYXJnZXQ+IHRhcmdldHM7Ci0gICAgY2FzZXMucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShudW1iZXJPZkNhc2VzKTsKLSAgICB0YXJnZXRzLnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkobnVtYmVyT2ZDYXNlcyk7Ci0gICAgYm9vbCBoYXNEZWZhdWx0ID0gZmFsc2U7
Ci0gICAgQ29udGV4dEp1bXBUYXJnZXQgZGVmYXVsdFRhcmdldDsKLQotICAgIG1fYnJlYWtTY29w
ZURlcHRoKys7Ci0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9mQ2FzZXM7ICsr
aSkgewotICAgICAgICBXQVNNU3dpdGNoQ2FzZSBzd2l0Y2hDYXNlOwotICAgICAgICBSRUFEX1NX
SVRDSF9DQVNFX09SX0ZBSUwoc3dpdGNoQ2FzZSwgIkNhbm5vdCByZWFkIHRoZSBzd2l0Y2ggY2Fz
ZS4iKTsKLSAgICAgICAgc3dpdGNoIChzd2l0Y2hDYXNlKSB7Ci0gICAgICAgIGNhc2UgV0FTTVN3
aXRjaENhc2U6OkNhc2VXaXRoTm9TdGF0ZW1lbnRzOgotICAgICAgICBjYXNlIFdBU01Td2l0Y2hD
YXNlOjpDYXNlV2l0aFN0YXRlbWVudDoKLSAgICAgICAgY2FzZSBXQVNNU3dpdGNoQ2FzZTo6Q2Fz
ZVdpdGhCbG9ja1N0YXRlbWVudDogewotICAgICAgICAgICAgdWludDMyX3QgdmFsdWU7Ci0gICAg
ICAgICAgICBSRUFEX0NPTVBBQ1RfSU5UMzJfT1JfRkFJTCh2YWx1ZSwgIkNhbm5vdCByZWFkIHRo
ZSB2YWx1ZSBvZiB0aGUgc3dpdGNoIGNhc2UuIik7Ci0gICAgICAgICAgICBjYXNlcy51bmNoZWNr
ZWRBcHBlbmQodmFsdWUpOwotICAgICAgICAgICAgQ29udGV4dEp1bXBUYXJnZXQgdGFyZ2V0Owot
ICAgICAgICAgICAgY29udGV4dC5saW5rVGFyZ2V0KHRhcmdldCk7Ci0gICAgICAgICAgICB0YXJn
ZXRzLnVuY2hlY2tlZEFwcGVuZCh0YXJnZXQpOwotICAgICAgICAgICAgaWYgKHN3aXRjaENhc2Ug
PT0gV0FTTVN3aXRjaENhc2U6OkNhc2VXaXRoU3RhdGVtZW50KSB7Ci0gICAgICAgICAgICAgICAg
cGFyc2VTdGF0ZW1lbnQoY29udGV4dCk7Ci0gICAgICAgICAgICAgICAgUFJPUEFHQVRFX0VSUk9S
KCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHN3aXRjaENhc2UgPT0gV0FTTVN3aXRjaENhc2U6
OkNhc2VXaXRoQmxvY2tTdGF0ZW1lbnQpIHsKLSAgICAgICAgICAgICAgICBwYXJzZUJsb2NrU3Rh
dGVtZW50KGNvbnRleHQpOwotICAgICAgICAgICAgICAgIFBST1BBR0FURV9FUlJPUigpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBX
QVNNU3dpdGNoQ2FzZTo6RGVmYXVsdFdpdGhOb1N0YXRlbWVudHM6Ci0gICAgICAgIGNhc2UgV0FT
TVN3aXRjaENhc2U6OkRlZmF1bHRXaXRoU3RhdGVtZW50OgotICAgICAgICBjYXNlIFdBU01Td2l0
Y2hDYXNlOjpEZWZhdWx0V2l0aEJsb2NrU3RhdGVtZW50OiB7Ci0gICAgICAgICAgICBGQUlMX0lG
X0ZBTFNFKGkgPT0gbnVtYmVyT2ZDYXNlcyAtIDEsICJUaGUgZGVmYXVsdCBjYXNlIG11c3QgYmUg
dGhlIGxhc3QgY2FzZS4iKTsKLSAgICAgICAgICAgIGhhc0RlZmF1bHQgPSB0cnVlOwotICAgICAg
ICAgICAgY29udGV4dC5saW5rVGFyZ2V0KGRlZmF1bHRUYXJnZXQpOwotICAgICAgICAgICAgaWYg
KHN3aXRjaENhc2UgPT0gV0FTTVN3aXRjaENhc2U6OkRlZmF1bHRXaXRoU3RhdGVtZW50KSB7Ci0g
ICAgICAgICAgICAgICAgcGFyc2VTdGF0ZW1lbnQoY29udGV4dCk7Ci0gICAgICAgICAgICAgICAg
UFJPUEFHQVRFX0VSUk9SKCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHN3aXRjaENhc2UgPT0g
V0FTTVN3aXRjaENhc2U6OkRlZmF1bHRXaXRoQmxvY2tTdGF0ZW1lbnQpIHsKLSAgICAgICAgICAg
ICAgICBwYXJzZUJsb2NrU3RhdGVtZW50KGNvbnRleHQpOwotICAgICAgICAgICAgICAgIFBST1BB
R0FURV9FUlJPUigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICB9Ci0gICAgfQotICAgIGlmICghaGFzRGVmYXVsdCkKLSAgICAgICAgY29udGV4dC5s
aW5rVGFyZ2V0KGRlZmF1bHRUYXJnZXQpOwotCi0gICAgbV9icmVha1Njb3BlRGVwdGgtLTsKLQot
ICAgIGNvbnRleHQuanVtcFRvVGFyZ2V0KGNvbnRleHQuYnJlYWtUYXJnZXQoKSk7Ci0gICAgY29u
dGV4dC5saW5rVGFyZ2V0KGNvbXBhcmUpOwotCi0gICAgY29udGV4dC5idWlsZFN3aXRjaChleHBy
ZXNzaW9uLCBjYXNlcywgdGFyZ2V0cywgZGVmYXVsdFRhcmdldCk7Ci0KLSAgICBjb250ZXh0Lmxp
bmtUYXJnZXQoY29udGV4dC5icmVha1RhcmdldCgpKTsKLSAgICBjb250ZXh0LmVuZFN3aXRjaCgp
OwotICAgIHJldHVybiBVTlVTRUQ7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PgotQ29u
dGV4dEV4cHJlc3Npb24gV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUV4cHJlc3Npb24oQ29udGV4
dCYgY29udGV4dCwgV0FTTUV4cHJlc3Npb25UeXBlIGV4cHJlc3Npb25UeXBlKQotewotICAgIHN3
aXRjaCAoZXhwcmVzc2lvblR5cGUpIHsKLSAgICBjYXNlIFdBU01FeHByZXNzaW9uVHlwZTo6STMy
OgotICAgICAgICByZXR1cm4gcGFyc2VFeHByZXNzaW9uSTMyKGNvbnRleHQpOwotICAgIGNhc2Ug
V0FTTUV4cHJlc3Npb25UeXBlOjpGMzI6Ci0gICAgICAgIHJldHVybiBwYXJzZUV4cHJlc3Npb25G
MzIoY29udGV4dCk7Ci0gICAgY2FzZSBXQVNNRXhwcmVzc2lvblR5cGU6OkY2NDoKLSAgICAgICAg
cmV0dXJuIHBhcnNlRXhwcmVzc2lvbkY2NChjb250ZXh0KTsKLSAgICBjYXNlIFdBU01FeHByZXNz
aW9uVHlwZTo6Vm9pZDoKLSAgICAgICAgcmV0dXJuIHBhcnNlRXhwcmVzc2lvblZvaWQoY29udGV4
dCk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICB9Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PgotQ29udGV4dEV4cHJlc3Npb24g
V0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUV4cHJlc3Npb25JMzIoQ29udGV4dCYgY29udGV4dCkK
LXsKLSAgICBib29sIGhhc0ltbWVkaWF0ZTsKLSAgICBXQVNNT3BFeHByZXNzaW9uSTMyIG9wOwot
ICAgIFdBU01PcEV4cHJlc3Npb25JMzJXaXRoSW1tZWRpYXRlIG9wV2l0aEltbWVkaWF0ZTsKLSAg
ICB1aW50OF90IGltbWVkaWF0ZTsKLSAgICBSRUFEX09QX0VYUFJFU1NJT05fSTMyX09SX0ZBSUwo
aGFzSW1tZWRpYXRlLCBvcCwgb3BXaXRoSW1tZWRpYXRlLCBpbW1lZGlhdGUsICJDYW5ub3QgcmVh
ZCB0aGUgaW50MzIgZXhwcmVzc2lvbiBvcGNvZGUuIik7Ci0gICAgaWYgKCFoYXNJbW1lZGlhdGUp
IHsKLSAgICAgICAgc3dpdGNoIChvcCkgewotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25J
MzI6OkNvbnN0YW50UG9vbEluZGV4OgotICAgICAgICAgICAgcmV0dXJuIHBhcnNlQ29uc3RhbnRQ
b29sSW5kZXhFeHByZXNzaW9uSTMyKGNvbnRleHQpOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJl
c3Npb25JMzI6OkltbWVkaWF0ZToKLSAgICAgICAgICAgIHJldHVybiBwYXJzZUltbWVkaWF0ZUV4
cHJlc3Npb25JMzIoY29udGV4dCk7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6
R2V0TG9jYWw6Ci0gICAgICAgICAgICByZXR1cm4gcGFyc2VHZXRMb2NhbEV4cHJlc3Npb24oY29u
dGV4dCwgV0FTTVR5cGU6OkkzMik7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6
R2V0R2xvYmFsOgotICAgICAgICAgICAgcmV0dXJuIHBhcnNlR2V0R2xvYmFsRXhwcmVzc2lvbihj
b250ZXh0LCBXQVNNVHlwZTo6STMyKTsKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMy
OjpTZXRMb2NhbDoKLSAgICAgICAgICAgIHJldHVybiBwYXJzZVNldExvY2FsKGNvbnRleHQsIFdB
U01PcEtpbmQ6OkV4cHJlc3Npb24sIFdBU01FeHByZXNzaW9uVHlwZTo6STMyKTsKLSAgICAgICAg
Y2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpTZXRHbG9iYWw6Ci0gICAgICAgICAgICByZXR1cm4g
cGFyc2VTZXRHbG9iYWwoY29udGV4dCwgV0FTTU9wS2luZDo6RXhwcmVzc2lvbiwgV0FTTUV4cHJl
c3Npb25UeXBlOjpJMzIpOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OlNMb2Fk
ODoKLSAgICAgICAgICAgIHJldHVybiBwYXJzZUxvYWQoY29udGV4dCwgV0FTTUV4cHJlc3Npb25U
eXBlOjpJMzIsIFdBU01NZW1vcnlUeXBlOjpJOCwgTWVtb3J5QWNjZXNzT2Zmc2V0TW9kZTo6Tm9P
ZmZzZXQsIE1lbW9yeUFjY2Vzc0NvbnZlcnNpb246OlNpZ25FeHRlbmQpOwotICAgICAgICBjYXNl
IFdBU01PcEV4cHJlc3Npb25JMzI6OlNMb2FkV2l0aE9mZnNldDg6Ci0gICAgICAgICAgICByZXR1
cm4gcGFyc2VMb2FkKGNvbnRleHQsIFdBU01FeHByZXNzaW9uVHlwZTo6STMyLCBXQVNNTWVtb3J5
VHlwZTo6STgsIE1lbW9yeUFjY2Vzc09mZnNldE1vZGU6OldpdGhPZmZzZXQsIE1lbW9yeUFjY2Vz
c0NvbnZlcnNpb246OlNpZ25FeHRlbmQpOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25J
MzI6OlVMb2FkODoKLSAgICAgICAgICAgIHJldHVybiBwYXJzZUxvYWQoY29udGV4dCwgV0FTTUV4
cHJlc3Npb25UeXBlOjpJMzIsIFdBU01NZW1vcnlUeXBlOjpJOCwgTWVtb3J5QWNjZXNzT2Zmc2V0
TW9kZTo6Tm9PZmZzZXQsIE1lbW9yeUFjY2Vzc0NvbnZlcnNpb246Olplcm9FeHRlbmQpOwotICAg
ICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OlVMb2FkV2l0aE9mZnNldDg6Ci0gICAgICAg
ICAgICByZXR1cm4gcGFyc2VMb2FkKGNvbnRleHQsIFdBU01FeHByZXNzaW9uVHlwZTo6STMyLCBX
QVNNTWVtb3J5VHlwZTo6STgsIE1lbW9yeUFjY2Vzc09mZnNldE1vZGU6OldpdGhPZmZzZXQsIE1l
bW9yeUFjY2Vzc0NvbnZlcnNpb246Olplcm9FeHRlbmQpOwotICAgICAgICBjYXNlIFdBU01PcEV4
cHJlc3Npb25JMzI6OlNMb2FkMTY6Ci0gICAgICAgICAgICByZXR1cm4gcGFyc2VMb2FkKGNvbnRl
eHQsIFdBU01FeHByZXNzaW9uVHlwZTo6STMyLCBXQVNNTWVtb3J5VHlwZTo6STE2LCBNZW1vcnlB
Y2Nlc3NPZmZzZXRNb2RlOjpOb09mZnNldCwgTWVtb3J5QWNjZXNzQ29udmVyc2lvbjo6U2lnbkV4
dGVuZCk7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6U0xvYWRXaXRoT2Zmc2V0
MTY6Ci0gICAgICAgICAgICByZXR1cm4gcGFyc2VMb2FkKGNvbnRleHQsIFdBU01FeHByZXNzaW9u
VHlwZTo6STMyLCBXQVNNTWVtb3J5VHlwZTo6STE2LCBNZW1vcnlBY2Nlc3NPZmZzZXRNb2RlOjpX
aXRoT2Zmc2V0LCBNZW1vcnlBY2Nlc3NDb252ZXJzaW9uOjpTaWduRXh0ZW5kKTsKLSAgICAgICAg
Y2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpVTG9hZDE2OgotICAgICAgICAgICAgcmV0dXJuIHBh
cnNlTG9hZChjb250ZXh0LCBXQVNNRXhwcmVzc2lvblR5cGU6OkkzMiwgV0FTTU1lbW9yeVR5cGU6
OkkxNiwgTWVtb3J5QWNjZXNzT2Zmc2V0TW9kZTo6Tm9PZmZzZXQsIE1lbW9yeUFjY2Vzc0NvbnZl
cnNpb246Olplcm9FeHRlbmQpOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OlVM
b2FkV2l0aE9mZnNldDE2OgotICAgICAgICAgICAgcmV0dXJuIHBhcnNlTG9hZChjb250ZXh0LCBX
QVNNRXhwcmVzc2lvblR5cGU6OkkzMiwgV0FTTU1lbW9yeVR5cGU6OkkxNiwgTWVtb3J5QWNjZXNz
T2Zmc2V0TW9kZTo6V2l0aE9mZnNldCwgTWVtb3J5QWNjZXNzQ29udmVyc2lvbjo6WmVyb0V4dGVu
ZCk7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6TG9hZDMyOgotICAgICAgICAg
ICAgcmV0dXJuIHBhcnNlTG9hZChjb250ZXh0LCBXQVNNRXhwcmVzc2lvblR5cGU6OkkzMiwgV0FT
TU1lbW9yeVR5cGU6OkkzMiwgTWVtb3J5QWNjZXNzT2Zmc2V0TW9kZTo6Tm9PZmZzZXQpOwotICAg
ICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OkxvYWRXaXRoT2Zmc2V0MzI6Ci0gICAgICAg
ICAgICByZXR1cm4gcGFyc2VMb2FkKGNvbnRleHQsIFdBU01FeHByZXNzaW9uVHlwZTo6STMyLCBX
QVNNTWVtb3J5VHlwZTo6STMyLCBNZW1vcnlBY2Nlc3NPZmZzZXRNb2RlOjpXaXRoT2Zmc2V0KTsK
LSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpTdG9yZTg6Ci0gICAgICAgICAgICBy
ZXR1cm4gcGFyc2VTdG9yZShjb250ZXh0LCBXQVNNT3BLaW5kOjpFeHByZXNzaW9uLCBXQVNNRXhw
cmVzc2lvblR5cGU6OkkzMiwgV0FTTU1lbW9yeVR5cGU6Okk4LCBNZW1vcnlBY2Nlc3NPZmZzZXRN
b2RlOjpOb09mZnNldCk7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6U3RvcmVX
aXRoT2Zmc2V0ODoKLSAgICAgICAgICAgIHJldHVybiBwYXJzZVN0b3JlKGNvbnRleHQsIFdBU01P
cEtpbmQ6OkV4cHJlc3Npb24sIFdBU01FeHByZXNzaW9uVHlwZTo6STMyLCBXQVNNTWVtb3J5VHlw
ZTo6STgsIE1lbW9yeUFjY2Vzc09mZnNldE1vZGU6OldpdGhPZmZzZXQpOwotICAgICAgICBjYXNl
IFdBU01PcEV4cHJlc3Npb25JMzI6OlN0b3JlMTY6Ci0gICAgICAgICAgICByZXR1cm4gcGFyc2VT
dG9yZShjb250ZXh0LCBXQVNNT3BLaW5kOjpFeHByZXNzaW9uLCBXQVNNRXhwcmVzc2lvblR5cGU6
OkkzMiwgV0FTTU1lbW9yeVR5cGU6OkkxNiwgTWVtb3J5QWNjZXNzT2Zmc2V0TW9kZTo6Tm9PZmZz
ZXQpOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OlN0b3JlV2l0aE9mZnNldDE2
OgotICAgICAgICAgICAgcmV0dXJuIHBhcnNlU3RvcmUoY29udGV4dCwgV0FTTU9wS2luZDo6RXhw
cmVzc2lvbiwgV0FTTUV4cHJlc3Npb25UeXBlOjpJMzIsIFdBU01NZW1vcnlUeXBlOjpJMTYsIE1l
bW9yeUFjY2Vzc09mZnNldE1vZGU6OldpdGhPZmZzZXQpOwotICAgICAgICBjYXNlIFdBU01PcEV4
cHJlc3Npb25JMzI6OlN0b3JlMzI6Ci0gICAgICAgICAgICByZXR1cm4gcGFyc2VTdG9yZShjb250
ZXh0LCBXQVNNT3BLaW5kOjpFeHByZXNzaW9uLCBXQVNNRXhwcmVzc2lvblR5cGU6OkkzMiwgV0FT
TU1lbW9yeVR5cGU6OkkzMiwgTWVtb3J5QWNjZXNzT2Zmc2V0TW9kZTo6Tm9PZmZzZXQpOwotICAg
ICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OlN0b3JlV2l0aE9mZnNldDMyOgotICAgICAg
ICAgICAgcmV0dXJuIHBhcnNlU3RvcmUoY29udGV4dCwgV0FTTU9wS2luZDo6RXhwcmVzc2lvbiwg
V0FTTUV4cHJlc3Npb25UeXBlOjpJMzIsIFdBU01NZW1vcnlUeXBlOjpJMzIsIE1lbW9yeUFjY2Vz
c09mZnNldE1vZGU6OldpdGhPZmZzZXQpOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25J
MzI6OkNhbGxJbnRlcm5hbDoKLSAgICAgICAgICAgIHJldHVybiBwYXJzZUNhbGxJbnRlcm5hbChj
b250ZXh0LCBXQVNNT3BLaW5kOjpFeHByZXNzaW9uLCBXQVNNRXhwcmVzc2lvblR5cGU6OkkzMik7
Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6Q2FsbEluZGlyZWN0OgotICAgICAg
ICAgICAgcmV0dXJuIHBhcnNlQ2FsbEluZGlyZWN0KGNvbnRleHQsIFdBU01PcEtpbmQ6OkV4cHJl
c3Npb24sIFdBU01FeHByZXNzaW9uVHlwZTo6STMyKTsKLSAgICAgICAgY2FzZSBXQVNNT3BFeHBy
ZXNzaW9uSTMyOjpDYWxsSW1wb3J0OgotICAgICAgICAgICAgcmV0dXJuIHBhcnNlQ2FsbEltcG9y
dChjb250ZXh0LCBXQVNNT3BLaW5kOjpFeHByZXNzaW9uLCBXQVNNRXhwcmVzc2lvblR5cGU6Okkz
Mik7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6Q29uZGl0aW9uYWw6Ci0gICAg
ICAgICAgICByZXR1cm4gcGFyc2VDb25kaXRpb25hbChjb250ZXh0LCBXQVNNRXhwcmVzc2lvblR5
cGU6OkkzMik7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6Q29tbWE6Ci0gICAg
ICAgICAgICByZXR1cm4gcGFyc2VDb21tYShjb250ZXh0LCBXQVNNRXhwcmVzc2lvblR5cGU6Okkz
Mik7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6RnJvbUYzMjoKLSAgICAgICAg
ICAgIHJldHVybiBwYXJzZUNvbnZlcnRUeXBlKGNvbnRleHQsIFdBU01FeHByZXNzaW9uVHlwZTo6
RjMyLCBXQVNNRXhwcmVzc2lvblR5cGU6OkkzMiwgV0FTTVR5cGVDb252ZXJzaW9uOjpDb252ZXJ0
U2lnbmVkKTsKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpGcm9tRjY0OgotICAg
ICAgICAgICAgcmV0dXJuIHBhcnNlQ29udmVydFR5cGUoY29udGV4dCwgV0FTTUV4cHJlc3Npb25U
eXBlOjpGNjQsIFdBU01FeHByZXNzaW9uVHlwZTo6STMyLCBXQVNNVHlwZUNvbnZlcnNpb246OkNv
bnZlcnRTaWduZWQpOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6Ok5lZ2F0ZToK
LSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpCaXROb3Q6Ci0gICAgICAgIGNhc2Ug
V0FTTU9wRXhwcmVzc2lvbkkzMjo6Q291bnRMZWFkaW5nWmVyb3M6Ci0gICAgICAgIGNhc2UgV0FT
TU9wRXhwcmVzc2lvbkkzMjo6TG9naWNhbE5vdDoKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNz
aW9uSTMyOjpBYnM6Ci0gICAgICAgICAgICByZXR1cm4gcGFyc2VVbmFyeUV4cHJlc3Npb25JMzIo
Y29udGV4dCwgb3ApOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OkFkZDoKLSAg
ICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpTdWI6Ci0gICAgICAgIGNhc2UgV0FTTU9w
RXhwcmVzc2lvbkkzMjo6TXVsOgotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OlNE
aXY6Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6VURpdjoKLSAgICAgICAgY2Fz
ZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpTTW9kOgotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Np
b25JMzI6OlVNb2Q6Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6Qml0T3I6Ci0g
ICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6Qml0QW5kOgotICAgICAgICBjYXNlIFdB
U01PcEV4cHJlc3Npb25JMzI6OkJpdFhvcjoKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9u
STMyOjpMZWZ0U2hpZnQ6Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6QXJpdGht
ZXRpY1JpZ2h0U2hpZnQ6Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6TG9naWNh
bFJpZ2h0U2hpZnQ6Ci0gICAgICAgICAgICByZXR1cm4gcGFyc2VCaW5hcnlFeHByZXNzaW9uSTMy
KGNvbnRleHQsIG9wKTsKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpFcXVhbEkz
MjoKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpOb3RFcXVhbEkzMjoKLSAgICAg
ICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpTTGVzc1RoYW5JMzI6Ci0gICAgICAgIGNhc2Ug
V0FTTU9wRXhwcmVzc2lvbkkzMjo6VUxlc3NUaGFuSTMyOgotICAgICAgICBjYXNlIFdBU01PcEV4
cHJlc3Npb25JMzI6OlNMZXNzVGhhbk9yRXF1YWxJMzI6Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhw
cmVzc2lvbkkzMjo6VUxlc3NUaGFuT3JFcXVhbEkzMjoKLSAgICAgICAgY2FzZSBXQVNNT3BFeHBy
ZXNzaW9uSTMyOjpTR3JlYXRlclRoYW5JMzI6Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lv
bkkzMjo6VUdyZWF0ZXJUaGFuSTMyOgotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6
OlNHcmVhdGVyVGhhbk9yRXF1YWxJMzI6Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkz
Mjo6VUdyZWF0ZXJUaGFuT3JFcXVhbEkzMjoKLSAgICAgICAgICAgIHJldHVybiBwYXJzZVJlbGF0
aW9uYWxJMzJFeHByZXNzaW9uSTMyKGNvbnRleHQsIG9wKTsKLSAgICAgICAgY2FzZSBXQVNNT3BF
eHByZXNzaW9uSTMyOjpFcXVhbEYzMjoKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMy
OjpOb3RFcXVhbEYzMjoKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpMZXNzVGhh
bkYzMjoKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpMZXNzVGhhbk9yRXF1YWxG
MzI6Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6R3JlYXRlclRoYW5GMzI6Ci0g
ICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6R3JlYXRlclRoYW5PckVxdWFsRjMyOgot
ICAgICAgICAgICAgcmV0dXJuIHBhcnNlUmVsYXRpb25hbEYzMkV4cHJlc3Npb25JMzIoY29udGV4
dCwgb3ApOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OkVxdWFsRjY0OgotICAg
ICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6Ok5vdEVxdWFsRjY0OgotICAgICAgICBjYXNl
IFdBU01PcEV4cHJlc3Npb25JMzI6Okxlc3NUaGFuRjY0OgotICAgICAgICBjYXNlIFdBU01PcEV4
cHJlc3Npb25JMzI6Okxlc3NUaGFuT3JFcXVhbEY2NDoKLSAgICAgICAgY2FzZSBXQVNNT3BFeHBy
ZXNzaW9uSTMyOjpHcmVhdGVyVGhhbkY2NDoKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9u
STMyOjpHcmVhdGVyVGhhbk9yRXF1YWxGNjQ6Ci0gICAgICAgICAgICByZXR1cm4gcGFyc2VSZWxh
dGlvbmFsRjY0RXhwcmVzc2lvbkkzMihjb250ZXh0LCBvcCk7Ci0gICAgICAgIGNhc2UgV0FTTU9w
RXhwcmVzc2lvbkkzMjo6U01pbjoKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpV
TWluOgotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OlNNYXg6Ci0gICAgICAgIGNh
c2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6VU1heDoKLSAgICAgICAgICAgIHJldHVybiBwYXJzZU1p
bk9yTWF4RXhwcmVzc2lvbkkzMihjb250ZXh0LCBvcCk7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIHN3aXRjaCAob3BXaXRoSW1tZWRpYXRlKSB7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhw
cmVzc2lvbkkzMldpdGhJbW1lZGlhdGU6OkNvbnN0YW50UG9vbEluZGV4OgotICAgICAgICAgICAg
cmV0dXJuIHBhcnNlQ29uc3RhbnRQb29sSW5kZXhFeHByZXNzaW9uSTMyKGNvbnRleHQsIGltbWVk
aWF0ZSk7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMldpdGhJbW1lZGlhdGU6Oklt
bWVkaWF0ZToKLSAgICAgICAgICAgIHJldHVybiBwYXJzZUltbWVkaWF0ZUV4cHJlc3Npb25JMzIo
Y29udGV4dCwgaW1tZWRpYXRlKTsKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyV2l0
aEltbWVkaWF0ZTo6R2V0TG9jYWw6Ci0gICAgICAgICAgICByZXR1cm4gcGFyc2VHZXRMb2NhbEV4
cHJlc3Npb24oY29udGV4dCwgV0FTTVR5cGU6OkkzMiwgaW1tZWRpYXRlKTsKLSAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAg
fQotICAgIHJldHVybiAwOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4KLUNvbnRleHRF
eHByZXNzaW9uIFdBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VDb25zdGFudFBvb2xJbmRleEV4cHJl
c3Npb25JMzIoQ29udGV4dCYgY29udGV4dCwgdWludDMyX3QgY29uc3RhbnRQb29sSW5kZXgpCi17
Ci0gICAgRkFJTF9JRl9GQUxTRShjb25zdGFudFBvb2xJbmRleCA8IG1fbW9kdWxlLT5pMzJDb25z
dGFudHMoKS5zaXplKCksICJUaGUgY29uc3RhbnQgcG9vbCBpbmRleCBpcyBpbmNvcnJlY3QuIik7
Ci0gICAgcmV0dXJuIGNvbnRleHQuYnVpbGRJbW1lZGlhdGVJMzIobV9tb2R1bGUtPmkzMkNvbnN0
YW50cygpW2NvbnN0YW50UG9vbEluZGV4XSk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBDb250ZXh0
PgotQ29udGV4dEV4cHJlc3Npb24gV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUNvbnN0YW50UG9v
bEluZGV4RXhwcmVzc2lvbkkzMihDb250ZXh0JiBjb250ZXh0KQotewotICAgIHVpbnQzMl90IGNv
bnN0YW50UG9vbEluZGV4OwotICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChjb25zdGFu
dFBvb2xJbmRleCwgIkNhbm5vdCByZWFkIHRoZSBjb25zdGFudCBwb29sIGluZGV4LiIpOwotICAg
IHJldHVybiBwYXJzZUNvbnN0YW50UG9vbEluZGV4RXhwcmVzc2lvbkkzMihjb250ZXh0LCBjb25z
dGFudFBvb2xJbmRleCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PgotQ29udGV4dEV4
cHJlc3Npb24gV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUltbWVkaWF0ZUV4cHJlc3Npb25JMzIo
Q29udGV4dCYgY29udGV4dCwgdWludDMyX3QgaW1tZWRpYXRlKQotewotICAgIHJldHVybiBjb250
ZXh0LmJ1aWxkSW1tZWRpYXRlSTMyKGltbWVkaWF0ZSk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBD
b250ZXh0PgotQ29udGV4dEV4cHJlc3Npb24gV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUltbWVk
aWF0ZUV4cHJlc3Npb25JMzIoQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICB1aW50MzJfdCBpbW1l
ZGlhdGU7Ci0gICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKGltbWVkaWF0ZSwgIkNhbm5v
dCByZWFkIHRoZSBpbW1lZGlhdGUuIik7Ci0gICAgcmV0dXJuIHBhcnNlSW1tZWRpYXRlRXhwcmVz
c2lvbkkzMihjb250ZXh0LCBpbW1lZGlhdGUpOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4
dD4KLUNvbnRleHRFeHByZXNzaW9uIFdBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VVbmFyeUV4cHJl
c3Npb25JMzIoQ29udGV4dCYgY29udGV4dCwgV0FTTU9wRXhwcmVzc2lvbkkzMiBvcCkKLXsKLSAg
ICBDb250ZXh0RXhwcmVzc2lvbiBleHByZXNzaW9uID0gcGFyc2VFeHByZXNzaW9uSTMyKGNvbnRl
eHQpOwotICAgIFBST1BBR0FURV9FUlJPUigpOwotICAgIHJldHVybiBjb250ZXh0LmJ1aWxkVW5h
cnlJMzIoZXhwcmVzc2lvbiwgb3ApOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4KLUNv
bnRleHRFeHByZXNzaW9uIFdBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VCaW5hcnlFeHByZXNzaW9u
STMyKENvbnRleHQmIGNvbnRleHQsIFdBU01PcEV4cHJlc3Npb25JMzIgb3ApCi17Ci0gICAgQ29u
dGV4dEV4cHJlc3Npb24gbGVmdCA9IHBhcnNlRXhwcmVzc2lvbkkzMihjb250ZXh0KTsKLSAgICBQ
Uk9QQUdBVEVfRVJST1IoKTsKLSAgICBDb250ZXh0RXhwcmVzc2lvbiByaWdodCA9IHBhcnNlRXhw
cmVzc2lvbkkzMihjb250ZXh0KTsKLSAgICBQUk9QQUdBVEVfRVJST1IoKTsKLSAgICByZXR1cm4g
Y29udGV4dC5idWlsZEJpbmFyeUkzMihsZWZ0LCByaWdodCwgb3ApOwotfQotCi10ZW1wbGF0ZSA8
Y2xhc3MgQ29udGV4dD4KLUNvbnRleHRFeHByZXNzaW9uIFdBU01GdW5jdGlvblBhcnNlcjo6cGFy
c2VSZWxhdGlvbmFsSTMyRXhwcmVzc2lvbkkzMihDb250ZXh0JiBjb250ZXh0LCBXQVNNT3BFeHBy
ZXNzaW9uSTMyIG9wKQotewotICAgIENvbnRleHRFeHByZXNzaW9uIGxlZnQgPSBwYXJzZUV4cHJl
c3Npb25JMzIoY29udGV4dCk7Ci0gICAgUFJPUEFHQVRFX0VSUk9SKCk7Ci0gICAgQ29udGV4dEV4
cHJlc3Npb24gcmlnaHQgPSBwYXJzZUV4cHJlc3Npb25JMzIoY29udGV4dCk7Ci0gICAgUFJPUEFH
QVRFX0VSUk9SKCk7Ci0gICAgcmV0dXJuIGNvbnRleHQuYnVpbGRSZWxhdGlvbmFsSTMyKGxlZnQs
IHJpZ2h0LCBvcCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PgotQ29udGV4dEV4cHJl
c3Npb24gV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZVJlbGF0aW9uYWxGMzJFeHByZXNzaW9uSTMy
KENvbnRleHQmIGNvbnRleHQsIFdBU01PcEV4cHJlc3Npb25JMzIgb3ApCi17Ci0gICAgQ29udGV4
dEV4cHJlc3Npb24gbGVmdCA9IHBhcnNlRXhwcmVzc2lvbkYzMihjb250ZXh0KTsKLSAgICBQUk9Q
QUdBVEVfRVJST1IoKTsKLSAgICBDb250ZXh0RXhwcmVzc2lvbiByaWdodCA9IHBhcnNlRXhwcmVz
c2lvbkYzMihjb250ZXh0KTsKLSAgICBQUk9QQUdBVEVfRVJST1IoKTsKLSAgICByZXR1cm4gY29u
dGV4dC5idWlsZFJlbGF0aW9uYWxGMzIobGVmdCwgcmlnaHQsIG9wKTsKLX0KLQotdGVtcGxhdGUg
PGNsYXNzIENvbnRleHQ+Ci1Db250ZXh0RXhwcmVzc2lvbiBXQVNNRnVuY3Rpb25QYXJzZXI6OnBh
cnNlUmVsYXRpb25hbEY2NEV4cHJlc3Npb25JMzIoQ29udGV4dCYgY29udGV4dCwgV0FTTU9wRXhw
cmVzc2lvbkkzMiBvcCkKLXsKLSAgICBDb250ZXh0RXhwcmVzc2lvbiBsZWZ0ID0gcGFyc2VFeHBy
ZXNzaW9uRjY0KGNvbnRleHQpOwotICAgIFBST1BBR0FURV9FUlJPUigpOwotICAgIENvbnRleHRF
eHByZXNzaW9uIHJpZ2h0ID0gcGFyc2VFeHByZXNzaW9uRjY0KGNvbnRleHQpOwotICAgIFBST1BB
R0FURV9FUlJPUigpOwotICAgIHJldHVybiBjb250ZXh0LmJ1aWxkUmVsYXRpb25hbEY2NChsZWZ0
LCByaWdodCwgb3ApOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4KLUNvbnRleHRFeHBy
ZXNzaW9uIFdBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VNaW5Pck1heEV4cHJlc3Npb25JMzIoQ29u
dGV4dCYgY29udGV4dCwgV0FTTU9wRXhwcmVzc2lvbkkzMiBvcCkKLXsKLSAgICB1aW50MzJfdCBu
dW1iZXJPZkFyZ3VtZW50czsKLSAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwobnVtYmVy
T2ZBcmd1bWVudHMsICJDYW5ub3QgcmVhZCB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBtaW4v
bWF4LiIpOwotICAgIEZBSUxfSUZfRkFMU0UobnVtYmVyT2ZBcmd1bWVudHMgPj0gMiwgIk1pbi9t
YXggbXVzdCBiZSBwYXNzZWQgYXQgbGVhc3QgMiBhcmd1bWVudHMuIik7Ci0gICAgQ29udGV4dEV4
cHJlc3Npb24gY3VycmVudCA9IHBhcnNlRXhwcmVzc2lvbkkzMihjb250ZXh0KTsKLSAgICBQUk9Q
QUdBVEVfRVJST1IoKTsKLSAgICBmb3IgKHVpbnQzMl90IGkgPSAxOyBpIDwgbnVtYmVyT2ZBcmd1
bWVudHM7ICsraSkgewotICAgICAgICBDb250ZXh0RXhwcmVzc2lvbiBleHByZXNzaW9uID0gcGFy
c2VFeHByZXNzaW9uSTMyKGNvbnRleHQpOwotICAgICAgICBQUk9QQUdBVEVfRVJST1IoKTsKLSAg
ICAgICAgY3VycmVudCA9IGNvbnRleHQuYnVpbGRNaW5Pck1heEkzMihjdXJyZW50LCBleHByZXNz
aW9uLCBvcCk7Ci0gICAgfQotICAgIHJldHVybiBjdXJyZW50OwotfQotCi10ZW1wbGF0ZSA8Y2xh
c3MgQ29udGV4dD4KLUNvbnRleHRFeHByZXNzaW9uIFdBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VF
eHByZXNzaW9uRjMyKENvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgYm9vbCBoYXNJbW1lZGlhdGU7
Ci0gICAgV0FTTU9wRXhwcmVzc2lvbkYzMiBvcDsKLSAgICBXQVNNT3BFeHByZXNzaW9uRjMyV2l0
aEltbWVkaWF0ZSBvcFdpdGhJbW1lZGlhdGU7Ci0gICAgdWludDhfdCBpbW1lZGlhdGU7Ci0gICAg
UkVBRF9PUF9FWFBSRVNTSU9OX0YzMl9PUl9GQUlMKGhhc0ltbWVkaWF0ZSwgb3AsIG9wV2l0aElt
bWVkaWF0ZSwgaW1tZWRpYXRlLCAiQ2Fubm90IHJlYWQgdGhlIGZsb2F0MzIgZXhwcmVzc2lvbiBv
cGNvZGUuIik7Ci0gICAgaWYgKCFoYXNJbW1lZGlhdGUpIHsKLSAgICAgICAgc3dpdGNoIChvcCkg
ewotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GMzI6OkNvbnN0YW50UG9vbEluZGV4Ogot
ICAgICAgICAgICAgcmV0dXJuIHBhcnNlQ29uc3RhbnRQb29sSW5kZXhFeHByZXNzaW9uRjMyKGNv
bnRleHQpOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GMzI6OkltbWVkaWF0ZToKLSAg
ICAgICAgICAgIHJldHVybiBwYXJzZUltbWVkaWF0ZUV4cHJlc3Npb25GMzIoY29udGV4dCk7Ci0g
ICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkYzMjo6R2V0TG9jYWw6Ci0gICAgICAgICAgICBy
ZXR1cm4gcGFyc2VHZXRMb2NhbEV4cHJlc3Npb24oY29udGV4dCwgV0FTTVR5cGU6OkYzMik7Ci0g
ICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkYzMjo6R2V0R2xvYmFsOgotICAgICAgICAgICAg
cmV0dXJuIHBhcnNlR2V0R2xvYmFsRXhwcmVzc2lvbihjb250ZXh0LCBXQVNNVHlwZTo6RjMyKTsK
LSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uRjMyOjpTZXRMb2NhbDoKLSAgICAgICAgICAg
IHJldHVybiBwYXJzZVNldExvY2FsKGNvbnRleHQsIFdBU01PcEtpbmQ6OkV4cHJlc3Npb24sIFdB
U01FeHByZXNzaW9uVHlwZTo6RjMyKTsKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uRjMy
OjpTZXRHbG9iYWw6Ci0gICAgICAgICAgICByZXR1cm4gcGFyc2VTZXRHbG9iYWwoY29udGV4dCwg
V0FTTU9wS2luZDo6RXhwcmVzc2lvbiwgV0FTTUV4cHJlc3Npb25UeXBlOjpGMzIpOwotICAgICAg
ICBjYXNlIFdBU01PcEV4cHJlc3Npb25GMzI6OkxvYWQ6Ci0gICAgICAgICAgICByZXR1cm4gcGFy
c2VMb2FkKGNvbnRleHQsIFdBU01FeHByZXNzaW9uVHlwZTo6RjMyLCBXQVNNTWVtb3J5VHlwZTo6
RjMyLCBNZW1vcnlBY2Nlc3NPZmZzZXRNb2RlOjpOb09mZnNldCk7Ci0gICAgICAgIGNhc2UgV0FT
TU9wRXhwcmVzc2lvbkYzMjo6TG9hZFdpdGhPZmZzZXQ6Ci0gICAgICAgICAgICByZXR1cm4gcGFy
c2VMb2FkKGNvbnRleHQsIFdBU01FeHByZXNzaW9uVHlwZTo6RjMyLCBXQVNNTWVtb3J5VHlwZTo6
RjMyLCBNZW1vcnlBY2Nlc3NPZmZzZXRNb2RlOjpXaXRoT2Zmc2V0KTsKLSAgICAgICAgY2FzZSBX
QVNNT3BFeHByZXNzaW9uRjMyOjpTdG9yZToKLSAgICAgICAgICAgIHJldHVybiBwYXJzZVN0b3Jl
KGNvbnRleHQsIFdBU01PcEtpbmQ6OkV4cHJlc3Npb24sIFdBU01FeHByZXNzaW9uVHlwZTo6RjMy
LCBXQVNNTWVtb3J5VHlwZTo6RjMyLCBNZW1vcnlBY2Nlc3NPZmZzZXRNb2RlOjpOb09mZnNldCk7
Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkYzMjo6U3RvcmVXaXRoT2Zmc2V0OgotICAg
ICAgICAgICAgcmV0dXJuIHBhcnNlU3RvcmUoY29udGV4dCwgV0FTTU9wS2luZDo6RXhwcmVzc2lv
biwgV0FTTUV4cHJlc3Npb25UeXBlOjpGMzIsIFdBU01NZW1vcnlUeXBlOjpGMzIsIE1lbW9yeUFj
Y2Vzc09mZnNldE1vZGU6OldpdGhPZmZzZXQpOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Np
b25GMzI6OkNhbGxJbnRlcm5hbDoKLSAgICAgICAgICAgIHJldHVybiBwYXJzZUNhbGxJbnRlcm5h
bChjb250ZXh0LCBXQVNNT3BLaW5kOjpFeHByZXNzaW9uLCBXQVNNRXhwcmVzc2lvblR5cGU6OkYz
Mik7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkYzMjo6Q2FsbEluZGlyZWN0OgotICAg
ICAgICAgICAgcmV0dXJuIHBhcnNlQ2FsbEluZGlyZWN0KGNvbnRleHQsIFdBU01PcEtpbmQ6OkV4
cHJlc3Npb24sIFdBU01FeHByZXNzaW9uVHlwZTo6RjMyKTsKLSAgICAgICAgY2FzZSBXQVNNT3BF
eHByZXNzaW9uRjMyOjpDb25kaXRpb25hbDoKLSAgICAgICAgICAgIHJldHVybiBwYXJzZUNvbmRp
dGlvbmFsKGNvbnRleHQsIFdBU01FeHByZXNzaW9uVHlwZTo6RjMyKTsKLSAgICAgICAgY2FzZSBX
QVNNT3BFeHByZXNzaW9uRjMyOjpDb21tYToKLSAgICAgICAgICAgIHJldHVybiBwYXJzZUNvbW1h
KGNvbnRleHQsIFdBU01FeHByZXNzaW9uVHlwZTo6RjMyKTsKLSAgICAgICAgY2FzZSBXQVNNT3BF
eHByZXNzaW9uRjMyOjpGcm9tUzMyOgotICAgICAgICAgICAgcmV0dXJuIHBhcnNlQ29udmVydFR5
cGUoY29udGV4dCwgV0FTTUV4cHJlc3Npb25UeXBlOjpJMzIsIFdBU01FeHByZXNzaW9uVHlwZTo6
RjMyLCBXQVNNVHlwZUNvbnZlcnNpb246OkNvbnZlcnRTaWduZWQpOwotICAgICAgICBjYXNlIFdB
U01PcEV4cHJlc3Npb25GMzI6OkZyb21VMzI6Ci0gICAgICAgICAgICByZXR1cm4gcGFyc2VDb252
ZXJ0VHlwZShjb250ZXh0LCBXQVNNRXhwcmVzc2lvblR5cGU6OkkzMiwgV0FTTUV4cHJlc3Npb25U
eXBlOjpGMzIsIFdBU01UeXBlQ29udmVyc2lvbjo6Q29udmVydFVuc2lnbmVkKTsKLSAgICAgICAg
Y2FzZSBXQVNNT3BFeHByZXNzaW9uRjMyOjpGcm9tRjY0OgotICAgICAgICAgICAgcmV0dXJuIHBh
cnNlQ29udmVydFR5cGUoY29udGV4dCwgV0FTTUV4cHJlc3Npb25UeXBlOjpGNjQsIFdBU01FeHBy
ZXNzaW9uVHlwZTo6RjMyLCBXQVNNVHlwZUNvbnZlcnNpb246OkRlbW90ZSk7Ci0gICAgICAgIGNh
c2UgV0FTTU9wRXhwcmVzc2lvbkYzMjo6TmVnYXRlOgotICAgICAgICBjYXNlIFdBU01PcEV4cHJl
c3Npb25GMzI6OkFiczoKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uRjMyOjpDZWlsOgot
ICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GMzI6OkZsb29yOgotICAgICAgICBjYXNlIFdB
U01PcEV4cHJlc3Npb25GMzI6OlNxcnQ6Ci0gICAgICAgICAgICByZXR1cm4gcGFyc2VVbmFyeUV4
cHJlc3Npb25GMzIoY29udGV4dCwgb3ApOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25G
MzI6OkFkZDoKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uRjMyOjpTdWI6Ci0gICAgICAg
IGNhc2UgV0FTTU9wRXhwcmVzc2lvbkYzMjo6TXVsOgotICAgICAgICBjYXNlIFdBU01PcEV4cHJl
c3Npb25GMzI6OkRpdjoKLSAgICAgICAgICAgIHJldHVybiBwYXJzZUJpbmFyeUV4cHJlc3Npb25G
MzIoY29udGV4dCwgb3ApOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBzd2l0Y2ggKG9w
V2l0aEltbWVkaWF0ZSkgewotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GMzJXaXRoSW1t
ZWRpYXRlOjpDb25zdGFudFBvb2xJbmRleDoKLSAgICAgICAgICAgIHJldHVybiBwYXJzZUNvbnN0
YW50UG9vbEluZGV4RXhwcmVzc2lvbkYzMihjb250ZXh0LCBpbW1lZGlhdGUpOwotICAgICAgICBj
YXNlIFdBU01PcEV4cHJlc3Npb25GMzJXaXRoSW1tZWRpYXRlOjpHZXRMb2NhbDoKLSAgICAgICAg
ICAgIHJldHVybiBwYXJzZUdldExvY2FsRXhwcmVzc2lvbihjb250ZXh0LCBXQVNNVHlwZTo6RjMy
LCBpbW1lZGlhdGUpOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXRlbXBsYXRl
IDxjbGFzcyBDb250ZXh0PgotQ29udGV4dEV4cHJlc3Npb24gV0FTTUZ1bmN0aW9uUGFyc2VyOjpw
YXJzZUNvbnN0YW50UG9vbEluZGV4RXhwcmVzc2lvbkYzMihDb250ZXh0JiBjb250ZXh0LCB1aW50
MzJfdCBjb25zdGFudEluZGV4KQotewotICAgIEZBSUxfSUZfRkFMU0UoY29uc3RhbnRJbmRleCA8
IG1fbW9kdWxlLT5mMzJDb25zdGFudHMoKS5zaXplKCksICJUaGUgY29uc3RhbnQgcG9vbCBpbmRl
eCBpcyBpbmNvcnJlY3QuIik7Ci0gICAgcmV0dXJuIGNvbnRleHQuYnVpbGRJbW1lZGlhdGVGMzIo
bV9tb2R1bGUtPmYzMkNvbnN0YW50cygpW2NvbnN0YW50SW5kZXhdKTsKLX0KLQotdGVtcGxhdGUg
PGNsYXNzIENvbnRleHQ+Ci1Db250ZXh0RXhwcmVzc2lvbiBXQVNNRnVuY3Rpb25QYXJzZXI6OnBh
cnNlQ29uc3RhbnRQb29sSW5kZXhFeHByZXNzaW9uRjMyKENvbnRleHQmIGNvbnRleHQpCi17Ci0g
ICAgdWludDMyX3QgY29uc3RhbnRJbmRleDsKLSAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZB
SUwoY29uc3RhbnRJbmRleCwgIkNhbm5vdCByZWFkIHRoZSBjb25zdGFudCBwb29sIGluZGV4LiIp
OwotICAgIHJldHVybiBwYXJzZUNvbnN0YW50UG9vbEluZGV4RXhwcmVzc2lvbkYzMihjb250ZXh0
LCBjb25zdGFudEluZGV4KTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+Ci1Db250ZXh0
RXhwcmVzc2lvbiBXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlSW1tZWRpYXRlRXhwcmVzc2lvbkYz
MihDb250ZXh0JiBjb250ZXh0KQotewotICAgIGZsb2F0IGltbWVkaWF0ZTsKLSAgICBSRUFEX0ZM
T0FUX09SX0ZBSUwoaW1tZWRpYXRlLCAiQ2Fubm90IHJlYWQgdGhlIGltbWVkaWF0ZS4iKTsKLSAg
ICByZXR1cm4gY29udGV4dC5idWlsZEltbWVkaWF0ZUYzMihpbW1lZGlhdGUpOwotfQotCi10ZW1w
bGF0ZSA8Y2xhc3MgQ29udGV4dD4KLUNvbnRleHRFeHByZXNzaW9uIFdBU01GdW5jdGlvblBhcnNl
cjo6cGFyc2VVbmFyeUV4cHJlc3Npb25GMzIoQ29udGV4dCYgY29udGV4dCwgV0FTTU9wRXhwcmVz
c2lvbkYzMiBvcCkKLXsKLSAgICBDb250ZXh0RXhwcmVzc2lvbiBleHByZXNzaW9uID0gcGFyc2VF
eHByZXNzaW9uRjMyKGNvbnRleHQpOwotICAgIFBST1BBR0FURV9FUlJPUigpOwotICAgIHJldHVy
biBjb250ZXh0LmJ1aWxkVW5hcnlGMzIoZXhwcmVzc2lvbiwgb3ApOwotfQotCi10ZW1wbGF0ZSA8
Y2xhc3MgQ29udGV4dD4KLUNvbnRleHRFeHByZXNzaW9uIFdBU01GdW5jdGlvblBhcnNlcjo6cGFy
c2VCaW5hcnlFeHByZXNzaW9uRjMyKENvbnRleHQmIGNvbnRleHQsIFdBU01PcEV4cHJlc3Npb25G
MzIgb3ApCi17Ci0gICAgQ29udGV4dEV4cHJlc3Npb24gbGVmdCA9IHBhcnNlRXhwcmVzc2lvbkYz
Mihjb250ZXh0KTsKLSAgICBQUk9QQUdBVEVfRVJST1IoKTsKLSAgICBDb250ZXh0RXhwcmVzc2lv
biByaWdodCA9IHBhcnNlRXhwcmVzc2lvbkYzMihjb250ZXh0KTsKLSAgICBQUk9QQUdBVEVfRVJS
T1IoKTsKLSAgICByZXR1cm4gY29udGV4dC5idWlsZEJpbmFyeUYzMihsZWZ0LCByaWdodCwgb3Ap
OwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4KLUNvbnRleHRFeHByZXNzaW9uIFdBU01G
dW5jdGlvblBhcnNlcjo6cGFyc2VFeHByZXNzaW9uRjY0KENvbnRleHQmIGNvbnRleHQpCi17Ci0g
ICAgYm9vbCBoYXNJbW1lZGlhdGU7Ci0gICAgV0FTTU9wRXhwcmVzc2lvbkY2NCBvcDsKLSAgICBX
QVNNT3BFeHByZXNzaW9uRjY0V2l0aEltbWVkaWF0ZSBvcFdpdGhJbW1lZGlhdGU7Ci0gICAgdWlu
dDhfdCBpbW1lZGlhdGU7Ci0gICAgUkVBRF9PUF9FWFBSRVNTSU9OX0Y2NF9PUl9GQUlMKGhhc0lt
bWVkaWF0ZSwgb3AsIG9wV2l0aEltbWVkaWF0ZSwgaW1tZWRpYXRlLCAiQ2Fubm90IHJlYWQgdGhl
IGZsb2F0NjQgZXhwcmVzc2lvbiBvcGNvZGUuIik7Ci0gICAgaWYgKCFoYXNJbW1lZGlhdGUpIHsK
LSAgICAgICAgc3dpdGNoIChvcCkgewotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6
OkNvbnN0YW50UG9vbEluZGV4OgotICAgICAgICAgICAgcmV0dXJuIHBhcnNlQ29uc3RhbnRQb29s
SW5kZXhFeHByZXNzaW9uRjY0KGNvbnRleHQpOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Np
b25GNjQ6OkltbWVkaWF0ZToKLSAgICAgICAgICAgIHJldHVybiBwYXJzZUltbWVkaWF0ZUV4cHJl
c3Npb25GNjQoY29udGV4dCk7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkY2NDo6R2V0
TG9jYWw6Ci0gICAgICAgICAgICByZXR1cm4gcGFyc2VHZXRMb2NhbEV4cHJlc3Npb24oY29udGV4
dCwgV0FTTVR5cGU6OkY2NCk7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkY2NDo6R2V0
R2xvYmFsOgotICAgICAgICAgICAgcmV0dXJuIHBhcnNlR2V0R2xvYmFsRXhwcmVzc2lvbihjb250
ZXh0LCBXQVNNVHlwZTo6RjY0KTsKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uRjY0OjpT
ZXRMb2NhbDoKLSAgICAgICAgICAgIHJldHVybiBwYXJzZVNldExvY2FsKGNvbnRleHQsIFdBU01P
cEtpbmQ6OkV4cHJlc3Npb24sIFdBU01FeHByZXNzaW9uVHlwZTo6RjY0KTsKLSAgICAgICAgY2Fz
ZSBXQVNNT3BFeHByZXNzaW9uRjY0OjpTZXRHbG9iYWw6Ci0gICAgICAgICAgICByZXR1cm4gcGFy
c2VTZXRHbG9iYWwoY29udGV4dCwgV0FTTU9wS2luZDo6RXhwcmVzc2lvbiwgV0FTTUV4cHJlc3Np
b25UeXBlOjpGNjQpOwotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6OkxvYWQ6Ci0g
ICAgICAgICAgICByZXR1cm4gcGFyc2VMb2FkKGNvbnRleHQsIFdBU01FeHByZXNzaW9uVHlwZTo6
RjY0LCBXQVNNTWVtb3J5VHlwZTo6RjY0LCBNZW1vcnlBY2Nlc3NPZmZzZXRNb2RlOjpOb09mZnNl
dCk7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkY2NDo6TG9hZFdpdGhPZmZzZXQ6Ci0g
ICAgICAgICAgICByZXR1cm4gcGFyc2VMb2FkKGNvbnRleHQsIFdBU01FeHByZXNzaW9uVHlwZTo6
RjY0LCBXQVNNTWVtb3J5VHlwZTo6RjY0LCBNZW1vcnlBY2Nlc3NPZmZzZXRNb2RlOjpXaXRoT2Zm
c2V0KTsKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uRjY0OjpTdG9yZToKLSAgICAgICAg
ICAgIHJldHVybiBwYXJzZVN0b3JlKGNvbnRleHQsIFdBU01PcEtpbmQ6OkV4cHJlc3Npb24sIFdB
U01FeHByZXNzaW9uVHlwZTo6RjY0LCBXQVNNTWVtb3J5VHlwZTo6RjY0LCBNZW1vcnlBY2Nlc3NP
ZmZzZXRNb2RlOjpOb09mZnNldCk7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkY2NDo6
U3RvcmVXaXRoT2Zmc2V0OgotICAgICAgICAgICAgcmV0dXJuIHBhcnNlU3RvcmUoY29udGV4dCwg
V0FTTU9wS2luZDo6RXhwcmVzc2lvbiwgV0FTTUV4cHJlc3Npb25UeXBlOjpGNjQsIFdBU01NZW1v
cnlUeXBlOjpGNjQsIE1lbW9yeUFjY2Vzc09mZnNldE1vZGU6OldpdGhPZmZzZXQpOwotICAgICAg
ICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6OkNhbGxJbnRlcm5hbDoKLSAgICAgICAgICAgIHJl
dHVybiBwYXJzZUNhbGxJbnRlcm5hbChjb250ZXh0LCBXQVNNT3BLaW5kOjpFeHByZXNzaW9uLCBX
QVNNRXhwcmVzc2lvblR5cGU6OkY2NCk7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkY2
NDo6Q2FsbEltcG9ydDoKLSAgICAgICAgICAgIHJldHVybiBwYXJzZUNhbGxJbXBvcnQoY29udGV4
dCwgV0FTTU9wS2luZDo6RXhwcmVzc2lvbiwgV0FTTUV4cHJlc3Npb25UeXBlOjpGNjQpOwotICAg
ICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6OkNhbGxJbmRpcmVjdDoKLSAgICAgICAgICAg
IHJldHVybiBwYXJzZUNhbGxJbmRpcmVjdChjb250ZXh0LCBXQVNNT3BLaW5kOjpFeHByZXNzaW9u
LCBXQVNNRXhwcmVzc2lvblR5cGU6OkY2NCk7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lv
bkY2NDo6Q29uZGl0aW9uYWw6Ci0gICAgICAgICAgICByZXR1cm4gcGFyc2VDb25kaXRpb25hbChj
b250ZXh0LCBXQVNNRXhwcmVzc2lvblR5cGU6OkY2NCk7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhw
cmVzc2lvbkY2NDo6Q29tbWE6Ci0gICAgICAgICAgICByZXR1cm4gcGFyc2VDb21tYShjb250ZXh0
LCBXQVNNRXhwcmVzc2lvblR5cGU6OkY2NCk7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lv
bkY2NDo6RnJvbVMzMjoKLSAgICAgICAgICAgIHJldHVybiBwYXJzZUNvbnZlcnRUeXBlKGNvbnRl
eHQsIFdBU01FeHByZXNzaW9uVHlwZTo6STMyLCBXQVNNRXhwcmVzc2lvblR5cGU6OkY2NCwgV0FT
TVR5cGVDb252ZXJzaW9uOjpDb252ZXJ0U2lnbmVkKTsKLSAgICAgICAgY2FzZSBXQVNNT3BFeHBy
ZXNzaW9uRjY0OjpGcm9tVTMyOgotICAgICAgICAgICAgcmV0dXJuIHBhcnNlQ29udmVydFR5cGUo
Y29udGV4dCwgV0FTTUV4cHJlc3Npb25UeXBlOjpJMzIsIFdBU01FeHByZXNzaW9uVHlwZTo6RjY0
LCBXQVNNVHlwZUNvbnZlcnNpb246OkNvbnZlcnRVbnNpZ25lZCk7Ci0gICAgICAgIGNhc2UgV0FT
TU9wRXhwcmVzc2lvbkY2NDo6RnJvbUYzMjoKLSAgICAgICAgICAgIHJldHVybiBwYXJzZUNvbnZl
cnRUeXBlKGNvbnRleHQsIFdBU01FeHByZXNzaW9uVHlwZTo6RjMyLCBXQVNNRXhwcmVzc2lvblR5
cGU6OkY2NCwgV0FTTVR5cGVDb252ZXJzaW9uOjpQcm9tb3RlKTsKLSAgICAgICAgY2FzZSBXQVNN
T3BFeHByZXNzaW9uRjY0OjpOZWdhdGU6Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkY2
NDo6QWJzOgotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6OkNlaWw6Ci0gICAgICAg
IGNhc2UgV0FTTU9wRXhwcmVzc2lvbkY2NDo6Rmxvb3I6Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhw
cmVzc2lvbkY2NDo6U3FydDoKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uRjY0OjpDb3M6
Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkY2NDo6U2luOgotICAgICAgICBjYXNlIFdB
U01PcEV4cHJlc3Npb25GNjQ6OlRhbjoKLSAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uRjY0
OjpBQ29zOgotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6OkFTaW46Ci0gICAgICAg
IGNhc2UgV0FTTU9wRXhwcmVzc2lvbkY2NDo6QVRhbjoKLSAgICAgICAgY2FzZSBXQVNNT3BFeHBy
ZXNzaW9uRjY0OjpFeHA6Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkY2NDo6TG46Ci0g
ICAgICAgICAgICByZXR1cm4gcGFyc2VVbmFyeUV4cHJlc3Npb25GNjQoY29udGV4dCwgb3ApOwot
ICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6OkFkZDoKLSAgICAgICAgY2FzZSBXQVNN
T3BFeHByZXNzaW9uRjY0OjpTdWI6Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkY2NDo6
TXVsOgotICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6OkRpdjoKLSAgICAgICAgY2Fz
ZSBXQVNNT3BFeHByZXNzaW9uRjY0OjpNb2Q6Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lv
bkY2NDo6QVRhbjI6Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkY2NDo6UG93OgotICAg
ICAgICAgICAgcmV0dXJuIHBhcnNlQmluYXJ5RXhwcmVzc2lvbkY2NChjb250ZXh0LCBvcCk7Ci0g
ICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkY2NDo6TWluOgotICAgICAgICBjYXNlIFdBU01P
cEV4cHJlc3Npb25GNjQ6Ok1heDoKLSAgICAgICAgICAgIHJldHVybiBwYXJzZU1pbk9yTWF4RXhw
cmVzc2lvbkY2NChjb250ZXh0LCBvcCk7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN3
aXRjaCAob3BXaXRoSW1tZWRpYXRlKSB7Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkY2
NFdpdGhJbW1lZGlhdGU6OkNvbnN0YW50UG9vbEluZGV4OgotICAgICAgICAgICAgcmV0dXJuIHBh
cnNlQ29uc3RhbnRQb29sSW5kZXhFeHByZXNzaW9uRjY0KGNvbnRleHQsIGltbWVkaWF0ZSk7Ci0g
ICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkY2NFdpdGhJbW1lZGlhdGU6OkdldExvY2FsOgot
ICAgICAgICAgICAgcmV0dXJuIHBhcnNlR2V0TG9jYWxFeHByZXNzaW9uKGNvbnRleHQsIFdBU01U
eXBlOjpGNjQsIGltbWVkaWF0ZSk7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQot
dGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+Ci1Db250ZXh0RXhwcmVzc2lvbiBXQVNNRnVuY3Rpb25Q
YXJzZXI6OnBhcnNlQ29uc3RhbnRQb29sSW5kZXhFeHByZXNzaW9uRjY0KENvbnRleHQmIGNvbnRl
eHQsIHVpbnQzMl90IGNvbnN0YW50SW5kZXgpCi17Ci0gICAgRkFJTF9JRl9GQUxTRShjb25zdGFu
dEluZGV4IDwgbV9tb2R1bGUtPmY2NENvbnN0YW50cygpLnNpemUoKSwgIlRoZSBjb25zdGFudCBp
bmRleCBpcyBpbmNvcnJlY3QuIik7Ci0gICAgcmV0dXJuIGNvbnRleHQuYnVpbGRJbW1lZGlhdGVG
NjQobV9tb2R1bGUtPmY2NENvbnN0YW50cygpW2NvbnN0YW50SW5kZXhdKTsKLX0KLQotdGVtcGxh
dGUgPGNsYXNzIENvbnRleHQ+Ci1Db250ZXh0RXhwcmVzc2lvbiBXQVNNRnVuY3Rpb25QYXJzZXI6
OnBhcnNlQ29uc3RhbnRQb29sSW5kZXhFeHByZXNzaW9uRjY0KENvbnRleHQmIGNvbnRleHQpCi17
Ci0gICAgdWludDMyX3QgY29uc3RhbnRJbmRleDsKLSAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09S
X0ZBSUwoY29uc3RhbnRJbmRleCwgIkNhbm5vdCByZWFkIHRoZSBjb25zdGFudCBpbmRleC4iKTsK
LSAgICByZXR1cm4gcGFyc2VDb25zdGFudFBvb2xJbmRleEV4cHJlc3Npb25GNjQoY29udGV4dCwg
Y29uc3RhbnRJbmRleCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PgotQ29udGV4dEV4
cHJlc3Npb24gV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUltbWVkaWF0ZUV4cHJlc3Npb25GNjQo
Q29udGV4dCYgY29udGV4dCkKLXsKLSAgICBkb3VibGUgaW1tZWRpYXRlOwotICAgIFJFQURfRE9V
QkxFX09SX0ZBSUwoaW1tZWRpYXRlLCAiQ2Fubm90IHJlYWQgdGhlIGltbWVkaWF0ZS4iKTsKLSAg
ICByZXR1cm4gY29udGV4dC5idWlsZEltbWVkaWF0ZUY2NChpbW1lZGlhdGUpOwotfQotCi10ZW1w
bGF0ZSA8Y2xhc3MgQ29udGV4dD4KLUNvbnRleHRFeHByZXNzaW9uIFdBU01GdW5jdGlvblBhcnNl
cjo6cGFyc2VVbmFyeUV4cHJlc3Npb25GNjQoQ29udGV4dCYgY29udGV4dCwgV0FTTU9wRXhwcmVz
c2lvbkY2NCBvcCkKLXsKLSAgICBDb250ZXh0RXhwcmVzc2lvbiBleHByZXNzaW9uID0gcGFyc2VF
eHByZXNzaW9uRjY0KGNvbnRleHQpOwotICAgIFBST1BBR0FURV9FUlJPUigpOwotICAgIHJldHVy
biBjb250ZXh0LmJ1aWxkVW5hcnlGNjQoZXhwcmVzc2lvbiwgb3ApOwotfQotCi10ZW1wbGF0ZSA8
Y2xhc3MgQ29udGV4dD4KLUNvbnRleHRFeHByZXNzaW9uIFdBU01GdW5jdGlvblBhcnNlcjo6cGFy
c2VCaW5hcnlFeHByZXNzaW9uRjY0KENvbnRleHQmIGNvbnRleHQsIFdBU01PcEV4cHJlc3Npb25G
NjQgb3ApCi17Ci0gICAgQ29udGV4dEV4cHJlc3Npb24gbGVmdCA9IHBhcnNlRXhwcmVzc2lvbkY2
NChjb250ZXh0KTsKLSAgICBQUk9QQUdBVEVfRVJST1IoKTsKLSAgICBDb250ZXh0RXhwcmVzc2lv
biByaWdodCA9IHBhcnNlRXhwcmVzc2lvbkY2NChjb250ZXh0KTsKLSAgICBQUk9QQUdBVEVfRVJS
T1IoKTsKLSAgICByZXR1cm4gY29udGV4dC5idWlsZEJpbmFyeUY2NChsZWZ0LCByaWdodCwgb3Ap
OwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4KLUNvbnRleHRFeHByZXNzaW9uIFdBU01G
dW5jdGlvblBhcnNlcjo6cGFyc2VNaW5Pck1heEV4cHJlc3Npb25GNjQoQ29udGV4dCYgY29udGV4
dCwgV0FTTU9wRXhwcmVzc2lvbkY2NCBvcCkKLXsKLSAgICB1aW50MzJfdCBudW1iZXJPZkFyZ3Vt
ZW50czsKLSAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwobnVtYmVyT2ZBcmd1bWVudHMs
ICJDYW5ub3QgcmVhZCB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBtaW4vbWF4LiIpOwotICAg
IEZBSUxfSUZfRkFMU0UobnVtYmVyT2ZBcmd1bWVudHMgPj0gMiwgIk1pbi9tYXggbXVzdCBiZSBw
YXNzZWQgYXQgbGVhc3QgMiBhcmd1bWVudHMuIik7Ci0gICAgQ29udGV4dEV4cHJlc3Npb24gY3Vy
cmVudCA9IHBhcnNlRXhwcmVzc2lvbkY2NChjb250ZXh0KTsKLSAgICBQUk9QQUdBVEVfRVJST1Io
KTsKLSAgICBmb3IgKHVpbnQzMl90IGkgPSAxOyBpIDwgbnVtYmVyT2ZBcmd1bWVudHM7ICsraSkg
ewotICAgICAgICBDb250ZXh0RXhwcmVzc2lvbiBleHByZXNzaW9uID0gcGFyc2VFeHByZXNzaW9u
RjY0KGNvbnRleHQpOwotICAgICAgICBQUk9QQUdBVEVfRVJST1IoKTsKLSAgICAgICAgY3VycmVu
dCA9IGNvbnRleHQuYnVpbGRNaW5Pck1heEY2NChjdXJyZW50LCBleHByZXNzaW9uLCBvcCk7Ci0g
ICAgfQotICAgIHJldHVybiBjdXJyZW50OwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4K
LUNvbnRleHRFeHByZXNzaW9uIFdBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VFeHByZXNzaW9uVm9p
ZChDb250ZXh0JiBjb250ZXh0KQotewotICAgIFdBU01PcEV4cHJlc3Npb25Wb2lkIG9wOwotICAg
IFJFQURfT1BfRVhQUkVTU0lPTl9WT0lEX09SX0ZBSUwob3AsICJDYW5ub3QgcmVhZCB0aGUgdm9p
ZCBleHByZXNzaW9uIG9wY29kZS4iKTsKLSAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgY2FzZSBXQVNN
T3BFeHByZXNzaW9uVm9pZDo6Q2FsbEludGVybmFsOgotICAgICAgICByZXR1cm4gcGFyc2VDYWxs
SW50ZXJuYWwoY29udGV4dCwgV0FTTU9wS2luZDo6RXhwcmVzc2lvbiwgV0FTTUV4cHJlc3Npb25U
eXBlOjpWb2lkKTsKLSAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25Wb2lkOjpDYWxsSW5kaXJlY3Q6
Ci0gICAgICAgIHJldHVybiBwYXJzZUNhbGxJbmRpcmVjdChjb250ZXh0LCBXQVNNT3BLaW5kOjpF
eHByZXNzaW9uLCBXQVNNRXhwcmVzc2lvblR5cGU6OlZvaWQpOwotICAgIGNhc2UgV0FTTU9wRXhw
cmVzc2lvblZvaWQ6OkNhbGxJbXBvcnQ6Ci0gICAgICAgIHJldHVybiBwYXJzZUNhbGxJbXBvcnQo
Y29udGV4dCwgV0FTTU9wS2luZDo6RXhwcmVzc2lvbiwgV0FTTUV4cHJlc3Npb25UeXBlOjpWb2lk
KTsKLSAgICBkZWZhdWx0OgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgIH0KLX0KLQotdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+Ci1Db250ZXh0RXhwcmVzc2lvbiBX
QVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlR2V0TG9jYWxFeHByZXNzaW9uKENvbnRleHQmIGNvbnRl
eHQsIFdBU01UeXBlIHR5cGUsIHVpbnQzMl90IGxvY2FsSW5kZXgpCi17Ci0gICAgRkFJTF9JRl9G
QUxTRShsb2NhbEluZGV4IDwgbV9sb2NhbFR5cGVzLnNpemUoKSwgIlRoZSBsb2NhbCBpbmRleCBp
cyBpbmNvcnJlY3QuIik7Ci0gICAgRkFJTF9JRl9GQUxTRShtX2xvY2FsVHlwZXNbbG9jYWxJbmRl
eF0gPT0gdHlwZSwgIkV4cGVjdGVkIGEgbG9jYWwgb2YgdHlwZSAiICsgbmFtZU9mVHlwZSh0eXBl
KSArICcuJyk7Ci0gICAgcmV0dXJuIGNvbnRleHQuYnVpbGRHZXRMb2NhbChsb2NhbEluZGV4LCB0
eXBlKTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+Ci1Db250ZXh0RXhwcmVzc2lvbiBX
QVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlR2V0TG9jYWxFeHByZXNzaW9uKENvbnRleHQmIGNvbnRl
eHQsIFdBU01UeXBlIHR5cGUpCi17Ci0gICAgdWludDMyX3QgbG9jYWxJbmRleDsKLSAgICBSRUFE
X0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwobG9jYWxJbmRleCwgIkNhbm5vdCByZWFkIHRoZSBsb2Nh
bCBpbmRleC4iKTsKLSAgICByZXR1cm4gcGFyc2VHZXRMb2NhbEV4cHJlc3Npb24oY29udGV4dCwg
dHlwZSwgbG9jYWxJbmRleCk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PgotQ29udGV4
dEV4cHJlc3Npb24gV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUdldEdsb2JhbEV4cHJlc3Npb24o
Q29udGV4dCYgY29udGV4dCwgV0FTTVR5cGUgdHlwZSkKLXsKLSAgICB1aW50MzJfdCBnbG9iYWxJ
bmRleDsKLSAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwoZ2xvYmFsSW5kZXgsICJDYW5u
b3QgcmVhZCB0aGUgZ2xvYmFsIGluZGV4LiIpOwotICAgIEZBSUxfSUZfRkFMU0UoZ2xvYmFsSW5k
ZXggPCBtX21vZHVsZS0+Z2xvYmFsVmFyaWFibGVUeXBlcygpLnNpemUoKSwgIlRoZSBnbG9iYWwg
aW5kZXggaXMgaW5jb3JyZWN0LiIpOwotICAgIEZBSUxfSUZfRkFMU0UobV9tb2R1bGUtPmdsb2Jh
bFZhcmlhYmxlVHlwZXMoKVtnbG9iYWxJbmRleF0gPT0gdHlwZSwgIkV4cGVjdGVkIGEgZ2xvYmFs
IG9mIHR5cGUgIiArIG5hbWVPZlR5cGUodHlwZSkgKyAnLicpOwotICAgIHJldHVybiBjb250ZXh0
LmJ1aWxkR2V0R2xvYmFsKGdsb2JhbEluZGV4LCB0eXBlKTsKLX0KLQotdGVtcGxhdGUgPGNsYXNz
IENvbnRleHQ+Ci1Db250ZXh0RXhwcmVzc2lvbiBXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlU2V0
TG9jYWwoQ29udGV4dCYgY29udGV4dCwgV0FTTU9wS2luZCBvcEtpbmQsIFdBU01FeHByZXNzaW9u
VHlwZSBleHByZXNzaW9uVHlwZSwgdWludDMyX3QgbG9jYWxJbmRleCkKLXsKLSAgICBGQUlMX0lG
X0ZBTFNFKGxvY2FsSW5kZXggPCBtX2xvY2FsVHlwZXMuc2l6ZSgpLCAiVGhlIGxvY2FsIHZhcmlh
YmxlIGluZGV4IGlzIGluY29ycmVjdC4iKTsKLSAgICBXQVNNVHlwZSB0eXBlID0gbV9sb2NhbFR5
cGVzW2xvY2FsSW5kZXhdOwotICAgIGlmIChvcEtpbmQgPT0gV0FTTU9wS2luZDo6RXhwcmVzc2lv
bikKLSAgICAgICAgRkFJTF9JRl9GQUxTRShleHByZXNzaW9uVHlwZSA9PSBXQVNNRXhwcmVzc2lv
blR5cGUodHlwZSksICJUaGUgdHlwZSBkb2Vzbid0IG1hdGNoLiIpOwotICAgIENvbnRleHRFeHBy
ZXNzaW9uIGV4cHJlc3Npb24gPSBwYXJzZUV4cHJlc3Npb24oY29udGV4dCwgV0FTTUV4cHJlc3Np
b25UeXBlKHR5cGUpKTsKLSAgICBQUk9QQUdBVEVfRVJST1IoKTsKLSAgICByZXR1cm4gY29udGV4
dC5idWlsZFNldExvY2FsKG9wS2luZCwgbG9jYWxJbmRleCwgZXhwcmVzc2lvbiwgdHlwZSk7Ci19
Ci0KLXRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PgotQ29udGV4dEV4cHJlc3Npb24gV0FTTUZ1bmN0
aW9uUGFyc2VyOjpwYXJzZVNldExvY2FsKENvbnRleHQmIGNvbnRleHQsIFdBU01PcEtpbmQgb3BL
aW5kLCBXQVNNRXhwcmVzc2lvblR5cGUgZXhwcmVzc2lvblR5cGUpCi17Ci0gICAgdWludDMyX3Qg
bG9jYWxJbmRleDsKLSAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwobG9jYWxJbmRleCwg
IkNhbm5vdCByZWFkIHRoZSBsb2NhbCBpbmRleC4iKTsKLSAgICByZXR1cm4gcGFyc2VTZXRMb2Nh
bChjb250ZXh0LCBvcEtpbmQsIGV4cHJlc3Npb25UeXBlLCBsb2NhbEluZGV4KTsKLX0KLQotdGVt
cGxhdGUgPGNsYXNzIENvbnRleHQ+Ci1Db250ZXh0RXhwcmVzc2lvbiBXQVNNRnVuY3Rpb25QYXJz
ZXI6OnBhcnNlU2V0R2xvYmFsKENvbnRleHQmIGNvbnRleHQsIFdBU01PcEtpbmQgb3BLaW5kLCBX
QVNNRXhwcmVzc2lvblR5cGUgZXhwcmVzc2lvblR5cGUsIHVpbnQzMl90IGdsb2JhbEluZGV4KQot
ewotICAgIEZBSUxfSUZfRkFMU0UoZ2xvYmFsSW5kZXggPCBtX21vZHVsZS0+Z2xvYmFsVmFyaWFi
bGVUeXBlcygpLnNpemUoKSwgIlRoZSBnbG9iYWwgaW5kZXggaXMgaW5jb3JyZWN0LiIpOwotICAg
IFdBU01UeXBlIHR5cGUgPSBtX21vZHVsZS0+Z2xvYmFsVmFyaWFibGVUeXBlcygpW2dsb2JhbElu
ZGV4XTsKLSAgICBpZiAob3BLaW5kID09IFdBU01PcEtpbmQ6OkV4cHJlc3Npb24pCi0gICAgICAg
IEZBSUxfSUZfRkFMU0UoZXhwcmVzc2lvblR5cGUgPT0gV0FTTUV4cHJlc3Npb25UeXBlKHR5cGUp
LCAiVGhlIHR5cGUgZG9lc24ndCBtYXRjaC4iKTsKLSAgICBDb250ZXh0RXhwcmVzc2lvbiBleHBy
ZXNzaW9uID0gcGFyc2VFeHByZXNzaW9uKGNvbnRleHQsIFdBU01FeHByZXNzaW9uVHlwZSh0eXBl
KSk7Ci0gICAgUFJPUEFHQVRFX0VSUk9SKCk7Ci0gICAgcmV0dXJuIGNvbnRleHQuYnVpbGRTZXRH
bG9iYWwob3BLaW5kLCBnbG9iYWxJbmRleCwgZXhwcmVzc2lvbiwgdHlwZSk7Ci19Ci0KLXRlbXBs
YXRlIDxjbGFzcyBDb250ZXh0PgotQ29udGV4dEV4cHJlc3Npb24gV0FTTUZ1bmN0aW9uUGFyc2Vy
OjpwYXJzZVNldEdsb2JhbChDb250ZXh0JiBjb250ZXh0LCBXQVNNT3BLaW5kIG9wS2luZCwgV0FT
TUV4cHJlc3Npb25UeXBlIGV4cHJlc3Npb25UeXBlKQotewotICAgIHVpbnQzMl90IGdsb2JhbElu
ZGV4OwotICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChnbG9iYWxJbmRleCwgIkNhbm5v
dCByZWFkIHRoZSBnbG9iYWwgaW5kZXguIik7Ci0gICAgcmV0dXJuIHBhcnNlU2V0R2xvYmFsKGNv
bnRleHQsIG9wS2luZCwgZXhwcmVzc2lvblR5cGUsIGdsb2JhbEluZGV4KTsKLX0KLQotdGVtcGxh
dGUgPGNsYXNzIENvbnRleHQ+Ci1Db250ZXh0TWVtb3J5QWRkcmVzcyBXQVNNRnVuY3Rpb25QYXJz
ZXI6OnBhcnNlTWVtb3J5QWRkcmVzcyhDb250ZXh0JiBjb250ZXh0LCBNZW1vcnlBY2Nlc3NPZmZz
ZXRNb2RlIG9mZnNldE1vZGUpCi17Ci0gICAgdWludDMyX3Qgb2Zmc2V0ID0gMDsKLSAgICBpZiAo
b2Zmc2V0TW9kZSA9PSBNZW1vcnlBY2Nlc3NPZmZzZXRNb2RlOjpXaXRoT2Zmc2V0KQotICAgICAg
ICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwob2Zmc2V0LCAiQ2Fubm90IHJlYWQgdGhlIGFk
ZHJlc3Mgb2Zmc2V0LiIpOwotICAgIENvbnRleHRFeHByZXNzaW9uIGluZGV4ID0gcGFyc2VFeHBy
ZXNzaW9uSTMyKGNvbnRleHQpOwotICAgIFBST1BBR0FURV9FUlJPUigpOwotICAgIHJldHVybiBD
b250ZXh0TWVtb3J5QWRkcmVzcyhpbmRleCwgb2Zmc2V0KTsKLX0KLQotdGVtcGxhdGUgPGNsYXNz
IENvbnRleHQ+Ci1Db250ZXh0RXhwcmVzc2lvbiBXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlTG9h
ZChDb250ZXh0JiBjb250ZXh0LCBXQVNNRXhwcmVzc2lvblR5cGUgZXhwcmVzc2lvblR5cGUsIFdB
U01NZW1vcnlUeXBlIG1lbW9yeVR5cGUsIE1lbW9yeUFjY2Vzc09mZnNldE1vZGUgb2Zmc2V0TW9k
ZSwgTWVtb3J5QWNjZXNzQ29udmVyc2lvbiBjb252ZXJzaW9uKQotewotICAgIEZBSUxfSUZfRkFM
U0UobV9tb2R1bGUtPmFycmF5QnVmZmVyKCksICJBbiBBcnJheUJ1ZmZlciBpcyBub3QgcHJvdmlk
ZWQuIik7Ci0gICAgY29uc3QgQ29udGV4dE1lbW9yeUFkZHJlc3MmIG1lbW9yeUFkZHJlc3MgPSBw
YXJzZU1lbW9yeUFkZHJlc3MoY29udGV4dCwgb2Zmc2V0TW9kZSk7Ci0gICAgUFJPUEFHQVRFX0VS
Uk9SKCk7Ci0gICAgcmV0dXJuIGNvbnRleHQuYnVpbGRMb2FkKG1lbW9yeUFkZHJlc3MsIGV4cHJl
c3Npb25UeXBlLCBtZW1vcnlUeXBlLCBjb252ZXJzaW9uKTsKLX0KLQotdGVtcGxhdGUgPGNsYXNz
IENvbnRleHQ+Ci1Db250ZXh0RXhwcmVzc2lvbiBXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlU3Rv
cmUoQ29udGV4dCYgY29udGV4dCwgV0FTTU9wS2luZCBvcEtpbmQsIFdBU01FeHByZXNzaW9uVHlw
ZSBleHByZXNzaW9uVHlwZSwgV0FTTU1lbW9yeVR5cGUgbWVtb3J5VHlwZSwgTWVtb3J5QWNjZXNz
T2Zmc2V0TW9kZSBvZmZzZXRNb2RlKQotewotICAgIEZBSUxfSUZfRkFMU0UobV9tb2R1bGUtPmFy
cmF5QnVmZmVyKCksICJBbiBBcnJheUJ1ZmZlciBpcyBub3QgcHJvdmlkZWQuIik7Ci0gICAgY29u
c3QgQ29udGV4dE1lbW9yeUFkZHJlc3MmIG1lbW9yeUFkZHJlc3MgPSBwYXJzZU1lbW9yeUFkZHJl
c3MoY29udGV4dCwgb2Zmc2V0TW9kZSk7Ci0gICAgUFJPUEFHQVRFX0VSUk9SKCk7Ci0KLSAgICBD
b250ZXh0RXhwcmVzc2lvbiB2YWx1ZSA9IHBhcnNlRXhwcmVzc2lvbihjb250ZXh0LCBleHByZXNz
aW9uVHlwZSk7Ci0gICAgUFJPUEFHQVRFX0VSUk9SKCk7Ci0gICAgcmV0dXJuIGNvbnRleHQuYnVp
bGRTdG9yZShvcEtpbmQsIG1lbW9yeUFkZHJlc3MsIGV4cHJlc3Npb25UeXBlLCBtZW1vcnlUeXBl
LCB2YWx1ZSk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PgotQ29udGV4dEV4cHJlc3Np
b25MaXN0IFdBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VDYWxsQXJndW1lbnRzKENvbnRleHQmIGNv
bnRleHQsIGNvbnN0IFZlY3RvcjxXQVNNVHlwZT4mIGFyZ3VtZW50cykKLXsKLSAgICBDb250ZXh0
RXhwcmVzc2lvbkxpc3QgYXJndW1lbnRMaXN0OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
YXJndW1lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIENvbnRleHRFeHByZXNzaW9uIGV4cHJl
c3Npb24gPSBwYXJzZUV4cHJlc3Npb24oY29udGV4dCwgV0FTTUV4cHJlc3Npb25UeXBlKGFyZ3Vt
ZW50c1tpXSkpOwotICAgICAgICBQUk9QQUdBVEVfRVJST1IoKTsKLSAgICAgICAgY29udGV4dC5h
cHBlbmRFeHByZXNzaW9uTGlzdChhcmd1bWVudExpc3QsIGV4cHJlc3Npb24pOwotICAgIH0KLSAg
ICByZXR1cm4gYXJndW1lbnRMaXN0OwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4KLUNv
bnRleHRFeHByZXNzaW9uIFdBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VDYWxsSW50ZXJuYWwoQ29u
dGV4dCYgY29udGV4dCwgV0FTTU9wS2luZCBvcEtpbmQsIFdBU01FeHByZXNzaW9uVHlwZSByZXR1
cm5UeXBlKQotewotICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXg7Ci0gICAgUkVBRF9DT01QQUNU
X1VJTlQzMl9PUl9GQUlMKGZ1bmN0aW9uSW5kZXgsICJDYW5ub3QgcmVhZCB0aGUgZnVuY3Rpb24g
aW5kZXguIik7Ci0gICAgRkFJTF9JRl9GQUxTRShmdW5jdGlvbkluZGV4IDwgbV9tb2R1bGUtPmZ1
bmN0aW9uRGVjbGFyYXRpb25zKCkuc2l6ZSgpLCAiVGhlIGZ1bmN0aW9uIGluZGV4IGlzIGluY29y
cmVjdC4iKTsKLSAgICBjb25zdCBXQVNNU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBtX21vZHVsZS0+
c2lnbmF0dXJlcygpW21fbW9kdWxlLT5mdW5jdGlvbkRlY2xhcmF0aW9ucygpW2Z1bmN0aW9uSW5k
ZXhdLnNpZ25hdHVyZUluZGV4XTsKLSAgICBpZiAob3BLaW5kID09IFdBU01PcEtpbmQ6OkV4cHJl
c3Npb24pCi0gICAgICAgIEZBSUxfSUZfRkFMU0Uoc2lnbmF0dXJlLnJldHVyblR5cGUgPT0gcmV0
dXJuVHlwZSwgIldyb25nIHJldHVybiB0eXBlLiIpOwotCi0gICAgQ29udGV4dEV4cHJlc3Npb25M
aXN0IGFyZ3VtZW50TGlzdCA9IHBhcnNlQ2FsbEFyZ3VtZW50cyhjb250ZXh0LCBzaWduYXR1cmUu
YXJndW1lbnRzKTsKLSAgICBQUk9QQUdBVEVfRVJST1IoKTsKLSAgICByZXR1cm4gY29udGV4dC5i
dWlsZENhbGxJbnRlcm5hbChmdW5jdGlvbkluZGV4LCBhcmd1bWVudExpc3QsIHNpZ25hdHVyZSwg
cmV0dXJuVHlwZSk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PgotQ29udGV4dEV4cHJl
c3Npb24gV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUNhbGxJbmRpcmVjdChDb250ZXh0JiBjb250
ZXh0LCBXQVNNT3BLaW5kIG9wS2luZCwgV0FTTUV4cHJlc3Npb25UeXBlIHJldHVyblR5cGUpCi17
Ci0gICAgdWludDMyX3QgZnVuY3Rpb25Qb2ludGVyVGFibGVJbmRleDsKLSAgICBSRUFEX0NPTVBB
Q1RfVUlOVDMyX09SX0ZBSUwoZnVuY3Rpb25Qb2ludGVyVGFibGVJbmRleCwgIkNhbm5vdCByZWFk
IHRoZSBmdW5jdGlvbiBwb2ludGVyIHRhYmxlIGluZGV4LiIpOwotICAgIEZBSUxfSUZfRkFMU0Uo
ZnVuY3Rpb25Qb2ludGVyVGFibGVJbmRleCA8IG1fbW9kdWxlLT5mdW5jdGlvblBvaW50ZXJUYWJs
ZXMoKS5zaXplKCksICJUaGUgZnVuY3Rpb24gcG9pbnRlciB0YWJsZSBpbmRleCBpcyBpbmNvcnJl
Y3QuIik7Ci0gICAgY29uc3QgV0FTTUZ1bmN0aW9uUG9pbnRlclRhYmxlJiBmdW5jdGlvblBvaW50
ZXJUYWJsZSA9IG1fbW9kdWxlLT5mdW5jdGlvblBvaW50ZXJUYWJsZXMoKVtmdW5jdGlvblBvaW50
ZXJUYWJsZUluZGV4XTsKLSAgICBjb25zdCBXQVNNU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBtX21v
ZHVsZS0+c2lnbmF0dXJlcygpW2Z1bmN0aW9uUG9pbnRlclRhYmxlLnNpZ25hdHVyZUluZGV4XTsK
LSAgICBpZiAob3BLaW5kID09IFdBU01PcEtpbmQ6OkV4cHJlc3Npb24pCi0gICAgICAgIEZBSUxf
SUZfRkFMU0Uoc2lnbmF0dXJlLnJldHVyblR5cGUgPT0gcmV0dXJuVHlwZSwgIldyb25nIHJldHVy
biB0eXBlLiIpOwotCi0gICAgQ29udGV4dEV4cHJlc3Npb24gaW5kZXggPSBwYXJzZUV4cHJlc3Np
b25JMzIoY29udGV4dCk7Ci0gICAgUFJPUEFHQVRFX0VSUk9SKCk7Ci0KLSAgICBDb250ZXh0RXhw
cmVzc2lvbkxpc3QgYXJndW1lbnRMaXN0ID0gcGFyc2VDYWxsQXJndW1lbnRzKGNvbnRleHQsIHNp
Z25hdHVyZS5hcmd1bWVudHMpOwotICAgIFBST1BBR0FURV9FUlJPUigpOwotICAgIHJldHVybiBj
b250ZXh0LmJ1aWxkQ2FsbEluZGlyZWN0KGZ1bmN0aW9uUG9pbnRlclRhYmxlSW5kZXgsIGluZGV4
LCBhcmd1bWVudExpc3QsIHNpZ25hdHVyZSwgcmV0dXJuVHlwZSk7Ci19Ci0KLXRlbXBsYXRlIDxj
bGFzcyBDb250ZXh0PgotQ29udGV4dEV4cHJlc3Npb24gV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJz
ZUNhbGxJbXBvcnQoQ29udGV4dCYgY29udGV4dCwgV0FTTU9wS2luZCBvcEtpbmQsIFdBU01FeHBy
ZXNzaW9uVHlwZSByZXR1cm5UeXBlKQotewotICAgIHVpbnQzMl90IGZ1bmN0aW9uSW1wb3J0U2ln
bmF0dXJlSW5kZXg7Ci0gICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKGZ1bmN0aW9uSW1w
b3J0U2lnbmF0dXJlSW5kZXgsICJDYW5ub3QgcmVhZCB0aGUgZnVuY3Rpb24gaW1wb3J0IHNpZ25h
dHVyZSBpbmRleC4iKTsKLSAgICBGQUlMX0lGX0ZBTFNFKGZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJl
SW5kZXggPCBtX21vZHVsZS0+ZnVuY3Rpb25JbXBvcnRTaWduYXR1cmVzKCkuc2l6ZSgpLCAiVGhl
IGZ1bmN0aW9uIGltcG9ydCBzaWduYXR1cmUgaW5kZXggaXMgaW5jb3JyZWN0LiIpOwotICAgIGNv
bnN0IFdBU01GdW5jdGlvbkltcG9ydFNpZ25hdHVyZSYgZnVuY3Rpb25JbXBvcnRTaWduYXR1cmUg
PSBtX21vZHVsZS0+ZnVuY3Rpb25JbXBvcnRTaWduYXR1cmVzKClbZnVuY3Rpb25JbXBvcnRTaWdu
YXR1cmVJbmRleF07Ci0gICAgY29uc3QgV0FTTVNpZ25hdHVyZSYgc2lnbmF0dXJlID0gbV9tb2R1
bGUtPnNpZ25hdHVyZXMoKVtmdW5jdGlvbkltcG9ydFNpZ25hdHVyZS5zaWduYXR1cmVJbmRleF07
Ci0gICAgaWYgKG9wS2luZCA9PSBXQVNNT3BLaW5kOjpFeHByZXNzaW9uKQotICAgICAgICBGQUlM
X0lGX0ZBTFNFKHNpZ25hdHVyZS5yZXR1cm5UeXBlID09IHJldHVyblR5cGUsICJXcm9uZyByZXR1
cm4gdHlwZS4iKTsKLQotICAgIENvbnRleHRFeHByZXNzaW9uTGlzdCBhcmd1bWVudExpc3QgPSBw
YXJzZUNhbGxBcmd1bWVudHMoY29udGV4dCwgc2lnbmF0dXJlLmFyZ3VtZW50cyk7Ci0gICAgUFJP
UEFHQVRFX0VSUk9SKCk7Ci0gICAgcmV0dXJuIGNvbnRleHQuYnVpbGRDYWxsSW1wb3J0KGZ1bmN0
aW9uSW1wb3J0U2lnbmF0dXJlLmZ1bmN0aW9uSW1wb3J0SW5kZXgsIGFyZ3VtZW50TGlzdCwgc2ln
bmF0dXJlLCByZXR1cm5UeXBlKTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+Ci1Db250
ZXh0RXhwcmVzc2lvbiBXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlQ29uZGl0aW9uYWwoQ29udGV4
dCYgY29udGV4dCwgV0FTTUV4cHJlc3Npb25UeXBlIGV4cHJlc3Npb25UeXBlKQotewotICAgIENv
bnRleHRKdW1wVGFyZ2V0IGVsc2VUYXJnZXQ7Ci0gICAgQ29udGV4dEp1bXBUYXJnZXQgZW5kOwot
Ci0gICAgQ29udGV4dEV4cHJlc3Npb24gY29uZGl0aW9uID0gcGFyc2VFeHByZXNzaW9uSTMyKGNv
bnRleHQpOwotICAgIFBST1BBR0FURV9FUlJPUigpOwotCi0gICAgY29udGV4dC5qdW1wVG9UYXJn
ZXRJZihDb250ZXh0OjpKdW1wQ29uZGl0aW9uOjpaZXJvLCBjb25kaXRpb24sIGVsc2VUYXJnZXQp
OwotCi0gICAgcGFyc2VFeHByZXNzaW9uKGNvbnRleHQsIGV4cHJlc3Npb25UeXBlKTsKLSAgICBQ
Uk9QQUdBVEVfRVJST1IoKTsKLSAgICAKLSAgICBjb250ZXh0Lmp1bXBUb1RhcmdldChlbmQpOwot
ICAgIGNvbnRleHQubGlua1RhcmdldChlbHNlVGFyZ2V0KTsKLQotICAgIC8vIFdlIHVzZSBkaXNj
YXJkKCkgaGVyZSB0byBkZWNyZW1lbnQgdGhlIHN0YWNrIHRvcCBpbiB0aGUgYmFzZWxpbmUgSklU
LgotICAgIGNvbnRleHQuZGlzY2FyZChVTlVTRUQpOwotICAgIHBhcnNlRXhwcmVzc2lvbihjb250
ZXh0LCBleHByZXNzaW9uVHlwZSk7Ci0gICAgUFJPUEFHQVRFX0VSUk9SKCk7Ci0gICAgCi0gICAg
Y29udGV4dC5saW5rVGFyZ2V0KGVuZCk7Ci0gICAgcmV0dXJuIFVOVVNFRDsKLX0KLQotdGVtcGxh
dGUgPGNsYXNzIENvbnRleHQ+Ci1Db250ZXh0RXhwcmVzc2lvbiBXQVNNRnVuY3Rpb25QYXJzZXI6
OnBhcnNlQ29tbWEoQ29udGV4dCYgY29udGV4dCwgV0FTTUV4cHJlc3Npb25UeXBlIGV4cHJlc3Np
b25UeXBlKQotewotICAgIFdBU01FeHByZXNzaW9uVHlwZSBsZWZ0RXhwcmVzc2lvblR5cGU7Ci0g
ICAgUkVBRF9FWFBSRVNTSU9OX1RZUEVfT1JfRkFJTChsZWZ0RXhwcmVzc2lvblR5cGUsICJDYW5u
b3QgcmVhZCB0aGUgZXhwcmVzc2lvbiB0eXBlLiIpOwotICAgIENvbnRleHRFeHByZXNzaW9uIGxl
ZnRFeHByZXNzaW9uID0gcGFyc2VFeHByZXNzaW9uKGNvbnRleHQsIGxlZnRFeHByZXNzaW9uVHlw
ZSk7Ci0gICAgUFJPUEFHQVRFX0VSUk9SKCk7Ci0gICAgaWYgKGxlZnRFeHByZXNzaW9uVHlwZSAh
PSBXQVNNRXhwcmVzc2lvblR5cGU6OlZvaWQpCi0gICAgICAgIGNvbnRleHQuZGlzY2FyZChsZWZ0
RXhwcmVzc2lvbik7Ci0gICAgcmV0dXJuIHBhcnNlRXhwcmVzc2lvbihjb250ZXh0LCBleHByZXNz
aW9uVHlwZSk7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PgotQ29udGV4dEV4cHJlc3Np
b24gV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUNvbnZlcnRUeXBlKENvbnRleHQmIGNvbnRleHQs
IFdBU01FeHByZXNzaW9uVHlwZSBmcm9tVHlwZSwgV0FTTUV4cHJlc3Npb25UeXBlIHRvVHlwZSwg
V0FTTVR5cGVDb252ZXJzaW9uIGNvbnZlcnNpb24pCi17Ci0gICAgQ29udGV4dEV4cHJlc3Npb24g
ZXhwcmVzc2lvbiA9IHBhcnNlRXhwcmVzc2lvbihjb250ZXh0LCBmcm9tVHlwZSk7Ci0gICAgUFJP
UEFHQVRFX0VSUk9SKCk7Ci0KLSAgICByZXR1cm4gY29udGV4dC5idWlsZENvbnZlcnRUeXBlKGV4
cHJlc3Npb24sIGZyb21UeXBlLCB0b1R5cGUsIGNvbnZlcnNpb24pOwotfQotCi19IC8vIG5hbWVz
cGFjZSBKU0MKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01GdW5jdGlvblBhcnNlci5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV0FTTUZ1bmN0aW9uUGFyc2VyLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDdmMDllM2U4NWUzMTdhZTJiMGM2ZjgxYWY1MDliNDRhM2I3ZGYwOTIuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV0FTTUZ1bmN0aW9uUGFyc2VyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwx
NDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpZm5kZWYgV0FTTUZ1bmN0aW9uUGFyc2VyX2gKLSNkZWZpbmUgV0FTTUZ1bmN0aW9uUGFyc2Vy
X2gKLQotI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLQotI2luY2x1ZGUgIlNvdXJjZUNvZGUuaCIK
LSNpbmNsdWRlICJXQVNNUmVhZGVyLmgiCi0KLSNkZWZpbmUgQ29udGV4dEV4cHJlc3Npb24gdHlw
ZW5hbWUgQ29udGV4dDo6RXhwcmVzc2lvbgotI2RlZmluZSBDb250ZXh0U3RhdGVtZW50IHR5cGVu
YW1lIENvbnRleHQ6OlN0YXRlbWVudAotI2RlZmluZSBDb250ZXh0RXhwcmVzc2lvbkxpc3QgdHlw
ZW5hbWUgQ29udGV4dDo6RXhwcmVzc2lvbkxpc3QKLSNkZWZpbmUgQ29udGV4dE1lbW9yeUFkZHJl
c3MgdHlwZW5hbWUgQ29udGV4dDo6TWVtb3J5QWRkcmVzcwotI2RlZmluZSBDb250ZXh0SnVtcFRh
cmdldCB0eXBlbmFtZSBDb250ZXh0OjpKdW1wVGFyZ2V0Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1j
bGFzcyBDb2RlQmxvY2s7Ci1jbGFzcyBKU1dBU01Nb2R1bGU7Ci1jbGFzcyBWTTsKLQotY2xhc3Mg
V0FTTUZ1bmN0aW9uUGFyc2VyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgYm9vbCBjaGVja1N5bnRh
eChKU1dBU01Nb2R1bGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgc2l6ZV90IGZ1bmN0aW9uSW5kZXgs
IHVuc2lnbmVkIHN0YXJ0T2Zmc2V0SW5Tb3VyY2UsIHVuc2lnbmVkJiBlbmRPZmZzZXRJblNvdXJj
ZSwgdW5zaWduZWQmIHN0YWNrSGVpZ2h0LCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7Ci0gICAgc3Rh
dGljIHZvaWQgY29tcGlsZShWTSYsIENvZGVCbG9jayosIEpTV0FTTU1vZHVsZSosIGNvbnN0IFNv
dXJjZUNvZGUmLCBzaXplX3QgZnVuY3Rpb25JbmRleCk7Ci0KLXByaXZhdGU6Ci0gICAgV0FTTUZ1
bmN0aW9uUGFyc2VyKEpTV0FTTU1vZHVsZSogbW9kdWxlLCBjb25zdCBTb3VyY2VDb2RlJiBzb3Vy
Y2UsIHNpemVfdCBmdW5jdGlvbkluZGV4KQotICAgICAgICA6IG1fbW9kdWxlKG1vZHVsZSkKLSAg
ICAgICAgLCBtX3JlYWRlcihzdGF0aWNfY2FzdDxXZWJBc3NlbWJseVNvdXJjZVByb3ZpZGVyKj4o
c291cmNlLnByb3ZpZGVyKCkpLT5kYXRhKCkpCi0gICAgICAgICwgbV9mdW5jdGlvbkluZGV4KGZ1
bmN0aW9uSW5kZXgpCi0gICAgICAgICwgbV9icmVha1Njb3BlRGVwdGgoMCkKLSAgICAgICAgLCBt
X2NvbnRpbnVlU2NvcGVEZXB0aCgwKQotICAgICAgICAsIG1fbGFiZWxEZXB0aCgwKQotICAgIHsK
LSAgICB9Ci0KLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gYm9vbCBwYXJzZUZ1bmN0aW9u
KENvbnRleHQmKTsKLSAgICBib29sIHBhcnNlTG9jYWxWYXJpYWJsZXMoKTsKLQotICAgIHRlbXBs
YXRlIDxjbGFzcyBDb250ZXh0PiBDb250ZXh0U3RhdGVtZW50IHBhcnNlU3RhdGVtZW50KENvbnRl
eHQmKTsKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dFN0YXRlbWVudCBwYXJz
ZVJldHVyblN0YXRlbWVudChDb250ZXh0Jik7Ci0gICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+
IENvbnRleHRTdGF0ZW1lbnQgcGFyc2VCbG9ja1N0YXRlbWVudChDb250ZXh0Jik7Ci0gICAgdGVt
cGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRTdGF0ZW1lbnQgcGFyc2VJZlN0YXRlbWVudChD
b250ZXh0Jik7Ci0gICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRTdGF0ZW1lbnQg
cGFyc2VJZkVsc2VTdGF0ZW1lbnQoQ29udGV4dCYpOwotICAgIHRlbXBsYXRlIDxjbGFzcyBDb250
ZXh0PiBDb250ZXh0U3RhdGVtZW50IHBhcnNlV2hpbGVTdGF0ZW1lbnQoQ29udGV4dCYpOwotICAg
IHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PiBDb250ZXh0U3RhdGVtZW50IHBhcnNlRG9TdGF0ZW1l
bnQoQ29udGV4dCYpOwotICAgIHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PiBDb250ZXh0U3RhdGVt
ZW50IHBhcnNlTGFiZWxTdGF0ZW1lbnQoQ29udGV4dCYpOwotICAgIHRlbXBsYXRlIDxjbGFzcyBD
b250ZXh0PiBDb250ZXh0U3RhdGVtZW50IHBhcnNlQnJlYWtTdGF0ZW1lbnQoQ29udGV4dCYpOwot
ICAgIHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PiBDb250ZXh0U3RhdGVtZW50IHBhcnNlQnJlYWtM
YWJlbFN0YXRlbWVudChDb250ZXh0Jik7Ci0gICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENv
bnRleHRTdGF0ZW1lbnQgcGFyc2VDb250aW51ZVN0YXRlbWVudChDb250ZXh0Jik7Ci0gICAgdGVt
cGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRTdGF0ZW1lbnQgcGFyc2VDb250aW51ZUxhYmVs
U3RhdGVtZW50KENvbnRleHQmKTsKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4
dFN0YXRlbWVudCBwYXJzZVN3aXRjaFN0YXRlbWVudChDb250ZXh0Jik7Ci0KLSAgICB0ZW1wbGF0
ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dEV4cHJlc3Npb24gcGFyc2VFeHByZXNzaW9uKENvbnRl
eHQmLCBXQVNNRXhwcmVzc2lvblR5cGUpOwotCi0gICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+
IENvbnRleHRFeHByZXNzaW9uIHBhcnNlRXhwcmVzc2lvbkkzMihDb250ZXh0Jik7Ci0gICAgdGVt
cGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRFeHByZXNzaW9uIHBhcnNlQ29uc3RhbnRQb29s
SW5kZXhFeHByZXNzaW9uSTMyKENvbnRleHQmLCB1aW50MzJfdCBjb25zdGFudFBvb2xJbmRleCk7
Ci0gICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRFeHByZXNzaW9uIHBhcnNlQ29u
c3RhbnRQb29sSW5kZXhFeHByZXNzaW9uSTMyKENvbnRleHQmKTsKLSAgICB0ZW1wbGF0ZSA8Y2xh
c3MgQ29udGV4dD4gQ29udGV4dEV4cHJlc3Npb24gcGFyc2VJbW1lZGlhdGVFeHByZXNzaW9uSTMy
KENvbnRleHQmLCB1aW50MzJfdCBpbW1lZGlhdGUpOwotICAgIHRlbXBsYXRlIDxjbGFzcyBDb250
ZXh0PiBDb250ZXh0RXhwcmVzc2lvbiBwYXJzZUltbWVkaWF0ZUV4cHJlc3Npb25JMzIoQ29udGV4
dCYpOwotICAgIHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PiBDb250ZXh0RXhwcmVzc2lvbiBwYXJz
ZVVuYXJ5RXhwcmVzc2lvbkkzMihDb250ZXh0JiwgV0FTTU9wRXhwcmVzc2lvbkkzMik7Ci0gICAg
dGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRFeHByZXNzaW9uIHBhcnNlQmluYXJ5RXhw
cmVzc2lvbkkzMihDb250ZXh0JiwgV0FTTU9wRXhwcmVzc2lvbkkzMik7Ci0gICAgdGVtcGxhdGUg
PGNsYXNzIENvbnRleHQ+IENvbnRleHRFeHByZXNzaW9uIHBhcnNlUmVsYXRpb25hbEkzMkV4cHJl
c3Npb25JMzIoQ29udGV4dCYsIFdBU01PcEV4cHJlc3Npb25JMzIpOwotICAgIHRlbXBsYXRlIDxj
bGFzcyBDb250ZXh0PiBDb250ZXh0RXhwcmVzc2lvbiBwYXJzZVJlbGF0aW9uYWxGMzJFeHByZXNz
aW9uSTMyKENvbnRleHQmLCBXQVNNT3BFeHByZXNzaW9uSTMyKTsKLSAgICB0ZW1wbGF0ZSA8Y2xh
c3MgQ29udGV4dD4gQ29udGV4dEV4cHJlc3Npb24gcGFyc2VSZWxhdGlvbmFsRjY0RXhwcmVzc2lv
bkkzMihDb250ZXh0JiwgV0FTTU9wRXhwcmVzc2lvbkkzMik7Ci0gICAgdGVtcGxhdGUgPGNsYXNz
IENvbnRleHQ+IENvbnRleHRFeHByZXNzaW9uIHBhcnNlTWluT3JNYXhFeHByZXNzaW9uSTMyKENv
bnRleHQmLCBXQVNNT3BFeHByZXNzaW9uSTMyKTsKLQotICAgIHRlbXBsYXRlIDxjbGFzcyBDb250
ZXh0PiBDb250ZXh0RXhwcmVzc2lvbiBwYXJzZUV4cHJlc3Npb25GMzIoQ29udGV4dCYpOwotICAg
IHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PiBDb250ZXh0RXhwcmVzc2lvbiBwYXJzZUNvbnN0YW50
UG9vbEluZGV4RXhwcmVzc2lvbkYzMihDb250ZXh0JiwgdWludDMyX3QgY29uc3RhbnRJbmRleCk7
Ci0gICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRFeHByZXNzaW9uIHBhcnNlQ29u
c3RhbnRQb29sSW5kZXhFeHByZXNzaW9uRjMyKENvbnRleHQmKTsKLSAgICB0ZW1wbGF0ZSA8Y2xh
c3MgQ29udGV4dD4gQ29udGV4dEV4cHJlc3Npb24gcGFyc2VJbW1lZGlhdGVFeHByZXNzaW9uRjMy
KENvbnRleHQmKTsKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dEV4cHJlc3Np
b24gcGFyc2VVbmFyeUV4cHJlc3Npb25GMzIoQ29udGV4dCYsIFdBU01PcEV4cHJlc3Npb25GMzIp
OwotICAgIHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PiBDb250ZXh0RXhwcmVzc2lvbiBwYXJzZUJp
bmFyeUV4cHJlc3Npb25GMzIoQ29udGV4dCYsIFdBU01PcEV4cHJlc3Npb25GMzIpOwotCi0gICAg
dGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRFeHByZXNzaW9uIHBhcnNlRXhwcmVzc2lv
bkY2NChDb250ZXh0Jik7Ci0gICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRFeHBy
ZXNzaW9uIHBhcnNlQ29uc3RhbnRQb29sSW5kZXhFeHByZXNzaW9uRjY0KENvbnRleHQmLCB1aW50
MzJfdCBjb25zdGFudEluZGV4KTsKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4
dEV4cHJlc3Npb24gcGFyc2VDb25zdGFudFBvb2xJbmRleEV4cHJlc3Npb25GNjQoQ29udGV4dCYp
OwotICAgIHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PiBDb250ZXh0RXhwcmVzc2lvbiBwYXJzZUlt
bWVkaWF0ZUV4cHJlc3Npb25GNjQoQ29udGV4dCYpOwotICAgIHRlbXBsYXRlIDxjbGFzcyBDb250
ZXh0PiBDb250ZXh0RXhwcmVzc2lvbiBwYXJzZVVuYXJ5RXhwcmVzc2lvbkY2NChDb250ZXh0Jiwg
V0FTTU9wRXhwcmVzc2lvbkY2NCk7Ci0gICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRl
eHRFeHByZXNzaW9uIHBhcnNlQmluYXJ5RXhwcmVzc2lvbkY2NChDb250ZXh0JiwgV0FTTU9wRXhw
cmVzc2lvbkY2NCk7Ci0gICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRFeHByZXNz
aW9uIHBhcnNlTWluT3JNYXhFeHByZXNzaW9uRjY0KENvbnRleHQmLCBXQVNNT3BFeHByZXNzaW9u
RjY0KTsKLQotICAgIHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PiBDb250ZXh0RXhwcmVzc2lvbiBw
YXJzZUV4cHJlc3Npb25Wb2lkKENvbnRleHQmKTsKLQotICAgIHRlbXBsYXRlIDxjbGFzcyBDb250
ZXh0PiBDb250ZXh0RXhwcmVzc2lvbiBwYXJzZUdldExvY2FsRXhwcmVzc2lvbihDb250ZXh0Jiwg
V0FTTVR5cGUsIHVpbnQzMl90IGxvY2FsSW5kZXgpOwotICAgIHRlbXBsYXRlIDxjbGFzcyBDb250
ZXh0PiBDb250ZXh0RXhwcmVzc2lvbiBwYXJzZUdldExvY2FsRXhwcmVzc2lvbihDb250ZXh0Jiwg
V0FTTVR5cGUpOwotICAgIHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PiBDb250ZXh0RXhwcmVzc2lv
biBwYXJzZUdldEdsb2JhbEV4cHJlc3Npb24oQ29udGV4dCYsIFdBU01UeXBlKTsKLSAgICB0ZW1w
bGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dEV4cHJlc3Npb24gcGFyc2VTZXRMb2NhbChDb250
ZXh0JiwgV0FTTU9wS2luZCwgV0FTTUV4cHJlc3Npb25UeXBlLCB1aW50MzJfdCBsb2NhbEluZGV4
KTsKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dEV4cHJlc3Npb24gcGFyc2VT
ZXRMb2NhbChDb250ZXh0JiwgV0FTTU9wS2luZCwgV0FTTUV4cHJlc3Npb25UeXBlKTsKLSAgICB0
ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dEV4cHJlc3Npb24gcGFyc2VTZXRHbG9iYWwo
Q29udGV4dCYsIFdBU01PcEtpbmQsIFdBU01FeHByZXNzaW9uVHlwZSwgdWludDMyX3QgZ2xvYmFs
SW5kZXgpOwotICAgIHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PiBDb250ZXh0RXhwcmVzc2lvbiBw
YXJzZVNldEdsb2JhbChDb250ZXh0JiwgV0FTTU9wS2luZCwgV0FTTUV4cHJlc3Npb25UeXBlKTsK
LSAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dE1lbW9yeUFkZHJlc3MgcGFyc2VN
ZW1vcnlBZGRyZXNzKENvbnRleHQmLCBNZW1vcnlBY2Nlc3NPZmZzZXRNb2RlKTsKLSAgICB0ZW1w
bGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dEV4cHJlc3Npb24gcGFyc2VMb2FkKENvbnRleHQm
LCBXQVNNRXhwcmVzc2lvblR5cGUsIFdBU01NZW1vcnlUeXBlLCBNZW1vcnlBY2Nlc3NPZmZzZXRN
b2RlLCBNZW1vcnlBY2Nlc3NDb252ZXJzaW9uID0gTWVtb3J5QWNjZXNzQ29udmVyc2lvbjo6Tm9D
b252ZXJzaW9uKTsKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dEV4cHJlc3Np
b24gcGFyc2VTdG9yZShDb250ZXh0JiwgV0FTTU9wS2luZCwgV0FTTUV4cHJlc3Npb25UeXBlLCBX
QVNNTWVtb3J5VHlwZSwgTWVtb3J5QWNjZXNzT2Zmc2V0TW9kZSk7Ci0gICAgdGVtcGxhdGUgPGNs
YXNzIENvbnRleHQ+IENvbnRleHRFeHByZXNzaW9uTGlzdCBwYXJzZUNhbGxBcmd1bWVudHMoQ29u
dGV4dCYsIGNvbnN0IFZlY3RvcjxXQVNNVHlwZT4mIGFyZ3VtZW50cyk7Ci0gICAgdGVtcGxhdGUg
PGNsYXNzIENvbnRleHQ+IENvbnRleHRFeHByZXNzaW9uIHBhcnNlQ2FsbEludGVybmFsKENvbnRl
eHQmLCBXQVNNT3BLaW5kLCBXQVNNRXhwcmVzc2lvblR5cGUgcmV0dXJuVHlwZSk7Ci0gICAgdGVt
cGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRFeHByZXNzaW9uIHBhcnNlQ2FsbEluZGlyZWN0
KENvbnRleHQmLCBXQVNNT3BLaW5kLCBXQVNNRXhwcmVzc2lvblR5cGUgcmV0dXJuVHlwZSk7Ci0g
ICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRFeHByZXNzaW9uIHBhcnNlQ2FsbElt
cG9ydChDb250ZXh0JiwgV0FTTU9wS2luZCwgV0FTTUV4cHJlc3Npb25UeXBlIHJldHVyblR5cGUp
OwotICAgIHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PiBDb250ZXh0RXhwcmVzc2lvbiBwYXJzZUNv
bmRpdGlvbmFsKENvbnRleHQmLCBXQVNNRXhwcmVzc2lvblR5cGUpOwotICAgIHRlbXBsYXRlIDxj
bGFzcyBDb250ZXh0PiBDb250ZXh0RXhwcmVzc2lvbiBwYXJzZUNvbW1hKENvbnRleHQmLCBXQVNN
RXhwcmVzc2lvblR5cGUpOwotICAgIHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PiBDb250ZXh0RXhw
cmVzc2lvbiBwYXJzZUNvbnZlcnRUeXBlKENvbnRleHQmLCBXQVNNRXhwcmVzc2lvblR5cGUgZnJv
bVR5cGUsIFdBU01FeHByZXNzaW9uVHlwZSB0b1R5cGUsIFdBU01UeXBlQ29udmVyc2lvbik7Ci0K
LSAgICBKU1dBU01Nb2R1bGUqIG1fbW9kdWxlOwotICAgIFdBU01SZWFkZXIgbV9yZWFkZXI7Ci0g
ICAgc2l6ZV90IG1fZnVuY3Rpb25JbmRleDsKLSAgICBTdHJpbmcgbV9lcnJvck1lc3NhZ2U7Ci0K
LSAgICBXQVNNRXhwcmVzc2lvblR5cGUgbV9yZXR1cm5UeXBlOwotICAgIFZlY3RvcjxXQVNNVHlw
ZT4gbV9sb2NhbFR5cGVzOwotICAgIHVpbnQzMl90IG1fbnVtYmVyT2ZJMzJMb2NhbFZhcmlhYmxl
czsKLSAgICB1aW50MzJfdCBtX251bWJlck9mRjMyTG9jYWxWYXJpYWJsZXM7Ci0gICAgdWludDMy
X3QgbV9udW1iZXJPZkY2NExvY2FsVmFyaWFibGVzOwotCi0gICAgdW5zaWduZWQgbV9icmVha1Nj
b3BlRGVwdGg7Ci0gICAgdW5zaWduZWQgbV9jb250aW51ZVNjb3BlRGVwdGg7Ci0gICAgdW5zaWdu
ZWQgbV9sYWJlbERlcHRoOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBF
TkFCTEUoV0VCQVNTRU1CTFkpCi0KLSNlbmRpZiAvLyBXQVNNRnVuY3Rpb25QYXJzZXJfaApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZ1bmN0aW9uU3ludGF4Q2hl
Y2tlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZ1bmN0aW9uU3ludGF4Q2hl
Y2tlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjcyZGE4N2U3NWQ4YjUxODgz
MjIwOGZjNDRkYzIzZDlhOGRlMDBhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01GdW5jdGlvblN5bnRh
eENoZWNrZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDI4NyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXQVNNRnVuY3Rpb25TeW50
YXhDaGVja2VyX2gKLSNkZWZpbmUgV0FTTUZ1bmN0aW9uU3ludGF4Q2hlY2tlcl9oCi0KLSNpZiBF
TkFCTEUoV0VCQVNTRU1CTFkpCi0KLSNkZWZpbmUgVU5VU0VEIDAKLQotbmFtZXNwYWNlIEpTQyB7
Ci0KLWNsYXNzIFdBU01GdW5jdGlvblN5bnRheENoZWNrZXIgewotcHVibGljOgotICAgIHR5cGVk
ZWYgaW50IEV4cHJlc3Npb247Ci0gICAgdHlwZWRlZiBpbnQgU3RhdGVtZW50OwotICAgIHR5cGVk
ZWYgaW50IEV4cHJlc3Npb25MaXN0OwotICAgIHN0cnVjdCBNZW1vcnlBZGRyZXNzIHsKLSAgICAg
ICAgTWVtb3J5QWRkcmVzcyh2b2lkKikgeyB9Ci0gICAgICAgIE1lbW9yeUFkZHJlc3MoaW50LCB1
aW50MzJfdCkgeyB9Ci0gICAgfTsKLSAgICB0eXBlZGVmIGludCBKdW1wVGFyZ2V0OwotICAgIGVu
dW0gY2xhc3MgSnVtcENvbmRpdGlvbiB7IFplcm8sIE5vblplcm8gfTsKLQotICAgIHZvaWQgc3Rh
cnRGdW5jdGlvbihjb25zdCBWZWN0b3I8V0FTTVR5cGU+JiBhcmd1bWVudHMsIHVpbnQzMl90IG51
bWJlck9mSTMyTG9jYWxWYXJpYWJsZXMsIHVpbnQzMl90IG51bWJlck9mRjMyTG9jYWxWYXJpYWJs
ZXMsIHVpbnQzMl90IG51bWJlck9mRjY0TG9jYWxWYXJpYWJsZXMpCi0gICAgewotICAgICAgICBt
X251bWJlck9mTG9jYWxzID0gYXJndW1lbnRzLnNpemUoKSArIG51bWJlck9mSTMyTG9jYWxWYXJp
YWJsZXMgKyBudW1iZXJPZkYzMkxvY2FsVmFyaWFibGVzICsgbnVtYmVyT2ZGNjRMb2NhbFZhcmlh
YmxlczsKLSAgICB9Ci0KLSAgICB2b2lkIGVuZEZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIEFT
U0VSVCghbV90ZW1wU3RhY2tUb3ApOwotICAgIH0KLQotICAgIGludCBidWlsZFNldExvY2FsKFdB
U01PcEtpbmQgb3BLaW5kLCB1aW50MzJfdCwgaW50LCBXQVNNVHlwZSkKLSAgICB7Ci0gICAgICAg
IGlmIChvcEtpbmQgPT0gV0FTTU9wS2luZDo6U3RhdGVtZW50KQotICAgICAgICAgICAgbV90ZW1w
U3RhY2tUb3AtLTsKLSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9Ci0KLSAgICBpbnQgYnVp
bGRTZXRHbG9iYWwoV0FTTU9wS2luZCBvcEtpbmQsIHVpbnQzMl90LCBpbnQsIFdBU01UeXBlKQot
ICAgIHsKLSAgICAgICAgaWYgKG9wS2luZCA9PSBXQVNNT3BLaW5kOjpTdGF0ZW1lbnQpCi0gICAg
ICAgICAgICBtX3RlbXBTdGFja1RvcC0tOwotICAgICAgICByZXR1cm4gVU5VU0VEOwotICAgIH0K
LQotICAgIHZvaWQgYnVpbGRSZXR1cm4oaW50LCBXQVNNRXhwcmVzc2lvblR5cGUgcmV0dXJuVHlw
ZSkKLSAgICB7Ci0gICAgICAgIGlmIChyZXR1cm5UeXBlICE9IFdBU01FeHByZXNzaW9uVHlwZTo6
Vm9pZCkKLSAgICAgICAgICAgIG1fdGVtcFN0YWNrVG9wLS07Ci0gICAgfQotCi0gICAgaW50IGJ1
aWxkSW1tZWRpYXRlSTMyKHVpbnQzMl90KQotICAgIHsKLSAgICAgICAgbV90ZW1wU3RhY2tUb3Ar
KzsKLSAgICAgICAgdXBkYXRlVGVtcFN0YWNrSGVpZ2h0KCk7Ci0gICAgICAgIHJldHVybiBVTlVT
RUQ7Ci0gICAgfQotCi0gICAgaW50IGJ1aWxkSW1tZWRpYXRlRjMyKGZsb2F0KQotICAgIHsKLSAg
ICAgICAgbV90ZW1wU3RhY2tUb3ArKzsKLSAgICAgICAgdXBkYXRlVGVtcFN0YWNrSGVpZ2h0KCk7
Ci0gICAgICAgIHJldHVybiBVTlVTRUQ7Ci0gICAgfQotCi0gICAgaW50IGJ1aWxkSW1tZWRpYXRl
RjY0KGRvdWJsZSkKLSAgICB7Ci0gICAgICAgIG1fdGVtcFN0YWNrVG9wKys7Ci0gICAgICAgIHVw
ZGF0ZVRlbXBTdGFja0hlaWdodCgpOwotICAgICAgICByZXR1cm4gVU5VU0VEOwotICAgIH0KLQot
ICAgIGludCBidWlsZEdldExvY2FsKHVpbnQzMl90LCBXQVNNVHlwZSkKLSAgICB7Ci0gICAgICAg
IG1fdGVtcFN0YWNrVG9wKys7Ci0gICAgICAgIHVwZGF0ZVRlbXBTdGFja0hlaWdodCgpOwotICAg
ICAgICByZXR1cm4gVU5VU0VEOwotICAgIH0KLQotICAgIGludCBidWlsZEdldEdsb2JhbCh1aW50
MzJfdCwgV0FTTVR5cGUpCi0gICAgewotICAgICAgICBtX3RlbXBTdGFja1RvcCsrOwotICAgICAg
ICB1cGRhdGVUZW1wU3RhY2tIZWlnaHQoKTsKLSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9
Ci0KLSAgICBpbnQgYnVpbGRDb252ZXJ0VHlwZShpbnQsIFdBU01FeHByZXNzaW9uVHlwZSwgV0FT
TUV4cHJlc3Npb25UeXBlLCBXQVNNVHlwZUNvbnZlcnNpb24pCi0gICAgewotICAgICAgICByZXR1
cm4gVU5VU0VEOwotICAgIH0KLQotICAgIGludCBidWlsZExvYWQoY29uc3QgTWVtb3J5QWRkcmVz
cyYsIFdBU01FeHByZXNzaW9uVHlwZSwgV0FTTU1lbW9yeVR5cGUsIE1lbW9yeUFjY2Vzc0NvbnZl
cnNpb24pCi0gICAgewotICAgICAgICByZXR1cm4gVU5VU0VEOwotICAgIH0KLQotICAgIGludCBi
dWlsZFN0b3JlKFdBU01PcEtpbmQgb3BLaW5kLCBjb25zdCBNZW1vcnlBZGRyZXNzJiwgV0FTTUV4
cHJlc3Npb25UeXBlLCBXQVNNTWVtb3J5VHlwZSwgaW50KQotICAgIHsKLSAgICAgICAgbV90ZW1w
U3RhY2tUb3AgLT0gMjsKLSAgICAgICAgaWYgKG9wS2luZCA9PSBXQVNNT3BLaW5kOjpFeHByZXNz
aW9uKQotICAgICAgICAgICAgbV90ZW1wU3RhY2tUb3ArKzsKLSAgICAgICAgcmV0dXJuIFVOVVNF
RDsKLSAgICB9Ci0KLSAgICBpbnQgYnVpbGRVbmFyeUkzMihpbnQsIFdBU01PcEV4cHJlc3Npb25J
MzIpCi0gICAgewotICAgICAgICByZXR1cm4gVU5VU0VEOwotICAgIH0KLQotICAgIGludCBidWls
ZFVuYXJ5RjMyKGludCwgV0FTTU9wRXhwcmVzc2lvbkYzMikKLSAgICB7Ci0gICAgICAgIHJldHVy
biBVTlVTRUQ7Ci0gICAgfQotCi0gICAgaW50IGJ1aWxkVW5hcnlGNjQoaW50LCBXQVNNT3BFeHBy
ZXNzaW9uRjY0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9Ci0KLSAgICBp
bnQgYnVpbGRCaW5hcnlJMzIoaW50LCBpbnQsIFdBU01PcEV4cHJlc3Npb25JMzIpCi0gICAgewot
ICAgICAgICBtX3RlbXBTdGFja1RvcC0tOwotICAgICAgICByZXR1cm4gVU5VU0VEOwotICAgIH0K
LQotICAgIGludCBidWlsZEJpbmFyeUYzMihpbnQsIGludCwgV0FTTU9wRXhwcmVzc2lvbkYzMikK
LSAgICB7Ci0gICAgICAgIG1fdGVtcFN0YWNrVG9wLS07Ci0gICAgICAgIHJldHVybiBVTlVTRUQ7
Ci0gICAgfQotCi0gICAgaW50IGJ1aWxkQmluYXJ5RjY0KGludCwgaW50LCBXQVNNT3BFeHByZXNz
aW9uRjY0KQotICAgIHsKLSAgICAgICAgbV90ZW1wU3RhY2tUb3AtLTsKLSAgICAgICAgcmV0dXJu
IFVOVVNFRDsKLSAgICB9Ci0KLSAgICBpbnQgYnVpbGRSZWxhdGlvbmFsSTMyKGludCwgaW50LCBX
QVNNT3BFeHByZXNzaW9uSTMyKQotICAgIHsKLSAgICAgICAgbV90ZW1wU3RhY2tUb3AtLTsKLSAg
ICAgICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9Ci0KLSAgICBpbnQgYnVpbGRSZWxhdGlvbmFsRjMy
KGludCwgaW50LCBXQVNNT3BFeHByZXNzaW9uSTMyKQotICAgIHsKLSAgICAgICAgbV90ZW1wU3Rh
Y2tUb3AtLTsKLSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9Ci0KLSAgICBpbnQgYnVpbGRS
ZWxhdGlvbmFsRjY0KGludCwgaW50LCBXQVNNT3BFeHByZXNzaW9uSTMyKQotICAgIHsKLSAgICAg
ICAgbV90ZW1wU3RhY2tUb3AtLTsKLSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9Ci0KLSAg
ICBpbnQgYnVpbGRNaW5Pck1heEkzMihpbnQsIGludCwgV0FTTU9wRXhwcmVzc2lvbkkzMikKLSAg
ICB7Ci0gICAgICAgIG1fdGVtcFN0YWNrVG9wLS07Ci0gICAgICAgIHJldHVybiBVTlVTRUQ7Ci0g
ICAgfQotCi0gICAgaW50IGJ1aWxkTWluT3JNYXhGNjQoaW50LCBpbnQsIFdBU01PcEV4cHJlc3Np
b25GNjQpCi0gICAgewotICAgICAgICBtX3RlbXBTdGFja1RvcC0tOwotICAgICAgICByZXR1cm4g
VU5VU0VEOwotICAgIH0KLQotICAgIGludCBidWlsZENhbGxJbnRlcm5hbCh1aW50MzJfdCwgaW50
LCBjb25zdCBXQVNNU2lnbmF0dXJlJiBzaWduYXR1cmUsIFdBU01FeHByZXNzaW9uVHlwZSByZXR1
cm5UeXBlKQotICAgIHsKLSAgICAgICAgc2l6ZV90IGFyZ3VtZW50Q291bnQgPSBzaWduYXR1cmUu
YXJndW1lbnRzLnNpemUoKTsKLSAgICAgICAgdXBkYXRlVGVtcFN0YWNrSGVpZ2h0Rm9yQ2FsbChh
cmd1bWVudENvdW50KTsKLSAgICAgICAgbV90ZW1wU3RhY2tUb3AgLT0gYXJndW1lbnRDb3VudDsK
LSAgICAgICAgaWYgKHJldHVyblR5cGUgIT0gV0FTTUV4cHJlc3Npb25UeXBlOjpWb2lkKSB7Ci0g
ICAgICAgICAgICBtX3RlbXBTdGFja1RvcCsrOwotICAgICAgICAgICAgdXBkYXRlVGVtcFN0YWNr
SGVpZ2h0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9Ci0KLSAg
ICBpbnQgYnVpbGRDYWxsSW1wb3J0KHVpbnQzMl90LCBpbnQsIGNvbnN0IFdBU01TaWduYXR1cmUm
IHNpZ25hdHVyZSwgV0FTTUV4cHJlc3Npb25UeXBlIHJldHVyblR5cGUpCi0gICAgewotICAgICAg
ICBzaXplX3QgYXJndW1lbnRDb3VudCA9IHNpZ25hdHVyZS5hcmd1bWVudHMuc2l6ZSgpOwotICAg
ICAgICB1cGRhdGVUZW1wU3RhY2tIZWlnaHRGb3JDYWxsKGFyZ3VtZW50Q291bnQpOwotICAgICAg
ICBtX3RlbXBTdGFja1RvcCAtPSBhcmd1bWVudENvdW50OwotICAgICAgICBpZiAocmV0dXJuVHlw
ZSAhPSBXQVNNRXhwcmVzc2lvblR5cGU6OlZvaWQpIHsKLSAgICAgICAgICAgIG1fdGVtcFN0YWNr
VG9wKys7Ci0gICAgICAgICAgICB1cGRhdGVUZW1wU3RhY2tIZWlnaHQoKTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gVU5VU0VEOwotICAgIH0KLQotICAgIGludCBidWlsZENhbGxJbmRpcmVj
dCh1aW50MzJfdCwgaW50LCBpbnQsIGNvbnN0IFdBU01TaWduYXR1cmUmIHNpZ25hdHVyZSwgV0FT
TUV4cHJlc3Npb25UeXBlIHJldHVyblR5cGUpCi0gICAgewotICAgICAgICBzaXplX3QgYXJndW1l
bnRDb3VudCA9IHNpZ25hdHVyZS5hcmd1bWVudHMuc2l6ZSgpOwotICAgICAgICB1cGRhdGVUZW1w
U3RhY2tIZWlnaHRGb3JDYWxsKGFyZ3VtZW50Q291bnQpOwotICAgICAgICBtX3RlbXBTdGFja1Rv
cCAtPSBhcmd1bWVudENvdW50ICsgMTsKLSAgICAgICAgaWYgKHJldHVyblR5cGUgIT0gV0FTTUV4
cHJlc3Npb25UeXBlOjpWb2lkKQotICAgICAgICAgICAgbV90ZW1wU3RhY2tUb3ArKzsKLSAgICAg
ICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGVuZEV4cHJlc3Npb25MaXN0
KGludCYsIGludCkgeyB9Ci0KLSAgICB2b2lkIGRpc2NhcmQoaW50KQotICAgIHsKLSAgICAgICAg
bV90ZW1wU3RhY2tUb3AtLTsKLSAgICB9Ci0KLSAgICB2b2lkIGxpbmtUYXJnZXQoY29uc3QgaW50
JikgeyB9Ci0gICAgdm9pZCBqdW1wVG9UYXJnZXQoY29uc3QgaW50JikgeyB9Ci0gICAgdm9pZCBq
dW1wVG9UYXJnZXRJZihKdW1wQ29uZGl0aW9uLCBpbnQsIGNvbnN0IGludCYpCi0gICAgewotICAg
ICAgICBtX3RlbXBTdGFja1RvcC0tOwotICAgIH0KLQotICAgIHZvaWQgc3RhcnRMb29wKCkgeyB9
Ci0gICAgdm9pZCBlbmRMb29wKCkgeyB9Ci0gICAgdm9pZCBzdGFydFN3aXRjaCgpIHsgfQotICAg
IHZvaWQgZW5kU3dpdGNoKCkgeyB9Ci0gICAgdm9pZCBzdGFydExhYmVsKCkgeyB9Ci0gICAgdm9p
ZCBlbmRMYWJlbCgpIHsgfQotCi0gICAgaW50IGJyZWFrVGFyZ2V0KCkgeyByZXR1cm4gVU5VU0VE
OyB9Ci0gICAgaW50IGNvbnRpbnVlVGFyZ2V0KCkgeyByZXR1cm4gVU5VU0VEOyB9Ci0gICAgaW50
IGJyZWFrTGFiZWxUYXJnZXQodWludDMyX3QpIHsgcmV0dXJuIFVOVVNFRDsgfQotICAgIGludCBj
b250aW51ZUxhYmVsVGFyZ2V0KHVpbnQzMl90KSB7IHJldHVybiBVTlVTRUQ7IH0KLQotICAgIHZv
aWQgYnVpbGRTd2l0Y2goaW50LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mLCBjb25zdCBWZWN0b3I8
aW50PiYsIGNvbnN0IGludCYpCi0gICAgewotICAgICAgICBtX3RlbXBTdGFja1RvcC0tOwotICAg
IH0KLQotICAgIHVuc2lnbmVkIHN0YWNrSGVpZ2h0KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBt
X251bWJlck9mTG9jYWxzICsgbV90ZW1wU3RhY2tIZWlnaHQ7Ci0gICAgfQotCi1wcml2YXRlOgot
ICAgIHZvaWQgdXBkYXRlVGVtcFN0YWNrSGVpZ2h0KCkKLSAgICB7Ci0gICAgICAgIGlmIChtX3Rl
bXBTdGFja1RvcCA+IG1fdGVtcFN0YWNrSGVpZ2h0KQotICAgICAgICAgICAgbV90ZW1wU3RhY2tI
ZWlnaHQgPSBtX3RlbXBTdGFja1RvcDsKLSAgICB9Ci0KLSAgICB2b2lkIHVwZGF0ZVRlbXBTdGFj
a0hlaWdodEZvckNhbGwoc2l6ZV90IGFyZ3VtZW50Q291bnQpCi0gICAgewotICAgICAgICAvLyBC
b3hlZCBhcmd1bWVudHMgKyB0aGlzIGFyZ3VtZW50ICsgY2FsbCBmcmFtZSBoZWFkZXIgKyBtYXhp
bXVtIHBhZGRpbmcuCi0gICAgICAgIG1fdGVtcFN0YWNrVG9wICs9IGFyZ3VtZW50Q291bnQgKyAx
ICsgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKyAxOwotICAgICAgICB1cGRhdGVU
ZW1wU3RhY2tIZWlnaHQoKTsKLSAgICAgICAgbV90ZW1wU3RhY2tUb3AgLT0gYXJndW1lbnRDb3Vu
dCArIDEgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyArIDE7Ci0gICAgfQotCi0g
ICAgdW5zaWduZWQgbV9udW1iZXJPZkxvY2FsczsKLSAgICB1bnNpZ25lZCBtX3RlbXBTdGFja1Rv
cCB7IDAgfTsKLSAgICB1bnNpZ25lZCBtX3RlbXBTdGFja0hlaWdodCB7IDAgfTsKLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQotCi0jZW5k
aWYgLy8gV0FTTUZ1bmN0aW9uU3ludGF4Q2hlY2tlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dBU01Nb2R1bGVQYXJzZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA4Y2UzNWY0ODNlYWI3MWE1ODVjZjJkZTE0OTYyNmUzNGZiNDczNDgxLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dBU01Nb2R1bGVQYXJzZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzc3ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV0FTTU1vZHVsZVBhcnNlci5oIgotCi0jaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQotCi0jaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgotI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKLSNpbmNsdWRlICJKU1dBU01Nb2R1bGUuaCIKLSNpbmNsdWRlICJTdHJvbmdJ
bmxpbmVzLmgiCi0jaW5jbHVkZSAiV0FTTUNvbnN0YW50cy5oIgotI2luY2x1ZGUgIldBU01GdW5j
dGlvblBhcnNlci5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLSNkZWZpbmUgRkFJ
TF9XSVRIX01FU1NBR0UoZXJyb3JNZXNzYWdlKSBkbyB7IG1fZXJyb3JNZXNzYWdlID0gZXJyb3JN
ZXNzYWdlOyByZXR1cm47IH0gd2hpbGUgKDApCi0jZGVmaW5lIFJFQURfVUlOVDMyX09SX0ZBSUwo
cmVzdWx0LCBlcnJvck1lc3NhZ2UpIGRvIHsgaWYgKCFtX3JlYWRlci5yZWFkVUludDMyKHJlc3Vs
dCkpIEZBSUxfV0lUSF9NRVNTQUdFKGVycm9yTWVzc2FnZSk7IH0gd2hpbGUgKDApCi0jZGVmaW5l
IFJFQURfRkxPQVRfT1JfRkFJTChyZXN1bHQsIGVycm9yTWVzc2FnZSkgZG8geyBpZiAoIW1fcmVh
ZGVyLnJlYWRGbG9hdChyZXN1bHQpKSBGQUlMX1dJVEhfTUVTU0FHRShlcnJvck1lc3NhZ2UpOyB9
IHdoaWxlICgwKQotI2RlZmluZSBSRUFEX0RPVUJMRV9PUl9GQUlMKHJlc3VsdCwgZXJyb3JNZXNz
YWdlKSBkbyB7IGlmICghbV9yZWFkZXIucmVhZERvdWJsZShyZXN1bHQpKSBGQUlMX1dJVEhfTUVT
U0FHRShlcnJvck1lc3NhZ2UpOyB9IHdoaWxlICgwKQotI2RlZmluZSBSRUFEX0NPTVBBQ1RfVUlO
VDMyX09SX0ZBSUwocmVzdWx0LCBlcnJvck1lc3NhZ2UpIGRvIHsgaWYgKCFtX3JlYWRlci5yZWFk
Q29tcGFjdFVJbnQzMihyZXN1bHQpKSBGQUlMX1dJVEhfTUVTU0FHRShlcnJvck1lc3NhZ2UpOyB9
IHdoaWxlICgwKQotI2RlZmluZSBSRUFEX1NUUklOR19PUl9GQUlMKHJlc3VsdCwgZXJyb3JNZXNz
YWdlKSBkbyB7IGlmICghbV9yZWFkZXIucmVhZFN0cmluZyhyZXN1bHQpKSBGQUlMX1dJVEhfTUVT
U0FHRShlcnJvck1lc3NhZ2UpOyB9IHdoaWxlICgwKQotI2RlZmluZSBSRUFEX1RZUEVfT1JfRkFJ
TChyZXN1bHQsIGVycm9yTWVzc2FnZSkgZG8geyBpZiAoIW1fcmVhZGVyLnJlYWRUeXBlKHJlc3Vs
dCkpIEZBSUxfV0lUSF9NRVNTQUdFKGVycm9yTWVzc2FnZSk7IH0gd2hpbGUgKDApCi0jZGVmaW5l
IFJFQURfRVhQUkVTU0lPTl9UWVBFX09SX0ZBSUwocmVzdWx0LCBlcnJvck1lc3NhZ2UpIGRvIHsg
aWYgKCFtX3JlYWRlci5yZWFkRXhwcmVzc2lvblR5cGUocmVzdWx0KSkgRkFJTF9XSVRIX01FU1NB
R0UoZXJyb3JNZXNzYWdlKTsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgUkVBRF9FWFBPUlRfRk9STUFU
X09SX0ZBSUwocmVzdWx0LCBlcnJvck1lc3NhZ2UpIGRvIHsgaWYgKCFtX3JlYWRlci5yZWFkRXhw
b3J0Rm9ybWF0KHJlc3VsdCkpIEZBSUxfV0lUSF9NRVNTQUdFKGVycm9yTWVzc2FnZSk7IH0gd2hp
bGUgKDApCi0jZGVmaW5lIEZBSUxfSUZfRkFMU0UoY29uZGl0aW9uLCBlcnJvck1lc3NhZ2UpIGRv
IHsgaWYgKCEoY29uZGl0aW9uKSkgRkFJTF9XSVRIX01FU1NBR0UoZXJyb3JNZXNzYWdlKTsgfSB3
aGlsZSAoMCkKLSNkZWZpbmUgUFJPUEFHQVRFX0VSUk9SKCkgZG8geyBpZiAoIW1fZXJyb3JNZXNz
YWdlLmlzTnVsbCgpKSByZXR1cm47IH0gd2hpbGUgKDApCi0KLW5hbWVzcGFjZSBKU0MgewotCi1X
QVNNTW9kdWxlUGFyc2VyOjpXQVNNTW9kdWxlUGFyc2VyKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBKU09iamVjdCogaW1wb3J0
cywgSlNBcnJheUJ1ZmZlciogYXJyYXlCdWZmZXIpCi0gICAgOiBtX3ZtKHZtKQotICAgICwgbV9n
bG9iYWxPYmplY3Qodm0sIGdsb2JhbE9iamVjdCkKLSAgICAsIG1fc291cmNlKHNvdXJjZSkKLSAg
ICAsIG1faW1wb3J0cyh2bSwgaW1wb3J0cykKLSAgICAsIG1fcmVhZGVyKHN0YXRpY19jYXN0PFdl
YkFzc2VtYmx5U291cmNlUHJvdmlkZXIqPihzb3VyY2UucHJvdmlkZXIoKSktPmRhdGEoKSkKLSAg
ICAsIG1fbW9kdWxlKHZtLCBKU1dBU01Nb2R1bGU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LT53
YXNtTW9kdWxlU3RydWN0dXJlKCksIGFycmF5QnVmZmVyKSkKLXsKLX0KLQotSlNXQVNNTW9kdWxl
KiBXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZShFeGVjU3RhdGUqIGV4ZWMsIFN0cmluZyYgZXJyb3JN
ZXNzYWdlKQotewotICAgIHBhcnNlTW9kdWxlKGV4ZWMpOwotICAgIGlmICghbV9lcnJvck1lc3Nh
Z2UuaXNOdWxsKCkpIHsKLSAgICAgICAgZXJyb3JNZXNzYWdlID0gbV9lcnJvck1lc3NhZ2U7Ci0g
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICByZXR1cm4gbV9tb2R1bGUuZ2V0KCk7
Ci19Ci0KLXZvaWQgV0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VNb2R1bGUoRXhlY1N0YXRlKiBleGVj
KQotewotICAgIHVpbnQzMl90IG1hZ2ljTnVtYmVyOwotICAgIFJFQURfVUlOVDMyX09SX0ZBSUwo
bWFnaWNOdW1iZXIsICJDYW5ub3QgcmVhZCB0aGUgbWFnaWMgbnVtYmVyLiIpOwotICAgIEZBSUxf
SUZfRkFMU0UobWFnaWNOdW1iZXIgPT0gd2FzbU1hZ2ljTnVtYmVyLCAiVGhlIG1hZ2ljIG51bWJl
ciBpcyBpbmNvcnJlY3QuIik7Ci0KLSAgICB1aW50MzJfdCBvdXRwdXRTaXplSW5BU01KUzsKLSAg
ICBSRUFEX1VJTlQzMl9PUl9GQUlMKG91dHB1dFNpemVJbkFTTUpTLCAiQ2Fubm90IHJlYWQgdGhl
IG91dHB1dCBzaXplIGluIGFzbS5qcyBmb3JtYXQuIik7Ci0KLSAgICBwYXJzZUNvbnN0YW50UG9v
bFNlY3Rpb24oKTsKLSAgICBQUk9QQUdBVEVfRVJST1IoKTsKLSAgICBwYXJzZVNpZ25hdHVyZVNl
Y3Rpb24oKTsKLSAgICBQUk9QQUdBVEVfRVJST1IoKTsKLSAgICBwYXJzZUZ1bmN0aW9uSW1wb3J0
U2VjdGlvbihleGVjKTsKLSAgICBQUk9QQUdBVEVfRVJST1IoKTsKLSAgICBwYXJzZUdsb2JhbFNl
Y3Rpb24oZXhlYyk7Ci0gICAgUFJPUEFHQVRFX0VSUk9SKCk7Ci0gICAgcGFyc2VGdW5jdGlvbkRl
Y2xhcmF0aW9uU2VjdGlvbigpOwotICAgIFBST1BBR0FURV9FUlJPUigpOwotICAgIHBhcnNlRnVu
Y3Rpb25Qb2ludGVyVGFibGVTZWN0aW9uKCk7Ci0gICAgUFJPUEFHQVRFX0VSUk9SKCk7Ci0gICAg
cGFyc2VGdW5jdGlvbkRlZmluaXRpb25TZWN0aW9uKCk7Ci0gICAgUFJPUEFHQVRFX0VSUk9SKCk7
Ci0gICAgcGFyc2VFeHBvcnRTZWN0aW9uKCk7Ci0gICAgUFJPUEFHQVRFX0VSUk9SKCk7Ci0KLSAg
ICBGQUlMX0lGX0ZBTFNFKCFtX21vZHVsZS0+YXJyYXlCdWZmZXIoKSB8fCBtX21vZHVsZS0+YXJy
YXlCdWZmZXIoKS0+aW1wbCgpLT5ieXRlTGVuZ3RoKCkgPCAoMXUgPDwgMzEpLCAiVGhlIEFycmF5
QnVmZmVyJ3MgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuIDJeMzEuIik7Ci19Ci0KLXZvaWQgV0FT
TU1vZHVsZVBhcnNlcjo6cGFyc2VDb25zdGFudFBvb2xTZWN0aW9uKCkKLXsKLSAgICB1aW50MzJf
dCBudW1iZXJPZkkzMkNvbnN0YW50czsKLSAgICB1aW50MzJfdCBudW1iZXJPZkYzMkNvbnN0YW50
czsKLSAgICB1aW50MzJfdCBudW1iZXJPZkY2NENvbnN0YW50czsKLSAgICBSRUFEX0NPTVBBQ1Rf
VUlOVDMyX09SX0ZBSUwobnVtYmVyT2ZJMzJDb25zdGFudHMsICJDYW5ub3QgcmVhZCB0aGUgbnVt
YmVyIG9mIGludDMyIGNvbnN0YW50cy4iKTsKLSAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZB
SUwobnVtYmVyT2ZGMzJDb25zdGFudHMsICJDYW5ub3QgcmVhZCB0aGUgbnVtYmVyIG9mIGZsb2F0
MzIgY29uc3RhbnRzLiIpOwotICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChudW1iZXJP
ZkY2NENvbnN0YW50cywgIkNhbm5vdCByZWFkIHRoZSBudW1iZXIgb2YgZmxvYXQ2NCBjb25zdGFu
dHMuIik7Ci0gICAgbV9tb2R1bGUtPmkzMkNvbnN0YW50cygpLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkobnVtYmVyT2ZJMzJDb25zdGFudHMpOwotICAgIG1fbW9kdWxlLT5mMzJDb25zdGFudHMoKS5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KG51bWJlck9mRjMyQ29uc3RhbnRzKTsKLSAgICBtX21vZHVs
ZS0+ZjY0Q29uc3RhbnRzKCkucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1iZXJPZkY2NENvbnN0
YW50cyk7Ci0KLSAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZJMzJDb25zdGFu
dHM7ICsraSkgewotICAgICAgICB1aW50MzJfdCBjb25zdGFudDsKLSAgICAgICAgUkVBRF9DT01Q
QUNUX1VJTlQzMl9PUl9GQUlMKGNvbnN0YW50LCAiQ2Fubm90IHJlYWQgYW4gaW50MzIgY29uc3Rh
bnQuIik7Ci0gICAgICAgIG1fbW9kdWxlLT5pMzJDb25zdGFudHMoKS51bmNoZWNrZWRBcHBlbmQo
Y29uc3RhbnQpOwotICAgIH0KLSAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZG
MzJDb25zdGFudHM7ICsraSkgewotICAgICAgICBmbG9hdCBjb25zdGFudDsKLSAgICAgICAgUkVB
RF9GTE9BVF9PUl9GQUlMKGNvbnN0YW50LCAiQ2Fubm90IHJlYWQgYSBmbG9hdDMyIGNvbnN0YW50
LiIpOwotICAgICAgICBtX21vZHVsZS0+ZjMyQ29uc3RhbnRzKCkudW5jaGVja2VkQXBwZW5kKGNv
bnN0YW50KTsKLSAgICB9Ci0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9mRjY0
Q29uc3RhbnRzOyArK2kpIHsKLSAgICAgICAgZG91YmxlIGNvbnN0YW50OwotICAgICAgICBSRUFE
X0RPVUJMRV9PUl9GQUlMKGNvbnN0YW50LCAiQ2Fubm90IHJlYWQgYSBmbG9hdDY0IGNvbnN0YW50
LiIpOwotICAgICAgICBtX21vZHVsZS0+ZjY0Q29uc3RhbnRzKCkudW5jaGVja2VkQXBwZW5kKGNv
bnN0YW50KTsKLSAgICB9Ci19Ci0KLXZvaWQgV0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VTaWduYXR1
cmVTZWN0aW9uKCkKLXsKLSAgICB1aW50MzJfdCBudW1iZXJPZlNpZ25hdHVyZXM7Ci0gICAgUkVB
RF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKG51bWJlck9mU2lnbmF0dXJlcywgIkNhbm5vdCByZWFk
IHRoZSBudW1iZXIgb2Ygc2lnbmF0dXJlcy4iKTsKLSAgICBtX21vZHVsZS0+c2lnbmF0dXJlcygp
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobnVtYmVyT2ZTaWduYXR1cmVzKTsKLSAgICBmb3IgKHVp
bnQzMl90IHNpZ25hdHVyZUluZGV4ID0gMDsgc2lnbmF0dXJlSW5kZXggPCBudW1iZXJPZlNpZ25h
dHVyZXM7ICsrc2lnbmF0dXJlSW5kZXgpIHsKLSAgICAgICAgV0FTTVNpZ25hdHVyZSBzaWduYXR1
cmU7Ci0gICAgICAgIFJFQURfRVhQUkVTU0lPTl9UWVBFX09SX0ZBSUwoc2lnbmF0dXJlLnJldHVy
blR5cGUsICJDYW5ub3QgcmVhZCB0aGUgcmV0dXJuIHR5cGUuIik7Ci0gICAgICAgIHVpbnQzMl90
IGFyZ3VtZW50Q291bnQ7Ci0gICAgICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChhcmd1
bWVudENvdW50LCAiQ2Fubm90IHJlYWQgdGhlIG51bWJlciBvZiBhcmd1bWVudHMuIik7Ci0gICAg
ICAgIHNpZ25hdHVyZS5hcmd1bWVudHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShhcmd1bWVudENv
dW50KTsKLSAgICAgICAgZm9yICh1aW50MzJfdCBhcmd1bWVudEluZGV4ID0gMDsgYXJndW1lbnRJ
bmRleCA8IGFyZ3VtZW50Q291bnQ7ICsrYXJndW1lbnRJbmRleCkgewotICAgICAgICAgICAgV0FT
TVR5cGUgdHlwZTsKLSAgICAgICAgICAgIFJFQURfVFlQRV9PUl9GQUlMKHR5cGUsICJDYW5ub3Qg
cmVhZCB0aGUgdHlwZSBvZiBhbiBhcmd1bWVudC4iKTsKLSAgICAgICAgICAgIHNpZ25hdHVyZS5h
cmd1bWVudHMudW5jaGVja2VkQXBwZW5kKHR5cGUpOwotICAgICAgICB9Ci0gICAgICAgIG1fbW9k
dWxlLT5zaWduYXR1cmVzKCkudW5jaGVja2VkQXBwZW5kKHNpZ25hdHVyZSk7Ci0gICAgfQotfQot
Ci12b2lkIFdBU01Nb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25JbXBvcnRTZWN0aW9uKEV4ZWNT
dGF0ZSogZXhlYykKLXsKLSAgICB1aW50MzJfdCBudW1iZXJPZkZ1bmN0aW9uSW1wb3J0czsKLSAg
ICB1aW50MzJfdCBudW1iZXJPZkZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJlczsKLSAgICBSRUFEX0NP
TVBBQ1RfVUlOVDMyX09SX0ZBSUwobnVtYmVyT2ZGdW5jdGlvbkltcG9ydHMsICJDYW5ub3QgcmVh
ZCB0aGUgbnVtYmVyIG9mIGZ1bmN0aW9uIGltcG9ydHMuIik7Ci0gICAgUkVBRF9DT01QQUNUX1VJ
TlQzMl9PUl9GQUlMKG51bWJlck9mRnVuY3Rpb25JbXBvcnRTaWduYXR1cmVzLCAiQ2Fubm90IHJl
YWQgdGhlIG51bWJlciBvZiBmdW5jdGlvbiBpbXBvcnQgc2lnbmF0dXJlcy4iKTsKLSAgICBtX21v
ZHVsZS0+ZnVuY3Rpb25JbXBvcnRzKCkucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1iZXJPZkZ1
bmN0aW9uSW1wb3J0cyk7Ci0gICAgbV9tb2R1bGUtPmZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJlcygp
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobnVtYmVyT2ZGdW5jdGlvbkltcG9ydFNpZ25hdHVyZXMp
OwotICAgIG1fbW9kdWxlLT5pbXBvcnRlZEZ1bmN0aW9ucygpLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkobnVtYmVyT2ZGdW5jdGlvbkltcG9ydHMpOwotCi0gICAgZm9yICh1aW50MzJfdCBmdW5jdGlv
bkltcG9ydEluZGV4ID0gMDsgZnVuY3Rpb25JbXBvcnRJbmRleCA8IG51bWJlck9mRnVuY3Rpb25J
bXBvcnRzOyArK2Z1bmN0aW9uSW1wb3J0SW5kZXgpIHsKLSAgICAgICAgV0FTTUZ1bmN0aW9uSW1w
b3J0IGZ1bmN0aW9uSW1wb3J0OwotICAgICAgICBSRUFEX1NUUklOR19PUl9GQUlMKGZ1bmN0aW9u
SW1wb3J0LmZ1bmN0aW9uTmFtZSwgIkNhbm5vdCByZWFkIHRoZSBmdW5jdGlvbiBpbXBvcnQgbmFt
ZS4iKTsKLSAgICAgICAgbV9tb2R1bGUtPmZ1bmN0aW9uSW1wb3J0cygpLnVuY2hlY2tlZEFwcGVu
ZChmdW5jdGlvbkltcG9ydCk7Ci0KLSAgICAgICAgdWludDMyX3QgbnVtYmVyT2ZTaWduYXR1cmVz
OwotICAgICAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwobnVtYmVyT2ZTaWduYXR1cmVz
LCAiQ2Fubm90IHJlYWQgdGhlIG51bWJlciBvZiBzaWduYXR1cmVzLiIpOwotICAgICAgICBGQUlM
X0lGX0ZBTFNFKG51bWJlck9mU2lnbmF0dXJlcyA8PSBudW1iZXJPZkZ1bmN0aW9uSW1wb3J0U2ln
bmF0dXJlcyAtIG1fbW9kdWxlLT5mdW5jdGlvbkltcG9ydFNpZ25hdHVyZXMoKS5zaXplKCksICJU
aGUgbnVtYmVyIG9mIHNpZ25hdHVyZXMgaXMgaW5jb3JyZWN0LiIpOwotCi0gICAgICAgIGZvciAo
dWludDMyX3QgaSA9IDA7IGkgPCBudW1iZXJPZlNpZ25hdHVyZXM7ICsraSkgewotICAgICAgICAg
ICAgV0FTTUZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJlIGZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJlOwot
ICAgICAgICAgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKGZ1bmN0aW9uSW1wb3J0U2ln
bmF0dXJlLnNpZ25hdHVyZUluZGV4LCAiQ2Fubm90IHJlYWQgdGhlIHNpZ25hdHVyZSBpbmRleC4i
KTsKLSAgICAgICAgICAgIEZBSUxfSUZfRkFMU0UoZnVuY3Rpb25JbXBvcnRTaWduYXR1cmUuc2ln
bmF0dXJlSW5kZXggPCBtX21vZHVsZS0+c2lnbmF0dXJlcygpLnNpemUoKSwgIlRoZSBzaWduYXR1
cmUgaW5kZXggaXMgaW5jb3JyZWN0LiIpOwotICAgICAgICAgICAgZnVuY3Rpb25JbXBvcnRTaWdu
YXR1cmUuZnVuY3Rpb25JbXBvcnRJbmRleCA9IGZ1bmN0aW9uSW1wb3J0SW5kZXg7Ci0gICAgICAg
ICAgICBtX21vZHVsZS0+ZnVuY3Rpb25JbXBvcnRTaWduYXR1cmVzKCkudW5jaGVja2VkQXBwZW5k
KGZ1bmN0aW9uSW1wb3J0U2lnbmF0dXJlKTsKLSAgICAgICAgfQotCi0gICAgICAgIEpTVmFsdWUg
dmFsdWU7Ci0gICAgICAgIGdldEltcG9ydGVkVmFsdWUoZXhlYywgZnVuY3Rpb25JbXBvcnQuZnVu
Y3Rpb25OYW1lLCB2YWx1ZSk7Ci0gICAgICAgIFBST1BBR0FURV9FUlJPUigpOwotICAgICAgICBG
QUlMX0lGX0ZBTFNFKHZhbHVlLmlzRnVuY3Rpb24oKSwgIlwiIiArIGZ1bmN0aW9uSW1wb3J0LmZ1
bmN0aW9uTmFtZSArICJcIiBpcyBub3QgYSBmdW5jdGlvbi4iKTsKLSAgICAgICAgSlNGdW5jdGlv
biogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KHZhbHVlLmFzQ2VsbCgpKTsKLSAgICAg
ICAgbV9tb2R1bGUtPmltcG9ydGVkRnVuY3Rpb25zKCkudW5jaGVja2VkQXBwZW5kKFdyaXRlQmFy
cmllcjxKU0Z1bmN0aW9uPihtX3ZtLCBtX21vZHVsZS5nZXQoKSwgZnVuY3Rpb24pKTsKLSAgICB9
Ci0gICAgRkFJTF9JRl9GQUxTRShtX21vZHVsZS0+ZnVuY3Rpb25JbXBvcnRTaWduYXR1cmVzKCku
c2l6ZSgpID09IG51bWJlck9mRnVuY3Rpb25JbXBvcnRTaWduYXR1cmVzLCAiVGhlIG51bWJlciBv
ZiBmdW5jdGlvbiBpbXBvcnQgc2lnbmF0dXJlcyBpcyBpbmNvcnJlY3QuIik7Ci19Ci0KLXZvaWQg
V0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VHbG9iYWxTZWN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKLXsK
LSAgICB1aW50MzJfdCBudW1iZXJPZkludGVybmFsSTMyR2xvYmFsVmFyaWFibGVzOwotICAgIHVp
bnQzMl90IG51bWJlck9mSW50ZXJuYWxGMzJHbG9iYWxWYXJpYWJsZXM7Ci0gICAgdWludDMyX3Qg
bnVtYmVyT2ZJbnRlcm5hbEY2NEdsb2JhbFZhcmlhYmxlczsKLSAgICB1aW50MzJfdCBudW1iZXJP
ZkltcG9ydGVkSTMyR2xvYmFsVmFyaWFibGVzOwotICAgIHVpbnQzMl90IG51bWJlck9mSW1wb3J0
ZWRGMzJHbG9iYWxWYXJpYWJsZXM7Ci0gICAgdWludDMyX3QgbnVtYmVyT2ZJbXBvcnRlZEY2NEds
b2JhbFZhcmlhYmxlczsKLSAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwobnVtYmVyT2ZJ
bnRlcm5hbEkzMkdsb2JhbFZhcmlhYmxlcywgIkNhbm5vdCByZWFkIHRoZSBudW1iZXIgb2YgaW50
ZXJuYWwgaW50MzIgZ2xvYmFsIHZhcmlhYmxlcy4iKTsKLSAgICBSRUFEX0NPTVBBQ1RfVUlOVDMy
X09SX0ZBSUwobnVtYmVyT2ZJbnRlcm5hbEYzMkdsb2JhbFZhcmlhYmxlcywgIkNhbm5vdCByZWFk
IHRoZSBudW1iZXIgb2YgaW50ZXJuYWwgZmxvYXQzMiBnbG9iYWwgdmFyaWFibGVzLiIpOwotICAg
IFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChudW1iZXJPZkludGVybmFsRjY0R2xvYmFsVmFy
aWFibGVzLCAiQ2Fubm90IHJlYWQgdGhlIG51bWJlciBvZiBpbnRlcm5hbCBmbG9hdDY0IGdsb2Jh
bCB2YXJpYWJsZXMuIik7Ci0gICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKG51bWJlck9m
SW1wb3J0ZWRJMzJHbG9iYWxWYXJpYWJsZXMsICJDYW5ub3QgcmVhZCB0aGUgbnVtYmVyIG9mIGlt
cG9ydGVkIGludDMyIGdsb2JhbCB2YXJpYWJsZXMuIik7Ci0gICAgUkVBRF9DT01QQUNUX1VJTlQz
Ml9PUl9GQUlMKG51bWJlck9mSW1wb3J0ZWRGMzJHbG9iYWxWYXJpYWJsZXMsICJDYW5ub3QgcmVh
ZCB0aGUgbnVtYmVyIG9mIGltcG9ydGVkIGZsb2F0MzIgZ2xvYmFsIHZhcmlhYmxlcy4iKTsKLSAg
ICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwobnVtYmVyT2ZJbXBvcnRlZEY2NEdsb2JhbFZh
cmlhYmxlcywgIkNhbm5vdCByZWFkIHRoZSBudW1iZXIgb2YgaW1wb3J0ZWQgZmxvYXQ2NCBnbG9i
YWwgdmFyaWFibGVzLiIpOwotICAgIHVpbnQzMl90IG51bWJlck9mR2xvYmFsVmFyaWFibGVzID0g
bnVtYmVyT2ZJbnRlcm5hbEkzMkdsb2JhbFZhcmlhYmxlcyArIG51bWJlck9mSW50ZXJuYWxGMzJH
bG9iYWxWYXJpYWJsZXMgKyBudW1iZXJPZkludGVybmFsRjY0R2xvYmFsVmFyaWFibGVzICsKLSAg
ICAgICAgbnVtYmVyT2ZJbXBvcnRlZEkzMkdsb2JhbFZhcmlhYmxlcyArIG51bWJlck9mSW1wb3J0
ZWRGMzJHbG9iYWxWYXJpYWJsZXMgKyBudW1iZXJPZkltcG9ydGVkRjY0R2xvYmFsVmFyaWFibGVz
OwotCi0gICAgVmVjdG9yPFdBU01UeXBlPiYgZ2xvYmFsVmFyaWFibGVUeXBlcyA9IG1fbW9kdWxl
LT5nbG9iYWxWYXJpYWJsZVR5cGVzKCk7Ci0gICAgZ2xvYmFsVmFyaWFibGVUeXBlcy5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KG51bWJlck9mR2xvYmFsVmFyaWFibGVzKTsKLSAgICBWZWN0b3I8SlNX
QVNNTW9kdWxlOjpHbG9iYWxWYXJpYWJsZT4mIGdsb2JhbFZhcmlhYmxlcyA9IG1fbW9kdWxlLT5n
bG9iYWxWYXJpYWJsZXMoKTsKLSAgICBnbG9iYWxWYXJpYWJsZXMucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShudW1iZXJPZkdsb2JhbFZhcmlhYmxlcyk7Ci0gICAgZm9yICh1aW50MzJfdCBpID0gMDsg
aSA8IG51bWJlck9mSW50ZXJuYWxJMzJHbG9iYWxWYXJpYWJsZXM7ICsraSkgewotICAgICAgICBn
bG9iYWxWYXJpYWJsZVR5cGVzLnVuY2hlY2tlZEFwcGVuZChXQVNNVHlwZTo6STMyKTsKLSAgICAg
ICAgZ2xvYmFsVmFyaWFibGVzLnVuY2hlY2tlZEFwcGVuZChKU1dBU01Nb2R1bGU6Okdsb2JhbFZh
cmlhYmxlKDApKTsKLSAgICB9Ci0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9m
SW50ZXJuYWxGMzJHbG9iYWxWYXJpYWJsZXM7ICsraSkgewotICAgICAgICBnbG9iYWxWYXJpYWJs
ZVR5cGVzLnVuY2hlY2tlZEFwcGVuZChXQVNNVHlwZTo6RjMyKTsKLSAgICAgICAgZ2xvYmFsVmFy
aWFibGVzLnVuY2hlY2tlZEFwcGVuZChKU1dBU01Nb2R1bGU6Okdsb2JhbFZhcmlhYmxlKDAuMGYp
KTsKLSAgICB9Ci0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51bWJlck9mSW50ZXJuYWxG
NjRHbG9iYWxWYXJpYWJsZXM7ICsraSkgewotICAgICAgICBnbG9iYWxWYXJpYWJsZVR5cGVzLnVu
Y2hlY2tlZEFwcGVuZChXQVNNVHlwZTo6RjY0KTsKLSAgICAgICAgZ2xvYmFsVmFyaWFibGVzLnVu
Y2hlY2tlZEFwcGVuZChKU1dBU01Nb2R1bGU6Okdsb2JhbFZhcmlhYmxlKDAuMCkpOwotICAgIH0K
LSAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZJbXBvcnRlZEkzMkdsb2JhbFZh
cmlhYmxlczsgKytpKSB7Ci0gICAgICAgIFN0cmluZyBpbXBvcnROYW1lOwotICAgICAgICBSRUFE
X1NUUklOR19PUl9GQUlMKGltcG9ydE5hbWUsICJDYW5ub3QgcmVhZCB0aGUgaW1wb3J0IG5hbWUg
b2YgYW4gaW50MzIgZ2xvYmFsIHZhcmlhYmxlLiIpOwotICAgICAgICBnbG9iYWxWYXJpYWJsZVR5
cGVzLnVuY2hlY2tlZEFwcGVuZChXQVNNVHlwZTo6STMyKTsKLSAgICAgICAgSlNWYWx1ZSB2YWx1
ZTsKLSAgICAgICAgZ2V0SW1wb3J0ZWRWYWx1ZShleGVjLCBpbXBvcnROYW1lLCB2YWx1ZSk7Ci0g
ICAgICAgIFBST1BBR0FURV9FUlJPUigpOwotICAgICAgICBGQUlMX0lGX0ZBTFNFKHZhbHVlLmlz
UHJpbWl0aXZlKCkgJiYgIXZhbHVlLmlzU3ltYm9sKCksICJcIiIgKyBpbXBvcnROYW1lICsgIlwi
IGlzIG5vdCBhIHByaW1pdGl2ZSBvciBpcyBhIFN5bWJvbC4iKTsKLSAgICAgICAgZ2xvYmFsVmFy
aWFibGVzLnVuY2hlY2tlZEFwcGVuZChKU1dBU01Nb2R1bGU6Okdsb2JhbFZhcmlhYmxlKHZhbHVl
LnRvSW50MzIoZXhlYykpKTsKLSAgICB9Ci0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG51
bWJlck9mSW1wb3J0ZWRGMzJHbG9iYWxWYXJpYWJsZXM7ICsraSkgewotICAgICAgICBTdHJpbmcg
aW1wb3J0TmFtZTsKLSAgICAgICAgUkVBRF9TVFJJTkdfT1JfRkFJTChpbXBvcnROYW1lLCAiQ2Fu
bm90IHJlYWQgdGhlIGltcG9ydCBuYW1lIG9mIGEgZmxvYXQzMiBnbG9iYWwgdmFyaWFibGUuIik7
Ci0gICAgICAgIGdsb2JhbFZhcmlhYmxlVHlwZXMudW5jaGVja2VkQXBwZW5kKFdBU01UeXBlOjpG
MzIpOwotICAgICAgICBKU1ZhbHVlIHZhbHVlOwotICAgICAgICBnZXRJbXBvcnRlZFZhbHVlKGV4
ZWMsIGltcG9ydE5hbWUsIHZhbHVlKTsKLSAgICAgICAgUFJPUEFHQVRFX0VSUk9SKCk7Ci0gICAg
ICAgIEZBSUxfSUZfRkFMU0UodmFsdWUuaXNQcmltaXRpdmUoKSAmJiAhdmFsdWUuaXNTeW1ib2wo
KSwgIlwiIiArIGltcG9ydE5hbWUgKyAiXCIgaXMgbm90IGEgcHJpbWl0aXZlIG9yIGlzIGEgU3lt
Ym9sLiIpOwotICAgICAgICBnbG9iYWxWYXJpYWJsZXMudW5jaGVja2VkQXBwZW5kKEpTV0FTTU1v
ZHVsZTo6R2xvYmFsVmFyaWFibGUoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbHVlLnRvTnVtYmVyKGV4
ZWMpKSkpOwotICAgIH0KLSAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZJbXBv
cnRlZEY2NEdsb2JhbFZhcmlhYmxlczsgKytpKSB7Ci0gICAgICAgIFN0cmluZyBpbXBvcnROYW1l
OwotICAgICAgICBSRUFEX1NUUklOR19PUl9GQUlMKGltcG9ydE5hbWUsICJDYW5ub3QgcmVhZCB0
aGUgaW1wb3J0IG5hbWUgb2YgYSBmbG9hdDY0IGdsb2JhbCB2YXJpYWJsZS4iKTsKLSAgICAgICAg
Z2xvYmFsVmFyaWFibGVUeXBlcy51bmNoZWNrZWRBcHBlbmQoV0FTTVR5cGU6OkY2NCk7Ci0gICAg
ICAgIEpTVmFsdWUgdmFsdWU7Ci0gICAgICAgIGdldEltcG9ydGVkVmFsdWUoZXhlYywgaW1wb3J0
TmFtZSwgdmFsdWUpOwotICAgICAgICBQUk9QQUdBVEVfRVJST1IoKTsKLSAgICAgICAgRkFJTF9J
Rl9GQUxTRSh2YWx1ZS5pc1ByaW1pdGl2ZSgpICYmICF2YWx1ZS5pc1N5bWJvbCgpLCAiXCIiICsg
aW1wb3J0TmFtZSArICJcIiBpcyBub3QgYSBwcmltaXRpdmUgb3IgaXMgYSBTeW1ib2wuIik7Ci0g
ICAgICAgIGdsb2JhbFZhcmlhYmxlcy51bmNoZWNrZWRBcHBlbmQoSlNXQVNNTW9kdWxlOjpHbG9i
YWxWYXJpYWJsZSh2YWx1ZS50b051bWJlcihleGVjKSkpOwotICAgIH0KLX0KLQotdm9pZCBXQVNN
TW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb25TZWN0aW9uKCkKLXsKLSAgICB1
aW50MzJfdCBudW1iZXJPZkZ1bmN0aW9uRGVjbGFyYXRpb25zOwotICAgIFJFQURfQ09NUEFDVF9V
SU5UMzJfT1JfRkFJTChudW1iZXJPZkZ1bmN0aW9uRGVjbGFyYXRpb25zLCAiQ2Fubm90IHJlYWQg
dGhlIG51bWJlciBvZiBmdW5jdGlvbiBkZWNsYXJhdGlvbnMuIik7Ci0gICAgbV9tb2R1bGUtPmZ1
bmN0aW9uRGVjbGFyYXRpb25zKCkucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1iZXJPZkZ1bmN0
aW9uRGVjbGFyYXRpb25zKTsKLSAgICBtX21vZHVsZS0+ZnVuY3Rpb25zKCkucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShudW1iZXJPZkZ1bmN0aW9uRGVjbGFyYXRpb25zKTsKLSAgICBtX21vZHVsZS0+
ZnVuY3Rpb25TdGFydE9mZnNldHNJblNvdXJjZSgpLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobnVt
YmVyT2ZGdW5jdGlvbkRlY2xhcmF0aW9ucyk7Ci0gICAgbV9tb2R1bGUtPmZ1bmN0aW9uU3RhY2tI
ZWlnaHRzKCkucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1iZXJPZkZ1bmN0aW9uRGVjbGFyYXRp
b25zKTsKLSAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnVtYmVyT2ZGdW5jdGlvbkRlY2xh
cmF0aW9uczsgKytpKSB7Ci0gICAgICAgIFdBU01GdW5jdGlvbkRlY2xhcmF0aW9uIGZ1bmN0aW9u
RGVjbGFyYXRpb247Ci0gICAgICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChmdW5jdGlv
bkRlY2xhcmF0aW9uLnNpZ25hdHVyZUluZGV4LCAiQ2Fubm90IHJlYWQgdGhlIHNpZ25hdHVyZSBp
bmRleC4iKTsKLSAgICAgICAgRkFJTF9JRl9GQUxTRShmdW5jdGlvbkRlY2xhcmF0aW9uLnNpZ25h
dHVyZUluZGV4IDwgbV9tb2R1bGUtPnNpZ25hdHVyZXMoKS5zaXplKCksICJUaGUgc2lnbmF0dXJl
IGluZGV4IGlzIGluY29ycmVjdC4iKTsKLSAgICAgICAgbV9tb2R1bGUtPmZ1bmN0aW9uRGVjbGFy
YXRpb25zKCkudW5jaGVja2VkQXBwZW5kKGZ1bmN0aW9uRGVjbGFyYXRpb24pOwotICAgIH0KLX0K
LQotdm9pZCBXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uUG9pbnRlclRhYmxlU2VjdGlv
bigpCi17Ci0gICAgdWludDMyX3QgbnVtYmVyT2ZGdW5jdGlvblBvaW50ZXJUYWJsZXM7Ci0gICAg
UkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKG51bWJlck9mRnVuY3Rpb25Qb2ludGVyVGFibGVz
LCAiQ2Fubm90IHJlYWQgdGhlIG51bWJlciBvZiBmdW5jdGlvbiBwb2ludGVyIHRhYmxlcy4iKTsK
LSAgICBtX21vZHVsZS0+ZnVuY3Rpb25Qb2ludGVyVGFibGVzKCkucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShudW1iZXJPZkZ1bmN0aW9uUG9pbnRlclRhYmxlcyk7Ci0gICAgZm9yICh1aW50MzJfdCBp
ID0gMDsgaSA8IG51bWJlck9mRnVuY3Rpb25Qb2ludGVyVGFibGVzOyArK2kpIHsKLSAgICAgICAg
V0FTTUZ1bmN0aW9uUG9pbnRlclRhYmxlIGZ1bmN0aW9uUG9pbnRlclRhYmxlOwotICAgICAgICBS
RUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwoZnVuY3Rpb25Qb2ludGVyVGFibGUuc2lnbmF0dXJl
SW5kZXgsICJDYW5ub3QgcmVhZCB0aGUgc2lnbmF0dXJlIGluZGV4LiIpOwotICAgICAgICBGQUlM
X0lGX0ZBTFNFKGZ1bmN0aW9uUG9pbnRlclRhYmxlLnNpZ25hdHVyZUluZGV4IDwgbV9tb2R1bGUt
PnNpZ25hdHVyZXMoKS5zaXplKCksICJUaGUgc2lnbmF0dXJlIGluZGV4IGlzIGluY29ycmVjdC4i
KTsKLSAgICAgICAgdWludDMyX3QgbnVtYmVyT2ZGdW5jdGlvbnM7Ci0gICAgICAgIFJFQURfQ09N
UEFDVF9VSU5UMzJfT1JfRkFJTChudW1iZXJPZkZ1bmN0aW9ucywgIkNhbm5vdCByZWFkIHRoZSBu
dW1iZXIgb2YgZnVuY3Rpb25zIG9mIGEgZnVuY3Rpb24gcG9pbnRlciB0YWJsZS4iKTsKLSAgICAg
ICAgRkFJTF9JRl9GQUxTRShoYXNPbmVCaXRTZXQobnVtYmVyT2ZGdW5jdGlvbnMpLCAiVGhlIG51
bWJlciBvZiBmdW5jdGlvbnMgbXVzdCBiZSBhIHBvd2VyIG9mIHR3by4iKTsKLSAgICAgICAgZnVu
Y3Rpb25Qb2ludGVyVGFibGUuZnVuY3Rpb25JbmRpY2VzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
bnVtYmVyT2ZGdW5jdGlvbnMpOwotICAgICAgICBmdW5jdGlvblBvaW50ZXJUYWJsZS5mdW5jdGlv
bnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1iZXJPZkZ1bmN0aW9ucyk7Ci0gICAgICAgIGZv
ciAodWludDMyX3QgaiA9IDA7IGogPCBudW1iZXJPZkZ1bmN0aW9uczsgKytqKSB7Ci0gICAgICAg
ICAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4OwotICAgICAgICAgICAgUkVBRF9DT01QQUNUX1VJ
TlQzMl9PUl9GQUlMKGZ1bmN0aW9uSW5kZXgsICJDYW5ub3QgcmVhZCBhIGZ1bmN0aW9uIGluZGV4
IG9mIGEgZnVuY3Rpb24gcG9pbnRlciB0YWJsZS4iKTsKLSAgICAgICAgICAgIEZBSUxfSUZfRkFM
U0UoZnVuY3Rpb25JbmRleCA8IG1fbW9kdWxlLT5mdW5jdGlvbkRlY2xhcmF0aW9ucygpLnNpemUo
KSwgIlRoZSBmdW5jdGlvbiBpbmRleCBpcyBpbmNvcnJlY3QuIik7Ci0gICAgICAgICAgICBGQUlM
X0lGX0ZBTFNFKG1fbW9kdWxlLT5mdW5jdGlvbkRlY2xhcmF0aW9ucygpW2Z1bmN0aW9uSW5kZXhd
LnNpZ25hdHVyZUluZGV4ID09IGZ1bmN0aW9uUG9pbnRlclRhYmxlLnNpZ25hdHVyZUluZGV4LCAi
VGhlIHNpZ25hdHVyZSBvZiB0aGUgZnVuY3Rpb24gZG9lc24ndCBtYXRjaCB0aGF0IG9mIHRoZSBm
dW5jdGlvbiBwb2ludGVyIHRhYmxlLiIpOwotICAgICAgICAgICAgZnVuY3Rpb25Qb2ludGVyVGFi
bGUuZnVuY3Rpb25JbmRpY2VzLnVuY2hlY2tlZEFwcGVuZChmdW5jdGlvbkluZGV4KTsKLSAgICAg
ICAgfQotICAgICAgICBtX21vZHVsZS0+ZnVuY3Rpb25Qb2ludGVyVGFibGVzKCkudW5jaGVja2Vk
QXBwZW5kKGZ1bmN0aW9uUG9pbnRlclRhYmxlKTsKLSAgICB9Ci19Ci0KLXZvaWQgV0FTTU1vZHVs
ZVBhcnNlcjo6cGFyc2VGdW5jdGlvbkRlZmluaXRpb25TZWN0aW9uKCkKLXsKLSAgICBmb3IgKHNp
emVfdCBmdW5jdGlvbkluZGV4ID0gMDsgZnVuY3Rpb25JbmRleCA8IG1fbW9kdWxlLT5mdW5jdGlv
bkRlY2xhcmF0aW9ucygpLnNpemUoKTsgKytmdW5jdGlvbkluZGV4KSB7Ci0gICAgICAgIHBhcnNl
RnVuY3Rpb25EZWZpbml0aW9uKGZ1bmN0aW9uSW5kZXgpOwotICAgICAgICBQUk9QQUdBVEVfRVJS
T1IoKTsKLSAgICB9Ci0KLSAgICBmb3IgKFdBU01GdW5jdGlvblBvaW50ZXJUYWJsZSYgZnVuY3Rp
b25Qb2ludGVyVGFibGUgOiBtX21vZHVsZS0+ZnVuY3Rpb25Qb2ludGVyVGFibGVzKCkpIHsKLSAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvblBvaW50ZXJUYWJsZS5mdW5jdGlv
bkluZGljZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBmdW5jdGlvblBvaW50ZXJUYWJsZS5m
dW5jdGlvbnMudW5jaGVja2VkQXBwZW5kKG1fbW9kdWxlLT5mdW5jdGlvbnMoKVtmdW5jdGlvblBv
aW50ZXJUYWJsZS5mdW5jdGlvbkluZGljZXNbaV1dLmdldCgpKTsKLSAgICB9Ci19Ci0KLXZvaWQg
V0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbkRlZmluaXRpb24oc2l6ZV90IGZ1bmN0aW9u
SW5kZXgpCi17Ci0gICAgdW5zaWduZWQgc3RhcnRPZmZzZXRJblNvdXJjZSA9IG1fcmVhZGVyLm9m
ZnNldCgpOwotICAgIHVuc2lnbmVkIGVuZE9mZnNldEluU291cmNlOwotICAgIHVuc2lnbmVkIHN0
YWNrSGVpZ2h0OwotICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7Ci0gICAgaWYgKCFXQVNNRnVuY3Rp
b25QYXJzZXI6OmNoZWNrU3ludGF4KG1fbW9kdWxlLmdldCgpLCBtX3NvdXJjZSwgZnVuY3Rpb25J
bmRleCwgc3RhcnRPZmZzZXRJblNvdXJjZSwgZW5kT2Zmc2V0SW5Tb3VyY2UsIHN0YWNrSGVpZ2h0
LCBlcnJvck1lc3NhZ2UpKSB7Ci0gICAgICAgIG1fZXJyb3JNZXNzYWdlID0gZXJyb3JNZXNzYWdl
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fcmVhZGVyLnNldE9mZnNldChlbmRPZmZz
ZXRJblNvdXJjZSk7Ci0KLSAgICBXZWJBc3NlbWJseUV4ZWN1dGFibGUqIHdlYkFzc2VtYmx5RXhl
Y3V0YWJsZSA9IFdlYkFzc2VtYmx5RXhlY3V0YWJsZTo6Y3JlYXRlKG1fdm0sIG1fc291cmNlLCBt
X21vZHVsZS5nZXQoKSwgZnVuY3Rpb25JbmRleCk7Ci0gICAgSlNGdW5jdGlvbiogZnVuY3Rpb24g
PSBKU0Z1bmN0aW9uOjpjcmVhdGUobV92bSwgd2ViQXNzZW1ibHlFeGVjdXRhYmxlLCBtX2dsb2Jh
bE9iamVjdC5nZXQoKSk7Ci0gICAgbV9tb2R1bGUtPmZ1bmN0aW9ucygpLnVuY2hlY2tlZEFwcGVu
ZChXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4obV92bSwgbV9tb2R1bGUuZ2V0KCksIGZ1bmN0aW9u
KSk7Ci0gICAgbV9tb2R1bGUtPmZ1bmN0aW9uU3RhcnRPZmZzZXRzSW5Tb3VyY2UoKS51bmNoZWNr
ZWRBcHBlbmQoc3RhcnRPZmZzZXRJblNvdXJjZSk7Ci0gICAgbV9tb2R1bGUtPmZ1bmN0aW9uU3Rh
Y2tIZWlnaHRzKCkudW5jaGVja2VkQXBwZW5kKHN0YWNrSGVpZ2h0KTsKLX0KLQotdm9pZCBXQVNN
TW9kdWxlUGFyc2VyOjpwYXJzZUV4cG9ydFNlY3Rpb24oKQotewotICAgIFdBU01FeHBvcnRGb3Jt
YXQgZXhwb3J0Rm9ybWF0OwotICAgIFJFQURfRVhQT1JUX0ZPUk1BVF9PUl9GQUlMKGV4cG9ydEZv
cm1hdCwgIkNhbm5vdCByZWFkIHRoZSBleHBvcnQgZm9ybWF0LiIpOwotICAgIHN3aXRjaCAoZXhw
b3J0Rm9ybWF0KSB7Ci0gICAgY2FzZSBXQVNNRXhwb3J0Rm9ybWF0OjpEZWZhdWx0OiB7Ci0gICAg
ICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXg7Ci0gICAgICAgIFJFQURfQ09NUEFDVF9VSU5UMzJf
T1JfRkFJTChmdW5jdGlvbkluZGV4LCAiQ2Fubm90IHJlYWQgdGhlIGZ1bmN0aW9uIGluZGV4LiIp
OwotICAgICAgICBGQUlMX0lGX0ZBTFNFKGZ1bmN0aW9uSW5kZXggPCBtX21vZHVsZS0+ZnVuY3Rp
b25EZWNsYXJhdGlvbnMoKS5zaXplKCksICJUaGUgZnVuY3Rpb24gaW5kZXggaXMgaW5jb3JyZWN0
LiIpOwotICAgICAgICAvLyBGSVhNRTogRXhwb3J0IHRoZSBmdW5jdGlvbi4KLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIGNhc2UgV0FTTUV4cG9ydEZvcm1hdDo6UmVjb3JkOiB7Ci0gICAgICAg
IHVpbnQzMl90IG51bWJlck9mRXhwb3J0czsKLSAgICAgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9P
Ul9GQUlMKG51bWJlck9mRXhwb3J0cywgIkNhbm5vdCByZWFkIHRoZSBudW1iZXIgb2YgZXhwb3J0
cy4iKTsKLSAgICAgICAgZm9yICh1aW50MzJfdCBleHBvcnRJbmRleCA9IDA7IGV4cG9ydEluZGV4
IDwgbnVtYmVyT2ZFeHBvcnRzOyArK2V4cG9ydEluZGV4KSB7Ci0gICAgICAgICAgICBTdHJpbmcg
ZXhwb3J0TmFtZTsKLSAgICAgICAgICAgIFJFQURfU1RSSU5HX09SX0ZBSUwoZXhwb3J0TmFtZSwg
IkNhbm5vdCByZWFkIHRoZSBmdW5jdGlvbiBleHBvcnQgbmFtZS4iKTsKLSAgICAgICAgICAgIHVp
bnQzMl90IGZ1bmN0aW9uSW5kZXg7Ci0gICAgICAgICAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09S
X0ZBSUwoZnVuY3Rpb25JbmRleCwgIkNhbm5vdCByZWFkIHRoZSBmdW5jdGlvbiBpbmRleC4iKTsK
LSAgICAgICAgICAgIEZBSUxfSUZfRkFMU0UoZnVuY3Rpb25JbmRleCA8IG1fbW9kdWxlLT5mdW5j
dGlvbkRlY2xhcmF0aW9ucygpLnNpemUoKSwgIlRoZSBmdW5jdGlvbiBpbmRleCBpcyBpbmNvcnJl
Y3QuIik7Ci0gICAgICAgICAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZtX3ZtLCBleHBvcnROYW1lKTsKLSAgICAgICAgICAgIG1fbW9kdWxlLT5wdXRE
aXJlY3QobV92bSwgaWRlbnRpZmllciwgbV9tb2R1bGUtPmZ1bmN0aW9ucygpW2Z1bmN0aW9uSW5k
ZXhdLmdldCgpKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVs
dDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotfQotCi12b2lkIFdBU01N
b2R1bGVQYXJzZXI6OmdldEltcG9ydGVkVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJp
bmcmIGltcG9ydE5hbWUsIEpTVmFsdWUmIHZhbHVlKQotewotICAgIEZBSUxfSUZfRkFMU0UobV9p
bXBvcnRzLCAiQWNjZXNzaW5nIHByb3BlcnR5IG9mIG5vbi1vYmplY3QuIik7Ci0gICAgSWRlbnRp
ZmllciBpZGVudGlmaWVyID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmbV92bSwgaW1wb3J0TmFt
ZSk7Ci0gICAgUHJvcGVydHlTbG90IHNsb3QobV9pbXBvcnRzLmdldCgpLCBQcm9wZXJ0eVNsb3Q6
OkludGVybmFsTWV0aG9kVHlwZTo6R2V0KTsKLSAgICBpZiAoIW1faW1wb3J0cy0+Z2V0UHJvcGVy
dHlTbG90KGV4ZWMsIGlkZW50aWZpZXIsIHNsb3QpKQotICAgICAgICBGQUlMX1dJVEhfTUVTU0FH
RSgiQ2FuJ3QgZmluZCBhIHByb3BlcnR5IG5hbWVkIFwiIiArIGltcG9ydE5hbWUgKyAnIicpOwot
ICAgIEZBSUxfSUZfRkFMU0Uoc2xvdC5pc1ZhbHVlKCksICJcIiIgKyBpbXBvcnROYW1lICsgIlwi
IGlzIG5vdCBhIGRhdGEgcHJvcGVydHkuIik7Ci0gICAgLy8gV2Ugb25seSByZXRyaWV2ZSBkYXRh
IHByb3BlcnRpZXMuIFNvLCB0aGlzIGRvZXMgbm90IGNhdXNlIGFueSB1c2VyLW9ic2VydmFibGUg
ZWZmZWN0LgotICAgIHZhbHVlID0gc2xvdC5nZXRWYWx1ZShleGVjLCBpZGVudGlmaWVyKTsKLX0K
LQotSlNXQVNNTW9kdWxlKiBwYXJzZVdlYkFzc2VtYmx5KEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
U291cmNlQ29kZSYgc291cmNlLCBKU09iamVjdCogaW1wb3J0cywgSlNBcnJheUJ1ZmZlciogYXJy
YXlCdWZmZXIsIFN0cmluZyYgZXJyb3JNZXNzYWdlKQotewotICAgIFdBU01Nb2R1bGVQYXJzZXIg
bW9kdWxlUGFyc2VyKGV4ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgc291
cmNlLCBpbXBvcnRzLCBhcnJheUJ1ZmZlcik7Ci0gICAgcmV0dXJuIG1vZHVsZVBhcnNlci5wYXJz
ZShleGVjLCBlcnJvck1lc3NhZ2UpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlm
IC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dBU01Nb2R1bGVQYXJzZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dB
U01Nb2R1bGVQYXJzZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTAxN2JjMWNl
YTY2NzE3ZTc1ZGI2MTVjNzlmNDQ0YTBmMjlmNDM1Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNTW9k
dWxlUGFyc2VyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXQVNNTW9kdWxlUGFyc2Vy
X2gKLSNkZWZpbmUgV0FTTU1vZHVsZVBhcnNlcl9oCi0KLSNpZiBFTkFCTEUoV0VCQVNTRU1CTFkp
Ci0KLSNpbmNsdWRlICJTdHJvbmcuaCIKLSNpbmNsdWRlICJXQVNNUmVhZGVyLmgiCi0jaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBFeGVj
U3RhdGU7Ci1jbGFzcyBKU0FycmF5QnVmZmVyOwotY2xhc3MgSlNHbG9iYWxPYmplY3Q7Ci1jbGFz
cyBKU1dBU01Nb2R1bGU7Ci1jbGFzcyBTb3VyY2VDb2RlOwotY2xhc3MgVk07Ci0KLWNsYXNzIFdB
U01Nb2R1bGVQYXJzZXIgewotcHVibGljOgotICAgIFdBU01Nb2R1bGVQYXJzZXIoVk0mLCBKU0ds
b2JhbE9iamVjdCosIGNvbnN0IFNvdXJjZUNvZGUmLCBKU09iamVjdCogaW1wb3J0cywgSlNBcnJh
eUJ1ZmZlciopOwotICAgIEpTV0FTTU1vZHVsZSogcGFyc2UoRXhlY1N0YXRlKiwgU3RyaW5nJiBl
cnJvck1lc3NhZ2UpOwotCi1wcml2YXRlOgotICAgIHZvaWQgcGFyc2VNb2R1bGUoRXhlY1N0YXRl
Kik7Ci0gICAgdm9pZCBwYXJzZUNvbnN0YW50UG9vbFNlY3Rpb24oKTsKLSAgICB2b2lkIHBhcnNl
U2lnbmF0dXJlU2VjdGlvbigpOwotICAgIHZvaWQgcGFyc2VGdW5jdGlvbkltcG9ydFNlY3Rpb24o
RXhlY1N0YXRlKik7Ci0gICAgdm9pZCBwYXJzZUdsb2JhbFNlY3Rpb24oRXhlY1N0YXRlKik7Ci0g
ICAgdm9pZCBwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb25TZWN0aW9uKCk7Ci0gICAgdm9pZCBwYXJz
ZUZ1bmN0aW9uUG9pbnRlclRhYmxlU2VjdGlvbigpOwotICAgIHZvaWQgcGFyc2VGdW5jdGlvbkRl
ZmluaXRpb25TZWN0aW9uKCk7Ci0gICAgdm9pZCBwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvbihzaXpl
X3QgZnVuY3Rpb25JbmRleCk7Ci0gICAgdm9pZCBwYXJzZUV4cG9ydFNlY3Rpb24oKTsKLSAgICB2
b2lkIGdldEltcG9ydGVkVmFsdWUoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiBpbXBvcnROYW1l
LCBKU1ZhbHVlJik7Ci0KLSAgICBWTSYgbV92bTsKLSAgICBTdHJvbmc8SlNHbG9iYWxPYmplY3Q+
IG1fZ2xvYmFsT2JqZWN0OwotICAgIGNvbnN0IFNvdXJjZUNvZGUmIG1fc291cmNlOwotICAgIFN0
cm9uZzxKU09iamVjdD4gbV9pbXBvcnRzOwotICAgIFdBU01SZWFkZXIgbV9yZWFkZXI7Ci0gICAg
U3Ryb25nPEpTV0FTTU1vZHVsZT4gbV9tb2R1bGU7Ci0gICAgU3RyaW5nIG1fZXJyb3JNZXNzYWdl
OwotfTsKLQotSlNfRVhQT1JUX1BSSVZBVEUgSlNXQVNNTW9kdWxlKiBwYXJzZVdlYkFzc2VtYmx5
KEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBKU09iamVjdCogaW1wb3J0cywgSlNBcnJh
eUJ1ZmZlciosIFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0K
LSNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCi0KLSNlbmRpZiAvLyBXQVNNTW9kdWxlUGFy
c2VyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01SZWFkZXIu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTVJlYWRlci5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2YWM4ZTJmY2FjMGVkYmExOTY1YjUwYTliMTVmMmFkMzZi
M2MyYTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTVJlYWRlci5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwyNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoK
LSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTUgYnkgdGhlIHJl
cG9zaXRvcnkgYXV0aG9ycyBvZgotICogV2ViQXNzZW1ibHkvcG9seWZpbGwtcHJvdG90eXBlLTEu
Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAo
dGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBj
b21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2Yg
dGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2Vz
L0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9y
IGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhl
IExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQg
V0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBp
bXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292
ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldBU01SZWFkZXIuaCIKLQot
I2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLQotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxk
ZXIuaD4KLQotI2RlZmluZSBDSEVDS19SRUFEKGxlbmd0aCkgZG8geyBpZiAobV9jdXJzb3IgKyBs
ZW5ndGggPiBtX2J1ZmZlci5lbmQoKSkgcmV0dXJuIGZhbHNlOyB9IHdoaWxlICgwKQotCi1uYW1l
c3BhY2UgSlNDIHsKLQotYm9vbCBXQVNNUmVhZGVyOjpyZWFkVUludDMyKHVpbnQzMl90JiByZXN1
bHQpCi17Ci0gICAgQ0hFQ0tfUkVBRCg0KTsKLSAgICByZXN1bHQgPSBtX2N1cnNvclswXSB8IG1f
Y3Vyc29yWzFdIDw8IDggfCBtX2N1cnNvclsyXSA8PCAxNiB8IG1fY3Vyc29yWzNdIDw8IDI0Owot
ICAgIG1fY3Vyc29yICs9IDQ7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV0FTTVJlYWRl
cjo6cmVhZEZsb2F0KGZsb2F0JiByZXN1bHQpCi17Ci0gICAgQ0hFQ0tfUkVBRCg0KTsKLSAgICB1
bmlvbiB7Ci0gICAgICAgIHVpbnQ4X3QgYnl0ZXNbNF07Ci0gICAgICAgIGZsb2F0IGZsb2F0VmFs
dWU7Ci0gICAgfSB1ID0gewotI2lmIENQVShCSUdfRU5ESUFOKQotICAgICAgICB7IG1fY3Vyc29y
WzNdLCBtX2N1cnNvclsyXSwgbV9jdXJzb3JbMV0sIG1fY3Vyc29yWzBdIH0KLSNlbHNlCi0gICAg
ICAgIHsgbV9jdXJzb3JbMF0sIG1fY3Vyc29yWzFdLCBtX2N1cnNvclsyXSwgbV9jdXJzb3JbM10g
fQotI2VuZGlmCi0gICAgfTsKLSAgICByZXN1bHQgPSB1LmZsb2F0VmFsdWU7Ci0gICAgbV9jdXJz
b3IgKz0gNDsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXQVNNUmVhZGVyOjpyZWFkRG91
YmxlKGRvdWJsZSYgcmVzdWx0KQotewotICAgIENIRUNLX1JFQUQoOCk7Ci0gICAgdW5pb24gewot
ICAgICAgICB1aW50OF90IGJ5dGVzWzhdOwotICAgICAgICBkb3VibGUgZG91YmxlVmFsdWU7Ci0g
ICAgfSB1ID0gewotI2lmIENQVShCSUdfRU5ESUFOKQotICAgICAgICB7IG1fY3Vyc29yWzddLCBt
X2N1cnNvcls2XSwgbV9jdXJzb3JbNV0sIG1fY3Vyc29yWzRdLCBtX2N1cnNvclszXSwgbV9jdXJz
b3JbMl0sIG1fY3Vyc29yWzFdLCBtX2N1cnNvclswXSB9Ci0jZWxzZQotICAgICAgICB7IG1fY3Vy
c29yWzBdLCBtX2N1cnNvclsxXSwgbV9jdXJzb3JbMl0sIG1fY3Vyc29yWzNdLCBtX2N1cnNvcls0
XSwgbV9jdXJzb3JbNV0sIG1fY3Vyc29yWzZdLCBtX2N1cnNvcls3XSB9Ci0jZW5kaWYKLSAgICB9
OwotICAgIHJlc3VsdCA9IHUuZG91YmxlVmFsdWU7Ci0gICAgbV9jdXJzb3IgKz0gODsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXQVNNUmVhZGVyOjpyZWFkQ29tcGFjdEludDMyKHVpbnQz
Ml90JiByZXN1bHQpCi17Ci0gICAgdWludDMyX3Qgc3VtID0gMDsKLSAgICB1bnNpZ25lZCBzaGlm
dCA9IDA7Ci0gICAgZG8gewotICAgICAgICBDSEVDS19SRUFEKDEpOwotICAgICAgICB1aW50OF90
IGJ5dGUgPSAqbV9jdXJzb3IrKzsKLSAgICAgICAgaWYgKGJ5dGUgPCAweDgwKSB7Ci0gICAgICAg
ICAgICBzdW0gfD0gYnl0ZSA8PCBzaGlmdDsKLSAgICAgICAgICAgIGludCBzaWduRXh0ZW5kID0g
KDMyIC0gNykgLSBzaGlmdDsKLSAgICAgICAgICAgIGlmIChzaWduRXh0ZW5kID4gMCkKLSAgICAg
ICAgICAgICAgICByZXN1bHQgPSBpbnQzMl90KHN1bSkgPDwgc2lnbkV4dGVuZCA+PiBzaWduRXh0
ZW5kOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGludDMyX3Qo
c3VtKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHN1bSB8
PSAoYnl0ZSAmIGZpcnN0U2V2ZW5CaXRzTWFzaykgPDwgc2hpZnQ7Ci0gICAgICAgIHNoaWZ0ICs9
IDc7Ci0gICAgfSB3aGlsZSAoc2hpZnQgPCAzNSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1i
b29sIFdBU01SZWFkZXI6OnJlYWRDb21wYWN0VUludDMyKHVpbnQzMl90JiByZXN1bHQpCi17Ci0g
ICAgdWludDMyX3Qgc3VtID0gMDsKLSAgICB1bnNpZ25lZCBzaGlmdCA9IDA7Ci0gICAgZG8gewot
ICAgICAgICBDSEVDS19SRUFEKDEpOwotICAgICAgICB1aW50MzJfdCBieXRlID0gKm1fY3Vyc29y
Kys7Ci0gICAgICAgIGlmIChieXRlIDwgMHg4MCkgewotICAgICAgICAgICAgaWYgKChzaGlmdCA9
PSAyOCAmJiBieXRlID49IDB4MTApIHx8IChzaGlmdCAmJiAhYnl0ZSkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgcmVzdWx0ID0gc3VtIHwgKGJ5dGUgPDwgc2hp
ZnQpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgc3VtIHw9
IChieXRlICYgZmlyc3RTZXZlbkJpdHNNYXNrKSA8PCBzaGlmdDsKLSAgICAgICAgc2hpZnQgKz0g
NzsKLSAgICB9IHdoaWxlIChzaGlmdCA8IDM1KTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJv
b2wgV0FTTVJlYWRlcjo6cmVhZFN0cmluZyhTdHJpbmcmIHJlc3VsdCkKLXsKLSAgICBTdHJpbmdC
dWlsZGVyIGJ1aWxkZXI7Ci0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgQ0hFQ0tfUkVBRCgx
KTsKLSAgICAgICAgY2hhciBjID0gKm1fY3Vyc29yKys7Ci0gICAgICAgIGlmICghYykKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBidWlsZGVyLmFwcGVuZChjKTsKLSAgICB9Ci0gICAgcmVz
dWx0ID0gYnVpbGRlci50b1N0cmluZygpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdB
U01SZWFkZXI6OnJlYWRUeXBlKFdBU01UeXBlJiByZXN1bHQpCi17Ci0gICAgcmV0dXJuIHJlYWRC
eXRlPFdBU01UeXBlPihyZXN1bHQsIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KFdBU01UeXBlOjpOdW1i
ZXJPZlR5cGVzKSk7Ci19Ci0KLWJvb2wgV0FTTVJlYWRlcjo6cmVhZEV4cHJlc3Npb25UeXBlKFdB
U01FeHByZXNzaW9uVHlwZSYgcmVzdWx0KQotewotICAgIHJldHVybiByZWFkQnl0ZTxXQVNNRXhw
cmVzc2lvblR5cGU+KHJlc3VsdCwgc3RhdGljX2Nhc3Q8dWludDhfdD4oV0FTTUV4cHJlc3Npb25U
eXBlOjpOdW1iZXJPZkV4cHJlc3Npb25UeXBlcykpOwotfQotCi1ib29sIFdBU01SZWFkZXI6OnJl
YWRFeHBvcnRGb3JtYXQoV0FTTUV4cG9ydEZvcm1hdCYgcmVzdWx0KQotewotICAgIHJldHVybiBy
ZWFkQnl0ZTxXQVNNRXhwb3J0Rm9ybWF0PihyZXN1bHQsIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KFdB
U01FeHBvcnRGb3JtYXQ6Ok51bWJlck9mRXhwb3J0Rm9ybWF0cykpOwotfQotCi10ZW1wbGF0ZSA8
Y2xhc3MgVD4gYm9vbCBXQVNNUmVhZGVyOjpyZWFkQnl0ZShUJiByZXN1bHQsIHVpbnQ4X3QgbnVt
YmVyT2ZWYWx1ZXMpCi17Ci0gICAgQ0hFQ0tfUkVBRCgxKTsKLSAgICB1aW50OF90IGJ5dGUgPSAq
bV9jdXJzb3IrKzsKLSAgICBpZiAoYnl0ZSA+PSBudW1iZXJPZlZhbHVlcykKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIHJlc3VsdCA9IFQoYnl0ZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgV0FTTVJlYWRlcjo6cmVhZE9wU3RhdGVtZW50KGJvb2wmIGhhc0ltbWVkaWF0ZSwgV0FT
TU9wU3RhdGVtZW50JiBvcCwgV0FTTU9wU3RhdGVtZW50V2l0aEltbWVkaWF0ZSYgb3BXaXRoSW1t
ZWRpYXRlLCB1aW50OF90JiBpbW1lZGlhdGUpCi17Ci0gICAgcmV0dXJuIHJlYWRPcChoYXNJbW1l
ZGlhdGUsIG9wLCBvcFdpdGhJbW1lZGlhdGUsIGltbWVkaWF0ZSwKLSAgICAgICAgc3RhdGljX2Nh
c3Q8dWludDhfdD4oV0FTTU9wU3RhdGVtZW50OjpOdW1iZXJPZldBU01PcFN0YXRlbWVudHMpLAot
ICAgICAgICBzdGF0aWNfY2FzdDx1aW50OF90PihXQVNNT3BTdGF0ZW1lbnRXaXRoSW1tZWRpYXRl
OjpOdW1iZXJPZldBU01PcFN0YXRlbWVudFdpdGhJbW1lZGlhdGVzKSk7Ci19Ci0KLWJvb2wgV0FT
TVJlYWRlcjo6cmVhZE9wRXhwcmVzc2lvbkkzMihib29sJiBoYXNJbW1lZGlhdGUsIFdBU01PcEV4
cHJlc3Npb25JMzImIG9wLCBXQVNNT3BFeHByZXNzaW9uSTMyV2l0aEltbWVkaWF0ZSYgb3BXaXRo
SW1tZWRpYXRlLCB1aW50OF90JiBpbW1lZGlhdGUpCi17Ci0gICAgcmV0dXJuIHJlYWRPcChoYXNJ
bW1lZGlhdGUsIG9wLCBvcFdpdGhJbW1lZGlhdGUsIGltbWVkaWF0ZSwKLSAgICAgICAgc3RhdGlj
X2Nhc3Q8dWludDhfdD4oV0FTTU9wRXhwcmVzc2lvbkkzMjo6TnVtYmVyT2ZXQVNNT3BFeHByZXNz
aW9uSTMycyksCi0gICAgICAgIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KFdBU01PcEV4cHJlc3Npb25J
MzJXaXRoSW1tZWRpYXRlOjpOdW1iZXJPZldBU01PcEV4cHJlc3Npb25JMzJXaXRoSW1tZWRpYXRl
cykpOwotfQotCi1ib29sIFdBU01SZWFkZXI6OnJlYWRPcEV4cHJlc3Npb25GMzIoYm9vbCYgaGFz
SW1tZWRpYXRlLCBXQVNNT3BFeHByZXNzaW9uRjMyJiBvcCwgV0FTTU9wRXhwcmVzc2lvbkYzMldp
dGhJbW1lZGlhdGUmIG9wV2l0aEltbWVkaWF0ZSwgdWludDhfdCYgaW1tZWRpYXRlKQotewotICAg
IHJldHVybiByZWFkT3AoaGFzSW1tZWRpYXRlLCBvcCwgb3BXaXRoSW1tZWRpYXRlLCBpbW1lZGlh
dGUsCi0gICAgICAgIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KFdBU01PcEV4cHJlc3Npb25GMzI6Ok51
bWJlck9mV0FTTU9wRXhwcmVzc2lvbkYzMnMpLAotICAgICAgICBzdGF0aWNfY2FzdDx1aW50OF90
PihXQVNNT3BFeHByZXNzaW9uRjMyV2l0aEltbWVkaWF0ZTo6TnVtYmVyT2ZXQVNNT3BFeHByZXNz
aW9uRjMyV2l0aEltbWVkaWF0ZXMpKTsKLX0KLQotYm9vbCBXQVNNUmVhZGVyOjpyZWFkT3BFeHBy
ZXNzaW9uRjY0KGJvb2wmIGhhc0ltbWVkaWF0ZSwgV0FTTU9wRXhwcmVzc2lvbkY2NCYgb3AsIFdB
U01PcEV4cHJlc3Npb25GNjRXaXRoSW1tZWRpYXRlJiBvcFdpdGhJbW1lZGlhdGUsIHVpbnQ4X3Qm
IGltbWVkaWF0ZSkKLXsKLSAgICByZXR1cm4gcmVhZE9wKGhhc0ltbWVkaWF0ZSwgb3AsIG9wV2l0
aEltbWVkaWF0ZSwgaW1tZWRpYXRlLAotICAgICAgICBzdGF0aWNfY2FzdDx1aW50OF90PihXQVNN
T3BFeHByZXNzaW9uRjY0OjpOdW1iZXJPZldBU01PcEV4cHJlc3Npb25GNjRzKSwKLSAgICAgICAg
c3RhdGljX2Nhc3Q8dWludDhfdD4oV0FTTU9wRXhwcmVzc2lvbkY2NFdpdGhJbW1lZGlhdGU6Ok51
bWJlck9mV0FTTU9wRXhwcmVzc2lvbkY2NFdpdGhJbW1lZGlhdGVzKSk7Ci19Ci0KLWJvb2wgV0FT
TVJlYWRlcjo6cmVhZE9wRXhwcmVzc2lvblZvaWQoV0FTTU9wRXhwcmVzc2lvblZvaWQmIG9wKQot
ewotICAgIHJldHVybiByZWFkQnl0ZTxXQVNNT3BFeHByZXNzaW9uVm9pZD4ob3AsCi0gICAgICAg
IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KFdBU01PcEV4cHJlc3Npb25Wb2lkOjpOdW1iZXJPZldBU01P
cEV4cHJlc3Npb25Wb2lkcykpOwotfQotCi1ib29sIFdBU01SZWFkZXI6OnJlYWRWYXJpYWJsZVR5
cGVzKGJvb2wmIGhhc0ltbWVkaWF0ZSwgV0FTTVZhcmlhYmxlVHlwZXMmIHZhcmlhYmxlVHlwZXMs
IFdBU01WYXJpYWJsZVR5cGVzV2l0aEltbWVkaWF0ZSYgdmFyaWFibGVUeXBlc1dpdGhJbW1lZGlh
dGUsIHVpbnQ4X3QmIGltbWVkaWF0ZSkKLXsKLSAgICByZXR1cm4gcmVhZE9wKGhhc0ltbWVkaWF0
ZSwgdmFyaWFibGVUeXBlcywgdmFyaWFibGVUeXBlc1dpdGhJbW1lZGlhdGUsIGltbWVkaWF0ZSwK
LSAgICAgICAgc3RhdGljX2Nhc3Q8dWludDhfdD4oV0FTTVZhcmlhYmxlVHlwZXM6Ok51bWJlck9m
VmFyaWFibGVUeXBlcyksCi0gICAgICAgIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KFdBU01WYXJpYWJs
ZVR5cGVzV2l0aEltbWVkaWF0ZTo6TnVtYmVyT2ZWYXJpYWJsZVR5cGVzV2l0aEltbWVkaWF0ZXMp
KTsKLX0KLQotdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFRXaXRoSW1tZWRpYXRlPgotYm9vbCBX
QVNNUmVhZGVyOjpyZWFkT3AoYm9vbCYgaGFzSW1tZWRpYXRlLCBUJiBvcCwgVFdpdGhJbW1lZGlh
dGUmIG9wV2l0aEltbWVkaWF0ZSwgdWludDhfdCYgaW1tZWRpYXRlLCB1aW50OF90IG51bWJlck9m
VmFsdWVzLCB1aW50OF90IG51bWJlck9mVmFsdWVzV2l0aEltbWVkaWF0ZSkKLXsKLSAgICBDSEVD
S19SRUFEKDEpOwotICAgIHVpbnQ4X3QgYnl0ZSA9ICptX2N1cnNvcisrOwotCi0gICAgaWYgKCEo
Ynl0ZSAmIGhhc0ltbWVkaWF0ZUluT3BGbGFnKSkgewotICAgICAgICBpZiAoYnl0ZSA+PSBudW1i
ZXJPZlZhbHVlcykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaGFzSW1tZWRp
YXRlID0gZmFsc2U7Ci0gICAgICAgIG9wID0gVChieXRlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotCi0gICAgdWludDhfdCBieXRlV2l0aG91dEltbWVkaWF0ZSA9IChieXRlID4+IGlt
bWVkaWF0ZUJpdHMpICYgKG9wV2l0aEltbWVkaWF0ZUxpbWl0IC0gMSk7Ci0gICAgaWYgKGJ5dGVX
aXRob3V0SW1tZWRpYXRlID49IG51bWJlck9mVmFsdWVzV2l0aEltbWVkaWF0ZSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGhhc0ltbWVkaWF0ZSA9IHRydWU7Ci0gICAgb3BXaXRoSW1tZWRp
YXRlID0gVFdpdGhJbW1lZGlhdGUoYnl0ZVdpdGhvdXRJbW1lZGlhdGUpOwotICAgIGltbWVkaWF0
ZSA9IGJ5dGUgJiAoaW1tZWRpYXRlTGltaXQgLSAxKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
Ym9vbCBXQVNNUmVhZGVyOjpyZWFkU3dpdGNoQ2FzZShXQVNNU3dpdGNoQ2FzZSYgcmVzdWx0KQot
ewotICAgIHJldHVybiByZWFkQnl0ZTxXQVNNU3dpdGNoQ2FzZT4ocmVzdWx0LCBzdGF0aWNfY2Fz
dDx1aW50OF90PihXQVNNU3dpdGNoQ2FzZTo6TnVtYmVyT2ZTd2l0Y2hDYXNlcykpOwotfQotCi19
IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01SZWFkZXIuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dBU01SZWFkZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggODNkYzI5NjgxMDJkYjJjOGM5YmI1YzVmOWI0MjE0ZWE4Y2Y5ZDdkZi4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XQVNNUmVhZGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXQVNNUmVh
ZGVyX2gKLSNkZWZpbmUgV0FTTVJlYWRlcl9oCi0KLSNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0K
LSNpbmNsdWRlICJXQVNNQ29uc3RhbnRzLmgiCi0jaW5jbHVkZSAiV0FTTUZvcm1hdC5oIgotI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIFdBU01SZWFk
ZXIgewotcHVibGljOgotICAgIFdBU01SZWFkZXIoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBidWZm
ZXIpCi0gICAgICAgIDogbV9idWZmZXIoYnVmZmVyKQotICAgICAgICAsIG1fY3Vyc29yKGJ1ZmZl
ci5kYXRhKCkpCi0gICAgewotICAgIH0KLQotICAgIHVuc2lnbmVkIG9mZnNldCgpIGNvbnN0IHsg
cmV0dXJuIG1fY3Vyc29yIC0gbV9idWZmZXIuZGF0YSgpOyB9Ci0gICAgdm9pZCBzZXRPZmZzZXQo
dW5zaWduZWQgb2Zmc2V0KSB7IG1fY3Vyc29yID0gbV9idWZmZXIuZGF0YSgpICsgb2Zmc2V0OyB9
Ci0KLSAgICBib29sIHJlYWRVSW50MzIodWludDMyX3QmIHJlc3VsdCk7Ci0gICAgYm9vbCByZWFk
RmxvYXQoZmxvYXQmIHJlc3VsdCk7Ci0gICAgYm9vbCByZWFkRG91YmxlKGRvdWJsZSYgcmVzdWx0
KTsKLSAgICBib29sIHJlYWRDb21wYWN0SW50MzIodWludDMyX3QmIHJlc3VsdCk7Ci0gICAgYm9v
bCByZWFkQ29tcGFjdFVJbnQzMih1aW50MzJfdCYgcmVzdWx0KTsKLSAgICBib29sIHJlYWRTdHJp
bmcoU3RyaW5nJiByZXN1bHQpOwotICAgIGJvb2wgcmVhZFR5cGUoV0FTTVR5cGUmIHJlc3VsdCk7
Ci0gICAgYm9vbCByZWFkRXhwcmVzc2lvblR5cGUoV0FTTUV4cHJlc3Npb25UeXBlJiByZXN1bHQp
OwotICAgIGJvb2wgcmVhZEV4cG9ydEZvcm1hdChXQVNNRXhwb3J0Rm9ybWF0JiByZXN1bHQpOwot
ICAgIGJvb2wgcmVhZE9wU3RhdGVtZW50KGJvb2wmIGhhc0ltbWVkaWF0ZSwgV0FTTU9wU3RhdGVt
ZW50JiwgV0FTTU9wU3RhdGVtZW50V2l0aEltbWVkaWF0ZSYsIHVpbnQ4X3QmIGltbWVkaWF0ZSk7
Ci0gICAgYm9vbCByZWFkT3BFeHByZXNzaW9uSTMyKGJvb2wmIGhhc0ltbWVkaWF0ZSwgV0FTTU9w
RXhwcmVzc2lvbkkzMiYsIFdBU01PcEV4cHJlc3Npb25JMzJXaXRoSW1tZWRpYXRlJiwgdWludDhf
dCYgaW1tZWRpYXRlKTsKLSAgICBib29sIHJlYWRPcEV4cHJlc3Npb25GMzIoYm9vbCYgaGFzSW1t
ZWRpYXRlLCBXQVNNT3BFeHByZXNzaW9uRjMyJiwgV0FTTU9wRXhwcmVzc2lvbkYzMldpdGhJbW1l
ZGlhdGUmLCB1aW50OF90JiBpbW1lZGlhdGUpOwotICAgIGJvb2wgcmVhZE9wRXhwcmVzc2lvbkY2
NChib29sJiBoYXNJbW1lZGlhdGUsIFdBU01PcEV4cHJlc3Npb25GNjQmLCBXQVNNT3BFeHByZXNz
aW9uRjY0V2l0aEltbWVkaWF0ZSYsIHVpbnQ4X3QmIGltbWVkaWF0ZSk7Ci0gICAgYm9vbCByZWFk
T3BFeHByZXNzaW9uVm9pZChXQVNNT3BFeHByZXNzaW9uVm9pZCYpOwotICAgIGJvb2wgcmVhZFZh
cmlhYmxlVHlwZXMoYm9vbCYgaGFzSW1tZWRpYXRlLCBXQVNNVmFyaWFibGVUeXBlcyYsIFdBU01W
YXJpYWJsZVR5cGVzV2l0aEltbWVkaWF0ZSYsIHVpbnQ4X3QmIGltbWVkaWF0ZSk7Ci0gICAgYm9v
bCByZWFkU3dpdGNoQ2FzZShXQVNNU3dpdGNoQ2FzZSYgcmVzdWx0KTsKLQotcHJpdmF0ZToKLSAg
ICBzdGF0aWMgY29uc3QgdWludDMyX3QgZmlyc3RTZXZlbkJpdHNNYXNrID0gMHg3ZjsKLQotICAg
IHRlbXBsYXRlIDxjbGFzcyBUPiBib29sIHJlYWRCeXRlKFQmIHJlc3VsdCwgdWludDhfdCBudW1i
ZXJPZlZhbHVlcyk7Ci0gICAgdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFRXaXRoSW1tZWRpYXRl
PiBib29sIHJlYWRPcChib29sJiBoYXNJbW1lZGlhdGUsIFQmLCBUV2l0aEltbWVkaWF0ZSYsIHVp
bnQ4X3QmIGltbWVkaWF0ZSwgdWludDhfdCBudW1iZXJPZlZhbHVlcywgdWludDhfdCBudW1iZXJP
ZlZhbHVlc1dpdGhJbW1lZGlhdGUpOwotCi0gICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBtX2J1
ZmZlcjsKLSAgICBjb25zdCB1aW50OF90KiBtX2N1cnNvcjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IEpTQwotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQotCi0jZW5kaWYgLy8gV0FTTVJl
YWRlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9GZWF0dXJlRGVmaW5lcy5oIGIvU291
cmNlL1dURi93dGYvRmVhdHVyZURlZmluZXMuaAppbmRleCAwMWYwZDY3ZTZhNTY4MzhlNTkzMDhl
MWU3OWVmMmU0OTIzMzMxNTNiLi42NzkwM2I4Y2MyODI2OGJkZmNhNmUwMjAxZjJjNzYwNjI4Y2Ex
MDVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9GZWF0dXJlRGVmaW5lcy5oCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL0ZlYXR1cmVEZWZpbmVzLmgKQEAgLTIyMiw2ICsyMjIsMTAgQEAgdGhlIHB1
YmxpYyBpT1MgU0RLLiBXZSB3aWxsIGFsc28gbmVlZCB0byB1cGRhdGUgdGhlIEZlYXR1cmVEZWZp
bmVzLnhjY29uZmlnIGZpbGUKICNkZWZpbmUgRU5BQkxFX1ZJRVdfTU9ERV9DU1NfTUVESUEgMAog
I2VuZGlmCiAKKyNpZiAhZGVmaW5lZChFTkFCTEVfV0VCQVNTRU1CTFkpCisjZGVmaW5lIEVOQUJM
RV9XRUJBU1NFTUJMWSAwCisjZW5kaWYKKwogI2lmICFkZWZpbmVkKEVOQUJMRV9XRUJfQVJDSElW
RSkKICNkZWZpbmUgRU5BQkxFX1dFQl9BUkNISVZFIDEKICNlbmRpZgo=
</data>
<flag name="review"
          id="309062"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>