<?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>226482</bug_id>
          
          <creation_ts>2021-06-01 01:40:56 -0700</creation_ts>
          <short_desc>Rename ComplexLineLayout to LegacyLineLayout</short_desc>
          <delta_ts>2021-06-01 06:59: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>Layout and Rendering</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>annulen</cc>
    
    <cc>bfulgham</cc>
    
    <cc>changseok</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>pdr</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1765531</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-06-01 01:40:56 -0700</bug_when>
    <thetext>Since we now handle most inline content with LFC, rename the legacy path as &quot;legacy&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765532</commentid>
    <comment_count>1</comment_count>
      <attachid>430238</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-06-01 01:42:12 -0700</bug_when>
    <thetext>Created attachment 430238
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765536</commentid>
    <comment_count>2</comment_count>
      <attachid>430240</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-06-01 02:11:27 -0700</bug_when>
    <thetext>Created attachment 430240
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765599</commentid>
    <comment_count>3</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-06-01 06:58:30 -0700</bug_when>
    <thetext>Committed r278305 (238342@main): &lt;https://commits.webkit.org/238342@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 430240.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765600</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-06-01 06:59:20 -0700</bug_when>
    <thetext>&lt;rdar://problem/78712741&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430238</attachid>
            <date>2021-06-01 01:42:12 -0700</date>
            <delta_ts>2021-06-01 02:11:27 -0700</delta_ts>
            <desc>patch</desc>
            <filename>legacy-line-layout-rename.patch</filename>
            <type>text/plain</type>
            <size>159484</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyOTM5MmUzODA1MTEuLjMyMWYwYjAwODU1YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDEyNSBAQAorMjAyMS0wNi0wMSAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5j
b20+CisKKyAgICAgICAgUmVuYW1lIENvbXBsZXhMaW5lTGF5b3V0IHRvIExlZ2FjeUxpbmVMYXlv
dXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjQ4
MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNpbmNl
IHdlIG5vdyBoYW5kbGUgbW9zdCBpbmxpbmUgY29udGVudCB3aXRoIExGQywgcmVuYW1lIHRoZSBs
ZWdhY3kgcGF0aCBhcyAibGVnYWN5Ii4KKworICAgICAgICAqIEhlYWRlcnMuY21ha2U6CisgICAg
ICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIGxheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbklu
bGluZUNvbnRlbnRCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0
aW9uOjpsaW5lT3ZlcmZsb3dXaWR0aCk6CisgICAgICAgICogcmVuZGVyaW5nL0lubGluZUl0ZXJh
dG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpJc29sYXRlVHJhY2tlcjo6YWRkRmFrZVJ1bklmTmVj
ZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUJpZGlSZXNvbHZlcjo6YXBwZW5kUnVu
SW50ZXJuYWwpOgorICAgICAgICAqIHJlbmRlcmluZy9MZWdhY3lMaW5lTGF5b3V0LmNwcDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Db21wbGV4TGluZUxheW91dC5jcHAu
CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lMaW5lTGF5b3V0OjpMZWdhY3lMaW5lTGF5b3V0KToK
KyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUxpbmVMYXlvdXQ6On5MZWdhY3lMaW5lTGF5b3V0KToK
KyAgICAgICAgKFdlYkNvcmU6OmRldGVybWluZURpcmVjdGlvbmFsaXR5KToKKyAgICAgICAgKFdl
YkNvcmU6OmNyZWF0ZVJ1bik6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lMaW5lTGF5b3V0Ojph
cHBlbmRSdW5zRm9yT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUxpbmVMYXlvdXQ6
OmNyZWF0ZVJvb3RJbmxpbmVCb3gpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5TGluZUxheW91
dDo6Y3JlYXRlQW5kQXBwZW5kUm9vdElubGluZUJveCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdh
Y3lMaW5lTGF5b3V0OjpjcmVhdGVJbmxpbmVCb3hGb3JSZW5kZXJlcik6CisgICAgICAgIChXZWJD
b3JlOjpkaXJ0eUxpbmVCb3hlc0ZvclJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcmVu
dElzQ29uc3RydWN0ZWRPckhhdmVOZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUxpbmVM
YXlvdXQ6OmNyZWF0ZUxpbmVCb3hlcyk6CisgICAgICAgIChXZWJDb3JlOjplbmRzV2l0aEhUTUxT
cGFjZXMpOgorICAgICAgICAoV2ViQ29yZTo6cmVhY2hlZEVuZE9mVGV4dFJlbmRlcmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxlZ2FjeUxpbmVMYXlvdXQ6OmNvbnN0cnVjdExpbmUpOgorICAgICAg
ICAoV2ViQ29yZTo6TGVnYWN5TGluZUxheW91dDo6dGV4dEFsaWdubWVudEZvckxpbmUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlTG9naWNhbFdpZHRoRm9yTGVmdEFsaWduZWRCbG9j
ayk6CisgICAgICAgIChXZWJDb3JlOjp1cGRhdGVMb2dpY2FsV2lkdGhGb3JSaWdodEFsaWduZWRC
bG9jayk6CisgICAgICAgIChXZWJDb3JlOjp1cGRhdGVMb2dpY2FsV2lkdGhGb3JDZW50ZXJBbGln
bmVkQmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5TGluZUxheW91dDo6c2V0TWFyZ2lu
c0ZvclJ1YnlSdW4pOgorICAgICAgICAoV2ViQ29yZTo6c2V0TG9naWNhbFdpZHRoRm9yVGV4dFJ1
bik6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lMaW5lTGF5b3V0Ojp1cGRhdGVSdWJ5Rm9ySnVz
dGlmaWVkVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lMaW5lTGF5b3V0Ojpjb21wdXRl
RXhwYW5zaW9uRm9ySnVzdGlmaWVkVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lMaW5l
TGF5b3V0Ojp1cGRhdGVMb2dpY2FsV2lkdGhGb3JBbGlnbm1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6dXBkYXRlTG9naWNhbElubGluZVBvc2l0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpMZWdh
Y3lMaW5lTGF5b3V0Ojpjb21wdXRlSW5saW5lRGlyZWN0aW9uUG9zaXRpb25zRm9yTGluZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpleHBhbnNpb25CZWhhdmlvckZvcklubGluZVRleHRCb3gpOgorICAg
ICAgICAoV2ViQ29yZTo6YXBwbHlFeHBhbnNpb25CZWhhdmlvcik6CisgICAgICAgIChXZWJDb3Jl
OjppbmxpbmVBbmNlc3Rvckhhc1N0YXJ0Qm9yZGVyUGFkZGluZ09yTWFyZ2luKToKKyAgICAgICAg
KFdlYkNvcmU6OmlubGluZUFuY2VzdG9ySGFzRW5kQm9yZGVyUGFkZGluZ09yTWFyZ2luKToKKyAg
ICAgICAgKFdlYkNvcmU6OmlzTGFzdEluRmxvd1J1bik6CisgICAgICAgIChXZWJDb3JlOjpMZWdh
Y3lMaW5lTGF5b3V0Ojpjb21wdXRlSW5saW5lRGlyZWN0aW9uUG9zaXRpb25zRm9yU2VnbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lMaW5lTGF5b3V0OjpyZW1vdmVJbmxpbmVCb3ggY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5TGluZUxheW91dDo6Y29tcHV0ZUJsb2NrRGly
ZWN0aW9uUG9zaXRpb25zRm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjppc0NvbGxhcHNpYmxl
U3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZEZpcnN0VHJhaWxpbmdTcGFjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpMZWdhY3lMaW5lTGF5b3V0OjpoYW5kbGVUcmFpbGluZ1NwYWNlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpMZWdhY3lMaW5lTGF5b3V0OjphcHBlbmRGbG9hdGluZ09iamVjdFRv
TGFzdExpbmUpOgorICAgICAgICAoV2ViQ29yZTo6bm90aWZ5UmVzb2x2ZXJUb1Jlc3VtZUluSXNv
bGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRVcFJlc29sdmVyVG9SZXN1bWVJbklzb2xhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0QmlkaVJ1bnNGb3JTZWdtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxlZ2FjeUxpbmVMYXlvdXQ6OmNyZWF0ZUxpbmVCb3hlc0Zyb21CaWRpUnVu
cyk6CisgICAgICAgIChXZWJDb3JlOjpkZWxldGVMaW5lUmFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6cmVwYWludERpcnR5RmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUxpbmVMYXlv
dXQ6OmxheW91dFJ1bnNBbmRGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5TGluZUxh
eW91dDo6cmVzdGFydExheW91dFJ1bnNBbmRGbG9hdHNJblJhbmdlKToKKyAgICAgICAgKFdlYkNv
cmU6OkxlZ2FjeUxpbmVMYXlvdXQ6OmxheW91dFJ1bnNBbmRGbG9hdHNJblJhbmdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxlZ2FjeUxpbmVMYXlvdXQ6OnJlYXR0YWNoQ2xlYW5MaW5lRmxvYXRzKToK
KyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUxpbmVMYXlvdXQ6OmxpbmtUb0VuZExpbmVJZk5lZWRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lMaW5lTGF5b3V0OjpsYXlvdXRMaW5lQm94ZXMp
OgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5TGluZUxheW91dDo6Y2hlY2tGbG9hdEluQ2xlYW5M
aW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUxpbmVMYXlvdXQ6OmRldGVybWluZVN0YXJ0
UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5TGluZUxheW91dDo6ZGV0ZXJtaW5l
RW5kUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5TGluZUxheW91dDo6Y2hlY2tQ
YWdpbmF0aW9uQW5kRmxvYXRzQXRFbmRMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUxp
bmVMYXlvdXQ6OmxpbmVXaWR0aEZvclBhZ2luYXRlZExpbmVDaGFuZ2VkIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxlZ2FjeUxpbmVMYXlvdXQ6Om1hdGNoZWRFbmRMaW5lKToKKyAgICAgICAg
KFdlYkNvcmU6OkxlZ2FjeUxpbmVMYXlvdXQ6OmFkZE92ZXJmbG93RnJvbUlubGluZUNoaWxkcmVu
KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUxpbmVMYXlvdXQ6OmxpbmVDb3VudCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lMaW5lTGF5b3V0OjpsaW5lQ291bnRVbnRpbCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lMaW5lTGF5b3V0OjpkZWxldGVFbGxpcHNpc0xp
bmVCb3hlcyk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lMaW5lTGF5b3V0OjpjaGVja0xpbmVz
Rm9yVGV4dE92ZXJmbG93KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUxpbmVMYXlvdXQ6OnBv
c2l0aW9uTmV3RmxvYXRPbkxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5TGluZUxheW91
dDo6dXBkYXRlRnJhZ21lbnRGb3JMaW5lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2Fj
eUxpbmVMYXlvdXQ6OnN0eWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUxpbmVM
YXlvdXQ6OmxheW91dENvbnRleHQgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9MZWdhY3lM
aW5lTGF5b3V0Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ29tcGxl
eExpbmVMYXlvdXQuaC4KKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUxpbmVMYXlvdXQ6OmxpbmVC
b3hlcyk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lMaW5lTGF5b3V0OjpsaW5lQm94ZXMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5TGluZUxheW91dDo6Zmlyc3RSb290Qm94IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUxpbmVMYXlvdXQ6Omxhc3RSb290Qm94IGNv
bnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6d2lsbEJlRGVzdHJveWVkKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6bGF5b3V0SW5saW5lQ2hpbGRyZW4pOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpzdGFydEFsaWduZWRPZmZzZXRGb3JMaW5lKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6YWRqdXN0TGluZVBvc2l0aW9uRm9yUGFn
aW5hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OnN0eWxlRGlkQ2hh
bmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6aGl0VGVzdElubGluZUNo
aWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6YWRkT3ZlcmZsb3dG
cm9tSW5saW5lQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93Ojpp
bmxpbmVCbG9ja0Jhc2VsaW5lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
Rmxvdzo6bGluZUNvdW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxv
dzo6cGFpbnRJbmxpbmVDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zs
b3c6Omhhc0xpbmVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6
ZW5zdXJlTGluZUJveGVzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93Lmg6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmZpcnN0Um9vdEJveCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6Omxhc3RSb290Qm94IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6aGFzTGVnYWN5TGluZUxheW91dCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmxlZ2FjeUxpbmVMYXlv
dXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpsZWdhY3lMaW5l
TGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6aGFzQ29tcGxleExp
bmVMYXlvdXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tG
bG93Ojpjb21wbGV4TGluZUxheW91dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9ja0Zsb3c6OmNvbXBsZXhMaW5lTGF5b3V0KTogRGVsZXRlZC4KKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0
Ojp1c2VzTGVnYWN5TGluZUxheW91dFBhdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGV4dDo6dXNlc0NvbXBsZXhMaW5lTGF5b3V0UGF0aCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRleHQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUm9vdElu
bGluZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSb290SW5saW5lQm94OjpyZW1vdmVMaW5l
Qm94RnJvbVJlbmRlck9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSb290SW5saW5lQm94Ojpl
eHRyYWN0TGluZUJveEZyb21SZW5kZXJPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6Um9vdElu
bGluZUJveDo6YXR0YWNoTGluZUJveFRvUmVuZGVyT2JqZWN0KToKKyAgICAgICAgKiByZW5kZXJp
bmcvbGluZS9MaW5lQnJlYWtlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMaW5lQnJlYWtlcjo6
c2tpcExlYWRpbmdXaGl0ZXNwYWNlKToKKyAgICAgICAgKiByZW5kZXJpbmcvbGluZS9MaW5lQnJl
YWtlci5oOgorICAgICAgICAoV2ViQ29yZTo6TGluZUJyZWFrZXI6OnBvc2l0aW9uTmV3RmxvYXRP
bkxpbmUpOgorCiAyMDIxLTA1LTMxICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbV2ViWFJdIEF0dGFjaCBJT1N1cmZhY2UgdG8gV2ViWFJPcGFxdWVGcmFtZWJ1ZmZl
cgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZSBiL1NvdXJjZS9XZWJD
b3JlL0hlYWRlcnMuY21ha2UKaW5kZXggOWIwYWU3ZmU0Yjg4Li5kMTYyYThiN2I1MTIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUv
SGVhZGVycy5jbWFrZQpAQCAtMTUxNyw3ICsxNTE3LDYgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9G
UkFNRVdPUktfSEVBREVSUwogICAgIHJlbmRlcmluZy9CcmVha0xpbmVzLmgKICAgICByZW5kZXJp
bmcvQ2xpcFBhdGhPcGVyYXRpb24uaAogICAgIHJlbmRlcmluZy9DbGlwUmVjdC5oCi0gICAgcmVu
ZGVyaW5nL0NvbXBsZXhMaW5lTGF5b3V0LmgKICAgICByZW5kZXJpbmcvRXZlbnRSZWdpb24uaAog
ICAgIHJlbmRlcmluZy9GbG9hdGluZ09iamVjdHMuaAogICAgIHJlbmRlcmluZy9HYXBSZWN0cy5o
CkBAIC0xNTMxLDYgKzE1MzAsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFE
RVJTCiAgICAgcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAogICAgIHJlbmRlcmluZy9MYXllckFu
Y2VzdG9yQ2xpcHBpbmdTdGFjay5oCiAgICAgcmVuZGVyaW5nL0xheWVyRnJhZ21lbnQuaAorICAg
IHJlbmRlcmluZy9MZWdhY3lMaW5lTGF5b3V0LmgKICAgICByZW5kZXJpbmcvTWFya2VkVGV4dC5o
CiAgICAgcmVuZGVyaW5nL09yZGVySXRlcmF0b3IuaAogICAgIHJlbmRlcmluZy9PdmVybGFwVGVz
dFJlcXVlc3RDbGllbnQuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQg
Yi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCBlYTkwZjI3ZWIxODYuLmMzNGQ5ZDY5
ZDkxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNl
L1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTIyMzksNyArMjIzOSw2IEBAIHJlbmRlcmluZy9CcmVh
a0xpbmVzLmNwcAogcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHAKIHJlbmRlcmluZy9DYXJldFJlY3RD
b21wdXRhdGlvbi5jcHAKIHJlbmRlcmluZy9DbGlwUmVjdC5jcHAKLXJlbmRlcmluZy9Db21wbGV4
TGluZUxheW91dC5jcHAKIHJlbmRlcmluZy9Db250ZW50ZnVsUGFpbnRDaGVja2VyLmNwcAogcmVu
ZGVyaW5nL0NvdW50ZXJOb2RlLmNwcAogcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcApAQCAtMjI2
NSw2ICsyMjY0LDcgQEAgcmVuZGVyaW5nL0xheWVyQW5jZXN0b3JDbGlwcGluZ1N0YWNrLmNwcAog
cmVuZGVyaW5nL0xheWVyT3ZlcmxhcE1hcC5jcHAKIHJlbmRlcmluZy9MYXlvdXREaXNhbGxvd2Vk
U2NvcGUuY3BwCiByZW5kZXJpbmcvTGF5b3V0UmVwYWludGVyLmNwcAorcmVuZGVyaW5nL0xlZ2Fj
eUxpbmVMYXlvdXQuY3BwCiByZW5kZXJpbmcvTWFya2VkVGV4dC5jcHAKIHJlbmRlcmluZy9NYXJr
ZWRUZXh0U3R5bGUuY3BwCiByZW5kZXJpbmcvT3JkZXJJdGVyYXRvci5jcHAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBjOTliZmNi
OTNiNTQuLjE3Y2ZkMjNlNDk2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNTI5MCw3ICs1MjkwLDcgQEAKIAkJRTRFMzlBRkIx
MzMwRUZBODAwM0FCMjc0IC8qIExlZ2FjeVRpbGVMYXllclBvb2wuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0RTM5QUZBMTMzMEVGQTgwMDNBQjI3NCAv
KiBMZWdhY3lUaWxlTGF5ZXJQb29sLmggKi87IH07CiAJCUU0RThCNEVDMjE2Qjc5RTUwMEI4ODM0
RCAvKiBTeXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRFOEI0RUEyMTZCNzlFNTAwQjg4MzREIC8qIFN5c3Rl
bUZvbnREYXRhYmFzZUNvcmVUZXh0LmggKi87IH07CiAJCUU0RThCNEY1MjE2Qjk1NjUwMEI4ODM0
RCAvKiBGb250Q2FzY2FkZURlc2NyaXB0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFNEU4QjRGMjIxNkI4QjYwMDBCODgzNEQgLyogRm9udENhc2Nh
ZGVEZXNjcmlwdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07Ci0JCUU0RTk0RDYxMjJGRjE1OEEwMEREMTkxRiAvKiBDb21wbGV4TGluZUxheW91dC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRBMUFDNzgy
MkZBRkQ1MDAwMTdCNzVCIC8qIENvbXBsZXhMaW5lTGF5b3V0LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRTRFOTRENjEyMkZGMTU4QTAwREQxOTFG
IC8qIExlZ2FjeUxpbmVMYXlvdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEU0QTFBQzc4MjJGQUZENTAwMDE3Qjc1QiAvKiBMZWdhY3lMaW5lTGF5b3V0
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTRG
MEJFMzEyNTcxMkY2RTAwOUU3NDMxIC8qIENhcmV0UmVjdENvbXB1dGF0aW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEYwQkUyRTI1NzEwQTc1MDA5
RTc0MzEgLyogQ2FyZXRSZWN0Q29tcHV0YXRpb24uaCAqLzsgfTsKIAkJRTRGMzhEMUIyNjI2RjEz
QjAwN0IxMDY0IC8qIERlZmF1bHRSZXNvdXJjZUxvYWRQcmlvcml0eS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRGMzhEMTkyNjI2RjEzQjAwN0IxMDY0
IC8qIERlZmF1bHRSZXNvdXJjZUxvYWRQcmlvcml0eS5oICovOyB9OwogCQlFNEY5RUVGMzE1NkRB
MDA3MDBEMjNFN0UgLyogU3R5bGVTaGVldENvbnRlbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEY5RUVGMTE1NkQ4NEM0MDBEMjNFN0UgLyogU3R5
bGVTaGVldENvbnRlbnRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKQEAgLTE0NDgzLDcgKzE0NDgzLDcgQEAKIAkJQkNFQTQ3N0MwOTdDQUFDODAwOTRD
OUU0IC8qIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNFQTQ3N0QwOTdDQUFDODAwOTRDOUU0IC8qIENT
U0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUJDRUE0NzhDMDk3Q0FBQzgwMDk0QzlFNCAvKiBDU1NWYWx1ZUtleXdvcmRzLmlu
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBDU1NWYWx1ZUtleXdvcmRzLmluOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlCQ0VBNDgxMzA5N0Q5MzAyMDA5NEM5RTQgLyogQ29tcGxleExp
bmVMYXlvdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbXBs
ZXhMaW5lTGF5b3V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNFQTQ4MTMw
OTdEOTMwMjAwOTRDOUU0IC8qIExlZ2FjeUxpbmVMYXlvdXQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExlZ2FjeUxpbmVMYXlvdXQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlCQ0VBNDgxNTA5N0Q5MzAyMDA5NEM5RTQgLyogQnJlYWtMaW5lcy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQnJlYWtMaW5lcy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDRUE0ODE2MDk3RDkzMDIwMDk0QzlFNCAv
KiBCcmVha0xpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCcmVha0xp
bmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDRUE0ODFBMDk3RDkzMDIwMDk0
QzlFNCAvKiBJbmxpbmVUZXh0Qm94LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBJbmxpbmVUZXh0Qm94LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTE2NjI5LDcgKzE2NjI5LDcgQEAKIAkJRTRBMDA3ODIxQjgyMEVDODAwMkM1QTZFIC8qIERhdGFV
UkxEZWNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERhdGFVUkxEZWNv
ZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0QTAwNzg0MUI4MjBFRDMwMDJD
NUE2RSAvKiBEYXRhVVJMRGVjb2Rlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBEYXRhVVJMRGVjb2Rlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUU0QTE4MjJGMUYxM0JFNTgwMEZFRjY5OCAvKiBTdHlsZUludmFsaWRhdGlvbkZ1bmN0aW9ucy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTdHlsZUludmFsaWRhdGlvbkZ1bmN0aW9ucy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlFNEExQUM3ODIyRkFGRDUwMDAxN0I3NUIgLyogQ29tcGxleExp
bmVMYXlvdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tcGxleExpbmVM
YXlvdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTRBMUFDNzgyMkZBRkQ1MDAw
MTdCNzVCIC8qIExlZ2FjeUxpbmVMYXlvdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTGVnYWN5TGluZUxheW91dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
NEE2NjRDNDI1MjFCNzc3MDA3MDgxREMgLyogTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvck1v
ZGVyblBhdGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF5b3V0SW50ZWdy
YXRpb25SdW5JdGVyYXRvck1vZGVyblBhdGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRTRBNjY0QzUyNTIxQjc3ODAwNzA4MURDIC8qIExheW91dEludGVncmF0aW9uUnVuSXRlcmF0
b3JMZWdhY3lQYXRoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91dElu
dGVncmF0aW9uUnVuSXRlcmF0b3JMZWdhY3lQYXRoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUU0QTY2NEM2MjUyMUI3NzgwMDcwODFEQyAvKiBMYXlvdXRJbnRlZ3JhdGlvblJ1bkl0
ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91dEludGVncmF0
aW9uUnVuSXRlcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTMwMTQ2LDgg
KzMwMTQ2LDYgQEAKIAkJCQk1ODAzNzE1RjFBNjZGMDBBMDBCQUY1MTkgLyogQ2xpcFJlY3QuY3Bw
ICovLAogCQkJCTU4MDM3MTYwMUE2NkYwMEEwMEJBRjUxOSAvKiBDbGlwUmVjdC5oICovLAogCQkJ
CUJDREQ0NTREMTIzNkM5NUMwMDlBNzk4NSAvKiBDb2x1bW5JbmZvLmggKi8sCi0JCQkJQkNFQTQ4
MTMwOTdEOTMwMjAwOTRDOUU0IC8qIENvbXBsZXhMaW5lTGF5b3V0LmNwcCAqLywKLQkJCQlFNEEx
QUM3ODIyRkFGRDUwMDAxN0I3NUIgLyogQ29tcGxleExpbmVMYXlvdXQuaCAqLywKIAkJCQlDQTdF
OUI0ODI0MzYxREM1MDA0RTg5RjYgLyogQ29udGVudGZ1bFBhaW50Q2hlY2tlci5jcHAgKi8sCiAJ
CQkJQ0E3RTlCNDcyNDM2MURDNTAwNEU4OUY2IC8qIENvbnRlbnRmdWxQYWludENoZWNrZXIuaCAq
LywKIAkJCQk5MzkyRjE0RjBBRDE4NjIzMDA2OTFCRDQgLyogQ291bnRlck5vZGUuY3BwICovLApA
QCAtMzAyMDUsNiArMzAyMDMsOCBAQAogCQkJCTlCRDFGNjgwMUYwNDYyQjgwMDFDOUNERCAvKiBM
YXlvdXREaXNhbGxvd2VkU2NvcGUuaCAqLywKIAkJCQlBMTIwQUNBMTEzRjk5ODQ2MDBGRTRBQzcg
LyogTGF5b3V0UmVwYWludGVyLmNwcCAqLywKIAkJCQlBMTIwQUNBMDEzRjk5ODM3MDBGRTRBQzcg
LyogTGF5b3V0UmVwYWludGVyLmggKi8sCisJCQkJQkNFQTQ4MTMwOTdEOTMwMjAwOTRDOUU0IC8q
IExlZ2FjeUxpbmVMYXlvdXQuY3BwICovLAorCQkJCUU0QTFBQzc4MjJGQUZENTAwMDE3Qjc1QiAv
KiBMZWdhY3lMaW5lTGF5b3V0LmggKi8sCiAJCQkJOUJBMjczRjMxNzIyMDZCQjAwOTdDRTQ3IC8q
IExvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXMuaCAqLywKIAkJCQlDRTE4NjY0MjFGNzJFNUI0
MDBBMENBQjYgLyogTWFya2VkVGV4dC5jcHAgKi8sCiAJCQkJQ0UxODY2NDMxRjcyRTVCNDAwQTBD
QUI2IC8qIE1hcmtlZFRleHQuaCAqLywKQEAgLTMyMDM5LDcgKzMyMDM5LDcgQEAKIAkJCQlFMUZF
MTM3NTE4NDAyQTY3MDA4OTJGMTMgLyogQ29tbW9uQ3J5cHRvVXRpbGl0aWVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjYwRjMyQjFERkJCMTA3MDA0MTZENkMgLyogQ29tbW9uVk0uaCBpbiBIZWFk
ZXJzICovLAogCQkJCTdDOTNGMzRBMUFBNkJBNUUwMEE5OEJBQiAvKiBDb21waWxlZENvbnRlbnRF
eHRlbnNpb24uaCBpbiBIZWFkZXJzICovLAotCQkJCUU0RTk0RDYxMjJGRjE1OEEwMEREMTkxRiAv
KiBDb21wbGV4TGluZUxheW91dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTRFOTRENjEyMkZGMTU4
QTAwREQxOTFGIC8qIExlZ2FjeUxpbmVMYXlvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyRjRF
NzhDMUU0NUMzRUYwMDZENzEwNSAvKiBDb21wbGV4VGV4dENvbnRyb2xsZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUU0QkE1MDkwMUJDRkJEOTUwMEUzNEVGNyAvKiBDb21wb3NlZFRyZWVBbmNlc3Rv
ckl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDRGQTE4NTFCQ0E2QjVBMDA5MUI2RUYg
LyogQ29tcG9zZWRUcmVlSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uSW5saW5lQ29u
dGVudEJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91
dEludGVncmF0aW9uSW5saW5lQ29udGVudEJ1aWxkZXIuY3BwCmluZGV4IDRmZjdjM2QwZTdmMC4u
MDM4NGM5Y2Y3NzRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRp
b24vTGF5b3V0SW50ZWdyYXRpb25JbmxpbmVDb250ZW50QnVpbGRlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uSW5saW5lQ29udGVu
dEJ1aWxkZXIuY3BwCkBAIC01OSw3ICs1OSw3IEBAIGlubGluZSBMYXlvdXQ6OklubGluZUxpbmVH
ZW9tZXRyeTo6RW5jbG9zaW5nVG9wQW5kQm90dG9tIG9wZXJhdG9yKyhjb25zdCBMYXlvdXQ6CiAK
IGlubGluZSBzdGF0aWMgZmxvYXQgbGluZU92ZXJmbG93V2lkdGgoY29uc3QgUmVuZGVyQmxvY2tG
bG93JiBmbG93LCBJbmxpbmVMYXlvdXRVbml0IGxpbmVCb3hMb2dpY2FsV2lkdGgsIElubGluZUxh
eW91dFVuaXQgbGluZUNvbnRlbnRMb2dpY2FsV2lkdGgpCiB7Ci0gICAgLy8gRklYTUU6IEl0J3Mg
dGhlIGNvcHkgb2YgdGhlIGxldHMtYWRqdXN0LW92ZXJmbG93LWZvci10aGUtY2FyZXQgYmVoYXZp
b3IgZnJvbSBDb21wbGV4TGluZUxheW91dDo6YWRkT3ZlcmZsb3dGcm9tSW5saW5lQ2hpbGRyZW4u
CisgICAgLy8gRklYTUU6IEl0J3MgdGhlIGNvcHkgb2YgdGhlIGxldHMtYWRqdXN0LW92ZXJmbG93
LWZvci10aGUtY2FyZXQgYmVoYXZpb3IgZnJvbSBMZWdhY3lMaW5lTGF5b3V0OjphZGRPdmVyZmxv
d0Zyb21JbmxpbmVDaGlsZHJlbi4KICAgICBhdXRvIGVuZFBhZGRpbmcgPSBmbG93Lmhhc092ZXJm
bG93Q2xpcCgpID8gZmxvdy5wYWRkaW5nRW5kKCkgOiAwX2x1OwogICAgIGlmICghZW5kUGFkZGlu
ZykKICAgICAgICAgZW5kUGFkZGluZyA9IGZsb3cuZW5kUGFkZGluZ1dpZHRoRm9yQ2FyZXQoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Db21wbGV4TGluZUxheW91dC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ29tcGxleExpbmVMYXlvdXQuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDdjMjhkMzEwNzEuLjAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ29tcGxleExpbmVMYXlvdXQuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMjMyNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAwIExhcnMg
S25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodCByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzIENoYW5nU2VvayBP
aCA8c2hpdmFtaWRvd0BnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQWRvYmUgU3lz
dGVtcyBJbmMuIEFsbCByaWdodCByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
Ci0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJDb21wbGV4TGluZUxheW91dC5oIgotCi0jaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5o
IgotI2luY2x1ZGUgIkJpZGlSZXNvbHZlci5oIgotI2luY2x1ZGUgIkJyZWFraW5nQ29udGV4dC5o
IgotI2luY2x1ZGUgIkZsb2F0aW5nT2JqZWN0cy5oIgotI2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlv
bXMuaCIKLSNpbmNsdWRlICJJbmxpbmVFbGVtZW50Qm94LmgiCi0jaW5jbHVkZSAiSW5saW5lSXRl
cmF0b3IuaCIKLSNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCi0jaW5jbHVkZSAiSW5saW5lVGV4
dEJveFN0eWxlLmgiCi0jaW5jbHVkZSAiTGluZUxheW91dFN0YXRlLmgiCi0jaW5jbHVkZSAiTG9n
Z2luZy5oIgotI2luY2x1ZGUgIlJlbmRlckJsb2NrRmxvdy5oIgotI2luY2x1ZGUgIlJlbmRlckZy
YWdtZW50Q29udGFpbmVyLmgiCi0jaW5jbHVkZSAiUmVuZGVyRnJhZ21lbnRlZEZsb3cuaCIKLSNp
bmNsdWRlICJSZW5kZXJMYXlvdXRTdGF0ZS5oIgotI2luY2x1ZGUgIlJlbmRlckxpbmVCcmVhay5o
IgotI2luY2x1ZGUgIlJlbmRlclJ1YnlCYXNlLmgiCi0jaW5jbHVkZSAiUmVuZGVyUnVieVRleHQu
aCIKLSNpbmNsdWRlICJSZW5kZXJTVkdUZXh0LmgiCi0jaW5jbHVkZSAiUmVuZGVyVmlldy5oIgot
I2luY2x1ZGUgIlNWR1Jvb3RJbmxpbmVCb3guaCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2lu
Y2x1ZGUgIlRyYWlsaW5nRmxvYXRzUm9vdElubGluZUJveC5oIgotI2luY2x1ZGUgIlZlcnRpY2Fs
UG9zaXRpb25DYWNoZS5oIgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1Db21wbGV4TGluZUxheW91dDo6Q29tcGxleExpbmVMYXlvdXQoUmVu
ZGVyQmxvY2tGbG93JiBmbG93KQotICAgIDogbV9mbG93KGZsb3cpCi17Ci19Ci0KLUNvbXBsZXhM
aW5lTGF5b3V0Ojp+Q29tcGxleExpbmVMYXlvdXQoKQotewotICAgIGlmIChtX2Zsb3cuY29udGFp
bnNGbG9hdHMoKSkKLSAgICAgICAgbV9mbG93LmZsb2F0aW5nT2JqZWN0cygpLT5jbGVhckxpbmVC
b3hUcmVlUG9pbnRlcnMoKTsKLQotICAgIGxpbmVCb3hlcygpLmRlbGV0ZUxpbmVCb3hUcmVlKCk7
Ci19OwotCi1zdGF0aWMgdm9pZCBkZXRlcm1pbmVEaXJlY3Rpb25hbGl0eShUZXh0RGlyZWN0aW9u
JiBkaXIsIElubGluZUl0ZXJhdG9yIGl0ZXIpCi17Ci0gICAgd2hpbGUgKCFpdGVyLmF0RW5kKCkp
IHsKLSAgICAgICAgaWYgKGl0ZXIuYXRQYXJhZ3JhcGhTZXBhcmF0b3IoKSkKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgaWYgKFVDaGFyIGN1cnJlbnQgPSBpdGVyLmN1cnJlbnQoKSkgewot
ICAgICAgICAgICAgVUNoYXJEaXJlY3Rpb24gY2hhckRpcmVjdGlvbiA9IHVfY2hhckRpcmVjdGlv
bihjdXJyZW50KTsKLSAgICAgICAgICAgIGlmIChjaGFyRGlyZWN0aW9uID09IFVfTEVGVF9UT19S
SUdIVCkgewotICAgICAgICAgICAgICAgIGRpciA9IFRleHREaXJlY3Rpb246OkxUUjsKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoY2hhckRp
cmVjdGlvbiA9PSBVX1JJR0hUX1RPX0xFRlQgfHwgY2hhckRpcmVjdGlvbiA9PSBVX1JJR0hUX1RP
X0xFRlRfQVJBQklDKSB7Ci0gICAgICAgICAgICAgICAgZGlyID0gVGV4dERpcmVjdGlvbjo6UlRM
OwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgICBpdGVyLmluY3JlbWVudCgpOwotICAgIH0KLX0KLQotaW5saW5lIHN0ZDo6dW5pcXVlX3B0
cjxCaWRpUnVuPiBjcmVhdGVSdW4oaW50IHN0YXJ0LCBpbnQgZW5kLCBSZW5kZXJPYmplY3QmIG9i
aiwgSW5saW5lQmlkaVJlc29sdmVyJiByZXNvbHZlcikKLXsKLSAgICByZXR1cm4gbWFrZVVuaXF1
ZTxCaWRpUnVuPihzdGFydCwgZW5kLCBvYmosIHJlc29sdmVyLmNvbnRleHQoKSwgcmVzb2x2ZXIu
ZGlyKCkpOwotfQotCi12b2lkIENvbXBsZXhMaW5lTGF5b3V0OjphcHBlbmRSdW5zRm9yT2JqZWN0
KEJpZGlSdW5MaXN0PEJpZGlSdW4+KiBydW5zLCBpbnQgc3RhcnQsIGludCBlbmQsIFJlbmRlck9i
amVjdCYgb2JqLCBJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyKQotewotICAgIGlmIChzdGFy
dCA+IGVuZCB8fCBSZW5kZXJCbG9jazo6c2hvdWxkU2tpcENyZWF0aW5nUnVuc0Zvck9iamVjdChv
YmopKQotICAgICAgICByZXR1cm47Ci0KLSAgICBMaW5lV2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0
ZSYgbGluZVdoaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGUgPSByZXNvbHZlci53aGl0ZXNwYWNlQ29s
bGFwc2luZ1N0YXRlKCk7Ci0gICAgYm9vbCBoYXZlTmV4dFRyYW5zaXRpb24gPSAobGluZVdoaXRl
c3BhY2VDb2xsYXBzaW5nU3RhdGUuY3VycmVudFRyYW5zaXRpb24oKSA8IGxpbmVXaGl0ZXNwYWNl
Q29sbGFwc2luZ1N0YXRlLm51bVRyYW5zaXRpb25zKCkpOwotICAgIElubGluZUl0ZXJhdG9yIG5l
eHRUcmFuc2l0aW9uOwotICAgIGlmIChoYXZlTmV4dFRyYW5zaXRpb24pCi0gICAgICAgIG5leHRU
cmFuc2l0aW9uID0gbGluZVdoaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGUudHJhbnNpdGlvbnMoKVts
aW5lV2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZS5jdXJyZW50VHJhbnNpdGlvbigpXTsKLSAgICBp
ZiAobGluZVdoaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGUuYmV0d2VlblRyYW5zaXRpb25zKCkpIHsK
LSAgICAgICAgaWYgKCFoYXZlTmV4dFRyYW5zaXRpb24gfHwgKCZvYmogIT0gbmV4dFRyYW5zaXRp
b24ucmVuZGVyZXIoKSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIC8vIFRoaXMgaXMg
YSBuZXcgc3RhcnQgcG9pbnQuIFN0b3AgaWdub3Jpbmcgb2JqZWN0cyBhbmQKLSAgICAgICAgLy8g
YWRqdXN0IG91ciBzdGFydC4KLSAgICAgICAgc3RhcnQgPSBuZXh0VHJhbnNpdGlvbi5vZmZzZXQo
KTsKLSAgICAgICAgbGluZVdoaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGUuaW5jcmVtZW50Q3VycmVu
dFRyYW5zaXRpb24oKTsKLSAgICAgICAgaWYgKHN0YXJ0IDwgZW5kKSB7Ci0gICAgICAgICAgICBh
cHBlbmRSdW5zRm9yT2JqZWN0KHJ1bnMsIHN0YXJ0LCBlbmQsIG9iaiwgcmVzb2x2ZXIpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCFo
YXZlTmV4dFRyYW5zaXRpb24gfHwgKCZvYmogIT0gbmV4dFRyYW5zaXRpb24ucmVuZGVyZXIoKSkp
IHsKLSAgICAgICAgICAgIGlmIChydW5zKQotICAgICAgICAgICAgICAgIHJ1bnMtPmFwcGVuZFJ1
bihjcmVhdGVSdW4oc3RhcnQsIGVuZCwgb2JqLCByZXNvbHZlcikpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQW4gZW5kIHRyYW5zaXRpb24gaGFzIGJlZW4g
ZW5jb3VudGVyZWQgd2l0aGluIG91ciBvYmplY3QuIFdlIG5lZWQgdG8gYXBwZW5kIGEgcnVuIHdp
dGggb3VyIGVuZHBvaW50LgotICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8aW50PihuZXh0VHJhbnNp
dGlvbi5vZmZzZXQoKSArIDEpIDw9IGVuZCkgewotICAgICAgICAgICAgbGluZVdoaXRlc3BhY2VD
b2xsYXBzaW5nU3RhdGUuaW5jcmVtZW50Q3VycmVudFRyYW5zaXRpb24oKTsKLSAgICAgICAgICAg
IC8vIFRoZSBlbmQgb2YgdGhlIGxpbmUgaXMgYmVmb3JlIHRoZSBvYmplY3Qgd2UncmUgaW5zcGVj
dGluZy4gU2tpcCBldmVyeXRoaW5nIGFuZCByZXR1cm4KLSAgICAgICAgICAgIGlmIChuZXh0VHJh
bnNpdGlvbi5yZWZlcnNUb0VuZE9mUHJldmlvdXNOb2RlKCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PGludD4obmV4dFRyYW5zaXRpb24ub2Zm
c2V0KCkgKyAxKSA+IHN0YXJ0ICYmIHJ1bnMpCi0gICAgICAgICAgICAgICAgcnVucy0+YXBwZW5k
UnVuKGNyZWF0ZVJ1bihzdGFydCwgbmV4dFRyYW5zaXRpb24ub2Zmc2V0KCkgKyAxLCBvYmosIHJl
c29sdmVyKSk7Ci0gICAgICAgICAgICBhcHBlbmRSdW5zRm9yT2JqZWN0KHJ1bnMsIG5leHRUcmFu
c2l0aW9uLm9mZnNldCgpICsgMSwgZW5kLCBvYmosIHJlc29sdmVyKTsKLSAgICAgICAgfSBlbHNl
IGlmIChydW5zKQotICAgICAgICAgICAgcnVucy0+YXBwZW5kUnVuKGNyZWF0ZVJ1bihzdGFydCwg
ZW5kLCBvYmosIHJlc29sdmVyKSk7Ci0gICAgfQotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8Um9vdElu
bGluZUJveD4gQ29tcGxleExpbmVMYXlvdXQ6OmNyZWF0ZVJvb3RJbmxpbmVCb3goKQotewotICAg
IGlmIChpczxSZW5kZXJTVkdUZXh0PihtX2Zsb3cpKSB7Ci0gICAgICAgIGF1dG8gYm94ID0gbWFr
ZVVuaXF1ZTxTVkdSb290SW5saW5lQm94Pihkb3duY2FzdDxSZW5kZXJTVkdUZXh0PihtX2Zsb3cp
KTsKLSAgICAgICAgYm94LT5zZXRIYXNWaXJ0dWFsTG9naWNhbEhlaWdodCgpOwotICAgICAgICBy
ZXR1cm4gYm94OwotICAgIH0KLSAgICAgICAgCi0gICAgcmV0dXJuIG1ha2VVbmlxdWU8Um9vdElu
bGluZUJveD4obV9mbG93KTsKLX0KLQotUm9vdElubGluZUJveCogQ29tcGxleExpbmVMYXlvdXQ6
OmNyZWF0ZUFuZEFwcGVuZFJvb3RJbmxpbmVCb3goKQotewotICAgIGF1dG8gbmV3Um9vdEJveCA9
IGNyZWF0ZVJvb3RJbmxpbmVCb3goKTsKLSAgICBSb290SW5saW5lQm94KiByb290Qm94ID0gbmV3
Um9vdEJveC5nZXQoKTsKLSAgICBtX2xpbmVCb3hlcy5hcHBlbmRMaW5lQm94KFdURk1vdmUobmV3
Um9vdEJveCkpOwotCi0gICAgaWYgKFVOTElLRUxZKEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxp
dHlFbmFibGVkKCkpICYmIGZpcnN0Um9vdEJveCgpID09IHJvb3RCb3gpIHsKLSAgICAgICAgaWYg
KEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gbV9mbG93LmRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVj
dENhY2hlKCkpCi0gICAgICAgICAgICBjYWNoZS0+ZGVmZXJSZWNvbXB1dGVJc0lnbm9yZWQobV9m
bG93LmVsZW1lbnQoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJvb3RCb3g7Ci19Ci0KLUlubGlu
ZUJveCogQ29tcGxleExpbmVMYXlvdXQ6OmNyZWF0ZUlubGluZUJveEZvclJlbmRlcmVyKFJlbmRl
ck9iamVjdCogcmVuZGVyZXIsIGJvb2wgaXNPbmx5UnVuKQotewotICAgIGlmIChyZW5kZXJlciA9
PSAmbV9mbG93KQotICAgICAgICByZXR1cm4gY3JlYXRlQW5kQXBwZW5kUm9vdElubGluZUJveCgp
OwotCi0gICAgaWYgKGlzPFJlbmRlclRleHQ+KCpyZW5kZXJlcikpCi0gICAgICAgIHJldHVybiBk
b3duY2FzdDxSZW5kZXJUZXh0PigqcmVuZGVyZXIpLmNyZWF0ZUlubGluZVRleHRCb3goKTsKLQot
ICAgIGlmIChpczxSZW5kZXJCb3g+KCpyZW5kZXJlcikpIHsKLSAgICAgICAgLy8gRklYTUU6IFRo
aXMgaXMgdGVycmlibGUuIFRoaXMgYnJhbmNoIHJldHVybnMgYW4gKm93bmVkKiBwb2ludGVyIQot
ICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyQm94PigqcmVuZGVyZXIpLmNyZWF0ZUlubGlu
ZUJveCgpLnJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICBpZiAoaXM8UmVuZGVyTGluZUJyZWFrPigq
cmVuZGVyZXIpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIHRlcnJpYmxlLiBUaGlzIGJy
YW5jaCByZXR1cm5zIGFuICpvd25lZCogcG9pbnRlciEKLSAgICAgICAgYXV0byBpbmxpbmVCb3gg
PSBkb3duY2FzdDxSZW5kZXJMaW5lQnJlYWs+KCpyZW5kZXJlcikuY3JlYXRlSW5saW5lQm94KCku
cmVsZWFzZSgpOwotICAgICAgICAvLyBXZSBvbmx5IHRyZWF0IGEgYm94IGFzIHRleHQgZm9yIGEg
PGJyPiBpZiB3ZSBhcmUgb24gYSBsaW5lIGJ5IG91cnNlbGYgb3IgaW4gc3RyaWN0IG1vZGUKLSAg
ICAgICAgLy8gKE5vdGUgdGhlIHVzZSBvZiBzdHJpY3QgbW9kZS4gSW4gImFsbW9zdCBzdHJpY3Qi
IG1vZGUsIHdlIGRvbid0IHRyZWF0IHRoZSBib3ggZm9yIDxicj4gYXMgdGV4dC4pCi0gICAgICAg
IGlubGluZUJveC0+c2V0QmVoYXZlc0xpa2VUZXh0KGlzT25seVJ1biB8fCByZW5kZXJlci0+ZG9j
dW1lbnQoKS5pbk5vUXVpcmtzTW9kZSgpIHx8IHJlbmRlcmVyLT5pc0xpbmVCcmVha09wcG9ydHVu
aXR5KCkpOwotICAgICAgICByZXR1cm4gaW5saW5lQm94OwotICAgIH0KLQotICAgIHJldHVybiBk
b3duY2FzdDxSZW5kZXJJbmxpbmU+KCpyZW5kZXJlcikuY3JlYXRlQW5kQXBwZW5kSW5saW5lRmxv
d0JveCgpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZGlydHlMaW5lQm94ZXNGb3JSZW5kZXJl
cihSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBib29sIGZ1bGxMYXlvdXQpCi17Ci0gICAgaWYgKGlz
PFJlbmRlclRleHQ+KHJlbmRlcmVyKSkgewotICAgICAgICBSZW5kZXJUZXh0JiByZW5kZXJUZXh0
ID0gZG93bmNhc3Q8UmVuZGVyVGV4dD4ocmVuZGVyZXIpOwotICAgICAgICB1cGRhdGVDb3VudGVy
SWZOZWVkZWQocmVuZGVyVGV4dCk7Ci0gICAgICAgIHJlbmRlclRleHQuZGlydHlMaW5lQm94ZXMo
ZnVsbExheW91dCk7Ci0gICAgfSBlbHNlIGlmIChpczxSZW5kZXJMaW5lQnJlYWs+KHJlbmRlcmVy
KSkKLSAgICAgICAgZG93bmNhc3Q8UmVuZGVyTGluZUJyZWFrPihyZW5kZXJlcikuZGlydHlMaW5l
Qm94ZXMoZnVsbExheW91dCk7Ci0gICAgZWxzZQotICAgICAgICBkb3duY2FzdDxSZW5kZXJJbmxp
bmU+KHJlbmRlcmVyKS5kaXJ0eUxpbmVCb3hlcyhmdWxsTGF5b3V0KTsKLX0KLQotc3RhdGljIGJv
b2wgcGFyZW50SXNDb25zdHJ1Y3RlZE9ySGF2ZU5leHQoSW5saW5lRmxvd0JveCogcGFyZW50Qm94
KQotewotICAgIGRvIHsKLSAgICAgICAgaWYgKHBhcmVudEJveC0+aXNDb25zdHJ1Y3RlZCgpIHx8
IHBhcmVudEJveC0+bmV4dE9uTGluZSgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIHBhcmVudEJveCA9IHBhcmVudEJveC0+cGFyZW50KCk7Ci0gICAgfSB3aGlsZSAocGFyZW50
Qm94KTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUlubGluZUZsb3dCb3gqIENvbXBsZXhMaW5l
TGF5b3V0OjpjcmVhdGVMaW5lQm94ZXMoUmVuZGVyT2JqZWN0KiBvYmosIGNvbnN0IExpbmVJbmZv
JiBsaW5lSW5mbywgSW5saW5lQm94KiBjaGlsZEJveCkKLXsKLSAgICAvLyBTZWUgaWYgd2UgaGF2
ZSBhbiB1bmNvbnN0cnVjdGVkIGxpbmUgYm94IGZvciB0aGlzIG9iamVjdCB0aGF0IGlzIGFsc28K
LSAgICAvLyB0aGUgbGFzdCBpdGVtIG9uIHRoZSBsaW5lLgotICAgIHVuc2lnbmVkIGxpbmVEZXB0
aCA9IDE7Ci0gICAgSW5saW5lRmxvd0JveCogcGFyZW50Qm94ID0gbnVsbHB0cjsKLSAgICBJbmxp
bmVGbG93Qm94KiByZXN1bHQgPSBudWxscHRyOwotICAgIGJvb2wgaGFzRGVmYXVsdExpbmVCb3hD
b250YWluID0gc3R5bGUoKS5saW5lQm94Q29udGFpbigpID09IFJlbmRlclN0eWxlOjppbml0aWFs
TGluZUJveENvbnRhaW4oKTsKLSAgICBkbyB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhf
U0VDVVJJVFlfSU1QTElDQVRJT04oaXM8UmVuZGVySW5saW5lPigqb2JqKSB8fCBvYmogPT0gJm1f
Zmxvdyk7Ci0KLSAgICAgICAgUmVuZGVySW5saW5lKiBpbmxpbmVGbG93ID0gb2JqICE9ICZtX2Zs
b3cgPyBkb3duY2FzdDxSZW5kZXJJbmxpbmU+KG9iaikgOiBudWxscHRyOwotCi0gICAgICAgIC8v
IEdldCB0aGUgbGFzdCBib3ggd2UgbWFkZSBmb3IgdGhpcyByZW5kZXIgb2JqZWN0LgotICAgICAg
ICBwYXJlbnRCb3ggPSBpbmxpbmVGbG93ID8gaW5saW5lRmxvdy0+bGFzdExpbmVCb3goKSA6IGRv
d25jYXN0PFJlbmRlckJsb2NrRmxvdz4oKm9iaikubGFzdFJvb3RCb3goKTsKLQotICAgICAgICAv
LyBJZiB0aGlzIGJveCBvciBpdHMgYW5jZXN0b3IgaXMgY29uc3RydWN0ZWQgdGhlbiBpdCBpcyBm
cm9tIGEgcHJldmlvdXMgbGluZSwgYW5kIHdlIG5lZWQKLSAgICAgICAgLy8gdG8gbWFrZSBhIG5l
dyBib3ggZm9yIG91ciBsaW5lLiBJZiB0aGlzIGJveCBvciBpdHMgYW5jZXN0b3IgaXMgdW5jb25z
dHJ1Y3RlZCBidXQgaXQgaGFzCi0gICAgICAgIC8vIHNvbWV0aGluZyBmb2xsb3dpbmcgaXQgb24g
dGhlIGxpbmUsIHRoZW4gd2Uga25vdyB3ZSBoYXZlIHRvIG1ha2UgYSBuZXcgYm94Ci0gICAgICAg
IC8vIGFzIHdlbGwuIEluIHRoaXMgc2l0dWF0aW9uIG91ciBpbmxpbmUgaGFzIGFjdHVhbGx5IGJl
ZW4gc3BsaXQgaW4gdHdvIG9uCi0gICAgICAgIC8vIHRoZSBzYW1lIGxpbmUgKHRoaXMgY2FuIGhh
cHBlbiB3aXRoIHZlcnkgZmFuY3kgbGFuZ3VhZ2UgbWl4dHVyZXMpLgotICAgICAgICBib29sIGNv
bnN0cnVjdGVkTmV3Qm94ID0gZmFsc2U7Ci0gICAgICAgIGJvb2wgYWxsb3dlZFRvQ29uc3RydWN0
TmV3Qm94ID0gIWhhc0RlZmF1bHRMaW5lQm94Q29udGFpbiB8fCAhaW5saW5lRmxvdyB8fCBpbmxp
bmVGbG93LT5hbHdheXNDcmVhdGVMaW5lQm94ZXMoKTsKLSAgICAgICAgYm9vbCBjYW5Vc2VFeGlz
dGluZ1BhcmVudEJveCA9IHBhcmVudEJveCAmJiAhcGFyZW50SXNDb25zdHJ1Y3RlZE9ySGF2ZU5l
eHQocGFyZW50Qm94KTsKLSAgICAgICAgaWYgKGFsbG93ZWRUb0NvbnN0cnVjdE5ld0JveCAmJiAh
Y2FuVXNlRXhpc3RpbmdQYXJlbnRCb3gpIHsKLSAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gbWFr
ZSBhIG5ldyBib3ggZm9yIHRoaXMgcmVuZGVyIG9iamVjdC4gT25jZQotICAgICAgICAgICAgLy8g
bWFkZSwgd2UgbmVlZCB0byBwbGFjZSBpdCBhdCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGxpbmUu
Ci0gICAgICAgICAgICBJbmxpbmVCb3gqIG5ld0JveCA9IGNyZWF0ZUlubGluZUJveEZvclJlbmRl
cmVyKG9iaik7Ci0gICAgICAgICAgICBwYXJlbnRCb3ggPSBkb3duY2FzdDxJbmxpbmVGbG93Qm94
PihuZXdCb3gpOwotICAgICAgICAgICAgcGFyZW50Qm94LT5zZXRJc0ZpcnN0TGluZShsaW5lSW5m
by5pc0ZpcnN0TGluZSgpKTsKLSAgICAgICAgICAgIHBhcmVudEJveC0+c2V0SXNIb3Jpem9udGFs
KG1fZmxvdy5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKTsKLSAgICAgICAgICAgIGlmICghaGFz
RGVmYXVsdExpbmVCb3hDb250YWluKQotICAgICAgICAgICAgICAgIHBhcmVudEJveC0+Y2xlYXJE
ZXNjZW5kYW50c0hhdmVTYW1lTGluZUhlaWdodEFuZEJhc2VsaW5lKCk7Ci0gICAgICAgICAgICBj
b25zdHJ1Y3RlZE5ld0JveCA9IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoY29uc3Ry
dWN0ZWROZXdCb3ggfHwgY2FuVXNlRXhpc3RpbmdQYXJlbnRCb3gpIHsKLSAgICAgICAgICAgIGlm
ICghcmVzdWx0KQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHBhcmVudEJveDsKLQotICAgICAg
ICAgICAgLy8gSWYgd2UgaGF2ZSBoaXQgdGhlIGJsb2NrIGl0c2VsZiwgdGhlbiB8Ym94fCByZXBy
ZXNlbnRzIHRoZSByb290Ci0gICAgICAgICAgICAvLyBpbmxpbmUgYm94IGZvciB0aGUgbGluZSwg
YW5kIGl0IGRvZXNuJ3QgaGF2ZSB0byBiZSBhcHBlbmRlZCB0byBhbnkgcGFyZW50Ci0gICAgICAg
ICAgICAvLyBpbmxpbmUuCi0gICAgICAgICAgICBpZiAoY2hpbGRCb3gpCi0gICAgICAgICAgICAg
ICAgcGFyZW50Qm94LT5hZGRUb0xpbmUoY2hpbGRCb3gpOwotCi0gICAgICAgICAgICBpZiAoIWNv
bnN0cnVjdGVkTmV3Qm94IHx8IG9iaiA9PSAmbV9mbG93KQotICAgICAgICAgICAgICAgIGJyZWFr
OwotCi0gICAgICAgICAgICBjaGlsZEJveCA9IHBhcmVudEJveDsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8vIElmIHdlJ3ZlIGV4Y2VlZGVkIG91ciBsaW5lIGRlcHRoLCB0aGVuIGp1bXAgc3RyYWln
aHQgdG8gdGhlIHJvb3QgYW5kIHNraXAgYWxsIHRoZSByZW1haW5pbmcKLSAgICAgICAgLy8gaW50
ZXJtZWRpYXRlIGlubGluZSBmbG93cy4KLSAgICAgICAgb2JqID0gKCsrbGluZURlcHRoID49IGNN
YXhMaW5lRGVwdGgpID8gJm1fZmxvdyA6IG9iai0+cGFyZW50KCk7Ci0KLSAgICB9IHdoaWxlICh0
cnVlKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGU+IHN0YXRpYyBpbmxpbmUgYm9vbCBlbmRzV2l0aEhUTUxTcGFjZXMoY29uc3QgQ2hh
cmFjdGVyVHlwZSogY2hhcmFjdGVycywgdW5zaWduZWQgcG9zaXRpb24sIHVuc2lnbmVkIGVuZCkK
LXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBwb3NpdGlvbjsgaSA8IGVuZDsgKytpKSB7Ci0gICAg
ICAgIGlmICghaXNIVE1MU3BhY2UoY2hhcmFjdGVyc1tpXSkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCByZWFjaGVk
RW5kT2ZUZXh0UmVuZGVyZXIoY29uc3QgQmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mIGJpZGlSdW5zKQot
ewotICAgIEJpZGlSdW4qIHJ1biA9IGJpZGlSdW5zLmxvZ2ljYWxseUxhc3RSdW4oKTsKLSAgICBp
ZiAoIXJ1bikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKCFpczxSZW5kZXJUZXh0Pihy
dW4tPnJlbmRlcmVyKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgYXV0byYgdGV4dCA9
IGRvd25jYXN0PFJlbmRlclRleHQ+KHJ1bi0+cmVuZGVyZXIoKSkudGV4dCgpOwotICAgIHVuc2ln
bmVkIHBvc2l0aW9uID0gcnVuLT5zdG9wKCk7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gdGV4dC5s
ZW5ndGgoKTsKLSAgICBpZiAodGV4dC5pczhCaXQoKSkKLSAgICAgICAgcmV0dXJuIGVuZHNXaXRo
SFRNTFNwYWNlcyh0ZXh0LmNoYXJhY3RlcnM4KCksIHBvc2l0aW9uLCBsZW5ndGgpOwotICAgIHJl
dHVybiBlbmRzV2l0aEhUTUxTcGFjZXModGV4dC5jaGFyYWN0ZXJzMTYoKSwgcG9zaXRpb24sIGxl
bmd0aCk7Ci19Ci0KLVJvb3RJbmxpbmVCb3gqIENvbXBsZXhMaW5lTGF5b3V0Ojpjb25zdHJ1Y3RM
aW5lKEJpZGlSdW5MaXN0PEJpZGlSdW4+JiBiaWRpUnVucywgY29uc3QgTGluZUluZm8mIGxpbmVJ
bmZvKQotewotICAgIEFTU0VSVChiaWRpUnVucy5maXJzdFJ1bigpKTsKLQotICAgIElubGluZUZs
b3dCb3gqIHBhcmVudEJveCA9IDA7Ci0gICAgaW50IHJ1bkNvdW50ID0gYmlkaVJ1bnMucnVuQ291
bnQoKSAtIGxpbmVJbmZvLnJ1bnNGcm9tTGVhZGluZ1doaXRlc3BhY2UoKTsKLSAgICAKLSAgICBm
b3IgKEJpZGlSdW4qIHIgPSBiaWRpUnVucy5maXJzdFJ1bigpOyByOyByID0gci0+bmV4dCgpKSB7
Ci0gICAgICAgIC8vIENyZWF0ZSBhIGJveCBmb3Igb3VyIG9iamVjdC4KLSAgICAgICAgYm9vbCBp
c09ubHlSdW4gPSAocnVuQ291bnQgPT0gMSk7Ci0gICAgICAgIGlmIChydW5Db3VudCA9PSAyICYm
ICFyLT5yZW5kZXJlcigpLmlzTGlzdE1hcmtlcigpKQotICAgICAgICAgICAgaXNPbmx5UnVuID0g
KCFzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IGJpZGlSdW5zLmxhc3RSdW4oKSA6
IGJpZGlSdW5zLmZpcnN0UnVuKCkpLT5yZW5kZXJlcigpLmlzTGlzdE1hcmtlcigpOwotCi0gICAg
ICAgIGlmIChsaW5lSW5mby5pc0VtcHR5KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAg
ICAgICBJbmxpbmVCb3gqIGJveCA9IGNyZWF0ZUlubGluZUJveEZvclJlbmRlcmVyKCZyLT5yZW5k
ZXJlcigpLCBpc09ubHlSdW4pOwotICAgICAgICByLT5zZXRCb3goYm94KTsKLQotICAgICAgICAv
LyBJZiB3ZSBoYXZlIG5vIHBhcmVudCBib3ggeWV0LCBvciBpZiB0aGUgcnVuIGlzIG5vdCBzaW1w
bHkgYSBzaWJsaW5nLAotICAgICAgICAvLyB0aGVuIHdlIG5lZWQgdG8gY29uc3RydWN0IGlubGlu
ZSBib3hlcyBhcyBuZWNlc3NhcnkgdG8gcHJvcGVybHkgZW5jbG9zZSB0aGUKLSAgICAgICAgLy8g
cnVuJ3MgaW5saW5lIGJveC4gU2VnbWVudHMgY2FuIG9ubHkgYmUgc2libGluZ3MgYXQgdGhlIHJv
b3QgbGV2ZWwsIGFzCi0gICAgICAgIC8vIHRoZXkgYXJlIHBvc2l0aW9uZWQgc2VwYXJhdGVseS4K
LSAgICAgICAgaWYgKCFwYXJlbnRCb3ggfHwgJnBhcmVudEJveC0+cmVuZGVyZXIoKSAhPSByLT5y
ZW5kZXJlcigpLnBhcmVudCgpKSB7Ci0gICAgICAgICAgICAvLyBDcmVhdGUgbmV3IGlubGluZSBi
b3hlcyBhbGwgdGhlIHdheSBiYWNrIHRvIHRoZSBhcHByb3ByaWF0ZSBpbnNlcnRpb24gcG9pbnQu
Ci0gICAgICAgICAgICBSZW5kZXJPYmplY3QqIHBhcmVudFRvVXNlID0gci0+cmVuZGVyZXIoKS5w
YXJlbnQoKTsKLSAgICAgICAgICAgIHBhcmVudEJveCA9IGNyZWF0ZUxpbmVCb3hlcyhwYXJlbnRU
b1VzZSwgbGluZUluZm8sIGJveCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBB
cHBlbmQgdGhlIGlubGluZSBib3ggdG8gdGhpcyBsaW5lLgotICAgICAgICAgICAgcGFyZW50Qm94
LT5hZGRUb0xpbmUoYm94KTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgdmlzdWFsbHlPcmRl
cmVkID0gci0+cmVuZGVyZXIoKS5zdHlsZSgpLnJ0bE9yZGVyaW5nKCkgPT0gT3JkZXI6OlZpc3Vh
bDsKLSAgICAgICAgYm94LT5zZXRCaWRpTGV2ZWwoci0+bGV2ZWwoKSk7Ci0KLSAgICAgICAgaWYg
KGlzPElubGluZVRleHRCb3g+KCpib3gpKSB7Ci0gICAgICAgICAgICBhdXRvJiB0ZXh0Qm94ID0g
ZG93bmNhc3Q8SW5saW5lVGV4dEJveD4oKmJveCk7Ci0gICAgICAgICAgICB0ZXh0Qm94LnNldFN0
YXJ0KHItPm1fc3RhcnQpOwotICAgICAgICAgICAgdGV4dEJveC5zZXRMZW4oci0+bV9zdG9wIC0g
ci0+bV9zdGFydCk7Ci0gICAgICAgICAgICB0ZXh0Qm94LnNldERpck92ZXJyaWRlKHItPmRpck92
ZXJyaWRlKHZpc3VhbGx5T3JkZXJlZCkpOwotICAgICAgICAgICAgaWYgKHItPm1faGFzSHlwaGVu
KQotICAgICAgICAgICAgICAgIHRleHRCb3guc2V0SGFzSHlwaGVuKHRydWUpOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgLy8gV2Ugc2hvdWxkIGhhdmUgYSByb290IGlubGluZSBib3guIEl0IHNo
b3VsZCBiZSB1bmNvbnN0cnVjdGVkIGFuZAotICAgIC8vIGJlIHRoZSBsYXN0IGNvbnRpbnVhdGlv
biBvZiBvdXIgbGluZSBsaXN0LgotICAgIEFTU0VSVChsYXN0Um9vdEJveCgpICYmICFsYXN0Um9v
dEJveCgpLT5pc0NvbnN0cnVjdGVkKCkpOwotCi0gICAgLy8gU2V0IGJpdHMgb24gb3VyIGlubGlu
ZSBmbG93IGJveGVzIHRoYXQgaW5kaWNhdGUgd2hpY2ggc2lkZXMgc2hvdWxkCi0gICAgLy8gcGFp
bnQgYm9yZGVycy9tYXJnaW5zL3BhZGRpbmcuIFRoaXMga25vd2xlZGdlIHdpbGwgdWx0aW1hdGVs
eSBiZSB1c2VkIHdoZW4KLSAgICAvLyB3ZSBkZXRlcm1pbmUgdGhlIGhvcml6b250YWwgcG9zaXRp
b25zIGFuZCB3aWR0aHMgb2YgYWxsIHRoZSBpbmxpbmUgYm94ZXMgb24KLSAgICAvLyB0aGUgbGlu
ZS4KLSAgICBib29sIGlzTG9naWNhbGx5TGFzdFJ1bldyYXBwZWQgPSBiaWRpUnVucy5sb2dpY2Fs
bHlMYXN0UnVuKCktPnJlbmRlcmVyKCkuaXNUZXh0KCkgPyAhcmVhY2hlZEVuZE9mVGV4dFJlbmRl
cmVyKGJpZGlSdW5zKSA6ICFpczxSZW5kZXJJbmxpbmU+KGJpZGlSdW5zLmxvZ2ljYWxseUxhc3RS
dW4oKS0+cmVuZGVyZXIoKSk7Ci0gICAgbGFzdFJvb3RCb3goKS0+ZGV0ZXJtaW5lU3BhY2luZ0Zv
ckZsb3dCb3hlcyhsaW5lSW5mby5pc0xhc3RMaW5lKCksIGlzTG9naWNhbGx5TGFzdFJ1bldyYXBw
ZWQsICZiaWRpUnVucy5sb2dpY2FsbHlMYXN0UnVuKCktPnJlbmRlcmVyKCkpOwotCi0gICAgLy8g
Tm93IG1hcmsgdGhlIGxpbmUgYm94ZXMgYXMgYmVpbmcgY29uc3RydWN0ZWQuCi0gICAgbGFzdFJv
b3RCb3goKS0+c2V0Q29uc3RydWN0ZWQoKTsKLQotICAgIC8vIFJldHVybiB0aGUgbGFzdCBsaW5l
LgotICAgIHJldHVybiBsYXN0Um9vdEJveCgpOwotfQotCi1UZXh0QWxpZ25Nb2RlIENvbXBsZXhM
aW5lTGF5b3V0Ojp0ZXh0QWxpZ25tZW50Rm9yTGluZShib29sIGVuZHNXaXRoU29mdEJyZWFrKSBj
b25zdAotewotICAgIGlmIChhdXRvIG92ZXJyaWRlQWxpZ25tZW50ID0gbV9mbG93Lm92ZXJyaWRl
VGV4dEFsaWdubWVudEZvckxpbmUoZW5kc1dpdGhTb2Z0QnJlYWspKQotICAgICAgICByZXR1cm4g
Km92ZXJyaWRlQWxpZ25tZW50OwotCi0gICAgVGV4dEFsaWduTW9kZSBhbGlnbm1lbnQgPSBzdHls
ZSgpLnRleHRBbGlnbigpOwotI2lmIEVOQUJMRShDU1MzX1RFWFQpCi0gICAgVGV4dEp1c3RpZnkg
dGV4dEp1c3RpZnkgPSBzdHlsZSgpLnRleHRKdXN0aWZ5KCk7Ci0gICAgaWYgKGFsaWdubWVudCA9
PSBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5ICYmIHRleHRKdXN0aWZ5ID09IFRleHRKdXN0aWZ5OjpO
b25lKQotICAgICAgICByZXR1cm4gc3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9u
OjpMVFIgPyBUZXh0QWxpZ25Nb2RlOjpMZWZ0IDogVGV4dEFsaWduTW9kZTo6UmlnaHQ7Ci0jZW5k
aWYKLQotICAgIGlmIChlbmRzV2l0aFNvZnRCcmVhaykKLSAgICAgICAgcmV0dXJuIGFsaWdubWVu
dDsKLQotI2lmICFFTkFCTEUoQ1NTM19URVhUKQotICAgIHJldHVybiAoYWxpZ25tZW50ID09IFRl
eHRBbGlnbk1vZGU6Okp1c3RpZnkpID8gVGV4dEFsaWduTW9kZTo6U3RhcnQgOiBhbGlnbm1lbnQ7
Ci0jZWxzZQotICAgIGlmIChhbGlnbm1lbnQgIT0gVGV4dEFsaWduTW9kZTo6SnVzdGlmeSkKLSAg
ICAgICAgcmV0dXJuIGFsaWdubWVudDsKLQotICAgIFRleHRBbGlnbkxhc3QgYWxpZ25tZW50TGFz
dCA9IHN0eWxlKCkudGV4dEFsaWduTGFzdCgpOwotICAgIHN3aXRjaCAoYWxpZ25tZW50TGFzdCkg
ewotICAgIGNhc2UgVGV4dEFsaWduTGFzdDo6U3RhcnQ6Ci0gICAgICAgIHJldHVybiBUZXh0QWxp
Z25Nb2RlOjpTdGFydDsKLSAgICBjYXNlIFRleHRBbGlnbkxhc3Q6OkVuZDoKLSAgICAgICAgcmV0
dXJuIFRleHRBbGlnbk1vZGU6OkVuZDsKLSAgICBjYXNlIFRleHRBbGlnbkxhc3Q6OkxlZnQ6Ci0g
ICAgICAgIHJldHVybiBUZXh0QWxpZ25Nb2RlOjpMZWZ0OwotICAgIGNhc2UgVGV4dEFsaWduTGFz
dDo6UmlnaHQ6Ci0gICAgICAgIHJldHVybiBUZXh0QWxpZ25Nb2RlOjpSaWdodDsKLSAgICBjYXNl
IFRleHRBbGlnbkxhc3Q6OkNlbnRlcjoKLSAgICAgICAgcmV0dXJuIFRleHRBbGlnbk1vZGU6OkNl
bnRlcjsKLSAgICBjYXNlIFRleHRBbGlnbkxhc3Q6Okp1c3RpZnk6Ci0gICAgICAgIHJldHVybiBU
ZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5OwotICAgIGNhc2UgVGV4dEFsaWduTGFzdDo6QXV0bzoKLSAg
ICAgICAgaWYgKHRleHRKdXN0aWZ5ID09IFRleHRKdXN0aWZ5OjpEaXN0cmlidXRlKQotICAgICAg
ICAgICAgcmV0dXJuIFRleHRBbGlnbk1vZGU6Okp1c3RpZnk7Ci0gICAgICAgIHJldHVybiBUZXh0
QWxpZ25Nb2RlOjpTdGFydDsKLSAgICB9Ci0gICAgcmV0dXJuIGFsaWdubWVudDsKLSNlbmRpZgot
fQotCi1zdGF0aWMgdm9pZCB1cGRhdGVMb2dpY2FsV2lkdGhGb3JMZWZ0QWxpZ25lZEJsb2NrKGJv
b2wgaXNMZWZ0VG9SaWdodERpcmVjdGlvbiwgQmlkaVJ1biogdHJhaWxpbmdTcGFjZVJ1biwgZmxv
YXQmIGxvZ2ljYWxMZWZ0LCBmbG9hdCYgdG90YWxMb2dpY2FsV2lkdGgsIGZsb2F0IGF2YWlsYWJs
ZUxvZ2ljYWxXaWR0aCkKLXsKLSAgICAvLyBUaGUgZGlyZWN0aW9uIG9mIHRoZSBibG9jayBzaG91
bGQgZGV0ZXJtaW5lIHdoYXQgaGFwcGVucyB3aXRoIHdpZGUgbGluZXMuCi0gICAgLy8gSW4gcGFy
dGljdWxhciB3aXRoIFJUTCBibG9ja3MsIHdpZGUgbGluZXMgc2hvdWxkIHN0aWxsIHNwaWxsIG91
dCB0byB0aGUgbGVmdC4KLSAgICBpZiAoaXNMZWZ0VG9SaWdodERpcmVjdGlvbikgewotICAgICAg
ICBpZiAodG90YWxMb2dpY2FsV2lkdGggPiBhdmFpbGFibGVMb2dpY2FsV2lkdGggJiYgdHJhaWxp
bmdTcGFjZVJ1bikKLSAgICAgICAgICAgIHRyYWlsaW5nU3BhY2VSdW4tPmJveCgpLT5zZXRMb2dp
Y2FsV2lkdGgoc3RkOjptYXg8ZmxvYXQ+KDAsIHRyYWlsaW5nU3BhY2VSdW4tPmJveCgpLT5sb2dp
Y2FsV2lkdGgoKSAtIHRvdGFsTG9naWNhbFdpZHRoICsgYXZhaWxhYmxlTG9naWNhbFdpZHRoKSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAodHJhaWxpbmdTcGFjZVJ1bikKLSAg
ICAgICAgdHJhaWxpbmdTcGFjZVJ1bi0+Ym94KCktPnNldExvZ2ljYWxXaWR0aCgwKTsKLSAgICBl
bHNlIGlmICh0b3RhbExvZ2ljYWxXaWR0aCA+IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCkKLSAgICAg
ICAgbG9naWNhbExlZnQgLT0gKHRvdGFsTG9naWNhbFdpZHRoIC0gYXZhaWxhYmxlTG9naWNhbFdp
ZHRoKTsKLX0KLQotc3RhdGljIHZvaWQgdXBkYXRlTG9naWNhbFdpZHRoRm9yUmlnaHRBbGlnbmVk
QmxvY2soYm9vbCBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uLCBCaWRpUnVuKiB0cmFpbGluZ1NwYWNl
UnVuLCBmbG9hdCYgbG9naWNhbExlZnQsIGZsb2F0JiB0b3RhbExvZ2ljYWxXaWR0aCwgZmxvYXQg
YXZhaWxhYmxlTG9naWNhbFdpZHRoKQotewotICAgIC8vIFdpZGUgbGluZXMgc3BpbGwgb3V0IG9m
IHRoZSBibG9jayBiYXNlZCBvZmYgZGlyZWN0aW9uLgotICAgIC8vIFNvIGV2ZW4gaWYgdGV4dC1h
bGlnbiBpcyByaWdodCwgaWYgZGlyZWN0aW9uIGlzIExUUiwgd2lkZSBsaW5lcyBzaG91bGQgb3Zl
cmZsb3cgb3V0IG9mIHRoZSByaWdodAotICAgIC8vIHNpZGUgb2YgdGhlIGJsb2NrLgotICAgIGlm
IChpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKSB7Ci0gICAgICAgIGlmICh0cmFpbGluZ1NwYWNlUnVu
KSB7Ci0gICAgICAgICAgICB0b3RhbExvZ2ljYWxXaWR0aCAtPSB0cmFpbGluZ1NwYWNlUnVuLT5i
b3goKS0+bG9naWNhbFdpZHRoKCk7Ci0gICAgICAgICAgICB0cmFpbGluZ1NwYWNlUnVuLT5ib3go
KS0+c2V0TG9naWNhbFdpZHRoKDApOwotICAgICAgICB9Ci0gICAgICAgIGxvZ2ljYWxMZWZ0ICs9
IHN0ZDo6bWF4KDAuZiwgYXZhaWxhYmxlTG9naWNhbFdpZHRoIC0gdG90YWxMb2dpY2FsV2lkdGgp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHRvdGFsTG9naWNhbFdpZHRoID4g
YXZhaWxhYmxlTG9naWNhbFdpZHRoICYmIHRyYWlsaW5nU3BhY2VSdW4pIHsKLSAgICAgICAgdHJh
aWxpbmdTcGFjZVJ1bi0+Ym94KCktPnNldExvZ2ljYWxXaWR0aChzdGQ6Om1heDxmbG9hdD4oMCwg
dHJhaWxpbmdTcGFjZVJ1bi0+Ym94KCktPmxvZ2ljYWxXaWR0aCgpIC0gdG90YWxMb2dpY2FsV2lk
dGggKyBhdmFpbGFibGVMb2dpY2FsV2lkdGgpKTsKLSAgICAgICAgdG90YWxMb2dpY2FsV2lkdGgg
LT0gdHJhaWxpbmdTcGFjZVJ1bi0+Ym94KCktPmxvZ2ljYWxXaWR0aCgpOwotICAgIH0gZWxzZQot
ICAgICAgICBsb2dpY2FsTGVmdCArPSBhdmFpbGFibGVMb2dpY2FsV2lkdGggLSB0b3RhbExvZ2lj
YWxXaWR0aDsKLX0KLQotc3RhdGljIHZvaWQgdXBkYXRlTG9naWNhbFdpZHRoRm9yQ2VudGVyQWxp
Z25lZEJsb2NrKGJvb2wgaXNMZWZ0VG9SaWdodERpcmVjdGlvbiwgQmlkaVJ1biogdHJhaWxpbmdT
cGFjZVJ1biwgZmxvYXQmIGxvZ2ljYWxMZWZ0LCBmbG9hdCYgdG90YWxMb2dpY2FsV2lkdGgsIGZs
b2F0IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCkKLXsKLSAgICBmbG9hdCB0cmFpbGluZ1NwYWNlV2lk
dGggPSAwOwotICAgIGlmICh0cmFpbGluZ1NwYWNlUnVuKSB7Ci0gICAgICAgIHRvdGFsTG9naWNh
bFdpZHRoIC09IHRyYWlsaW5nU3BhY2VSdW4tPmJveCgpLT5sb2dpY2FsV2lkdGgoKTsKLSAgICAg
ICAgdHJhaWxpbmdTcGFjZVdpZHRoID0gc3RkOjptaW4odHJhaWxpbmdTcGFjZVJ1bi0+Ym94KCkt
PmxvZ2ljYWxXaWR0aCgpLCAoYXZhaWxhYmxlTG9naWNhbFdpZHRoIC0gdG90YWxMb2dpY2FsV2lk
dGggKyAxKSAvIDIpOwotICAgICAgICB0cmFpbGluZ1NwYWNlUnVuLT5ib3goKS0+c2V0TG9naWNh
bFdpZHRoKHN0ZDo6bWF4PGZsb2F0PigwLCB0cmFpbGluZ1NwYWNlV2lkdGgpKTsKLSAgICB9Ci0g
ICAgaWYgKGlzTGVmdFRvUmlnaHREaXJlY3Rpb24pCi0gICAgICAgIGxvZ2ljYWxMZWZ0ICs9IHN0
ZDo6bWF4PGZsb2F0PigoYXZhaWxhYmxlTG9naWNhbFdpZHRoIC0gdG90YWxMb2dpY2FsV2lkdGgp
IC8gMiwgMCk7Ci0gICAgZWxzZQotICAgICAgICBsb2dpY2FsTGVmdCArPSB0b3RhbExvZ2ljYWxX
aWR0aCA+IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCA/IChhdmFpbGFibGVMb2dpY2FsV2lkdGggLSB0
b3RhbExvZ2ljYWxXaWR0aCkgOiAoYXZhaWxhYmxlTG9naWNhbFdpZHRoIC0gdG90YWxMb2dpY2Fs
V2lkdGgpIC8gMiAtIHRyYWlsaW5nU3BhY2VXaWR0aDsKLX0KLQotdm9pZCBDb21wbGV4TGluZUxh
eW91dDo6c2V0TWFyZ2luc0ZvclJ1YnlSdW4oQmlkaVJ1biogcnVuLCBSZW5kZXJSdWJ5UnVuJiBy
ZW5kZXJlciwgUmVuZGVyT2JqZWN0KiBwcmV2aW91c09iamVjdCwgY29uc3QgTGluZUluZm8mIGxp
bmVJbmZvKQotewotICAgIGZsb2F0IHN0YXJ0T3Zlcmhhbmc7Ci0gICAgZmxvYXQgZW5kT3Zlcmhh
bmc7Ci0gICAgUmVuZGVyT2JqZWN0KiBuZXh0T2JqZWN0ID0gMDsKLSAgICBmb3IgKEJpZGlSdW4q
IHJ1bldpdGhOZXh0T2JqZWN0ID0gcnVuLT5uZXh0KCk7IHJ1bldpdGhOZXh0T2JqZWN0OyBydW5X
aXRoTmV4dE9iamVjdCA9IHJ1bldpdGhOZXh0T2JqZWN0LT5uZXh0KCkpIHsKLSAgICAgICAgaWYg
KCFydW5XaXRoTmV4dE9iamVjdC0+cmVuZGVyZXIoKS5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSAm
JiAhcnVuV2l0aE5leHRPYmplY3QtPmJveCgpLT5pc0xpbmVCcmVhaygpKSB7Ci0gICAgICAgICAg
ICBuZXh0T2JqZWN0ID0gJnJ1bldpdGhOZXh0T2JqZWN0LT5yZW5kZXJlcigpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmVuZGVyZXIuZ2V0T3ZlcmhhbmcobGlu
ZUluZm8uaXNGaXJzdExpbmUoKSwgcmVuZGVyZXIuc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0
aW9uKCkgPyBwcmV2aW91c09iamVjdCA6IG5leHRPYmplY3QsIHJlbmRlcmVyLnN0eWxlKCkuaXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbmV4dE9iamVjdCA6IHByZXZpb3VzT2JqZWN0LCBzdGFy
dE92ZXJoYW5nLCBlbmRPdmVyaGFuZyk7Ci0gICAgbV9mbG93LnNldE1hcmdpblN0YXJ0Rm9yQ2hp
bGQocmVuZGVyZXIsIExheW91dFVuaXQoLXN0YXJ0T3ZlcmhhbmcpKTsKLSAgICBtX2Zsb3cuc2V0
TWFyZ2luRW5kRm9yQ2hpbGQocmVuZGVyZXIsIExheW91dFVuaXQoLWVuZE92ZXJoYW5nKSk7Ci19
Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRMb2dpY2FsV2lkdGhGb3JUZXh0UnVuKFJvb3RJbmxp
bmVCb3gqIGxpbmVCb3gsIEJpZGlSdW4qIHJ1biwgUmVuZGVyVGV4dCYgcmVuZGVyZXIsIGZsb2F0
IHhQb3MsIGNvbnN0IExpbmVJbmZvJiBsaW5lSW5mbywKLSAgICBHbHlwaE92ZXJmbG93QW5kRmFs
bGJhY2tGb250c01hcCYgdGV4dEJveERhdGFNYXAsIFZlcnRpY2FsUG9zaXRpb25DYWNoZSYgdmVy
dGljYWxQb3NpdGlvbkNhY2hlLCBXb3JkTWVhc3VyZW1lbnRzJiB3b3JkTWVhc3VyZW1lbnRzKQot
ewotICAgIEhhc2hTZXQ8Y29uc3QgRm9udCo+IGZhbGxiYWNrRm9udHM7Ci0gICAgR2x5cGhPdmVy
ZmxvdyBnbHlwaE92ZXJmbG93OwotCi0gICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBsaW5l
U3R5bGUoKnJlbmRlcmVyLnBhcmVudCgpLCBsaW5lSW5mbykuZm9udENhc2NhZGUoKTsKLSAgICAv
LyBBbHdheXMgY29tcHV0ZSBnbHlwaCBvdmVyZmxvdyBpZiB0aGUgYmxvY2sncyBsaW5lLWJveC1j
b250YWluIHZhbHVlIGlzICJnbHlwaHMiLgotICAgIGlmIChsaW5lQm94LT5maXRzVG9HbHlwaHMo
KSkgewotICAgICAgICAvLyBJZiB3ZSBkb24ndCBzdGljayBvdXQgb2YgdGhlIHJvb3QgbGluZSdz
IGZvbnQgYm94LCB0aGVuIGRvbid0IGJvdGhlciBjb21wdXRpbmcgb3VyIGdseXBoIG92ZXJmbG93
LiBUaGlzIG9wdGltaXphdGlvbgotICAgICAgICAvLyB3aWxsIGtlZXAgdXMgZnJvbSBjb21wdXRp
bmcgZ2x5cGggYm91bmRzIGluIG5lYXJseSBhbGwgY2FzZXMuCi0gICAgICAgIGJvb2wgaW5jbHVk
ZVJvb3RMaW5lID0gbGluZUJveC0+aW5jbHVkZXNSb290TGluZUJveEZvbnRPckxlYWRpbmcoKTsK
LSAgICAgICAgaW50IGJhc2VsaW5lU2hpZnQgPSBsaW5lQm94LT52ZXJ0aWNhbFBvc2l0aW9uRm9y
Qm94KHJ1bi0+Ym94KCksIHZlcnRpY2FsUG9zaXRpb25DYWNoZSk7Ci0gICAgICAgIGludCByb290
RGVzY2VudCA9IGluY2x1ZGVSb290TGluZSA/IGZvbnQuZm9udE1ldHJpY3MoKS5kZXNjZW50KCkg
OiAwOwotICAgICAgICBpbnQgcm9vdEFzY2VudCA9IGluY2x1ZGVSb290TGluZSA/IGZvbnQuZm9u
dE1ldHJpY3MoKS5hc2NlbnQoKSA6IDA7Ci0gICAgICAgIGludCBib3hBc2NlbnQgPSBmb250LmZv
bnRNZXRyaWNzKCkuYXNjZW50KCkgLSBiYXNlbGluZVNoaWZ0OwotICAgICAgICBpbnQgYm94RGVz
Y2VudCA9IGZvbnQuZm9udE1ldHJpY3MoKS5kZXNjZW50KCkgKyBiYXNlbGluZVNoaWZ0OwotICAg
ICAgICBpZiAoYm94QXNjZW50ID4gcm9vdERlc2NlbnQgfHwgIGJveERlc2NlbnQgPiByb290QXNj
ZW50KQotICAgICAgICAgICAgZ2x5cGhPdmVyZmxvdy5jb21wdXRlQm91bmRzID0gdHJ1ZTsgCi0g
ICAgfQotICAgIAotICAgIExheW91dFVuaXQgaHlwaGVuV2lkdGg7Ci0gICAgaWYgKGRvd25jYXN0
PElubGluZVRleHRCb3g+KCpydW4tPmJveCgpKS5oYXNIeXBoZW4oKSkKLSAgICAgICAgaHlwaGVu
V2lkdGggPSBtZWFzdXJlSHlwaGVuV2lkdGgocmVuZGVyZXIsIGZvbnQsICZmYWxsYmFja0ZvbnRz
KTsKLQotICAgIGZsb2F0IG1lYXN1cmVkV2lkdGggPSAwOwotCi0gICAgYm9vbCBrZXJuaW5nSXNF
bmFibGVkID0gZm9udC5lbmFibGVLZXJuaW5nKCk7Ci0gICAgYm9vbCBjYW5Vc2VTaW1wbGVGb250
Q29kZVBhdGggPSByZW5kZXJlci5jYW5Vc2VTaW1wbGVGb250Q29kZVBhdGgoKTsKLSAgICAKLSAg
ICAvLyBTaW5jZSB3ZSBkb24ndCBjYWNoZSBnbHlwaCBvdmVyZmxvd3MsIHdlIG5lZWQgdG8gcmUt
bWVhc3VyZSB0aGUgcnVuIGlmCi0gICAgLy8gdGhlIHN0eWxlIGlzIGxpbmVib3gtY29udGFpbjog
Z2x5cGguCi0gICAgaWYgKCFsaW5lQm94LT5maXRzVG9HbHlwaHMoKSAmJiBjYW5Vc2VTaW1wbGVG
b250Q29kZVBhdGgpIHsKLSAgICAgICAgdW5zaWduZWQgbGFzdEVuZE9mZnNldCA9IHJ1bi0+bV9z
dGFydDsKLSAgICAgICAgYm9vbCBhdEZpcnN0V29yZE1lYXN1cmVtZW50ID0gdHJ1ZTsKLSAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDAsIHNpemUgPSB3b3JkTWVhc3VyZW1lbnRzLnNpemUoKTsgaSA8
IHNpemUgJiYgbGFzdEVuZE9mZnNldCA8IHJ1bi0+bV9zdG9wOyArK2kpIHsKLSAgICAgICAgICAg
IFdvcmRNZWFzdXJlbWVudCYgd29yZE1lYXN1cmVtZW50ID0gd29yZE1lYXN1cmVtZW50c1tpXTsK
LSAgICAgICAgICAgIGlmICh3b3JkTWVhc3VyZW1lbnQud2lkdGggPD0gMCB8fCB3b3JkTWVhc3Vy
ZW1lbnQuc3RhcnRPZmZzZXQgPT0gd29yZE1lYXN1cmVtZW50LmVuZE9mZnNldCkKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmICh3b3JkTWVhc3VyZW1lbnQucmVuZGVy
ZXIgIT0gJnJlbmRlcmVyIHx8IHdvcmRNZWFzdXJlbWVudC5zdGFydE9mZnNldCAhPSBsYXN0RW5k
T2Zmc2V0IHx8IHdvcmRNZWFzdXJlbWVudC5lbmRPZmZzZXQgPiBydW4tPm1fc3RvcCkKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgbGFzdEVuZE9mZnNldCA9IHdvcmRN
ZWFzdXJlbWVudC5lbmRPZmZzZXQ7Ci0gICAgICAgICAgICBpZiAoa2VybmluZ0lzRW5hYmxlZCAm
JiBsYXN0RW5kT2Zmc2V0ID09IHJ1bi0+bV9zdG9wKSB7Ci0gICAgICAgICAgICAgICAgaW50IHdv
cmRMZW5ndGggPSBsYXN0RW5kT2Zmc2V0IC0gd29yZE1lYXN1cmVtZW50LnN0YXJ0T2Zmc2V0Owot
ICAgICAgICAgICAgICAgIEdseXBoT3ZlcmZsb3cgb3ZlcmZsb3c7Ci0gICAgICAgICAgICAgICAg
bWVhc3VyZWRXaWR0aCArPSByZW5kZXJlci53aWR0aCh3b3JkTWVhc3VyZW1lbnQuc3RhcnRPZmZz
ZXQsIHdvcmRMZW5ndGgsIHhQb3MgKyBtZWFzdXJlZFdpZHRoLCBsaW5lSW5mby5pc0ZpcnN0TGlu
ZSgpLAotICAgICAgICAgICAgICAgICAgICAmd29yZE1lYXN1cmVtZW50LmZhbGxiYWNrRm9udHMs
ICZvdmVyZmxvdyk7Ci0gICAgICAgICAgICAgICAgVUNoYXIgYyA9IHJlbmRlcmVyLmNoYXJhY3Rl
ckF0KHdvcmRNZWFzdXJlbWVudC5zdGFydE9mZnNldCk7Ci0gICAgICAgICAgICAgICAgLy8gcmVu
ZGVyZXIud2lkdGgoKSBvbWl0cyB3b3JkLXNwYWNpbmcgdmFsdWUgZm9yIGxlYWRpbmcgd2hpdGVz
cGFjZSwgc28gbGV0J3MganVzdCBhZGQgaXQgYmFjayBoZXJlLgotICAgICAgICAgICAgICAgIGlm
ICghYXRGaXJzdFdvcmRNZWFzdXJlbWVudCAmJiBGb250Q2FzY2FkZTo6dHJlYXRBc1NwYWNlKGMp
KQotICAgICAgICAgICAgICAgICAgICBtZWFzdXJlZFdpZHRoICs9IHJlbmRlcmVyLnN0eWxlKCku
Zm9udENhc2NhZGUoKS53b3JkU3BhY2luZygpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICAgICAgbWVhc3VyZWRXaWR0aCArPSB3b3JkTWVhc3VyZW1lbnQud2lkdGg7Ci0gICAgICAg
ICAgICBhdEZpcnN0V29yZE1lYXN1cmVtZW50ID0gZmFsc2U7Ci0KLSAgICAgICAgICAgIGZvciAo
YXV0byYgZm9udCA6IHdvcmRNZWFzdXJlbWVudC5mYWxsYmFja0ZvbnRzKQotICAgICAgICAgICAg
ICAgIGZhbGxiYWNrRm9udHMuYWRkKGZvbnQpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtZWFz
dXJlZFdpZHRoICYmIGxhc3RFbmRPZmZzZXQgIT0gcnVuLT5tX3N0b3ApIHsKLSAgICAgICAgICAg
IC8vIElmIHdlIGRvbid0IGhhdmUgZW5vdWdoIGNhY2hlZCBkYXRhLCB3ZSdsbCBtZWFzdXJlIHRo
ZSBydW4gYWdhaW4uCi0gICAgICAgICAgICBtZWFzdXJlZFdpZHRoID0gMDsKLSAgICAgICAgICAg
IGZhbGxiYWNrRm9udHMuY2xlYXIoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghbWVh
c3VyZWRXaWR0aCkKLSAgICAgICAgbWVhc3VyZWRXaWR0aCA9IHJlbmRlcmVyLndpZHRoKHJ1bi0+
bV9zdGFydCwgcnVuLT5tX3N0b3AgLSBydW4tPm1fc3RhcnQsIHhQb3MsIGxpbmVJbmZvLmlzRmly
c3RMaW5lKCksICZmYWxsYmFja0ZvbnRzLCAmZ2x5cGhPdmVyZmxvdyk7Ci0KLSAgICBBU1NFUlQo
bWVhc3VyZWRXaWR0aCA+PSAwKTsKLSAgICBBU1NFUlQoaHlwaGVuV2lkdGggPj0gMCk7Ci0KLSAg
ICBydW4tPmJveCgpLT5zZXRMb2dpY2FsV2lkdGgobWVhc3VyZWRXaWR0aCArIGh5cGhlbldpZHRo
KTsKLSAgICBpZiAoIWZhbGxiYWNrRm9udHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIEFTU0VSVChy
dW4tPmJveCgpLT5iZWhhdmVzTGlrZVRleHQoKSk7Ci0gICAgICAgIEdseXBoT3ZlcmZsb3dBbmRG
YWxsYmFja0ZvbnRzTWFwOjppdGVyYXRvciBpdCA9IHRleHRCb3hEYXRhTWFwLmFkZChkb3duY2Fz
dDxJbmxpbmVUZXh0Qm94PihydW4tPmJveCgpKSwgc3RkOjptYWtlX3BhaXIoVmVjdG9yPGNvbnN0
IEZvbnQqPigpLCBHbHlwaE92ZXJmbG93KCkpKS5pdGVyYXRvcjsKLSAgICAgICAgQVNTRVJUKGl0
LT52YWx1ZS5maXJzdC5pc0VtcHR5KCkpOwotICAgICAgICBpdC0+dmFsdWUuZmlyc3QgPSBjb3B5
VG9WZWN0b3IoZmFsbGJhY2tGb250cyk7Ci0gICAgICAgIHJ1bi0+Ym94KCktPnBhcmVudCgpLT5j
bGVhckRlc2NlbmRhbnRzSGF2ZVNhbWVMaW5lSGVpZ2h0QW5kQmFzZWxpbmUoKTsKLSAgICB9Ci0K
LSAgICAvLyBJbmNsdWRlIHRleHQgZGVjb3JhdGlvbiB2aXN1YWwgb3ZlcmZsb3cgYXMgcGFydCBv
ZiB0aGUgZ2x5cGggb3ZlcmZsb3cuCi0gICAgaWYgKCFyZW5kZXJlci5zdHlsZSgpLnRleHREZWNv
cmF0aW9uc0luRWZmZWN0KCkuaXNFbXB0eSgpKQotICAgICAgICBnbHlwaE92ZXJmbG93LmV4dGVu
ZFRvKHZpc3VhbE92ZXJmbG93Rm9yRGVjb3JhdGlvbnMocnVuLT5ib3goKS0+bGluZVN0eWxlKCks
IGRvd25jYXN0PElubGluZVRleHRCb3g+KHJ1bi0+Ym94KCkpKSk7Ci0KLSAgICBpZiAoIWdseXBo
T3ZlcmZsb3cuaXNFbXB0eSgpKSB7Ci0gICAgICAgIEFTU0VSVChydW4tPmJveCgpLT5iZWhhdmVz
TGlrZVRleHQoKSk7Ci0gICAgICAgIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwOjpp
dGVyYXRvciBpdCA9IHRleHRCb3hEYXRhTWFwLmFkZChkb3duY2FzdDxJbmxpbmVUZXh0Qm94Pihy
dW4tPmJveCgpKSwgc3RkOjptYWtlX3BhaXIoVmVjdG9yPGNvbnN0IEZvbnQqPigpLCBHbHlwaE92
ZXJmbG93KCkpKS5pdGVyYXRvcjsKLSAgICAgICAgaXQtPnZhbHVlLnNlY29uZCA9IGdseXBoT3Zl
cmZsb3c7Ci0gICAgICAgIHJ1bi0+Ym94KCktPmNsZWFyS25vd25Ub0hhdmVOb092ZXJmbG93KCk7
Ci0gICAgfQotfQotCi12b2lkIENvbXBsZXhMaW5lTGF5b3V0Ojp1cGRhdGVSdWJ5Rm9ySnVzdGlm
aWVkVGV4dChSZW5kZXJSdWJ5UnVuJiBydWJ5UnVuLCBCaWRpUnVuJiByLCBjb25zdCBWZWN0b3I8
dW5zaWduZWQsIDE2PiYgZXhwYW5zaW9uT3Bwb3J0dW5pdGllcywgdW5zaWduZWQmIGV4cGFuc2lv
bk9wcG9ydHVuaXR5Q291bnQsIGZsb2F0JiB0b3RhbExvZ2ljYWxXaWR0aCwgZmxvYXQgYXZhaWxh
YmxlTG9naWNhbFdpZHRoLCBzaXplX3QmIGkpCi17Ci0gICAgaWYgKCFydWJ5UnVuLnJ1YnlCYXNl
KCkgfHwgIXJ1YnlSdW4ucnVieUJhc2UoKS0+Zmlyc3RSb290Qm94KCkgfHwgcnVieVJ1bi5ydWJ5
QmFzZSgpLT5maXJzdFJvb3RCb3goKS0+bmV4dFJvb3RCb3goKSB8fCAhci5yZW5kZXJlcigpLnN0
eWxlKCkuY29sbGFwc2VXaGl0ZVNwYWNlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8m
IHJ1YnlCYXNlID0gKnJ1YnlSdW4ucnVieUJhc2UoKTsKLSAgICBhdXRvJiByb290Qm94ID0gKnJ1
YnlCYXNlLmZpcnN0Um9vdEJveCgpOwotCi0gICAgZmxvYXQgdG90YWxFeHBhbnNpb24gPSAwOwot
ICAgIHVuc2lnbmVkIHRvdGFsT3Bwb3J0dW5pdGllc0luUnVuID0gMDsKLSAgICBmb3IgKGF1dG8q
IGxlYWZDaGlsZCA9IHJvb3RCb3guZmlyc3RMZWFmRGVzY2VuZGFudCgpOyBsZWFmQ2hpbGQ7IGxl
YWZDaGlsZCA9IGxlYWZDaGlsZC0+bmV4dExlYWZPbkxpbmUoKSkgewotICAgICAgICBpZiAoIWxl
YWZDaGlsZC0+aXNJbmxpbmVUZXh0Qm94KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAg
ICAgICB1bnNpZ25lZCBvcHBvcnR1bml0aWVzSW5SdW4gPSBleHBhbnNpb25PcHBvcnR1bml0aWVz
W2krK107Ci0gICAgICAgIEFTU0VSVChvcHBvcnR1bml0aWVzSW5SdW4gPD0gZXhwYW5zaW9uT3Bw
b3J0dW5pdHlDb3VudCk7Ci0gICAgICAgIGF1dG8gZXhwYW5zaW9uID0gKGF2YWlsYWJsZUxvZ2lj
YWxXaWR0aCAtIHRvdGFsTG9naWNhbFdpZHRoKSAqIG9wcG9ydHVuaXRpZXNJblJ1biAvIGV4cGFu
c2lvbk9wcG9ydHVuaXR5Q291bnQ7Ci0gICAgICAgIHRvdGFsRXhwYW5zaW9uICs9IGV4cGFuc2lv
bjsKLSAgICAgICAgdG90YWxPcHBvcnR1bml0aWVzSW5SdW4gKz0gb3Bwb3J0dW5pdGllc0luUnVu
OwotICAgIH0KLQotICAgIEFTU0VSVCghcnVieVJ1bi5oYXNPdmVycmlkaW5nTG9naWNhbFdpZHRo
KCkpOwotICAgIGZsb2F0IG5ld0Jhc2VXaWR0aCA9IHJ1YnlSdW4ubG9naWNhbFdpZHRoKCkgKyB0
b3RhbEV4cGFuc2lvbiArIG1fZmxvdy5tYXJnaW5TdGFydEZvckNoaWxkKHJ1YnlSdW4pICsgbV9m
bG93Lm1hcmdpbkVuZEZvckNoaWxkKHJ1YnlSdW4pOwotICAgIGZsb2F0IG5ld1J1YnlSdW5XaWR0
aCA9IHJ1YnlSdW4ubG9naWNhbFdpZHRoKCkgKyB0b3RhbEV4cGFuc2lvbjsKLSAgICBydWJ5QmFz
ZS5zZXRJbml0aWFsT2Zmc2V0KChuZXdSdWJ5UnVuV2lkdGggLSBuZXdCYXNlV2lkdGgpIC8gMik7
Ci0gICAgcnVieVJ1bi5zZXRPdmVycmlkaW5nTG9naWNhbFdpZHRoKExheW91dFVuaXQobmV3UnVi
eVJ1bldpZHRoKSk7Ci0gICAgcnVieVJ1bi5zZXROZWVkc0xheW91dChNYXJrT25seVRoaXMpOwot
ICAgIHJvb3RCb3gubWFya0RpcnR5KCk7Ci0gICAgaWYgKFJlbmRlclJ1YnlUZXh0KiBydWJ5VGV4
dCA9IHJ1YnlSdW4ucnVieVRleHQoKSkgewotICAgICAgICBpZiAoUm9vdElubGluZUJveCogdGV4
dFJvb3RCb3ggPSBydWJ5VGV4dC0+Zmlyc3RSb290Qm94KCkpCi0gICAgICAgICAgICB0ZXh0Um9v
dEJveC0+bWFya0RpcnR5KCk7Ci0gICAgfQotICAgIHJ1YnlSdW4ubGF5b3V0QmxvY2sodHJ1ZSk7
Ci0gICAgcnVieVJ1bi5jbGVhck92ZXJyaWRpbmdMb2dpY2FsV2lkdGgoKTsKLSAgICByLmJveCgp
LT5zZXRFeHBhbnNpb24obmV3UnVieVJ1bldpZHRoIC0gci5ib3goKS0+bG9naWNhbFdpZHRoKCkp
OwotCi0gICAgdG90YWxMb2dpY2FsV2lkdGggKz0gdG90YWxFeHBhbnNpb247Ci0gICAgZXhwYW5z
aW9uT3Bwb3J0dW5pdHlDb3VudCAtPSB0b3RhbE9wcG9ydHVuaXRpZXNJblJ1bjsKLX0KLQotdm9p
ZCBDb21wbGV4TGluZUxheW91dDo6Y29tcHV0ZUV4cGFuc2lvbkZvckp1c3RpZmllZFRleHQoQmlk
aVJ1biogZmlyc3RSdW4sIEJpZGlSdW4qIHRyYWlsaW5nU3BhY2VSdW4sIGNvbnN0IFZlY3Rvcjx1
bnNpZ25lZCwgMTY+JiBleHBhbnNpb25PcHBvcnR1bml0aWVzLCB1bnNpZ25lZCBleHBhbnNpb25P
cHBvcnR1bml0eUNvdW50LCBmbG9hdCB0b3RhbExvZ2ljYWxXaWR0aCwgZmxvYXQgYXZhaWxhYmxl
TG9naWNhbFdpZHRoKQotewotICAgIGlmICghZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCB8fCBh
dmFpbGFibGVMb2dpY2FsV2lkdGggPD0gdG90YWxMb2dpY2FsV2lkdGgpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIHNpemVfdCBpID0gMDsKLSAgICBmb3IgKEJpZGlSdW4qIHJ1biA9IGZpcnN0UnVu
OyBydW47IHJ1biA9IHJ1bi0+bmV4dCgpKSB7Ci0gICAgICAgIGlmICghcnVuLT5ib3goKSB8fCBy
dW4gPT0gdHJhaWxpbmdTcGFjZVJ1bikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAK
LSAgICAgICAgaWYgKGlzPFJlbmRlclRleHQ+KHJ1bi0+cmVuZGVyZXIoKSkpIHsKLSAgICAgICAg
ICAgIHVuc2lnbmVkIG9wcG9ydHVuaXRpZXNJblJ1biA9IGV4cGFuc2lvbk9wcG9ydHVuaXRpZXNb
aSsrXTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKG9wcG9ydHVuaXRpZXNJblJ1
biA8PSBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgLy8gT25seSBqdXN0aWZ5IHRleHQgaWYgd2hpdGVzcGFjZSBpcyBjb2xsYXBzZWQuCi0gICAg
ICAgICAgICBpZiAocnVuLT5yZW5kZXJlcigpLnN0eWxlKCkuY29sbGFwc2VXaGl0ZVNwYWNlKCkp
IHsKLSAgICAgICAgICAgICAgICBJbmxpbmVUZXh0Qm94JiB0ZXh0Qm94ID0gZG93bmNhc3Q8SW5s
aW5lVGV4dEJveD4oKnJ1bi0+Ym94KCkpOwotICAgICAgICAgICAgICAgIGZsb2F0IGV4cGFuc2lv
biA9IChhdmFpbGFibGVMb2dpY2FsV2lkdGggLSB0b3RhbExvZ2ljYWxXaWR0aCkgKiBvcHBvcnR1
bml0aWVzSW5SdW4gLyBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50OwotICAgICAgICAgICAgICAg
IHRleHRCb3guc2V0RXhwYW5zaW9uKGV4cGFuc2lvbik7Ci0gICAgICAgICAgICAgICAgdG90YWxM
b2dpY2FsV2lkdGggKz0gZXhwYW5zaW9uOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZXhw
YW5zaW9uT3Bwb3J0dW5pdHlDb3VudCAtPSBvcHBvcnR1bml0aWVzSW5SdW47Ci0gICAgICAgIH0g
ZWxzZSBpZiAoaXM8UmVuZGVyUnVieVJ1bj4ocnVuLT5yZW5kZXJlcigpKSkKLSAgICAgICAgICAg
IHVwZGF0ZVJ1YnlGb3JKdXN0aWZpZWRUZXh0KGRvd25jYXN0PFJlbmRlclJ1YnlSdW4+KHJ1bi0+
cmVuZGVyZXIoKSksICpydW4sIGV4cGFuc2lvbk9wcG9ydHVuaXRpZXMsIGV4cGFuc2lvbk9wcG9y
dHVuaXR5Q291bnQsIHRvdGFsTG9naWNhbFdpZHRoLCBhdmFpbGFibGVMb2dpY2FsV2lkdGgsIGkp
OwotCi0gICAgICAgIGlmICghZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCkKLSAgICAgICAgICAg
IGJyZWFrOwotICAgIH0KLX0KLQotdm9pZCBDb21wbGV4TGluZUxheW91dDo6dXBkYXRlTG9naWNh
bFdpZHRoRm9yQWxpZ25tZW50KFJlbmRlckJsb2NrRmxvdyYgZmxvdywgY29uc3QgVGV4dEFsaWdu
TW9kZSYgdGV4dEFsaWduLCBjb25zdCBSb290SW5saW5lQm94KiByb290SW5saW5lQm94LCBCaWRp
UnVuKiB0cmFpbGluZ1NwYWNlUnVuLCBmbG9hdCYgbG9naWNhbExlZnQsIGZsb2F0JiB0b3RhbExv
Z2ljYWxXaWR0aCwgZmxvYXQmIGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCwgaW50IGV4cGFuc2lvbk9w
cG9ydHVuaXR5Q291bnQpCi17Ci0gICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb247Ci0gICAgaWYg
KHJvb3RJbmxpbmVCb3ggJiYgZmxvdy5zdHlsZSgpLnVuaWNvZGVCaWRpKCkgPT0gUGxhaW50ZXh0
KQotICAgICAgICBkaXJlY3Rpb24gPSByb290SW5saW5lQm94LT5kaXJlY3Rpb24oKTsKLSAgICBl
bHNlCi0gICAgICAgIGRpcmVjdGlvbiA9IGZsb3cuc3R5bGUoKS5kaXJlY3Rpb24oKTsKLQotICAg
IGJvb2wgaXNMZWZ0VG9SaWdodERpcmVjdGlvbiA9IGZsb3cuc3R5bGUoKS5pc0xlZnRUb1JpZ2h0
RGlyZWN0aW9uKCk7Ci0KLSAgICAvLyBBcm1lZCB3aXRoIHRoZSB0b3RhbCB3aWR0aCBvZiB0aGUg
bGluZSAod2l0aG91dCBqdXN0aWZpY2F0aW9uKSwKLSAgICAvLyB3ZSBub3cgZXhhbWluZSBvdXIg
dGV4dC1hbGlnbiBwcm9wZXJ0eSBpbiBvcmRlciB0byBkZXRlcm1pbmUgd2hlcmUgdG8gcG9zaXRp
b24gdGhlCi0gICAgLy8gb2JqZWN0cyBob3Jpem9udGFsbHkuIFRoZSB0b3RhbCB3aWR0aCBvZiB0
aGUgbGluZSBjYW4gYmUgaW5jcmVhc2VkIGlmIHdlIGVuZCB1cAotICAgIC8vIGp1c3RpZnlpbmcg
dGV4dC4KLSAgICBzd2l0Y2ggKHRleHRBbGlnbikgewotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6
TGVmdDoKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdExlZnQ6Ci0gICAgICAgIHVwZGF0
ZUxvZ2ljYWxXaWR0aEZvckxlZnRBbGlnbmVkQmxvY2soaXNMZWZ0VG9SaWdodERpcmVjdGlvbiwg
dHJhaWxpbmdTcGFjZVJ1biwgbG9naWNhbExlZnQsIHRvdGFsTG9naWNhbFdpZHRoLCBhdmFpbGFi
bGVMb2dpY2FsV2lkdGgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6
OlJpZ2h0OgotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0UmlnaHQ6Ci0gICAgICAgIHVw
ZGF0ZUxvZ2ljYWxXaWR0aEZvclJpZ2h0QWxpZ25lZEJsb2NrKGlzTGVmdFRvUmlnaHREaXJlY3Rp
b24sIHRyYWlsaW5nU3BhY2VSdW4sIGxvZ2ljYWxMZWZ0LCB0b3RhbExvZ2ljYWxXaWR0aCwgYXZh
aWxhYmxlTG9naWNhbFdpZHRoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBUZXh0QWxpZ25N
b2RlOjpDZW50ZXI6Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRDZW50ZXI6Ci0gICAg
ICAgIHVwZGF0ZUxvZ2ljYWxXaWR0aEZvckNlbnRlckFsaWduZWRCbG9jayhpc0xlZnRUb1JpZ2h0
RGlyZWN0aW9uLCB0cmFpbGluZ1NwYWNlUnVuLCBsb2dpY2FsTGVmdCwgdG90YWxMb2dpY2FsV2lk
dGgsIGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVGV4
dEFsaWduTW9kZTo6SnVzdGlmeToKLSAgICAgICAgZmxvdy5hZGp1c3RJbmxpbmVEaXJlY3Rpb25M
aW5lQm91bmRzKGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQsIGxvZ2ljYWxMZWZ0LCBhdmFpbGFi
bGVMb2dpY2FsV2lkdGgpOwotICAgICAgICBpZiAoZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCkg
ewotICAgICAgICAgICAgaWYgKHRyYWlsaW5nU3BhY2VSdW4pIHsKLSAgICAgICAgICAgICAgICB0
b3RhbExvZ2ljYWxXaWR0aCAtPSB0cmFpbGluZ1NwYWNlUnVuLT5ib3goKS0+bG9naWNhbFdpZHRo
KCk7Ci0gICAgICAgICAgICAgICAgdHJhaWxpbmdTcGFjZVJ1bi0+Ym94KCktPnNldExvZ2ljYWxX
aWR0aCgwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIEZBTExUSFJPVUdIOwotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6U3RhcnQ6Ci0gICAg
ICAgIGlmIChkaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSKQotICAgICAgICAgICAgdXBk
YXRlTG9naWNhbFdpZHRoRm9yTGVmdEFsaWduZWRCbG9jayhpc0xlZnRUb1JpZ2h0RGlyZWN0aW9u
LCB0cmFpbGluZ1NwYWNlUnVuLCBsb2dpY2FsTGVmdCwgdG90YWxMb2dpY2FsV2lkdGgsIGF2YWls
YWJsZUxvZ2ljYWxXaWR0aCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHVwZGF0ZUxvZ2lj
YWxXaWR0aEZvclJpZ2h0QWxpZ25lZEJsb2NrKGlzTGVmdFRvUmlnaHREaXJlY3Rpb24sIHRyYWls
aW5nU3BhY2VSdW4sIGxvZ2ljYWxMZWZ0LCB0b3RhbExvZ2ljYWxXaWR0aCwgYXZhaWxhYmxlTG9n
aWNhbFdpZHRoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpFbmQ6
Ci0gICAgICAgIGlmIChkaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSKQotICAgICAgICAg
ICAgdXBkYXRlTG9naWNhbFdpZHRoRm9yUmlnaHRBbGlnbmVkQmxvY2soaXNMZWZ0VG9SaWdodERp
cmVjdGlvbiwgdHJhaWxpbmdTcGFjZVJ1biwgbG9naWNhbExlZnQsIHRvdGFsTG9naWNhbFdpZHRo
LCBhdmFpbGFibGVMb2dpY2FsV2lkdGgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB1cGRh
dGVMb2dpY2FsV2lkdGhGb3JMZWZ0QWxpZ25lZEJsb2NrKGlzTGVmdFRvUmlnaHREaXJlY3Rpb24s
IHRyYWlsaW5nU3BhY2VSdW4sIGxvZ2ljYWxMZWZ0LCB0b3RhbExvZ2ljYWxXaWR0aCwgYXZhaWxh
YmxlTG9naWNhbFdpZHRoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9p
ZCB1cGRhdGVMb2dpY2FsSW5saW5lUG9zaXRpb25zKFJlbmRlckJsb2NrRmxvdyYgYmxvY2ssIGZs
b2F0JiBsaW5lTG9naWNhbExlZnQsIGZsb2F0JiBsaW5lTG9naWNhbFJpZ2h0LCBmbG9hdCYgYXZh
aWxhYmxlTG9naWNhbFdpZHRoLCBib29sIGZpcnN0TGluZSwKLSAgICBJbmRlbnRUZXh0T3JOb3Qg
c2hvdWxkSW5kZW50VGV4dCwgTGF5b3V0VW5pdCBib3hMb2dpY2FsSGVpZ2h0KQotewotICAgIExh
eW91dFVuaXQgbGluZUxvZ2ljYWxIZWlnaHQgPSBibG9jay5taW5MaW5lSGVpZ2h0Rm9yUmVwbGFj
ZWRSZW5kZXJlcihmaXJzdExpbmUsIGJveExvZ2ljYWxIZWlnaHQpOwotICAgIGxpbmVMb2dpY2Fs
TGVmdCA9IGJsb2NrLmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShibG9jay5sb2dpY2FsSGVpZ2h0
KCksIHNob3VsZEluZGVudFRleHQsIGxpbmVMb2dpY2FsSGVpZ2h0KTsKLSAgICBsaW5lTG9naWNh
bFJpZ2h0ID0gYmxvY2subG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShibG9jay5sb2dpY2FsSGVp
Z2h0KCksIHNob3VsZEluZGVudFRleHQsIGxpbmVMb2dpY2FsSGVpZ2h0KTsKLSAgICBhdmFpbGFi
bGVMb2dpY2FsV2lkdGggPSBsaW5lTG9naWNhbFJpZ2h0IC0gbGluZUxvZ2ljYWxMZWZ0OwotfQot
Ci12b2lkIENvbXBsZXhMaW5lTGF5b3V0Ojpjb21wdXRlSW5saW5lRGlyZWN0aW9uUG9zaXRpb25z
Rm9yTGluZShSb290SW5saW5lQm94KiBsaW5lQm94LCBjb25zdCBMaW5lSW5mbyYgbGluZUluZm8s
IEJpZGlSdW4qIGZpcnN0UnVuLCBCaWRpUnVuKiB0cmFpbGluZ1NwYWNlUnVuLCBib29sIHJlYWNo
ZWRFbmQsIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwJiB0ZXh0Qm94RGF0YU1hcCwg
VmVydGljYWxQb3NpdGlvbkNhY2hlJiB2ZXJ0aWNhbFBvc2l0aW9uQ2FjaGUsIFdvcmRNZWFzdXJl
bWVudHMmIHdvcmRNZWFzdXJlbWVudHMpCi17Ci0gICAgVGV4dEFsaWduTW9kZSB0ZXh0QWxpZ24g
PSB0ZXh0QWxpZ25tZW50Rm9yTGluZSghcmVhY2hlZEVuZCAmJiAhbGluZUJveC0+ZW5kc1dpdGhC
cmVhaygpKTsKLSAgICAKLSAgICAvLyBDU1MgMi4xOiAiJ1RleHQtaW5kZW50JyBvbmx5IGFmZmVj
dHMgYSBsaW5lIGlmIGl0IGlzIHRoZSBmaXJzdCBmb3JtYXR0ZWQgbGluZSBvZiBhbiBlbGVtZW50
LiBGb3IgZXhhbXBsZSwgdGhlIGZpcnN0IGxpbmUgb2YgYW4gYW5vbnltb3VzIGJsb2NrIAotICAg
IC8vIGJveCBpcyBvbmx5IGFmZmVjdGVkIGlmIGl0IGlzIHRoZSBmaXJzdCBjaGlsZCBvZiBpdHMg
cGFyZW50IGVsZW1lbnQuIgotICAgIC8vIENTUzMgInRleHQtaW5kZW50IiwgIi13ZWJraXQtZWFj
aC1saW5lIiBhZmZlY3RzIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSBibG9jayBjb250YWluZXIgYXMg
d2VsbCBhcyBlYWNoIGxpbmUgYWZ0ZXIgYSBmb3JjZWQgbGluZSBicmVhaywKLSAgICAvLyBidXQg
ZG9lcyBub3QgYWZmZWN0IGxpbmVzIGFmdGVyIGEgc29mdCB3cmFwIGJyZWFrLgotICAgIGJvb2wg
aXNGaXJzdExpbmUgPSBsaW5lSW5mby5pc0ZpcnN0TGluZSgpICYmICEobV9mbG93LmlzQW5vbnlt
b3VzQmxvY2soKSAmJiBtX2Zsb3cucGFyZW50KCktPmZpcnN0Q2hpbGQoKSAhPSAmbV9mbG93KTsK
LSAgICBib29sIGlzQWZ0ZXJIYXJkTGluZUJyZWFrID0gbGluZUJveC0+cHJldlJvb3RCb3goKSAm
JiBsaW5lQm94LT5wcmV2Um9vdEJveCgpLT5lbmRzV2l0aEJyZWFrKCk7Ci0gICAgSW5kZW50VGV4
dE9yTm90IHNob3VsZEluZGVudFRleHQgPSByZXF1aXJlc0luZGVudChpc0ZpcnN0TGluZSwgaXNB
ZnRlckhhcmRMaW5lQnJlYWssIHN0eWxlKCkpOwotICAgIGZsb2F0IGxpbmVMb2dpY2FsTGVmdDsK
LSAgICBmbG9hdCBsaW5lTG9naWNhbFJpZ2h0OwotICAgIGZsb2F0IGF2YWlsYWJsZUxvZ2ljYWxX
aWR0aDsKLSAgICB1cGRhdGVMb2dpY2FsSW5saW5lUG9zaXRpb25zKG1fZmxvdywgbGluZUxvZ2lj
YWxMZWZ0LCBsaW5lTG9naWNhbFJpZ2h0LCBhdmFpbGFibGVMb2dpY2FsV2lkdGgsIGlzRmlyc3RM
aW5lLCBzaG91bGRJbmRlbnRUZXh0LCAwKTsKLSAgICBib29sIG5lZWRzV29yZFNwYWNpbmc7Ci0K
LSAgICBpZiAoZmlyc3RSdW4gJiYgZmlyc3RSdW4tPnJlbmRlcmVyKCkuaXNSZXBsYWNlZCgpKSB7
Ci0gICAgICAgIFJlbmRlckJveCYgcmVuZGVyQm94ID0gZG93bmNhc3Q8UmVuZGVyQm94PihmaXJz
dFJ1bi0+cmVuZGVyZXIoKSk7Ci0gICAgICAgIHVwZGF0ZUxvZ2ljYWxJbmxpbmVQb3NpdGlvbnMo
bV9mbG93LCBsaW5lTG9naWNhbExlZnQsIGxpbmVMb2dpY2FsUmlnaHQsIGF2YWlsYWJsZUxvZ2lj
YWxXaWR0aCwgaXNGaXJzdExpbmUsIHNob3VsZEluZGVudFRleHQsIHJlbmRlckJveC5sb2dpY2Fs
SGVpZ2h0KCkpOwotICAgIH0KLQotICAgIGNvbXB1dGVJbmxpbmVEaXJlY3Rpb25Qb3NpdGlvbnNG
b3JTZWdtZW50KGxpbmVCb3gsIGxpbmVJbmZvLCB0ZXh0QWxpZ24sIGxpbmVMb2dpY2FsTGVmdCwg
YXZhaWxhYmxlTG9naWNhbFdpZHRoLCBmaXJzdFJ1biwgdHJhaWxpbmdTcGFjZVJ1biwgdGV4dEJv
eERhdGFNYXAsIHZlcnRpY2FsUG9zaXRpb25DYWNoZSwgd29yZE1lYXN1cmVtZW50cyk7Ci0gICAg
Ly8gVGhlIHdpZHRocyBvZiBhbGwgcnVucyBhcmUgbm93IGtub3duLiBXZSBjYW4gbm93IHBsYWNl
IGV2ZXJ5IGlubGluZSBib3ggKGFuZAotICAgIC8vIGNvbXB1dGUgYWNjdXJhdGUgd2lkdGhzIGZv
ciB0aGUgaW5saW5lIGZsb3cgYm94ZXMpLgotICAgIG5lZWRzV29yZFNwYWNpbmcgPSBmYWxzZTsK
LSAgICBsaW5lQm94LT5wbGFjZUJveGVzSW5JbmxpbmVEaXJlY3Rpb24obGluZUxvZ2ljYWxMZWZ0
LCBuZWVkc1dvcmRTcGFjaW5nKTsKLX0KLQotc3RhdGljIGlubGluZSBFeHBhbnNpb25CZWhhdmlv
ciBleHBhbnNpb25CZWhhdmlvckZvcklubGluZVRleHRCb3goUmVuZGVyQmxvY2tGbG93JiBibG9j
aywgSW5saW5lVGV4dEJveCYgdGV4dEJveCwgQmlkaVJ1biogcHJldmlvdXNSdW4sIEJpZGlSdW4q
IG5leHRSdW4sIFRleHRBbGlnbk1vZGUgdGV4dEFsaWduLCBib29sIGlzQWZ0ZXJFeHBhbnNpb24p
Ci17Ci0gICAgLy8gVGF0ZWNodXlva28gaXMgbW9kZWxlZCBhcyB0aGUgT2JqZWN0IFJlcGxhY2Vt
ZW50IENoYXJhY3RlciAoVStGRkZDKSwgd2hpY2ggY2FuIG5ldmVyIGhhdmUgZXhwYW5zaW9uIG9w
cG9ydHVuaXRpZXMgaW5zaWRlIG5vciBpbnRyaW5zaWNhbGx5IGFkamFjZW50IHRvIGl0LgotICAg
IGlmICh0ZXh0Qm94LnJlbmRlcmVyKCkuc3R5bGUoKS50ZXh0Q29tYmluZSgpID09IFRleHRDb21i
aW5lOjpIb3Jpem9udGFsKQotICAgICAgICByZXR1cm4gRm9yYmlkTGVmdEV4cGFuc2lvbiB8IEZv
cmJpZFJpZ2h0RXhwYW5zaW9uOwotCi0gICAgRXhwYW5zaW9uQmVoYXZpb3IgcmVzdWx0ID0gMDsK
LSAgICBib29sIHNldExlZnRFeHBhbnNpb24gPSBmYWxzZTsKLSAgICBib29sIHNldFJpZ2h0RXhw
YW5zaW9uID0gZmFsc2U7Ci0gICAgaWYgKHRleHRBbGlnbiA9PSBUZXh0QWxpZ25Nb2RlOjpKdXN0
aWZ5KSB7Ci0gICAgICAgIC8vIElmIHRoZSBuZXh0IGJveCBpcyBydWJ5LCBhbmQgd2UncmUganVz
dGlmeWluZywgYW5kIHRoZSBmaXJzdCBib3ggaW4gdGhlIHJ1YnkgYmFzZSBoYXMgYSBsZWFkaW5n
IGV4cGFuc2lvbiwgYW5kIHdlIGFyZSBhIHRleHQgYm94LCB0aGVuIGZvcmNlIGEgdHJhaWxpbmcg
ZXhwYW5zaW9uLgotICAgICAgICBpZiAobmV4dFJ1biAmJiBpczxSZW5kZXJSdWJ5UnVuPihuZXh0
UnVuLT5yZW5kZXJlcigpKSAmJiBkb3duY2FzdDxSZW5kZXJSdWJ5UnVuPihuZXh0UnVuLT5yZW5k
ZXJlcigpKS5ydWJ5QmFzZSgpICYmIG5leHRSdW4tPnJlbmRlcmVyKCkuc3R5bGUoKS5jb2xsYXBz
ZVdoaXRlU3BhY2UoKSkgewotICAgICAgICAgICAgYXV0byYgcnVieUJhc2UgPSAqZG93bmNhc3Q8
UmVuZGVyUnVieVJ1bj4obmV4dFJ1bi0+cmVuZGVyZXIoKSkucnVieUJhc2UoKTsKLSAgICAgICAg
ICAgIGlmIChydWJ5QmFzZS5maXJzdFJvb3RCb3goKSAmJiAhcnVieUJhc2UuZmlyc3RSb290Qm94
KCktPm5leHRSb290Qm94KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoYXV0byogbGVhZkNoaWxk
ID0gcnVieUJhc2UuZmlyc3RSb290Qm94KCktPmZpcnN0TGVhZkRlc2NlbmRhbnQoKSkgewotICAg
ICAgICAgICAgICAgICAgICBpZiAoaXM8SW5saW5lVGV4dEJveD4oKmxlYWZDaGlsZCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGxlZnRFeHBhbnNpb25PcHBvcnR1
bml0eSBkb2Vzbid0IGFjdHVhbGx5IHdvcmsgYmVjYXVzZSBpdCBkb2Vzbid0IHBlcmZvcm0gdGhl
IFVCQQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEZvbnRDYXNjYWRlOjpsZWZ0RXhwYW5z
aW9uT3Bwb3J0dW5pdHkoZG93bmNhc3Q8UmVuZGVyVGV4dD4obGVhZkNoaWxkLT5yZW5kZXJlcigp
KS5zdHJpbmdWaWV3KCksIGxlYWZDaGlsZC0+ZGlyZWN0aW9uKCkpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2V0UmlnaHRFeHBhbnNpb24gPSB0cnVlOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdCB8PSBGb3JjZVJpZ2h0RXhwYW5zaW9uOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8vIFNhbWUgdGhpbmcsIGV4Y2VwdCBp
ZiB3ZSdyZSBmb2xsb3dpbmcgYSBydWJ5Ci0gICAgICAgIGlmIChwcmV2aW91c1J1biAmJiBpczxS
ZW5kZXJSdWJ5UnVuPihwcmV2aW91c1J1bi0+cmVuZGVyZXIoKSkgJiYgZG93bmNhc3Q8UmVuZGVy
UnVieVJ1bj4ocHJldmlvdXNSdW4tPnJlbmRlcmVyKCkpLnJ1YnlCYXNlKCkgJiYgcHJldmlvdXNS
dW4tPnJlbmRlcmVyKCkuc3R5bGUoKS5jb2xsYXBzZVdoaXRlU3BhY2UoKSkgewotICAgICAgICAg
ICAgYXV0byYgcnVieUJhc2UgPSAqZG93bmNhc3Q8UmVuZGVyUnVieVJ1bj4ocHJldmlvdXNSdW4t
PnJlbmRlcmVyKCkpLnJ1YnlCYXNlKCk7Ci0gICAgICAgICAgICBpZiAocnVieUJhc2UuZmlyc3RS
b290Qm94KCkgJiYgIXJ1YnlCYXNlLmZpcnN0Um9vdEJveCgpLT5uZXh0Um9vdEJveCgpKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGF1dG8qIGxlYWZDaGlsZCA9IHJ1YnlCYXNlLmZpcnN0Um9vdEJv
eCgpLT5sYXN0TGVhZkRlc2NlbmRhbnQoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoaXM8
SW5saW5lVGV4dEJveD4oKmxlYWZDaGlsZCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBUaGlzIGxlZnRFeHBhbnNpb25PcHBvcnR1bml0eSBkb2Vzbid0IGFjdHVhbGx5IHdv
cmsgYmVjYXVzZSBpdCBkb2Vzbid0IHBlcmZvcm0gdGhlIFVCQQotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKEZvbnRDYXNjYWRlOjpyaWdodEV4cGFuc2lvbk9wcG9ydHVuaXR5KGRvd25jYXN0
PFJlbmRlclRleHQ+KGxlYWZDaGlsZC0+cmVuZGVyZXIoKSkuc3RyaW5nVmlldygpLCBsZWFmQ2hp
bGQtPmRpcmVjdGlvbigpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldExlZnRF
eHBhbnNpb24gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBG
b3JjZUxlZnRFeHBhbnNpb247Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgLy8gSWYgd2UncmUgdGhlIGZpcnN0IGJveCBpbnNpZGUgYSBydWJ5IGJhc2UsIGZv
cmJpZCBhIGxlYWRpbmcgZXhwYW5zaW9uLCBhbmQgdmljZS12ZXJzYQotICAgICAgICBpZiAoaXM8
UmVuZGVyUnVieUJhc2U+KGJsb2NrKSkgewotICAgICAgICAgICAgUmVuZGVyUnVieUJhc2UmIHJ1
YnlCYXNlID0gZG93bmNhc3Q8UmVuZGVyUnVieUJhc2U+KGJsb2NrKTsKLSAgICAgICAgICAgIGlm
ICgmdGV4dEJveCA9PSBydWJ5QmFzZS5maXJzdFJvb3RCb3goKS0+Zmlyc3RMZWFmRGVzY2VuZGFu
dCgpKSB7Ci0gICAgICAgICAgICAgICAgc2V0TGVmdEV4cGFuc2lvbiA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgcmVzdWx0IHw9IEZvcmJpZExlZnRFeHBhbnNpb247Ci0gICAgICAgICAgICB9IGlm
ICgmdGV4dEJveCA9PSBydWJ5QmFzZS5maXJzdFJvb3RCb3goKS0+bGFzdExlYWZEZXNjZW5kYW50
KCkpIHsKLSAgICAgICAgICAgICAgICBzZXRSaWdodEV4cGFuc2lvbiA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgcmVzdWx0IHw9IEZvcmJpZFJpZ2h0RXhwYW5zaW9uOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotICAgIGlmICghc2V0TGVmdEV4cGFuc2lvbikKLSAgICAgICAgcmVz
dWx0IHw9IGlzQWZ0ZXJFeHBhbnNpb24gPyBGb3JiaWRMZWZ0RXhwYW5zaW9uIDogQWxsb3dMZWZ0
RXhwYW5zaW9uOwotICAgIGlmICghc2V0UmlnaHRFeHBhbnNpb24pCi0gICAgICAgIHJlc3VsdCB8
PSBBbGxvd1JpZ2h0RXhwYW5zaW9uOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBp
bmxpbmUgdm9pZCBhcHBseUV4cGFuc2lvbkJlaGF2aW9yKElubGluZVRleHRCb3gmIHRleHRCb3gs
IEV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9yKQotewotICAgIHN3aXRjaCAoZXhw
YW5zaW9uQmVoYXZpb3IgJiBMZWZ0RXhwYW5zaW9uTWFzaykgewotICAgIGNhc2UgRm9yY2VMZWZ0
RXhwYW5zaW9uOgotICAgICAgICB0ZXh0Qm94LnNldEZvcmNlTGVmdEV4cGFuc2lvbigpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEZvcmJpZExlZnRFeHBhbnNpb246Ci0gICAgICAgIHRleHRC
b3guc2V0Q2FuSGF2ZUxlZnRFeHBhbnNpb24oZmFsc2UpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEFsbG93TGVmdEV4cGFuc2lvbjoKLSAgICAgICAgdGV4dEJveC5zZXRDYW5IYXZlTGVmdEV4
cGFuc2lvbih0cnVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBzd2l0Y2ggKGV4
cGFuc2lvbkJlaGF2aW9yICYgUmlnaHRFeHBhbnNpb25NYXNrKSB7Ci0gICAgY2FzZSBGb3JjZVJp
Z2h0RXhwYW5zaW9uOgotICAgICAgICB0ZXh0Qm94LnNldEZvcmNlUmlnaHRFeHBhbnNpb24oKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb3JiaWRSaWdodEV4cGFuc2lvbjoKLSAgICAgICAg
dGV4dEJveC5zZXRDYW5IYXZlUmlnaHRFeHBhbnNpb24oZmFsc2UpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEFsbG93UmlnaHRFeHBhbnNpb246Ci0gICAgICAgIHRleHRCb3guc2V0Q2FuSGF2
ZVJpZ2h0RXhwYW5zaW9uKHRydWUpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1z
dGF0aWMgYm9vbCBpbmxpbmVBbmNlc3Rvckhhc1N0YXJ0Qm9yZGVyUGFkZGluZ09yTWFyZ2luKGNv
bnN0IFJlbmRlckJsb2NrRmxvdyYgYmxvY2ssIGNvbnN0IElubGluZUJveCYgYm94KQotewotICAg
IGJvb2wgaXNMVFIgPSBibG9jay5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKLSAg
ICBmb3IgKGF1dG8qIGN1cnJlbnRCb3ggPSBib3gucGFyZW50KCk7IGN1cnJlbnRCb3g7IGN1cnJl
bnRCb3ggPSBjdXJyZW50Qm94LT5wYXJlbnQoKSkgewotICAgICAgICBpZiAoKGlzTFRSICYmIGN1
cnJlbnRCb3gtPm1hcmdpbkJvcmRlclBhZGRpbmdMb2dpY2FsTGVmdCgpID4gMCkKLSAgICAgICAg
ICAgIHx8ICghaXNMVFIgJiYgY3VycmVudEJveC0+bWFyZ2luQm9yZGVyUGFkZGluZ0xvZ2ljYWxS
aWdodCgpID4gMCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi1zdGF0aWMgYm9vbCBpbmxpbmVBbmNlc3Rvckhhc0VuZEJvcmRlclBhZGRp
bmdPck1hcmdpbihjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGJsb2NrLCBjb25zdCBJbmxpbmVCb3gm
IGJveCkKLXsKLSAgICBib29sIGlzTFRSID0gYmxvY2suc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGly
ZWN0aW9uKCk7Ci0gICAgZm9yIChhdXRvKiBjdXJyZW50Qm94ID0gYm94LnBhcmVudCgpOyBjdXJy
ZW50Qm94OyBjdXJyZW50Qm94ID0gY3VycmVudEJveC0+cGFyZW50KCkpIHsKLSAgICAgICAgaWYg
KChpc0xUUiAmJiBjdXJyZW50Qm94LT5tYXJnaW5Cb3JkZXJQYWRkaW5nTG9naWNhbFJpZ2h0KCkg
PiAwKQotICAgICAgICAgICAgfHwgKCFpc0xUUiAmJiBjdXJyZW50Qm94LT5tYXJnaW5Cb3JkZXJQ
YWRkaW5nTG9naWNhbExlZnQoKSA+IDApKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotICAgIHJldHVybiBmYWxzZTsKLX0KLSAgICAKLXN0YXRpYyBib29sIGlzTGFzdEluRmxvd1J1
bihCaWRpUnVuJiBydW5Ub0NoZWNrKQotewotICAgIGZvciAoYXV0byogcnVuID0gcnVuVG9DaGVj
ay5uZXh0KCk7IHJ1bjsgcnVuID0gcnVuLT5uZXh0KCkpIHsKLSAgICAgICAgaWYgKCFydW4tPmJv
eCgpIHx8IHJ1bi0+cmVuZGVyZXIoKS5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSB8fCBydW4tPmJv
eCgpLT5pc0xpbmVCcmVhaygpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUJpZGlSdW4qIENvbXBsZXhM
aW5lTGF5b3V0Ojpjb21wdXRlSW5saW5lRGlyZWN0aW9uUG9zaXRpb25zRm9yU2VnbWVudChSb290
SW5saW5lQm94KiBsaW5lQm94LCBjb25zdCBMaW5lSW5mbyYgbGluZUluZm8sIFRleHRBbGlnbk1v
ZGUgdGV4dEFsaWduLCBmbG9hdCYgbGluZUxvZ2ljYWxMZWZ0LAotICAgIGZsb2F0JiBhdmFpbGFi
bGVMb2dpY2FsV2lkdGgsIEJpZGlSdW4qIGZpcnN0UnVuLCBCaWRpUnVuKiB0cmFpbGluZ1NwYWNl
UnVuLCBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcCYgdGV4dEJveERhdGFNYXAsIFZl
cnRpY2FsUG9zaXRpb25DYWNoZSYgdmVydGljYWxQb3NpdGlvbkNhY2hlLAotICAgIFdvcmRNZWFz
dXJlbWVudHMmIHdvcmRNZWFzdXJlbWVudHMpCi17Ci0gICAgYm9vbCBuZWVkc1dvcmRTcGFjaW5n
ID0gZmFsc2U7Ci0gICAgYm9vbCBjYW5IYW5nUHVuY3R1YXRpb25BdFN0YXJ0ID0gc3R5bGUoKS5o
YW5naW5nUHVuY3R1YXRpb24oKS5jb250YWlucyhIYW5naW5nUHVuY3R1YXRpb246OkZpcnN0KTsK
LSAgICBib29sIGNhbkhhbmdQdW5jdHVhdGlvbkF0RW5kID0gc3R5bGUoKS5oYW5naW5nUHVuY3R1
YXRpb24oKS5jb250YWlucyhIYW5naW5nUHVuY3R1YXRpb246Okxhc3QpOwotICAgIGJvb2wgaXNM
VFIgPSBzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKLSAgICBmbG9hdCBjb250ZW50
V2lkdGggPSAwOwotICAgIHVuc2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQgPSAwOwot
ICAgIGJvb2wgaXNBZnRlckV4cGFuc2lvbiA9IGlzPFJlbmRlclJ1YnlCYXNlPihtX2Zsb3cpID8g
ZG93bmNhc3Q8UmVuZGVyUnVieUJhc2U+KG1fZmxvdykuaXNBZnRlckV4cGFuc2lvbigpIDogdHJ1
ZTsKLSAgICBWZWN0b3I8dW5zaWduZWQsIDE2PiBleHBhbnNpb25PcHBvcnR1bml0aWVzOwotCi0g
ICAgSGFzaE1hcDxJbmxpbmVUZXh0Qm94KiwgTGF5b3V0VW5pdD4gbG9naWNhbFNwYWNpbmdGb3JJ
bmxpbmVUZXh0Qm94ZXM7Ci0gICAgYXV0byBjb2xsZWN0U3BhY2luZ0xvZ2ljYWxXaWR0aHMgPSBb
Jl0gKCkgewotICAgICAgICBhdXRvIHRvdGFsU3BhY2luZ1dpZHRoID0gTGF5b3V0VW5pdCB7IH07
Ci0gICAgICAgIC8vIENvbGxlY3QgdGhlIHNwYWNpbmcgcG9zaXRpb25zIChtYXJnaW4sIGJvcmRl
ciBwYWRkaW5nKSBmb3IgdGhlIHRleHRib3hlcyBieSB0cmF2ZXJzaW5nIHRoZSBpbmxpbmUgdHJl
ZSBvZiB0aGUgY3VycmVudCBsaW5lLgotICAgICAgICBWZWN0b3I8SW5saW5lQm94Kj4gcXVldWU7
Ci0gICAgICAgIHF1ZXVlLmFwcGVuZChsaW5lQm94KTsKLSAgICAgICAgLy8gMS4gVmlzaXQgZWFj
aCBpbmxpbmUgYm94IGluIGEgcHJlb3JkZXIgZmFzaGlvbgotICAgICAgICAvLyAyLiBBY2N1bXVs
YXRlIHRoZSBzcGFjaW5nIHdoZW4gd2UgZmluZCBhbiBJbmxpbmVGbG93Qm94IChpbmxpbmUgY29u
dGFpbmVyIGUuZy4gc3BhbikKLSAgICAgICAgLy8gMy4gQWRkIHRoZSBJbmxpbmVUZXh0Qm94ZXMg
dG8gdGhlIGhhc2htYXAKLSAgICAgICAgd2hpbGUgKCFxdWV1ZS5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgICAgICAgICAgYXV0byogaW5saW5lQm94ID0g
cXVldWUubGFzdCgpOwotICAgICAgICAgICAgICAgIGlmIChpczxJbmxpbmVGbG93Qm94Pihpbmxp
bmVCb3gpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8mIGlubGluZUZsb3dCb3ggPSBkb3du
Y2FzdDxJbmxpbmVGbG93Qm94PigqaW5saW5lQm94KTsKLSAgICAgICAgICAgICAgICAgICAgdG90
YWxTcGFjaW5nV2lkdGggKz0gaW5saW5lRmxvd0JveC5tYXJnaW5Cb3JkZXJQYWRkaW5nTG9naWNh
bExlZnQoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8qIGNoaWxkID0gaW5saW5lRmxv
d0JveC5maXJzdENoaWxkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlLmFwcGVu
ZChjaGlsZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgaWYgKGlzPElubGluZVRleHRCb3g+KGlubGluZUJveCkpCi0gICAg
ICAgICAgICAgICAgICAgIGxvZ2ljYWxTcGFjaW5nRm9ySW5saW5lVGV4dEJveGVzLmFkZChkb3du
Y2FzdDxJbmxpbmVUZXh0Qm94PihpbmxpbmVCb3gpLCB0b3RhbFNwYWNpbmdXaWR0aCk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB3aGlsZSAoIXF1
ZXVlLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIGF1dG8mIGlubGluZUJveCA9ICpxdWV1
ZS50YWtlTGFzdCgpOwotICAgICAgICAgICAgICAgIGlmIChpczxJbmxpbmVGbG93Qm94Pihpbmxp
bmVCb3gpKQotICAgICAgICAgICAgICAgICAgICB0b3RhbFNwYWNpbmdXaWR0aCArPSBkb3duY2Fz
dDxJbmxpbmVGbG93Qm94PihpbmxpbmVCb3gpLm1hcmdpbkJvcmRlclBhZGRpbmdMb2dpY2FsUmln
aHQoKTsKLSAgICAgICAgICAgICAgICBpZiAoYXV0byogbmV4dFNpYmxpbmcgPSBpbmxpbmVCb3gu
bmV4dE9uTGluZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHF1ZXVlLmFwcGVuZChuZXh0U2li
bGluZyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH07Ci0gICAgY29sbGVjdFNwYWNpbmdMb2dpY2Fs
V2lkdGhzKCk7Ci0KLSAgICBCaWRpUnVuKiBydW4gPSBmaXJzdFJ1bjsKLSAgICBCaWRpUnVuKiBw
cmV2aW91c1J1biA9IG51bGxwdHI7Ci0gICAgZm9yICg7IHJ1bjsgcnVuID0gcnVuLT5uZXh0KCkp
IHsKLSAgICAgICAgYXV0byBjb21wdXRlRXhwYW5zaW9uT3Bwb3J0dW5pdGllcyA9IFsmZXhwYW5z
aW9uT3Bwb3J0dW5pdGllcywgJmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQsIHRleHRBbGlnbiwg
JmlzQWZ0ZXJFeHBhbnNpb25dIChSZW5kZXJCbG9ja0Zsb3cmIGJsb2NrLAotICAgICAgICAgICAg
SW5saW5lVGV4dEJveCYgdGV4dEJveCwgQmlkaVJ1biogcHJldmlvdXNSdW4sIEJpZGlSdW4qIG5l
eHRSdW4sIGNvbnN0IFN0cmluZ1ZpZXcmIHN0cmluZ1ZpZXcsIFRleHREaXJlY3Rpb24gZGlyZWN0
aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoc3RyaW5nVmlldy5pc0VtcHR5KCkpIHsK
LSAgICAgICAgICAgICAgICAvLyBFbXB0eSBydW5zIHNob3VsZCBzdGlsbCBwcm9kdWNlIGFuIGVu
dHJ5IGluIGV4cGFuc2lvbk9wcG9ydHVuaXRpZXMgbGlzdCBzbyB0aGF0IHRoZSBudW1iZXIgb2Yg
aXRlbXMgbWF0Y2hlcyB0aGUgbnVtYmVyIG9mIHJ1bnMuCi0gICAgICAgICAgICAgICAgZXhwYW5z
aW9uT3Bwb3J0dW5pdGllcy5hcHBlbmQoMCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgRXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZp
b3IgPSBleHBhbnNpb25CZWhhdmlvckZvcklubGluZVRleHRCb3goYmxvY2ssIHRleHRCb3gsIHBy
ZXZpb3VzUnVuLCBuZXh0UnVuLCB0ZXh0QWxpZ24sIGlzQWZ0ZXJFeHBhbnNpb24pOwotICAgICAg
ICAgICAgYXBwbHlFeHBhbnNpb25CZWhhdmlvcih0ZXh0Qm94LCBleHBhbnNpb25CZWhhdmlvcik7
Ci0gICAgICAgICAgICB1bnNpZ25lZCBvcHBvcnR1bml0aWVzSW5SdW47Ci0gICAgICAgICAgICBz
dGQ6OnRpZShvcHBvcnR1bml0aWVzSW5SdW4sIGlzQWZ0ZXJFeHBhbnNpb24pID0gRm9udENhc2Nh
ZGU6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQoc3RyaW5nVmlldywgZGlyZWN0aW9uLCBleHBh
bnNpb25CZWhhdmlvcik7Ci0gICAgICAgICAgICBleHBhbnNpb25PcHBvcnR1bml0aWVzLmFwcGVu
ZChvcHBvcnR1bml0aWVzSW5SdW4pOwotICAgICAgICAgICAgZXhwYW5zaW9uT3Bwb3J0dW5pdHlD
b3VudCArPSBvcHBvcnR1bml0aWVzSW5SdW47Ci0gICAgICAgIH07Ci0gICAgICAgIGlmICghcnVu
LT5ib3goKSB8fCBydW4tPnJlbmRlcmVyKCkuaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgfHwgcnVu
LT5ib3goKS0+aXNMaW5lQnJlYWsoKSkgewotICAgICAgICAgICAgLy8gUG9zaXRpb25lZCBvYmpl
Y3RzIGFyZSBvbmx5IHBhcnRpY2lwYXRpbmcgdG8gZmlndXJlIG91dCB0aGVpciBjb3JyZWN0IHN0
YXRpYyB4IHBvc2l0aW9uLgotICAgICAgICAgICAgLy8gVGhleSBoYXZlIG5vIGVmZmVjdCBvbiB0
aGUgd2lkdGguIFNpbWlsYXJseSwgbGluZSBicmVhayBib3hlcyBoYXZlIG5vIGVmZmVjdCBvbiB0
aGUgd2lkdGguCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAo
aXM8UmVuZGVyVGV4dD4ocnVuLT5yZW5kZXJlcigpKSkgewotICAgICAgICAgICAgYXV0byYgcmVu
ZGVyVGV4dCA9IGRvd25jYXN0PFJlbmRlclRleHQ+KHJ1bi0+cmVuZGVyZXIoKSk7Ci0gICAgICAg
ICAgICBhdXRvJiB0ZXh0Qm94ID0gZG93bmNhc3Q8SW5saW5lVGV4dEJveD4oKnJ1bi0+Ym94KCkp
OwotICAgICAgICAgICAgaWYgKGNhbkhhbmdQdW5jdHVhdGlvbkF0U3RhcnQgJiYgbGluZUluZm8u
aXNGaXJzdExpbmUoKSAmJiAoaXNMVFIgfHwgaXNMYXN0SW5GbG93UnVuKCpydW4pKQotICAgICAg
ICAgICAgICAgICYmICFpbmxpbmVBbmNlc3Rvckhhc1N0YXJ0Qm9yZGVyUGFkZGluZ09yTWFyZ2lu
KG1fZmxvdywgKnJ1bi0+Ym94KCkpKSB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgaGFuZ1N0YXJ0
V2lkdGggPSByZW5kZXJUZXh0LmhhbmdhYmxlUHVuY3R1YXRpb25TdGFydFdpZHRoKHJ1bi0+bV9z
dGFydCk7Ci0gICAgICAgICAgICAgICAgYXZhaWxhYmxlTG9naWNhbFdpZHRoICs9IGhhbmdTdGFy
dFdpZHRoOwotICAgICAgICAgICAgICAgIGlmIChzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rp
b24oKSkKLSAgICAgICAgICAgICAgICAgICAgbGluZUxvZ2ljYWxMZWZ0IC09IGhhbmdTdGFydFdp
ZHRoOwotICAgICAgICAgICAgICAgIGNhbkhhbmdQdW5jdHVhdGlvbkF0U3RhcnQgPSBmYWxzZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGNhbkhhbmdQdW5j
dHVhdGlvbkF0RW5kICYmIGxpbmVJbmZvLmlzTGFzdExpbmUoKSAmJiBydW4tPm1fc3RvcCA+IDAg
JiYgKCFpc0xUUiB8fCBpc0xhc3RJbkZsb3dSdW4oKnJ1bikpCi0gICAgICAgICAgICAgICAgJiYg
IWlubGluZUFuY2VzdG9ySGFzRW5kQm9yZGVyUGFkZGluZ09yTWFyZ2luKG1fZmxvdywgKnJ1bi0+
Ym94KCkpKSB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgaGFuZ0VuZFdpZHRoID0gcmVuZGVyVGV4
dC5oYW5nYWJsZVB1bmN0dWF0aW9uRW5kV2lkdGgocnVuLT5tX3N0b3AgLSAxKTsKLSAgICAgICAg
ICAgICAgICBhdmFpbGFibGVMb2dpY2FsV2lkdGggKz0gaGFuZ0VuZFdpZHRoOwotICAgICAgICAg
ICAgICAgIGlmICghc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCi0gICAgICAgICAg
ICAgICAgICAgIGxpbmVMb2dpY2FsTGVmdCAtPSBoYW5nRW5kV2lkdGg7Ci0gICAgICAgICAgICAg
ICAgY2FuSGFuZ1B1bmN0dWF0aW9uQXRFbmQgPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgaWYgKHRleHRBbGlnbiA9PSBUZXh0QWxpZ25Nb2RlOjpKdXN0
aWZ5ICYmIHJ1biAhPSB0cmFpbGluZ1NwYWNlUnVuKQotICAgICAgICAgICAgICAgIGNvbXB1dGVF
eHBhbnNpb25PcHBvcnR1bml0aWVzKG1fZmxvdywgdGV4dEJveCwgcHJldmlvdXNSdW4sIHJ1bi0+
bmV4dCgpLCByZW5kZXJUZXh0LnN0cmluZ1ZpZXcocnVuLT5tX3N0YXJ0LCBydW4tPm1fc3RvcCks
IHJ1bi0+Ym94KCktPmRpcmVjdGlvbigpKTsKLQotICAgICAgICAgICAgaWYgKHVuc2lnbmVkIGxl
bmd0aCA9IHJlbmRlclRleHQudGV4dCgpLmxlbmd0aCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KCFydW4tPm1fc3RhcnQgJiYgbmVlZHNXb3JkU3BhY2luZyAmJiBpc1NwYWNlT3JOZXdsaW5lKHJl
bmRlclRleHQuY2hhcmFjdGVyQXQocnVuLT5tX3N0YXJ0KSkpCi0gICAgICAgICAgICAgICAgICAg
IGNvbnRlbnRXaWR0aCArPSBsaW5lU3R5bGUoKnJlbmRlclRleHQucGFyZW50KCksIGxpbmVJbmZv
KS5mb250Q2FzY2FkZSgpLndvcmRTcGFjaW5nKCk7Ci0gICAgICAgICAgICAgICAgLy8gcnVuLT5t
X3N0YXJ0ID09IHJ1bi0+bV9zdG9wIHNob3VsZCBvbmx5IGJlIHRydWUgaWZmIHRoZSBydW4gaXMg
YSByZXBsYWNlZCBydW4gZm9yIGJpZGk6IGlzb2xhdGUuCi0gICAgICAgICAgICAgICAgQVNTRVJU
KHJ1bi0+bV9zdG9wID4gMCB8fCBydW4tPm1fc3RhcnQgPT0gcnVuLT5tX3N0b3ApOwotICAgICAg
ICAgICAgICAgIG5lZWRzV29yZFNwYWNpbmcgPSBydW4tPm1fc3RvcCA9PSBsZW5ndGggJiYgIWlz
U3BhY2VPck5ld2xpbmUocmVuZGVyVGV4dC5jaGFyYWN0ZXJBdChydW4tPm1fc3RvcCAtIDEpKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGF1dG8gY3VycmVudExvZ2ljYWxMZWZ0UG9zaXRp
b24gPSBsb2dpY2FsU3BhY2luZ0ZvcklubGluZVRleHRCb3hlcy5nZXQoJnRleHRCb3gpICsgY29u
dGVudFdpZHRoOwotICAgICAgICAgICAgc2V0TG9naWNhbFdpZHRoRm9yVGV4dFJ1bihsaW5lQm94
LCBydW4sIHJlbmRlclRleHQsIGN1cnJlbnRMb2dpY2FsTGVmdFBvc2l0aW9uLCBsaW5lSW5mbywg
dGV4dEJveERhdGFNYXAsIHZlcnRpY2FsUG9zaXRpb25DYWNoZSwgd29yZE1lYXN1cmVtZW50cyk7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjYW5IYW5nUHVuY3R1YXRpb25BdFN0YXJ0
ID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIGVuY291bnRlcmVkSnVzdGlmaWVkUnVieSA9IGZh
bHNlOwotICAgICAgICAgICAgaWYgKGlzPFJlbmRlclJ1YnlSdW4+KHJ1bi0+cmVuZGVyZXIoKSkg
JiYgdGV4dEFsaWduID09IFRleHRBbGlnbk1vZGU6Okp1c3RpZnkgJiYgcnVuICE9IHRyYWlsaW5n
U3BhY2VSdW4gJiYgZG93bmNhc3Q8UmVuZGVyUnVieVJ1bj4ocnVuLT5yZW5kZXJlcigpKS5ydWJ5
QmFzZSgpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byogcnVieUJhc2UgPSBkb3duY2FzdDxSZW5k
ZXJSdWJ5UnVuPihydW4tPnJlbmRlcmVyKCkpLnJ1YnlCYXNlKCk7Ci0gICAgICAgICAgICAgICAg
aWYgKHJ1YnlCYXNlLT5maXJzdFJvb3RCb3goKSAmJiAhcnVieUJhc2UtPmZpcnN0Um9vdEJveCgp
LT5uZXh0Um9vdEJveCgpICYmIHJ1bi0+cmVuZGVyZXIoKS5zdHlsZSgpLmNvbGxhcHNlV2hpdGVT
cGFjZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJ1YnlCYXNlLT5zZXRJc0FmdGVyRXhwYW5z
aW9uKGlzQWZ0ZXJFeHBhbnNpb24pOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGF1dG8qIGxl
YWZDaGlsZCA9IHJ1YnlCYXNlLT5maXJzdFJvb3RCb3goKS0+Zmlyc3RMZWFmRGVzY2VuZGFudCgp
OyBsZWFmQ2hpbGQ7IGxlYWZDaGlsZCA9IGxlYWZDaGlsZC0+bmV4dExlYWZPbkxpbmUoKSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpczxJbmxpbmVUZXh0Qm94PigqbGVhZkNoaWxk
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGVuY291bnRlcmVkSnVzdGlmaWVkUnVieSA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBjb21wdXRlRXhwYW5zaW9uT3Bwb3J0dW5pdGllcygqcnVieUJhc2UsIGRvd25j
YXN0PElubGluZVRleHRCb3g+KCpsZWFmQ2hpbGQpLCBudWxscHRyLCBudWxscHRyLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlclRleHQ+KGxlYWZDaGlsZC0+cmVu
ZGVyZXIoKSkuc3RyaW5nVmlldygpLCBsZWFmQ2hpbGQtPmRpcmVjdGlvbigpKTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgaWYgKCFlbmNvdW50ZXJlZEp1c3RpZmllZFJ1YnkpCi0gICAgICAgICAgICAgICAgaXNB
ZnRlckV4cGFuc2lvbiA9IGZhbHNlOwotCi0gICAgICAgICAgICBpZiAoIWlzPFJlbmRlcklubGlu
ZT4ocnVuLT5yZW5kZXJlcigpKSkgewotICAgICAgICAgICAgICAgIGF1dG8mIHJlbmRlckJveCA9
IGRvd25jYXN0PFJlbmRlckJveD4ocnVuLT5yZW5kZXJlcigpKTsKLSAgICAgICAgICAgICAgICBp
ZiAoaXM8UmVuZGVyUnVieVJ1bj4ocmVuZGVyQm94KSkKLSAgICAgICAgICAgICAgICAgICAgc2V0
TWFyZ2luc0ZvclJ1YnlSdW4ocnVuLCBkb3duY2FzdDxSZW5kZXJSdWJ5UnVuPihyZW5kZXJCb3gp
LCBwcmV2aW91c1J1biA/ICZwcmV2aW91c1J1bi0+cmVuZGVyZXIoKSA6IG51bGxwdHIsIGxpbmVJ
bmZvKTsKLSAgICAgICAgICAgICAgICBydW4tPmJveCgpLT5zZXRMb2dpY2FsV2lkdGgobV9mbG93
LmxvZ2ljYWxXaWR0aEZvckNoaWxkKHJlbmRlckJveCkpOwotICAgICAgICAgICAgICAgIGNvbnRl
bnRXaWR0aCArPSBtX2Zsb3cubWFyZ2luU3RhcnRGb3JDaGlsZChyZW5kZXJCb3gpICsgbV9mbG93
Lm1hcmdpbkVuZEZvckNoaWxkKHJlbmRlckJveCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICBjb250ZW50V2lkdGggKz0gcnVuLT5ib3goKS0+bG9naWNhbFdpZHRoKCk7Ci0g
ICAgICAgIHByZXZpb3VzUnVuID0gcnVuOwotICAgIH0KLQotICAgIGlmIChpc0FmdGVyRXhwYW5z
aW9uICYmICFleHBhbnNpb25PcHBvcnR1bml0aWVzLmlzRW1wdHkoKSkgewotICAgICAgICAvLyBG
SVhNRTogc2VlIDx3ZWJraXQub3JnL2IvMTM5MzkzI2MxMT4KLSAgICAgICAgaW50IGxhc3RWYWxp
ZEV4cGFuc2lvbk9wcG9ydHVuaXRpZXNJbmRleCA9IGV4cGFuc2lvbk9wcG9ydHVuaXRpZXMuc2l6
ZSgpIC0gMTsKLSAgICAgICAgd2hpbGUgKGxhc3RWYWxpZEV4cGFuc2lvbk9wcG9ydHVuaXRpZXNJ
bmRleCA+PSAwICYmICFleHBhbnNpb25PcHBvcnR1bml0aWVzLmF0KGxhc3RWYWxpZEV4cGFuc2lv
bk9wcG9ydHVuaXRpZXNJbmRleCkpCi0gICAgICAgICAgICAtLWxhc3RWYWxpZEV4cGFuc2lvbk9w
cG9ydHVuaXRpZXNJbmRleDsKLSAgICAgICAgaWYgKGxhc3RWYWxpZEV4cGFuc2lvbk9wcG9ydHVu
aXRpZXNJbmRleCA+PSAwKSB7Ci0gICAgICAgICAgICBBU1NFUlQoZXhwYW5zaW9uT3Bwb3J0dW5p
dGllcy5hdChsYXN0VmFsaWRFeHBhbnNpb25PcHBvcnR1bml0aWVzSW5kZXgpKTsKLSAgICAgICAg
ICAgIGV4cGFuc2lvbk9wcG9ydHVuaXRpZXMuYXQobGFzdFZhbGlkRXhwYW5zaW9uT3Bwb3J0dW5p
dGllc0luZGV4KS0tOwotICAgICAgICAgICAgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudC0tOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGlzPFJlbmRlclJ1YnlCYXNlPihtX2Zsb3cpICYm
ICFleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KQotICAgICAgICB0ZXh0QWxpZ24gPSBUZXh0QWxp
Z25Nb2RlOjpDZW50ZXI7Ci0KLSAgICBhdXRvIHRvdGFsTG9naWNhbFdpZHRoID0gY29udGVudFdp
ZHRoICsgbGluZUJveC0+Z2V0Rmxvd1NwYWNpbmdMb2dpY2FsV2lkdGgoKTsKLSAgICB1cGRhdGVM
b2dpY2FsV2lkdGhGb3JBbGlnbm1lbnQobV9mbG93LCB0ZXh0QWxpZ24sIGxpbmVCb3gsIHRyYWls
aW5nU3BhY2VSdW4sIGxpbmVMb2dpY2FsTGVmdCwgdG90YWxMb2dpY2FsV2lkdGgsIGF2YWlsYWJs
ZUxvZ2ljYWxXaWR0aCwgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCk7Ci0gICAgY29tcHV0ZUV4
cGFuc2lvbkZvckp1c3RpZmllZFRleHQoZmlyc3RSdW4sIHRyYWlsaW5nU3BhY2VSdW4sIGV4cGFu
c2lvbk9wcG9ydHVuaXRpZXMsIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQsIHRvdGFsTG9naWNh
bFdpZHRoLCBhdmFpbGFibGVMb2dpY2FsV2lkdGgpOwotICAgIHJldHVybiBydW47Ci19Ci0KLXZv
aWQgQ29tcGxleExpbmVMYXlvdXQ6OnJlbW92ZUlubGluZUJveChCaWRpUnVuJiBydW4sIGNvbnN0
IFJvb3RJbmxpbmVCb3gmIHJvb3RMaW5lQm94KSBjb25zdAotewotICAgIGF1dG8qIGlubGluZUJv
eCA9IHJ1bi5ib3goKTsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIGF1dG8qIGlubGluZVBhcmVu
dCA9IGlubGluZUJveC0+cGFyZW50KCk7Ci0gICAgd2hpbGUgKGlubGluZVBhcmVudCAmJiBpbmxp
bmVQYXJlbnQgIT0gJnJvb3RMaW5lQm94KSB7Ci0gICAgICAgIEFTU0VSVCghaW5saW5lUGFyZW50
LT5pc0RpcnR5KCkpOwotICAgICAgICBpbmxpbmVQYXJlbnQgPSBpbmxpbmVQYXJlbnQtPnBhcmVu
dCgpOwotICAgIH0KLSAgICBBU1NFUlQoIXJvb3RMaW5lQm94LmlzRGlydHkoKSk7Ci0jZW5kaWYK
LSAgICBhdXRvKiBwYXJlbnQgPSBpbmxpbmVCb3gtPnBhcmVudCgpOwotICAgIGlubGluZUJveC0+
cmVtb3ZlRnJvbVBhcmVudCgpOwotCi0gICAgYXV0byYgcmVuZGVyZXIgPSBydW4ucmVuZGVyZXIo
KTsKLSAgICBpZiAoaXM8UmVuZGVyVGV4dD4ocmVuZGVyZXIpKQotICAgICAgICBkb3duY2FzdDxS
ZW5kZXJUZXh0PihyZW5kZXJlcikucmVtb3ZlVGV4dEJveChkb3duY2FzdDxJbmxpbmVUZXh0Qm94
PigqaW5saW5lQm94KSk7Ci0gICAgZGVsZXRlIGlubGluZUJveDsKLSAgICBydW4uc2V0Qm94KG51
bGxwdHIpOwotICAgIC8vIHJlbW92ZUZyb21QYXJlbnQoKSB1bm5lY2Vzc2FyaWx5IGRpcnRpZXMg
dGhlIGFuY2VzdG9yIHN1YnRyZWUuCi0gICAgYXV0byogYW5jZXN0b3IgPSBwYXJlbnQ7Ci0gICAg
d2hpbGUgKGFuY2VzdG9yKSB7Ci0gICAgICAgIGFuY2VzdG9yLT5tYXJrRGlydHkoZmFsc2UpOwot
ICAgICAgICBpZiAoYW5jZXN0b3IgPT0gJnJvb3RMaW5lQm94KQotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVudCgpOwotICAgIH0KLX0KLQotdm9p
ZCBDb21wbGV4TGluZUxheW91dDo6Y29tcHV0ZUJsb2NrRGlyZWN0aW9uUG9zaXRpb25zRm9yTGlu
ZShSb290SW5saW5lQm94KiBsaW5lQm94LCBCaWRpUnVuKiBmaXJzdFJ1biwgR2x5cGhPdmVyZmxv
d0FuZEZhbGxiYWNrRm9udHNNYXAmIHRleHRCb3hEYXRhTWFwLCBWZXJ0aWNhbFBvc2l0aW9uQ2Fj
aGUmIHZlcnRpY2FsUG9zaXRpb25DYWNoZSkKLXsKLSAgICBtX2Zsb3cuc2V0TG9naWNhbEhlaWdo
dChsaW5lQm94LT5hbGlnbkJveGVzSW5CbG9ja0RpcmVjdGlvbihtX2Zsb3cubG9naWNhbEhlaWdo
dCgpLCB0ZXh0Qm94RGF0YU1hcCwgdmVydGljYWxQb3NpdGlvbkNhY2hlKSk7Ci0KLSAgICAvLyBO
b3cgbWFrZSBzdXJlIHdlIHBsYWNlIHJlcGxhY2VkIHJlbmRlciBvYmplY3RzIGNvcnJlY3RseS4K
LSAgICBmb3IgKGF1dG8qIHJ1biA9IGZpcnN0UnVuOyBydW47IHJ1biA9IHJ1bi0+bmV4dCgpKSB7
Ci0gICAgICAgIEFTU0VSVChydW4tPmJveCgpKTsKLSAgICAgICAgaWYgKCFydW4tPmJveCgpKQot
ICAgICAgICAgICAgY29udGludWU7IC8vIFNraXAgcnVucyB3aXRoIG5vIGxpbmUgYm94ZXMuCi0K
LSAgICAgICAgLy8gQWxpZ24gcG9zaXRpb25lZCBib3hlcyB3aXRoIHRoZSB0b3Agb2YgdGhlIGxp
bmUgYm94LiBUaGlzIGlzCi0gICAgICAgIC8vIGEgcmVhc29uYWJsZSBhcHByb3hpbWF0aW9uIG9m
IGFuIGFwcHJvcHJpYXRlIHkgcG9zaXRpb24uCi0gICAgICAgIGF1dG8mIHJlbmRlcmVyID0gcnVu
LT5yZW5kZXJlcigpOwotICAgICAgICBpZiAocmVuZGVyZXIuaXNPdXRPZkZsb3dQb3NpdGlvbmVk
KCkpCi0gICAgICAgICAgICBydW4tPmJveCgpLT5zZXRMb2dpY2FsVG9wKG1fZmxvdy5sb2dpY2Fs
SGVpZ2h0KCkpOwotCi0gICAgICAgIC8vIFBvc2l0aW9uIGlzIHVzZWQgdG8gcHJvcGVybHkgcG9z
aXRpb24gYm90aCByZXBsYWNlZCBlbGVtZW50cyBhbmQKLSAgICAgICAgLy8gdG8gdXBkYXRlIHRo
ZSBzdGF0aWMgbm9ybWFsIGZsb3cgeC95IG9mIHBvc2l0aW9uZWQgZWxlbWVudHMuCi0gICAgICAg
IGJvb2wgaW5saW5lQm94SXNSZWR1bmRhbnQgPSBmYWxzZTsKLSAgICAgICAgaWYgKGlzPFJlbmRl
clRleHQ+KHJlbmRlcmVyKSkgewotICAgICAgICAgICAgYXV0byYgaW5saW5lVGV4dEJveCA9IGRv
d25jYXN0PElubGluZVRleHRCb3g+KCpydW4tPmJveCgpKTsKLSAgICAgICAgICAgIGRvd25jYXN0
PFJlbmRlclRleHQ+KHJlbmRlcmVyKS5wb3NpdGlvbkxpbmVCb3goaW5saW5lVGV4dEJveCk7Ci0g
ICAgICAgICAgICBpbmxpbmVCb3hJc1JlZHVuZGFudCA9ICFpbmxpbmVUZXh0Qm94Lmhhc1RleHRD
b250ZW50KCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoaXM8UmVuZGVyQm94PihyZW5kZXJlcikpIHsK
LSAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIpLnBvc2l0aW9uTGluZUJv
eChkb3duY2FzdDxJbmxpbmVFbGVtZW50Qm94PigqcnVuLT5ib3goKSkpOwotICAgICAgICAgICAg
aW5saW5lQm94SXNSZWR1bmRhbnQgPSByZW5kZXJlci5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKTsK
LSAgICAgICAgfSBlbHNlIGlmIChpczxSZW5kZXJMaW5lQnJlYWs+KHJlbmRlcmVyKSkKLSAgICAg
ICAgICAgIGRvd25jYXN0PFJlbmRlckxpbmVCcmVhaz4ocmVuZGVyZXIpLnJlcGxhY2VJbmxpbmVC
b3hXcmFwcGVyKGRvd25jYXN0PElubGluZUVsZW1lbnRCb3g+KCpydW4tPmJveCgpKSk7Ci0gICAg
ICAgIC8vIENoZWNrIGlmIHdlIG5lZWQgdG8ga2VlcCB0aGlzIGJveCBvbiB0aGUgbGluZSBhdCBh
bGwuCi0gICAgICAgIGlmIChpbmxpbmVCb3hJc1JlZHVuZGFudCkKLSAgICAgICAgICAgIHJlbW92
ZUlubGluZUJveCgqcnVuLCAqbGluZUJveCk7Ci0gICAgfQotfQotCi1zdGF0aWMgaW5saW5lIGJv
b2wgaXNDb2xsYXBzaWJsZVNwYWNlKFVDaGFyIGNoYXJhY3RlciwgY29uc3QgUmVuZGVyVGV4dCYg
cmVuZGVyZXIpCi17Ci0gICAgaWYgKGNoYXJhY3RlciA9PSAnICcgfHwgY2hhcmFjdGVyID09ICdc
dCcgfHwgY2hhcmFjdGVyID09IHNvZnRIeXBoZW4pCi0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IGlmIChjaGFyYWN0ZXIgPT0gJ1xuJykKLSAgICAgICAgcmV0dXJuICFyZW5kZXJlci5zdHlsZSgp
LnByZXNlcnZlTmV3bGluZSgpOwotICAgIGlmIChjaGFyYWN0ZXIgPT0gbm9CcmVha1NwYWNlKQot
ICAgICAgICByZXR1cm4gcmVuZGVyZXIuc3R5bGUoKS5uYnNwTW9kZSgpID09IE5CU1BNb2RlOjpT
cGFjZTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0
ZXJUeXBlPgotc3RhdGljIGlubGluZSB1bnNpZ25lZCBmaW5kRmlyc3RUcmFpbGluZ1NwYWNlKGNv
bnN0IFJlbmRlclRleHQmIGxhc3RUZXh0LCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJz
LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgc3RvcCkKLXsKLSAgICB1bnNpZ25lZCBmaXJzdFNw
YWNlID0gc3RvcDsKLSAgICB3aGlsZSAoZmlyc3RTcGFjZSA+IHN0YXJ0KSB7Ci0gICAgICAgIFVD
aGFyIGN1cnJlbnQgPSBjaGFyYWN0ZXJzW2ZpcnN0U3BhY2UgLSAxXTsKLSAgICAgICAgaWYgKCFp
c0NvbGxhcHNpYmxlU3BhY2UoY3VycmVudCwgbGFzdFRleHQpKQotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGZpcnN0U3BhY2UtLTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmlyc3RTcGFjZTsK
LX0KLQotaW5saW5lIEJpZGlSdW4qIENvbXBsZXhMaW5lTGF5b3V0OjpoYW5kbGVUcmFpbGluZ1Nw
YWNlcyhCaWRpUnVuTGlzdDxCaWRpUnVuPiYgYmlkaVJ1bnMsIEJpZGlDb250ZXh0KiBjdXJyZW50
Q29udGV4dCkKLXsKLSAgICBpZiAoIWJpZGlSdW5zLnJ1bkNvdW50KCkKLSAgICAgICAgfHwgIWJp
ZGlSdW5zLmxvZ2ljYWxseUxhc3RSdW4oKS0+cmVuZGVyZXIoKS5zdHlsZSgpLmJyZWFrT25seUFm
dGVyV2hpdGVTcGFjZSgpCi0gICAgICAgIHx8ICFiaWRpUnVucy5sb2dpY2FsbHlMYXN0UnVuKCkt
PnJlbmRlcmVyKCkuc3R5bGUoKS5hdXRvV3JhcCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotICAgIEJpZGlSdW4qIHRyYWlsaW5nU3BhY2VSdW4gPSBiaWRpUnVucy5sb2dpY2FsbHlMYXN0
UnVuKCk7Ci0gICAgY29uc3QgUmVuZGVyT2JqZWN0JiBsYXN0T2JqZWN0ID0gdHJhaWxpbmdTcGFj
ZVJ1bi0+cmVuZGVyZXIoKTsKLSAgICBpZiAoIWlzPFJlbmRlclRleHQ+KGxhc3RPYmplY3QpKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGNvbnN0IFJlbmRlclRleHQmIGxhc3RUZXh0
ID0gZG93bmNhc3Q8UmVuZGVyVGV4dD4obGFzdE9iamVjdCk7Ci0gICAgdW5zaWduZWQgZmlyc3RT
cGFjZTsKLSAgICBpZiAobGFzdFRleHQudGV4dCgpLmlzOEJpdCgpKQotICAgICAgICBmaXJzdFNw
YWNlID0gZmluZEZpcnN0VHJhaWxpbmdTcGFjZShsYXN0VGV4dCwgbGFzdFRleHQudGV4dCgpLmNo
YXJhY3RlcnM4KCksIHRyYWlsaW5nU3BhY2VSdW4tPnN0YXJ0KCksIHRyYWlsaW5nU3BhY2VSdW4t
PnN0b3AoKSk7Ci0gICAgZWxzZQotICAgICAgICBmaXJzdFNwYWNlID0gZmluZEZpcnN0VHJhaWxp
bmdTcGFjZShsYXN0VGV4dCwgbGFzdFRleHQudGV4dCgpLmNoYXJhY3RlcnMxNigpLCB0cmFpbGlu
Z1NwYWNlUnVuLT5zdGFydCgpLCB0cmFpbGluZ1NwYWNlUnVuLT5zdG9wKCkpOwotCi0gICAgaWYg
KGZpcnN0U3BhY2UgPT0gdHJhaWxpbmdTcGFjZVJ1bi0+c3RvcCgpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gc3R5bGUoKS5kaXJlY3Rp
b24oKTsKLSAgICBib29sIHNob3VsZFJlb3JkZXIgPSB0cmFpbGluZ1NwYWNlUnVuICE9IChkaXJl
Y3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gYmlkaVJ1bnMubGFzdFJ1bigpIDogYmlkaVJ1
bnMuZmlyc3RSdW4oKSk7Ci0gICAgaWYgKGZpcnN0U3BhY2UgIT0gdHJhaWxpbmdTcGFjZVJ1bi0+
c3RhcnQoKSkgewotICAgICAgICBCaWRpQ29udGV4dCogYmFzZUNvbnRleHQgPSBjdXJyZW50Q29u
dGV4dDsKLSAgICAgICAgd2hpbGUgKEJpZGlDb250ZXh0KiBwYXJlbnQgPSBiYXNlQ29udGV4dC0+
cGFyZW50KCkpCi0gICAgICAgICAgICBiYXNlQ29udGV4dCA9IHBhcmVudDsKLQotICAgICAgICBz
dGQ6OnVuaXF1ZV9wdHI8QmlkaVJ1bj4gbmV3VHJhaWxpbmdSdW4gPSBtYWtlVW5pcXVlPEJpZGlS
dW4+KGZpcnN0U3BhY2UsIHRyYWlsaW5nU3BhY2VSdW4tPm1fc3RvcCwgdHJhaWxpbmdTcGFjZVJ1
bi0+cmVuZGVyZXIoKSwgYmFzZUNvbnRleHQsIFVfT1RIRVJfTkVVVFJBTCk7Ci0gICAgICAgIHRy
YWlsaW5nU3BhY2VSdW4tPm1fc3RvcCA9IGZpcnN0U3BhY2U7Ci0gICAgICAgIHRyYWlsaW5nU3Bh
Y2VSdW4gPSBuZXdUcmFpbGluZ1J1bi5nZXQoKTsKLSAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBU
ZXh0RGlyZWN0aW9uOjpMVFIpCi0gICAgICAgICAgICBiaWRpUnVucy5hcHBlbmRSdW4oV1RGTW92
ZShuZXdUcmFpbGluZ1J1bikpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBiaWRpUnVucy5w
cmVwZW5kUnVuKFdURk1vdmUobmV3VHJhaWxpbmdSdW4pKTsKLSAgICAgICAgcmV0dXJuIHRyYWls
aW5nU3BhY2VSdW47Ci0gICAgfQotICAgIGlmICghc2hvdWxkUmVvcmRlcikKLSAgICAgICAgcmV0
dXJuIHRyYWlsaW5nU3BhY2VSdW47Ci0KLSAgICBpZiAoZGlyZWN0aW9uID09IFRleHREaXJlY3Rp
b246OkxUUikgewotICAgICAgICBiaWRpUnVucy5tb3ZlUnVuVG9FbmQodHJhaWxpbmdTcGFjZVJ1
bik7Ci0gICAgICAgIHRyYWlsaW5nU3BhY2VSdW4tPm1fbGV2ZWwgPSAwOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIGJpZGlSdW5zLm1vdmVSdW5Ub0JlZ2lubmluZyh0cmFpbGluZ1NwYWNlUnVuKTsK
LSAgICAgICAgdHJhaWxpbmdTcGFjZVJ1bi0+bV9sZXZlbCA9IDE7Ci0gICAgfQotICAgIHJldHVy
biB0cmFpbGluZ1NwYWNlUnVuOwotfQotCi12b2lkIENvbXBsZXhMaW5lTGF5b3V0OjphcHBlbmRG
bG9hdGluZ09iamVjdFRvTGFzdExpbmUoRmxvYXRpbmdPYmplY3QmIGZsb2F0aW5nT2JqZWN0KQot
ewotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFmbG9hdGluZ09iamVjdC5v
cmlnaW5hdGluZ0xpbmUoKSk7Ci0gICAgQVNTRVJUKGxhc3RSb290Qm94KCkpOwotICAgIGZsb2F0
aW5nT2JqZWN0LnNldE9yaWdpbmF0aW5nTGluZSgqbGFzdFJvb3RCb3goKSk7Ci0gICAgbGFzdFJv
b3RCb3goKS0+YXBwZW5kRmxvYXQoZmxvYXRpbmdPYmplY3QucmVuZGVyZXIoKSk7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgdm9pZCBub3RpZnlSZXNvbHZlclRvUmVzdW1lSW5Jc29sYXRlKElubGluZUJp
ZGlSZXNvbHZlciYgcmVzb2x2ZXIsIFJlbmRlck9iamVjdCogcm9vdCwgUmVuZGVyT2JqZWN0KiBz
dGFydE9iamVjdCkKLXsKLSAgICBpZiAocm9vdCAhPSBzdGFydE9iamVjdCkgewotICAgICAgICBS
ZW5kZXJPYmplY3QqIHBhcmVudCA9IHN0YXJ0T2JqZWN0LT5wYXJlbnQoKTsKLSAgICAgICAgbm90
aWZ5UmVzb2x2ZXJUb1Jlc3VtZUluSXNvbGF0ZShyZXNvbHZlciwgcm9vdCwgcGFyZW50KTsKLSAg
ICAgICAgbm90aWZ5T2JzZXJ2ZXJFbnRlcmVkT2JqZWN0KCZyZXNvbHZlciwgc3RhcnRPYmplY3Qp
OwotICAgIH0KLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNldFVwUmVzb2x2ZXJUb1Jlc3VtZUlu
SXNvbGF0ZShJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyLCBJbmxpbmVCaWRpUmVzb2x2ZXIm
IHRvcFJlc29sdmVyLCBCaWRpUnVuJiBpc29sYXRlZFJ1biwgUmVuZGVyT2JqZWN0KiByb290LCBS
ZW5kZXJPYmplY3QqIHN0YXJ0T2JqZWN0KQotewotICAgIC8vIFNldCB1cCBtX3doaXRlc3BhY2VD
b2xsYXBzaW5nU3RhdGUKLSAgICByZXNvbHZlci53aGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlKCkg
PSB0b3BSZXNvbHZlci53aGl0ZXNwYWNlQ29sbGFwc2luZ1N0YXRlKCk7Ci0gICAgcmVzb2x2ZXIu
d2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZSgpLnNldEN1cnJlbnRUcmFuc2l0aW9uKHRvcFJlc29s
dmVyLndoaXRlc3BhY2VDb2xsYXBzaW5nVHJhbnNpdGlvbkZvcklzb2xhdGVkUnVuKGlzb2xhdGVk
UnVuKSk7Ci0KLSAgICAvLyBTZXQgdXAgbV9uZXN0ZWRJc29sYXRlQ291bnQKLSAgICBub3RpZnlS
ZXNvbHZlclRvUmVzdW1lSW5Jc29sYXRlKHJlc29sdmVyLCByb290LCBzdGFydE9iamVjdCk7Ci19
Ci0KLS8vIEZJWE1FOiBCaWRpUmVzb2x2ZXIgc2hvdWxkIGhhdmUgdGhpcyBsb2dpYy4KLXN0YXRp
YyBpbmxpbmUgdm9pZCBjb25zdHJ1Y3RCaWRpUnVuc0ZvclNlZ21lbnQoSW5saW5lQmlkaVJlc29s
dmVyJiB0b3BSZXNvbHZlciwgQmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mIGJpZGlSdW5zLCBjb25zdCBJ
bmxpbmVJdGVyYXRvciYgZW5kT2ZSdW5zLCBWaXN1YWxEaXJlY3Rpb25PdmVycmlkZSBvdmVycmlk
ZSwgYm9vbCBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHkpCi17Ci0gICAgLy8gRklYTUU6IFdlIHNo
b3VsZCBwYXNzIGEgQmlkaVJ1bkxpc3QgaW50byBjcmVhdGVCaWRpUnVuc0ZvckxpbmUgaW5zdGVh
ZAotICAgIC8vIG9mIHRoZSByZXNvbHZlciBvd25pbmcgdGhlIHJ1bnMuCi0gICAgQVNTRVJUKCZ0
b3BSZXNvbHZlci5ydW5zKCkgPT0gJmJpZGlSdW5zKTsKLSAgICBBU1NFUlQodG9wUmVzb2x2ZXIu
cG9zaXRpb24oKSAhPSBlbmRPZlJ1bnMpOwotICAgIFJlbmRlck9iamVjdCogY3VycmVudFJvb3Qg
PSB0b3BSZXNvbHZlci5wb3NpdGlvbigpLnJvb3QoKTsKLSAgICB0b3BSZXNvbHZlci5jcmVhdGVC
aWRpUnVuc0ZvckxpbmUoZW5kT2ZSdW5zLCBvdmVycmlkZSwgcHJldmlvdXNMaW5lQnJva2VDbGVh
bmx5KTsKLQotICAgIHdoaWxlICghdG9wUmVzb2x2ZXIuaXNvbGF0ZWRSdW5zKCkuaXNFbXB0eSgp
KSB7Ci0gICAgICAgIC8vIEl0IGRvZXMgbm90IG1hdHRlciB3aGljaCBvcmRlciB3ZSByZXNvbHZl
IHRoZSBydW5zIGFzIGxvbmcgYXMgd2UgcmVzb2x2ZSB0aGVtIGFsbC4KLSAgICAgICAgYXV0byBp
c29sYXRlZFJ1biA9IFdURk1vdmUodG9wUmVzb2x2ZXIuaXNvbGF0ZWRSdW5zKCkubGFzdCgpKTsK
LSAgICAgICAgdG9wUmVzb2x2ZXIuaXNvbGF0ZWRSdW5zKCkucmVtb3ZlTGFzdCgpOwotICAgICAg
ICBjdXJyZW50Um9vdCA9ICZpc29sYXRlZFJ1bi5yb290OwotCi0gICAgICAgIFJlbmRlck9iamVj
dCYgc3RhcnRPYmplY3QgPSBpc29sYXRlZFJ1bi5vYmplY3Q7Ci0KLSAgICAgICAgLy8gT25seSBp
bmxpbmVzIG1ha2Ugc2Vuc2Ugd2l0aCB1bmljb2RlLWJpZGk6IGlzb2xhdGUgKGJsb2NrcyBhcmUg
YWxyZWFkeSBpc29sYXRlZCkuCi0gICAgICAgIC8vIEZJWE1FOiBCZWNhdXNlIGVudGVySXNvbGF0
ZSBpcyBub3QgcGFzc2VkIGEgUmVuZGVyT2JqZWN0LCB3ZSBoYXZlIHRvIGNyYXdsIHVwIHRoZQot
ICAgICAgICAvLyB0cmVlIHRvIHNlZSB3aGljaCBwYXJlbnQgaW5saW5lIGlzIHRoZSBpc29sYXRl
LiBXZSBjb3VsZCBjaGFuZ2UgZW50ZXJJc29sYXRlCi0gICAgICAgIC8vIHRvIHRha2UgYSBSZW5k
ZXJPYmplY3QgYW5kIGRvIHRoaXMgbG9naWMgdGhlcmUsIGJ1dCB0aGF0IHdvdWxkIGJlIGEgbGF5
ZXJpbmcKLSAgICAgICAgLy8gdmlvbGF0aW9uIGZvciBCaWRpUmVzb2x2ZXIgKHdoaWNoIGtub3dz
IG5vdGhpbmcgYWJvdXQgUmVuZGVyT2JqZWN0KS4KLSAgICAgICAgUmVuZGVySW5saW5lKiBpc29s
YXRlZElubGluZSA9IGRvd25jYXN0PFJlbmRlcklubGluZT4oaGlnaGVzdENvbnRhaW5pbmdJc29s
YXRlV2l0aGluUm9vdChzdGFydE9iamVjdCwgY3VycmVudFJvb3QpKTsKLSAgICAgICAgQVNTRVJU
KGlzb2xhdGVkSW5saW5lKTsKLQotICAgICAgICBJbmxpbmVCaWRpUmVzb2x2ZXIgaXNvbGF0ZWRS
ZXNvbHZlcjsKLSAgICAgICAgRVVuaWNvZGVCaWRpIHVuaWNvZGVCaWRpID0gaXNvbGF0ZWRJbmxp
bmUtPnN0eWxlKCkudW5pY29kZUJpZGkoKTsKLSAgICAgICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rp
b247Ci0gICAgICAgIGlmICh1bmljb2RlQmlkaSA9PSBQbGFpbnRleHQpCi0gICAgICAgICAgICBk
ZXRlcm1pbmVEaXJlY3Rpb25hbGl0eShkaXJlY3Rpb24sIElubGluZUl0ZXJhdG9yKGlzb2xhdGVk
SW5saW5lLCAmaXNvbGF0ZWRSdW4ub2JqZWN0LCAwKSk7Ci0gICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgQVNTRVJUKHVuaWNvZGVCaWRpID09IElzb2xhdGUgfHwgdW5pY29kZUJpZGkgPT0gSXNv
bGF0ZU92ZXJyaWRlKTsKLSAgICAgICAgICAgIGRpcmVjdGlvbiA9IGlzb2xhdGVkSW5saW5lLT5z
dHlsZSgpLmRpcmVjdGlvbigpOwotICAgICAgICB9Ci0gICAgICAgIGlzb2xhdGVkUmVzb2x2ZXIu
c2V0U3RhdHVzKEJpZGlTdGF0dXMoZGlyZWN0aW9uLCBpc092ZXJyaWRlKHVuaWNvZGVCaWRpKSkp
OwotCi0gICAgICAgIHNldFVwUmVzb2x2ZXJUb1Jlc3VtZUluSXNvbGF0ZShpc29sYXRlZFJlc29s
dmVyLCB0b3BSZXNvbHZlciwgaXNvbGF0ZWRSdW4ucnVuVG9SZXBsYWNlLCBpc29sYXRlZElubGlu
ZSwgJnN0YXJ0T2JqZWN0KTsKLQotICAgICAgICAvLyBUaGUgc3RhcnRpbmcgcG9zaXRpb24gaXMg
dGhlIGJlZ2lubmluZyBvZiB0aGUgZmlyc3QgcnVuIHdpdGhpbiB0aGUgaXNvbGF0ZSB0aGF0IHdh
cyBpZGVudGlmaWVkCi0gICAgICAgIC8vIGR1cmluZyB0aGUgZWFybGllciBjYWxsIHRvIGNyZWF0
ZUJpZGlSdW5zRm9yTGluZS4gVGhpcyBjYW4gYmUgYnV0IGlzIG5vdCBuZWNlc3NhcmlseSB0aGUK
LSAgICAgICAgLy8gZmlyc3QgcnVuIHdpdGhpbiB0aGUgaXNvbGF0ZS4KLSAgICAgICAgSW5saW5l
SXRlcmF0b3IgaXRlciA9IElubGluZUl0ZXJhdG9yKGlzb2xhdGVkSW5saW5lLCAmc3RhcnRPYmpl
Y3QsIGlzb2xhdGVkUnVuLnBvc2l0aW9uKTsKLSAgICAgICAgaXNvbGF0ZWRSZXNvbHZlci5zZXRQ
b3NpdGlvbklnbm9yaW5nTmVzdGVkSXNvbGF0ZXMoaXRlcik7Ci0KLSAgICAgICAgLy8gV2Ugc3Rv
cCBhdCB0aGUgbmV4dCBlbmQgb2YgbGluZTsgd2UgbWF5IHJlLWVudGVyIHRoaXMgaXNvbGF0ZSBp
biB0aGUgbmV4dCBjYWxsIHRvIGNvbnN0cnVjdEJpZGlSdW5zKCkuCi0gICAgICAgIC8vIEZJWE1F
OiBXaGF0IHNob3VsZCBlbmQgYW5kIHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSBiZT8KLSAgICAg
ICAgLy8gcm5pd2Egc2F5cyBwcmV2aW91c0xpbmVCcm9rZUNsZWFubHkgaXMganVzdCBhIFdpbklF
IGhhY2sgYW5kIGNvdWxkIGFsd2F5cyBiZSBmYWxzZSBoZXJlPwotICAgICAgICBpc29sYXRlZFJl
c29sdmVyLmNyZWF0ZUJpZGlSdW5zRm9yTGluZShlbmRPZlJ1bnMsIE5vVmlzdWFsT3ZlcnJpZGUs
IHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSk7Ci0gICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBkbyBu
b3QgZGVsZXRlIHRoZSBydW5zIGZyb20gdGhlIHJlc29sdmVyLgotICAgICAgICAvLyBXZSdyZSBu
b3QgZ3VhcmFudGVlZCB0byBnZXQgYW55IEJpZGlSdW5zIGluIHRoZSBwcmV2aW91cyBzdGVwLiBJ
ZiB3ZSBkb24ndCwgd2UgYWxsb3cgdGhlIHBsYWNlaG9sZGVyCi0gICAgICAgIC8vIGl0c2VsZiB0
byBiZSB0dXJuZWQgaW50byBhbiBJbmxpbmVCb3guIFdlIGNhbid0IHJlbW92ZSBpdCBoZXJlIHdp
dGhvdXQgcG90ZW50aWFsbHkgbG9zaW5nIHRyYWNrIG9mCi0gICAgICAgIC8vIHRoZSBsb2dpY2Fs
bHkgbGFzdCBydW4uCi0gICAgICAgIGlmIChpc29sYXRlZFJlc29sdmVyLnJ1bnMoKS5ydW5Db3Vu
dCgpKQotICAgICAgICAgICAgYmlkaVJ1bnMucmVwbGFjZVJ1bldpdGhSdW5zKCZpc29sYXRlZFJ1
bi5ydW5Ub1JlcGxhY2UsIGlzb2xhdGVkUmVzb2x2ZXIucnVucygpKTsKLQotICAgICAgICAvLyBJ
ZiB3ZSBlbmNvdW50ZXJlZCBhbnkgbmVzdGVkIGlzb2xhdGUgcnVucywganVzdCBtb3ZlIHRoZW0K
LSAgICAgICAgLy8gdG8gdGhlIHRvcCByZXNvbHZlcidzIGxpc3QgZm9yIGxhdGVyIHByb2Nlc3Np
bmcuCi0gICAgICAgIHdoaWxlICghaXNvbGF0ZWRSZXNvbHZlci5pc29sYXRlZFJ1bnMoKS5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgICAgIGF1dG8gcnVuV2l0aENvbnRleHQgPSBXVEZNb3ZlKGlzb2xh
dGVkUmVzb2x2ZXIuaXNvbGF0ZWRSdW5zKCkubGFzdCgpKTsKLSAgICAgICAgICAgIGlzb2xhdGVk
UmVzb2x2ZXIuaXNvbGF0ZWRSdW5zKCkucmVtb3ZlTGFzdCgpOwotICAgICAgICAgICAgdG9wUmVz
b2x2ZXIuc2V0V2hpdGVzcGFjZUNvbGxhcHNpbmdUcmFuc2l0aW9uRm9ySXNvbGF0ZWRSdW4ocnVu
V2l0aENvbnRleHQucnVuVG9SZXBsYWNlLCBpc29sYXRlZFJlc29sdmVyLndoaXRlc3BhY2VDb2xs
YXBzaW5nVHJhbnNpdGlvbkZvcklzb2xhdGVkUnVuKHJ1bldpdGhDb250ZXh0LnJ1blRvUmVwbGFj
ZSkpOwotICAgICAgICAgICAgdG9wUmVzb2x2ZXIuaXNvbGF0ZWRSdW5zKCkuYXBwZW5kKFdURk1v
dmUocnVuV2l0aENvbnRleHQpKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotLy8gVGhpcyBmdW5j
dGlvbiBjb25zdHJ1Y3RzIGxpbmUgYm94ZXMgZm9yIGFsbCBvZiB0aGUgdGV4dCBydW5zIGluIHRo
ZSByZXNvbHZlciBhbmQgY29tcHV0ZXMgdGhlaXIgcG9zaXRpb24uCi1Sb290SW5saW5lQm94KiBD
b21wbGV4TGluZUxheW91dDo6Y3JlYXRlTGluZUJveGVzRnJvbUJpZGlSdW5zKHVuc2lnbmVkIGJp
ZGlMZXZlbCwgQmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mIGJpZGlSdW5zLCBjb25zdCBJbmxpbmVJdGVy
YXRvciYgZW5kLCBMaW5lSW5mbyYgbGluZUluZm8sIFZlcnRpY2FsUG9zaXRpb25DYWNoZSYgdmVy
dGljYWxQb3NpdGlvbkNhY2hlLCBCaWRpUnVuKiB0cmFpbGluZ1NwYWNlUnVuLCBXb3JkTWVhc3Vy
ZW1lbnRzJiB3b3JkTWVhc3VyZW1lbnRzKQotewotICAgIGlmICghYmlkaVJ1bnMucnVuQ291bnQo
KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBGSVhNRTogV2h5IGlzIHRoaXMg
b25seSBkb25lIHdoZW4gd2UgaGFkIHJ1bnM/Ci0gICAgbGluZUluZm8uc2V0TGFzdExpbmUoIWVu
ZC5yZW5kZXJlcigpKTsKLQotICAgIFJvb3RJbmxpbmVCb3gqIGxpbmVCb3ggPSBjb25zdHJ1Y3RM
aW5lKGJpZGlSdW5zLCBsaW5lSW5mbyk7Ci0gICAgaWYgKCFsaW5lQm94KQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIGxpbmVCb3gtPnNldEJpZGlMZXZlbChiaWRpTGV2ZWwpOwotICAg
IGxpbmVCb3gtPnNldEVuZHNXaXRoQnJlYWsobGluZUluZm8ucHJldmlvdXNMaW5lQnJva2VDbGVh
bmx5KCkpOwotICAgIAotICAgIGJvb2wgaXNTVkdSb290SW5saW5lQm94ID0gaXM8U1ZHUm9vdElu
bGluZUJveD4oKmxpbmVCb3gpOwotICAgIAotICAgIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0Zv
bnRzTWFwIHRleHRCb3hEYXRhTWFwOwotICAgIAotICAgIC8vIE5vdyB3ZSBwb3NpdGlvbiBhbGwg
b2Ygb3VyIHRleHQgcnVucyBob3Jpem9udGFsbHkuCi0gICAgaWYgKCFpc1NWR1Jvb3RJbmxpbmVC
b3gpCi0gICAgICAgIGNvbXB1dGVJbmxpbmVEaXJlY3Rpb25Qb3NpdGlvbnNGb3JMaW5lKGxpbmVC
b3gsIGxpbmVJbmZvLCBiaWRpUnVucy5maXJzdFJ1bigpLCB0cmFpbGluZ1NwYWNlUnVuLCBlbmQu
YXRFbmQoKSwgdGV4dEJveERhdGFNYXAsIHZlcnRpY2FsUG9zaXRpb25DYWNoZSwgd29yZE1lYXN1
cmVtZW50cyk7Ci0gICAgCi0gICAgLy8gTm93IHBvc2l0aW9uIG91ciB0ZXh0IHJ1bnMgdmVydGlj
YWxseS4KLSAgICBjb21wdXRlQmxvY2tEaXJlY3Rpb25Qb3NpdGlvbnNGb3JMaW5lKGxpbmVCb3gs
IGJpZGlSdW5zLmZpcnN0UnVuKCksIHRleHRCb3hEYXRhTWFwLCB2ZXJ0aWNhbFBvc2l0aW9uQ2Fj
aGUpOwotICAgIAotICAgIC8vIFNWRyB0ZXh0IGxheW91dCBjb2RlIGNvbXB1dGVzIHZlcnRpY2Fs
ICYgaG9yaXpvbnRhbCBwb3NpdGlvbnMgb24gaXRzIG93bi4KLSAgICAvLyBOb3RlIHRoYXQgd2Ug
c3RpbGwgbmVlZCB0byBleGVjdXRlIGNvbXB1dGVWZXJ0aWNhbFBvc2l0aW9uc0ZvckxpbmUoKSBh
cwotICAgIC8vIGl0IGNhbGxzIElubGluZVRleHRCb3g6OnBvc2l0aW9uTGluZUJveCgpLCB3aGlj
aCB0cmFja3Mgd2hldGhlciB0aGUgYm94Ci0gICAgLy8gY29udGFpbnMgcmV2ZXJzZWQgdGV4dCBv
ciBub3QuIElmIHdlIHdvdWxkbid0IGRvIHRoYXQgZWRpdGluZyBhbmQgdGh1cwotICAgIC8vIHRl
eHQgc2VsZWN0aW9uIGluIFJUTCBib3hlcyB3b3VsZCBub3Qgd29yayBhcyBleHBlY3RlZC4KLSAg
ICBpZiAoaXNTVkdSb290SW5saW5lQm94KSB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhf
U0VDVVJJVFlfSU1QTElDQVRJT04obV9mbG93LmlzU1ZHVGV4dCgpKTsKLSAgICAgICAgZG93bmNh
c3Q8U1ZHUm9vdElubGluZUJveD4oKmxpbmVCb3gpLmNvbXB1dGVQZXJDaGFyYWN0ZXJMYXlvdXRJ
bmZvcm1hdGlvbigpOwotICAgIH0KLSAgICAKLSAgICAvLyBDb21wdXRlIG91ciBvdmVyZmxvdyBu
b3cuCi0gICAgbGluZUJveC0+Y29tcHV0ZU92ZXJmbG93KGxpbmVCb3gtPmxpbmVUb3AoKSwgbGlu
ZUJveC0+bGluZUJvdHRvbSgpLCB0ZXh0Qm94RGF0YU1hcCk7Ci0gICAgCi0gICAgcmV0dXJuIGxp
bmVCb3g7Ci19Ci0KLXN0YXRpYyB2b2lkIGRlbGV0ZUxpbmVSYW5nZShMaW5lTGF5b3V0U3RhdGUm
IGxheW91dFN0YXRlLCBSb290SW5saW5lQm94KiBzdGFydExpbmUsIFJvb3RJbmxpbmVCb3gqIHN0
b3BMaW5lID0gMCkKLXsKLSAgICBSb290SW5saW5lQm94KiBib3hUb0RlbGV0ZSA9IHN0YXJ0TGlu
ZTsKLSAgICB3aGlsZSAoYm94VG9EZWxldGUgJiYgYm94VG9EZWxldGUgIT0gc3RvcExpbmUpIHsK
LSAgICAgICAgbGF5b3V0U3RhdGUudXBkYXRlUmVwYWludFJhbmdlRnJvbUJveChib3hUb0RlbGV0
ZSk7Ci0gICAgICAgIC8vIE5vdGU6IGRlbGV0ZUxpbmVSYW5nZShmaXJzdFJvb3RCb3goKSkgaXMg
bm90IGlkZW50aWNhbCB0byBkZWxldGVMaW5lQm94VHJlZSgpLgotICAgICAgICAvLyBkZWxldGVM
aW5lQm94VHJlZSB1c2VzIG5leHRMaW5lQm94KCkgaW5zdGVhZCBvZiBuZXh0Um9vdEJveCgpIHdo
ZW4gdHJhdmVyc2luZy4KLSAgICAgICAgUm9vdElubGluZUJveCogbmV4dCA9IGJveFRvRGVsZXRl
LT5uZXh0Um9vdEJveCgpOwotICAgICAgICBib3hUb0RlbGV0ZS0+ZGVsZXRlTGluZSgpOwotICAg
ICAgICBib3hUb0RlbGV0ZSA9IG5leHQ7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCByZXBhaW50
RGlydHlGbG9hdHMoTGluZUxheW91dFN0YXRlOjpGbG9hdExpc3QmIGZsb2F0cykKLXsKLSAgICAv
LyBGbG9hdHMgdGhhdCBkaWQgbm90IGhhdmUgbGF5b3V0IGRpZCBub3QgcmVwYWludCB3aGVuIHdl
IGxhaWQgdGhlbSBvdXQuIFRoZXkgd291bGQgaGF2ZQotICAgIC8vIHBhaW50ZWQgYnkgbm93IGlm
IHRoZXkgaGFkIG1vdmVkLCBidXQgaWYgdGhleSBzdGF5ZWQgYXQgKDAsIDApLCB0aGV5IHN0aWxs
IG5lZWQgdG8gYmUKLSAgICAvLyBwYWludGVkLgotICAgIGZvciAoYXV0byYgZmxvYXRCb3ggOiBm
bG9hdHMpIHsKLSAgICAgICAgaWYgKGZsb2F0Qm94LT5ldmVySGFkTGF5b3V0KCkpCi0gICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgYXV0byYgYm94ID0gZmxvYXRCb3gtPnJlbmRlcmVyKCk7
Ci0gICAgICAgIGlmICghYm94LngoKSAmJiAhYm94LnkoKSAmJiBib3guY2hlY2tGb3JSZXBhaW50
RHVyaW5nTGF5b3V0KCkpCi0gICAgICAgICAgICBib3gucmVwYWludCgpOwotICAgIH0KLX0KLQot
dm9pZCBDb21wbGV4TGluZUxheW91dDo6bGF5b3V0UnVuc0FuZEZsb2F0cyhMaW5lTGF5b3V0U3Rh
dGUmIGxheW91dFN0YXRlLCBib29sIGhhc0lubGluZUNoaWxkKQotewotICAgIC8vIFdlIHdhbnQg
dG8gc2tpcCBhaGVhZCB0byB0aGUgZmlyc3QgZGlydHkgbGluZQotICAgIElubGluZUJpZGlSZXNv
bHZlciByZXNvbHZlcjsKLSAgICBSb290SW5saW5lQm94KiBzdGFydExpbmUgPSBkZXRlcm1pbmVT
dGFydFBvc2l0aW9uKGxheW91dFN0YXRlLCByZXNvbHZlcik7Ci0gICAgCi0gICAgdW5zaWduZWQg
Y29uc2VjdXRpdmVIeXBoZW5hdGVkTGluZXMgPSAwOwotICAgIGlmIChzdGFydExpbmUpIHsKLSAg
ICAgICAgZm9yIChSb290SW5saW5lQm94KiBsaW5lID0gc3RhcnRMaW5lLT5wcmV2Um9vdEJveCgp
OyBsaW5lICYmIGxpbmUtPmlzSHlwaGVuYXRlZCgpOyBsaW5lID0gbGluZS0+cHJldlJvb3RCb3go
KSkKLSAgICAgICAgICAgIGNvbnNlY3V0aXZlSHlwaGVuYXRlZExpbmVzKys7Ci0gICAgfQotCi0g
ICAgLy8gRklYTUU6IFRoaXMgd291bGQgbWFrZSBtb3JlIHNlbnNlIG91dHNpZGUgb2YgdGhpcyBm
dW5jdGlvbiwgYnV0IHNpbmNlCi0gICAgLy8gZGV0ZXJtaW5lU3RhcnRQb3NpdGlvbiBjYW4gY2hh
bmdlIHRoZSBmdWxsTGF5b3V0IGZsYWcgd2UgaGF2ZSB0byBkbyB0aGlzIGhlcmUuIEZhaWx1cmUg
dG8gY2FsbAotICAgIC8vIGRldGVybWluZVN0YXJ0UG9zaXRpb24gZmlyc3Qgd2lsbCBicmVhayBm
YXN0L3JlcGFpbnQvbGluZS1mbG93LXdpdGgtZmxvYXRzLTkuaHRtbC4KLSAgICBpZiAobGF5b3V0
U3RhdGUuaXNGdWxsTGF5b3V0KCkgJiYgaGFzSW5saW5lQ2hpbGQgJiYgIW1fZmxvdy5zZWxmTmVl
ZHNMYXlvdXQoKSkgewotICAgICAgICBtX2Zsb3cuc2V0TmVlZHNMYXlvdXQoTWFya09ubHlUaGlz
KTsgLy8gTWFyayBhcyBuZWVkaW5nIGEgZnVsbCBsYXlvdXQgdG8gZm9yY2UgdXMgdG8gcmVwYWlu
dC4KLSAgICAgICAgaWYgKCFsYXlvdXRDb250ZXh0KCkubmVlZHNGdWxsUmVwYWludCgpICYmIG1f
Zmxvdy5sYXllclJlcGFpbnRSZWN0cygpKSB7Ci0gICAgICAgICAgICAvLyBCZWNhdXNlIHdlIHdh
aXRlZCB1bnRpbCB3ZSB3ZXJlIGFscmVhZHkgaW5zaWRlIGxheW91dCB0byBkaXNjb3ZlcgotICAg
ICAgICAgICAgLy8gdGhhdCB0aGUgYmxvY2sgcmVhbGx5IG5lZWRlZCBhIGZ1bGwgbGF5b3V0LCB3
ZSBtaXNzZWQgb3VyIGNoYW5jZSB0byByZXBhaW50IHRoZSBsYXllcgotICAgICAgICAgICAgLy8g
YmVmb3JlIGxheW91dCBzdGFydGVkLiBMdWNraWx5IHRoZSBsYXllciBoYXMgY2FjaGVkIHRoZSBy
ZXBhaW50IHJlY3QgZm9yIGl0cyBvcmlnaW5hbAotICAgICAgICAgICAgLy8gcG9zaXRpb24gYW5k
IHNpemUsIGFuZCBzbyB3ZSBjYW4gdXNlIHRoYXQgdG8gbWFrZSBhIHJlcGFpbnQgaGFwcGVuIG5v
dy4KLSAgICAgICAgICAgIG1fZmxvdy5yZXBhaW50VXNpbmdDb250YWluZXIobV9mbG93LmNvbnRh
aW5lckZvclJlcGFpbnQoKSwgbV9mbG93LmxheWVyUmVwYWludFJlY3RzKCktPmNsaXBwZWRPdmVy
Zmxvd1JlY3QpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1fZmxvdy5jb250YWluc0Zs
b2F0cygpKQotICAgICAgICBsYXlvdXRTdGF0ZS5mbG9hdExpc3QoKS5zZXRMYXN0RmxvYXQobV9m
bG93LmZsb2F0aW5nT2JqZWN0cygpLT5zZXQoKS5sYXN0KCkuZ2V0KCkpOwotCi0gICAgLy8gV2Ug
YWxzbyBmaW5kIHRoZSBmaXJzdCBjbGVhbiBsaW5lIGFuZCBleHRyYWN0IHRoZXNlIGxpbmVzLiBX
ZSB3aWxsIGFkZCB0aGVtIGJhY2sKLSAgICAvLyBpZiB3ZSBkZXRlcm1pbmUgdGhhdCB3ZSdyZSBh
YmxlIHRvIHN5bmNocm9uaXplIGFmdGVyIGhhbmRsaW5nIGFsbCBvdXIgZGlydHkgbGluZXMuCi0g
ICAgSW5saW5lSXRlcmF0b3IgY2xlYW5MaW5lU3RhcnQ7Ci0gICAgQmlkaVN0YXR1cyBjbGVhbkxp
bmVCaWRpU3RhdHVzOwotICAgIGlmICghbGF5b3V0U3RhdGUuaXNGdWxsTGF5b3V0KCkgJiYgc3Rh
cnRMaW5lKQotICAgICAgICBkZXRlcm1pbmVFbmRQb3NpdGlvbihsYXlvdXRTdGF0ZSwgc3RhcnRM
aW5lLCBjbGVhbkxpbmVTdGFydCwgY2xlYW5MaW5lQmlkaVN0YXR1cyk7Ci0KLSAgICBpZiAoc3Rh
cnRMaW5lKSB7Ci0gICAgICAgIGlmICghbGF5b3V0U3RhdGUudXNlc1JlcGFpbnRCb3VuZHMoKSkK
LSAgICAgICAgICAgIGxheW91dFN0YXRlLnNldFJlcGFpbnRSYW5nZShtX2Zsb3cubG9naWNhbEhl
aWdodCgpKTsKLSAgICAgICAgZGVsZXRlTGluZVJhbmdlKGxheW91dFN0YXRlLCBzdGFydExpbmUp
OwotICAgIH0KLQotICAgIGlmICghbGF5b3V0U3RhdGUuaXNGdWxsTGF5b3V0KCkgJiYgbGFzdFJv
b3RCb3goKSAmJiBsYXN0Um9vdEJveCgpLT5lbmRzV2l0aEJyZWFrKCkpIHsKLSAgICAgICAgLy8g
SWYgdGhlIGxhc3QgbGluZSBiZWZvcmUgdGhlIHN0YXJ0IGxpbmUgZW5kcyB3aXRoIGEgbGluZSBi
cmVhayB0aGF0IGNsZWFyIGZsb2F0cywKLSAgICAgICAgLy8gYWRqdXN0IHRoZSBoZWlnaHQgYWNj
b3JkaW5nbHkuCi0gICAgICAgIC8vIEEgbGluZSBicmVhayBjYW4gYmUgZWl0aGVyIHRoZSBmaXJz
dCBvciB0aGUgbGFzdCBvYmplY3Qgb24gYSBsaW5lLCBkZXBlbmRpbmcgb24gaXRzIGRpcmVjdGlv
bi4KLSAgICAgICAgaWYgKElubGluZUJveCogbGFzdExlYWZEZXNjZW5kYW50ID0gbGFzdFJvb3RC
b3goKS0+bGFzdExlYWZEZXNjZW5kYW50KCkpIHsKLSAgICAgICAgICAgIFJlbmRlck9iamVjdCog
bGFzdE9iamVjdCA9ICZsYXN0TGVhZkRlc2NlbmRhbnQtPnJlbmRlcmVyKCk7Ci0gICAgICAgICAg
ICBpZiAoIWxhc3RPYmplY3QtPmlzQlIoKSkKLSAgICAgICAgICAgICAgICBsYXN0T2JqZWN0ID0g
Jmxhc3RSb290Qm94KCktPmZpcnN0TGVhZkRlc2NlbmRhbnQoKS0+cmVuZGVyZXIoKTsKLSAgICAg
ICAgICAgIGlmIChsYXN0T2JqZWN0LT5pc0JSKCkpIHsKLSAgICAgICAgICAgICAgICBhdXRvIGNs
ZWFyID0gUmVuZGVyU3R5bGU6OnVzZWRDbGVhcigqbGFzdE9iamVjdCk7Ci0gICAgICAgICAgICAg
ICAgaWYgKGNsZWFyICE9IFVzZWRDbGVhcjo6Tm9uZSkKLSAgICAgICAgICAgICAgICAgICAgbV9m
bG93LmNsZWFyRmxvYXRzKGNsZWFyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
LQotICAgIGxheW91dFJ1bnNBbmRGbG9hdHNJblJhbmdlKGxheW91dFN0YXRlLCByZXNvbHZlciwg
Y2xlYW5MaW5lU3RhcnQsIGNsZWFuTGluZUJpZGlTdGF0dXMsIGNvbnNlY3V0aXZlSHlwaGVuYXRl
ZExpbmVzKTsKLSAgICBsaW5rVG9FbmRMaW5lSWZOZWVkZWQobGF5b3V0U3RhdGUpOwotICAgIHJl
cGFpbnREaXJ0eUZsb2F0cyhsYXlvdXRTdGF0ZS5mbG9hdExpc3QoKSk7Ci19Ci0KLS8vIEJlZm9y
ZSByZXN0YXJ0aW5nIHRoZSBsYXlvdXQgbG9vcCB3aXRoIGEgbmV3IGxvZ2ljYWxIZWlnaHQsIHJl
bW92ZSBhbGwgZmxvYXRzIHRoYXQgd2VyZSBhZGRlZCBhbmQgcmVzZXQgdGhlIHJlc29sdmVyLgot
aW5saW5lIGNvbnN0IElubGluZUl0ZXJhdG9yJiBDb21wbGV4TGluZUxheW91dDo6cmVzdGFydExh
eW91dFJ1bnNBbmRGbG9hdHNJblJhbmdlKExheW91dFVuaXQgb2xkTG9naWNhbEhlaWdodCwgTGF5
b3V0VW5pdCBuZXdMb2dpY2FsSGVpZ2h0LCAgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdEZyb21Q
cmV2aW91c0xpbmUsIElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIsICBjb25zdCBJbmxpbmVJ
dGVyYXRvciYgb2xkRW5kKQotewotICAgIG1fZmxvdy5yZW1vdmVGbG9hdGluZ09iamVjdHNCZWxv
dyhsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lLCBvbGRMb2dpY2FsSGVpZ2h0KTsKLSAgICBtX2Zs
b3cuc2V0TG9naWNhbEhlaWdodChuZXdMb2dpY2FsSGVpZ2h0KTsKLSAgICByZXNvbHZlci5zZXRQ
b3NpdGlvbklnbm9yaW5nTmVzdGVkSXNvbGF0ZXMob2xkRW5kKTsKLSAgICByZXR1cm4gb2xkRW5k
OwotfQotCi12b2lkIENvbXBsZXhMaW5lTGF5b3V0OjpsYXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5n
ZShMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29s
dmVyLCBjb25zdCBJbmxpbmVJdGVyYXRvciYgY2xlYW5MaW5lU3RhcnQsIGNvbnN0IEJpZGlTdGF0
dXMmIGNsZWFuTGluZUJpZGlTdGF0dXMsIHVuc2lnbmVkIGNvbnNlY3V0aXZlSHlwaGVuYXRlZExp
bmVzKQotewotICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZVRvVXNlID0gc3R5bGUoKTsKLSAg
ICBib29sIHBhZ2luYXRlZCA9IGxheW91dENvbnRleHQoKS5sYXlvdXRTdGF0ZSgpICYmIGxheW91
dENvbnRleHQoKS5sYXlvdXRTdGF0ZSgpLT5pc1BhZ2luYXRlZCgpOwotICAgIExpbmVXaGl0ZXNw
YWNlQ29sbGFwc2luZ1N0YXRlJiBsaW5lV2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZSA9IHJlc29s
dmVyLndoaXRlc3BhY2VDb2xsYXBzaW5nU3RhdGUoKTsKLSAgICBJbmxpbmVJdGVyYXRvciBlbmQg
PSByZXNvbHZlci5wb3NpdGlvbigpOwotICAgIGJvb2wgY2hlY2tGb3JFbmRMaW5lTWF0Y2ggPSBs
YXlvdXRTdGF0ZS5lbmRMaW5lKCk7Ci0gICAgUmVuZGVyVGV4dEluZm8gcmVuZGVyVGV4dEluZm87
Ci0gICAgVmVydGljYWxQb3NpdGlvbkNhY2hlIHZlcnRpY2FsUG9zaXRpb25DYWNoZTsKLQotICAg
IExpbmVCcmVha2VyIGxpbmVCcmVha2VyKG1fZmxvdyk7Ci0KLSAgICB3aGlsZSAoIWVuZC5hdEVu
ZCgpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBJcyB0aGlzIGNoZWNrIG5lY2Vzc2FyeSBiZWZvcmUg
dGhlIGZpcnN0IGl0ZXJhdGlvbiBvciBjYW4gaXQgYmUgbW92ZWQgdG8gdGhlIGVuZD8KLSAgICAg
ICAgaWYgKGNoZWNrRm9yRW5kTGluZU1hdGNoKSB7Ci0gICAgICAgICAgICBsYXlvdXRTdGF0ZS5z
ZXRFbmRMaW5lTWF0Y2hlZChtYXRjaGVkRW5kTGluZShsYXlvdXRTdGF0ZSwgcmVzb2x2ZXIsIGNs
ZWFuTGluZVN0YXJ0LCBjbGVhbkxpbmVCaWRpU3RhdHVzKSk7Ci0gICAgICAgICAgICBpZiAobGF5
b3V0U3RhdGUuZW5kTGluZU1hdGNoZWQoKSkgewotICAgICAgICAgICAgICAgIHJlc29sdmVyLnNl
dFBvc2l0aW9uKElubGluZUl0ZXJhdG9yKHJlc29sdmVyLnBvc2l0aW9uKCkucm9vdCgpLCAwLCAw
KSwgMCk7Ci0gICAgICAgICAgICAgICAgbGF5b3V0U3RhdGUubWFyZ2luSW5mbygpLmNsZWFyTWFy
Z2luKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICBsaW5lV2hpdGVzcGFjZUNvbGxhcHNpbmdTdGF0ZS5yZXNldCgpOwotCi0gICAg
ICAgIGxheW91dFN0YXRlLmxpbmVJbmZvKCkuc2V0RW1wdHkodHJ1ZSk7Ci0gICAgICAgIGxheW91
dFN0YXRlLmxpbmVJbmZvKCkucmVzZXRSdW5zRnJvbUxlYWRpbmdXaGl0ZXNwYWNlKCk7Ci0KLSAg
ICAgICAgY29uc3QgSW5saW5lSXRlcmF0b3Igb2xkRW5kID0gZW5kOwotICAgICAgICBib29sIGlz
TmV3VUJBUGFyYWdyYXBoID0gbGF5b3V0U3RhdGUubGluZUluZm8oKS5wcmV2aW91c0xpbmVCcm9r
ZUNsZWFubHkoKTsKLSAgICAgICAgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdEZyb21QcmV2aW91
c0xpbmUgPSAobV9mbG93LmNvbnRhaW5zRmxvYXRzKCkpID8gbV9mbG93LmZsb2F0aW5nT2JqZWN0
cygpLT5zZXQoKS5sYXN0KCkuZ2V0KCkgOiBudWxscHRyOwotCi0gICAgICAgIFdvcmRNZWFzdXJl
bWVudHMgd29yZE1lYXN1cmVtZW50czsKLSAgICAgICAgZW5kID0gbGluZUJyZWFrZXIubmV4dExp
bmVCcmVhayhyZXNvbHZlciwgbGF5b3V0U3RhdGUubGluZUluZm8oKSwgcmVuZGVyVGV4dEluZm8s
IGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUsIGNvbnNlY3V0aXZlSHlwaGVuYXRlZExpbmVzLCB3
b3JkTWVhc3VyZW1lbnRzKTsKLSAgICAgICAgbV9mbG93LmNhY2hlUHJpb3JDaGFyYWN0ZXJzSWZO
ZWVkZWQocmVuZGVyVGV4dEluZm8ubGluZUJyZWFrSXRlcmF0b3IpOwotICAgICAgICByZW5kZXJU
ZXh0SW5mby5saW5lQnJlYWtJdGVyYXRvci5yZXNldFByaW9yQ29udGV4dCgpOwotICAgICAgICBp
ZiAocmVzb2x2ZXIucG9zaXRpb24oKS5hdEVuZCgpKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkbid0IGJlIGNyZWF0aW5nIGFueSBydW5zIGluIG5leHRMaW5lQnJlYWsgdG8gYmVn
aW4gd2l0aCEKLSAgICAgICAgICAgIC8vIE9uY2UgQmlkaVJ1bkxpc3QgaXMgc2VwYXJhdGVkIGZy
b20gQmlkaVJlc29sdmVyIHRoaXMgd2lsbCBub3QgYmUgbmVlZGVkLgotICAgICAgICAgICAgcmVz
b2x2ZXIucnVucygpLmNsZWFyKCk7Ci0gICAgICAgICAgICByZXNvbHZlci5tYXJrQ3VycmVudFJ1
bkVtcHR5KCk7IC8vIEZJWE1FOiBUaGlzIGNhbiBwcm9iYWJseSBiZSByZXBsYWNlZCBieSBhbiBB
U1NFUlQgKG9yIGp1c3QgcmVtb3ZlZCkuCi0gICAgICAgICAgICBsYXlvdXRTdGF0ZS5zZXRDaGVj
a0ZvckZsb2F0c0Zyb21MYXN0TGluZSh0cnVlKTsKLSAgICAgICAgICAgIHJlc29sdmVyLnNldFBv
c2l0aW9uKElubGluZUl0ZXJhdG9yKHJlc29sdmVyLnBvc2l0aW9uKCkucm9vdCgpLCAwLCAwKSwg
MCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIEFTU0VSVChlbmQg
IT0gcmVzb2x2ZXIucG9zaXRpb24oKSk7Ci0KLSAgICAgICAgLy8gVGhpcyBpcyBhIHNob3J0LWN1
dCBmb3IgZW1wdHkgbGluZXMuCi0gICAgICAgIGlmIChsYXlvdXRTdGF0ZS5saW5lSW5mbygpLmlz
RW1wdHkoKSkgewotICAgICAgICAgICAgaWYgKGxhc3RSb290Qm94KCkpCi0gICAgICAgICAgICAg
ICAgbGFzdFJvb3RCb3goKS0+c2V0TGluZUJyZWFrSW5mbyhlbmQucmVuZGVyZXIoKSwgZW5kLm9m
ZnNldCgpLCByZXNvbHZlci5zdGF0dXMoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBWaXN1YWxEaXJlY3Rpb25PdmVycmlkZSBvdmVycmlkZSA9IChzdHlsZVRvVXNlLnJ0bE9yZGVy
aW5nKCkgPT0gT3JkZXI6OlZpc3VhbCA/IChzdHlsZVRvVXNlLmRpcmVjdGlvbigpID09IFRleHRE
aXJlY3Rpb246OkxUUiA/IFZpc3VhbExlZnRUb1JpZ2h0T3ZlcnJpZGUgOiBWaXN1YWxSaWdodFRv
TGVmdE92ZXJyaWRlKSA6IE5vVmlzdWFsT3ZlcnJpZGUpOwotCi0gICAgICAgICAgICBpZiAoaXNO
ZXdVQkFQYXJhZ3JhcGggJiYgc3R5bGVUb1VzZS51bmljb2RlQmlkaSgpID09IFBsYWludGV4dCAm
JiAhcmVzb2x2ZXIuY29udGV4dCgpLT5wYXJlbnQoKSkgewotICAgICAgICAgICAgICAgIFRleHRE
aXJlY3Rpb24gZGlyZWN0aW9uID0gc3R5bGVUb1VzZS5kaXJlY3Rpb24oKTsKLSAgICAgICAgICAg
ICAgICBkZXRlcm1pbmVEaXJlY3Rpb25hbGl0eShkaXJlY3Rpb24sIHJlc29sdmVyLnBvc2l0aW9u
KCkpOwotICAgICAgICAgICAgICAgIHJlc29sdmVyLnNldFN0YXR1cyhCaWRpU3RhdHVzKGRpcmVj
dGlvbiwgaXNPdmVycmlkZShzdHlsZVRvVXNlLnVuaWNvZGVCaWRpKCkpKSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBvd25lcnNoaXAgaXMgcmV2ZXJzZWQuIFdl
IHNob3VsZCBvd24gdGhlIEJpZGlSdW5MaXN0IGFuZCBwYXNzIGl0IHRvIGNyZWF0ZUJpZGlSdW5z
Rm9yTGluZS4KLSAgICAgICAgICAgIEJpZGlSdW5MaXN0PEJpZGlSdW4+JiBiaWRpUnVucyA9IHJl
c29sdmVyLnJ1bnMoKTsKLSAgICAgICAgICAgIGNvbnN0cnVjdEJpZGlSdW5zRm9yU2VnbWVudChy
ZXNvbHZlciwgYmlkaVJ1bnMsIGVuZCwgb3ZlcnJpZGUsIGxheW91dFN0YXRlLmxpbmVJbmZvKCku
cHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KCkpOwotICAgICAgICAgICAgQVNTRVJUKHJlc29sdmVy
LnBvc2l0aW9uKCkgPT0gZW5kKTsKLQotICAgICAgICAgICAgQmlkaVJ1biogdHJhaWxpbmdTcGFj
ZVJ1biA9ICFsYXlvdXRTdGF0ZS5saW5lSW5mbygpLnByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSgp
ID8gaGFuZGxlVHJhaWxpbmdTcGFjZXMoYmlkaVJ1bnMsIHJlc29sdmVyLmNvbnRleHQoKSkgOiBu
dWxscHRyOwotCi0gICAgICAgICAgICBpZiAoYmlkaVJ1bnMucnVuQ291bnQoKSAmJiBsaW5lQnJl
YWtlci5saW5lV2FzSHlwaGVuYXRlZCgpKSB7Ci0gICAgICAgICAgICAgICAgYmlkaVJ1bnMubG9n
aWNhbGx5TGFzdFJ1bigpLT5tX2hhc0h5cGhlbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgY29u
c2VjdXRpdmVIeXBoZW5hdGVkTGluZXMrKzsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgICAgIGNvbnNlY3V0aXZlSHlwaGVuYXRlZExpbmVzID0gMDsKLQotICAgICAgICAgICAgLy8g
Tm93IHRoYXQgdGhlIHJ1bnMgaGF2ZSBiZWVuIG9yZGVyZWQsIHdlIGNyZWF0ZSB0aGUgbGluZSBi
b3hlcy4KLSAgICAgICAgICAgIC8vIEF0IHRoZSBzYW1lIHRpbWUgd2UgZmlndXJlIG91dCB3aGVy
ZSBib3JkZXIvcGFkZGluZy9tYXJnaW4gc2hvdWxkIGJlIGFwcGxpZWQgZm9yCi0gICAgICAgICAg
ICAvLyBpbmxpbmUgZmxvdyBib3hlcy4KLQotICAgICAgICAgICAgTGF5b3V0VW5pdCBvbGRMb2dp
Y2FsSGVpZ2h0ID0gbV9mbG93LmxvZ2ljYWxIZWlnaHQoKTsKLSAgICAgICAgICAgIFJvb3RJbmxp
bmVCb3gqIGxpbmVCb3ggPSBjcmVhdGVMaW5lQm94ZXNGcm9tQmlkaVJ1bnMocmVzb2x2ZXIuc3Rh
dHVzKCkuY29udGV4dC0+bGV2ZWwoKSwgYmlkaVJ1bnMsIGVuZCwgbGF5b3V0U3RhdGUubGluZUlu
Zm8oKSwgdmVydGljYWxQb3NpdGlvbkNhY2hlLCB0cmFpbGluZ1NwYWNlUnVuLCB3b3JkTWVhc3Vy
ZW1lbnRzKTsKLQotICAgICAgICAgICAgYmlkaVJ1bnMuY2xlYXIoKTsKLSAgICAgICAgICAgIHJl
c29sdmVyLm1hcmtDdXJyZW50UnVuRW1wdHkoKTsgLy8gRklYTUU6IFRoaXMgY2FuIHByb2JhYmx5
IGJlIHJlcGxhY2VkIGJ5IGFuIEFTU0VSVCAob3IganVzdCByZW1vdmVkKS4KLQotICAgICAgICAg
ICAgaWYgKGxpbmVCb3gpIHsKLSAgICAgICAgICAgICAgICBsaW5lQm94LT5zZXRMaW5lQnJlYWtJ
bmZvKGVuZC5yZW5kZXJlcigpLCBlbmQub2Zmc2V0KCksIHJlc29sdmVyLnN0YXR1cygpKTsKLSAg
ICAgICAgICAgICAgICBpZiAobGF5b3V0U3RhdGUudXNlc1JlcGFpbnRCb3VuZHMoKSkKLSAgICAg
ICAgICAgICAgICAgICAgbGF5b3V0U3RhdGUudXBkYXRlUmVwYWludFJhbmdlRnJvbUJveChsaW5l
Qm94KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBMYXlvdXRVbml0IGFkanVz
dG1lbnQ7Ci0gICAgICAgICAgICAgICAgYm9vbCBvdmVyZmxvd3NGcmFnbWVudCA9IGZhbHNlOwot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGxheW91dFN0YXRlLm1hcmdpbkluZm8o
KS5zZXRBdEJlZm9yZVNpZGVPZkJsb2NrKGZhbHNlKTsKLQotICAgICAgICAgICAgICAgIGlmIChw
YWdpbmF0ZWQpCi0gICAgICAgICAgICAgICAgICAgIG1fZmxvdy5hZGp1c3RMaW5lUG9zaXRpb25G
b3JQYWdpbmF0aW9uKGxpbmVCb3gsIGFkanVzdG1lbnQsIG92ZXJmbG93c0ZyYWdtZW50LCBsYXlv
dXRTdGF0ZS5mcmFnbWVudGVkRmxvdygpKTsKLSAgICAgICAgICAgICAgICBpZiAoYWRqdXN0bWVu
dCkgewotICAgICAgICAgICAgICAgICAgICBJbmRlbnRUZXh0T3JOb3Qgc2hvdWxkSW5kZW50VGV4
dCA9IGxheW91dFN0YXRlLmxpbmVJbmZvKCkuaXNGaXJzdExpbmUoKSA/IEluZGVudFRleHQgOiBE
b05vdEluZGVudFRleHQ7Ci0gICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgb2xkTGluZVdp
ZHRoID0gbV9mbG93LmF2YWlsYWJsZUxvZ2ljYWxXaWR0aEZvckxpbmUob2xkTG9naWNhbEhlaWdo
dCwgc2hvdWxkSW5kZW50VGV4dCk7Ci0gICAgICAgICAgICAgICAgICAgIGxpbmVCb3gtPmFkanVz
dEJsb2NrRGlyZWN0aW9uUG9zaXRpb24oYWRqdXN0bWVudCk7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChsYXlvdXRTdGF0ZS51c2VzUmVwYWludEJvdW5kcygpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgbGF5b3V0U3RhdGUudXBkYXRlUmVwYWludFJhbmdlRnJvbUJveChsaW5lQm94KTsKLQot
ICAgICAgICAgICAgICAgICAgICBpZiAobV9mbG93LmF2YWlsYWJsZUxvZ2ljYWxXaWR0aEZvckxp
bmUob2xkTG9naWNhbEhlaWdodCArIGFkanVzdG1lbnQsIHNob3VsZEluZGVudFRleHQpICE9IG9s
ZExpbmVXaWR0aCkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBkZWxl
dGUgdGhpcyBsaW5lLCByZW1vdmUgYWxsIGZsb2F0cyB0aGF0IGdvdCBhZGRlZCwgYW5kIGxldCBs
aW5lIGxheW91dCByZS1ydW4uCi0gICAgICAgICAgICAgICAgICAgICAgICBsaW5lQm94LT5kZWxl
dGVMaW5lKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbmQgPSByZXN0YXJ0TGF5b3V0UnVu
c0FuZEZsb2F0c0luUmFuZ2Uob2xkTG9naWNhbEhlaWdodCwgb2xkTG9naWNhbEhlaWdodCArIGFk
anVzdG1lbnQsIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUsIHJlc29sdmVyLCBvbGRFbmQpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgICAgICBtX2Zsb3cuc2V0TG9naWNhbEhlaWdodChsaW5lQm94LT5s
aW5lQm94Qm90dG9tKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgaWYgKHBhZ2luYXRlZCkgewotICAgICAgICAgICAgICAgICAgICBp
ZiAobGF5b3V0U3RhdGUuZnJhZ21lbnRlZEZsb3coKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IHVwZGF0ZUZyYWdtZW50Rm9yTGluZShsaW5lQm94KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxp
bmVCcmVha2VyLnBvc2l0aW9uZWRPYmplY3RzKCkuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBz
ZXRTdGF0aWNQb3NpdGlvbnMobV9mbG93LCAqbGluZUJyZWFrZXIucG9zaXRpb25lZE9iamVjdHMo
KVtpXSwgRG9Ob3RJbmRlbnRUZXh0KTsKLQotICAgICAgICBpZiAoIWxheW91dFN0YXRlLmxpbmVJ
bmZvKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBsYXlvdXRTdGF0ZS5saW5lSW5mbygpLnNl
dEZpcnN0TGluZShmYWxzZSk7Ci0gICAgICAgICAgICBtX2Zsb3cuY2xlYXJGbG9hdHMobGluZUJy
ZWFrZXIudXNlZENsZWFyKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1fZmxvdy5mbG9h
dGluZ09iamVjdHMoKSAmJiBsYXN0Um9vdEJveCgpKSB7Ci0gICAgICAgICAgICBjb25zdCBGbG9h
dGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb3cuZmxvYXRpbmdPYmplY3Rz
KCktPnNldCgpOwotICAgICAgICAgICAgYXV0byBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2lu
KCk7Ci0gICAgICAgICAgICBhdXRvIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwotICAg
ICAgICAgICAgaWYgKGF1dG8qIGxhc3RGbG9hdCA9IGxheW91dFN0YXRlLmZsb2F0TGlzdCgpLmxh
c3RGbG9hdCgpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBsYXN0RmxvYXRJdGVyYXRvciA9IGZs
b2F0aW5nT2JqZWN0U2V0LmZpbmQobGFzdEZsb2F0KTsKLSAgICAgICAgICAgICAgICBBU1NFUlQo
bGFzdEZsb2F0SXRlcmF0b3IgIT0gZW5kKTsKLSAgICAgICAgICAgICAgICArK2xhc3RGbG9hdEl0
ZXJhdG9yOwotICAgICAgICAgICAgICAgIGl0ID0gbGFzdEZsb2F0SXRlcmF0b3I7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAg
ICAgICAgYXV0byYgZmxvYXRpbmdPYmplY3QgPSAqaXQ7Ci0gICAgICAgICAgICAgICAgYXBwZW5k
RmxvYXRpbmdPYmplY3RUb0xhc3RMaW5lKCpmbG9hdGluZ09iamVjdCk7Ci0gICAgICAgICAgICAg
ICAgLy8gSWYgYSBmbG9hdCdzIGdlb21ldHJ5IGhhcyBjaGFuZ2VkLCBnaXZlIHVwIG9uIHN5bmNp
bmcgd2l0aCBjbGVhbiBsaW5lcy4KLSAgICAgICAgICAgICAgICBhdXRvKiBmbG9hdFdpdGhSZWN0
ID0gbGF5b3V0U3RhdGUuZmxvYXRMaXN0KCkuZmxvYXRXaXRoUmVjdChmbG9hdGluZ09iamVjdC0+
cmVuZGVyZXIoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFmbG9hdFdpdGhSZWN0IHx8IGZsb2F0
V2l0aFJlY3QtPnJlY3QoKSAhPSBmbG9hdGluZ09iamVjdC0+ZnJhbWVSZWN0KCkpCi0gICAgICAg
ICAgICAgICAgICAgIGNoZWNrRm9yRW5kTGluZU1hdGNoID0gZmFsc2U7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBsYXlvdXRTdGF0ZS5mbG9hdExpc3QoKS5zZXRMYXN0RmxvYXQoIWZsb2F0
aW5nT2JqZWN0U2V0LmlzRW1wdHkoKSA/IGZsb2F0aW5nT2JqZWN0U2V0Lmxhc3QoKS5nZXQoKSA6
IG51bGxwdHIpOwotICAgICAgICB9Ci0KLSAgICAgICAgbGluZVdoaXRlc3BhY2VDb2xsYXBzaW5n
U3RhdGUucmVzZXQoKTsKLSAgICAgICAgcmVzb2x2ZXIuc2V0UG9zaXRpb24oZW5kLCBudW1iZXJP
Zklzb2xhdGVBbmNlc3RvcnMoZW5kKSk7Ci0gICAgfQotCi0gICAgLy8gSW4gY2FzZSB3ZSBhbHJl
YWR5IGFkanVzdGVkIHRoZSBsaW5lIHBvc2l0aW9ucyBkdXJpbmcgdGhpcyBsYXlvdXQgdG8gYXZv
aWQgd2lkb3dzCi0gICAgLy8gdGhlbiB3ZSBuZWVkIHRvIGlnbm9yZSB0aGUgcG9zc2liaWxpdHkg
b2YgaGF2aW5nIGEgbmV3IHdpZG93cyBzaXR1YXRpb24uCi0gICAgLy8gT3RoZXJ3aXNlLCB3ZSBy
aXNrIGxlYXZpbmcgZW1wdHkgY29udGFpbmVycyB3aGljaCBpcyBhZ2FpbnN0IHRoZSBibG9jayBm
cmFnbWVudGF0aW9uIHByaW5jaXBsZXMuCi0gICAgaWYgKHBhZ2luYXRlZCAmJiAhc3R5bGUoKS5o
YXNBdXRvV2lkb3dzKCkgJiYgIW1fZmxvdy5kaWRCcmVha0F0TGluZVRvQXZvaWRXaWRvdygpKSB7
Ci0gICAgICAgIC8vIENoZWNrIHRoZSBsaW5lIGJveGVzIHRvIG1ha2Ugc3VyZSB3ZSBkaWRuJ3Qg
Y3JlYXRlIHVuYWNjZXB0YWJsZSB3aWRvd3MuCi0gICAgICAgIC8vIEhvd2V2ZXIsIHdlJ2xsIHBy
aW9yaXRpemUgb3JwaGFucyAtIHNvIG5vdGhpbmcgd2UgZG8gaGVyZSBzaG91bGQgY3JlYXRlCi0g
ICAgICAgIC8vIGEgbmV3IG9ycGhhbi4KLQotICAgICAgICBSb290SW5saW5lQm94KiBsaW5lQm94
ID0gbGFzdFJvb3RCb3goKTsKLQotICAgICAgICAvLyBDb3VudCBmcm9tIHRoZSBlbmQgb2YgdGhl
IGJsb2NrIGJhY2t3YXJkcywgdG8gc2VlIGhvdyBtYW55IGhhbmdpbmcKLSAgICAgICAgLy8gbGlu
ZXMgd2UgaGF2ZS4KLSAgICAgICAgUm9vdElubGluZUJveCogZmlyc3RMaW5lSW5CbG9jayA9IGZp
cnN0Um9vdEJveCgpOwotICAgICAgICBpbnQgbnVtTGluZXNIYW5naW5nID0gMTsKLSAgICAgICAg
d2hpbGUgKGxpbmVCb3ggJiYgbGluZUJveCAhPSBmaXJzdExpbmVJbkJsb2NrICYmICFsaW5lQm94
LT5pc0ZpcnN0QWZ0ZXJQYWdlQnJlYWsoKSkgewotICAgICAgICAgICAgKytudW1MaW5lc0hhbmdp
bmc7Ci0gICAgICAgICAgICBsaW5lQm94ID0gbGluZUJveC0+cHJldlJvb3RCb3goKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIC8vIElmIHRoZXJlIHdlcmUgbm8gYnJlYWtzIGluIHRoZSBibG9jaywg
d2UgZGlkbid0IGNyZWF0ZSBhbnkgd2lkb3dzLgotICAgICAgICBpZiAoIWxpbmVCb3ggfHwgIWxp
bmVCb3gtPmlzRmlyc3RBZnRlclBhZ2VCcmVhaygpIHx8IGxpbmVCb3ggPT0gZmlyc3RMaW5lSW5C
bG9jaykgewotICAgICAgICAgICAgaWYgKG1fZmxvdy5zaG91bGRCcmVha0F0TGluZVRvQXZvaWRX
aWRvdygpKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgY2FzZSB3aGVuIHRoZSBw
cmV2aW91cyBsaW5lIGxheW91dCBtYXJrcyBhIGxpbmUgdG8gYnJlYWsgYXQgdG8gYXZvaWQgd2lk
b3dzCi0gICAgICAgICAgICAgICAgLy8gYnV0IHRoZSBjdXJyZW50IGxheW91dCBkb2VzIG5vdCBw
cm9kdWNlIHRoYXQgbGluZS4gSXQgaGFwcGVucyB3aGVuIGxheW91dCBjb25zdHJhaW50cyB1bmV4
cGVjdGVkbHkKLSAgICAgICAgICAgICAgICAvLyBjaGFuZ2UgaW4gYmV0d2VlbiBsYXlvdXRzIChu
b3RlIHRoYXQgdGhlc2UgcGFnaW5hdGVkIGxpbmUgbGF5b3V0cyBydW4gd2l0aGluIHRoZSBzYW1l
IGxheW91dCBmcmFtZQotICAgICAgICAgICAgICAgIC8vIGFzIG9wcG9zZWQgdG8gdHdvIHN1YnNl
cXVlbnQgZnVsbCBsYXlvdXRzKS4KLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgICAgICAgICBtX2Zsb3cuY2xlYXJTaG91bGRCcmVha0F0TGluZVRvQXZvaWRX
aWRvdygpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKG51bUxpbmVzSGFuZ2luZyA8IHN0eWxlKCkud2lkb3dzKCkpIHsKLSAgICAg
ICAgICAgIC8vIFdlIGhhdmUgZGV0ZWN0ZWQgYSB3aWRvdy4gTm93IHdlIG5lZWQgdG8gd29yayBv
dXQgaG93IG1hbnkKLSAgICAgICAgICAgIC8vIGxpbmVzIHRoZXJlIGFyZSBvbiB0aGUgcHJldmlv
dXMgcGFnZSwgYW5kIGhvdyBtYW55IHdlIG5lZWQKLSAgICAgICAgICAgIC8vIHRvIHN0ZWFsLgot
ICAgICAgICAgICAgaW50IG51bUxpbmVzTmVlZGVkID0gc3R5bGUoKS53aWRvd3MoKSAtIG51bUxp
bmVzSGFuZ2luZzsKLSAgICAgICAgICAgIFJvb3RJbmxpbmVCb3gqIGN1cnJlbnRGaXJzdExpbmVP
Zk5ld1BhZ2UgPSBsaW5lQm94OwotCi0gICAgICAgICAgICAvLyBDb3VudCB0aGUgbnVtYmVyIG9m
IGxpbmVzIGluIHRoZSBwcmV2aW91cyBwYWdlLgotICAgICAgICAgICAgbGluZUJveCA9IGxpbmVC
b3gtPnByZXZSb290Qm94KCk7Ci0gICAgICAgICAgICBpbnQgbnVtTGluZXNJblByZXZpb3VzUGFn
ZSA9IDE7Ci0gICAgICAgICAgICB3aGlsZSAobGluZUJveCAmJiBsaW5lQm94ICE9IGZpcnN0TGlu
ZUluQmxvY2sgJiYgIWxpbmVCb3gtPmlzRmlyc3RBZnRlclBhZ2VCcmVhaygpKSB7Ci0gICAgICAg
ICAgICAgICAgKytudW1MaW5lc0luUHJldmlvdXNQYWdlOwotICAgICAgICAgICAgICAgIGxpbmVC
b3ggPSBsaW5lQm94LT5wcmV2Um9vdEJveCgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAvLyBJZiB0aGVyZSB3YXMgYW4gZXhwbGljaXQgdmFsdWUgZm9yIG9ycGhhbnMsIHJlc3BlY3Qg
dGhhdC4gSWYgbm90LCB3ZSBzdGlsbAotICAgICAgICAgICAgLy8gc2hvdWxkbid0IGNyZWF0ZSBh
IHNpdHVhdGlvbiB3aGVyZSB3ZSBtYWtlIGFuIG9ycGhhbiBiaWdnZXIgdGhhbiB0aGUgaW5pdGlh
bCB2YWx1ZS4KLSAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBzZXR0aW5nIHdpZG93cyBp
bXBsaWVzIHdlIGFsc28gY2FyZSBhYm91dCBvcnBoYW5zLCBidXQgZ2l2ZW4KLSAgICAgICAgICAg
IC8vIHRoZSBzcGVjaWZpY2F0aW9uIHNheXMgdGhlIGluaXRpYWwgb3JwaGFuIHZhbHVlIGlzIG5v
bi16ZXJvLCB0aGlzIGlzIG9rLiBUaGUKLSAgICAgICAgICAgIC8vIGF1dGhvciBpcyBhbHdheXMg
ZnJlZSB0byBzZXQgb3JwaGFucyBleHBsaWNpdGx5IGFzIHdlbGwuCi0gICAgICAgICAgICBpbnQg
b3JwaGFucyA9IHN0eWxlKCkuaGFzQXV0b09ycGhhbnMoKSA/IHN0eWxlKCkuaW5pdGlhbE9ycGhh
bnMoKSA6IHN0eWxlKCkub3JwaGFucygpOwotICAgICAgICAgICAgaW50IG51bUxpbmVzQXZhaWxh
YmxlID0gbnVtTGluZXNJblByZXZpb3VzUGFnZSAtIG9ycGhhbnM7Ci0gICAgICAgICAgICBpZiAo
bnVtTGluZXNBdmFpbGFibGUgPD0gMCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgICAgIGludCBudW1MaW5lc1RvVGFrZSA9IHN0ZDo6bWluKG51bUxpbmVzQXZhaWxhYmxlLCBu
dW1MaW5lc05lZWRlZCk7Ci0gICAgICAgICAgICAvLyBXaW5kIGJhY2sgZnJvbSBvdXIgZmlyc3Qg
d2lkb3dlZCBsaW5lLgotICAgICAgICAgICAgbGluZUJveCA9IGN1cnJlbnRGaXJzdExpbmVPZk5l
d1BhZ2U7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUxpbmVzVG9UYWtlOyAr
K2kpCi0gICAgICAgICAgICAgICAgbGluZUJveCA9IGxpbmVCb3gtPnByZXZSb290Qm94KCk7Ci0K
LSAgICAgICAgICAgIC8vIFdlIG5vdyB3YW50IHRvIGJyZWFrIGF0IHRoaXMgbGluZS4gUmVtZW1i
ZXIgZm9yIG5leHQgbGF5b3V0IGFuZCB0cmlnZ2VyIHJlbGF5b3V0LgotICAgICAgICAgICAgbV9m
bG93LnNldEJyZWFrQXRMaW5lVG9Bdm9pZFdpZG93KGxpbmVDb3VudFVudGlsKGxpbmVCb3gpKTsK
LSAgICAgICAgICAgIG1fZmxvdy5tYXJrTGluZXNEaXJ0eUluQmxvY2tSYW5nZShsYXN0Um9vdEJv
eCgpLT5saW5lQm94Qm90dG9tKCksIGxpbmVCb3gtPmxpbmVCb3hCb3R0b20oKSwgbGluZUJveCk7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgbV9mbG93LmNsZWFyRGlkQnJlYWtBdExpbmVUb0F2b2lk
V2lkb3coKTsKLX0KLQotdm9pZCBDb21wbGV4TGluZUxheW91dDo6cmVhdHRhY2hDbGVhbkxpbmVG
bG9hdHMoUm9vdElubGluZUJveCYgY2xlYW5MaW5lLCBMYXlvdXRVbml0IGRlbHRhLCBib29sIGlz
Rmlyc3RDbGVhbkxpbmUpCi17Ci0gICAgYXV0byogY2xlYW5MaW5lRmxvYXRzID0gY2xlYW5MaW5l
LmZsb2F0c1B0cigpOwotICAgIGlmICghY2xlYW5MaW5lRmxvYXRzKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBmb3IgKGF1dG8mIGZsb2F0aW5nQm94IDogKmNsZWFuTGluZUZsb2F0cykgewotICAg
ICAgICBpZiAoIWZsb2F0aW5nQm94KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGF1
dG8qIGZsb2F0aW5nT2JqZWN0ID0gbV9mbG93Lmluc2VydEZsb2F0aW5nT2JqZWN0KCpmbG9hdGlu
Z0JveCk7Ci0gICAgICAgIGlmIChpc0ZpcnN0Q2xlYW5MaW5lICYmIGZsb2F0aW5nT2JqZWN0LT5v
cmlnaW5hdGluZ0xpbmUoKSkgewotICAgICAgICAgICAgLy8gRmxvYXQgYm94IGRvZXMgbm90IGJl
bG9uZyB0byB0aGlzIGxpbmUgYW55bW9yZS4KLSAgICAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VS
SVRZX0lNUExJQ0FUSU9OKGNsZWFuTGluZS5wcmV2Um9vdEJveCgpID09IGZsb2F0aW5nT2JqZWN0
LT5vcmlnaW5hdGluZ0xpbmUoKSk7Ci0gICAgICAgICAgICBjbGVhbkxpbmUucmVtb3ZlRmxvYXQo
KmZsb2F0aW5nQm94KTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAg
IEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFmbG9hdGluZ09iamVjdC0+b3JpZ2lu
YXRpbmdMaW5lKCkpOwotICAgICAgICBmbG9hdGluZ09iamVjdC0+c2V0T3JpZ2luYXRpbmdMaW5l
KGNsZWFuTGluZSk7Ci0gICAgICAgIG1fZmxvdy5zZXRMb2dpY2FsSGVpZ2h0KG1fZmxvdy5sb2dp
Y2FsVG9wRm9yQ2hpbGQoKmZsb2F0aW5nQm94KSAtIG1fZmxvdy5tYXJnaW5CZWZvcmVGb3JDaGls
ZCgqZmxvYXRpbmdCb3gpICsgZGVsdGEpOwotICAgICAgICBtX2Zsb3cucG9zaXRpb25OZXdGbG9h
dHMoKTsKLSAgICB9Ci19Ci0KLXZvaWQgQ29tcGxleExpbmVMYXlvdXQ6OmxpbmtUb0VuZExpbmVJ
Zk5lZWRlZChMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlKQotewotICAgIGF1dG8qIGZpcnN0
Q2xlYW5MaW5lID0gbGF5b3V0U3RhdGUuZW5kTGluZSgpOwotICAgIGlmIChmaXJzdENsZWFuTGlu
ZSkgewotICAgICAgICBpZiAobGF5b3V0U3RhdGUuZW5kTGluZU1hdGNoZWQoKSkgewotICAgICAg
ICAgICAgYm9vbCBwYWdpbmF0ZWQgPSBsYXlvdXRDb250ZXh0KCkubGF5b3V0U3RhdGUoKSAmJiBs
YXlvdXRDb250ZXh0KCkubGF5b3V0U3RhdGUoKS0+aXNQYWdpbmF0ZWQoKTsKLSAgICAgICAgICAg
IC8vIEF0dGFjaCBhbGwgdGhlIHJlbWFpbmluZyBsaW5lcywgYW5kIHRoZW4gYWRqdXN0IHRoZWly
IHktcG9zaXRpb25zIGFzIG5lZWRlZC4KLSAgICAgICAgICAgIExheW91dFVuaXQgZGVsdGEgPSBt
X2Zsb3cubG9naWNhbEhlaWdodCgpIC0gbGF5b3V0U3RhdGUuZW5kTGluZUxvZ2ljYWxUb3AoKTsK
LSAgICAgICAgICAgIGZvciAoYXV0byogbGluZSA9IGZpcnN0Q2xlYW5MaW5lOyBsaW5lOyBsaW5l
ID0gbGluZS0+bmV4dFJvb3RCb3goKSkgewotICAgICAgICAgICAgICAgIGxpbmUtPmF0dGFjaExp
bmUoKTsKLSAgICAgICAgICAgICAgICBpZiAocGFnaW5hdGVkKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGRlbHRhIC09IGxpbmUtPnBhZ2luYXRpb25TdHJ1dCgpOwotICAgICAgICAgICAgICAgICAg
ICBib29sIG92ZXJmbG93c0ZyYWdtZW50OwotICAgICAgICAgICAgICAgICAgICBtX2Zsb3cuYWRq
dXN0TGluZVBvc2l0aW9uRm9yUGFnaW5hdGlvbihsaW5lLCBkZWx0YSwgb3ZlcmZsb3dzRnJhZ21l
bnQsIGxheW91dFN0YXRlLmZyYWdtZW50ZWRGbG93KCkpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBpZiAoZGVsdGEpIHsKLSAgICAgICAgICAgICAgICAgICAgbGF5b3V0U3Rh
dGUudXBkYXRlUmVwYWludFJhbmdlRnJvbUJveChsaW5lLCBkZWx0YSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGxpbmUtPmFkanVzdEJsb2NrRGlyZWN0aW9uUG9zaXRpb24oZGVsdGEpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAobGF5b3V0U3RhdGUuZnJhZ21lbnRlZEZs
b3coKSkKLSAgICAgICAgICAgICAgICAgICAgdXBkYXRlRnJhZ21lbnRGb3JMaW5lKGxpbmUpOwot
ICAgICAgICAgICAgICAgIHJlYXR0YWNoQ2xlYW5MaW5lRmxvYXRzKCpsaW5lLCBkZWx0YSwgbGlu
ZSA9PSBmaXJzdENsZWFuTGluZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX2Zsb3cu
c2V0TG9naWNhbEhlaWdodChsYXN0Um9vdEJveCgpLT5saW5lQm94Qm90dG9tKCkpOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgLy8gRGVsZXRlIGFsbCB0aGUgcmVtYWluaW5nIGxpbmVz
LgotICAgICAgICAgICAgZGVsZXRlTGluZVJhbmdlKGxheW91dFN0YXRlLCBsYXlvdXRTdGF0ZS5l
bmRMaW5lKCkpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIGlmIChtX2Zsb3cuZmxvYXRp
bmdPYmplY3RzKCkgJiYgKGxheW91dFN0YXRlLmNoZWNrRm9yRmxvYXRzRnJvbUxhc3RMaW5lKCkg
fHwgbV9mbG93LnBvc2l0aW9uTmV3RmxvYXRzKCkpICYmIGxhc3RSb290Qm94KCkpIHsKLSAgICAg
ICAgLy8gSW4gY2FzZSB3ZSBoYXZlIGEgZmxvYXQgb24gdGhlIGxhc3QgbGluZSwgaXQgbWlnaHQg
bm90IGJlIHBvc2l0aW9uZWQgdXAgdG8gbm93LgotICAgICAgICAvLyBUaGlzIGhhcyB0byBiZSBk
b25lIGJlZm9yZSBhZGRpbmcgaW4gdGhlIGJvdHRvbSBib3JkZXIvcGFkZGluZywgb3IgdGhlIGZs
b2F0IHdpbGwKLSAgICAgICAgLy8gaW5jbHVkZSB0aGUgcGFkZGluZyBpbmNvcnJlY3RseS4gLWR3
aAotICAgICAgICBpZiAobGF5b3V0U3RhdGUuY2hlY2tGb3JGbG9hdHNGcm9tTGFzdExpbmUoKSkg
ewotICAgICAgICAgICAgTGF5b3V0VW5pdCBib3R0b21WaXN1YWxPdmVyZmxvdyA9IGxhc3RSb290
Qm94KCktPmxvZ2ljYWxCb3R0b21WaXN1YWxPdmVyZmxvdygpOwotICAgICAgICAgICAgTGF5b3V0
VW5pdCBib3R0b21MYXlvdXRPdmVyZmxvdyA9IGxhc3RSb290Qm94KCktPmxvZ2ljYWxCb3R0b21M
YXlvdXRPdmVyZmxvdygpOwotICAgICAgICAgICAgYXV0byBuZXdMaW5lQm94ID0gbWFrZVVuaXF1
ZTxUcmFpbGluZ0Zsb2F0c1Jvb3RJbmxpbmVCb3g+KG1fZmxvdyk7Ci0gICAgICAgICAgICBhdXRv
IHRyYWlsaW5nRmxvYXRzTGluZUJveCA9IG5ld0xpbmVCb3guZ2V0KCk7Ci0gICAgICAgICAgICBt
X2xpbmVCb3hlcy5hcHBlbmRMaW5lQm94KFdURk1vdmUobmV3TGluZUJveCkpOwotICAgICAgICAg
ICAgdHJhaWxpbmdGbG9hdHNMaW5lQm94LT5zZXRDb25zdHJ1Y3RlZCgpOwotICAgICAgICAgICAg
R2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXAgdGV4dEJveERhdGFNYXA7Ci0gICAgICAg
ICAgICBWZXJ0aWNhbFBvc2l0aW9uQ2FjaGUgdmVydGljYWxQb3NpdGlvbkNhY2hlOwotICAgICAg
ICAgICAgTGF5b3V0VW5pdCBibG9ja0xvZ2ljYWxIZWlnaHQgPSBtX2Zsb3cubG9naWNhbEhlaWdo
dCgpOwotICAgICAgICAgICAgdHJhaWxpbmdGbG9hdHNMaW5lQm94LT5hbGlnbkJveGVzSW5CbG9j
a0RpcmVjdGlvbihibG9ja0xvZ2ljYWxIZWlnaHQsIHRleHRCb3hEYXRhTWFwLCB2ZXJ0aWNhbFBv
c2l0aW9uQ2FjaGUpOwotICAgICAgICAgICAgdHJhaWxpbmdGbG9hdHNMaW5lQm94LT5zZXRMaW5l
VG9wQm90dG9tUG9zaXRpb25zKGJsb2NrTG9naWNhbEhlaWdodCwgYmxvY2tMb2dpY2FsSGVpZ2h0
LCBibG9ja0xvZ2ljYWxIZWlnaHQsIGJsb2NrTG9naWNhbEhlaWdodCk7Ci0gICAgICAgICAgICB0
cmFpbGluZ0Zsb2F0c0xpbmVCb3gtPnNldFBhZ2luYXRlZExpbmVXaWR0aChtX2Zsb3cuYXZhaWxh
YmxlTG9naWNhbFdpZHRoRm9yQ29udGVudChibG9ja0xvZ2ljYWxIZWlnaHQpKTsKLSAgICAgICAg
ICAgIExheW91dFJlY3QgbG9naWNhbExheW91dE92ZXJmbG93KDBfbHUsIGJsb2NrTG9naWNhbEhl
aWdodCwgMV9sdSwgYm90dG9tTGF5b3V0T3ZlcmZsb3cgLSBibG9ja0xvZ2ljYWxIZWlnaHQpOwot
ICAgICAgICAgICAgTGF5b3V0UmVjdCBsb2dpY2FsVmlzdWFsT3ZlcmZsb3coMF9sdSwgYmxvY2tM
b2dpY2FsSGVpZ2h0LCAxX2x1LCBib3R0b21WaXN1YWxPdmVyZmxvdyAtIGJsb2NrTG9naWNhbEhl
aWdodCk7Ci0gICAgICAgICAgICB0cmFpbGluZ0Zsb2F0c0xpbmVCb3gtPnNldE92ZXJmbG93RnJv
bUxvZ2ljYWxSZWN0cyhsb2dpY2FsTGF5b3V0T3ZlcmZsb3csIGxvZ2ljYWxWaXN1YWxPdmVyZmxv
dywgdHJhaWxpbmdGbG9hdHNMaW5lQm94LT5saW5lVG9wKCksIHRyYWlsaW5nRmxvYXRzTGluZUJv
eC0+bGluZUJvdHRvbSgpKTsKLSAgICAgICAgICAgIGlmIChsYXlvdXRTdGF0ZS5mcmFnbWVudGVk
RmxvdygpKQotICAgICAgICAgICAgICAgIHVwZGF0ZUZyYWdtZW50Rm9yTGluZSh0cmFpbGluZ0Zs
b2F0c0xpbmVCb3gpOwotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RT
ZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG93LmZsb2F0aW5nT2JqZWN0cygpLT5zZXQoKTsK
LSAgICAgICAgYXV0byBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7Ci0gICAgICAgIGF1
dG8gZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7Ci0gICAgICAgIGlmIChhdXRvKiBsYXN0
RmxvYXQgPSBsYXlvdXRTdGF0ZS5mbG9hdExpc3QoKS5sYXN0RmxvYXQoKSkgewotICAgICAgICAg
ICAgYXV0byBsYXN0RmxvYXRJdGVyYXRvciA9IGZsb2F0aW5nT2JqZWN0U2V0LmZpbmQobGFzdEZs
b2F0KTsKLSAgICAgICAgICAgIEFTU0VSVChsYXN0RmxvYXRJdGVyYXRvciAhPSBlbmQpOwotICAg
ICAgICAgICAgKytsYXN0RmxvYXRJdGVyYXRvcjsKLSAgICAgICAgICAgIGl0ID0gbGFzdEZsb2F0
SXRlcmF0b3I7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgICAgIGFwcGVuZEZsb2F0aW5nT2JqZWN0VG9MYXN0TGluZSgqKml0KTsKLSAgICAgICAg
bGF5b3V0U3RhdGUuZmxvYXRMaXN0KCkuc2V0TGFzdEZsb2F0KCFmbG9hdGluZ09iamVjdFNldC5p
c0VtcHR5KCkgPyBmbG9hdGluZ09iamVjdFNldC5sYXN0KCkuZ2V0KCkgOiBudWxscHRyKTsKLSAg
ICB9Ci19Ci0KLXZvaWQgQ29tcGxleExpbmVMYXlvdXQ6OmxheW91dExpbmVCb3hlcyhib29sIHJl
bGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQmIHJlcGFpbnRMb2dpY2FsVG9wLCBMYXlvdXRVbml0
JiByZXBhaW50TG9naWNhbEJvdHRvbSkKLXsKLSAgICBtX2Zsb3cuc2V0TG9naWNhbEhlaWdodCht
X2Zsb3cuYm9yZGVyQW5kUGFkZGluZ0JlZm9yZSgpKTsKLSAgICAKLSAgICAvLyBMYXkgb3V0IG91
ciBoeXBvdGhldGljYWwgZ3JpZCBsaW5lIGFzIHRob3VnaCBpdCBvY2N1cnMgYXQgdGhlIHRvcCBv
ZiB0aGUgYmxvY2suCi0gICAgaWYgKGxheW91dENvbnRleHQoKS5sYXlvdXRTdGF0ZSgpICYmIGxh
eW91dENvbnRleHQoKS5sYXlvdXRTdGF0ZSgpLT5saW5lR3JpZCgpID09ICZtX2Zsb3cpCi0gICAg
ICAgIG1fZmxvdy5sYXlvdXRMaW5lR3JpZEJveCgpOwotCi0gICAgUmVuZGVyRnJhZ21lbnRlZEZs
b3cqIGZyYWdtZW50ZWRGbG93ID0gbV9mbG93LmVuY2xvc2luZ0ZyYWdtZW50ZWRGbG93KCk7Ci0g
ICAgYm9vbCBjbGVhckxpbmVzRm9yUGFnaW5hdGlvbiA9IGZpcnN0Um9vdEJveCgpICYmIGZyYWdt
ZW50ZWRGbG93ICYmICFmcmFnbWVudGVkRmxvdy0+aGFzRnJhZ21lbnRzKCk7Ci0KLSAgICAvLyBG
aWd1cmUgb3V0IGlmIHdlIHNob3VsZCBjbGVhciBvdXQgb3VyIGxpbmUgYm94ZXMuCi0gICAgLy8g
RklYTUU6IEhhbmRsZSByZXNpemUgZXZlbnR1YWxseSEKLSAgICBib29sIGlzRnVsbExheW91dCA9
ICFmaXJzdFJvb3RCb3goKSB8fCBtX2Zsb3cuc2VsZk5lZWRzTGF5b3V0KCkgfHwgcmVsYXlvdXRD
aGlsZHJlbiB8fCBjbGVhckxpbmVzRm9yUGFnaW5hdGlvbjsKLSAgICBMaW5lTGF5b3V0U3RhdGUg
bGF5b3V0U3RhdGUobV9mbG93LCBpc0Z1bGxMYXlvdXQsIHJlcGFpbnRMb2dpY2FsVG9wLCByZXBh
aW50TG9naWNhbEJvdHRvbSwgZnJhZ21lbnRlZEZsb3cpOwotCi0gICAgaWYgKGlzRnVsbExheW91
dCkKLSAgICAgICAgbGluZUJveGVzKCkuZGVsZXRlTGluZUJveGVzKCk7Ci0KLSAgICAvLyBUZXh0
IHRydW5jYXRpb24ga2lja3MgaW4gaW4gdHdvIGNhc2VzOgotICAgIC8vICAgICAxKSBJZiB5b3Vy
IG92ZXJmbG93IGlzbid0IHZpc2libGUgYW5kIHlvdXIgdGV4dC1vdmVyZmxvdy1tb2RlIGlzbid0
IGNsaXAuCi0gICAgLy8gICAgIDIpIElmIHlvdSdyZSBhbiBhbm9ueW1vdXMgYmxvY2sgd2l0aCBh
IGJsb2NrIHBhcmVudCB0aGF0IHNhdGlzZmllcyAjMS4KLSAgICAvLyBGSVhNRTogQ1NTMyBzYXlz
IHRoYXQgZGVzY2VuZGFudHMgdGhhdCBhcmUgY2xpcHBlZCBtdXN0IGFsc28ga25vdyBob3cgdG8g
dHJ1bmNhdGUuIFRoaXMgaXMgaW5zYW5lbHkKLSAgICAvLyBkaWZmaWN1bHQgdG8gZmlndXJlIG91
dCBpbiBnZW5lcmFsIChlc3BlY2lhbGx5IGluIHRoZSBtaWRkbGUgb2YgZG9pbmcgbGF5b3V0KSwg
c28gd2Ugb25seSBoYW5kbGUgdGhlCi0gICAgLy8gc2ltcGxlIGNhc2Ugb2YgYW4gYW5vbnltb3Vz
IGJsb2NrIHRydW5jYXRpbmcgd2hlbiBpdCdzIHBhcmVudCBpcyBjbGlwcGVkLgotICAgIGF1dG8q
IHBhcmVudCA9IG1fZmxvdy5wYXJlbnQoKTsKLSAgICBib29sIGhhc1RleHRPdmVyZmxvdyA9IChz
dHlsZSgpLnRleHRPdmVyZmxvdygpID09IFRleHRPdmVyZmxvdzo6RWxsaXBzaXMgJiYgbV9mbG93
Lmhhc092ZXJmbG93Q2xpcCgpKQotICAgICAgICB8fCAobV9mbG93LmlzQW5vbnltb3VzQmxvY2so
KSAmJiBwYXJlbnQgJiYgcGFyZW50LT5pc1JlbmRlckJsb2NrKCkgJiYgcGFyZW50LT5zdHlsZSgp
LnRleHRPdmVyZmxvdygpID09IFRleHRPdmVyZmxvdzo6RWxsaXBzaXMgJiYgcGFyZW50LT5oYXNP
dmVyZmxvd0NsaXAoKSk7Ci0KLSAgICAvLyBXYWxrIGFsbCB0aGUgbGluZXMgYW5kIGRlbGV0ZSBv
dXIgZWxsaXBzaXMgbGluZSBib3hlcyBpZiB0aGV5IGV4aXN0LgotICAgIGlmIChoYXNUZXh0T3Zl
cmZsb3cpCi0gICAgICAgIGRlbGV0ZUVsbGlwc2lzTGluZUJveGVzKCk7Ci0KLSAgICBpZiAobV9m
bG93LmZpcnN0Q2hpbGQoKSkgewotICAgICAgICAvLyBJbiBmdWxsIGxheW91dCBtb2RlLCBjbGVh
ciB0aGUgbGluZSBib3hlcyBvZiBjaGlsZHJlbiB1cGZyb250LiBPdGhlcndpc2UsCi0gICAgICAg
IC8vIHNpYmxpbmdzIGNhbiBydW4gaW50byBzdGFsZSByb290IGxpbmVib3hlcyBkdXJpbmcgbGF5
b3V0LiBUaGVuIGxheW91dAotICAgICAgICAvLyB0aGUgcmVwbGFjZWQgZWxlbWVudHMgbGF0ZXIu
IEluIHBhcnRpYWwgbGF5b3V0IG1vZGUsIGxpbmUgYm94ZXMgYXJlIG5vdAotICAgICAgICAvLyBk
ZWxldGVkIGFuZCBvbmx5IGRpcnRpZWQuIEluIHRoYXQgY2FzZSwgd2UgY2FuIGxheW91dCB0aGUg
cmVwbGFjZWQKLSAgICAgICAgLy8gZWxlbWVudHMgYXQgdGhlIHNhbWUgdGltZS4KLSAgICAgICAg
Ym9vbCBoYXNJbmxpbmVDaGlsZCA9IGZhbHNlOwotICAgICAgICBWZWN0b3I8UmVuZGVyQm94Kj4g
cmVwbGFjZWRDaGlsZHJlbjsKLSAgICAgICAgZm9yIChJbmxpbmVXYWxrZXIgd2Fsa2VyKG1fZmxv
dyk7ICF3YWxrZXIuYXRFbmQoKTsgd2Fsa2VyLmFkdmFuY2UoKSkgewotICAgICAgICAgICAgUmVu
ZGVyT2JqZWN0JiBvID0gKndhbGtlci5jdXJyZW50KCk7Ci0KLSAgICAgICAgICAgIGlmICghaGFz
SW5saW5lQ2hpbGQgJiYgby5pc0lubGluZSgpKQotICAgICAgICAgICAgICAgIGhhc0lubGluZUNo
aWxkID0gdHJ1ZTsKLQotICAgICAgICAgICAgaWYgKG8uaXNSZXBsYWNlZCgpIHx8IG8uaXNGbG9h
dGluZygpIHx8IG8uaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpIHsKLSAgICAgICAgICAgICAgICBS
ZW5kZXJCb3gmIGJveCA9IGRvd25jYXN0PFJlbmRlckJveD4obyk7Ci0KLSAgICAgICAgICAgICAg
ICBpZiAocmVsYXlvdXRDaGlsZHJlbiB8fCBib3guaGFzUmVsYXRpdmVEaW1lbnNpb25zKCkpCi0g
ICAgICAgICAgICAgICAgICAgIGJveC5zZXRDaGlsZE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7
Ci0KLSAgICAgICAgICAgICAgICAvLyBJZiByZWxheW91dENoaWxkcmVuIGlzIHNldCBhbmQgdGhl
IGNoaWxkIGhhcyBwZXJjZW50YWdlIHBhZGRpbmcgb3IgYW4gZW1iZWRkZWQgY29udGVudCBib3gs
IHdlIGFsc28gbmVlZCB0byBpbnZhbGlkYXRlIHRoZSBjaGlsZHMgcHJlZiB3aWR0aHMuCi0gICAg
ICAgICAgICAgICAgaWYgKHJlbGF5b3V0Q2hpbGRyZW4gJiYgYm94Lm5lZWRzUHJlZmVycmVkV2lk
dGhzUmVjYWxjdWxhdGlvbigpKQotICAgICAgICAgICAgICAgICAgICBib3guc2V0UHJlZmVycmVk
TG9naWNhbFdpZHRoc0RpcnR5KHRydWUsIE1hcmtPbmx5VGhpcyk7Ci0KLSAgICAgICAgICAgICAg
ICBpZiAoYm94LmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKQotICAgICAgICAgICAgICAgICAgICBi
b3guY29udGFpbmluZ0Jsb2NrKCktPmluc2VydFBvc2l0aW9uZWRPYmplY3QoYm94KTsKLSAgICAg
ICAgICAgICAgICBlbHNlIGlmIChib3guaXNGbG9hdGluZygpKQotICAgICAgICAgICAgICAgICAg
ICBsYXlvdXRTdGF0ZS5mbG9hdExpc3QoKS5hcHBlbmQoRmxvYXRXaXRoUmVjdDo6Y3JlYXRlKGJv
eCkpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzRnVsbExheW91dCB8fCBib3gubmVlZHNM
YXlvdXQoKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBSZXBsYWNlZCBlbGVtZW50LgotICAg
ICAgICAgICAgICAgICAgICBpZiAoaXNGdWxsTGF5b3V0ICYmIGlzPFJlbmRlclJ1YnlSdW4+KGJv
eCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHJlc2V0cyB0aGUg
b3ZlcmhhbmdpbmcgbWFyZ2lucyB0aGF0IHdlIHNldCBkdXJpbmcgbGluZSBsYXlvdXQgKHNlZSBj
b21wdXRlSW5saW5lRGlyZWN0aW9uUG9zaXRpb25zRm9yU2VnbWVudCkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEZpbmQgYSBtb3JlIHN1aXRhYmxlIHBsYWNlIGZvciB0aGlzLgotICAgICAg
ICAgICAgICAgICAgICAgICAgbV9mbG93LnNldE1hcmdpblN0YXJ0Rm9yQ2hpbGQoYm94LCAwKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIG1fZmxvdy5zZXRNYXJnaW5FbmRGb3JDaGlsZChib3gs
IDApOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJveC5kaXJ0
eUxpbmVCb3hlcyhpc0Z1bGxMYXlvdXQpOwotICAgICAgICAgICAgICAgICAgICBpZiAoaXNGdWxs
TGF5b3V0KQotICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZWRDaGlsZHJlbi5hcHBlbmQo
JmJveCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAg
IGJveC5sYXlvdXRJZk5lZWRlZCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0g
ZWxzZSBpZiAoby5pc1RleHRPckxpbmVCcmVhaygpIHx8IChpczxSZW5kZXJJbmxpbmU+KG8pICYm
ICF3YWxrZXIuYXRFbmRPZklubGluZSgpKSkgewotICAgICAgICAgICAgICAgIGlmIChpczxSZW5k
ZXJJbmxpbmU+KG8pKQotICAgICAgICAgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJJbmxpbmU+
KG8pLnVwZGF0ZUFsd2F5c0NyZWF0ZUxpbmVCb3hlcyhsYXlvdXRTdGF0ZS5pc0Z1bGxMYXlvdXQo
KSk7Ci0gICAgICAgICAgICAgICAgaWYgKGxheW91dFN0YXRlLmlzRnVsbExheW91dCgpIHx8IG8u
c2VsZk5lZWRzTGF5b3V0KCkpCi0gICAgICAgICAgICAgICAgICAgIGRpcnR5TGluZUJveGVzRm9y
UmVuZGVyZXIobywgbGF5b3V0U3RhdGUuaXNGdWxsTGF5b3V0KCkpOwotICAgICAgICAgICAgICAg
IG8uY2xlYXJOZWVkc0xheW91dCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXBsYWNlZENoaWxkcmVuLnNpemUoKTsgaSsrKQot
ICAgICAgICAgICAgcmVwbGFjZWRDaGlsZHJlbltpXS0+bGF5b3V0SWZOZWVkZWQoKTsKLQotICAg
ICAgICBsYXlvdXRSdW5zQW5kRmxvYXRzKGxheW91dFN0YXRlLCBoYXNJbmxpbmVDaGlsZCk7Ci0g
ICAgfQotCi0gICAgLy8gRXhwYW5kIHRoZSBsYXN0IGxpbmUgdG8gYWNjb21tb2RhdGUgUnVieSBh
bmQgZW1waGFzaXMgbWFya3MuCi0gICAgaW50IGxhc3RMaW5lQW5ub3RhdGlvbnNBZGp1c3RtZW50
ID0gMDsKLSAgICBpZiAobGFzdFJvb3RCb3goKSkgewotICAgICAgICBMYXlvdXRVbml0IGxvd2Vz
dEFsbG93ZWRQb3NpdGlvbiA9IHN0ZDo6bWF4KGxhc3RSb290Qm94KCktPmxpbmVCb3R0b20oKSwg
bV9mbG93LmxvZ2ljYWxIZWlnaHQoKSArIG1fZmxvdy5wYWRkaW5nQWZ0ZXIoKSk7Ci0gICAgICAg
IGlmICghc3R5bGUoKS5pc0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKCkpCi0gICAgICAgICAgICBs
YXN0TGluZUFubm90YXRpb25zQWRqdXN0bWVudCA9IGxhc3RSb290Qm94KCktPmNvbXB1dGVVbmRl
ckFubm90YXRpb25BZGp1c3RtZW50KGxvd2VzdEFsbG93ZWRQb3NpdGlvbik7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIGxhc3RMaW5lQW5ub3RhdGlvbnNBZGp1c3RtZW50ID0gbGFzdFJvb3RC
b3goKS0+Y29tcHV0ZU92ZXJBbm5vdGF0aW9uQWRqdXN0bWVudChsb3dlc3RBbGxvd2VkUG9zaXRp
b24pOwotICAgIH0KLSAgICAKLSAgICAvLyBOb3cgZG8gdGhlIGhhbmRsaW5nIG9mIHRoZSBib3R0
b20gb2YgdGhlIGJsb2NrLCBhZGRpbmcgaW4gb3VyIGJvdHRvbSBib3JkZXIvcGFkZGluZyBhbmQK
LSAgICAvLyBkZXRlcm1pbmluZyB0aGUgY29ycmVjdCBjb2xsYXBzZWQgYm90dG9tIG1hcmdpbiBp
bmZvcm1hdGlvbi4gVGhpcyBjb2xsYXBzZSBpcyBvbmx5IG5lY2Vzc2FyeQotICAgIC8vIGlmIG91
ciBsYXN0IGNoaWxkIHdhcyBhbiBhbm9ueW1vdXMgaW5saW5lIGJsb2NrIHRoYXQgbWlnaHQgbmVl
ZCB0byBwcm9wYWdhdGUgbWFyZ2luIGluZm9ybWF0aW9uIG91dCB0bwotICAgIC8vIHVzLgotICAg
IExheW91dFVuaXQgYWZ0ZXJFZGdlID0gbV9mbG93LmJvcmRlckFuZFBhZGRpbmdBZnRlcigpICsg
bV9mbG93LnNjcm9sbGJhckxvZ2ljYWxIZWlnaHQoKSArIGxhc3RMaW5lQW5ub3RhdGlvbnNBZGp1
c3RtZW50OwotICAgIG1fZmxvdy5zZXRMb2dpY2FsSGVpZ2h0KG1fZmxvdy5sb2dpY2FsSGVpZ2h0
KCkgKyBhZnRlckVkZ2UpOwotCi0gICAgaWYgKCFmaXJzdFJvb3RCb3goKSAmJiBtX2Zsb3cuaGFz
TGluZUlmRW1wdHkoKSkKLSAgICAgICAgbV9mbG93LnNldExvZ2ljYWxIZWlnaHQobV9mbG93Lmxv
Z2ljYWxIZWlnaHQoKSArIG1fZmxvdy5saW5lSGVpZ2h0KHRydWUsIG1fZmxvdy5pc0hvcml6b250
YWxXcml0aW5nTW9kZSgpID8gSG9yaXpvbnRhbExpbmUgOiBWZXJ0aWNhbExpbmUsIFBvc2l0aW9u
T2ZJbnRlcmlvckxpbmVCb3hlcykpOwotCi0gICAgLy8gU2VlIGlmIHdlIGhhdmUgYW55IGxpbmVz
IHRoYXQgc3BpbGwgb3V0IG9mIG91ciBibG9jay4gSWYgd2UgZG8sIHRoZW4gd2Ugd2lsbCBwb3Nz
aWJseSBuZWVkIHRvCi0gICAgLy8gdHJ1bmNhdGUgdGV4dC4KLSAgICBpZiAoaGFzVGV4dE92ZXJm
bG93KQotICAgICAgICBjaGVja0xpbmVzRm9yVGV4dE92ZXJmbG93KCk7Ci19Ci0KLXZvaWQgQ29t
cGxleExpbmVMYXlvdXQ6OmNoZWNrRmxvYXRJbkNsZWFuTGluZShSb290SW5saW5lQm94JiBjbGVh
bkxpbmUsIFJlbmRlckJveCYgZmxvYXRCb3hPbkNsZWFuTGluZSwgRmxvYXRXaXRoUmVjdCYgbWF0
Y2hpbmdGbG9hdFdpdGhSZWN0LAotICAgIGJvb2wmIGVuY291bnRlcmVkTmV3RmxvYXQsIGJvb2wm
IGRpcnRpZWRCeUZsb2F0KQotewotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9O
KCFmbG9hdEJveE9uQ2xlYW5MaW5lLnN0eWxlKCkuZGVsZXRpb25IYXNCZWd1bigpKTsKLSAgICBp
ZiAoJm1hdGNoaW5nRmxvYXRXaXRoUmVjdC5yZW5kZXJlcigpICE9ICZmbG9hdEJveE9uQ2xlYW5M
aW5lKSB7Ci0gICAgICAgIGVuY291bnRlcmVkTmV3RmxvYXQgPSB0cnVlOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIGZsb2F0Qm94T25DbGVhbkxpbmUubGF5b3V0SWZOZWVkZWQoKTsKLSAg
ICBMYXlvdXRSZWN0IG9yaWdpbmFsRmxvYXRSZWN0ID0gbWF0Y2hpbmdGbG9hdFdpdGhSZWN0LnJl
Y3QoKTsKLSAgICBMYXlvdXRTaXplIG5ld1NpemUoCi0gICAgICAgIGZsb2F0Qm94T25DbGVhbkxp
bmUud2lkdGgoKSArIGZsb2F0Qm94T25DbGVhbkxpbmUuaG9yaXpvbnRhbE1hcmdpbkV4dGVudCgp
LAotICAgICAgICBmbG9hdEJveE9uQ2xlYW5MaW5lLmhlaWdodCgpICsgZmxvYXRCb3hPbkNsZWFu
TGluZS52ZXJ0aWNhbE1hcmdpbkV4dGVudCgpKTsKLSAgICAKLSAgICAvLyBXZSBoYXZlIHRvIHJl
c2V0IHRoZSBjYXAtaGVpZ2h0IGFsaWdubWVudCBkb25lIGJ5IHRoZSBmaXJzdC1sZXR0ZXIgZmxv
YXRzIHdoZW4gaW5pdGlhbC1sZXR0ZXIgaXMgc2V0LCBzbyBqdXN0IGFsd2F5cyB0cmVhdCBmaXJz
dC1sZXR0ZXIgZmxvYXRzIGFzIGRpcnR5LgotICAgIGlmIChvcmlnaW5hbEZsb2F0UmVjdC5zaXpl
KCkgPT0gbmV3U2l6ZSAmJiAoZmxvYXRCb3hPbkNsZWFuTGluZS5zdHlsZSgpLnN0eWxlVHlwZSgp
ICE9IFBzZXVkb0lkOjpGaXJzdExldHRlciB8fCAhZmxvYXRCb3hPbkNsZWFuTGluZS5zdHlsZSgp
LmluaXRpYWxMZXR0ZXJEcm9wKCkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBMYXlvdXRVbml0
IGZsb2F0VG9wID0gbV9mbG93LmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBvcmlnaW5hbEZs
b2F0UmVjdC55KCkgOiBvcmlnaW5hbEZsb2F0UmVjdC54KCk7Ci0gICAgTGF5b3V0VW5pdCBmbG9h
dEhlaWdodCA9IG1fZmxvdy5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gc3RkOjptYXgob3Jp
Z2luYWxGbG9hdFJlY3QuaGVpZ2h0KCksIG5ld1NpemUuaGVpZ2h0KCkpCi0gICAgICAgIDogc3Rk
OjptYXgob3JpZ2luYWxGbG9hdFJlY3Qud2lkdGgoKSwgbmV3U2l6ZS53aWR0aCgpKTsKLSAgICBm
bG9hdEhlaWdodCA9IHN0ZDo6bWluKGZsb2F0SGVpZ2h0LCBMYXlvdXRVbml0OjptYXgoKSAtIGZs
b2F0VG9wKTsKLSAgICBjbGVhbkxpbmUubWFya0RpcnR5KCk7Ci0gICAgbV9mbG93Lm1hcmtMaW5l
c0RpcnR5SW5CbG9ja1JhbmdlKGNsZWFuTGluZS5saW5lQm94Qm90dG9tKCksIGZsb2F0VG9wICsg
ZmxvYXRIZWlnaHQsICZjbGVhbkxpbmUpOwotICAgIExheW91dFJlY3QgbmV3RmxvYXRSZWN0ID0g
b3JpZ2luYWxGbG9hdFJlY3Q7Ci0gICAgbmV3RmxvYXRSZWN0LnNldFNpemUobmV3U2l6ZSk7Ci0g
ICAgbWF0Y2hpbmdGbG9hdFdpdGhSZWN0LmFkanVzdFJlY3QobmV3RmxvYXRSZWN0KTsKLSAgICBk
aXJ0aWVkQnlGbG9hdCA9IHRydWU7Ci19Ci0KLVJvb3RJbmxpbmVCb3gqIENvbXBsZXhMaW5lTGF5
b3V0OjpkZXRlcm1pbmVTdGFydFBvc2l0aW9uKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUs
IElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIpCi17Ci0gICAgUm9vdElubGluZUJveCogY3Vy
cmVudExpbmUgPSBudWxscHRyOwotICAgIFJvb3RJbmxpbmVCb3gqIGxhc3RMaW5lID0gbnVsbHB0
cjsKLQotICAgIC8vIEZJWE1FOiBUaGlzIGVudGlyZSBmbG9hdC1jaGVja2luZyBibG9jayBuZWVk
cyB0byBiZSBicm9rZW4gaW50byBhIG5ldyBmdW5jdGlvbi4KLSAgICBhdXRvJiBmbG9hdHMgPSBs
YXlvdXRTdGF0ZS5mbG9hdExpc3QoKTsKLSAgICBib29sIGRpcnRpZWRCeUZsb2F0ID0gZmFsc2U7
Ci0gICAgaWYgKCFsYXlvdXRTdGF0ZS5pc0Z1bGxMYXlvdXQoKSkgewotICAgICAgICAvLyBQYWdp
bmF0ZSBhbGwgb2YgdGhlIGNsZWFuIGxpbmVzLgotICAgICAgICBib29sIHBhZ2luYXRlZCA9IGxh
eW91dENvbnRleHQoKS5sYXlvdXRTdGF0ZSgpICYmIGxheW91dENvbnRleHQoKS5sYXlvdXRTdGF0
ZSgpLT5pc1BhZ2luYXRlZCgpOwotICAgICAgICBMYXlvdXRVbml0IHBhZ2luYXRpb25EZWx0YTsK
LSAgICAgICAgYXV0byBmbG9hdHNJdGVyYXRvciA9IGZsb2F0cy5iZWdpbigpOwotICAgICAgICBh
dXRvIGVuZCA9IGZsb2F0cy5lbmQoKTsKLSAgICAgICAgZm9yIChjdXJyZW50TGluZSA9IGZpcnN0
Um9vdEJveCgpOyBjdXJyZW50TGluZSAmJiAhY3VycmVudExpbmUtPmlzRGlydHkoKTsgY3VycmVu
dExpbmUgPSBjdXJyZW50TGluZS0+bmV4dFJvb3RCb3goKSkgewotICAgICAgICAgICAgaWYgKHBh
Z2luYXRlZCkgewotICAgICAgICAgICAgICAgIGlmIChsaW5lV2lkdGhGb3JQYWdpbmF0ZWRMaW5l
Q2hhbmdlZChjdXJyZW50TGluZSwgMCwgbGF5b3V0U3RhdGUuZnJhZ21lbnRlZEZsb3coKSkpIHsK
LSAgICAgICAgICAgICAgICAgICAgY3VycmVudExpbmUtPm1hcmtEaXJ0eSgpOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcGFn
aW5hdGlvbkRlbHRhIC09IGN1cnJlbnRMaW5lLT5wYWdpbmF0aW9uU3RydXQoKTsKLSAgICAgICAg
ICAgICAgICBib29sIG92ZXJmbG93c0ZyYWdtZW50OwotICAgICAgICAgICAgICAgIG1fZmxvdy5h
ZGp1c3RMaW5lUG9zaXRpb25Gb3JQYWdpbmF0aW9uKGN1cnJlbnRMaW5lLCBwYWdpbmF0aW9uRGVs
dGEsIG92ZXJmbG93c0ZyYWdtZW50LCBsYXlvdXRTdGF0ZS5mcmFnbWVudGVkRmxvdygpKTsKLSAg
ICAgICAgICAgICAgICBpZiAocGFnaW5hdGlvbkRlbHRhKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChtX2Zsb3cuY29udGFpbnNGbG9hdHMoKSB8fCAhZmxvYXRzLmlzRW1wdHkoKSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IERvIGJldHRlciBldmVudHVhbGx5LiBGb3Ig
bm93IGlmIHdlIGV2ZXIgc2hpZnQgYmVjYXVzZSBvZiBwYWdpbmF0aW9uIGFuZCBmbG9hdHMgYXJl
IHByZXNlbnQganVzdCBnbyB0byBhIGZ1bGwgbGF5b3V0LgotICAgICAgICAgICAgICAgICAgICAg
ICAgbGF5b3V0U3RhdGUubWFya0ZvckZ1bGxMYXlvdXQoKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAg
bGF5b3V0U3RhdGUudXBkYXRlUmVwYWludFJhbmdlRnJvbUJveChjdXJyZW50TGluZSwgcGFnaW5h
dGlvbkRlbHRhKTsKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudExpbmUtPmFkanVzdEJsb2Nr
RGlyZWN0aW9uUG9zaXRpb24ocGFnaW5hdGlvbkRlbHRhKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgaWYgKGxheW91dFN0YXRlLmZyYWdtZW50ZWRGbG93KCkpCi0gICAgICAg
ICAgICAgICAgICAgIHVwZGF0ZUZyYWdtZW50Rm9yTGluZShjdXJyZW50TGluZSk7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChhdXRvKiBjbGVhbkxpbmVGbG9hdHMgPSBjdXJyZW50
TGluZS0+ZmxvYXRzUHRyKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBJZiBhIG5ldyBmbG9hdCBo
YXMgYmVlbiBpbnNlcnRlZCBiZWZvcmUgdGhpcyBsaW5lIG9yIGJlZm9yZSBpdHMgbGFzdCBrbm93
biBmbG9hdCwganVzdCBkbyBhIGZ1bGwgbGF5b3V0LgotICAgICAgICAgICAgICAgIGJvb2wgZW5j
b3VudGVyZWROZXdGbG9hdCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGZvciAoYXV0byYgZmxv
YXRCb3hPbkNsZWFuTGluZSA6ICpjbGVhbkxpbmVGbG9hdHMpIHsKLSAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKGZsb2F0c0l0ZXJhdG9yICE9IGVuZCk7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICghZmxvYXRCb3hPbkNsZWFuTGluZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgICAgICAgICBjaGVja0Zsb2F0SW5DbGVhbkxpbmUoKmN1cnJlbnRMaW5l
LCAqZmxvYXRCb3hPbkNsZWFuTGluZSwgKmZsb2F0c0l0ZXJhdG9yLCBlbmNvdW50ZXJlZE5ld0Zs
b2F0LCBkaXJ0aWVkQnlGbG9hdCk7Ci0gICAgICAgICAgICAgICAgICAgICsrZmxvYXRzSXRlcmF0
b3I7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChmbG9hdHNJdGVyYXRvciA9PSBlbmQgfHwgZW5j
b3VudGVyZWROZXdGbG9hdCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbGF5b3V0U3RhdGUu
bWFya0ZvckZ1bGxMYXlvdXQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlm
IChkaXJ0aWVkQnlGbG9hdCB8fCBlbmNvdW50ZXJlZE5ld0Zsb2F0KQotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAvLyBDaGVjayBp
ZiBhIG5ldyBmbG9hdCBoYXMgYmVlbiBpbnNlcnRlZCBhZnRlciB0aGUgbGFzdCBrbm93biBmbG9h
dC4KLSAgICAgICAgaWYgKGZsb2F0c0l0ZXJhdG9yICE9IGVuZCkgewotICAgICAgICAgICAgaWYg
KCFjdXJyZW50TGluZSkKLSAgICAgICAgICAgICAgICBsYXlvdXRTdGF0ZS5tYXJrRm9yRnVsbExh
eW91dCgpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgZm9yICg7IGZsb2F0
c0l0ZXJhdG9yICE9IGVuZDsgKytmbG9hdHNJdGVyYXRvcikgewotICAgICAgICAgICAgICAgICAg
ICBhdXRvJiBmbG9hdFdpdGhSZWN0ID0gKmZsb2F0c0l0ZXJhdG9yOwotICAgICAgICAgICAgICAg
ICAgICBpZiAoIWZsb2F0V2l0aFJlY3QtPnJlbmRlcmVyKCkubmVlZHNMYXlvdXQoKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICBsYXlvdXRT
dGF0ZS5tYXJrRm9yRnVsbExheW91dCgpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBp
ZiAobGF5b3V0U3RhdGUuaXNGdWxsTGF5b3V0KCkpIHsKLSAgICAgICAgbV9saW5lQm94ZXMuZGVs
ZXRlTGluZUJveFRyZWUoKTsKLSAgICAgICAgY3VycmVudExpbmUgPSBudWxscHRyOwotICAgICAg
ICBBU1NFUlQoIWZpcnN0Um9vdEJveCgpICYmICFsYXN0Um9vdEJveCgpKTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICBpZiAoY3VycmVudExpbmUpIHsKLSAgICAgICAgICAgIC8vIFdlIGhhdmUgYSBk
aXJ0eSBsaW5lLgotICAgICAgICAgICAgaWYgKFJvb3RJbmxpbmVCb3gqIHByZXZSb290Qm94ID0g
Y3VycmVudExpbmUtPnByZXZSb290Qm94KCkpIHsKLSAgICAgICAgICAgICAgICAvLyBXZSBoYXZl
IGEgcHJldmlvdXMgbGluZS4KLSAgICAgICAgICAgICAgICBpZiAoIWRpcnRpZWRCeUZsb2F0ICYm
ICghcHJldlJvb3RCb3gtPmVuZHNXaXRoQnJlYWsoKQotICAgICAgICAgICAgICAgICAgICB8fCAh
cHJldlJvb3RCb3gtPmxpbmVCcmVha09iaigpCi0gICAgICAgICAgICAgICAgICAgIHx8IChpczxS
ZW5kZXJUZXh0PigqcHJldlJvb3RCb3gtPmxpbmVCcmVha09iaigpKQotICAgICAgICAgICAgICAg
ICAgICAmJiBwcmV2Um9vdEJveC0+bGluZUJyZWFrUG9zKCkgPj0gZG93bmNhc3Q8UmVuZGVyVGV4
dD4oKnByZXZSb290Qm94LT5saW5lQnJlYWtPYmooKSkudGV4dCgpLmxlbmd0aCgpKSkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgLy8gVGhlIHByZXZpb3VzIGxpbmUgZGlkbid0IGJyZWFrIGNsZWFu
bHkgb3IgYnJva2UgYXQgYSBuZXdsaW5lCi0gICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgaGFz
IGJlZW4gZGVsZXRlZCwgc28gdHJlYXQgaXQgYXMgZGlydHkgdG9vLgotICAgICAgICAgICAgICAg
ICAgICBjdXJyZW50TGluZSA9IHByZXZSb290Qm94OwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAvLyBJZiB3ZSBoYXZlIG5vIGRpcnR5IGxpbmVz
LCB0aGVuIGxhc3QgaXMganVzdCB0aGUgbGFzdCByb290IGJveC4KLSAgICAgICAgbGFzdExpbmUg
PSBjdXJyZW50TGluZSA/IGN1cnJlbnRMaW5lLT5wcmV2Um9vdEJveCgpIDogbGFzdFJvb3RCb3go
KTsKLSAgICB9Ci0KLSAgICBpZiAoIWZsb2F0cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgTGF5b3V0
VW5pdCBzYXZlZExvZ2ljYWxIZWlnaHQgPSBtX2Zsb3cubG9naWNhbEhlaWdodCgpOwotICAgICAg
ICAvLyBSZXN0b3JlIGZsb2F0cyBmcm9tIGNsZWFuIGxpbmVzLgotICAgICAgICBSb290SW5saW5l
Qm94KiBsaW5lID0gZmlyc3RSb290Qm94KCk7Ci0gICAgICAgIHdoaWxlIChsaW5lICE9IGN1cnJl
bnRMaW5lKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byogY2xlYW5MaW5lRmxvYXRzID0gbGluZS0+
ZmxvYXRzUHRyKCkpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIGZsb2F0aW5nQm94IDog
KmNsZWFuTGluZUZsb2F0cykgewotICAgICAgICAgICAgICAgICAgICBpZiAoIWZsb2F0aW5nQm94
KQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAg
IGF1dG8qIGZsb2F0aW5nT2JqZWN0ID0gbV9mbG93Lmluc2VydEZsb2F0aW5nT2JqZWN0KCpmbG9h
dGluZ0JveCk7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJ
Q0FUSU9OKCFmbG9hdGluZ09iamVjdC0+b3JpZ2luYXRpbmdMaW5lKCkpOwotICAgICAgICAgICAg
ICAgICAgICBmbG9hdGluZ09iamVjdC0+c2V0T3JpZ2luYXRpbmdMaW5lKCpsaW5lKTsKLSAgICAg
ICAgICAgICAgICAgICAgbV9mbG93LnNldExvZ2ljYWxIZWlnaHQobV9mbG93LmxvZ2ljYWxUb3BG
b3JDaGlsZCgqZmxvYXRpbmdCb3gpIC0gbV9mbG93Lm1hcmdpbkJlZm9yZUZvckNoaWxkKCpmbG9h
dGluZ0JveCkpOwotICAgICAgICAgICAgICAgICAgICBtX2Zsb3cucG9zaXRpb25OZXdGbG9hdHMo
KTsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXRzLnNldExhc3RDbGVhbkZsb2F0KCpmbG9hdGlu
Z0JveCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgbGlu
ZSA9IGxpbmUtPm5leHRSb290Qm94KCk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9mbG93LnNldExv
Z2ljYWxIZWlnaHQoc2F2ZWRMb2dpY2FsSGVpZ2h0KTsKLSAgICB9Ci0KLSAgICBsYXlvdXRTdGF0
ZS5saW5lSW5mbygpLnNldEZpcnN0TGluZSghbGFzdExpbmUpOwotICAgIGxheW91dFN0YXRlLmxp
bmVJbmZvKCkuc2V0UHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KCFsYXN0TGluZSB8fCBsYXN0TGlu
ZS0+ZW5kc1dpdGhCcmVhaygpKTsKLQotICAgIGlmIChsYXN0TGluZSkgewotICAgICAgICBtX2Zs
b3cuc2V0TG9naWNhbEhlaWdodChsYXN0TGluZS0+bGluZUJveEJvdHRvbSgpKTsKLSAgICAgICAg
SW5saW5lSXRlcmF0b3IgaXRlciA9IElubGluZUl0ZXJhdG9yKCZtX2Zsb3csIGxhc3RMaW5lLT5s
aW5lQnJlYWtPYmooKSwgbGFzdExpbmUtPmxpbmVCcmVha1BvcygpKTsKLSAgICAgICAgcmVzb2x2
ZXIuc2V0UG9zaXRpb24oaXRlciwgbnVtYmVyT2ZJc29sYXRlQW5jZXN0b3JzKGl0ZXIpKTsKLSAg
ICAgICAgcmVzb2x2ZXIuc2V0U3RhdHVzKGxhc3RMaW5lLT5saW5lQnJlYWtCaWRpU3RhdHVzKCkp
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gc3R5bGUo
KS5kaXJlY3Rpb24oKTsKLSAgICAgICAgaWYgKHN0eWxlKCkudW5pY29kZUJpZGkoKSA9PSBQbGFp
bnRleHQpCi0gICAgICAgICAgICBkZXRlcm1pbmVEaXJlY3Rpb25hbGl0eShkaXJlY3Rpb24sIElu
bGluZUl0ZXJhdG9yKCZtX2Zsb3csIGJpZGlGaXJzdFNraXBwaW5nRW1wdHlJbmxpbmVzKG1fZmxv
dyksIDApKTsKLSAgICAgICAgcmVzb2x2ZXIuc2V0U3RhdHVzKEJpZGlTdGF0dXMoZGlyZWN0aW9u
LCBpc092ZXJyaWRlKHN0eWxlKCkudW5pY29kZUJpZGkoKSkpKTsKLSAgICAgICAgSW5saW5lSXRl
cmF0b3IgaXRlciA9IElubGluZUl0ZXJhdG9yKCZtX2Zsb3csIGJpZGlGaXJzdFNraXBwaW5nRW1w
dHlJbmxpbmVzKG1fZmxvdywgJnJlc29sdmVyKSwgMCk7Ci0gICAgICAgIHJlc29sdmVyLnNldFBv
c2l0aW9uKGl0ZXIsIG51bWJlck9mSXNvbGF0ZUFuY2VzdG9ycyhpdGVyKSk7Ci0gICAgfQotICAg
IHJldHVybiBjdXJyZW50TGluZTsKLX0KLQotdm9pZCBDb21wbGV4TGluZUxheW91dDo6ZGV0ZXJt
aW5lRW5kUG9zaXRpb24oTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgUm9vdElubGluZUJv
eCogc3RhcnRMaW5lLCBJbmxpbmVJdGVyYXRvciYgY2xlYW5MaW5lU3RhcnQsIEJpZGlTdGF0dXMm
IGNsZWFuTGluZUJpZGlTdGF0dXMpCi17Ci0gICAgYXV0byBpdGVyYXRvckZvckZpcnN0RGlydHlG
bG9hdCA9IFtdKExpbmVMYXlvdXRTdGF0ZTo6RmxvYXRMaXN0JiBmbG9hdHMpIHsKLSAgICAgICAg
YXV0byBsYXN0Q2xlYW5GbG9hdCA9IGZsb2F0cy5sYXN0Q2xlYW5GbG9hdCgpOwotICAgICAgICBp
ZiAoIWxhc3RDbGVhbkZsb2F0KQotICAgICAgICAgICAgcmV0dXJuIGZsb2F0cy5iZWdpbigpOwot
ICAgICAgICBhdXRvKiBsYXN0Q2xlYW5GbG9hdFdpdGhSZWN0ID0gZmxvYXRzLmZsb2F0V2l0aFJl
Y3QoKmxhc3RDbGVhbkZsb2F0KTsKLSAgICAgICAgQVNTRVJUKGxhc3RDbGVhbkZsb2F0V2l0aFJl
Y3QpOwotICAgICAgICByZXR1cm4gKytmbG9hdHMuZmluZCgqbGFzdENsZWFuRmxvYXRXaXRoUmVj
dCk7Ci0gICAgfTsKLQotICAgIEFTU0VSVCghbGF5b3V0U3RhdGUuZW5kTGluZSgpKTsKLSAgICBh
dXRvIGZsb2F0c0l0ZXJhdG9yID0gaXRlcmF0b3JGb3JGaXJzdERpcnR5RmxvYXQobGF5b3V0U3Rh
dGUuZmxvYXRMaXN0KCkpOwotICAgIGF1dG8gZW5kID0gbGF5b3V0U3RhdGUuZmxvYXRMaXN0KCku
ZW5kKCk7Ci0gICAgUm9vdElubGluZUJveCogbGFzdExpbmUgPSBudWxscHRyOwotICAgIGZvciAo
Um9vdElubGluZUJveCogY3VycmVudExpbmUgPSBzdGFydExpbmUtPm5leHRSb290Qm94KCk7IGN1
cnJlbnRMaW5lOyBjdXJyZW50TGluZSA9IGN1cnJlbnRMaW5lLT5uZXh0Um9vdEJveCgpKSB7Ci0g
ICAgICAgIGlmICghY3VycmVudExpbmUtPmlzRGlydHkoKSkgewotICAgICAgICAgICAgaWYgKGF1
dG8qIGNsZWFuTGluZUZsb2F0cyA9IGN1cnJlbnRMaW5lLT5mbG9hdHNQdHIoKSkgewotICAgICAg
ICAgICAgICAgIGJvb2wgZW5jb3VudGVyZWROZXdGbG9hdCA9IGZhbHNlOwotICAgICAgICAgICAg
ICAgIGJvb2wgZGlydGllZEJ5RmxvYXQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBmb3IgKGF1
dG8mIGZsb2F0Qm94T25DbGVhbkxpbmUgOiAqY2xlYW5MaW5lRmxvYXRzKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICghZmxvYXRCb3hPbkNsZWFuTGluZSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZmxvYXRzSXRlcmF0b3Ig
IT0gZW5kKTsKLSAgICAgICAgICAgICAgICAgICAgY2hlY2tGbG9hdEluQ2xlYW5MaW5lKCpjdXJy
ZW50TGluZSwgKmZsb2F0Qm94T25DbGVhbkxpbmUsICpmbG9hdHNJdGVyYXRvciwgZW5jb3VudGVy
ZWROZXdGbG9hdCwgZGlydGllZEJ5RmxvYXQpOwotICAgICAgICAgICAgICAgICAgICArK2Zsb2F0
c0l0ZXJhdG9yOwotICAgICAgICAgICAgICAgICAgICBpZiAoZmxvYXRzSXRlcmF0b3IgPT0gZW5k
IHx8IGVuY291bnRlcmVkTmV3RmxvYXQpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlm
IChjdXJyZW50TGluZS0+aXNEaXJ0eSgpKQotICAgICAgICAgICAgbGFzdExpbmUgPSBudWxscHRy
OwotICAgICAgICBlbHNlIGlmICghbGFzdExpbmUpCi0gICAgICAgICAgICBsYXN0TGluZSA9IGN1
cnJlbnRMaW5lOwotICAgIH0KLQotICAgIGlmICghbGFzdExpbmUpCi0gICAgICAgIHJldHVybjsK
LQotICAgIC8vIEF0IHRoaXMgcG9pbnQsIHxsYXN0fCBpcyB0aGUgZmlyc3QgbGluZSBpbiBhIHJ1
biBvZiBjbGVhbiBsaW5lcyB0aGF0IGVuZHMgd2l0aCB0aGUgbGFzdCBsaW5lCi0gICAgLy8gaW4g
dGhlIGJsb2NrLgotICAgIFJvb3RJbmxpbmVCb3gqIHByZXZpb3VzTGluZSA9IGxhc3RMaW5lLT5w
cmV2Um9vdEJveCgpOwotICAgIGNsZWFuTGluZVN0YXJ0ID0gSW5saW5lSXRlcmF0b3IoJm1fZmxv
dywgcHJldmlvdXNMaW5lLT5saW5lQnJlYWtPYmooKSwgcHJldmlvdXNMaW5lLT5saW5lQnJlYWtQ
b3MoKSk7Ci0gICAgY2xlYW5MaW5lQmlkaVN0YXR1cyA9IHByZXZpb3VzTGluZS0+bGluZUJyZWFr
QmlkaVN0YXR1cygpOwotICAgIGxheW91dFN0YXRlLnNldEVuZExpbmVMb2dpY2FsVG9wKHByZXZp
b3VzTGluZS0+bGluZUJveEJvdHRvbSgpKTsKLQotICAgIGZvciAoUm9vdElubGluZUJveCogbGlu
ZSA9IGxhc3RMaW5lOyBsaW5lOyBsaW5lID0gbGluZS0+bmV4dFJvb3RCb3goKSkgewotICAgICAg
ICAvLyBEaXNjb25uZWN0IGFsbCBsaW5lIGJveGVzIGZyb20gdGhlaXIgcmVuZGVyIG9iamVjdHMg
d2hpbGUgcHJlc2VydmluZyB0aGVpciBjb25uZWN0aW9ucyB0byBvbmUgYW5vdGhlci4KLSAgICAg
ICAgbGluZS0+ZXh0cmFjdExpbmUoKTsKLSAgICB9Ci0gICAgbGF5b3V0U3RhdGUuc2V0RW5kTGlu
ZShsYXN0TGluZSk7Ci19Ci0KLWJvb2wgQ29tcGxleExpbmVMYXlvdXQ6OmNoZWNrUGFnaW5hdGlv
bkFuZEZsb2F0c0F0RW5kTGluZShMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlKQotewotICAg
IExheW91dFVuaXQgbGluZURlbHRhID0gbV9mbG93LmxvZ2ljYWxIZWlnaHQoKSAtIGxheW91dFN0
YXRlLmVuZExpbmVMb2dpY2FsVG9wKCk7Ci0KLSAgICBib29sIHBhZ2luYXRlZCA9IGxheW91dENv
bnRleHQoKS5sYXlvdXRTdGF0ZSgpICYmIGxheW91dENvbnRleHQoKS5sYXlvdXRTdGF0ZSgpLT5p
c1BhZ2luYXRlZCgpOwotICAgIGlmIChwYWdpbmF0ZWQgJiYgbGF5b3V0U3RhdGUuZnJhZ21lbnRl
ZEZsb3coKSkgewotICAgICAgICAvLyBDaGVjayBhbGwgbGluZXMgZnJvbSBoZXJlIHRvIHRoZSBl
bmQsIGFuZCBzZWUgaWYgdGhlIGh5cG90aGV0aWNhbCBuZXcgcG9zaXRpb24gZm9yIHRoZSBsaW5l
cyB3aWxsIHJlc3VsdAotICAgICAgICAvLyBpbiBhIGRpZmZlcmVudCBhdmFpbGFibGUgbGluZSB3
aWR0aC4KLSAgICAgICAgZm9yIChSb290SW5saW5lQm94KiBsaW5lQm94ID0gbGF5b3V0U3RhdGUu
ZW5kTGluZSgpOyBsaW5lQm94OyBsaW5lQm94ID0gbGluZUJveC0+bmV4dFJvb3RCb3goKSkgewot
ICAgICAgICAgICAgaWYgKHBhZ2luYXRlZCkgewotICAgICAgICAgICAgICAgIC8vIFRoaXMgaXNu
J3QgdGhlIHJlYWwgbW92ZSB3ZSdyZSBnb2luZyB0byBkbywgc28gZG9uJ3QgdXBkYXRlIHRoZSBs
aW5lIGJveCdzIHBhZ2luYXRpb24KLSAgICAgICAgICAgICAgICAvLyBzdHJ1dCB5ZXQuCi0gICAg
ICAgICAgICAgICAgTGF5b3V0VW5pdCBvbGRQYWdpbmF0aW9uU3RydXQgPSBsaW5lQm94LT5wYWdp
bmF0aW9uU3RydXQoKTsKLSAgICAgICAgICAgICAgICBib29sIG92ZXJmbG93c0ZyYWdtZW50Owot
ICAgICAgICAgICAgICAgIGxpbmVEZWx0YSAtPSBvbGRQYWdpbmF0aW9uU3RydXQ7Ci0gICAgICAg
ICAgICAgICAgbV9mbG93LmFkanVzdExpbmVQb3NpdGlvbkZvclBhZ2luYXRpb24obGluZUJveCwg
bGluZURlbHRhLCBvdmVyZmxvd3NGcmFnbWVudCwgbGF5b3V0U3RhdGUuZnJhZ21lbnRlZEZsb3co
KSk7Ci0gICAgICAgICAgICAgICAgbGluZUJveC0+c2V0UGFnaW5hdGlvblN0cnV0KG9sZFBhZ2lu
YXRpb25TdHJ1dCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobGluZVdpZHRoRm9y
UGFnaW5hdGVkTGluZUNoYW5nZWQobGluZUJveCwgbGluZURlbHRhLCBsYXlvdXRTdGF0ZS5mcmFn
bWVudGVkRmxvdygpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgCi0gICAgaWYgKCFsaW5lRGVsdGEgfHwgIW1fZmxvdy5mbG9hdGluZ09iamVj
dHMoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgLy8gU2VlIGlmIGFueSBmbG9h
dHMgZW5kIGluIHRoZSByYW5nZSBhbG9uZyB3aGljaCB3ZSB3YW50IHRvIHNoaWZ0IHRoZSBsaW5l
cyB2ZXJ0aWNhbGx5LgotICAgIExheW91dFVuaXQgbG9naWNhbFRvcCA9IHN0ZDo6bWluKG1fZmxv
dy5sb2dpY2FsSGVpZ2h0KCksIGxheW91dFN0YXRlLmVuZExpbmVMb2dpY2FsVG9wKCkpOwotCi0g
ICAgUm9vdElubGluZUJveCogbGFzdExpbmUgPSBsYXlvdXRTdGF0ZS5lbmRMaW5lKCk7Ci0gICAg
d2hpbGUgKFJvb3RJbmxpbmVCb3gqIG5leHRMaW5lID0gbGFzdExpbmUtPm5leHRSb290Qm94KCkp
Ci0gICAgICAgIGxhc3RMaW5lID0gbmV4dExpbmU7Ci0KLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxC
b3R0b20gPSBsYXN0TGluZS0+bGluZUJveEJvdHRvbSgpICsgYWJzb2x1dGVWYWx1ZShsaW5lRGVs
dGEpOwotCi0gICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0g
bV9mbG93LmZsb2F0aW5nT2JqZWN0cygpLT5zZXQoKTsKLSAgICBhdXRvIGVuZCA9IGZsb2F0aW5n
T2JqZWN0U2V0LmVuZCgpOwotICAgIGZvciAoYXV0byBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBjb25zdCBhdXRvJiBmbG9hdGluZ09i
amVjdCA9ICppdC0+Z2V0KCk7Ci0gICAgICAgIGlmIChtX2Zsb3cubG9naWNhbEJvdHRvbUZvckZs
b2F0KGZsb2F0aW5nT2JqZWN0KSA+PSBsb2dpY2FsVG9wICYmIG1fZmxvdy5sb2dpY2FsQm90dG9t
Rm9yRmxvYXQoZmxvYXRpbmdPYmplY3QpIDwgbG9naWNhbEJvdHRvbSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDb21wbGV4
TGluZUxheW91dDo6bGluZVdpZHRoRm9yUGFnaW5hdGVkTGluZUNoYW5nZWQoUm9vdElubGluZUJv
eCogcm9vdEJveCwgTGF5b3V0VW5pdCBsaW5lRGVsdGEsIFJlbmRlckZyYWdtZW50ZWRGbG93KiBm
cmFnbWVudGVkRmxvdykgY29uc3QKLXsKLSAgICBpZiAoIWZyYWdtZW50ZWRGbG93KQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBSZW5kZXJGcmFnbWVudENvbnRhaW5lciogY3VycmVudEZy
YWdtZW50ID0gbV9mbG93LmZyYWdtZW50QXRCbG9ja09mZnNldChyb290Qm94LT5saW5lQm94VG9w
KCkgKyBsaW5lRGVsdGEpOwotICAgIC8vIEp1c3QgYmFpbCBpZiB0aGUgZnJhZ21lbnQgZGlkbid0
IGNoYW5nZS4KLSAgICBpZiAocm9vdEJveC0+Y29udGFpbmluZ0ZyYWdtZW50KCkgPT0gY3VycmVu
dEZyYWdtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHJvb3RCb3gtPnBh
Z2luYXRlZExpbmVXaWR0aCgpICE9IG1fZmxvdy5hdmFpbGFibGVMb2dpY2FsV2lkdGhGb3JDb250
ZW50KGN1cnJlbnRGcmFnbWVudCk7Ci19Ci0KLWJvb2wgQ29tcGxleExpbmVMYXlvdXQ6Om1hdGNo
ZWRFbmRMaW5lKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IElubGluZUJpZGlS
ZXNvbHZlciYgcmVzb2x2ZXIsIGNvbnN0IElubGluZUl0ZXJhdG9yJiBlbmRMaW5lU3RhcnQsIGNv
bnN0IEJpZGlTdGF0dXMmIGVuZExpbmVTdGF0dXMpCi17Ci0gICAgaWYgKHJlc29sdmVyLnBvc2l0
aW9uKCkgPT0gZW5kTGluZVN0YXJ0KSB7Ci0gICAgICAgIGlmIChyZXNvbHZlci5zdGF0dXMoKSAh
PSBlbmRMaW5lU3RhdHVzKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1
cm4gY2hlY2tQYWdpbmF0aW9uQW5kRmxvYXRzQXRFbmRMaW5lKGxheW91dFN0YXRlKTsKLSAgICB9
Ci0KLSAgICAvLyBUaGUgZmlyc3QgY2xlYW4gbGluZSBkb2Vzbid0IG1hdGNoLCBidXQgd2UgY2Fu
IGNoZWNrIGEgaGFuZGZ1bCBvZiBmb2xsb3dpbmcgbGluZXMgdG8gdHJ5Ci0gICAgLy8gdG8gbWF0
Y2ggYmFjayB1cC4KLSAgICBzdGF0aWMgY29uc3QgaW50IG51bUxpbmVzID0gODsgLy8gVGhlICMg
b2YgbGluZXMgd2UncmUgd2lsbGluZyB0byBtYXRjaCBhZ2FpbnN0LgotICAgIFJvb3RJbmxpbmVC
b3gqIG9yaWdpbmFsRW5kTGluZSA9IGxheW91dFN0YXRlLmVuZExpbmUoKTsKLSAgICBSb290SW5s
aW5lQm94KiBsaW5lID0gb3JpZ2luYWxFbmRMaW5lOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bnVtTGluZXMgJiYgbGluZTsgaSsrLCBsaW5lID0gbGluZS0+bmV4dFJvb3RCb3goKSkgewotICAg
ICAgICBpZiAobGluZS0+bGluZUJyZWFrT2JqKCkgPT0gcmVzb2x2ZXIucG9zaXRpb24oKS5yZW5k
ZXJlcigpICYmIGxpbmUtPmxpbmVCcmVha1BvcygpID09IHJlc29sdmVyLnBvc2l0aW9uKCkub2Zm
c2V0KCkpIHsKLSAgICAgICAgICAgIC8vIFdlIGhhdmUgYSBtYXRjaC4KLSAgICAgICAgICAgIGlm
IChsaW5lLT5saW5lQnJlYWtCaWRpU3RhdHVzKCkgIT0gcmVzb2x2ZXIuc3RhdHVzKCkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyAuLi5idXQgdGhlIGJpZGkgc3RhdGUgZG9lc24n
dCBtYXRjaC4KLSAgICAgICAgICAgIAotICAgICAgICAgICAgYm9vbCBtYXRjaGVkID0gZmFsc2U7
Ci0gICAgICAgICAgICBSb290SW5saW5lQm94KiByZXN1bHQgPSBsaW5lLT5uZXh0Um9vdEJveCgp
OwotICAgICAgICAgICAgbGF5b3V0U3RhdGUuc2V0RW5kTGluZShyZXN1bHQpOwotICAgICAgICAg
ICAgaWYgKHJlc3VsdCkgewotICAgICAgICAgICAgICAgIGxheW91dFN0YXRlLnNldEVuZExpbmVM
b2dpY2FsVG9wKGxpbmUtPmxpbmVCb3hCb3R0b20oKSk7Ci0gICAgICAgICAgICAgICAgbWF0Y2hl
ZCA9IGNoZWNrUGFnaW5hdGlvbkFuZEZsb2F0c0F0RW5kTGluZShsYXlvdXRTdGF0ZSk7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIE5vdyBkZWxldGUgdGhlIGxpbmVzIHRoYXQgd2Ug
ZmFpbGVkIHRvIHN5bmMuCi0gICAgICAgICAgICBkZWxldGVMaW5lUmFuZ2UobGF5b3V0U3RhdGUs
IG9yaWdpbmFsRW5kTGluZSwgcmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVybiBtYXRjaGVkOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIENvbXBsZXhM
aW5lTGF5b3V0OjphZGRPdmVyZmxvd0Zyb21JbmxpbmVDaGlsZHJlbigpCi17Ci0gICAgTGF5b3V0
VW5pdCBlbmRQYWRkaW5nID0gbV9mbG93Lmhhc092ZXJmbG93Q2xpcCgpID8gbV9mbG93LnBhZGRp
bmdFbmQoKSA6IDBfbHU7Ci0gICAgLy8gRklYTUU6IE5lZWQgdG8gZmluZCBhbm90aGVyIHdheSB0
byBkbyB0aGlzLCBzaW5jZSBzY3JvbGxiYXJzIGNvdWxkIHNob3cgd2hlbiB3ZSBkb24ndCB3YW50
IHRoZW0gdG8uCi0gICAgaWYgKCFlbmRQYWRkaW5nKQotICAgICAgICBlbmRQYWRkaW5nID0gbV9m
bG93LmVuZFBhZGRpbmdXaWR0aEZvckNhcmV0KCk7Ci0gICAgaWYgKG1fZmxvdy5oYXNPdmVyZmxv
d0NsaXAoKSAmJiAhZW5kUGFkZGluZyAmJiBtX2Zsb3cuZWxlbWVudCgpICYmIG1fZmxvdy5lbGVt
ZW50KCktPmlzUm9vdEVkaXRhYmxlRWxlbWVudCgpICYmIHN0eWxlKCkuaXNMZWZ0VG9SaWdodERp
cmVjdGlvbigpKQotICAgICAgICBlbmRQYWRkaW5nID0gMTsKLSAgICBmb3IgKFJvb3RJbmxpbmVC
b3gqIGN1cnIgPSBmaXJzdFJvb3RCb3goKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRSb290Qm94
KCkpIHsKLSAgICAgICAgbV9mbG93LmFkZExheW91dE92ZXJmbG93KGN1cnItPnBhZGRlZExheW91
dE92ZXJmbG93UmVjdChlbmRQYWRkaW5nKSk7Ci0gICAgICAgIFJlbmRlckZyYWdtZW50Q29udGFp
bmVyKiBmcmFnbWVudCA9IG1fZmxvdy5lbmNsb3NpbmdGcmFnbWVudGVkRmxvdygpID8gY3Vyci0+
Y29udGFpbmluZ0ZyYWdtZW50KCkgOiBudWxscHRyOwotICAgICAgICBpZiAoZnJhZ21lbnQpCi0g
ICAgICAgICAgICBmcmFnbWVudC0+YWRkTGF5b3V0T3ZlcmZsb3dGb3JCb3goJm1fZmxvdywgY3Vy
ci0+cGFkZGVkTGF5b3V0T3ZlcmZsb3dSZWN0KGVuZFBhZGRpbmcpKTsKLSAgICAgICAgaWYgKCFt
X2Zsb3cuaGFzT3ZlcmZsb3dDbGlwKCkpIHsKLSAgICAgICAgICAgIExheW91dFJlY3QgY2hpbGRW
aXN1YWxPdmVyZmxvd1JlY3QgPSBjdXJyLT52aXN1YWxPdmVyZmxvd1JlY3QoY3Vyci0+bGluZVRv
cCgpLCBjdXJyLT5saW5lQm90dG9tKCkpOwotICAgICAgICAgICAgbV9mbG93LmFkZFZpc3VhbE92
ZXJmbG93KGNoaWxkVmlzdWFsT3ZlcmZsb3dSZWN0KTsKLSAgICAgICAgICAgIGlmIChmcmFnbWVu
dCkKLSAgICAgICAgICAgICAgICBmcmFnbWVudC0+YWRkVmlzdWFsT3ZlcmZsb3dGb3JCb3goJm1f
ZmxvdywgY2hpbGRWaXN1YWxPdmVyZmxvd1JlY3QpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1z
aXplX3QgQ29tcGxleExpbmVMYXlvdXQ6OmxpbmVDb3VudCgpIGNvbnN0Ci17Ci0gICAgc2l6ZV90
IGNvdW50ID0gMDsKLSAgICBmb3IgKGF1dG8qIGJveCA9IGZpcnN0Um9vdEJveCgpOyBib3g7IGJv
eCA9IGJveC0+bmV4dFJvb3RCb3goKSkKLSAgICAgICAgKytjb3VudDsKLQotICAgIHJldHVybiBj
b3VudDsKLX0KLQotc2l6ZV90IENvbXBsZXhMaW5lTGF5b3V0OjpsaW5lQ291bnRVbnRpbChjb25z
dCBSb290SW5saW5lQm94KiBzdG9wUm9vdElubGluZUJveCkgY29uc3QKLXsKLSAgICBzaXplX3Qg
Y291bnQgPSAwOwotICAgIGZvciAoYXV0byogYm94ID0gZmlyc3RSb290Qm94KCk7IGJveDsgYm94
ID0gYm94LT5uZXh0Um9vdEJveCgpKSB7Ci0gICAgICAgICsrY291bnQ7Ci0gICAgICAgIGlmIChi
b3ggPT0gc3RvcFJvb3RJbmxpbmVCb3gpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gY291bnQ7Ci19Ci0KLXZvaWQgQ29tcGxleExpbmVMYXlvdXQ6OmRlbGV0ZUVsbGlw
c2lzTGluZUJveGVzKCkKLXsKLSAgICBUZXh0QWxpZ25Nb2RlIHRleHRBbGlnbiA9IHN0eWxlKCku
dGV4dEFsaWduKCk7Ci0gICAgYm9vbCBsdHIgPSBzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rp
b24oKTsKLSAgICBJbmRlbnRUZXh0T3JOb3Qgc2hvdWxkSW5kZW50VGV4dCA9IEluZGVudFRleHQ7
Ci0gICAgZm9yIChSb290SW5saW5lQm94KiBjdXJyID0gZmlyc3RSb290Qm94KCk7IGN1cnI7IGN1
cnIgPSBjdXJyLT5uZXh0Um9vdEJveCgpKSB7Ci0gICAgICAgIGlmIChjdXJyLT5oYXNFbGxpcHNp
c0JveCgpKSB7Ci0gICAgICAgICAgICBjdXJyLT5jbGVhclRydW5jYXRpb24oKTsKLQotICAgICAg
ICAgICAgLy8gU2hpZnQgdGhlIGxpbmUgYmFjayB3aGVyZSBpdCBiZWxvbmdzIGlmIHdlIGNhbm5v
dCBhY2NvbW9kYXRlIGFuIGVsbGlwc2lzLgotICAgICAgICAgICAgZmxvYXQgbG9naWNhbExlZnQg
PSBtX2Zsb3cubG9naWNhbExlZnRPZmZzZXRGb3JMaW5lKGN1cnItPmxpbmVUb3AoKSwgc2hvdWxk
SW5kZW50VGV4dCk7Ci0gICAgICAgICAgICBmbG9hdCBhdmFpbGFibGVMb2dpY2FsV2lkdGggPSBt
X2Zsb3cubG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShjdXJyLT5saW5lVG9wKCksIERvTm90SW5k
ZW50VGV4dCkgLSBsb2dpY2FsTGVmdDsKLSAgICAgICAgICAgIGZsb2F0IHRvdGFsTG9naWNhbFdp
ZHRoID0gY3Vyci0+bG9naWNhbFdpZHRoKCk7Ci0gICAgICAgICAgICB1cGRhdGVMb2dpY2FsV2lk
dGhGb3JBbGlnbm1lbnQobV9mbG93LCB0ZXh0QWxpZ24sIGN1cnIsIDAsIGxvZ2ljYWxMZWZ0LCB0
b3RhbExvZ2ljYWxXaWR0aCwgYXZhaWxhYmxlTG9naWNhbFdpZHRoLCAwKTsKLQotICAgICAgICAg
ICAgaWYgKGx0cikKLSAgICAgICAgICAgICAgICBjdXJyLT5hZGp1c3RMb2dpY2FsUG9zaXRpb24o
KGxvZ2ljYWxMZWZ0IC0gY3Vyci0+bG9naWNhbExlZnQoKSksIDApOwotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIGN1cnItPmFkanVzdExvZ2ljYWxQb3NpdGlvbigtKGN1cnItPmxv
Z2ljYWxMZWZ0KCkgLSBsb2dpY2FsTGVmdCksIDApOwotICAgICAgICB9Ci0gICAgICAgIHNob3Vs
ZEluZGVudFRleHQgPSBEb05vdEluZGVudFRleHQ7Ci0gICAgfQotfQotCi12b2lkIENvbXBsZXhM
aW5lTGF5b3V0OjpjaGVja0xpbmVzRm9yVGV4dE92ZXJmbG93KCkKLXsKLSAgICAvLyBEZXRlcm1p
bmUgdGhlIHdpZHRoIG9mIHRoZSBlbGxpcHNpcyB1c2luZyB0aGUgY3VycmVudCBmb250LgotICAg
IC8vIEZJWE1FOiBDU1MzIHNheXMgdGhpcyBpcyBjb25maWd1cmFibGUsIGFsc28gbmVlZCB0byB1
c2UgMHgwMDJFIChGVUxMIFNUT1ApIGlmIGhvcml6b250YWwgZWxsaXBzaXMgaXMgIm5vdCByZW5k
ZXJhYmxlIgotICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0gc3R5bGUoKS5mb250Q2FzY2Fk
ZSgpOwotICAgIHN0YXRpYyBNYWluVGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmlu
Zz4gZWxsaXBzaXNTdHIoJmhvcml6b250YWxFbGxpcHNpcywgMSk7Ci0gICAgY29uc3QgRm9udENh
c2NhZGUmIGZpcnN0TGluZUZvbnQgPSBtX2Zsb3cuZmlyc3RMaW5lU3R5bGUoKS5mb250Q2FzY2Fk
ZSgpOwotICAgIGZsb2F0IGZpcnN0TGluZUVsbGlwc2lzV2lkdGggPSBmaXJzdExpbmVGb250Lndp
ZHRoKG1fZmxvdy5jb25zdHJ1Y3RUZXh0UnVuKCZob3Jpem9udGFsRWxsaXBzaXMsIDEsIG1fZmxv
dy5maXJzdExpbmVTdHlsZSgpKSk7Ci0gICAgZmxvYXQgZWxsaXBzaXNXaWR0aCA9IChmb250ID09
IGZpcnN0TGluZUZvbnQpID8gZmlyc3RMaW5lRWxsaXBzaXNXaWR0aCA6IGZvbnQud2lkdGgobV9m
bG93LmNvbnN0cnVjdFRleHRSdW4oJmhvcml6b250YWxFbGxpcHNpcywgMSwgc3R5bGUoKSkpOwot
Ci0gICAgLy8gRm9yIExUUiB0ZXh0IHRydW5jYXRpb24sIHdlIHdhbnQgdG8gZ2V0IHRoZSByaWdo
dCBlZGdlIG9mIG91ciBwYWRkaW5nIGJveCwgYW5kIHRoZW4gd2Ugd2FudCB0byBzZWUKLSAgICAv
LyBpZiB0aGUgcmlnaHQgZWRnZSBvZiBhIGxpbmUgYm94IGV4Y2VlZHMgdGhhdC4gRm9yIFJUTCwg
d2UgdXNlIHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlIHBhZGRpbmcgYm94IGFuZAotICAgIC8vIGNoZWNr
IHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlIGxpbmUgYm94IHRvIHNlZSBpZiBpdCBpcyBsZXNzCi0gICAg
Ly8gSW5jbHVkZSB0aGUgc2Nyb2xsYmFyIGZvciBvdmVyZmxvdyBibG9ja3MsIHdoaWNoIG1lYW5z
IHdlIHdhbnQgdG8gdXNlICJjb250ZW50V2lkdGgoKSIKLSAgICBib29sIGx0ciA9IHN0eWxlKCku
aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpOwotICAgIFRleHRBbGlnbk1vZGUgdGV4dEFsaWduID0g
c3R5bGUoKS50ZXh0QWxpZ24oKTsKLSAgICBib29sIGZpcnN0TGluZSA9IHRydWU7Ci0gICAgZm9y
IChSb290SW5saW5lQm94KiBjdXJyID0gZmlyc3RSb290Qm94KCk7IGN1cnI7IGN1cnIgPSBjdXJy
LT5uZXh0Um9vdEJveCgpKSB7Ci0gICAgICAgIEluZGVudFRleHRPck5vdCBzaG91bGRJbmRlbnRU
ZXh0ID0gZmlyc3RMaW5lID8gSW5kZW50VGV4dCA6IERvTm90SW5kZW50VGV4dDsKLSAgICAgICAg
TGF5b3V0VW5pdCBibG9ja1JpZ2h0RWRnZSA9IG1fZmxvdy5sb2dpY2FsUmlnaHRPZmZzZXRGb3JM
aW5lKGN1cnItPmxpbmVUb3AoKSwgc2hvdWxkSW5kZW50VGV4dCk7Ci0gICAgICAgIExheW91dFVu
aXQgYmxvY2tMZWZ0RWRnZSA9IG1fZmxvdy5sb2dpY2FsTGVmdE9mZnNldEZvckxpbmUoY3Vyci0+
bGluZVRvcCgpLCBzaG91bGRJbmRlbnRUZXh0KTsKLSAgICAgICAgTGF5b3V0VW5pdCBsaW5lQm94
RWRnZSB7IGx0ciA/IGN1cnItPngoKSArIGN1cnItPmxvZ2ljYWxXaWR0aCgpIDogY3Vyci0+eCgp
IH07Ci0gICAgICAgIGlmICgobHRyICYmIGxpbmVCb3hFZGdlID4gYmxvY2tSaWdodEVkZ2UpIHx8
ICghbHRyICYmIGxpbmVCb3hFZGdlIDwgYmxvY2tMZWZ0RWRnZSkpIHsKLSAgICAgICAgICAgIC8v
IFRoaXMgbGluZSBzcGlsbHMgb3V0IG9mIG91ciBib3ggaW4gdGhlIGFwcHJvcHJpYXRlIGRpcmVj
dGlvbi4gTm93IHdlIG5lZWQgdG8gc2VlIGlmIHRoZSBsaW5lCi0gICAgICAgICAgICAvLyBjYW4g
YmUgdHJ1bmNhdGVkLiBJbiBvcmRlciBmb3IgdHJ1bmNhdGlvbiB0byBiZSBwb3NzaWJsZSwgdGhl
IGxpbmUgbXVzdCBoYXZlIHN1ZmZpY2llbnQgc3BhY2UgdG8KLSAgICAgICAgICAgIC8vIGFjY29t
bW9kYXRlIG91ciB0cnVuY2F0aW9uIHN0cmluZywgYW5kIG5vIHJlcGxhY2VkIGVsZW1lbnRzIChp
bWFnZXMsIHRhYmxlcykgY2FuIG92ZXJsYXAgdGhlIGVsbGlwc2lzCi0gICAgICAgICAgICAvLyBz
cGFjZS4KLSAgICAgICAgICAgIExheW91dFVuaXQgd2lkdGggeyBmaXJzdExpbmUgPyBmaXJzdExp
bmVFbGxpcHNpc1dpZHRoIDogZWxsaXBzaXNXaWR0aCB9OwotICAgICAgICAgICAgTGF5b3V0VW5p
dCBibG9ja0VkZ2UgeyBsdHIgPyBibG9ja1JpZ2h0RWRnZSA6IGJsb2NrTGVmdEVkZ2UgfTsKLSAg
ICAgICAgICAgIGlmIChjdXJyLT5saW5lQ2FuQWNjb21tb2RhdGVFbGxpcHNpcyhsdHIsIGJsb2Nr
RWRnZSwgbGluZUJveEVkZ2UsIHdpZHRoKSkgewotICAgICAgICAgICAgICAgIGZsb2F0IHRvdGFs
TG9naWNhbFdpZHRoID0gY3Vyci0+cGxhY2VFbGxpcHNpcyhlbGxpcHNpc1N0ciwgbHRyLCBibG9j
a0xlZnRFZGdlLCBibG9ja1JpZ2h0RWRnZSwgd2lkdGgpOwotCi0gICAgICAgICAgICAgICAgZmxv
YXQgbG9naWNhbExlZnQgPSAwOyAvLyBXZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIHRoZSBkZWx0
YSBmcm9tIHRoZSBiYXNlIHBvc2l0aW9uLgotICAgICAgICAgICAgICAgIGZsb2F0IHRydW5jYXRl
ZFdpZHRoID0gbV9mbG93LmF2YWlsYWJsZUxvZ2ljYWxXaWR0aEZvckxpbmUoY3Vyci0+bGluZVRv
cCgpLCBzaG91bGRJbmRlbnRUZXh0KTsKLSAgICAgICAgICAgICAgICB1cGRhdGVMb2dpY2FsV2lk
dGhGb3JBbGlnbm1lbnQobV9mbG93LCB0ZXh0QWxpZ24sIGN1cnIsIG51bGxwdHIsIGxvZ2ljYWxM
ZWZ0LCB0b3RhbExvZ2ljYWxXaWR0aCwgdHJ1bmNhdGVkV2lkdGgsIDApOwotICAgICAgICAgICAg
ICAgIGlmIChsdHIpCi0gICAgICAgICAgICAgICAgICAgIGN1cnItPmFkanVzdExvZ2ljYWxQb3Np
dGlvbihsb2dpY2FsTGVmdCwgMCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgICAgICBjdXJyLT5hZGp1c3RMb2dpY2FsUG9zaXRpb24oLSh0cnVuY2F0ZWRXaWR0aCAtIChs
b2dpY2FsTGVmdCArIHRvdGFsTG9naWNhbFdpZHRoKSksIDApOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIGZpcnN0TGluZSA9IGZhbHNlOwotICAgIH0KLX0KLQotYm9vbCBDb21w
bGV4TGluZUxheW91dDo6cG9zaXRpb25OZXdGbG9hdE9uTGluZShjb25zdCBGbG9hdGluZ09iamVj
dCYgbmV3RmxvYXQsIEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lLCBM
aW5lSW5mbyYgbGluZUluZm8sIExpbmVXaWR0aCYgd2lkdGgpCi17Ci0gICAgaWYgKCFtX2Zsb3cu
cG9zaXRpb25OZXdGbG9hdHMoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgd2lkdGgu
c2hyaW5rQXZhaWxhYmxlV2lkdGhGb3JOZXdGbG9hdElmTmVlZGVkKG5ld0Zsb2F0KTsKLQotICAg
IC8vIFdlIG9ubHkgY29ubmVjdCBmbG9hdHMgdG8gbGluZXMgZm9yIHBhZ2luYXRpb24gcHVycG9z
ZXMgaWYgdGhlIGZsb2F0cyBvY2N1ciBhdCB0aGUgc3RhcnQgb2YKLSAgICAvLyB0aGUgbGluZSBh
bmQgdGhlIHByZXZpb3VzIGxpbmUgaGFkIGEgaGFyZCBicmVhayAoc28gdGhpcyBsaW5lIGlzIGVp
dGhlciB0aGUgZmlyc3QgaW4gdGhlIGJsb2NrCi0gICAgLy8gb3IgZm9sbG93cyBhIDxicj4pLgot
ICAgIGlmICghbmV3RmxvYXQucGFnaW5hdGlvblN0cnV0KCkgfHwgIWxpbmVJbmZvLnByZXZpb3Vz
TGluZUJyb2tlQ2xlYW5seSgpIHx8ICFsaW5lSW5mby5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
biB0cnVlOwotCi0gICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0
ID0gbV9mbG93LmZsb2F0aW5nT2JqZWN0cygpLT5zZXQoKTsKLSAgICBBU1NFUlQoZmxvYXRpbmdP
YmplY3RTZXQubGFzdCgpLmdldCgpID09ICZuZXdGbG9hdCk7Ci0KLSAgICBMYXlvdXRVbml0IGZs
b2F0TG9naWNhbFRvcCA9IG1fZmxvdy5sb2dpY2FsVG9wRm9yRmxvYXQobmV3RmxvYXQpOwotICAg
IExheW91dFVuaXQgcGFnaW5hdGlvblN0cnV0ID0gbmV3RmxvYXQucGFnaW5hdGlvblN0cnV0KCk7
Ci0KLSAgICBpZiAoZmxvYXRMb2dpY2FsVG9wIC0gcGFnaW5hdGlvblN0cnV0ICE9IG1fZmxvdy5s
b2dpY2FsSGVpZ2h0KCkgKyBsaW5lSW5mby5mbG9hdFBhZ2luYXRpb25TdHJ1dCgpKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIGF1dG8gaXQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsK
LSAgICAtLWl0OyAvLyBMYXN0IGZsb2F0IGlzIG5ld0Zsb2F0LCBza2lwIHRoYXQgb25lLgotICAg
IGF1dG8gYmVnaW4gPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOwotICAgIHdoaWxlIChpdCAh
PSBiZWdpbikgewotICAgICAgICAtLWl0OwotICAgICAgICBhdXRvJiBmbG9hdGluZ09iamVjdCA9
ICppdC0+Z2V0KCk7Ci0gICAgICAgIGlmICgmZmxvYXRpbmdPYmplY3QgPT0gbGFzdEZsb2F0RnJv
bVByZXZpb3VzTGluZSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAobV9mbG93Lmxv
Z2ljYWxUb3BGb3JGbG9hdChmbG9hdGluZ09iamVjdCkgPT0gbV9mbG93LmxvZ2ljYWxIZWlnaHQo
KSArIGxpbmVJbmZvLmZsb2F0UGFnaW5hdGlvblN0cnV0KCkpIHsKLSAgICAgICAgICAgIGZsb2F0
aW5nT2JqZWN0LnNldFBhZ2luYXRpb25TdHJ1dChwYWdpbmF0aW9uU3RydXQgKyBmbG9hdGluZ09i
amVjdC5wYWdpbmF0aW9uU3RydXQoKSk7Ci0gICAgICAgICAgICBSZW5kZXJCb3gmIGZsb2F0Qm94
ID0gZmxvYXRpbmdPYmplY3QucmVuZGVyZXIoKTsKLSAgICAgICAgICAgIG1fZmxvdy5zZXRMb2dp
Y2FsVG9wRm9yQ2hpbGQoZmxvYXRCb3gsIG1fZmxvdy5sb2dpY2FsVG9wRm9yQ2hpbGQoZmxvYXRC
b3gpICsgbV9mbG93Lm1hcmdpbkJlZm9yZUZvckNoaWxkKGZsb2F0Qm94KSArIHBhZ2luYXRpb25T
dHJ1dCk7Ci0KLSAgICAgICAgICAgIGlmIChtX2Zsb3cudXBkYXRlRnJhZ21lbnRSYW5nZUZvckJv
eENoaWxkKGZsb2F0Qm94KSkKLSAgICAgICAgICAgICAgICBmbG9hdEJveC5zZXROZWVkc0xheW91
dChNYXJrT25seVRoaXMpOwotICAgICAgICAgICAgZWxzZSBpZiAoaXM8UmVuZGVyQmxvY2s+KGZs
b2F0Qm94KSkKLSAgICAgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJCbG9jaz4oZmxvYXRCb3gp
LnNldENoaWxkTmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKLSAgICAgICAgICAgIGZsb2F0Qm94
LmxheW91dElmTmVlZGVkKCk7Ci0KLSAgICAgICAgICAgIC8vIFNhdmUgdGhlIG9sZCBsb2dpY2Fs
IHRvcCBiZWZvcmUgY2FsbGluZyByZW1vdmVQbGFjZWRPYmplY3Qgd2hpY2ggd2lsbCBzZXQKLSAg
ICAgICAgICAgIC8vIGlzUGxhY2VkIHRvIGZhbHNlLiBPdGhlcndpc2UgaXQgd2lsbCB0cmlnZ2Vy
IGFuIGFzc2VydCBpbiBsb2dpY2FsVG9wRm9yRmxvYXQuCi0gICAgICAgICAgICBMYXlvdXRVbml0
IG9sZExvZ2ljYWxUb3AgPSBtX2Zsb3cubG9naWNhbFRvcEZvckZsb2F0KGZsb2F0aW5nT2JqZWN0
KTsKLSAgICAgICAgICAgIG1fZmxvdy5mbG9hdGluZ09iamVjdHMoKS0+cmVtb3ZlUGxhY2VkT2Jq
ZWN0KCZmbG9hdGluZ09iamVjdCk7Ci0gICAgICAgICAgICBtX2Zsb3cuc2V0TG9naWNhbFRvcEZv
ckZsb2F0KGZsb2F0aW5nT2JqZWN0LCBvbGRMb2dpY2FsVG9wICsgcGFnaW5hdGlvblN0cnV0KTsK
LSAgICAgICAgICAgIG1fZmxvdy5mbG9hdGluZ09iamVjdHMoKS0+YWRkUGxhY2VkT2JqZWN0KCZm
bG9hdGluZ09iamVjdCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBKdXN0IHVwZGF0ZSB0
aGUgbGluZSBpbmZvJ3MgcGFnaW5hdGlvbiBzdHJ1dCB3aXRob3V0IGFsdGVyaW5nIG91ciBsb2dp
Y2FsIGhlaWdodCB5ZXQuIElmIHRoZSBsaW5lIGVuZHMgdXAgY29udGFpbmluZwotICAgIC8vIG5v
IGNvbnRlbnQsIHRoZW4gd2UgZG9uJ3Qgd2FudCB0byBpbXByb3Blcmx5IGdyb3cgdGhlIGhlaWdo
dCBvZiB0aGUgYmxvY2suCi0gICAgbGluZUluZm8uc2V0RmxvYXRQYWdpbmF0aW9uU3RydXQobGlu
ZUluZm8uZmxvYXRQYWdpbmF0aW9uU3RydXQoKSArIHBhZ2luYXRpb25TdHJ1dCk7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLXZvaWQgQ29tcGxleExpbmVMYXlvdXQ6OnVwZGF0ZUZyYWdtZW50Rm9y
TGluZShSb290SW5saW5lQm94KiBsaW5lQm94KSBjb25zdAotewotICAgIEFTU0VSVChsaW5lQm94
KTsKLQotICAgIGlmICghbV9mbG93Lmhhc0ZyYWdtZW50UmFuZ2VJbkZyYWdtZW50ZWRGbG93KCkp
Ci0gICAgICAgIGxpbmVCb3gtPmNsZWFyQ29udGFpbmluZ0ZyYWdtZW50KCk7Ci0gICAgZWxzZSB7
Ci0gICAgICAgIGlmIChhdXRvIGNvbnRhaW5pbmdGcmFnbWVudCA9IG1fZmxvdy5mcmFnbWVudEF0
QmxvY2tPZmZzZXQobGluZUJveC0+bGluZUJveFRvcCgpKSkKLSAgICAgICAgICAgIGxpbmVCb3gt
PnNldENvbnRhaW5pbmdGcmFnbWVudCgqY29udGFpbmluZ0ZyYWdtZW50KTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgbGluZUJveC0+Y2xlYXJDb250YWluaW5nRnJhZ21lbnQoKTsKLSAgICB9
Ci0KLSAgICBSb290SW5saW5lQm94KiBwcmV2TGluZUJveCA9IGxpbmVCb3gtPnByZXZSb290Qm94
KCk7Ci0gICAgaWYgKCFwcmV2TGluZUJveCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVGhp
cyBjaGVjayBpcyBtb3JlIGFjY3VyYXRlIHRoYW4gdGhlIG9uZSBpbiB8YWRqdXN0TGluZVBvc2l0
aW9uRm9yUGFnaW5hdGlvbnwgYmVjYXVzZSBpdCB0YWtlcyBpbnRvCi0gICAgLy8gYWNjb3VudCBq
dXN0IHRoZSBjb250YWluZXIgY2hhbmdlcyBiZXR3ZWVuIGxpbmVzLiBUaGUgYmVmb3JlIG1lbnRp
b25lZCBmdW5jdGlvbiBkb2Vzbid0IHNldCB0aGUgZmxhZwotICAgIC8vIGNvcnJlY3RseSBpZiB0
aGUgbGluZSBpcyBwb3NpdGlvbmVkIGF0IHRoZSB0b3Agb2YgdGhlIGxhc3QgZnJhZ21lbnQgY29u
dGFpbmVyLgotICAgIGlmIChsaW5lQm94LT5jb250YWluaW5nRnJhZ21lbnQoKSAhPSBwcmV2TGlu
ZUJveC0+Y29udGFpbmluZ0ZyYWdtZW50KCkpCi0gICAgICAgIGxpbmVCb3gtPnNldElzRmlyc3RB
ZnRlclBhZ2VCcmVhayh0cnVlKTsKLX0KLQotY29uc3QgUmVuZGVyU3R5bGUmIENvbXBsZXhMaW5l
TGF5b3V0OjpzdHlsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZmxvdy5zdHlsZSgpOwotfQot
Ci1jb25zdCBGcmFtZVZpZXdMYXlvdXRDb250ZXh0JiBDb21wbGV4TGluZUxheW91dDo6bGF5b3V0
Q29udGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZmxvdy52aWV3KCkuZnJhbWVWaWV3KCku
bGF5b3V0Q29udGV4dCgpOwotfQotCi0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9Db21wbGV4TGluZUxheW91dC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Nv
bXBsZXhMaW5lTGF5b3V0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjY2VkMjdm
YzhhOS4uMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Db21wbGV4
TGluZUxheW91dC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIklubGluZUZsb3dCb3guaCIKLSNpbmNsdWRlICJM
aW5lV2lkdGguaCIKLSNpbmNsdWRlICJSZW5kZXJMaW5lQm94TGlzdC5oIgotI2luY2x1ZGUgIlJl
bmRlclN0eWxlQ29uc3RhbnRzLmgiCi0jaW5jbHVkZSAiVHJhaWxpbmdPYmplY3RzLmgiCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQmlkaUNvbnRleHQ7Ci1jbGFzcyBGbG9hdGluZ09i
amVjdDsKLWNsYXNzIEZsb2F0V2l0aFJlY3Q7Ci1jbGFzcyBGcmFtZVZpZXdMYXlvdXRDb250ZXh0
OwotY2xhc3MgSW5saW5lQm94OwotY2xhc3MgSW5saW5lSXRlcmF0b3I7Ci1jbGFzcyBMaW5lSW5m
bzsKLWNsYXNzIExpbmVMYXlvdXRTdGF0ZTsKLWNsYXNzIFJlbmRlckJsb2NrRmxvdzsKLWNsYXNz
IFJlbmRlck9iamVjdDsKLWNsYXNzIFJlbmRlclJ1YnlSdW47Ci1jbGFzcyBSb290SW5saW5lQm94
OwotY2xhc3MgVmVydGljYWxQb3NpdGlvbkNhY2hlOwotc3RydWN0IEJpZGlTdGF0dXM7Ci1zdHJ1
Y3QgV29yZE1lYXN1cmVtZW50OwotCi10ZW1wbGF0ZSA8Y2xhc3MgUnVuPiBjbGFzcyBCaWRpUnVu
TGlzdDsKLXR5cGVkZWYgVmVjdG9yPFdvcmRNZWFzdXJlbWVudCwgNjQ+IFdvcmRNZWFzdXJlbWVu
dHM7Ci0KLWNsYXNzIENvbXBsZXhMaW5lTGF5b3V0IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKLXB1YmxpYzoKLSAgICBDb21wbGV4TGluZUxheW91dChSZW5kZXJCbG9ja0Zsb3cmKTsK
LSAgICB+Q29tcGxleExpbmVMYXlvdXQoKTsKLQotICAgIFJlbmRlckxpbmVCb3hMaXN0JiBsaW5l
Qm94ZXMoKSB7IHJldHVybiBtX2xpbmVCb3hlczsgfQotICAgIGNvbnN0IFJlbmRlckxpbmVCb3hM
aXN0JiBsaW5lQm94ZXMoKSBjb25zdCB7IHJldHVybiBtX2xpbmVCb3hlczsgfQotCi0gICAgUm9v
dElubGluZUJveCogZmlyc3RSb290Qm94KCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8Um9vdElu
bGluZUJveD4obV9saW5lQm94ZXMuZmlyc3RMaW5lQm94KCkpOyB9Ci0gICAgUm9vdElubGluZUJv
eCogbGFzdFJvb3RCb3goKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxSb290SW5saW5lQm94Piht
X2xpbmVCb3hlcy5sYXN0TGluZUJveCgpKTsgfQotCi0gICAgdm9pZCBsYXlvdXRMaW5lQm94ZXMo
Ym9vbCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0JiByZXBhaW50TG9naWNhbFRvcCwgTGF5
b3V0VW5pdCYgcmVwYWludExvZ2ljYWxCb3R0b20pOwotCi0gICAgUm9vdElubGluZUJveCogY29u
c3RydWN0TGluZShCaWRpUnVuTGlzdDxCaWRpUnVuPiYsIGNvbnN0IExpbmVJbmZvJik7Ci0gICAg
Ym9vbCBwb3NpdGlvbk5ld0Zsb2F0T25MaW5lKGNvbnN0IEZsb2F0aW5nT2JqZWN0JiBuZXdGbG9h
dCwgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUsIExpbmVJbmZvJiwg
TGluZVdpZHRoJik7Ci0gICAgdm9pZCBhZGRPdmVyZmxvd0Zyb21JbmxpbmVDaGlsZHJlbigpOwot
Ci0gICAgc2l6ZV90IGxpbmVDb3VudCgpIGNvbnN0OwotICAgIHNpemVfdCBsaW5lQ291bnRVbnRp
bChjb25zdCBSb290SW5saW5lQm94KikgY29uc3Q7Ci0KLSAgICBzdGF0aWMgdm9pZCBhcHBlbmRS
dW5zRm9yT2JqZWN0KEJpZGlSdW5MaXN0PEJpZGlSdW4+KiwgaW50IHN0YXJ0LCBpbnQgZW5kLCBS
ZW5kZXJPYmplY3QmLCBJbmxpbmVCaWRpUmVzb2x2ZXImKTsKLSAgICBzdGF0aWMgdm9pZCB1cGRh
dGVMb2dpY2FsV2lkdGhGb3JBbGlnbm1lbnQoUmVuZGVyQmxvY2tGbG93JiwgY29uc3QgVGV4dEFs
aWduTW9kZSYsIGNvbnN0IFJvb3RJbmxpbmVCb3gqLCBCaWRpUnVuKiB0cmFpbGluZ1NwYWNlUnVu
LCBmbG9hdCYgbG9naWNhbExlZnQsIGZsb2F0JiB0b3RhbExvZ2ljYWxXaWR0aCwgZmxvYXQmIGF2
YWlsYWJsZUxvZ2ljYWxXaWR0aCwgaW50IGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQpOwotCi1w
cml2YXRlOgotICAgIHN0ZDo6dW5pcXVlX3B0cjxSb290SW5saW5lQm94PiBjcmVhdGVSb290SW5s
aW5lQm94KCk7Ci0gICAgUm9vdElubGluZUJveCogY3JlYXRlQW5kQXBwZW5kUm9vdElubGluZUJv
eCgpOwotICAgIElubGluZUJveCogY3JlYXRlSW5saW5lQm94Rm9yUmVuZGVyZXIoUmVuZGVyT2Jq
ZWN0KiwgYm9vbCBpc09ubHlSdW4gPSBmYWxzZSk7Ci0gICAgSW5saW5lRmxvd0JveCogY3JlYXRl
TGluZUJveGVzKFJlbmRlck9iamVjdCosIGNvbnN0IExpbmVJbmZvJiwgSW5saW5lQm94Kik7Ci0g
ICAgVGV4dEFsaWduTW9kZSB0ZXh0QWxpZ25tZW50Rm9yTGluZShib29sIGVuZHNXaXRoU29mdEJy
ZWFrKSBjb25zdDsKLSAgICB2b2lkIHNldE1hcmdpbnNGb3JSdWJ5UnVuKEJpZGlSdW4qLCBSZW5k
ZXJSdWJ5UnVuJiwgUmVuZGVyT2JqZWN0KiBwcmV2aW91c09iamVjdCwgY29uc3QgTGluZUluZm8m
KTsKLSAgICB2b2lkIHVwZGF0ZVJ1YnlGb3JKdXN0aWZpZWRUZXh0KFJlbmRlclJ1YnlSdW4mLCBC
aWRpUnVuJiwgY29uc3QgVmVjdG9yPHVuc2lnbmVkLCAxNj4mIGV4cGFuc2lvbk9wcG9ydHVuaXRp
ZXMsIHVuc2lnbmVkJiBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50LCBmbG9hdCYgdG90YWxMb2dp
Y2FsV2lkdGgsIGZsb2F0IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCwgc2l6ZV90Jik7Ci0gICAgdm9p
ZCBjb21wdXRlRXhwYW5zaW9uRm9ySnVzdGlmaWVkVGV4dChCaWRpUnVuKiBmaXJzdFJ1biwgQmlk
aVJ1biogdHJhaWxpbmdTcGFjZVJ1biwgY29uc3QgVmVjdG9yPHVuc2lnbmVkLCAxNj4mIGV4cGFu
c2lvbk9wcG9ydHVuaXRpZXMsIHVuc2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQsIGZs
b2F0IHRvdGFsTG9naWNhbFdpZHRoLCBmbG9hdCBhdmFpbGFibGVMb2dpY2FsV2lkdGgpOwotICAg
IHZvaWQgY29tcHV0ZUlubGluZURpcmVjdGlvblBvc2l0aW9uc0ZvckxpbmUoUm9vdElubGluZUJv
eCosIGNvbnN0IExpbmVJbmZvJiwgQmlkaVJ1biogZmlyc3RSdW4sIEJpZGlSdW4qIHRyYWlsaW5n
U3BhY2VSdW4sIGJvb2wgcmVhY2hlZEVuZCwgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNN
YXAmLCBWZXJ0aWNhbFBvc2l0aW9uQ2FjaGUmLCBXb3JkTWVhc3VyZW1lbnRzJik7Ci0gICAgQmlk
aVJ1biogY29tcHV0ZUlubGluZURpcmVjdGlvblBvc2l0aW9uc0ZvclNlZ21lbnQoUm9vdElubGlu
ZUJveCosIGNvbnN0IExpbmVJbmZvJiwgVGV4dEFsaWduTW9kZSwgZmxvYXQmIGxvZ2ljYWxMZWZ0
LCBmbG9hdCYgYXZhaWxhYmxlTG9naWNhbFdpZHRoLCBCaWRpUnVuKiBmaXJzdFJ1biwgQmlkaVJ1
biogdHJhaWxpbmdTcGFjZVJ1biwgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXAmLCBW
ZXJ0aWNhbFBvc2l0aW9uQ2FjaGUmLCBXb3JkTWVhc3VyZW1lbnRzJik7Ci0gICAgdm9pZCByZW1v
dmVJbmxpbmVCb3goQmlkaVJ1biYsIGNvbnN0IFJvb3RJbmxpbmVCb3gmKSBjb25zdDsKLSAgICB2
b2lkIGNvbXB1dGVCbG9ja0RpcmVjdGlvblBvc2l0aW9uc0ZvckxpbmUoUm9vdElubGluZUJveCos
IEJpZGlSdW4qIGZpcnN0UnVuLCBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcCYgdGV4
dEJveERhdGFNYXAsIFZlcnRpY2FsUG9zaXRpb25DYWNoZSYpOwotICAgIGlubGluZSBCaWRpUnVu
KiBoYW5kbGVUcmFpbGluZ1NwYWNlcyhCaWRpUnVuTGlzdDxCaWRpUnVuPiYgYmlkaVJ1bnMsIEJp
ZGlDb250ZXh0KiBjdXJyZW50Q29udGV4dCk7Ci0gICAgdm9pZCBhcHBlbmRGbG9hdGluZ09iamVj
dFRvTGFzdExpbmUoRmxvYXRpbmdPYmplY3QmKTsKLSAgICBSb290SW5saW5lQm94KiBjcmVhdGVM
aW5lQm94ZXNGcm9tQmlkaVJ1bnModW5zaWduZWQgYmlkaUxldmVsLCBCaWRpUnVuTGlzdDxCaWRp
UnVuPiYgYmlkaVJ1bnMsIGNvbnN0IElubGluZUl0ZXJhdG9yJiBlbmQsIExpbmVJbmZvJiwgVmVy
dGljYWxQb3NpdGlvbkNhY2hlJiwgQmlkaVJ1biogdHJhaWxpbmdTcGFjZVJ1biwgV29yZE1lYXN1
cmVtZW50cyYpOwotICAgIHZvaWQgbGF5b3V0UnVuc0FuZEZsb2F0cyhMaW5lTGF5b3V0U3RhdGUm
LCBib29sIGhhc0lubGluZUNoaWxkKTsKLSAgICBpbmxpbmUgY29uc3QgSW5saW5lSXRlcmF0b3Im
IHJlc3RhcnRMYXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5nZShMYXlvdXRVbml0IG9sZExvZ2ljYWxI
ZWlnaHQsIExheW91dFVuaXQgbmV3TG9naWNhbEhlaWdodCwgRmxvYXRpbmdPYmplY3QqIGxhc3RG
bG9hdEZyb21QcmV2aW91c0xpbmUsIElubGluZUJpZGlSZXNvbHZlciYsICBjb25zdCBJbmxpbmVJ
dGVyYXRvciYgb2xkRW5kKTsKLSAgICB2b2lkIGxheW91dFJ1bnNBbmRGbG9hdHNJblJhbmdlKExp
bmVMYXlvdXRTdGF0ZSYsIElubGluZUJpZGlSZXNvbHZlciYsIGNvbnN0IElubGluZUl0ZXJhdG9y
JiBjbGVhbkxpbmVTdGFydCwgY29uc3QgQmlkaVN0YXR1cyYgY2xlYW5MaW5lQmlkaVN0YXR1cywg
dW5zaWduZWQgY29uc2VjdXRpdmVIeXBoZW5hdGVkTGluZXMpOwotICAgIHZvaWQgcmVhdHRhY2hD
bGVhbkxpbmVGbG9hdHMoUm9vdElubGluZUJveCYgY2xlYW5MaW5lLCBMYXlvdXRVbml0IGRlbHRh
LCBib29sIGlzRmlyc3RDbGVhbkxpbmUpOwotICAgIHZvaWQgbGlua1RvRW5kTGluZUlmTmVlZGVk
KExpbmVMYXlvdXRTdGF0ZSYpOwotICAgIHZvaWQgY2hlY2tGbG9hdEluQ2xlYW5MaW5lKFJvb3RJ
bmxpbmVCb3gmIGNsZWFuTGluZSwgUmVuZGVyQm94JiBmbG9hdEJveE9uQ2xlYW5MaW5lLCBGbG9h
dFdpdGhSZWN0JiBtYXRjaGluZ0Zsb2F0V2l0aFJlY3QsIGJvb2wmIGVuY291bnRlcmVkTmV3Rmxv
YXQsIGJvb2wmIGRpcnRpZWRCeUZsb2F0KTsKLSAgICBSb290SW5saW5lQm94KiBkZXRlcm1pbmVT
dGFydFBvc2l0aW9uKExpbmVMYXlvdXRTdGF0ZSYsIElubGluZUJpZGlSZXNvbHZlciYpOwotICAg
IHZvaWQgZGV0ZXJtaW5lRW5kUG9zaXRpb24oTGluZUxheW91dFN0YXRlJiwgUm9vdElubGluZUJv
eCogc3RhcnRMaW5lLCBJbmxpbmVJdGVyYXRvciYgY2xlYW5MaW5lU3RhcnQsIEJpZGlTdGF0dXMm
IGNsZWFuTGluZUJpZGlTdGF0dXMpOwotICAgIGJvb2wgY2hlY2tQYWdpbmF0aW9uQW5kRmxvYXRz
QXRFbmRMaW5lKExpbmVMYXlvdXRTdGF0ZSYpOwotICAgIGJvb2wgbGluZVdpZHRoRm9yUGFnaW5h
dGVkTGluZUNoYW5nZWQoUm9vdElubGluZUJveCogcm9vdEJveCwgTGF5b3V0VW5pdCBsaW5lRGVs
dGEsIFJlbmRlckZyYWdtZW50ZWRGbG93KikgY29uc3Q7Ci0gICAgYm9vbCBtYXRjaGVkRW5kTGlu
ZShMaW5lTGF5b3V0U3RhdGUmLCBjb25zdCBJbmxpbmVCaWRpUmVzb2x2ZXImLCBjb25zdCBJbmxp
bmVJdGVyYXRvciYgZW5kTGluZVN0YXJ0LCBjb25zdCBCaWRpU3RhdHVzJiBlbmRMaW5lU3RhdHVz
KTsKLSAgICB2b2lkIGRlbGV0ZUVsbGlwc2lzTGluZUJveGVzKCk7Ci0gICAgdm9pZCBjaGVja0xp
bmVzRm9yVGV4dE92ZXJmbG93KCk7Ci0gICAgdm9pZCB1cGRhdGVGcmFnbWVudEZvckxpbmUoUm9v
dElubGluZUJveCopIGNvbnN0OwotCi0gICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKCkgY29u
c3Q7Ci0gICAgY29uc3QgRnJhbWVWaWV3TGF5b3V0Q29udGV4dCYgbGF5b3V0Q29udGV4dCgpIGNv
bnN0OwotCi0gICAgUmVuZGVyQmxvY2tGbG93JiBtX2Zsb3c7Ci0gICAgUmVuZGVyTGluZUJveExp
c3QgbV9saW5lQm94ZXM7Ci19OwotCi19OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0lubGluZUl0ZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5l
SXRlcmF0b3IuaAppbmRleCA2OGUzYWMyZmZjOTEuLjBkNmQwNmU3MjgyMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUl0ZXJhdG9yLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0lubGluZUl0ZXJhdG9yLmgKQEAgLTUzNyw3ICs1MzcsNyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICBhZGRQbGFjZWhvbGRlclJ1bkZvcklzb2xhdGVkSW5saW5lKHJlc29s
dmVyLCBvYmosIHBvcywgcm9vdCk7CiAgICAgICAgIH0KICAgICAgICAgbV9oYXZlQWRkZWRGYWtl
UnVuRm9yUm9vdElzb2xhdGUgPSB0cnVlOwotICAgICAgICBDb21wbGV4TGluZUxheW91dDo6YXBw
ZW5kUnVuc0Zvck9iamVjdChudWxscHRyLCBwb3MsIGVuZCwgb2JqLCByZXNvbHZlcik7CisgICAg
ICAgIExlZ2FjeUxpbmVMYXlvdXQ6OmFwcGVuZFJ1bnNGb3JPYmplY3QobnVsbHB0ciwgcG9zLCBl
bmQsIG9iaiwgcmVzb2x2ZXIpOwogICAgIH0KIAogcHJpdmF0ZToKQEAgLTU1OSw3ICs1NTksNyBA
QCBpbmxpbmUgdm9pZCBJbmxpbmVCaWRpUmVzb2x2ZXI6OmFwcGVuZFJ1bkludGVybmFsKCkKICAg
ICAgICAgICAgIGlmIChpc29sYXRlVHJhY2tlci5pbklzb2xhdGUoKSkKICAgICAgICAgICAgICAg
ICBpc29sYXRlVHJhY2tlci5hZGRGYWtlUnVuSWZOZWNlc3NhcnkoKm9iaiwgc3RhcnQsIG9iai0+
bGVuZ3RoKCksICptX3Nvci5yb290KCksICp0aGlzKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBDb21wbGV4TGluZUxheW91dDo6YXBwZW5kUnVuc0Zvck9iamVjdCgmbV9ydW5z
LCBzdGFydCwgb2JqLT5sZW5ndGgoKSwgKm9iaiwgKnRoaXMpOworICAgICAgICAgICAgICAgIExl
Z2FjeUxpbmVMYXlvdXQ6OmFwcGVuZFJ1bnNGb3JPYmplY3QoJm1fcnVucywgc3RhcnQsIG9iai0+
bGVuZ3RoKCksICpvYmosICp0aGlzKTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBzdGFydC9vYmog
c2hvdWxkIGJlIGFuIElubGluZUl0ZXJhdG9yIGluc3RlYWQgb2YgdHdvIHNlcGFyYXRlIHZhcmlh
Ymxlcy4KICAgICAgICAgICAgIHN0YXJ0ID0gMDsKICAgICAgICAgICAgIG9iaiA9IGJpZGlOZXh0
U2tpcHBpbmdFbXB0eUlubGluZXMoKm1fc29yLnJvb3QoKSwgb2JqLCAmaXNvbGF0ZVRyYWNrZXIp
OwpAQCAtNTc1LDcgKzU3NSw3IEBAIGlubGluZSB2b2lkIElubGluZUJpZGlSZXNvbHZlcjo6YXBw
ZW5kUnVuSW50ZXJuYWwoKQogICAgICAgICAgICAgaWYgKGlzb2xhdGVUcmFja2VyLmluSXNvbGF0
ZSgpKQogICAgICAgICAgICAgICAgIGlzb2xhdGVUcmFja2VyLmFkZEZha2VSdW5JZk5lY2Vzc2Fy
eSgqb2JqLCBzdGFydCwgb2JqLT5sZW5ndGgoKSwgKm1fc29yLnJvb3QoKSwgKnRoaXMpOwogICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIENvbXBsZXhMaW5lTGF5b3V0OjphcHBlbmRS
dW5zRm9yT2JqZWN0KCZtX3J1bnMsIHN0YXJ0LCBlbmQsICpvYmosICp0aGlzKTsKKyAgICAgICAg
ICAgICAgICBMZWdhY3lMaW5lTGF5b3V0OjphcHBlbmRSdW5zRm9yT2JqZWN0KCZtX3J1bnMsIHN0
YXJ0LCBlbmQsICpvYmosICp0aGlzKTsKICAgICAgICAgfQogCiAgICAgICAgIG1fZW9yLmluY3Jl
bWVudCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2Nr
Rmxvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcApp
bmRleCBhMjBjODVmODg0MDAuLmZlNzVhNmI0Mjk2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKQEAgLTI0LDcgKzI0LDYgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKIAotI2luY2x1ZGUgIkNvbXBs
ZXhMaW5lTGF5b3V0LmgiCiAjaW5jbHVkZSAiRWRpdG9yLmgiCiAjaW5jbHVkZSAiRmxvYXRpbmdP
YmplY3RzLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKQEAgLTQwLDYgKzM5LDcgQEAKICNpbmNsdWRl
ICJMYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuaCIKICNpbmNsdWRlICJMYXlvdXRJbnRlZ3Jh
dGlvblJ1bkl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiTGF5b3V0UmVwYWludGVyLmgiCisjaW5jbHVk
ZSAiTGVnYWN5TGluZUxheW91dC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJS
ZW5kZXJDb21iaW5lVGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlckZsZXhpYmxlQm94LmgiCkBAIC0x
NTQsOCArMTU0LDggQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OndpbGxCZURlc3Ryb3llZCgpCiAg
ICAgICAgICAgICBwYXJlbnQoKS0+ZGlydHlMaW5lc0Zyb21DaGFuZ2VkQ2hpbGQoKnRoaXMpOwog
ICAgIH0KIAotICAgIGlmIChjb21wbGV4TGluZUxheW91dCgpKQotICAgICAgICBjb21wbGV4TGlu
ZUxheW91dCgpLT5saW5lQm94ZXMoKS5kZWxldGVMaW5lQm94ZXMoKTsKKyAgICBpZiAobGVnYWN5
TGluZUxheW91dCgpKQorICAgICAgICBsZWdhY3lMaW5lTGF5b3V0KCktPmxpbmVCb3hlcygpLmRl
bGV0ZUxpbmVCb3hlcygpOwogCiAgICAgYmxvY2tXaWxsQmVEZXN0cm95ZWQoKTsKIApAQCAtNzAw
LDEwICs3MDAsMTAgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmxheW91dElubGluZUNoaWxkcmVu
KGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCYgcmUKICAgICB9CiAjZW5kaWYKIAot
ICAgIGlmICghY29tcGxleExpbmVMYXlvdXQoKSkKLSAgICAgICAgbV9saW5lTGF5b3V0ID0gbWFr
ZVVuaXF1ZTxDb21wbGV4TGluZUxheW91dD4oKnRoaXMpOworICAgIGlmICghbGVnYWN5TGluZUxh
eW91dCgpKQorICAgICAgICBtX2xpbmVMYXlvdXQgPSBtYWtlVW5pcXVlPExlZ2FjeUxpbmVMYXlv
dXQ+KCp0aGlzKTsKIAotICAgIGNvbXBsZXhMaW5lTGF5b3V0KCktPmxheW91dExpbmVCb3hlcyhy
ZWxheW91dENoaWxkcmVuLCByZXBhaW50TG9naWNhbFRvcCwgcmVwYWludExvZ2ljYWxCb3R0b20p
OworICAgIGxlZ2FjeUxpbmVMYXlvdXQoKS0+bGF5b3V0TGluZUJveGVzKHJlbGF5b3V0Q2hpbGRy
ZW4sIHJlcGFpbnRMb2dpY2FsVG9wLCByZXBhaW50TG9naWNhbEJvdHRvbSk7CiB9CiAKIHZvaWQg
UmVuZGVyQmxvY2tGbG93OjpsYXlvdXRCbG9ja0NoaWxkKFJlbmRlckJveCYgY2hpbGQsIE1hcmdp
bkluZm8mIG1hcmdpbkluZm8sIExheW91dFVuaXQmIHByZXZpb3VzRmxvYXRMb2dpY2FsQm90dG9t
LCBMYXlvdXRVbml0JiBtYXhGbG9hdExvZ2ljYWxCb3R0b20pCkBAIC05NzAsNyArOTcwLDcgQEAg
TGF5b3V0VW5pdCBSZW5kZXJCbG9ja0Zsb3c6OnN0YXJ0QWxpZ25lZE9mZnNldEZvckxpbmUoTGF5
b3V0VW5pdCBwb3NpdGlvbiwgSW5kZW4KICAgICBmbG9hdCBsb2dpY2FsTGVmdCA9IGxvZ2ljYWxM
ZWZ0T2Zmc2V0Rm9yTGluZShsb2dpY2FsSGVpZ2h0KCksIERvTm90SW5kZW50VGV4dCk7CiAgICAg
ZmxvYXQgYXZhaWxhYmxlTG9naWNhbFdpZHRoID0gbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShs
b2dpY2FsSGVpZ2h0KCksIERvTm90SW5kZW50VGV4dCkgLSBsb2dpY2FsTGVmdDsKIAotICAgIENv
bXBsZXhMaW5lTGF5b3V0Ojp1cGRhdGVMb2dpY2FsV2lkdGhGb3JBbGlnbm1lbnQoKnRoaXMsIHRl
eHRBbGlnbiwgbnVsbHB0ciwgbnVsbHB0ciwgbG9naWNhbExlZnQsIHRvdGFsTG9naWNhbFdpZHRo
LCBhdmFpbGFibGVMb2dpY2FsV2lkdGgsIDApOworICAgIExlZ2FjeUxpbmVMYXlvdXQ6OnVwZGF0
ZUxvZ2ljYWxXaWR0aEZvckFsaWdubWVudCgqdGhpcywgdGV4dEFsaWduLCBudWxscHRyLCBudWxs
cHRyLCBsb2dpY2FsTGVmdCwgdG90YWxMb2dpY2FsV2lkdGgsIGF2YWlsYWJsZUxvZ2ljYWxXaWR0
aCwgMCk7CiAKICAgICBpZiAoIXN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQogICAg
ICAgICByZXR1cm4gTGF5b3V0VW5pdChsb2dpY2FsV2lkdGgoKSAtIGxvZ2ljYWxMZWZ0KTsKQEAg
LTE4MDIsNyArMTgwMiw3IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjphZGp1c3RMaW5lUG9zaXRp
b25Gb3JQYWdpbmF0aW9uKFJvb3RJbmxpbmVCb3gqIGxpbmVCb3gsIExhCiAgICAgTGF5b3V0VW5p
dCByZW1haW5pbmdMb2dpY2FsSGVpZ2h0ID0gcGFnZVJlbWFpbmluZ0xvZ2ljYWxIZWlnaHRGb3JP
ZmZzZXQobG9naWNhbE9mZnNldCwgRXhjbHVkZVBhZ2VCb3VuZGFyeSk7CiAgICAgb3ZlcmZsb3dz
RnJhZ21lbnQgPSAobGluZUhlaWdodCA+IHJlbWFpbmluZ0xvZ2ljYWxIZWlnaHQpOwogCi0gICAg
aW50IGxpbmVJbmRleCA9IGNvbXBsZXhMaW5lTGF5b3V0KCktPmxpbmVDb3VudFVudGlsKGxpbmVC
b3gpOworICAgIGludCBsaW5lSW5kZXggPSBsZWdhY3lMaW5lTGF5b3V0KCktPmxpbmVDb3VudFVu
dGlsKGxpbmVCb3gpOwogICAgIGlmIChyZW1haW5pbmdMb2dpY2FsSGVpZ2h0IDwgbGluZUhlaWdo
dCB8fCAoc2hvdWxkQnJlYWtBdExpbmVUb0F2b2lkV2lkb3coKSAmJiBsaW5lQnJlYWtUb0F2b2lk
V2lkb3coKSA9PSBsaW5lSW5kZXgpKSB7CiAgICAgICAgIGlmIChsaW5lQnJlYWtUb0F2b2lkV2lk
b3coKSA9PSBsaW5lSW5kZXgpCiAgICAgICAgICAgICBjbGVhclNob3VsZEJyZWFrQXRMaW5lVG9B
dm9pZFdpZG93SWZOZWVkZWQoKnRoaXMpOwpAQCAtMjEzMSw3ICsyMTMxLDcgQEAgdm9pZCBSZW5k
ZXJCbG9ja0Zsb3c6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBS
ZW5kZXJTdHlsZSogb2wKIAogICAgIGlmIChkaWZmID49IFN0eWxlRGlmZmVyZW5jZTo6UmVwYWlu
dCkgewogICAgICAgICBhdXRvIHNob3VsZEludmFsaWRhdGVMaW5lTGF5b3V0UGF0aCA9IFsmXSB7
Ci0gICAgICAgICAgICBpZiAoc2VsZk5lZWRzTGF5b3V0KCkgfHwgY29tcGxleExpbmVMYXlvdXQo
KSkKKyAgICAgICAgICAgIGlmIChzZWxmTmVlZHNMYXlvdXQoKSB8fCBsZWdhY3lMaW5lTGF5b3V0
KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAjaWYgRU5BQkxFKExBWU9VVF9GT1JN
QVRUSU5HX0NPTlRFWFQpCiAgICAgICAgICAgICBpZiAobW9kZXJuTGluZUxheW91dCgpICYmICFM
YXlvdXRJbnRlZ3JhdGlvbjo6TGluZUxheW91dDo6Y2FuVXNlRm9yQWZ0ZXJTdHlsZUNoYW5nZSgq
dGhpcywgZGlmZikpCkBAIC0zMDE3LDcgKzMwMTcsNyBAQCBib29sIFJlbmRlckJsb2NrRmxvdzo6
aGl0VGVzdElubGluZUNoaWxkcmVuKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRU
ZQogICAgICAgICByZXR1cm4gbW9kZXJuTGluZUxheW91dCgpLT5oaXRUZXN0KHJlcXVlc3QsIHJl
c3VsdCwgbG9jYXRpb25JbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIGhpdFRlc3RBY3Rp
b24pOwogI2VuZGlmCiAKLSAgICByZXR1cm4gY29tcGxleExpbmVMYXlvdXQoKSAmJiBjb21wbGV4
TGluZUxheW91dCgpLT5saW5lQm94ZXMoKS5oaXRUZXN0KHRoaXMsIHJlcXVlc3QsIHJlc3VsdCwg
bG9jYXRpb25JbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIGhpdFRlc3RBY3Rpb24pOwor
ICAgIHJldHVybiBsZWdhY3lMaW5lTGF5b3V0KCkgJiYgbGVnYWN5TGluZUxheW91dCgpLT5saW5l
Qm94ZXMoKS5oaXRUZXN0KHRoaXMsIHJlcXVlc3QsIHJlc3VsdCwgbG9jYXRpb25JbkNvbnRhaW5l
ciwgYWNjdW11bGF0ZWRPZmZzZXQsIGhpdFRlc3RBY3Rpb24pOwogfQogCiB2b2lkIFJlbmRlckJs
b2NrRmxvdzo6YWRkT3ZlcmZsb3dGcm9tSW5saW5lQ2hpbGRyZW4oKQpAQCAtMzAyOSw4ICszMDI5
LDggQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmFkZE92ZXJmbG93RnJvbUlubGluZUNoaWxkcmVu
KCkKICAgICB9CiAjZW5kaWYKICAgICAKLSAgICBpZiAoY29tcGxleExpbmVMYXlvdXQoKSkKLSAg
ICAgICAgY29tcGxleExpbmVMYXlvdXQoKS0+YWRkT3ZlcmZsb3dGcm9tSW5saW5lQ2hpbGRyZW4o
KTsKKyAgICBpZiAobGVnYWN5TGluZUxheW91dCgpKQorICAgICAgICBsZWdhY3lMaW5lTGF5b3V0
KCktPmFkZE92ZXJmbG93RnJvbUlubGluZUNoaWxkcmVuKCk7CiB9CiAKIHZvaWQgUmVuZGVyQmxv
Y2tGbG93OjphZGp1c3RGb3JCb3JkZXJGaXQoTGF5b3V0VW5pdCB4LCBMYXlvdXRVbml0JiBsZWZ0
LCBMYXlvdXRVbml0JiByaWdodCkgY29uc3QKQEAgLTMxODgsNyArMzE4OCw3IEBAIHN0ZDo6b3B0
aW9uYWw8TGF5b3V0VW5pdD4gUmVuZGVyQmxvY2tGbG93OjppbmxpbmVCbG9ja0Jhc2VsaW5lKExp
bmVEaXJlY3Rpb25Nb2RlCiAgICAgICAgICAgICAgICAgKyAobGluZURpcmVjdGlvbiA9PSBIb3Jp
em9udGFsTGluZSA/IGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpIDogYm9yZGVyUmlnaHQoKSAr
IHBhZGRpbmdSaWdodCgpKSkudG9JbnQoKSB9OwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGNv
bXBsZXhMaW5lTGF5b3V0KCkpIHsKKyAgICAgICAgaWYgKGxlZ2FjeUxpbmVMYXlvdXQoKSkgewog
ICAgICAgICAgICAgYm9vbCBpc0ZpcnN0TGluZSA9IGxhc3RSb290Qm94KCkgPT0gZmlyc3RSb290
Qm94KCk7CiAgICAgICAgICAgICBjb25zdCBhdXRvJiBzdHlsZSA9IGlzRmlyc3RMaW5lID8gZmly
c3RMaW5lU3R5bGUoKSA6IHRoaXMtPnN0eWxlKCk7CiAgICAgICAgICAgICAvLyBJbmxpbmVGbG93
Qm94OjpwbGFjZUJveGVzSW5CbG9ja0RpcmVjdGlvbiB3aWxsIGZsaXAgbGluZXMgaW4gY2FzZSBv
ZiB2ZXJ0aWNhbExSIG1vZGUsIHNvIHdlIGNhbiBhc3N1bWUgdmVydGljYWxSTCBmb3Igbm93LgpA
QCAtMzM0MSw4ICszMzQxLDggQEAgaW50IFJlbmRlckJsb2NrRmxvdzo6bGluZUNvdW50KCkgY29u
c3QKICAgICAgICAgaWYgKG1vZGVybkxpbmVMYXlvdXQoKSkKICAgICAgICAgICAgIHJldHVybiBt
b2Rlcm5MaW5lTGF5b3V0KCktPmxpbmVDb3VudCgpOwogI2VuZGlmCi0gICAgICAgIGlmIChjb21w
bGV4TGluZUxheW91dCgpKQotICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXhMaW5lTGF5b3V0KCkt
PmxpbmVDb3VudCgpOworICAgICAgICBpZiAobGVnYWN5TGluZUxheW91dCgpKQorICAgICAgICAg
ICAgcmV0dXJuIGxlZ2FjeUxpbmVMYXlvdXQoKS0+bGluZUNvdW50KCk7CiAKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgfQpAQCAtMzU5Myw4ICszNTkzLDggQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6
OnBhaW50SW5saW5lQ2hpbGRyZW4oUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBv
aW4KICAgICB9CiAjZW5kaWYKIAotICAgIGlmIChjb21wbGV4TGluZUxheW91dCgpKQotICAgICAg
ICBjb21wbGV4TGluZUxheW91dCgpLT5saW5lQm94ZXMoKS5wYWludCh0aGlzLCBwYWludEluZm8s
IHBhaW50T2Zmc2V0KTsKKyAgICBpZiAobGVnYWN5TGluZUxheW91dCgpKQorICAgICAgICBsZWdh
Y3lMaW5lTGF5b3V0KCktPmxpbmVCb3hlcygpLnBhaW50KHRoaXMsIHBhaW50SW5mbywgcGFpbnRP
ZmZzZXQpOwogfQogCiBib29sIFJlbmRlckJsb2NrRmxvdzo6cmVsYXlvdXRGb3JQYWdpbmF0aW9u
KCkKQEAgLTM2NTEsNyArMzY1MSw3IEBAIGJvb2wgUmVuZGVyQmxvY2tGbG93OjpoYXNMaW5lcygp
IGNvbnN0CiAgICAgICAgIHJldHVybiBtb2Rlcm5MaW5lTGF5b3V0KCktPmxpbmVDb3VudCgpOwog
I2VuZGlmCiAKLSAgICByZXR1cm4gY29tcGxleExpbmVMYXlvdXQoKSAmJiBjb21wbGV4TGluZUxh
eW91dCgpLT5saW5lQm94ZXMoKS5maXJzdExpbmVCb3goKTsKKyAgICByZXR1cm4gbGVnYWN5TGlu
ZUxheW91dCgpICYmIGxlZ2FjeUxpbmVMYXlvdXQoKS0+bGluZUJveGVzKCkuZmlyc3RMaW5lQm94
KCk7CiB9CiAKIHZvaWQgUmVuZGVyQmxvY2tGbG93OjppbnZhbGlkYXRlTGluZUxheW91dFBhdGgo
KQpAQCAtMzc1OCw3ICszNzU4LDcgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmVuc3VyZUxpbmVC
b3hlcygpCiAKICAgICBzZXRMaW5lTGF5b3V0UGF0aChGb3JjZUxpbmVCb3hlc1BhdGgpOwogCi0g
ICAgaWYgKGNvbXBsZXhMaW5lTGF5b3V0KCkgfHwgIWhhc0xpbmVMYXlvdXQoKSkKKyAgICBpZiAo
bGVnYWN5TGluZUxheW91dCgpIHx8ICFoYXNMaW5lTGF5b3V0KCkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIGJvb2wgbmVlZHNUb1BhZ2luYXRlQ29tcGxleExpbmVzID0gWyZdIHsKQEAgLTM3Njks
OSArMzc2OSw5IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjplbnN1cmVMaW5lQm94ZXMoKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfSgpOwogCi0gICAgbV9saW5lTGF5b3V0ID0gbWFrZVVu
aXF1ZTxDb21wbGV4TGluZUxheW91dD4oKnRoaXMpOworICAgIG1fbGluZUxheW91dCA9IG1ha2VV
bmlxdWU8TGVnYWN5TGluZUxheW91dD4oKnRoaXMpOwogCi0gICAgYXV0byYgY29tcGxleExpbmVM
YXlvdXQgPSAqdGhpcy0+Y29tcGxleExpbmVMYXlvdXQoKTsKKyAgICBhdXRvJiBsZWdhY3lMaW5l
TGF5b3V0ID0gKnRoaXMtPmxlZ2FjeUxpbmVMYXlvdXQoKTsKIAogI2lmIEFTU0VSVF9FTkFCTEVE
CiAgICAgTGF5b3V0VW5pdCBvbGRIZWlnaHQgPSBsb2dpY2FsSGVpZ2h0KCk7CkBAIC0zNzgzLDE0
ICszNzgzLDE0IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjplbnN1cmVMaW5lQm94ZXMoKQogICAg
IExheW91dFVuaXQgcmVwYWludExvZ2ljYWxCb3R0b207CiAgICAgaWYgKG5lZWRzVG9QYWdpbmF0
ZUNvbXBsZXhMaW5lcykgewogICAgICAgICBQYWdpbmF0ZWRMYXlvdXRTdGF0ZU1haW50YWluZXIg
c3RhdGUoKnRoaXMpOwotICAgICAgICBjb21wbGV4TGluZUxheW91dC5sYXlvdXRMaW5lQm94ZXMo
cmVsYXlvdXRDaGlsZHJlbiwgcmVwYWludExvZ2ljYWxUb3AsIHJlcGFpbnRMb2dpY2FsQm90dG9t
KTsKKyAgICAgICAgbGVnYWN5TGluZUxheW91dC5sYXlvdXRMaW5lQm94ZXMocmVsYXlvdXRDaGls
ZHJlbiwgcmVwYWludExvZ2ljYWxUb3AsIHJlcGFpbnRMb2dpY2FsQm90dG9tKTsKICAgICAgICAg
Ly8gVGhpcyBtYXRjaGVzIHJlbGF5b3V0VG9Bdm9pZFdpZG93cy4KICAgICAgICAgaWYgKHNob3Vs
ZEJyZWFrQXRMaW5lVG9Bdm9pZFdpZG93KCkpCi0gICAgICAgICAgICBjb21wbGV4TGluZUxheW91
dC5sYXlvdXRMaW5lQm94ZXMocmVsYXlvdXRDaGlsZHJlbiwgcmVwYWludExvZ2ljYWxUb3AsIHJl
cGFpbnRMb2dpY2FsQm90dG9tKTsKKyAgICAgICAgICAgIGxlZ2FjeUxpbmVMYXlvdXQubGF5b3V0
TGluZUJveGVzKHJlbGF5b3V0Q2hpbGRyZW4sIHJlcGFpbnRMb2dpY2FsVG9wLCByZXBhaW50TG9n
aWNhbEJvdHRvbSk7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIG5lZWRlZCBhcyBsb25nIGFz
IHNpbXBsZSBhbmQgbm9ybWFsIGxpbmUgbGF5b3V0IHByb2R1Y2UgZGlmZmVyZW50IGxpbmUgYnJl
YWtpbmdzLgogICAgICAgICByZXBhaW50KCk7CiAgICAgfSBlbHNlCi0gICAgICAgIGNvbXBsZXhM
aW5lTGF5b3V0LmxheW91dExpbmVCb3hlcyhyZWxheW91dENoaWxkcmVuLCByZXBhaW50TG9naWNh
bFRvcCwgcmVwYWludExvZ2ljYWxCb3R0b20pOworICAgICAgICBsZWdhY3lMaW5lTGF5b3V0Lmxh
eW91dExpbmVCb3hlcyhyZWxheW91dENoaWxkcmVuLCByZXBhaW50TG9naWNhbFRvcCwgcmVwYWlu
dExvZ2ljYWxCb3R0b20pOwogCiAgICAgdXBkYXRlTG9naWNhbEhlaWdodCgpOwogICAgIEFTU0VS
VChkaWROZWVkTGF5b3V0IHx8IGNlaWxmKGxvZ2ljYWxIZWlnaHQoKSkgPT0gY2VpbGYob2xkSGVp
Z2h0KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tG
bG93LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmgKaW5kZXgg
Y2QwMDk2NWRhZWY5Li5hN2YwMWMyM2FlZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2tGbG93LmgKQEAgLTIyLDggKzIyLDggQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNp
bmNsdWRlICJDb21wbGV4TGluZUxheW91dC5oIgogI2luY2x1ZGUgIkZsb2F0aW5nT2JqZWN0cy5o
IgorI2luY2x1ZGUgIkxlZ2FjeUxpbmVMYXlvdXQuaCIKICNpbmNsdWRlICJMaW5lV2lkdGguaCIK
ICNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgogI2luY2x1ZGUgIlJlbmRlckxpbmVCb3hMaXN0Lmgi
CkBAIC03Nyw4ICs3Nyw4IEBAIHByb3RlY3RlZDoKIAogICAgIHZvaWQgZGlydHlMaW5lc0Zyb21D
aGFuZ2VkQ2hpbGQoUmVuZGVyT2JqZWN0JiBjaGlsZCkgZmluYWwKICAgICB7Ci0gICAgICAgIGlm
IChjb21wbGV4TGluZUxheW91dCgpKQotICAgICAgICAgICAgY29tcGxleExpbmVMYXlvdXQoKS0+
bGluZUJveGVzKCkuZGlydHlMaW5lc0Zyb21DaGFuZ2VkQ2hpbGQoKnRoaXMsIGNoaWxkKTsKKyAg
ICAgICAgaWYgKGxlZ2FjeUxpbmVMYXlvdXQoKSkKKyAgICAgICAgICAgIGxlZ2FjeUxpbmVMYXlv
dXQoKS0+bGluZUJveGVzKCkuZGlydHlMaW5lc0Zyb21DaGFuZ2VkQ2hpbGQoKnRoaXMsIGNoaWxk
KTsKICAgICB9CiAKICAgICB2b2lkIHBhaW50Q29sdW1uUnVsZXMoUGFpbnRJbmZvJiwgY29uc3Qg
TGF5b3V0UG9pbnQmKSBvdmVycmlkZTsKQEAgLTMzNyw4ICszMzcsOCBAQCBwdWJsaWM6CiAKICAg
ICBMYXlvdXRQb2ludCBmbGlwRmxvYXRGb3JXcml0aW5nTW9kZUZvckNoaWxkKGNvbnN0IEZsb2F0
aW5nT2JqZWN0JiwgY29uc3QgTGF5b3V0UG9pbnQmKSBjb25zdDsKIAotICAgIFJvb3RJbmxpbmVC
b3gqIGZpcnN0Um9vdEJveCgpIGNvbnN0IHsgcmV0dXJuIGNvbXBsZXhMaW5lTGF5b3V0KCkgPyBj
b21wbGV4TGluZUxheW91dCgpLT5maXJzdFJvb3RCb3goKSA6IG51bGxwdHI7IH0KLSAgICBSb290
SW5saW5lQm94KiBsYXN0Um9vdEJveCgpIGNvbnN0IHsgcmV0dXJuIGNvbXBsZXhMaW5lTGF5b3V0
KCkgPyBjb21wbGV4TGluZUxheW91dCgpLT5sYXN0Um9vdEJveCgpIDogbnVsbHB0cjsgfQorICAg
IFJvb3RJbmxpbmVCb3gqIGZpcnN0Um9vdEJveCgpIGNvbnN0IHsgcmV0dXJuIGxlZ2FjeUxpbmVM
YXlvdXQoKSA/IGxlZ2FjeUxpbmVMYXlvdXQoKS0+Zmlyc3RSb290Qm94KCkgOiBudWxscHRyOyB9
CisgICAgUm9vdElubGluZUJveCogbGFzdFJvb3RCb3goKSBjb25zdCB7IHJldHVybiBsZWdhY3lM
aW5lTGF5b3V0KCkgPyBsZWdhY3lMaW5lTGF5b3V0KCktPmxhc3RSb290Qm94KCkgOiBudWxscHRy
OyB9CiAKICAgICB2b2lkIHNldENoaWxkcmVuSW5saW5lKGJvb2wpIGZpbmFsOwogCkBAIC0zNTcs
OCArMzU3LDggQEAgcHVibGljOgogCiAgICAgYm9vbCBjb250YWluc05vblplcm9CaWRpTGV2ZWwo
KSBjb25zdDsKIAotICAgIGNvbnN0IENvbXBsZXhMaW5lTGF5b3V0KiBjb21wbGV4TGluZUxheW91
dCgpIGNvbnN0OwotICAgIENvbXBsZXhMaW5lTGF5b3V0KiBjb21wbGV4TGluZUxheW91dCgpOwor
ICAgIGNvbnN0IExlZ2FjeUxpbmVMYXlvdXQqIGxlZ2FjeUxpbmVMYXlvdXQoKSBjb25zdDsKKyAg
ICBMZWdhY3lMaW5lTGF5b3V0KiBsZWdhY3lMaW5lTGF5b3V0KCk7CiAjaWYgRU5BQkxFKExBWU9V
VF9GT1JNQVRUSU5HX0NPTlRFWFQpCiAgICAgY29uc3QgTGF5b3V0SW50ZWdyYXRpb246OkxpbmVM
YXlvdXQqIG1vZGVybkxpbmVMYXlvdXQoKSBjb25zdDsKICAgICBMYXlvdXRJbnRlZ3JhdGlvbjo6
TGluZUxheW91dCogbW9kZXJuTGluZUxheW91dCgpOwpAQCAtNTQxLDcgKzU0MSw3IEBAIHB1Ymxp
YzoKIAogcHJpdmF0ZToKICAgICBib29sIGhhc0xpbmVMYXlvdXQoKSBjb25zdDsKLSAgICBib29s
IGhhc0NvbXBsZXhMaW5lTGF5b3V0KCkgY29uc3Q7CisgICAgYm9vbCBoYXNMZWdhY3lMaW5lTGF5
b3V0KCkgY29uc3Q7CiAKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKICAg
ICBib29sIGhhc01vZGVybkxpbmVMYXlvdXQoKSBjb25zdDsKQEAgLTU5MCwxMiArNTkwLDEyIEBA
IHByaXZhdGU6CiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiAgICAgICAg
IHN0ZDo6dW5pcXVlX3B0cjxMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUxheW91dD4sCiAjZW5kaWYK
LSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENvbXBsZXhMaW5lTGF5b3V0PgorICAgICAgICBzdGQ6
OnVuaXF1ZV9wdHI8TGVnYWN5TGluZUxheW91dD4KICAgICA+IG1fbGluZUxheW91dDsKIAogICAg
IGZyaWVuZCBjbGFzcyBMaW5lQnJlYWtlcjsKICAgICBmcmllbmQgY2xhc3MgTGluZVdpZHRoOyAv
LyBOZWVkcyB0byBrbm93IEZsb2F0aW5nT2JqZWN0Ci0gICAgZnJpZW5kIGNsYXNzIENvbXBsZXhM
aW5lTGF5b3V0OworICAgIGZyaWVuZCBjbGFzcyBMZWdhY3lMaW5lTGF5b3V0OwogfTsKIAogaW5s
aW5lIGJvb2wgUmVuZGVyQmxvY2tGbG93OjpoYXNMaW5lTGF5b3V0KCkgY29uc3QKQEAgLTYwMywx
OSArNjAzLDE5IEBAIGlubGluZSBib29sIFJlbmRlckJsb2NrRmxvdzo6aGFzTGluZUxheW91dCgp
IGNvbnN0CiAgICAgcmV0dXJuICFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFdURjo6TW9ub3N0YXRl
PihtX2xpbmVMYXlvdXQpOwogfQogCi1pbmxpbmUgYm9vbCBSZW5kZXJCbG9ja0Zsb3c6Omhhc0Nv
bXBsZXhMaW5lTGF5b3V0KCkgY29uc3QKK2lubGluZSBib29sIFJlbmRlckJsb2NrRmxvdzo6aGFz
TGVnYWN5TGluZUxheW91dCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJu
YXRpdmU8c3RkOjp1bmlxdWVfcHRyPENvbXBsZXhMaW5lTGF5b3V0Pj4obV9saW5lTGF5b3V0KTsK
KyAgICByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxzdGQ6OnVuaXF1ZV9wdHI8TGVnYWN5
TGluZUxheW91dD4+KG1fbGluZUxheW91dCk7CiB9CiAKLWlubGluZSBjb25zdCBDb21wbGV4TGlu
ZUxheW91dCogUmVuZGVyQmxvY2tGbG93Ojpjb21wbGV4TGluZUxheW91dCgpIGNvbnN0Citpbmxp
bmUgY29uc3QgTGVnYWN5TGluZUxheW91dCogUmVuZGVyQmxvY2tGbG93OjpsZWdhY3lMaW5lTGF5
b3V0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gaGFzQ29tcGxleExpbmVMYXlvdXQoKSA/IFdURjo6
Z2V0PHN0ZDo6dW5pcXVlX3B0cjxDb21wbGV4TGluZUxheW91dD4+KG1fbGluZUxheW91dCkuZ2V0
KCkgOiBudWxscHRyOworICAgIHJldHVybiBoYXNMZWdhY3lMaW5lTGF5b3V0KCkgPyBXVEY6Omdl
dDxzdGQ6OnVuaXF1ZV9wdHI8TGVnYWN5TGluZUxheW91dD4+KG1fbGluZUxheW91dCkuZ2V0KCkg
OiBudWxscHRyOwogfQogCi1pbmxpbmUgQ29tcGxleExpbmVMYXlvdXQqIFJlbmRlckJsb2NrRmxv
dzo6Y29tcGxleExpbmVMYXlvdXQoKQoraW5saW5lIExlZ2FjeUxpbmVMYXlvdXQqIFJlbmRlckJs
b2NrRmxvdzo6bGVnYWN5TGluZUxheW91dCgpCiB7Ci0gICAgcmV0dXJuIGhhc0NvbXBsZXhMaW5l
TGF5b3V0KCkgPyBXVEY6OmdldDxzdGQ6OnVuaXF1ZV9wdHI8Q29tcGxleExpbmVMYXlvdXQ+Piht
X2xpbmVMYXlvdXQpLmdldCgpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gaGFzTGVnYWN5TGluZUxh
eW91dCgpID8gV1RGOjpnZXQ8c3RkOjp1bmlxdWVfcHRyPExlZ2FjeUxpbmVMYXlvdXQ+PihtX2xp
bmVMYXlvdXQpLmdldCgpIDogbnVsbHB0cjsKIH0KIAogI2lmIEVOQUJMRShMQVlPVVRfRk9STUFU
VElOR19DT05URVhUKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCmluZGV4
IDEyZDNlZmZjYWE1Zi4uY2RlNDVkMmVjMjE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHQuY3BwCkBAIC0xNTA0LDcgKzE1MDQsNyBAQCB2b2lkIFJlbmRlclRleHQ6OnBvc2l0
aW9uTGluZUJveChJbmxpbmVUZXh0Qm94JiB0ZXh0Qm94KQogICAgIG1fY29udGFpbnNSZXZlcnNl
ZFRleHQgfD0gIXRleHRCb3guaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpOwogfQogCi1ib29sIFJl
bmRlclRleHQ6OnVzZXNDb21wbGV4TGluZUxheW91dFBhdGgoKSBjb25zdAorYm9vbCBSZW5kZXJU
ZXh0Ojp1c2VzTGVnYWN5TGluZUxheW91dFBhdGgoKSBjb25zdAogewogI2lmIEVOQUJMRShMQVlP
VVRfRk9STUFUVElOR19DT05URVhUKQogICAgIHJldHVybiAhTGF5b3V0SW50ZWdyYXRpb246Okxp
bmVMYXlvdXQ6OmNvbnRhaW5pbmcoKnRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0LmgKaW5kZXggOWQ2MTdjNDdiMWI2Li45YzdkYWU4OGNlZGIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHQuaApAQCAtMTY3LDcgKzE2Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldENhbmRpZGF0ZUNvbXB1dGVkVGV4dFNpemUoZmxvYXQgc2l6ZSkgeyBtX2NhbmRpZGF0ZUNv
bXB1dGVkVGV4dFNpemUgPSBzaXplOyB9CiAjZW5kaWYKIAotICAgIGJvb2wgdXNlc0NvbXBsZXhM
aW5lTGF5b3V0UGF0aCgpIGNvbnN0OworICAgIGJvb2wgdXNlc0xlZ2FjeUxpbmVMYXlvdXRQYXRo
KCkgY29uc3Q7CiAKICAgICBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcodW5zaWduZWQgc3RhcnQgPSAw
LCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBzdG9wID0gc3RkOjpudWxsb3B0KSBjb25zdDsKICAg
ICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAppbmRleCA5Mzg5
N2VkYjMxMjIuLmY1Yjg5ZTAwZWU1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1Jvb3RJbmxpbmVCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290
SW5saW5lQm94LmNwcApAQCAtNzM0LDE5ICs3MzQsMTkgQEAgRWxsaXBzaXNCb3gqIFJvb3RJbmxp
bmVCb3g6OmVsbGlwc2lzQm94KCkgY29uc3QKIAogdm9pZCBSb290SW5saW5lQm94OjpyZW1vdmVM
aW5lQm94RnJvbVJlbmRlck9iamVjdCgpCiB7Ci0gICAgLy8gTnVsbCBpZiB3ZSBhcmUgZGVzdHJv
eWluZyBDb21wbGV4TGluZUxheW91dC4KLSAgICBpZiAoYXV0byogY29tcGxleExpbmVMYXlvdXQg
PSBibG9ja0Zsb3coKS5jb21wbGV4TGluZUxheW91dCgpKQotICAgICAgICBjb21wbGV4TGluZUxh
eW91dC0+bGluZUJveGVzKCkucmVtb3ZlTGluZUJveCh0aGlzKTsKKyAgICAvLyBOdWxsIGlmIHdl
IGFyZSBkZXN0cm95aW5nIExlZ2FjeUxpbmVMYXlvdXQuCisgICAgaWYgKGF1dG8qIGxlZ2FjeUxp
bmVMYXlvdXQgPSBibG9ja0Zsb3coKS5sZWdhY3lMaW5lTGF5b3V0KCkpCisgICAgICAgIGxlZ2Fj
eUxpbmVMYXlvdXQtPmxpbmVCb3hlcygpLnJlbW92ZUxpbmVCb3godGhpcyk7CiB9CiAKIHZvaWQg
Um9vdElubGluZUJveDo6ZXh0cmFjdExpbmVCb3hGcm9tUmVuZGVyT2JqZWN0KCkKIHsKLSAgICBi
bG9ja0Zsb3coKS5jb21wbGV4TGluZUxheW91dCgpLT5saW5lQm94ZXMoKS5leHRyYWN0TGluZUJv
eCh0aGlzKTsKKyAgICBibG9ja0Zsb3coKS5sZWdhY3lMaW5lTGF5b3V0KCktPmxpbmVCb3hlcygp
LmV4dHJhY3RMaW5lQm94KHRoaXMpOwogfQogCiB2b2lkIFJvb3RJbmxpbmVCb3g6OmF0dGFjaExp
bmVCb3hUb1JlbmRlck9iamVjdCgpCiB7Ci0gICAgYmxvY2tGbG93KCkuY29tcGxleExpbmVMYXlv
dXQoKS0+bGluZUJveGVzKCkuYXR0YWNoTGluZUJveCh0aGlzKTsKKyAgICBibG9ja0Zsb3coKS5s
ZWdhY3lMaW5lTGF5b3V0KCktPmxpbmVCb3hlcygpLmF0dGFjaExpbmVCb3godGhpcyk7CiB9CiAK
IExheW91dFJlY3QgUm9vdElubGluZUJveDo6cGFkZGVkTGF5b3V0T3ZlcmZsb3dSZWN0KExheW91
dFVuaXQgZW5kUGFkZGluZykgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9saW5lL0xpbmVCcmVha2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5l
L0xpbmVCcmVha2VyLmNwcAppbmRleCA1MjhlMjg2ZmZmODMuLjZmZThlZjFjMjQ0OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUJyZWFrZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVCcmVha2VyLmNwcApAQCAtNjYsNyAr
NjYsNyBAQCB2b2lkIExpbmVCcmVha2VyOjpza2lwTGVhZGluZ1doaXRlc3BhY2UoSW5saW5lQmlk
aVJlc29sdmVyJiByZXNvbHZlciwgTGluZUluZm8mCiAgICAgICAgICAgICAgICAgbGluZUluZm8u
aW5jcmVtZW50UnVuc0Zyb21MZWFkaW5nV2hpdGVzcGFjZSgpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9IGVsc2UgaWYgKG9iamVjdC5pc0Zsb2F0aW5nKCkpCi0gICAgICAgICAgICBtX2Jsb2Nr
LmNvbXBsZXhMaW5lTGF5b3V0KCktPnBvc2l0aW9uTmV3RmxvYXRPbkxpbmUoKm1fYmxvY2suaW5z
ZXJ0RmxvYXRpbmdPYmplY3QoZG93bmNhc3Q8UmVuZGVyQm94PihvYmplY3QpKSwgbGFzdEZsb2F0
RnJvbVByZXZpb3VzTGluZSwgbGluZUluZm8sIHdpZHRoKTsKKyAgICAgICAgICAgIG1fYmxvY2su
bGVnYWN5TGluZUxheW91dCgpLT5wb3NpdGlvbk5ld0Zsb2F0T25MaW5lKCptX2Jsb2NrLmluc2Vy
dEZsb2F0aW5nT2JqZWN0KGRvd25jYXN0PFJlbmRlckJveD4ob2JqZWN0KSksIGxhc3RGbG9hdEZy
b21QcmV2aW91c0xpbmUsIGxpbmVJbmZvLCB3aWR0aCk7CiAgICAgICAgIGVsc2UgaWYgKG9iamVj
dC5zdHlsZSgpLmhhc1RleHRDb21iaW5lKCkgJiYgaXM8UmVuZGVyQ29tYmluZVRleHQ+KG9iamVj
dCkpIHsKICAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlckNvbWJpbmVUZXh0PihvYmplY3QpLmNv
bWJpbmVUZXh0SWZOZWVkZWQoKTsKICAgICAgICAgICAgIGlmIChkb3duY2FzdDxSZW5kZXJDb21i
aW5lVGV4dD4ob2JqZWN0KS5pc0NvbWJpbmVkKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvbGluZS9MaW5lQnJlYWtlci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L2xpbmUvTGluZUJyZWFrZXIuaAppbmRleCBkMDA1OTMyMmQwODcuLmU4M2RlMzRhZjUyYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUJyZWFrZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lQnJlYWtlci5oCkBAIC02Niw3ICs2
Niw3IEBAIHByaXZhdGU6CiAgICAgRmxvYXRpbmdPYmplY3QqIGluc2VydEZsb2F0aW5nT2JqZWN0
KFJlbmRlckJveCYgZmxvYXRCb3gpIHsgcmV0dXJuIG1fYmxvY2suaW5zZXJ0RmxvYXRpbmdPYmpl
Y3QoZmxvYXRCb3gpOyB9CiAgICAgYm9vbCBwb3NpdGlvbk5ld0Zsb2F0T25MaW5lKGNvbnN0IEZs
b2F0aW5nT2JqZWN0JiBuZXdGbG9hdCwgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdEZyb21QcmV2
aW91c0xpbmUsIExpbmVJbmZvJiBsaW5lSW5mbywgTGluZVdpZHRoJiB3aWR0aCkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBtX2Jsb2NrLmNvbXBsZXhMaW5lTGF5b3V0KCktPnBvc2l0aW9uTmV3Rmxv
YXRPbkxpbmUobmV3RmxvYXQsIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUsIGxpbmVJbmZvLCB3
aWR0aCk7CisgICAgICAgIHJldHVybiBtX2Jsb2NrLmxlZ2FjeUxpbmVMYXlvdXQoKS0+cG9zaXRp
b25OZXdGbG9hdE9uTGluZShuZXdGbG9hdCwgbGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSwgbGlu
ZUluZm8sIHdpZHRoKTsKICAgICB9CiAKICAgICBSZW5kZXJCbG9ja0Zsb3cmIG1fYmxvY2s7Cg==
</data>
<flag name="commit-queue"
          id="451634"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430240</attachid>
            <date>2021-06-01 02:11:27 -0700</date>
            <delta_ts>2021-06-01 06:58:32 -0700</delta_ts>
            <desc>patch</desc>
            <filename>legacy-line-layout-rename-2.patch</filename>
            <type>text/plain</type>
            <size>55429</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyOTM5MmUzODA1MTEuLjMyMWYwYjAwODU1YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDEyNSBAQAorMjAyMS0wNi0wMSAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5j
b20+CisKKyAgICAgICAgUmVuYW1lIENvbXBsZXhMaW5lTGF5b3V0IHRvIExlZ2FjeUxpbmVMYXlv
dXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjQ4
MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNpbmNl
IHdlIG5vdyBoYW5kbGUgbW9zdCBpbmxpbmUgY29udGVudCB3aXRoIExGQywgcmVuYW1lIHRoZSBs
ZWdhY3kgcGF0aCBhcyAibGVnYWN5Ii4KKworICAgICAgICAqIEhlYWRlcnMuY21ha2U6CisgICAg
ICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIGxheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbklu
bGluZUNvbnRlbnRCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dEludGVncmF0
aW9uOjpsaW5lT3ZlcmZsb3dXaWR0aCk6CisgICAgICAgICogcmVuZGVyaW5nL0lubGluZUl0ZXJh
dG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpJc29sYXRlVHJhY2tlcjo6YWRkRmFrZVJ1bklmTmVj
ZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUJpZGlSZXNvbHZlcjo6YXBwZW5kUnVu
SW50ZXJuYWwpOgorICAgICAgICAqIHJlbmRlcmluZy9MZWdhY3lMaW5lTGF5b3V0LmNwcDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Db21wbGV4TGluZUxheW91dC5jcHAu
CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lMaW5lTGF5b3V0OjpMZWdhY3lMaW5lTGF5b3V0KToK
KyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUxpbmVMYXlvdXQ6On5MZWdhY3lMaW5lTGF5b3V0KToK
KyAgICAgICAgKFdlYkNvcmU6OmRldGVybWluZURpcmVjdGlvbmFsaXR5KToKKyAgICAgICAgKFdl
YkNvcmU6OmNyZWF0ZVJ1bik6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lMaW5lTGF5b3V0Ojph
cHBlbmRSdW5zRm9yT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUxpbmVMYXlvdXQ6
OmNyZWF0ZVJvb3RJbmxpbmVCb3gpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5TGluZUxheW91
dDo6Y3JlYXRlQW5kQXBwZW5kUm9vdElubGluZUJveCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdh
Y3lMaW5lTGF5b3V0OjpjcmVhdGVJbmxpbmVCb3hGb3JSZW5kZXJlcik6CisgICAgICAgIChXZWJD
b3JlOjpkaXJ0eUxpbmVCb3hlc0ZvclJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcmVu
dElzQ29uc3RydWN0ZWRPckhhdmVOZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUxpbmVM
YXlvdXQ6OmNyZWF0ZUxpbmVCb3hlcyk6CisgICAgICAgIChXZWJDb3JlOjplbmRzV2l0aEhUTUxT
cGFjZXMpOgorICAgICAgICAoV2ViQ29yZTo6cmVhY2hlZEVuZE9mVGV4dFJlbmRlcmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxlZ2FjeUxpbmVMYXlvdXQ6OmNvbnN0cnVjdExpbmUpOgorICAgICAg
ICAoV2ViQ29yZTo6TGVnYWN5TGluZUxheW91dDo6dGV4dEFsaWdubWVudEZvckxpbmUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlTG9naWNhbFdpZHRoRm9yTGVmdEFsaWduZWRCbG9j
ayk6CisgICAgICAgIChXZWJDb3JlOjp1cGRhdGVMb2dpY2FsV2lkdGhGb3JSaWdodEFsaWduZWRC
bG9jayk6CisgICAgICAgIChXZWJDb3JlOjp1cGRhdGVMb2dpY2FsV2lkdGhGb3JDZW50ZXJBbGln
bmVkQmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5TGluZUxheW91dDo6c2V0TWFyZ2lu
c0ZvclJ1YnlSdW4pOgorICAgICAgICAoV2ViQ29yZTo6c2V0TG9naWNhbFdpZHRoRm9yVGV4dFJ1
bik6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lMaW5lTGF5b3V0Ojp1cGRhdGVSdWJ5Rm9ySnVz
dGlmaWVkVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lMaW5lTGF5b3V0Ojpjb21wdXRl
RXhwYW5zaW9uRm9ySnVzdGlmaWVkVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lMaW5l
TGF5b3V0Ojp1cGRhdGVMb2dpY2FsV2lkdGhGb3JBbGlnbm1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6dXBkYXRlTG9naWNhbElubGluZVBvc2l0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpMZWdh
Y3lMaW5lTGF5b3V0Ojpjb21wdXRlSW5saW5lRGlyZWN0aW9uUG9zaXRpb25zRm9yTGluZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpleHBhbnNpb25CZWhhdmlvckZvcklubGluZVRleHRCb3gpOgorICAg
ICAgICAoV2ViQ29yZTo6YXBwbHlFeHBhbnNpb25CZWhhdmlvcik6CisgICAgICAgIChXZWJDb3Jl
OjppbmxpbmVBbmNlc3Rvckhhc1N0YXJ0Qm9yZGVyUGFkZGluZ09yTWFyZ2luKToKKyAgICAgICAg
KFdlYkNvcmU6OmlubGluZUFuY2VzdG9ySGFzRW5kQm9yZGVyUGFkZGluZ09yTWFyZ2luKToKKyAg
ICAgICAgKFdlYkNvcmU6OmlzTGFzdEluRmxvd1J1bik6CisgICAgICAgIChXZWJDb3JlOjpMZWdh
Y3lMaW5lTGF5b3V0Ojpjb21wdXRlSW5saW5lRGlyZWN0aW9uUG9zaXRpb25zRm9yU2VnbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lMaW5lTGF5b3V0OjpyZW1vdmVJbmxpbmVCb3ggY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5TGluZUxheW91dDo6Y29tcHV0ZUJsb2NrRGly
ZWN0aW9uUG9zaXRpb25zRm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjppc0NvbGxhcHNpYmxl
U3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZEZpcnN0VHJhaWxpbmdTcGFjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpMZWdhY3lMaW5lTGF5b3V0OjpoYW5kbGVUcmFpbGluZ1NwYWNlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpMZWdhY3lMaW5lTGF5b3V0OjphcHBlbmRGbG9hdGluZ09iamVjdFRv
TGFzdExpbmUpOgorICAgICAgICAoV2ViQ29yZTo6bm90aWZ5UmVzb2x2ZXJUb1Jlc3VtZUluSXNv
bGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRVcFJlc29sdmVyVG9SZXN1bWVJbklzb2xhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0QmlkaVJ1bnNGb3JTZWdtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxlZ2FjeUxpbmVMYXlvdXQ6OmNyZWF0ZUxpbmVCb3hlc0Zyb21CaWRpUnVu
cyk6CisgICAgICAgIChXZWJDb3JlOjpkZWxldGVMaW5lUmFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6cmVwYWludERpcnR5RmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUxpbmVMYXlv
dXQ6OmxheW91dFJ1bnNBbmRGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5TGluZUxh
eW91dDo6cmVzdGFydExheW91dFJ1bnNBbmRGbG9hdHNJblJhbmdlKToKKyAgICAgICAgKFdlYkNv
cmU6OkxlZ2FjeUxpbmVMYXlvdXQ6OmxheW91dFJ1bnNBbmRGbG9hdHNJblJhbmdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxlZ2FjeUxpbmVMYXlvdXQ6OnJlYXR0YWNoQ2xlYW5MaW5lRmxvYXRzKToK
KyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUxpbmVMYXlvdXQ6OmxpbmtUb0VuZExpbmVJZk5lZWRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lMaW5lTGF5b3V0OjpsYXlvdXRMaW5lQm94ZXMp
OgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5TGluZUxheW91dDo6Y2hlY2tGbG9hdEluQ2xlYW5M
aW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUxpbmVMYXlvdXQ6OmRldGVybWluZVN0YXJ0
UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5TGluZUxheW91dDo6ZGV0ZXJtaW5l
RW5kUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5TGluZUxheW91dDo6Y2hlY2tQ
YWdpbmF0aW9uQW5kRmxvYXRzQXRFbmRMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUxp
bmVMYXlvdXQ6OmxpbmVXaWR0aEZvclBhZ2luYXRlZExpbmVDaGFuZ2VkIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxlZ2FjeUxpbmVMYXlvdXQ6Om1hdGNoZWRFbmRMaW5lKToKKyAgICAgICAg
KFdlYkNvcmU6OkxlZ2FjeUxpbmVMYXlvdXQ6OmFkZE92ZXJmbG93RnJvbUlubGluZUNoaWxkcmVu
KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUxpbmVMYXlvdXQ6OmxpbmVDb3VudCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lMaW5lTGF5b3V0OjpsaW5lQ291bnRVbnRpbCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lMaW5lTGF5b3V0OjpkZWxldGVFbGxpcHNpc0xp
bmVCb3hlcyk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lMaW5lTGF5b3V0OjpjaGVja0xpbmVz
Rm9yVGV4dE92ZXJmbG93KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUxpbmVMYXlvdXQ6OnBv
c2l0aW9uTmV3RmxvYXRPbkxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5TGluZUxheW91
dDo6dXBkYXRlRnJhZ21lbnRGb3JMaW5lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2Fj
eUxpbmVMYXlvdXQ6OnN0eWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUxpbmVM
YXlvdXQ6OmxheW91dENvbnRleHQgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9MZWdhY3lM
aW5lTGF5b3V0Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ29tcGxl
eExpbmVMYXlvdXQuaC4KKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUxpbmVMYXlvdXQ6OmxpbmVC
b3hlcyk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lMaW5lTGF5b3V0OjpsaW5lQm94ZXMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5TGluZUxheW91dDo6Zmlyc3RSb290Qm94IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUxpbmVMYXlvdXQ6Omxhc3RSb290Qm94IGNv
bnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6d2lsbEJlRGVzdHJveWVkKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6bGF5b3V0SW5saW5lQ2hpbGRyZW4pOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpzdGFydEFsaWduZWRPZmZzZXRGb3JMaW5lKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6YWRqdXN0TGluZVBvc2l0aW9uRm9yUGFn
aW5hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OnN0eWxlRGlkQ2hh
bmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6aGl0VGVzdElubGluZUNo
aWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6YWRkT3ZlcmZsb3dG
cm9tSW5saW5lQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93Ojpp
bmxpbmVCbG9ja0Jhc2VsaW5lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
Rmxvdzo6bGluZUNvdW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxv
dzo6cGFpbnRJbmxpbmVDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zs
b3c6Omhhc0xpbmVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6
ZW5zdXJlTGluZUJveGVzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93Lmg6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmZpcnN0Um9vdEJveCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6Omxhc3RSb290Qm94IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6aGFzTGVnYWN5TGluZUxheW91dCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmxlZ2FjeUxpbmVMYXlv
dXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpsZWdhY3lMaW5l
TGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6aGFzQ29tcGxleExp
bmVMYXlvdXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tG
bG93Ojpjb21wbGV4TGluZUxheW91dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9ja0Zsb3c6OmNvbXBsZXhMaW5lTGF5b3V0KTogRGVsZXRlZC4KKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0
Ojp1c2VzTGVnYWN5TGluZUxheW91dFBhdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGV4dDo6dXNlc0NvbXBsZXhMaW5lTGF5b3V0UGF0aCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRleHQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUm9vdElu
bGluZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSb290SW5saW5lQm94OjpyZW1vdmVMaW5l
Qm94RnJvbVJlbmRlck9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSb290SW5saW5lQm94Ojpl
eHRyYWN0TGluZUJveEZyb21SZW5kZXJPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6Um9vdElu
bGluZUJveDo6YXR0YWNoTGluZUJveFRvUmVuZGVyT2JqZWN0KToKKyAgICAgICAgKiByZW5kZXJp
bmcvbGluZS9MaW5lQnJlYWtlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMaW5lQnJlYWtlcjo6
c2tpcExlYWRpbmdXaGl0ZXNwYWNlKToKKyAgICAgICAgKiByZW5kZXJpbmcvbGluZS9MaW5lQnJl
YWtlci5oOgorICAgICAgICAoV2ViQ29yZTo6TGluZUJyZWFrZXI6OnBvc2l0aW9uTmV3RmxvYXRP
bkxpbmUpOgorCiAyMDIxLTA1LTMxICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbV2ViWFJdIEF0dGFjaCBJT1N1cmZhY2UgdG8gV2ViWFJPcGFxdWVGcmFtZWJ1ZmZl
cgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZSBiL1NvdXJjZS9XZWJD
b3JlL0hlYWRlcnMuY21ha2UKaW5kZXggOWIwYWU3ZmU0Yjg4Li5kMTYyYThiN2I1MTIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUv
SGVhZGVycy5jbWFrZQpAQCAtMTUxNyw3ICsxNTE3LDYgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9G
UkFNRVdPUktfSEVBREVSUwogICAgIHJlbmRlcmluZy9CcmVha0xpbmVzLmgKICAgICByZW5kZXJp
bmcvQ2xpcFBhdGhPcGVyYXRpb24uaAogICAgIHJlbmRlcmluZy9DbGlwUmVjdC5oCi0gICAgcmVu
ZGVyaW5nL0NvbXBsZXhMaW5lTGF5b3V0LmgKICAgICByZW5kZXJpbmcvRXZlbnRSZWdpb24uaAog
ICAgIHJlbmRlcmluZy9GbG9hdGluZ09iamVjdHMuaAogICAgIHJlbmRlcmluZy9HYXBSZWN0cy5o
CkBAIC0xNTMxLDYgKzE1MzAsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFE
RVJTCiAgICAgcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAogICAgIHJlbmRlcmluZy9MYXllckFu
Y2VzdG9yQ2xpcHBpbmdTdGFjay5oCiAgICAgcmVuZGVyaW5nL0xheWVyRnJhZ21lbnQuaAorICAg
IHJlbmRlcmluZy9MZWdhY3lMaW5lTGF5b3V0LmgKICAgICByZW5kZXJpbmcvTWFya2VkVGV4dC5o
CiAgICAgcmVuZGVyaW5nL09yZGVySXRlcmF0b3IuaAogICAgIHJlbmRlcmluZy9PdmVybGFwVGVz
dFJlcXVlc3RDbGllbnQuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQg
Yi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCBlYTkwZjI3ZWIxODYuLmMzNGQ5ZDY5
ZDkxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNl
L1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTIyMzksNyArMjIzOSw2IEBAIHJlbmRlcmluZy9CcmVh
a0xpbmVzLmNwcAogcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHAKIHJlbmRlcmluZy9DYXJldFJlY3RD
b21wdXRhdGlvbi5jcHAKIHJlbmRlcmluZy9DbGlwUmVjdC5jcHAKLXJlbmRlcmluZy9Db21wbGV4
TGluZUxheW91dC5jcHAKIHJlbmRlcmluZy9Db250ZW50ZnVsUGFpbnRDaGVja2VyLmNwcAogcmVu
ZGVyaW5nL0NvdW50ZXJOb2RlLmNwcAogcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcApAQCAtMjI2
NSw2ICsyMjY0LDcgQEAgcmVuZGVyaW5nL0xheWVyQW5jZXN0b3JDbGlwcGluZ1N0YWNrLmNwcAog
cmVuZGVyaW5nL0xheWVyT3ZlcmxhcE1hcC5jcHAKIHJlbmRlcmluZy9MYXlvdXREaXNhbGxvd2Vk
U2NvcGUuY3BwCiByZW5kZXJpbmcvTGF5b3V0UmVwYWludGVyLmNwcAorcmVuZGVyaW5nL0xlZ2Fj
eUxpbmVMYXlvdXQuY3BwCiByZW5kZXJpbmcvTWFya2VkVGV4dC5jcHAKIHJlbmRlcmluZy9NYXJr
ZWRUZXh0U3R5bGUuY3BwCiByZW5kZXJpbmcvT3JkZXJJdGVyYXRvci5jcHAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBjOTliZmNi
OTNiNTQuLjE3Y2ZkMjNlNDk2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNTI5MCw3ICs1MjkwLDcgQEAKIAkJRTRFMzlBRkIx
MzMwRUZBODAwM0FCMjc0IC8qIExlZ2FjeVRpbGVMYXllclBvb2wuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0RTM5QUZBMTMzMEVGQTgwMDNBQjI3NCAv
KiBMZWdhY3lUaWxlTGF5ZXJQb29sLmggKi87IH07CiAJCUU0RThCNEVDMjE2Qjc5RTUwMEI4ODM0
RCAvKiBTeXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRFOEI0RUEyMTZCNzlFNTAwQjg4MzREIC8qIFN5c3Rl
bUZvbnREYXRhYmFzZUNvcmVUZXh0LmggKi87IH07CiAJCUU0RThCNEY1MjE2Qjk1NjUwMEI4ODM0
RCAvKiBGb250Q2FzY2FkZURlc2NyaXB0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFNEU4QjRGMjIxNkI4QjYwMDBCODgzNEQgLyogRm9udENhc2Nh
ZGVEZXNjcmlwdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07Ci0JCUU0RTk0RDYxMjJGRjE1OEEwMEREMTkxRiAvKiBDb21wbGV4TGluZUxheW91dC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRBMUFDNzgy
MkZBRkQ1MDAwMTdCNzVCIC8qIENvbXBsZXhMaW5lTGF5b3V0LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRTRFOTRENjEyMkZGMTU4QTAwREQxOTFG
IC8qIExlZ2FjeUxpbmVMYXlvdXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEU0QTFBQzc4MjJGQUZENTAwMDE3Qjc1QiAvKiBMZWdhY3lMaW5lTGF5b3V0
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTRG
MEJFMzEyNTcxMkY2RTAwOUU3NDMxIC8qIENhcmV0UmVjdENvbXB1dGF0aW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEYwQkUyRTI1NzEwQTc1MDA5
RTc0MzEgLyogQ2FyZXRSZWN0Q29tcHV0YXRpb24uaCAqLzsgfTsKIAkJRTRGMzhEMUIyNjI2RjEz
QjAwN0IxMDY0IC8qIERlZmF1bHRSZXNvdXJjZUxvYWRQcmlvcml0eS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRGMzhEMTkyNjI2RjEzQjAwN0IxMDY0
IC8qIERlZmF1bHRSZXNvdXJjZUxvYWRQcmlvcml0eS5oICovOyB9OwogCQlFNEY5RUVGMzE1NkRB
MDA3MDBEMjNFN0UgLyogU3R5bGVTaGVldENvbnRlbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEY5RUVGMTE1NkQ4NEM0MDBEMjNFN0UgLyogU3R5
bGVTaGVldENvbnRlbnRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKQEAgLTE0NDgzLDcgKzE0NDgzLDcgQEAKIAkJQkNFQTQ3N0MwOTdDQUFDODAwOTRD
OUU0IC8qIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNFQTQ3N0QwOTdDQUFDODAwOTRDOUU0IC8qIENT
U0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUJDRUE0NzhDMDk3Q0FBQzgwMDk0QzlFNCAvKiBDU1NWYWx1ZUtleXdvcmRzLmlu
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBDU1NWYWx1ZUtleXdvcmRzLmluOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlCQ0VBNDgxMzA5N0Q5MzAyMDA5NEM5RTQgLyogQ29tcGxleExp
bmVMYXlvdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbXBs
ZXhMaW5lTGF5b3V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNFQTQ4MTMw
OTdEOTMwMjAwOTRDOUU0IC8qIExlZ2FjeUxpbmVMYXlvdXQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExlZ2FjeUxpbmVMYXlvdXQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlCQ0VBNDgxNTA5N0Q5MzAyMDA5NEM5RTQgLyogQnJlYWtMaW5lcy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQnJlYWtMaW5lcy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDRUE0ODE2MDk3RDkzMDIwMDk0QzlFNCAv
KiBCcmVha0xpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCcmVha0xp
bmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDRUE0ODFBMDk3RDkzMDIwMDk0
QzlFNCAvKiBJbmxpbmVUZXh0Qm94LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBJbmxpbmVUZXh0Qm94LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTE2NjI5LDcgKzE2NjI5LDcgQEAKIAkJRTRBMDA3ODIxQjgyMEVDODAwMkM1QTZFIC8qIERhdGFV
UkxEZWNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERhdGFVUkxEZWNv
ZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0QTAwNzg0MUI4MjBFRDMwMDJD
NUE2RSAvKiBEYXRhVVJMRGVjb2Rlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBEYXRhVVJMRGVjb2Rlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUU0QTE4MjJGMUYxM0JFNTgwMEZFRjY5OCAvKiBTdHlsZUludmFsaWRhdGlvbkZ1bmN0aW9ucy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTdHlsZUludmFsaWRhdGlvbkZ1bmN0aW9ucy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlFNEExQUM3ODIyRkFGRDUwMDAxN0I3NUIgLyogQ29tcGxleExp
bmVMYXlvdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tcGxleExpbmVM
YXlvdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTRBMUFDNzgyMkZBRkQ1MDAw
MTdCNzVCIC8qIExlZ2FjeUxpbmVMYXlvdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTGVnYWN5TGluZUxheW91dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
NEE2NjRDNDI1MjFCNzc3MDA3MDgxREMgLyogTGF5b3V0SW50ZWdyYXRpb25SdW5JdGVyYXRvck1v
ZGVyblBhdGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF5b3V0SW50ZWdy
YXRpb25SdW5JdGVyYXRvck1vZGVyblBhdGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRTRBNjY0QzUyNTIxQjc3ODAwNzA4MURDIC8qIExheW91dEludGVncmF0aW9uUnVuSXRlcmF0
b3JMZWdhY3lQYXRoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91dElu
dGVncmF0aW9uUnVuSXRlcmF0b3JMZWdhY3lQYXRoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUU0QTY2NEM2MjUyMUI3NzgwMDcwODFEQyAvKiBMYXlvdXRJbnRlZ3JhdGlvblJ1bkl0
ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91dEludGVncmF0
aW9uUnVuSXRlcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTMwMTQ2LDgg
KzMwMTQ2LDYgQEAKIAkJCQk1ODAzNzE1RjFBNjZGMDBBMDBCQUY1MTkgLyogQ2xpcFJlY3QuY3Bw
ICovLAogCQkJCTU4MDM3MTYwMUE2NkYwMEEwMEJBRjUxOSAvKiBDbGlwUmVjdC5oICovLAogCQkJ
CUJDREQ0NTREMTIzNkM5NUMwMDlBNzk4NSAvKiBDb2x1bW5JbmZvLmggKi8sCi0JCQkJQkNFQTQ4
MTMwOTdEOTMwMjAwOTRDOUU0IC8qIENvbXBsZXhMaW5lTGF5b3V0LmNwcCAqLywKLQkJCQlFNEEx
QUM3ODIyRkFGRDUwMDAxN0I3NUIgLyogQ29tcGxleExpbmVMYXlvdXQuaCAqLywKIAkJCQlDQTdF
OUI0ODI0MzYxREM1MDA0RTg5RjYgLyogQ29udGVudGZ1bFBhaW50Q2hlY2tlci5jcHAgKi8sCiAJ
CQkJQ0E3RTlCNDcyNDM2MURDNTAwNEU4OUY2IC8qIENvbnRlbnRmdWxQYWludENoZWNrZXIuaCAq
LywKIAkJCQk5MzkyRjE0RjBBRDE4NjIzMDA2OTFCRDQgLyogQ291bnRlck5vZGUuY3BwICovLApA
QCAtMzAyMDUsNiArMzAyMDMsOCBAQAogCQkJCTlCRDFGNjgwMUYwNDYyQjgwMDFDOUNERCAvKiBM
YXlvdXREaXNhbGxvd2VkU2NvcGUuaCAqLywKIAkJCQlBMTIwQUNBMTEzRjk5ODQ2MDBGRTRBQzcg
LyogTGF5b3V0UmVwYWludGVyLmNwcCAqLywKIAkJCQlBMTIwQUNBMDEzRjk5ODM3MDBGRTRBQzcg
LyogTGF5b3V0UmVwYWludGVyLmggKi8sCisJCQkJQkNFQTQ4MTMwOTdEOTMwMjAwOTRDOUU0IC8q
IExlZ2FjeUxpbmVMYXlvdXQuY3BwICovLAorCQkJCUU0QTFBQzc4MjJGQUZENTAwMDE3Qjc1QiAv
KiBMZWdhY3lMaW5lTGF5b3V0LmggKi8sCiAJCQkJOUJBMjczRjMxNzIyMDZCQjAwOTdDRTQ3IC8q
IExvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXMuaCAqLywKIAkJCQlDRTE4NjY0MjFGNzJFNUI0
MDBBMENBQjYgLyogTWFya2VkVGV4dC5jcHAgKi8sCiAJCQkJQ0UxODY2NDMxRjcyRTVCNDAwQTBD
QUI2IC8qIE1hcmtlZFRleHQuaCAqLywKQEAgLTMyMDM5LDcgKzMyMDM5LDcgQEAKIAkJCQlFMUZF
MTM3NTE4NDAyQTY3MDA4OTJGMTMgLyogQ29tbW9uQ3J5cHRvVXRpbGl0aWVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjYwRjMyQjFERkJCMTA3MDA0MTZENkMgLyogQ29tbW9uVk0uaCBpbiBIZWFk
ZXJzICovLAogCQkJCTdDOTNGMzRBMUFBNkJBNUUwMEE5OEJBQiAvKiBDb21waWxlZENvbnRlbnRF
eHRlbnNpb24uaCBpbiBIZWFkZXJzICovLAotCQkJCUU0RTk0RDYxMjJGRjE1OEEwMEREMTkxRiAv
KiBDb21wbGV4TGluZUxheW91dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTRFOTRENjEyMkZGMTU4
QTAwREQxOTFGIC8qIExlZ2FjeUxpbmVMYXlvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyRjRF
NzhDMUU0NUMzRUYwMDZENzEwNSAvKiBDb21wbGV4VGV4dENvbnRyb2xsZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUU0QkE1MDkwMUJDRkJEOTUwMEUzNEVGNyAvKiBDb21wb3NlZFRyZWVBbmNlc3Rv
ckl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDRGQTE4NTFCQ0E2QjVBMDA5MUI2RUYg
LyogQ29tcG9zZWRUcmVlSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uSW5saW5lQ29u
dGVudEJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91
dEludGVncmF0aW9uSW5saW5lQ29udGVudEJ1aWxkZXIuY3BwCmluZGV4IDRmZjdjM2QwZTdmMC4u
MDM4NGM5Y2Y3NzRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRp
b24vTGF5b3V0SW50ZWdyYXRpb25JbmxpbmVDb250ZW50QnVpbGRlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uSW5saW5lQ29udGVu
dEJ1aWxkZXIuY3BwCkBAIC01OSw3ICs1OSw3IEBAIGlubGluZSBMYXlvdXQ6OklubGluZUxpbmVH
ZW9tZXRyeTo6RW5jbG9zaW5nVG9wQW5kQm90dG9tIG9wZXJhdG9yKyhjb25zdCBMYXlvdXQ6CiAK
IGlubGluZSBzdGF0aWMgZmxvYXQgbGluZU92ZXJmbG93V2lkdGgoY29uc3QgUmVuZGVyQmxvY2tG
bG93JiBmbG93LCBJbmxpbmVMYXlvdXRVbml0IGxpbmVCb3hMb2dpY2FsV2lkdGgsIElubGluZUxh
eW91dFVuaXQgbGluZUNvbnRlbnRMb2dpY2FsV2lkdGgpCiB7Ci0gICAgLy8gRklYTUU6IEl0J3Mg
dGhlIGNvcHkgb2YgdGhlIGxldHMtYWRqdXN0LW92ZXJmbG93LWZvci10aGUtY2FyZXQgYmVoYXZp
b3IgZnJvbSBDb21wbGV4TGluZUxheW91dDo6YWRkT3ZlcmZsb3dGcm9tSW5saW5lQ2hpbGRyZW4u
CisgICAgLy8gRklYTUU6IEl0J3MgdGhlIGNvcHkgb2YgdGhlIGxldHMtYWRqdXN0LW92ZXJmbG93
LWZvci10aGUtY2FyZXQgYmVoYXZpb3IgZnJvbSBMZWdhY3lMaW5lTGF5b3V0OjphZGRPdmVyZmxv
d0Zyb21JbmxpbmVDaGlsZHJlbi4KICAgICBhdXRvIGVuZFBhZGRpbmcgPSBmbG93Lmhhc092ZXJm
bG93Q2xpcCgpID8gZmxvdy5wYWRkaW5nRW5kKCkgOiAwX2x1OwogICAgIGlmICghZW5kUGFkZGlu
ZykKICAgICAgICAgZW5kUGFkZGluZyA9IGZsb3cuZW5kUGFkZGluZ1dpZHRoRm9yQ2FyZXQoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVJdGVyYXRvci5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUl0ZXJhdG9yLmgKaW5kZXggNjhlM2FjMmZm
YzkxLi4wZDZkMDZlNzI4MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9J
bmxpbmVJdGVyYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVJdGVy
YXRvci5oCkBAIC01MzcsNyArNTM3LDcgQEAgcHVibGljOgogICAgICAgICAgICAgYWRkUGxhY2Vo
b2xkZXJSdW5Gb3JJc29sYXRlZElubGluZShyZXNvbHZlciwgb2JqLCBwb3MsIHJvb3QpOwogICAg
ICAgICB9CiAgICAgICAgIG1faGF2ZUFkZGVkRmFrZVJ1bkZvclJvb3RJc29sYXRlID0gdHJ1ZTsK
LSAgICAgICAgQ29tcGxleExpbmVMYXlvdXQ6OmFwcGVuZFJ1bnNGb3JPYmplY3QobnVsbHB0ciwg
cG9zLCBlbmQsIG9iaiwgcmVzb2x2ZXIpOworICAgICAgICBMZWdhY3lMaW5lTGF5b3V0OjphcHBl
bmRSdW5zRm9yT2JqZWN0KG51bGxwdHIsIHBvcywgZW5kLCBvYmosIHJlc29sdmVyKTsKICAgICB9
CiAKIHByaXZhdGU6CkBAIC01NTksNyArNTU5LDcgQEAgaW5saW5lIHZvaWQgSW5saW5lQmlkaVJl
c29sdmVyOjphcHBlbmRSdW5JbnRlcm5hbCgpCiAgICAgICAgICAgICBpZiAoaXNvbGF0ZVRyYWNr
ZXIuaW5Jc29sYXRlKCkpCiAgICAgICAgICAgICAgICAgaXNvbGF0ZVRyYWNrZXIuYWRkRmFrZVJ1
bklmTmVjZXNzYXJ5KCpvYmosIHN0YXJ0LCBvYmotPmxlbmd0aCgpLCAqbV9zb3Iucm9vdCgpLCAq
dGhpcyk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgQ29tcGxleExpbmVMYXlv
dXQ6OmFwcGVuZFJ1bnNGb3JPYmplY3QoJm1fcnVucywgc3RhcnQsIG9iai0+bGVuZ3RoKCksICpv
YmosICp0aGlzKTsKKyAgICAgICAgICAgICAgICBMZWdhY3lMaW5lTGF5b3V0OjphcHBlbmRSdW5z
Rm9yT2JqZWN0KCZtX3J1bnMsIHN0YXJ0LCBvYmotPmxlbmd0aCgpLCAqb2JqLCAqdGhpcyk7CiAg
ICAgICAgICAgICAvLyBGSVhNRTogc3RhcnQvb2JqIHNob3VsZCBiZSBhbiBJbmxpbmVJdGVyYXRv
ciBpbnN0ZWFkIG9mIHR3byBzZXBhcmF0ZSB2YXJpYWJsZXMuCiAgICAgICAgICAgICBzdGFydCA9
IDA7CiAgICAgICAgICAgICBvYmogPSBiaWRpTmV4dFNraXBwaW5nRW1wdHlJbmxpbmVzKCptX3Nv
ci5yb290KCksIG9iaiwgJmlzb2xhdGVUcmFja2VyKTsKQEAgLTU3NSw3ICs1NzUsNyBAQCBpbmxp
bmUgdm9pZCBJbmxpbmVCaWRpUmVzb2x2ZXI6OmFwcGVuZFJ1bkludGVybmFsKCkKICAgICAgICAg
ICAgIGlmIChpc29sYXRlVHJhY2tlci5pbklzb2xhdGUoKSkKICAgICAgICAgICAgICAgICBpc29s
YXRlVHJhY2tlci5hZGRGYWtlUnVuSWZOZWNlc3NhcnkoKm9iaiwgc3RhcnQsIG9iai0+bGVuZ3Ro
KCksICptX3Nvci5yb290KCksICp0aGlzKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBDb21wbGV4TGluZUxheW91dDo6YXBwZW5kUnVuc0Zvck9iamVjdCgmbV9ydW5zLCBzdGFy
dCwgZW5kLCAqb2JqLCAqdGhpcyk7CisgICAgICAgICAgICAgICAgTGVnYWN5TGluZUxheW91dDo6
YXBwZW5kUnVuc0Zvck9iamVjdCgmbV9ydW5zLCBzdGFydCwgZW5kLCAqb2JqLCAqdGhpcyk7CiAg
ICAgICAgIH0KIAogICAgICAgICBtX2Vvci5pbmNyZW1lbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9Db21wbGV4TGluZUxheW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvTGVnYWN5TGluZUxheW91dC5jcHAKc2ltaWxhcml0eSBpbmRleCA5NSUKcmVu
YW1lIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NvbXBsZXhMaW5lTGF5b3V0LmNwcApy
ZW5hbWUgdG8gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUxpbmVMYXlvdXQuY3BwCmlu
ZGV4IGQwN2MyOGQzMTA3MS4uNDVmNjNhZmQ5MWVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvQ29tcGxleExpbmVMYXlvdXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9MZWdhY3lMaW5lTGF5b3V0LmNwcApAQCAtMjMsNyArMjMsNyBAQAogICovCiAKICNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDb21wbGV4TGluZUxheW91dC5oIgorI2luY2x1
ZGUgIkxlZ2FjeUxpbmVMYXlvdXQuaCIKIAogI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKICNp
bmNsdWRlICJCaWRpUmVzb2x2ZXIuaCIKQEAgLTUzLDEyICs1MywxMiBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLUNvbXBsZXhMaW5lTGF5b3V0OjpDb21wbGV4TGluZUxheW91dChSZW5kZXJC
bG9ja0Zsb3cmIGZsb3cpCitMZWdhY3lMaW5lTGF5b3V0OjpMZWdhY3lMaW5lTGF5b3V0KFJlbmRl
ckJsb2NrRmxvdyYgZmxvdykKICAgICA6IG1fZmxvdyhmbG93KQogewogfQogCi1Db21wbGV4TGlu
ZUxheW91dDo6fkNvbXBsZXhMaW5lTGF5b3V0KCkKK0xlZ2FjeUxpbmVMYXlvdXQ6On5MZWdhY3lM
aW5lTGF5b3V0KCkKIHsKICAgICBpZiAobV9mbG93LmNvbnRhaW5zRmxvYXRzKCkpCiAgICAgICAg
IG1fZmxvdy5mbG9hdGluZ09iamVjdHMoKS0+Y2xlYXJMaW5lQm94VHJlZVBvaW50ZXJzKCk7CkBA
IC05MSw3ICs5MSw3IEBAIGlubGluZSBzdGQ6OnVuaXF1ZV9wdHI8QmlkaVJ1bj4gY3JlYXRlUnVu
KGludCBzdGFydCwgaW50IGVuZCwgUmVuZGVyT2JqZWN0JiBvYmosCiAgICAgcmV0dXJuIG1ha2VV
bmlxdWU8QmlkaVJ1bj4oc3RhcnQsIGVuZCwgb2JqLCByZXNvbHZlci5jb250ZXh0KCksIHJlc29s
dmVyLmRpcigpKTsKIH0KIAotdm9pZCBDb21wbGV4TGluZUxheW91dDo6YXBwZW5kUnVuc0Zvck9i
amVjdChCaWRpUnVuTGlzdDxCaWRpUnVuPiogcnVucywgaW50IHN0YXJ0LCBpbnQgZW5kLCBSZW5k
ZXJPYmplY3QmIG9iaiwgSW5saW5lQmlkaVJlc29sdmVyJiByZXNvbHZlcikKK3ZvaWQgTGVnYWN5
TGluZUxheW91dDo6YXBwZW5kUnVuc0Zvck9iamVjdChCaWRpUnVuTGlzdDxCaWRpUnVuPiogcnVu
cywgaW50IHN0YXJ0LCBpbnQgZW5kLCBSZW5kZXJPYmplY3QmIG9iaiwgSW5saW5lQmlkaVJlc29s
dmVyJiByZXNvbHZlcikKIHsKICAgICBpZiAoc3RhcnQgPiBlbmQgfHwgUmVuZGVyQmxvY2s6OnNo
b3VsZFNraXBDcmVhdGluZ1J1bnNGb3JPYmplY3Qob2JqKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MTMzLDcgKzEzMyw3IEBAIHZvaWQgQ29tcGxleExpbmVMYXlvdXQ6OmFwcGVuZFJ1bnNGb3JPYmpl
Y3QoQmlkaVJ1bkxpc3Q8QmlkaVJ1bj4qIHJ1bnMsIGludCBzdGFyCiAgICAgfQogfQogCi1zdGQ6
OnVuaXF1ZV9wdHI8Um9vdElubGluZUJveD4gQ29tcGxleExpbmVMYXlvdXQ6OmNyZWF0ZVJvb3RJ
bmxpbmVCb3goKQorc3RkOjp1bmlxdWVfcHRyPFJvb3RJbmxpbmVCb3g+IExlZ2FjeUxpbmVMYXlv
dXQ6OmNyZWF0ZVJvb3RJbmxpbmVCb3goKQogewogICAgIGlmIChpczxSZW5kZXJTVkdUZXh0Piht
X2Zsb3cpKSB7CiAgICAgICAgIGF1dG8gYm94ID0gbWFrZVVuaXF1ZTxTVkdSb290SW5saW5lQm94
Pihkb3duY2FzdDxSZW5kZXJTVkdUZXh0PihtX2Zsb3cpKTsKQEAgLTE0NCw3ICsxNDQsNyBAQCBz
dGQ6OnVuaXF1ZV9wdHI8Um9vdElubGluZUJveD4gQ29tcGxleExpbmVMYXlvdXQ6OmNyZWF0ZVJv
b3RJbmxpbmVCb3goKQogICAgIHJldHVybiBtYWtlVW5pcXVlPFJvb3RJbmxpbmVCb3g+KG1fZmxv
dyk7CiB9CiAKLVJvb3RJbmxpbmVCb3gqIENvbXBsZXhMaW5lTGF5b3V0OjpjcmVhdGVBbmRBcHBl
bmRSb290SW5saW5lQm94KCkKK1Jvb3RJbmxpbmVCb3gqIExlZ2FjeUxpbmVMYXlvdXQ6OmNyZWF0
ZUFuZEFwcGVuZFJvb3RJbmxpbmVCb3goKQogewogICAgIGF1dG8gbmV3Um9vdEJveCA9IGNyZWF0
ZVJvb3RJbmxpbmVCb3goKTsKICAgICBSb290SW5saW5lQm94KiByb290Qm94ID0gbmV3Um9vdEJv
eC5nZXQoKTsKQEAgLTE1OCw3ICsxNTgsNyBAQCBSb290SW5saW5lQm94KiBDb21wbGV4TGluZUxh
eW91dDo6Y3JlYXRlQW5kQXBwZW5kUm9vdElubGluZUJveCgpCiAgICAgcmV0dXJuIHJvb3RCb3g7
CiB9CiAKLUlubGluZUJveCogQ29tcGxleExpbmVMYXlvdXQ6OmNyZWF0ZUlubGluZUJveEZvclJl
bmRlcmVyKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGJvb2wgaXNPbmx5UnVuKQorSW5saW5lQm94
KiBMZWdhY3lMaW5lTGF5b3V0OjpjcmVhdGVJbmxpbmVCb3hGb3JSZW5kZXJlcihSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyLCBib29sIGlzT25seVJ1bikKIHsKICAgICBpZiAocmVuZGVyZXIgPT0gJm1f
ZmxvdykKICAgICAgICAgcmV0dXJuIGNyZWF0ZUFuZEFwcGVuZFJvb3RJbmxpbmVCb3goKTsKQEAg
LTIwNSw3ICsyMDUsNyBAQCBzdGF0aWMgYm9vbCBwYXJlbnRJc0NvbnN0cnVjdGVkT3JIYXZlTmV4
dChJbmxpbmVGbG93Qm94KiBwYXJlbnRCb3gpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1Jbmxp
bmVGbG93Qm94KiBDb21wbGV4TGluZUxheW91dDo6Y3JlYXRlTGluZUJveGVzKFJlbmRlck9iamVj
dCogb2JqLCBjb25zdCBMaW5lSW5mbyYgbGluZUluZm8sIElubGluZUJveCogY2hpbGRCb3gpCitJ
bmxpbmVGbG93Qm94KiBMZWdhY3lMaW5lTGF5b3V0OjpjcmVhdGVMaW5lQm94ZXMoUmVuZGVyT2Jq
ZWN0KiBvYmosIGNvbnN0IExpbmVJbmZvJiBsaW5lSW5mbywgSW5saW5lQm94KiBjaGlsZEJveCkK
IHsKICAgICAvLyBTZWUgaWYgd2UgaGF2ZSBhbiB1bmNvbnN0cnVjdGVkIGxpbmUgYm94IGZvciB0
aGlzIG9iamVjdCB0aGF0IGlzIGFsc28KICAgICAvLyB0aGUgbGFzdCBpdGVtIG9uIHRoZSBsaW5l
LgpAQCAtMjkwLDcgKzI5MCw3IEBAIHN0YXRpYyBib29sIHJlYWNoZWRFbmRPZlRleHRSZW5kZXJl
cihjb25zdCBCaWRpUnVuTGlzdDxCaWRpUnVuPiYgYmlkaVJ1bnMpCiAgICAgcmV0dXJuIGVuZHNX
aXRoSFRNTFNwYWNlcyh0ZXh0LmNoYXJhY3RlcnMxNigpLCBwb3NpdGlvbiwgbGVuZ3RoKTsKIH0K
IAotUm9vdElubGluZUJveCogQ29tcGxleExpbmVMYXlvdXQ6OmNvbnN0cnVjdExpbmUoQmlkaVJ1
bkxpc3Q8QmlkaVJ1bj4mIGJpZGlSdW5zLCBjb25zdCBMaW5lSW5mbyYgbGluZUluZm8pCitSb290
SW5saW5lQm94KiBMZWdhY3lMaW5lTGF5b3V0Ojpjb25zdHJ1Y3RMaW5lKEJpZGlSdW5MaXN0PEJp
ZGlSdW4+JiBiaWRpUnVucywgY29uc3QgTGluZUluZm8mIGxpbmVJbmZvKQogewogICAgIEFTU0VS
VChiaWRpUnVucy5maXJzdFJ1bigpKTsKIApAQCAtMzUzLDcgKzM1Myw3IEBAIFJvb3RJbmxpbmVC
b3gqIENvbXBsZXhMaW5lTGF5b3V0Ojpjb25zdHJ1Y3RMaW5lKEJpZGlSdW5MaXN0PEJpZGlSdW4+
JiBiaWRpUnVucywKICAgICByZXR1cm4gbGFzdFJvb3RCb3goKTsKIH0KIAotVGV4dEFsaWduTW9k
ZSBDb21wbGV4TGluZUxheW91dDo6dGV4dEFsaWdubWVudEZvckxpbmUoYm9vbCBlbmRzV2l0aFNv
ZnRCcmVhaykgY29uc3QKK1RleHRBbGlnbk1vZGUgTGVnYWN5TGluZUxheW91dDo6dGV4dEFsaWdu
bWVudEZvckxpbmUoYm9vbCBlbmRzV2l0aFNvZnRCcmVhaykgY29uc3QKIHsKICAgICBpZiAoYXV0
byBvdmVycmlkZUFsaWdubWVudCA9IG1fZmxvdy5vdmVycmlkZVRleHRBbGlnbm1lbnRGb3JMaW5l
KGVuZHNXaXRoU29mdEJyZWFrKSkKICAgICAgICAgcmV0dXJuICpvdmVycmlkZUFsaWdubWVudDsK
QEAgLTQ0OCw3ICs0NDgsNyBAQCBzdGF0aWMgdm9pZCB1cGRhdGVMb2dpY2FsV2lkdGhGb3JDZW50
ZXJBbGlnbmVkQmxvY2soYm9vbCBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uLAogICAgICAgICBsb2dp
Y2FsTGVmdCArPSB0b3RhbExvZ2ljYWxXaWR0aCA+IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCA/IChh
dmFpbGFibGVMb2dpY2FsV2lkdGggLSB0b3RhbExvZ2ljYWxXaWR0aCkgOiAoYXZhaWxhYmxlTG9n
aWNhbFdpZHRoIC0gdG90YWxMb2dpY2FsV2lkdGgpIC8gMiAtIHRyYWlsaW5nU3BhY2VXaWR0aDsK
IH0KIAotdm9pZCBDb21wbGV4TGluZUxheW91dDo6c2V0TWFyZ2luc0ZvclJ1YnlSdW4oQmlkaVJ1
biogcnVuLCBSZW5kZXJSdWJ5UnVuJiByZW5kZXJlciwgUmVuZGVyT2JqZWN0KiBwcmV2aW91c09i
amVjdCwgY29uc3QgTGluZUluZm8mIGxpbmVJbmZvKQordm9pZCBMZWdhY3lMaW5lTGF5b3V0Ojpz
ZXRNYXJnaW5zRm9yUnVieVJ1bihCaWRpUnVuKiBydW4sIFJlbmRlclJ1YnlSdW4mIHJlbmRlcmVy
LCBSZW5kZXJPYmplY3QqIHByZXZpb3VzT2JqZWN0LCBjb25zdCBMaW5lSW5mbyYgbGluZUluZm8p
CiB7CiAgICAgZmxvYXQgc3RhcnRPdmVyaGFuZzsKICAgICBmbG9hdCBlbmRPdmVyaGFuZzsKQEAg
LTU1Nyw3ICs1NTcsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0TG9naWNhbFdpZHRoRm9yVGV4
dFJ1bihSb290SW5saW5lQm94KiBsaW5lQm94LCBCaWRpUnVuKiBydQogICAgIH0KIH0KIAotdm9p
ZCBDb21wbGV4TGluZUxheW91dDo6dXBkYXRlUnVieUZvckp1c3RpZmllZFRleHQoUmVuZGVyUnVi
eVJ1biYgcnVieVJ1biwgQmlkaVJ1biYgciwgY29uc3QgVmVjdG9yPHVuc2lnbmVkLCAxNj4mIGV4
cGFuc2lvbk9wcG9ydHVuaXRpZXMsIHVuc2lnbmVkJiBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50
LCBmbG9hdCYgdG90YWxMb2dpY2FsV2lkdGgsIGZsb2F0IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCwg
c2l6ZV90JiBpKQordm9pZCBMZWdhY3lMaW5lTGF5b3V0Ojp1cGRhdGVSdWJ5Rm9ySnVzdGlmaWVk
VGV4dChSZW5kZXJSdWJ5UnVuJiBydWJ5UnVuLCBCaWRpUnVuJiByLCBjb25zdCBWZWN0b3I8dW5z
aWduZWQsIDE2PiYgZXhwYW5zaW9uT3Bwb3J0dW5pdGllcywgdW5zaWduZWQmIGV4cGFuc2lvbk9w
cG9ydHVuaXR5Q291bnQsIGZsb2F0JiB0b3RhbExvZ2ljYWxXaWR0aCwgZmxvYXQgYXZhaWxhYmxl
TG9naWNhbFdpZHRoLCBzaXplX3QmIGkpCiB7CiAgICAgaWYgKCFydWJ5UnVuLnJ1YnlCYXNlKCkg
fHwgIXJ1YnlSdW4ucnVieUJhc2UoKS0+Zmlyc3RSb290Qm94KCkgfHwgcnVieVJ1bi5ydWJ5QmFz
ZSgpLT5maXJzdFJvb3RCb3goKS0+bmV4dFJvb3RCb3goKSB8fCAhci5yZW5kZXJlcigpLnN0eWxl
KCkuY29sbGFwc2VXaGl0ZVNwYWNlKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTU5Nyw3ICs1OTcs
NyBAQCB2b2lkIENvbXBsZXhMaW5lTGF5b3V0Ojp1cGRhdGVSdWJ5Rm9ySnVzdGlmaWVkVGV4dChS
ZW5kZXJSdWJ5UnVuJiBydWJ5UnVuLCBCaWRpUgogICAgIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291
bnQgLT0gdG90YWxPcHBvcnR1bml0aWVzSW5SdW47CiB9CiAKLXZvaWQgQ29tcGxleExpbmVMYXlv
dXQ6OmNvbXB1dGVFeHBhbnNpb25Gb3JKdXN0aWZpZWRUZXh0KEJpZGlSdW4qIGZpcnN0UnVuLCBC
aWRpUnVuKiB0cmFpbGluZ1NwYWNlUnVuLCBjb25zdCBWZWN0b3I8dW5zaWduZWQsIDE2PiYgZXhw
YW5zaW9uT3Bwb3J0dW5pdGllcywgdW5zaWduZWQgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCwg
ZmxvYXQgdG90YWxMb2dpY2FsV2lkdGgsIGZsb2F0IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCkKK3Zv
aWQgTGVnYWN5TGluZUxheW91dDo6Y29tcHV0ZUV4cGFuc2lvbkZvckp1c3RpZmllZFRleHQoQmlk
aVJ1biogZmlyc3RSdW4sIEJpZGlSdW4qIHRyYWlsaW5nU3BhY2VSdW4sIGNvbnN0IFZlY3Rvcjx1
bnNpZ25lZCwgMTY+JiBleHBhbnNpb25PcHBvcnR1bml0aWVzLCB1bnNpZ25lZCBleHBhbnNpb25P
cHBvcnR1bml0eUNvdW50LCBmbG9hdCB0b3RhbExvZ2ljYWxXaWR0aCwgZmxvYXQgYXZhaWxhYmxl
TG9naWNhbFdpZHRoKQogewogICAgIGlmICghZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCB8fCBh
dmFpbGFibGVMb2dpY2FsV2lkdGggPD0gdG90YWxMb2dpY2FsV2lkdGgpCiAgICAgICAgIHJldHVy
bjsKQEAgLTYyOCw3ICs2MjgsNyBAQCB2b2lkIENvbXBsZXhMaW5lTGF5b3V0Ojpjb21wdXRlRXhw
YW5zaW9uRm9ySnVzdGlmaWVkVGV4dChCaWRpUnVuKiBmaXJzdFJ1biwgQmlkaQogICAgIH0KIH0K
IAotdm9pZCBDb21wbGV4TGluZUxheW91dDo6dXBkYXRlTG9naWNhbFdpZHRoRm9yQWxpZ25tZW50
KFJlbmRlckJsb2NrRmxvdyYgZmxvdywgY29uc3QgVGV4dEFsaWduTW9kZSYgdGV4dEFsaWduLCBj
b25zdCBSb290SW5saW5lQm94KiByb290SW5saW5lQm94LCBCaWRpUnVuKiB0cmFpbGluZ1NwYWNl
UnVuLCBmbG9hdCYgbG9naWNhbExlZnQsIGZsb2F0JiB0b3RhbExvZ2ljYWxXaWR0aCwgZmxvYXQm
IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCwgaW50IGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQpCit2
b2lkIExlZ2FjeUxpbmVMYXlvdXQ6OnVwZGF0ZUxvZ2ljYWxXaWR0aEZvckFsaWdubWVudChSZW5k
ZXJCbG9ja0Zsb3cmIGZsb3csIGNvbnN0IFRleHRBbGlnbk1vZGUmIHRleHRBbGlnbiwgY29uc3Qg
Um9vdElubGluZUJveCogcm9vdElubGluZUJveCwgQmlkaVJ1biogdHJhaWxpbmdTcGFjZVJ1biwg
ZmxvYXQmIGxvZ2ljYWxMZWZ0LCBmbG9hdCYgdG90YWxMb2dpY2FsV2lkdGgsIGZsb2F0JiBhdmFp
bGFibGVMb2dpY2FsV2lkdGgsIGludCBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KQogewogICAg
IFRleHREaXJlY3Rpb24gZGlyZWN0aW9uOwogICAgIGlmIChyb290SW5saW5lQm94ICYmIGZsb3cu
c3R5bGUoKS51bmljb2RlQmlkaSgpID09IFBsYWludGV4dCkKQEAgLTY4OSw3ICs2ODksNyBAQCBz
dGF0aWMgdm9pZCB1cGRhdGVMb2dpY2FsSW5saW5lUG9zaXRpb25zKFJlbmRlckJsb2NrRmxvdyYg
YmxvY2ssIGZsb2F0JiBsaW5lTG9naQogICAgIGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCA9IGxpbmVM
b2dpY2FsUmlnaHQgLSBsaW5lTG9naWNhbExlZnQ7CiB9CiAKLXZvaWQgQ29tcGxleExpbmVMYXlv
dXQ6OmNvbXB1dGVJbmxpbmVEaXJlY3Rpb25Qb3NpdGlvbnNGb3JMaW5lKFJvb3RJbmxpbmVCb3gq
IGxpbmVCb3gsIGNvbnN0IExpbmVJbmZvJiBsaW5lSW5mbywgQmlkaVJ1biogZmlyc3RSdW4sIEJp
ZGlSdW4qIHRyYWlsaW5nU3BhY2VSdW4sIGJvb2wgcmVhY2hlZEVuZCwgR2x5cGhPdmVyZmxvd0Fu
ZEZhbGxiYWNrRm9udHNNYXAmIHRleHRCb3hEYXRhTWFwLCBWZXJ0aWNhbFBvc2l0aW9uQ2FjaGUm
IHZlcnRpY2FsUG9zaXRpb25DYWNoZSwgV29yZE1lYXN1cmVtZW50cyYgd29yZE1lYXN1cmVtZW50
cykKK3ZvaWQgTGVnYWN5TGluZUxheW91dDo6Y29tcHV0ZUlubGluZURpcmVjdGlvblBvc2l0aW9u
c0ZvckxpbmUoUm9vdElubGluZUJveCogbGluZUJveCwgY29uc3QgTGluZUluZm8mIGxpbmVJbmZv
LCBCaWRpUnVuKiBmaXJzdFJ1biwgQmlkaVJ1biogdHJhaWxpbmdTcGFjZVJ1biwgYm9vbCByZWFj
aGVkRW5kLCBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcCYgdGV4dEJveERhdGFNYXAs
IFZlcnRpY2FsUG9zaXRpb25DYWNoZSYgdmVydGljYWxQb3NpdGlvbkNhY2hlLCBXb3JkTWVhc3Vy
ZW1lbnRzJiB3b3JkTWVhc3VyZW1lbnRzKQogewogICAgIFRleHRBbGlnbk1vZGUgdGV4dEFsaWdu
ID0gdGV4dEFsaWdubWVudEZvckxpbmUoIXJlYWNoZWRFbmQgJiYgIWxpbmVCb3gtPmVuZHNXaXRo
QnJlYWsoKSk7CiAgICAgCkBAIC04NDEsNyArODQxLDcgQEAgc3RhdGljIGJvb2wgaXNMYXN0SW5G
bG93UnVuKEJpZGlSdW4mIHJ1blRvQ2hlY2spCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUJpZGlS
dW4qIENvbXBsZXhMaW5lTGF5b3V0Ojpjb21wdXRlSW5saW5lRGlyZWN0aW9uUG9zaXRpb25zRm9y
U2VnbWVudChSb290SW5saW5lQm94KiBsaW5lQm94LCBjb25zdCBMaW5lSW5mbyYgbGluZUluZm8s
IFRleHRBbGlnbk1vZGUgdGV4dEFsaWduLCBmbG9hdCYgbGluZUxvZ2ljYWxMZWZ0LAorQmlkaVJ1
biogTGVnYWN5TGluZUxheW91dDo6Y29tcHV0ZUlubGluZURpcmVjdGlvblBvc2l0aW9uc0ZvclNl
Z21lbnQoUm9vdElubGluZUJveCogbGluZUJveCwgY29uc3QgTGluZUluZm8mIGxpbmVJbmZvLCBU
ZXh0QWxpZ25Nb2RlIHRleHRBbGlnbiwgZmxvYXQmIGxpbmVMb2dpY2FsTGVmdCwKICAgICBmbG9h
dCYgYXZhaWxhYmxlTG9naWNhbFdpZHRoLCBCaWRpUnVuKiBmaXJzdFJ1biwgQmlkaVJ1biogdHJh
aWxpbmdTcGFjZVJ1biwgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXAmIHRleHRCb3hE
YXRhTWFwLCBWZXJ0aWNhbFBvc2l0aW9uQ2FjaGUmIHZlcnRpY2FsUG9zaXRpb25DYWNoZSwKICAg
ICBXb3JkTWVhc3VyZW1lbnRzJiB3b3JkTWVhc3VyZW1lbnRzKQogewpAQCAtMTAwMiw3ICsxMDAy
LDcgQEAgQmlkaVJ1biogQ29tcGxleExpbmVMYXlvdXQ6OmNvbXB1dGVJbmxpbmVEaXJlY3Rpb25Q
b3NpdGlvbnNGb3JTZWdtZW50KFJvb3RJbmxpbmUKICAgICByZXR1cm4gcnVuOwogfQogCi12b2lk
IENvbXBsZXhMaW5lTGF5b3V0OjpyZW1vdmVJbmxpbmVCb3goQmlkaVJ1biYgcnVuLCBjb25zdCBS
b290SW5saW5lQm94JiByb290TGluZUJveCkgY29uc3QKK3ZvaWQgTGVnYWN5TGluZUxheW91dDo6
cmVtb3ZlSW5saW5lQm94KEJpZGlSdW4mIHJ1biwgY29uc3QgUm9vdElubGluZUJveCYgcm9vdExp
bmVCb3gpIGNvbnN0CiB7CiAgICAgYXV0byogaW5saW5lQm94ID0gcnVuLmJveCgpOwogI2lmIEFT
U0VSVF9FTkFCTEVECkBAIC0xMDMxLDcgKzEwMzEsNyBAQCB2b2lkIENvbXBsZXhMaW5lTGF5b3V0
OjpyZW1vdmVJbmxpbmVCb3goQmlkaVJ1biYgcnVuLCBjb25zdCBSb290SW5saW5lQm94JiByb290
TAogICAgIH0KIH0KIAotdm9pZCBDb21wbGV4TGluZUxheW91dDo6Y29tcHV0ZUJsb2NrRGlyZWN0
aW9uUG9zaXRpb25zRm9yTGluZShSb290SW5saW5lQm94KiBsaW5lQm94LCBCaWRpUnVuKiBmaXJz
dFJ1biwgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXAmIHRleHRCb3hEYXRhTWFwLCBW
ZXJ0aWNhbFBvc2l0aW9uQ2FjaGUmIHZlcnRpY2FsUG9zaXRpb25DYWNoZSkKK3ZvaWQgTGVnYWN5
TGluZUxheW91dDo6Y29tcHV0ZUJsb2NrRGlyZWN0aW9uUG9zaXRpb25zRm9yTGluZShSb290SW5s
aW5lQm94KiBsaW5lQm94LCBCaWRpUnVuKiBmaXJzdFJ1biwgR2x5cGhPdmVyZmxvd0FuZEZhbGxi
YWNrRm9udHNNYXAmIHRleHRCb3hEYXRhTWFwLCBWZXJ0aWNhbFBvc2l0aW9uQ2FjaGUmIHZlcnRp
Y2FsUG9zaXRpb25DYWNoZSkKIHsKICAgICBtX2Zsb3cuc2V0TG9naWNhbEhlaWdodChsaW5lQm94
LT5hbGlnbkJveGVzSW5CbG9ja0RpcmVjdGlvbihtX2Zsb3cubG9naWNhbEhlaWdodCgpLCB0ZXh0
Qm94RGF0YU1hcCwgdmVydGljYWxQb3NpdGlvbkNhY2hlKSk7CiAKQEAgLTEwOTAsNyArMTA5MCw3
IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgZmluZEZpcnN0VHJhaWxpbmdTcGFjZShjb25zdCBS
ZW5kZXJUZXh0JiBsYXN0VGV4dCwgY29uc3QKICAgICByZXR1cm4gZmlyc3RTcGFjZTsKIH0KIAot
aW5saW5lIEJpZGlSdW4qIENvbXBsZXhMaW5lTGF5b3V0OjpoYW5kbGVUcmFpbGluZ1NwYWNlcyhC
aWRpUnVuTGlzdDxCaWRpUnVuPiYgYmlkaVJ1bnMsIEJpZGlDb250ZXh0KiBjdXJyZW50Q29udGV4
dCkKK2lubGluZSBCaWRpUnVuKiBMZWdhY3lMaW5lTGF5b3V0OjpoYW5kbGVUcmFpbGluZ1NwYWNl
cyhCaWRpUnVuTGlzdDxCaWRpUnVuPiYgYmlkaVJ1bnMsIEJpZGlDb250ZXh0KiBjdXJyZW50Q29u
dGV4dCkKIHsKICAgICBpZiAoIWJpZGlSdW5zLnJ1bkNvdW50KCkKICAgICAgICAgfHwgIWJpZGlS
dW5zLmxvZ2ljYWxseUxhc3RSdW4oKS0+cmVuZGVyZXIoKS5zdHlsZSgpLmJyZWFrT25seUFmdGVy
V2hpdGVTcGFjZSgpCkBAIC0xMTQxLDcgKzExNDEsNyBAQCBpbmxpbmUgQmlkaVJ1biogQ29tcGxl
eExpbmVMYXlvdXQ6OmhhbmRsZVRyYWlsaW5nU3BhY2VzKEJpZGlSdW5MaXN0PEJpZGlSdW4+JiBi
aQogICAgIHJldHVybiB0cmFpbGluZ1NwYWNlUnVuOwogfQogCi12b2lkIENvbXBsZXhMaW5lTGF5
b3V0OjphcHBlbmRGbG9hdGluZ09iamVjdFRvTGFzdExpbmUoRmxvYXRpbmdPYmplY3QmIGZsb2F0
aW5nT2JqZWN0KQordm9pZCBMZWdhY3lMaW5lTGF5b3V0OjphcHBlbmRGbG9hdGluZ09iamVjdFRv
TGFzdExpbmUoRmxvYXRpbmdPYmplY3QmIGZsb2F0aW5nT2JqZWN0KQogewogICAgIEFTU0VSVF9X
SVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFmbG9hdGluZ09iamVjdC5vcmlnaW5hdGluZ0xpbmUo
KSk7CiAgICAgQVNTRVJUKGxhc3RSb290Qm94KCkpOwpAQCAtMTIzNiw3ICsxMjM2LDcgQEAgc3Rh
dGljIGlubGluZSB2b2lkIGNvbnN0cnVjdEJpZGlSdW5zRm9yU2VnbWVudChJbmxpbmVCaWRpUmVz
b2x2ZXImIHRvcFJlc29sdmVyLAogfQogCiAvLyBUaGlzIGZ1bmN0aW9uIGNvbnN0cnVjdHMgbGlu
ZSBib3hlcyBmb3IgYWxsIG9mIHRoZSB0ZXh0IHJ1bnMgaW4gdGhlIHJlc29sdmVyIGFuZCBjb21w
dXRlcyB0aGVpciBwb3NpdGlvbi4KLVJvb3RJbmxpbmVCb3gqIENvbXBsZXhMaW5lTGF5b3V0Ojpj
cmVhdGVMaW5lQm94ZXNGcm9tQmlkaVJ1bnModW5zaWduZWQgYmlkaUxldmVsLCBCaWRpUnVuTGlz
dDxCaWRpUnVuPiYgYmlkaVJ1bnMsIGNvbnN0IElubGluZUl0ZXJhdG9yJiBlbmQsIExpbmVJbmZv
JiBsaW5lSW5mbywgVmVydGljYWxQb3NpdGlvbkNhY2hlJiB2ZXJ0aWNhbFBvc2l0aW9uQ2FjaGUs
IEJpZGlSdW4qIHRyYWlsaW5nU3BhY2VSdW4sIFdvcmRNZWFzdXJlbWVudHMmIHdvcmRNZWFzdXJl
bWVudHMpCitSb290SW5saW5lQm94KiBMZWdhY3lMaW5lTGF5b3V0OjpjcmVhdGVMaW5lQm94ZXNG
cm9tQmlkaVJ1bnModW5zaWduZWQgYmlkaUxldmVsLCBCaWRpUnVuTGlzdDxCaWRpUnVuPiYgYmlk
aVJ1bnMsIGNvbnN0IElubGluZUl0ZXJhdG9yJiBlbmQsIExpbmVJbmZvJiBsaW5lSW5mbywgVmVy
dGljYWxQb3NpdGlvbkNhY2hlJiB2ZXJ0aWNhbFBvc2l0aW9uQ2FjaGUsIEJpZGlSdW4qIHRyYWls
aW5nU3BhY2VSdW4sIFdvcmRNZWFzdXJlbWVudHMmIHdvcmRNZWFzdXJlbWVudHMpCiB7CiAgICAg
aWYgKCFiaWRpUnVucy5ydW5Db3VudCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTEz
MDUsNyArMTMwNSw3IEBAIHN0YXRpYyB2b2lkIHJlcGFpbnREaXJ0eUZsb2F0cyhMaW5lTGF5b3V0
U3RhdGU6OkZsb2F0TGlzdCYgZmxvYXRzKQogICAgIH0KIH0KIAotdm9pZCBDb21wbGV4TGluZUxh
eW91dDo6bGF5b3V0UnVuc0FuZEZsb2F0cyhMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBi
b29sIGhhc0lubGluZUNoaWxkKQordm9pZCBMZWdhY3lMaW5lTGF5b3V0OjpsYXlvdXRSdW5zQW5k
RmxvYXRzKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGJvb2wgaGFzSW5saW5lQ2hpbGQp
CiB7CiAgICAgLy8gV2Ugd2FudCB0byBza2lwIGFoZWFkIHRvIHRoZSBmaXJzdCBkaXJ0eSBsaW5l
CiAgICAgSW5saW5lQmlkaVJlc29sdmVyIHJlc29sdmVyOwpAQCAtMTM2OSw3ICsxMzY5LDcgQEAg
dm9pZCBDb21wbGV4TGluZUxheW91dDo6bGF5b3V0UnVuc0FuZEZsb2F0cyhMaW5lTGF5b3V0U3Rh
dGUmIGxheW91dFN0YXRlLCBib29sIGgKIH0KIAogLy8gQmVmb3JlIHJlc3RhcnRpbmcgdGhlIGxh
eW91dCBsb29wIHdpdGggYSBuZXcgbG9naWNhbEhlaWdodCwgcmVtb3ZlIGFsbCBmbG9hdHMgdGhh
dCB3ZXJlIGFkZGVkIGFuZCByZXNldCB0aGUgcmVzb2x2ZXIuCi1pbmxpbmUgY29uc3QgSW5saW5l
SXRlcmF0b3ImIENvbXBsZXhMaW5lTGF5b3V0OjpyZXN0YXJ0TGF5b3V0UnVuc0FuZEZsb2F0c0lu
UmFuZ2UoTGF5b3V0VW5pdCBvbGRMb2dpY2FsSGVpZ2h0LCBMYXlvdXRVbml0IG5ld0xvZ2ljYWxI
ZWlnaHQsICBGbG9hdGluZ09iamVjdCogbGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSwgSW5saW5l
QmlkaVJlc29sdmVyJiByZXNvbHZlciwgIGNvbnN0IElubGluZUl0ZXJhdG9yJiBvbGRFbmQpCitp
bmxpbmUgY29uc3QgSW5saW5lSXRlcmF0b3ImIExlZ2FjeUxpbmVMYXlvdXQ6OnJlc3RhcnRMYXlv
dXRSdW5zQW5kRmxvYXRzSW5SYW5nZShMYXlvdXRVbml0IG9sZExvZ2ljYWxIZWlnaHQsIExheW91
dFVuaXQgbmV3TG9naWNhbEhlaWdodCwgIEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXRGcm9tUHJl
dmlvdXNMaW5lLCBJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyLCAgY29uc3QgSW5saW5lSXRl
cmF0b3ImIG9sZEVuZCkKIHsKICAgICBtX2Zsb3cucmVtb3ZlRmxvYXRpbmdPYmplY3RzQmVsb3co
bGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSwgb2xkTG9naWNhbEhlaWdodCk7CiAgICAgbV9mbG93
LnNldExvZ2ljYWxIZWlnaHQobmV3TG9naWNhbEhlaWdodCk7CkBAIC0xMzc3LDcgKzEzNzcsNyBA
QCBpbmxpbmUgY29uc3QgSW5saW5lSXRlcmF0b3ImIENvbXBsZXhMaW5lTGF5b3V0OjpyZXN0YXJ0
TGF5b3V0UnVuc0FuZEZsb2F0c0luUmFuZwogICAgIHJldHVybiBvbGRFbmQ7CiB9CiAKLXZvaWQg
Q29tcGxleExpbmVMYXlvdXQ6OmxheW91dFJ1bnNBbmRGbG9hdHNJblJhbmdlKExpbmVMYXlvdXRT
dGF0ZSYgbGF5b3V0U3RhdGUsIElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIsIGNvbnN0IElu
bGluZUl0ZXJhdG9yJiBjbGVhbkxpbmVTdGFydCwgY29uc3QgQmlkaVN0YXR1cyYgY2xlYW5MaW5l
QmlkaVN0YXR1cywgdW5zaWduZWQgY29uc2VjdXRpdmVIeXBoZW5hdGVkTGluZXMpCit2b2lkIExl
Z2FjeUxpbmVMYXlvdXQ6OmxheW91dFJ1bnNBbmRGbG9hdHNJblJhbmdlKExpbmVMYXlvdXRTdGF0
ZSYgbGF5b3V0U3RhdGUsIElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIsIGNvbnN0IElubGlu
ZUl0ZXJhdG9yJiBjbGVhbkxpbmVTdGFydCwgY29uc3QgQmlkaVN0YXR1cyYgY2xlYW5MaW5lQmlk
aVN0YXR1cywgdW5zaWduZWQgY29uc2VjdXRpdmVIeXBoZW5hdGVkTGluZXMpCiB7CiAgICAgY29u
c3QgUmVuZGVyU3R5bGUmIHN0eWxlVG9Vc2UgPSBzdHlsZSgpOwogICAgIGJvb2wgcGFnaW5hdGVk
ID0gbGF5b3V0Q29udGV4dCgpLmxheW91dFN0YXRlKCkgJiYgbGF5b3V0Q29udGV4dCgpLmxheW91
dFN0YXRlKCktPmlzUGFnaW5hdGVkKCk7CkBAIC0xNjAwLDcgKzE2MDAsNyBAQCB2b2lkIENvbXBs
ZXhMaW5lTGF5b3V0OjpsYXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5nZShMaW5lTGF5b3V0U3RhdGUm
IGxheW91dFN0YXRlLAogICAgIG1fZmxvdy5jbGVhckRpZEJyZWFrQXRMaW5lVG9Bdm9pZFdpZG93
KCk7CiB9CiAKLXZvaWQgQ29tcGxleExpbmVMYXlvdXQ6OnJlYXR0YWNoQ2xlYW5MaW5lRmxvYXRz
KFJvb3RJbmxpbmVCb3gmIGNsZWFuTGluZSwgTGF5b3V0VW5pdCBkZWx0YSwgYm9vbCBpc0ZpcnN0
Q2xlYW5MaW5lKQordm9pZCBMZWdhY3lMaW5lTGF5b3V0OjpyZWF0dGFjaENsZWFuTGluZUZsb2F0
cyhSb290SW5saW5lQm94JiBjbGVhbkxpbmUsIExheW91dFVuaXQgZGVsdGEsIGJvb2wgaXNGaXJz
dENsZWFuTGluZSkKIHsKICAgICBhdXRvKiBjbGVhbkxpbmVGbG9hdHMgPSBjbGVhbkxpbmUuZmxv
YXRzUHRyKCk7CiAgICAgaWYgKCFjbGVhbkxpbmVGbG9hdHMpCkBAIC0xNjIzLDcgKzE2MjMsNyBA
QCB2b2lkIENvbXBsZXhMaW5lTGF5b3V0OjpyZWF0dGFjaENsZWFuTGluZUZsb2F0cyhSb290SW5s
aW5lQm94JiBjbGVhbkxpbmUsIExheW91dAogICAgIH0KIH0KIAotdm9pZCBDb21wbGV4TGluZUxh
eW91dDo6bGlua1RvRW5kTGluZUlmTmVlZGVkKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUp
Cit2b2lkIExlZ2FjeUxpbmVMYXlvdXQ6OmxpbmtUb0VuZExpbmVJZk5lZWRlZChMaW5lTGF5b3V0
U3RhdGUmIGxheW91dFN0YXRlKQogewogICAgIGF1dG8qIGZpcnN0Q2xlYW5MaW5lID0gbGF5b3V0
U3RhdGUuZW5kTGluZSgpOwogICAgIGlmIChmaXJzdENsZWFuTGluZSkgewpAQCAtMTY5Miw3ICsx
NjkyLDcgQEAgdm9pZCBDb21wbGV4TGluZUxheW91dDo6bGlua1RvRW5kTGluZUlmTmVlZGVkKExp
bmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUpCiAgICAgfQogfQogCi12b2lkIENvbXBsZXhMaW5l
TGF5b3V0OjpsYXlvdXRMaW5lQm94ZXMoYm9vbCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0
JiByZXBhaW50TG9naWNhbFRvcCwgTGF5b3V0VW5pdCYgcmVwYWludExvZ2ljYWxCb3R0b20pCit2
b2lkIExlZ2FjeUxpbmVMYXlvdXQ6OmxheW91dExpbmVCb3hlcyhib29sIHJlbGF5b3V0Q2hpbGRy
ZW4sIExheW91dFVuaXQmIHJlcGFpbnRMb2dpY2FsVG9wLCBMYXlvdXRVbml0JiByZXBhaW50TG9n
aWNhbEJvdHRvbSkKIHsKICAgICBtX2Zsb3cuc2V0TG9naWNhbEhlaWdodChtX2Zsb3cuYm9yZGVy
QW5kUGFkZGluZ0JlZm9yZSgpKTsKICAgICAKQEAgLTE4MDgsNyArMTgwOCw3IEBAIHZvaWQgQ29t
cGxleExpbmVMYXlvdXQ6OmxheW91dExpbmVCb3hlcyhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExh
eW91dFVuaXQmIHJlcGFpCiAgICAgICAgIGNoZWNrTGluZXNGb3JUZXh0T3ZlcmZsb3coKTsKIH0K
IAotdm9pZCBDb21wbGV4TGluZUxheW91dDo6Y2hlY2tGbG9hdEluQ2xlYW5MaW5lKFJvb3RJbmxp
bmVCb3gmIGNsZWFuTGluZSwgUmVuZGVyQm94JiBmbG9hdEJveE9uQ2xlYW5MaW5lLCBGbG9hdFdp
dGhSZWN0JiBtYXRjaGluZ0Zsb2F0V2l0aFJlY3QsCit2b2lkIExlZ2FjeUxpbmVMYXlvdXQ6OmNo
ZWNrRmxvYXRJbkNsZWFuTGluZShSb290SW5saW5lQm94JiBjbGVhbkxpbmUsIFJlbmRlckJveCYg
ZmxvYXRCb3hPbkNsZWFuTGluZSwgRmxvYXRXaXRoUmVjdCYgbWF0Y2hpbmdGbG9hdFdpdGhSZWN0
LAogICAgIGJvb2wmIGVuY291bnRlcmVkTmV3RmxvYXQsIGJvb2wmIGRpcnRpZWRCeUZsb2F0KQog
ewogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFmbG9hdEJveE9uQ2xlYW5M
aW5lLnN0eWxlKCkuZGVsZXRpb25IYXNCZWd1bigpKTsKQEAgLTE4MzgsNyArMTgzOCw3IEBAIHZv
aWQgQ29tcGxleExpbmVMYXlvdXQ6OmNoZWNrRmxvYXRJbkNsZWFuTGluZShSb290SW5saW5lQm94
JiBjbGVhbkxpbmUsIFJlbmRlckJvCiAgICAgZGlydGllZEJ5RmxvYXQgPSB0cnVlOwogfQogCi1S
b290SW5saW5lQm94KiBDb21wbGV4TGluZUxheW91dDo6ZGV0ZXJtaW5lU3RhcnRQb3NpdGlvbihM
aW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVy
KQorUm9vdElubGluZUJveCogTGVnYWN5TGluZUxheW91dDo6ZGV0ZXJtaW5lU3RhcnRQb3NpdGlv
bihMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29s
dmVyKQogewogICAgIFJvb3RJbmxpbmVCb3gqIGN1cnJlbnRMaW5lID0gbnVsbHB0cjsKICAgICBS
b290SW5saW5lQm94KiBsYXN0TGluZSA9IG51bGxwdHI7CkBAIC0xOTczLDcgKzE5NzMsNyBAQCBS
b290SW5saW5lQm94KiBDb21wbGV4TGluZUxheW91dDo6ZGV0ZXJtaW5lU3RhcnRQb3NpdGlvbihM
aW5lTGF5b3V0U3RhdGUmIGxheW91dAogICAgIHJldHVybiBjdXJyZW50TGluZTsKIH0KIAotdm9p
ZCBDb21wbGV4TGluZUxheW91dDo6ZGV0ZXJtaW5lRW5kUG9zaXRpb24oTGluZUxheW91dFN0YXRl
JiBsYXlvdXRTdGF0ZSwgUm9vdElubGluZUJveCogc3RhcnRMaW5lLCBJbmxpbmVJdGVyYXRvciYg
Y2xlYW5MaW5lU3RhcnQsIEJpZGlTdGF0dXMmIGNsZWFuTGluZUJpZGlTdGF0dXMpCit2b2lkIExl
Z2FjeUxpbmVMYXlvdXQ6OmRldGVybWluZUVuZFBvc2l0aW9uKExpbmVMYXlvdXRTdGF0ZSYgbGF5
b3V0U3RhdGUsIFJvb3RJbmxpbmVCb3gqIHN0YXJ0TGluZSwgSW5saW5lSXRlcmF0b3ImIGNsZWFu
TGluZVN0YXJ0LCBCaWRpU3RhdHVzJiBjbGVhbkxpbmVCaWRpU3RhdHVzKQogewogICAgIGF1dG8g
aXRlcmF0b3JGb3JGaXJzdERpcnR5RmxvYXQgPSBbXShMaW5lTGF5b3V0U3RhdGU6OkZsb2F0TGlz
dCYgZmxvYXRzKSB7CiAgICAgICAgIGF1dG8gbGFzdENsZWFuRmxvYXQgPSBmbG9hdHMubGFzdENs
ZWFuRmxvYXQoKTsKQEAgLTIwMjcsNyArMjAyNyw3IEBAIHZvaWQgQ29tcGxleExpbmVMYXlvdXQ6
OmRldGVybWluZUVuZFBvc2l0aW9uKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIFJvb3RJ
CiAgICAgbGF5b3V0U3RhdGUuc2V0RW5kTGluZShsYXN0TGluZSk7CiB9CiAKLWJvb2wgQ29tcGxl
eExpbmVMYXlvdXQ6OmNoZWNrUGFnaW5hdGlvbkFuZEZsb2F0c0F0RW5kTGluZShMaW5lTGF5b3V0
U3RhdGUmIGxheW91dFN0YXRlKQorYm9vbCBMZWdhY3lMaW5lTGF5b3V0OjpjaGVja1BhZ2luYXRp
b25BbmRGbG9hdHNBdEVuZExpbmUoTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSkKIHsKICAg
ICBMYXlvdXRVbml0IGxpbmVEZWx0YSA9IG1fZmxvdy5sb2dpY2FsSGVpZ2h0KCkgLSBsYXlvdXRT
dGF0ZS5lbmRMaW5lTG9naWNhbFRvcCgpOwogCkBAIC0yMDczLDcgKzIwNzMsNyBAQCBib29sIENv
bXBsZXhMaW5lTGF5b3V0OjpjaGVja1BhZ2luYXRpb25BbmRGbG9hdHNBdEVuZExpbmUoTGluZUxh
eW91dFN0YXRlJiBsYXlvdQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIENvbXBsZXhMaW5l
TGF5b3V0OjpsaW5lV2lkdGhGb3JQYWdpbmF0ZWRMaW5lQ2hhbmdlZChSb290SW5saW5lQm94KiBy
b290Qm94LCBMYXlvdXRVbml0IGxpbmVEZWx0YSwgUmVuZGVyRnJhZ21lbnRlZEZsb3cqIGZyYWdt
ZW50ZWRGbG93KSBjb25zdAorYm9vbCBMZWdhY3lMaW5lTGF5b3V0OjpsaW5lV2lkdGhGb3JQYWdp
bmF0ZWRMaW5lQ2hhbmdlZChSb290SW5saW5lQm94KiByb290Qm94LCBMYXlvdXRVbml0IGxpbmVE
ZWx0YSwgUmVuZGVyRnJhZ21lbnRlZEZsb3cqIGZyYWdtZW50ZWRGbG93KSBjb25zdAogewogICAg
IGlmICghZnJhZ21lbnRlZEZsb3cpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTIwODUsNyAr
MjA4NSw3IEBAIGJvb2wgQ29tcGxleExpbmVMYXlvdXQ6OmxpbmVXaWR0aEZvclBhZ2luYXRlZExp
bmVDaGFuZ2VkKFJvb3RJbmxpbmVCb3gqIHJvb3RCb3gsCiAgICAgcmV0dXJuIHJvb3RCb3gtPnBh
Z2luYXRlZExpbmVXaWR0aCgpICE9IG1fZmxvdy5hdmFpbGFibGVMb2dpY2FsV2lkdGhGb3JDb250
ZW50KGN1cnJlbnRGcmFnbWVudCk7CiB9CiAKLWJvb2wgQ29tcGxleExpbmVMYXlvdXQ6Om1hdGNo
ZWRFbmRMaW5lKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IElubGluZUJpZGlS
ZXNvbHZlciYgcmVzb2x2ZXIsIGNvbnN0IElubGluZUl0ZXJhdG9yJiBlbmRMaW5lU3RhcnQsIGNv
bnN0IEJpZGlTdGF0dXMmIGVuZExpbmVTdGF0dXMpCitib29sIExlZ2FjeUxpbmVMYXlvdXQ6Om1h
dGNoZWRFbmRMaW5lKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IElubGluZUJp
ZGlSZXNvbHZlciYgcmVzb2x2ZXIsIGNvbnN0IElubGluZUl0ZXJhdG9yJiBlbmRMaW5lU3RhcnQs
IGNvbnN0IEJpZGlTdGF0dXMmIGVuZExpbmVTdGF0dXMpCiB7CiAgICAgaWYgKHJlc29sdmVyLnBv
c2l0aW9uKCkgPT0gZW5kTGluZVN0YXJ0KSB7CiAgICAgICAgIGlmIChyZXNvbHZlci5zdGF0dXMo
KSAhPSBlbmRMaW5lU3RhdHVzKQpAQCAtMjEyMSw3ICsyMTIxLDcgQEAgYm9vbCBDb21wbGV4TGlu
ZUxheW91dDo6bWF0Y2hlZEVuZExpbmUoTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29u
c3QgSW5saW4KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgQ29tcGxleExpbmVMYXlvdXQ6
OmFkZE92ZXJmbG93RnJvbUlubGluZUNoaWxkcmVuKCkKK3ZvaWQgTGVnYWN5TGluZUxheW91dDo6
YWRkT3ZlcmZsb3dGcm9tSW5saW5lQ2hpbGRyZW4oKQogewogICAgIExheW91dFVuaXQgZW5kUGFk
ZGluZyA9IG1fZmxvdy5oYXNPdmVyZmxvd0NsaXAoKSA/IG1fZmxvdy5wYWRkaW5nRW5kKCkgOiAw
X2x1OwogICAgIC8vIEZJWE1FOiBOZWVkIHRvIGZpbmQgYW5vdGhlciB3YXkgdG8gZG8gdGhpcywg
c2luY2Ugc2Nyb2xsYmFycyBjb3VsZCBzaG93IHdoZW4gd2UgZG9uJ3Qgd2FudCB0aGVtIHRvLgpA
QCAtMjE0Myw3ICsyMTQzLDcgQEAgdm9pZCBDb21wbGV4TGluZUxheW91dDo6YWRkT3ZlcmZsb3dG
cm9tSW5saW5lQ2hpbGRyZW4oKQogICAgIH0KIH0KIAotc2l6ZV90IENvbXBsZXhMaW5lTGF5b3V0
OjpsaW5lQ291bnQoKSBjb25zdAorc2l6ZV90IExlZ2FjeUxpbmVMYXlvdXQ6OmxpbmVDb3VudCgp
IGNvbnN0CiB7CiAgICAgc2l6ZV90IGNvdW50ID0gMDsKICAgICBmb3IgKGF1dG8qIGJveCA9IGZp
cnN0Um9vdEJveCgpOyBib3g7IGJveCA9IGJveC0+bmV4dFJvb3RCb3goKSkKQEAgLTIxNTIsNyAr
MjE1Miw3IEBAIHNpemVfdCBDb21wbGV4TGluZUxheW91dDo6bGluZUNvdW50KCkgY29uc3QKICAg
ICByZXR1cm4gY291bnQ7CiB9CiAKLXNpemVfdCBDb21wbGV4TGluZUxheW91dDo6bGluZUNvdW50
VW50aWwoY29uc3QgUm9vdElubGluZUJveCogc3RvcFJvb3RJbmxpbmVCb3gpIGNvbnN0CitzaXpl
X3QgTGVnYWN5TGluZUxheW91dDo6bGluZUNvdW50VW50aWwoY29uc3QgUm9vdElubGluZUJveCog
c3RvcFJvb3RJbmxpbmVCb3gpIGNvbnN0CiB7CiAgICAgc2l6ZV90IGNvdW50ID0gMDsKICAgICBm
b3IgKGF1dG8qIGJveCA9IGZpcnN0Um9vdEJveCgpOyBib3g7IGJveCA9IGJveC0+bmV4dFJvb3RC
b3goKSkgewpAQCAtMjE2NCw3ICsyMTY0LDcgQEAgc2l6ZV90IENvbXBsZXhMaW5lTGF5b3V0Ojps
aW5lQ291bnRVbnRpbChjb25zdCBSb290SW5saW5lQm94KiBzdG9wUm9vdElubGluZUJveCkKICAg
ICByZXR1cm4gY291bnQ7CiB9CiAKLXZvaWQgQ29tcGxleExpbmVMYXlvdXQ6OmRlbGV0ZUVsbGlw
c2lzTGluZUJveGVzKCkKK3ZvaWQgTGVnYWN5TGluZUxheW91dDo6ZGVsZXRlRWxsaXBzaXNMaW5l
Qm94ZXMoKQogewogICAgIFRleHRBbGlnbk1vZGUgdGV4dEFsaWduID0gc3R5bGUoKS50ZXh0QWxp
Z24oKTsKICAgICBib29sIGx0ciA9IHN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpOwpA
QCAtMjE4OCw3ICsyMTg4LDcgQEAgdm9pZCBDb21wbGV4TGluZUxheW91dDo6ZGVsZXRlRWxsaXBz
aXNMaW5lQm94ZXMoKQogICAgIH0KIH0KIAotdm9pZCBDb21wbGV4TGluZUxheW91dDo6Y2hlY2tM
aW5lc0ZvclRleHRPdmVyZmxvdygpCit2b2lkIExlZ2FjeUxpbmVMYXlvdXQ6OmNoZWNrTGluZXNG
b3JUZXh0T3ZlcmZsb3coKQogewogICAgIC8vIERldGVybWluZSB0aGUgd2lkdGggb2YgdGhlIGVs
bGlwc2lzIHVzaW5nIHRoZSBjdXJyZW50IGZvbnQuCiAgICAgLy8gRklYTUU6IENTUzMgc2F5cyB0
aGlzIGlzIGNvbmZpZ3VyYWJsZSwgYWxzbyBuZWVkIHRvIHVzZSAweDAwMkUgKEZVTEwgU1RPUCkg
aWYgaG9yaXpvbnRhbCBlbGxpcHNpcyBpcyAibm90IHJlbmRlcmFibGUiCkBAIC0yMjMzLDcgKzIy
MzMsNyBAQCB2b2lkIENvbXBsZXhMaW5lTGF5b3V0OjpjaGVja0xpbmVzRm9yVGV4dE92ZXJmbG93
KCkKICAgICB9CiB9CiAKLWJvb2wgQ29tcGxleExpbmVMYXlvdXQ6OnBvc2l0aW9uTmV3RmxvYXRP
bkxpbmUoY29uc3QgRmxvYXRpbmdPYmplY3QmIG5ld0Zsb2F0LCBGbG9hdGluZ09iamVjdCogbGFz
dEZsb2F0RnJvbVByZXZpb3VzTGluZSwgTGluZUluZm8mIGxpbmVJbmZvLCBMaW5lV2lkdGgmIHdp
ZHRoKQorYm9vbCBMZWdhY3lMaW5lTGF5b3V0Ojpwb3NpdGlvbk5ld0Zsb2F0T25MaW5lKGNvbnN0
IEZsb2F0aW5nT2JqZWN0JiBuZXdGbG9hdCwgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9hdEZyb21Q
cmV2aW91c0xpbmUsIExpbmVJbmZvJiBsaW5lSW5mbywgTGluZVdpZHRoJiB3aWR0aCkKIHsKICAg
ICBpZiAoIW1fZmxvdy5wb3NpdGlvbk5ld0Zsb2F0cygpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CkBAIC0yMjg5LDcgKzIyODksNyBAQCBib29sIENvbXBsZXhMaW5lTGF5b3V0Ojpwb3NpdGlvbk5l
d0Zsb2F0T25MaW5lKGNvbnN0IEZsb2F0aW5nT2JqZWN0JiBuZXdGbG9hdCwgRgogICAgIHJldHVy
biB0cnVlOwogfQogCi12b2lkIENvbXBsZXhMaW5lTGF5b3V0Ojp1cGRhdGVGcmFnbWVudEZvckxp
bmUoUm9vdElubGluZUJveCogbGluZUJveCkgY29uc3QKK3ZvaWQgTGVnYWN5TGluZUxheW91dDo6
dXBkYXRlRnJhZ21lbnRGb3JMaW5lKFJvb3RJbmxpbmVCb3gqIGxpbmVCb3gpIGNvbnN0CiB7CiAg
ICAgQVNTRVJUKGxpbmVCb3gpOwogCkBAIC0yMzEzLDEyICsyMzEzLDEyIEBAIHZvaWQgQ29tcGxl
eExpbmVMYXlvdXQ6OnVwZGF0ZUZyYWdtZW50Rm9yTGluZShSb290SW5saW5lQm94KiBsaW5lQm94
KSBjb25zdAogICAgICAgICBsaW5lQm94LT5zZXRJc0ZpcnN0QWZ0ZXJQYWdlQnJlYWsodHJ1ZSk7
CiB9CiAKLWNvbnN0IFJlbmRlclN0eWxlJiBDb21wbGV4TGluZUxheW91dDo6c3R5bGUoKSBjb25z
dAorY29uc3QgUmVuZGVyU3R5bGUmIExlZ2FjeUxpbmVMYXlvdXQ6OnN0eWxlKCkgY29uc3QKIHsK
ICAgICByZXR1cm4gbV9mbG93LnN0eWxlKCk7CiB9CiAKLWNvbnN0IEZyYW1lVmlld0xheW91dENv
bnRleHQmIENvbXBsZXhMaW5lTGF5b3V0OjpsYXlvdXRDb250ZXh0KCkgY29uc3QKK2NvbnN0IEZy
YW1lVmlld0xheW91dENvbnRleHQmIExlZ2FjeUxpbmVMYXlvdXQ6OmxheW91dENvbnRleHQoKSBj
b25zdAogewogICAgIHJldHVybiBtX2Zsb3cudmlldygpLmZyYW1lVmlldygpLmxheW91dENvbnRl
eHQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Db21wbGV4TGlu
ZUxheW91dC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUxpbmVMYXlvdXQuaApz
aW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
Q29tcGxleExpbmVMYXlvdXQuaApyZW5hbWUgdG8gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xl
Z2FjeUxpbmVMYXlvdXQuaAppbmRleCAxY2NlZDI3ZmM4YTkuLmM0MzY1ZWE2NGQwZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NvbXBsZXhMaW5lTGF5b3V0LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUxpbmVMYXlvdXQuaApAQCAtNTIsMTEgKzUy
LDExIEBAIHN0cnVjdCBXb3JkTWVhc3VyZW1lbnQ7CiB0ZW1wbGF0ZSA8Y2xhc3MgUnVuPiBjbGFz
cyBCaWRpUnVuTGlzdDsKIHR5cGVkZWYgVmVjdG9yPFdvcmRNZWFzdXJlbWVudCwgNjQ+IFdvcmRN
ZWFzdXJlbWVudHM7CiAKLWNsYXNzIENvbXBsZXhMaW5lTGF5b3V0IHsKK2NsYXNzIExlZ2FjeUxp
bmVMYXlvdXQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIENv
bXBsZXhMaW5lTGF5b3V0KFJlbmRlckJsb2NrRmxvdyYpOwotICAgIH5Db21wbGV4TGluZUxheW91
dCgpOworICAgIExlZ2FjeUxpbmVMYXlvdXQoUmVuZGVyQmxvY2tGbG93Jik7CisgICAgfkxlZ2Fj
eUxpbmVMYXlvdXQoKTsKIAogICAgIFJlbmRlckxpbmVCb3hMaXN0JiBsaW5lQm94ZXMoKSB7IHJl
dHVybiBtX2xpbmVCb3hlczsgfQogICAgIGNvbnN0IFJlbmRlckxpbmVCb3hMaXN0JiBsaW5lQm94
ZXMoKSBjb25zdCB7IHJldHVybiBtX2xpbmVCb3hlczsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAppbmRleCBhMjBjODVmODg0MDAuLmZlNzVhNmI0Mjk2
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKQEAg
LTI0LDcgKzI0LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZW5kZXJCbG9j
a0Zsb3cuaCIKIAotI2luY2x1ZGUgIkNvbXBsZXhMaW5lTGF5b3V0LmgiCiAjaW5jbHVkZSAiRWRp
dG9yLmgiCiAjaW5jbHVkZSAiRmxvYXRpbmdPYmplY3RzLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIK
QEAgLTQwLDYgKzM5LDcgQEAKICNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQu
aCIKICNpbmNsdWRlICJMYXlvdXRJbnRlZ3JhdGlvblJ1bkl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAi
TGF5b3V0UmVwYWludGVyLmgiCisjaW5jbHVkZSAiTGVnYWN5TGluZUxheW91dC5oIgogI2luY2x1
ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJDb21iaW5lVGV4dC5oIgogI2luY2x1ZGUg
IlJlbmRlckZsZXhpYmxlQm94LmgiCkBAIC0xNTQsOCArMTU0LDggQEAgdm9pZCBSZW5kZXJCbG9j
a0Zsb3c6OndpbGxCZURlc3Ryb3llZCgpCiAgICAgICAgICAgICBwYXJlbnQoKS0+ZGlydHlMaW5l
c0Zyb21DaGFuZ2VkQ2hpbGQoKnRoaXMpOwogICAgIH0KIAotICAgIGlmIChjb21wbGV4TGluZUxh
eW91dCgpKQotICAgICAgICBjb21wbGV4TGluZUxheW91dCgpLT5saW5lQm94ZXMoKS5kZWxldGVM
aW5lQm94ZXMoKTsKKyAgICBpZiAobGVnYWN5TGluZUxheW91dCgpKQorICAgICAgICBsZWdhY3lM
aW5lTGF5b3V0KCktPmxpbmVCb3hlcygpLmRlbGV0ZUxpbmVCb3hlcygpOwogCiAgICAgYmxvY2tX
aWxsQmVEZXN0cm95ZWQoKTsKIApAQCAtNzAwLDEwICs3MDAsMTAgQEAgdm9pZCBSZW5kZXJCbG9j
a0Zsb3c6OmxheW91dElubGluZUNoaWxkcmVuKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0
VW5pdCYgcmUKICAgICB9CiAjZW5kaWYKIAotICAgIGlmICghY29tcGxleExpbmVMYXlvdXQoKSkK
LSAgICAgICAgbV9saW5lTGF5b3V0ID0gbWFrZVVuaXF1ZTxDb21wbGV4TGluZUxheW91dD4oKnRo
aXMpOworICAgIGlmICghbGVnYWN5TGluZUxheW91dCgpKQorICAgICAgICBtX2xpbmVMYXlvdXQg
PSBtYWtlVW5pcXVlPExlZ2FjeUxpbmVMYXlvdXQ+KCp0aGlzKTsKIAotICAgIGNvbXBsZXhMaW5l
TGF5b3V0KCktPmxheW91dExpbmVCb3hlcyhyZWxheW91dENoaWxkcmVuLCByZXBhaW50TG9naWNh
bFRvcCwgcmVwYWludExvZ2ljYWxCb3R0b20pOworICAgIGxlZ2FjeUxpbmVMYXlvdXQoKS0+bGF5
b3V0TGluZUJveGVzKHJlbGF5b3V0Q2hpbGRyZW4sIHJlcGFpbnRMb2dpY2FsVG9wLCByZXBhaW50
TG9naWNhbEJvdHRvbSk7CiB9CiAKIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpsYXlvdXRCbG9ja0No
aWxkKFJlbmRlckJveCYgY2hpbGQsIE1hcmdpbkluZm8mIG1hcmdpbkluZm8sIExheW91dFVuaXQm
IHByZXZpb3VzRmxvYXRMb2dpY2FsQm90dG9tLCBMYXlvdXRVbml0JiBtYXhGbG9hdExvZ2ljYWxC
b3R0b20pCkBAIC05NzAsNyArOTcwLDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9ja0Zsb3c6OnN0
YXJ0QWxpZ25lZE9mZnNldEZvckxpbmUoTGF5b3V0VW5pdCBwb3NpdGlvbiwgSW5kZW4KICAgICBm
bG9hdCBsb2dpY2FsTGVmdCA9IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShsb2dpY2FsSGVpZ2h0
KCksIERvTm90SW5kZW50VGV4dCk7CiAgICAgZmxvYXQgYXZhaWxhYmxlTG9naWNhbFdpZHRoID0g
bG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShsb2dpY2FsSGVpZ2h0KCksIERvTm90SW5kZW50VGV4
dCkgLSBsb2dpY2FsTGVmdDsKIAotICAgIENvbXBsZXhMaW5lTGF5b3V0Ojp1cGRhdGVMb2dpY2Fs
V2lkdGhGb3JBbGlnbm1lbnQoKnRoaXMsIHRleHRBbGlnbiwgbnVsbHB0ciwgbnVsbHB0ciwgbG9n
aWNhbExlZnQsIHRvdGFsTG9naWNhbFdpZHRoLCBhdmFpbGFibGVMb2dpY2FsV2lkdGgsIDApOwor
ICAgIExlZ2FjeUxpbmVMYXlvdXQ6OnVwZGF0ZUxvZ2ljYWxXaWR0aEZvckFsaWdubWVudCgqdGhp
cywgdGV4dEFsaWduLCBudWxscHRyLCBudWxscHRyLCBsb2dpY2FsTGVmdCwgdG90YWxMb2dpY2Fs
V2lkdGgsIGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCwgMCk7CiAKICAgICBpZiAoIXN0eWxlKCkuaXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpKQogICAgICAgICByZXR1cm4gTGF5b3V0VW5pdChsb2dpY2Fs
V2lkdGgoKSAtIGxvZ2ljYWxMZWZ0KTsKQEAgLTE4MDIsNyArMTgwMiw3IEBAIHZvaWQgUmVuZGVy
QmxvY2tGbG93OjphZGp1c3RMaW5lUG9zaXRpb25Gb3JQYWdpbmF0aW9uKFJvb3RJbmxpbmVCb3gq
IGxpbmVCb3gsIExhCiAgICAgTGF5b3V0VW5pdCByZW1haW5pbmdMb2dpY2FsSGVpZ2h0ID0gcGFn
ZVJlbWFpbmluZ0xvZ2ljYWxIZWlnaHRGb3JPZmZzZXQobG9naWNhbE9mZnNldCwgRXhjbHVkZVBh
Z2VCb3VuZGFyeSk7CiAgICAgb3ZlcmZsb3dzRnJhZ21lbnQgPSAobGluZUhlaWdodCA+IHJlbWFp
bmluZ0xvZ2ljYWxIZWlnaHQpOwogCi0gICAgaW50IGxpbmVJbmRleCA9IGNvbXBsZXhMaW5lTGF5
b3V0KCktPmxpbmVDb3VudFVudGlsKGxpbmVCb3gpOworICAgIGludCBsaW5lSW5kZXggPSBsZWdh
Y3lMaW5lTGF5b3V0KCktPmxpbmVDb3VudFVudGlsKGxpbmVCb3gpOwogICAgIGlmIChyZW1haW5p
bmdMb2dpY2FsSGVpZ2h0IDwgbGluZUhlaWdodCB8fCAoc2hvdWxkQnJlYWtBdExpbmVUb0F2b2lk
V2lkb3coKSAmJiBsaW5lQnJlYWtUb0F2b2lkV2lkb3coKSA9PSBsaW5lSW5kZXgpKSB7CiAgICAg
ICAgIGlmIChsaW5lQnJlYWtUb0F2b2lkV2lkb3coKSA9PSBsaW5lSW5kZXgpCiAgICAgICAgICAg
ICBjbGVhclNob3VsZEJyZWFrQXRMaW5lVG9Bdm9pZFdpZG93SWZOZWVkZWQoKnRoaXMpOwpAQCAt
MjEzMSw3ICsyMTMxLDcgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OnN0eWxlRGlkQ2hhbmdlKFN0
eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2wKIAogICAgIGlmIChkaWZm
ID49IFN0eWxlRGlmZmVyZW5jZTo6UmVwYWludCkgewogICAgICAgICBhdXRvIHNob3VsZEludmFs
aWRhdGVMaW5lTGF5b3V0UGF0aCA9IFsmXSB7Ci0gICAgICAgICAgICBpZiAoc2VsZk5lZWRzTGF5
b3V0KCkgfHwgY29tcGxleExpbmVMYXlvdXQoKSkKKyAgICAgICAgICAgIGlmIChzZWxmTmVlZHNM
YXlvdXQoKSB8fCBsZWdhY3lMaW5lTGF5b3V0KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiAgICAgICAgICAgICBp
ZiAobW9kZXJuTGluZUxheW91dCgpICYmICFMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUxheW91dDo6
Y2FuVXNlRm9yQWZ0ZXJTdHlsZUNoYW5nZSgqdGhpcywgZGlmZikpCkBAIC0zMDE3LDcgKzMwMTcs
NyBAQCBib29sIFJlbmRlckJsb2NrRmxvdzo6aGl0VGVzdElubGluZUNoaWxkcmVuKGNvbnN0IEhp
dFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZQogICAgICAgICByZXR1cm4gbW9kZXJuTGluZUxh
eW91dCgpLT5oaXRUZXN0KHJlcXVlc3QsIHJlc3VsdCwgbG9jYXRpb25JbkNvbnRhaW5lciwgYWNj
dW11bGF0ZWRPZmZzZXQsIGhpdFRlc3RBY3Rpb24pOwogI2VuZGlmCiAKLSAgICByZXR1cm4gY29t
cGxleExpbmVMYXlvdXQoKSAmJiBjb21wbGV4TGluZUxheW91dCgpLT5saW5lQm94ZXMoKS5oaXRU
ZXN0KHRoaXMsIHJlcXVlc3QsIHJlc3VsdCwgbG9jYXRpb25JbkNvbnRhaW5lciwgYWNjdW11bGF0
ZWRPZmZzZXQsIGhpdFRlc3RBY3Rpb24pOworICAgIHJldHVybiBsZWdhY3lMaW5lTGF5b3V0KCkg
JiYgbGVnYWN5TGluZUxheW91dCgpLT5saW5lQm94ZXMoKS5oaXRUZXN0KHRoaXMsIHJlcXVlc3Qs
IHJlc3VsdCwgbG9jYXRpb25JbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIGhpdFRlc3RB
Y3Rpb24pOwogfQogCiB2b2lkIFJlbmRlckJsb2NrRmxvdzo6YWRkT3ZlcmZsb3dGcm9tSW5saW5l
Q2hpbGRyZW4oKQpAQCAtMzAyOSw4ICszMDI5LDggQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmFk
ZE92ZXJmbG93RnJvbUlubGluZUNoaWxkcmVuKCkKICAgICB9CiAjZW5kaWYKICAgICAKLSAgICBp
ZiAoY29tcGxleExpbmVMYXlvdXQoKSkKLSAgICAgICAgY29tcGxleExpbmVMYXlvdXQoKS0+YWRk
T3ZlcmZsb3dGcm9tSW5saW5lQ2hpbGRyZW4oKTsKKyAgICBpZiAobGVnYWN5TGluZUxheW91dCgp
KQorICAgICAgICBsZWdhY3lMaW5lTGF5b3V0KCktPmFkZE92ZXJmbG93RnJvbUlubGluZUNoaWxk
cmVuKCk7CiB9CiAKIHZvaWQgUmVuZGVyQmxvY2tGbG93OjphZGp1c3RGb3JCb3JkZXJGaXQoTGF5
b3V0VW5pdCB4LCBMYXlvdXRVbml0JiBsZWZ0LCBMYXlvdXRVbml0JiByaWdodCkgY29uc3QKQEAg
LTMxODgsNyArMzE4OCw3IEBAIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gUmVuZGVyQmxvY2tG
bG93OjppbmxpbmVCbG9ja0Jhc2VsaW5lKExpbmVEaXJlY3Rpb25Nb2RlCiAgICAgICAgICAgICAg
ICAgKyAobGluZURpcmVjdGlvbiA9PSBIb3Jpem9udGFsTGluZSA/IGJvcmRlclRvcCgpICsgcGFk
ZGluZ1RvcCgpIDogYm9yZGVyUmlnaHQoKSArIHBhZGRpbmdSaWdodCgpKSkudG9JbnQoKSB9Owog
ICAgICAgICB9CiAKLSAgICAgICAgaWYgKGNvbXBsZXhMaW5lTGF5b3V0KCkpIHsKKyAgICAgICAg
aWYgKGxlZ2FjeUxpbmVMYXlvdXQoKSkgewogICAgICAgICAgICAgYm9vbCBpc0ZpcnN0TGluZSA9
IGxhc3RSb290Qm94KCkgPT0gZmlyc3RSb290Qm94KCk7CiAgICAgICAgICAgICBjb25zdCBhdXRv
JiBzdHlsZSA9IGlzRmlyc3RMaW5lID8gZmlyc3RMaW5lU3R5bGUoKSA6IHRoaXMtPnN0eWxlKCk7
CiAgICAgICAgICAgICAvLyBJbmxpbmVGbG93Qm94OjpwbGFjZUJveGVzSW5CbG9ja0RpcmVjdGlv
biB3aWxsIGZsaXAgbGluZXMgaW4gY2FzZSBvZiB2ZXJ0aWNhbExSIG1vZGUsIHNvIHdlIGNhbiBh
c3N1bWUgdmVydGljYWxSTCBmb3Igbm93LgpAQCAtMzM0MSw4ICszMzQxLDggQEAgaW50IFJlbmRl
ckJsb2NrRmxvdzo6bGluZUNvdW50KCkgY29uc3QKICAgICAgICAgaWYgKG1vZGVybkxpbmVMYXlv
dXQoKSkKICAgICAgICAgICAgIHJldHVybiBtb2Rlcm5MaW5lTGF5b3V0KCktPmxpbmVDb3VudCgp
OwogI2VuZGlmCi0gICAgICAgIGlmIChjb21wbGV4TGluZUxheW91dCgpKQotICAgICAgICAgICAg
cmV0dXJuIGNvbXBsZXhMaW5lTGF5b3V0KCktPmxpbmVDb3VudCgpOworICAgICAgICBpZiAobGVn
YWN5TGluZUxheW91dCgpKQorICAgICAgICAgICAgcmV0dXJuIGxlZ2FjeUxpbmVMYXlvdXQoKS0+
bGluZUNvdW50KCk7CiAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpAQCAtMzU5Myw4ICszNTkz
LDggQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OnBhaW50SW5saW5lQ2hpbGRyZW4oUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW4KICAgICB9CiAjZW5kaWYKIAotICAgIGlmIChj
b21wbGV4TGluZUxheW91dCgpKQotICAgICAgICBjb21wbGV4TGluZUxheW91dCgpLT5saW5lQm94
ZXMoKS5wYWludCh0aGlzLCBwYWludEluZm8sIHBhaW50T2Zmc2V0KTsKKyAgICBpZiAobGVnYWN5
TGluZUxheW91dCgpKQorICAgICAgICBsZWdhY3lMaW5lTGF5b3V0KCktPmxpbmVCb3hlcygpLnBh
aW50KHRoaXMsIHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwogfQogCiBib29sIFJlbmRlckJsb2Nr
Rmxvdzo6cmVsYXlvdXRGb3JQYWdpbmF0aW9uKCkKQEAgLTM2NTEsNyArMzY1MSw3IEBAIGJvb2wg
UmVuZGVyQmxvY2tGbG93OjpoYXNMaW5lcygpIGNvbnN0CiAgICAgICAgIHJldHVybiBtb2Rlcm5M
aW5lTGF5b3V0KCktPmxpbmVDb3VudCgpOwogI2VuZGlmCiAKLSAgICByZXR1cm4gY29tcGxleExp
bmVMYXlvdXQoKSAmJiBjb21wbGV4TGluZUxheW91dCgpLT5saW5lQm94ZXMoKS5maXJzdExpbmVC
b3goKTsKKyAgICByZXR1cm4gbGVnYWN5TGluZUxheW91dCgpICYmIGxlZ2FjeUxpbmVMYXlvdXQo
KS0+bGluZUJveGVzKCkuZmlyc3RMaW5lQm94KCk7CiB9CiAKIHZvaWQgUmVuZGVyQmxvY2tGbG93
OjppbnZhbGlkYXRlTGluZUxheW91dFBhdGgoKQpAQCAtMzc1OCw3ICszNzU4LDcgQEAgdm9pZCBS
ZW5kZXJCbG9ja0Zsb3c6OmVuc3VyZUxpbmVCb3hlcygpCiAKICAgICBzZXRMaW5lTGF5b3V0UGF0
aChGb3JjZUxpbmVCb3hlc1BhdGgpOwogCi0gICAgaWYgKGNvbXBsZXhMaW5lTGF5b3V0KCkgfHwg
IWhhc0xpbmVMYXlvdXQoKSkKKyAgICBpZiAobGVnYWN5TGluZUxheW91dCgpIHx8ICFoYXNMaW5l
TGF5b3V0KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGJvb2wgbmVlZHNUb1BhZ2luYXRlQ29t
cGxleExpbmVzID0gWyZdIHsKQEAgLTM3NjksOSArMzc2OSw5IEBAIHZvaWQgUmVuZGVyQmxvY2tG
bG93OjplbnN1cmVMaW5lQm94ZXMoKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfSgpOwog
Ci0gICAgbV9saW5lTGF5b3V0ID0gbWFrZVVuaXF1ZTxDb21wbGV4TGluZUxheW91dD4oKnRoaXMp
OworICAgIG1fbGluZUxheW91dCA9IG1ha2VVbmlxdWU8TGVnYWN5TGluZUxheW91dD4oKnRoaXMp
OwogCi0gICAgYXV0byYgY29tcGxleExpbmVMYXlvdXQgPSAqdGhpcy0+Y29tcGxleExpbmVMYXlv
dXQoKTsKKyAgICBhdXRvJiBsZWdhY3lMaW5lTGF5b3V0ID0gKnRoaXMtPmxlZ2FjeUxpbmVMYXlv
dXQoKTsKIAogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAgTGF5b3V0VW5pdCBvbGRIZWlnaHQgPSBs
b2dpY2FsSGVpZ2h0KCk7CkBAIC0zNzgzLDE0ICszNzgzLDE0IEBAIHZvaWQgUmVuZGVyQmxvY2tG
bG93OjplbnN1cmVMaW5lQm94ZXMoKQogICAgIExheW91dFVuaXQgcmVwYWludExvZ2ljYWxCb3R0
b207CiAgICAgaWYgKG5lZWRzVG9QYWdpbmF0ZUNvbXBsZXhMaW5lcykgewogICAgICAgICBQYWdp
bmF0ZWRMYXlvdXRTdGF0ZU1haW50YWluZXIgc3RhdGUoKnRoaXMpOwotICAgICAgICBjb21wbGV4
TGluZUxheW91dC5sYXlvdXRMaW5lQm94ZXMocmVsYXlvdXRDaGlsZHJlbiwgcmVwYWludExvZ2lj
YWxUb3AsIHJlcGFpbnRMb2dpY2FsQm90dG9tKTsKKyAgICAgICAgbGVnYWN5TGluZUxheW91dC5s
YXlvdXRMaW5lQm94ZXMocmVsYXlvdXRDaGlsZHJlbiwgcmVwYWludExvZ2ljYWxUb3AsIHJlcGFp
bnRMb2dpY2FsQm90dG9tKTsKICAgICAgICAgLy8gVGhpcyBtYXRjaGVzIHJlbGF5b3V0VG9Bdm9p
ZFdpZG93cy4KICAgICAgICAgaWYgKHNob3VsZEJyZWFrQXRMaW5lVG9Bdm9pZFdpZG93KCkpCi0g
ICAgICAgICAgICBjb21wbGV4TGluZUxheW91dC5sYXlvdXRMaW5lQm94ZXMocmVsYXlvdXRDaGls
ZHJlbiwgcmVwYWludExvZ2ljYWxUb3AsIHJlcGFpbnRMb2dpY2FsQm90dG9tKTsKKyAgICAgICAg
ICAgIGxlZ2FjeUxpbmVMYXlvdXQubGF5b3V0TGluZUJveGVzKHJlbGF5b3V0Q2hpbGRyZW4sIHJl
cGFpbnRMb2dpY2FsVG9wLCByZXBhaW50TG9naWNhbEJvdHRvbSk7CiAgICAgICAgIC8vIEZJWE1F
OiBUaGlzIGlzIG5lZWRlZCBhcyBsb25nIGFzIHNpbXBsZSBhbmQgbm9ybWFsIGxpbmUgbGF5b3V0
IHByb2R1Y2UgZGlmZmVyZW50IGxpbmUgYnJlYWtpbmdzLgogICAgICAgICByZXBhaW50KCk7CiAg
ICAgfSBlbHNlCi0gICAgICAgIGNvbXBsZXhMaW5lTGF5b3V0LmxheW91dExpbmVCb3hlcyhyZWxh
eW91dENoaWxkcmVuLCByZXBhaW50TG9naWNhbFRvcCwgcmVwYWludExvZ2ljYWxCb3R0b20pOwor
ICAgICAgICBsZWdhY3lMaW5lTGF5b3V0LmxheW91dExpbmVCb3hlcyhyZWxheW91dENoaWxkcmVu
LCByZXBhaW50TG9naWNhbFRvcCwgcmVwYWludExvZ2ljYWxCb3R0b20pOwogCiAgICAgdXBkYXRl
TG9naWNhbEhlaWdodCgpOwogICAgIEFTU0VSVChkaWROZWVkTGF5b3V0IHx8IGNlaWxmKGxvZ2lj
YWxIZWlnaHQoKSkgPT0gY2VpbGYob2xkSGVpZ2h0KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2tGbG93LmgKaW5kZXggY2QwMDk2NWRhZWY5Li5hN2YwMWMyM2FlZGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmgKQEAgLTIyLDggKzIy
LDggQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJDb21wbGV4TGluZUxheW91dC5oIgog
I2luY2x1ZGUgIkZsb2F0aW5nT2JqZWN0cy5oIgorI2luY2x1ZGUgIkxlZ2FjeUxpbmVMYXlvdXQu
aCIKICNpbmNsdWRlICJMaW5lV2lkdGguaCIKICNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgogI2lu
Y2x1ZGUgIlJlbmRlckxpbmVCb3hMaXN0LmgiCkBAIC03Nyw4ICs3Nyw4IEBAIHByb3RlY3RlZDoK
IAogICAgIHZvaWQgZGlydHlMaW5lc0Zyb21DaGFuZ2VkQ2hpbGQoUmVuZGVyT2JqZWN0JiBjaGls
ZCkgZmluYWwKICAgICB7Ci0gICAgICAgIGlmIChjb21wbGV4TGluZUxheW91dCgpKQotICAgICAg
ICAgICAgY29tcGxleExpbmVMYXlvdXQoKS0+bGluZUJveGVzKCkuZGlydHlMaW5lc0Zyb21DaGFu
Z2VkQ2hpbGQoKnRoaXMsIGNoaWxkKTsKKyAgICAgICAgaWYgKGxlZ2FjeUxpbmVMYXlvdXQoKSkK
KyAgICAgICAgICAgIGxlZ2FjeUxpbmVMYXlvdXQoKS0+bGluZUJveGVzKCkuZGlydHlMaW5lc0Zy
b21DaGFuZ2VkQ2hpbGQoKnRoaXMsIGNoaWxkKTsKICAgICB9CiAKICAgICB2b2lkIHBhaW50Q29s
dW1uUnVsZXMoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKSBvdmVycmlkZTsKQEAgLTMz
Nyw4ICszMzcsOCBAQCBwdWJsaWM6CiAKICAgICBMYXlvdXRQb2ludCBmbGlwRmxvYXRGb3JXcml0
aW5nTW9kZUZvckNoaWxkKGNvbnN0IEZsb2F0aW5nT2JqZWN0JiwgY29uc3QgTGF5b3V0UG9pbnQm
KSBjb25zdDsKIAotICAgIFJvb3RJbmxpbmVCb3gqIGZpcnN0Um9vdEJveCgpIGNvbnN0IHsgcmV0
dXJuIGNvbXBsZXhMaW5lTGF5b3V0KCkgPyBjb21wbGV4TGluZUxheW91dCgpLT5maXJzdFJvb3RC
b3goKSA6IG51bGxwdHI7IH0KLSAgICBSb290SW5saW5lQm94KiBsYXN0Um9vdEJveCgpIGNvbnN0
IHsgcmV0dXJuIGNvbXBsZXhMaW5lTGF5b3V0KCkgPyBjb21wbGV4TGluZUxheW91dCgpLT5sYXN0
Um9vdEJveCgpIDogbnVsbHB0cjsgfQorICAgIFJvb3RJbmxpbmVCb3gqIGZpcnN0Um9vdEJveCgp
IGNvbnN0IHsgcmV0dXJuIGxlZ2FjeUxpbmVMYXlvdXQoKSA/IGxlZ2FjeUxpbmVMYXlvdXQoKS0+
Zmlyc3RSb290Qm94KCkgOiBudWxscHRyOyB9CisgICAgUm9vdElubGluZUJveCogbGFzdFJvb3RC
b3goKSBjb25zdCB7IHJldHVybiBsZWdhY3lMaW5lTGF5b3V0KCkgPyBsZWdhY3lMaW5lTGF5b3V0
KCktPmxhc3RSb290Qm94KCkgOiBudWxscHRyOyB9CiAKICAgICB2b2lkIHNldENoaWxkcmVuSW5s
aW5lKGJvb2wpIGZpbmFsOwogCkBAIC0zNTcsOCArMzU3LDggQEAgcHVibGljOgogCiAgICAgYm9v
bCBjb250YWluc05vblplcm9CaWRpTGV2ZWwoKSBjb25zdDsKIAotICAgIGNvbnN0IENvbXBsZXhM
aW5lTGF5b3V0KiBjb21wbGV4TGluZUxheW91dCgpIGNvbnN0OwotICAgIENvbXBsZXhMaW5lTGF5
b3V0KiBjb21wbGV4TGluZUxheW91dCgpOworICAgIGNvbnN0IExlZ2FjeUxpbmVMYXlvdXQqIGxl
Z2FjeUxpbmVMYXlvdXQoKSBjb25zdDsKKyAgICBMZWdhY3lMaW5lTGF5b3V0KiBsZWdhY3lMaW5l
TGF5b3V0KCk7CiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiAgICAgY29u
c3QgTGF5b3V0SW50ZWdyYXRpb246OkxpbmVMYXlvdXQqIG1vZGVybkxpbmVMYXlvdXQoKSBjb25z
dDsKICAgICBMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUxheW91dCogbW9kZXJuTGluZUxheW91dCgp
OwpAQCAtNTQxLDcgKzU0MSw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBib29sIGhhc0xp
bmVMYXlvdXQoKSBjb25zdDsKLSAgICBib29sIGhhc0NvbXBsZXhMaW5lTGF5b3V0KCkgY29uc3Q7
CisgICAgYm9vbCBoYXNMZWdhY3lMaW5lTGF5b3V0KCkgY29uc3Q7CiAKICNpZiBFTkFCTEUoTEFZ
T1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKICAgICBib29sIGhhc01vZGVybkxpbmVMYXlvdXQoKSBj
b25zdDsKQEAgLTU5MCwxMiArNTkwLDEyIEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFKExBWU9VVF9G
T1JNQVRUSU5HX0NPTlRFWFQpCiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxMYXlvdXRJbnRlZ3Jh
dGlvbjo6TGluZUxheW91dD4sCiAjZW5kaWYKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENvbXBs
ZXhMaW5lTGF5b3V0PgorICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8TGVnYWN5TGluZUxheW91dD4K
ICAgICA+IG1fbGluZUxheW91dDsKIAogICAgIGZyaWVuZCBjbGFzcyBMaW5lQnJlYWtlcjsKICAg
ICBmcmllbmQgY2xhc3MgTGluZVdpZHRoOyAvLyBOZWVkcyB0byBrbm93IEZsb2F0aW5nT2JqZWN0
Ci0gICAgZnJpZW5kIGNsYXNzIENvbXBsZXhMaW5lTGF5b3V0OworICAgIGZyaWVuZCBjbGFzcyBM
ZWdhY3lMaW5lTGF5b3V0OwogfTsKIAogaW5saW5lIGJvb2wgUmVuZGVyQmxvY2tGbG93OjpoYXNM
aW5lTGF5b3V0KCkgY29uc3QKQEAgLTYwMywxOSArNjAzLDE5IEBAIGlubGluZSBib29sIFJlbmRl
ckJsb2NrRmxvdzo6aGFzTGluZUxheW91dCgpIGNvbnN0CiAgICAgcmV0dXJuICFXVEY6OmhvbGRz
X2FsdGVybmF0aXZlPFdURjo6TW9ub3N0YXRlPihtX2xpbmVMYXlvdXQpOwogfQogCi1pbmxpbmUg
Ym9vbCBSZW5kZXJCbG9ja0Zsb3c6Omhhc0NvbXBsZXhMaW5lTGF5b3V0KCkgY29uc3QKK2lubGlu
ZSBib29sIFJlbmRlckJsb2NrRmxvdzo6aGFzTGVnYWN5TGluZUxheW91dCgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8c3RkOjp1bmlxdWVfcHRyPENvbXBsZXhM
aW5lTGF5b3V0Pj4obV9saW5lTGF5b3V0KTsKKyAgICByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5h
dGl2ZTxzdGQ6OnVuaXF1ZV9wdHI8TGVnYWN5TGluZUxheW91dD4+KG1fbGluZUxheW91dCk7CiB9
CiAKLWlubGluZSBjb25zdCBDb21wbGV4TGluZUxheW91dCogUmVuZGVyQmxvY2tGbG93Ojpjb21w
bGV4TGluZUxheW91dCgpIGNvbnN0CitpbmxpbmUgY29uc3QgTGVnYWN5TGluZUxheW91dCogUmVu
ZGVyQmxvY2tGbG93OjpsZWdhY3lMaW5lTGF5b3V0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gaGFz
Q29tcGxleExpbmVMYXlvdXQoKSA/IFdURjo6Z2V0PHN0ZDo6dW5pcXVlX3B0cjxDb21wbGV4TGlu
ZUxheW91dD4+KG1fbGluZUxheW91dCkuZ2V0KCkgOiBudWxscHRyOworICAgIHJldHVybiBoYXNM
ZWdhY3lMaW5lTGF5b3V0KCkgPyBXVEY6OmdldDxzdGQ6OnVuaXF1ZV9wdHI8TGVnYWN5TGluZUxh
eW91dD4+KG1fbGluZUxheW91dCkuZ2V0KCkgOiBudWxscHRyOwogfQogCi1pbmxpbmUgQ29tcGxl
eExpbmVMYXlvdXQqIFJlbmRlckJsb2NrRmxvdzo6Y29tcGxleExpbmVMYXlvdXQoKQoraW5saW5l
IExlZ2FjeUxpbmVMYXlvdXQqIFJlbmRlckJsb2NrRmxvdzo6bGVnYWN5TGluZUxheW91dCgpCiB7
Ci0gICAgcmV0dXJuIGhhc0NvbXBsZXhMaW5lTGF5b3V0KCkgPyBXVEY6OmdldDxzdGQ6OnVuaXF1
ZV9wdHI8Q29tcGxleExpbmVMYXlvdXQ+PihtX2xpbmVMYXlvdXQpLmdldCgpIDogbnVsbHB0cjsK
KyAgICByZXR1cm4gaGFzTGVnYWN5TGluZUxheW91dCgpID8gV1RGOjpnZXQ8c3RkOjp1bmlxdWVf
cHRyPExlZ2FjeUxpbmVMYXlvdXQ+PihtX2xpbmVMYXlvdXQpLmdldCgpIDogbnVsbHB0cjsKIH0K
IAogI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHQuY3BwCmluZGV4IDEyZDNlZmZjYWE1Zi4uY2RlNDVkMmVjMjE0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCkBAIC0xNTA0LDcgKzE1MDQs
NyBAQCB2b2lkIFJlbmRlclRleHQ6OnBvc2l0aW9uTGluZUJveChJbmxpbmVUZXh0Qm94JiB0ZXh0
Qm94KQogICAgIG1fY29udGFpbnNSZXZlcnNlZFRleHQgfD0gIXRleHRCb3guaXNMZWZ0VG9SaWdo
dERpcmVjdGlvbigpOwogfQogCi1ib29sIFJlbmRlclRleHQ6OnVzZXNDb21wbGV4TGluZUxheW91
dFBhdGgoKSBjb25zdAorYm9vbCBSZW5kZXJUZXh0Ojp1c2VzTGVnYWN5TGluZUxheW91dFBhdGgo
KSBjb25zdAogewogI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQogICAgIHJl
dHVybiAhTGF5b3V0SW50ZWdyYXRpb246OkxpbmVMYXlvdXQ6OmNvbnRhaW5pbmcoKnRoaXMpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgKaW5kZXggOWQ2MTdjNDdiMWI2Li45Yzdk
YWU4OGNlZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaApAQCAtMTY3LDcg
KzE2Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldENhbmRpZGF0ZUNvbXB1dGVkVGV4dFNpemUo
ZmxvYXQgc2l6ZSkgeyBtX2NhbmRpZGF0ZUNvbXB1dGVkVGV4dFNpemUgPSBzaXplOyB9CiAjZW5k
aWYKIAotICAgIGJvb2wgdXNlc0NvbXBsZXhMaW5lTGF5b3V0UGF0aCgpIGNvbnN0OworICAgIGJv
b2wgdXNlc0xlZ2FjeUxpbmVMYXlvdXRQYXRoKCkgY29uc3Q7CiAKICAgICBTdHJpbmdWaWV3IHN0
cmluZ1ZpZXcodW5zaWduZWQgc3RhcnQgPSAwLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBzdG9w
ID0gc3RkOjpudWxsb3B0KSBjb25zdDsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
b290SW5saW5lQm94LmNwcAppbmRleCA5Mzg5N2VkYjMxMjIuLmY1Yjg5ZTAwZWU1NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcApAQCAtNzM0LDE5ICs3MzQs
MTkgQEAgRWxsaXBzaXNCb3gqIFJvb3RJbmxpbmVCb3g6OmVsbGlwc2lzQm94KCkgY29uc3QKIAog
dm9pZCBSb290SW5saW5lQm94OjpyZW1vdmVMaW5lQm94RnJvbVJlbmRlck9iamVjdCgpCiB7Ci0g
ICAgLy8gTnVsbCBpZiB3ZSBhcmUgZGVzdHJveWluZyBDb21wbGV4TGluZUxheW91dC4KLSAgICBp
ZiAoYXV0byogY29tcGxleExpbmVMYXlvdXQgPSBibG9ja0Zsb3coKS5jb21wbGV4TGluZUxheW91
dCgpKQotICAgICAgICBjb21wbGV4TGluZUxheW91dC0+bGluZUJveGVzKCkucmVtb3ZlTGluZUJv
eCh0aGlzKTsKKyAgICAvLyBOdWxsIGlmIHdlIGFyZSBkZXN0cm95aW5nIExlZ2FjeUxpbmVMYXlv
dXQuCisgICAgaWYgKGF1dG8qIGxlZ2FjeUxpbmVMYXlvdXQgPSBibG9ja0Zsb3coKS5sZWdhY3lM
aW5lTGF5b3V0KCkpCisgICAgICAgIGxlZ2FjeUxpbmVMYXlvdXQtPmxpbmVCb3hlcygpLnJlbW92
ZUxpbmVCb3godGhpcyk7CiB9CiAKIHZvaWQgUm9vdElubGluZUJveDo6ZXh0cmFjdExpbmVCb3hG
cm9tUmVuZGVyT2JqZWN0KCkKIHsKLSAgICBibG9ja0Zsb3coKS5jb21wbGV4TGluZUxheW91dCgp
LT5saW5lQm94ZXMoKS5leHRyYWN0TGluZUJveCh0aGlzKTsKKyAgICBibG9ja0Zsb3coKS5sZWdh
Y3lMaW5lTGF5b3V0KCktPmxpbmVCb3hlcygpLmV4dHJhY3RMaW5lQm94KHRoaXMpOwogfQogCiB2
b2lkIFJvb3RJbmxpbmVCb3g6OmF0dGFjaExpbmVCb3hUb1JlbmRlck9iamVjdCgpCiB7Ci0gICAg
YmxvY2tGbG93KCkuY29tcGxleExpbmVMYXlvdXQoKS0+bGluZUJveGVzKCkuYXR0YWNoTGluZUJv
eCh0aGlzKTsKKyAgICBibG9ja0Zsb3coKS5sZWdhY3lMaW5lTGF5b3V0KCktPmxpbmVCb3hlcygp
LmF0dGFjaExpbmVCb3godGhpcyk7CiB9CiAKIExheW91dFJlY3QgUm9vdElubGluZUJveDo6cGFk
ZGVkTGF5b3V0T3ZlcmZsb3dSZWN0KExheW91dFVuaXQgZW5kUGFkZGluZykgY29uc3QKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVCcmVha2VyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5lL0xpbmVCcmVha2VyLmNwcAppbmRleCA1MjhlMjg2
ZmZmODMuLjZmZThlZjFjMjQ0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L2xpbmUvTGluZUJyZWFrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9saW5l
L0xpbmVCcmVha2VyLmNwcApAQCAtNjYsNyArNjYsNyBAQCB2b2lkIExpbmVCcmVha2VyOjpza2lw
TGVhZGluZ1doaXRlc3BhY2UoSW5saW5lQmlkaVJlc29sdmVyJiByZXNvbHZlciwgTGluZUluZm8m
CiAgICAgICAgICAgICAgICAgbGluZUluZm8uaW5jcmVtZW50UnVuc0Zyb21MZWFkaW5nV2hpdGVz
cGFjZSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKG9iamVjdC5pc0Zsb2F0
aW5nKCkpCi0gICAgICAgICAgICBtX2Jsb2NrLmNvbXBsZXhMaW5lTGF5b3V0KCktPnBvc2l0aW9u
TmV3RmxvYXRPbkxpbmUoKm1fYmxvY2suaW5zZXJ0RmxvYXRpbmdPYmplY3QoZG93bmNhc3Q8UmVu
ZGVyQm94PihvYmplY3QpKSwgbGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSwgbGluZUluZm8sIHdp
ZHRoKTsKKyAgICAgICAgICAgIG1fYmxvY2subGVnYWN5TGluZUxheW91dCgpLT5wb3NpdGlvbk5l
d0Zsb2F0T25MaW5lKCptX2Jsb2NrLmluc2VydEZsb2F0aW5nT2JqZWN0KGRvd25jYXN0PFJlbmRl
ckJveD4ob2JqZWN0KSksIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUsIGxpbmVJbmZvLCB3aWR0
aCk7CiAgICAgICAgIGVsc2UgaWYgKG9iamVjdC5zdHlsZSgpLmhhc1RleHRDb21iaW5lKCkgJiYg
aXM8UmVuZGVyQ29tYmluZVRleHQ+KG9iamVjdCkpIHsKICAgICAgICAgICAgIGRvd25jYXN0PFJl
bmRlckNvbWJpbmVUZXh0PihvYmplY3QpLmNvbWJpbmVUZXh0SWZOZWVkZWQoKTsKICAgICAgICAg
ICAgIGlmIChkb3duY2FzdDxSZW5kZXJDb21iaW5lVGV4dD4ob2JqZWN0KS5pc0NvbWJpbmVkKCkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGluZS9MaW5lQnJlYWtlci5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvTGluZUJyZWFrZXIuaAppbmRleCBkMDA1
OTMyMmQwODcuLmU4M2RlMzRhZjUyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL2xpbmUvTGluZUJyZWFrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbGlu
ZS9MaW5lQnJlYWtlci5oCkBAIC02Niw3ICs2Niw3IEBAIHByaXZhdGU6CiAgICAgRmxvYXRpbmdP
YmplY3QqIGluc2VydEZsb2F0aW5nT2JqZWN0KFJlbmRlckJveCYgZmxvYXRCb3gpIHsgcmV0dXJu
IG1fYmxvY2suaW5zZXJ0RmxvYXRpbmdPYmplY3QoZmxvYXRCb3gpOyB9CiAgICAgYm9vbCBwb3Np
dGlvbk5ld0Zsb2F0T25MaW5lKGNvbnN0IEZsb2F0aW5nT2JqZWN0JiBuZXdGbG9hdCwgRmxvYXRp
bmdPYmplY3QqIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUsIExpbmVJbmZvJiBsaW5lSW5mbywg
TGluZVdpZHRoJiB3aWR0aCkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2Jsb2NrLmNvbXBsZXhM
aW5lTGF5b3V0KCktPnBvc2l0aW9uTmV3RmxvYXRPbkxpbmUobmV3RmxvYXQsIGxhc3RGbG9hdEZy
b21QcmV2aW91c0xpbmUsIGxpbmVJbmZvLCB3aWR0aCk7CisgICAgICAgIHJldHVybiBtX2Jsb2Nr
LmxlZ2FjeUxpbmVMYXlvdXQoKS0+cG9zaXRpb25OZXdGbG9hdE9uTGluZShuZXdGbG9hdCwgbGFz
dEZsb2F0RnJvbVByZXZpb3VzTGluZSwgbGluZUluZm8sIHdpZHRoKTsKICAgICB9CiAKICAgICBS
ZW5kZXJCbG9ja0Zsb3cmIG1fYmxvY2s7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>