<?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>37735</bug_id>
          
          <creation_ts>2010-04-16 16:52:47 -0700</creation_ts>
          <short_desc>Remove JSC specific code from WebCore::AtomicString</short_desc>
          <delta_ts>2010-04-16 20:26:36 -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>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Gavin Barraclough">barraclough</reporter>
          <assigned_to name="Gavin Barraclough">barraclough</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>213495</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-04-16 16:52:47 -0700</bug_when>
    <thetext>Add generic constructor/add/find methods that take a UChar* &amp; length, along with a known existing hash for the string.
This removes the remaining JSC specific code from platform/text.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213497</commentid>
    <comment_count>1</comment_count>
      <attachid>53582</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-04-16 16:54:33 -0700</bug_when>
    <thetext>Created attachment 53582
The patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213501</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-16 17:00:12 -0700</bug_when>
    <thetext>Attachment 53582 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/platform/text/AtomicString.cpp:194:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/platform/text/AtomicString.cpp:243:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 2 in 28 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213502</commentid>
    <comment_count>3</comment_count>
      <attachid>53582</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-04-16 17:01:23 -0700</bug_when>
    <thetext>Comment on attachment 53582
The patch

r=me!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213516</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-16 17:20:41 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/57766 might have broken Qt Linux ARMv5 Release and Qt Linux ARMv7 Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213519</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-16 17:23:50 -0700</bug_when>
    <thetext>It appears this broke a bunch of bots.  Wasn&apos;t up for review long enough for the EWSes to catch it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213570</commentid>
    <comment_count>6</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-04-16 20:26:36 -0700</bug_when>
    <thetext>Landed in r57766.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53582</attachid>
            <date>2010-04-16 16:54:33 -0700</date>
            <delta_ts>2010-04-16 17:01:23 -0700</delta_ts>
            <desc>The patch</desc>
            <filename>patch.atomicstringNoJSC.txt</filename>
            <type>text/plain</type>
            <size>44355</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1Nzc2NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsOTcgQEAKKzIwMTAtMDQtMTYgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91
Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzczNQorICAg
ICAgICBSZW1vdmUgSlNDIHNwZWNpZmljIGNvZGUgZnJvbSBXZWJDb3JlOjpBdG9taWNTdHJpbmcK
KworICAgICAgICBBZGQgZ2VuZXJpYyBjb25zdHJ1Y3Rvci9hZGQvZmluZCBtZXRob2RzIHRoYXQg
dGFrZSBhIFVDaGFyKiAmIGxlbmd0aCwgYWxvbmcKKyAgICAgICAgd2l0aCBhIGtub3duIGV4aXN0
aW5nIGhhc2ggZm9yIHRoZSBzdHJpbmcuCisgICAgICAgIFRoaXMgcmVtb3ZlcyB0aGUgcmVtYWlu
aW5nIEpTQyBzcGVjaWZpYyBjb2RlIGZyb20gcGxhdGZvcm0vdGV4dC4KKworICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTQWJzdHJhY3RXb3JrZXJDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNBYnN0cmFjdFdvcmtlcjo6YWRkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpK
U0Fic3RyYWN0V29ya2VyOjpyZW1vdmVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0RPTUFwcGxpY2F0aW9uQ2FjaGVDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNET01BcHBsaWNhdGlvbkNhY2hlOjphZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTRE9NQXBwbGljYXRpb25DYWNoZTo6cmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnVzdHJp
bmdUb0F0b21pY1N0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjppZGVudGlmaWVyVG9BdG9taWNT
dHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZEF0b21pY1N0cmluZyk6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNET01CaW5kaW5nLmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01X
aW5kb3dDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2hpbGRGcmFtZUdldHRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6Om9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6SlNE
T01XaW5kb3c6OmFkZEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5k
b3c6OnJlbW92ZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRWxlbWVu
dEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0VsZW1lbnQ6OnNldEF0dHJpYnV0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpKU0VsZW1lbnQ6OnNldEF0dHJpYnV0ZU5TKToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0V2ZW50U291cmNlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTRXZlbnRTb3VyY2U6OmFkZEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNF
dmVudFNvdXJjZTo6cmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNIVE1MQWxsQ29sbGVjdGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXROYW1l
ZEl0ZW1zKToKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTEFsbENvbGxlY3Rpb246OmNhbkdldEl0
ZW1zRm9yTmFtZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MQ29sbGVjdGlvbkN1c3Rv
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXROYW1lZEl0ZW1zKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTSFRNTENvbGxlY3Rpb246OmNhbkdldEl0ZW1zRm9yTmFtZSk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNI
VE1MRG9jdW1lbnQ6OmNhbkdldEl0ZW1zRm9yTmFtZSk6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNIVE1MRm9ybUVsZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MRm9y
bUVsZW1lbnQ6OmNhbkdldEl0ZW1zRm9yTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxG
b3JtRWxlbWVudDo6bmFtZUdldHRlcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MRnJh
bWVTZXRFbGVtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTEZyYW1lU2V0
RWxlbWVudDo6Y2FuR2V0SXRlbXNGb3JOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTEZy
YW1lU2V0RWxlbWVudDo6bmFtZUdldHRlcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNNZXNz
YWdlRXZlbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNNZXNzYWdlRXZlbnQ6Omlu
aXRNZXNzYWdlRXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNNZXNzYWdlUG9ydDo6YWRkRXZlbnRMaXN0ZW5l
cik6CisgICAgICAgIChXZWJDb3JlOjpKU01lc3NhZ2VQb3J0OjpyZW1vdmVFdmVudExpc3RlbmVy
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU01pbWVUeXBlQXJyYXlDdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SlNNaW1lVHlwZUFycmF5OjpjYW5HZXRJdGVtc0Zvck5hbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNNaW1lVHlwZUFycmF5OjpuYW1lR2V0dGVyKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNOb2RlOjph
ZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTTm9kZTo6cmVtb3ZlRXZlbnRM
aXN0ZW5lcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNOb2RlTGlzdEN1c3RvbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU05vZGVMaXN0OjpjYW5HZXRJdGVtc0Zvck5hbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNOb2RlTGlzdDo6bmFtZUdldHRlcik6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNQbHVnaW5BcnJheUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1BsdWdpbkFy
cmF5OjpjYW5HZXRJdGVtc0Zvck5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6SlNQbHVnaW5BcnJh
eTo6bmFtZUdldHRlcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNQbHVnaW5DdXN0b20uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNQbHVnaW46OmNhbkdldEl0ZW1zRm9yTmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpKU1BsdWdpbjo6bmFtZUdldHRlcik6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNQb3BTdGF0ZUV2ZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTUG9wU3Rh
dGVFdmVudDo6aW5pdFBvcFN0YXRlRXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU1ZH
RWxlbWVudEluc3RhbmNlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHRWxlbWVu
dEluc3RhbmNlOjphZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU1ZHRWxl
bWVudEluc3RhbmNlOjpyZW1vdmVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU1dlYlNvY2tldEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYlNvY2tldDo6
YWRkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYlNvY2tldDo6cmVtb3Zl
RXZlbnRMaXN0ZW5lcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0Q3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTV29ya2VyQ29udGV4dDo6YWRkRXZlbnRMaXN0
ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpKU1dvcmtlckNvbnRleHQ6OnJlbW92ZUV2ZW50TGlz
dGVuZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNYTUxIdHRwUmVxdWVzdDo6c2V0UmVxdWVzdEhlYWRlcik6
CisgICAgICAgIChXZWJDb3JlOjpKU1hNTEh0dHBSZXF1ZXN0OjpnZXRSZXNwb25zZUhlYWRlcik6
CisgICAgICAgIChXZWJDb3JlOjpKU1hNTEh0dHBSZXF1ZXN0OjphZGRFdmVudExpc3RlbmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTWE1MSHR0cFJlcXVlc3Q6OnJlbW92ZUV2ZW50TGlzdGVuZXIp
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RVcGxvYWRDdXN0b20uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNYTUxIdHRwUmVxdWVzdFVwbG9hZDo6YWRkRXZlbnRMaXN0
ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpKU1hNTEh0dHBSZXF1ZXN0VXBsb2FkOjpyZW1vdmVF
dmVudExpc3RlbmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L0F0b21pY1N0cmluZy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpBdG9taWNTdHJpbmc6OmFkZCk6CisgICAgICAgIChXZWJDb3Jl
OjpBdG9taWNTdHJpbmc6OmZpbmQpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvQXRvbWljU3Ry
aW5nLmg6CisgICAgICAgIChXZWJDb3JlOjpBdG9taWNTdHJpbmc6OkF0b21pY1N0cmluZyk6CisK
IDIwMTAtMDQtMTYgIEZ1bWl0b3NoaSBVa2FpICA8dWthaUBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgQWxleGV5IFByb3NrdXJ5YWtvdi4KSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNBYnN0cmFjdFdvcmtlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0Fic3RyYWN0V29ya2VyQ3VzdG9tLmNwcAkocmV2aXNpb24gNTc3NDcpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQWJzdHJhY3RXb3JrZXJDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIEpTVmFsdWUgSlNBYnN0cmFjdFdvcmtlcjo6YWRkRXZl
bnRMaXN0ZW4KICAgICBpZiAoIWxpc3RlbmVyLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogCi0gICAgaW1wbCgpLT5hZGRFdmVudExpc3RlbmVyKGFyZ3MuYXQoMCku
dG9TdHJpbmcoZXhlYyksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxpc3RlbmVy
KSwgdGhpcywgZmFsc2UsIGN1cnJlbnRXb3JsZChleGVjKSksIGFyZ3MuYXQoMikudG9Cb29sZWFu
KGV4ZWMpKTsKKyAgICBpbXBsKCktPmFkZEV2ZW50TGlzdGVuZXIodXN0cmluZ1RvQXRvbWljU3Ry
aW5nKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykpLCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShh
c09iamVjdChsaXN0ZW5lciksIHRoaXMsIGZhbHNlLCBjdXJyZW50V29ybGQoZXhlYykpLCBhcmdz
LmF0KDIpLnRvQm9vbGVhbihleGVjKSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAK
QEAgLTYwLDcgKzYwLDcgQEAgSlNWYWx1ZSBKU0Fic3RyYWN0V29ya2VyOjpyZW1vdmVFdmVudExp
cwogICAgIGlmICghbGlzdGVuZXIuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAKLSAgICBpbXBsKCktPnJlbW92ZUV2ZW50TGlzdGVuZXIoYXJncy5hdCgwKS50b1N0
cmluZyhleGVjKSwgSlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCB0
aGlzLCBmYWxzZSwgY3VycmVudFdvcmxkKGV4ZWMpKS5nZXQoKSwgYXJncy5hdCgyKS50b0Jvb2xl
YW4oZXhlYykpOworICAgIGltcGwoKS0+cmVtb3ZlRXZlbnRMaXN0ZW5lcih1c3RyaW5nVG9BdG9t
aWNTdHJpbmcoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSksIEpTRXZlbnRMaXN0ZW5lcjo6Y3Jl
YXRlKGFzT2JqZWN0KGxpc3RlbmVyKSwgdGhpcywgZmFsc2UsIGN1cnJlbnRXb3JsZChleGVjKSku
Z2V0KCksIGFyZ3MuYXQoMikudG9Cb29sZWFuKGV4ZWMpKTsKICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKIH0KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUFwcGxpY2F0aW9uQ2Fj
aGVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01BcHBs
aWNhdGlvbkNhY2hlQ3VzdG9tLmNwcAkocmV2aXNpb24gNTc3NDcpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NQXBwbGljYXRpb25DYWNoZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTkxLDcgKzkxLDcgQEAgSlNWYWx1ZSBKU0RPTUFwcGxpY2F0aW9uQ2FjaGU6OmFkZEV2ZW50TAog
ICAgIGlmICghbGlzdGVuZXIuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAKLSAgICBpbXBsKCktPmFkZEV2ZW50TGlzdGVuZXIoYXJncy5hdCgwKS50b1N0cmluZyhl
eGVjKSwgSlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCB0aGlzLCBm
YWxzZSwgY3VycmVudFdvcmxkKGV4ZWMpKSwgYXJncy5hdCgyKS50b0Jvb2xlYW4oZXhlYykpOwor
ICAgIGltcGwoKS0+YWRkRXZlbnRMaXN0ZW5lcih1c3RyaW5nVG9BdG9taWNTdHJpbmcoYXJncy5h
dCgwKS50b1N0cmluZyhleGVjKSksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxp
c3RlbmVyKSwgdGhpcywgZmFsc2UsIGN1cnJlbnRXb3JsZChleGVjKSksIGFyZ3MuYXQoMikudG9C
b29sZWFuKGV4ZWMpKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIApAQCAtMTAxLDcg
KzEwMSw3IEBAIEpTVmFsdWUgSlNET01BcHBsaWNhdGlvbkNhY2hlOjpyZW1vdmVFdmUKICAgICBp
ZiAoIWxpc3RlbmVyLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
Ci0gICAgaW1wbCgpLT5yZW1vdmVFdmVudExpc3RlbmVyKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhl
YyksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxpc3RlbmVyKSwgdGhpcywgZmFs
c2UsIGN1cnJlbnRXb3JsZChleGVjKSkuZ2V0KCksIGFyZ3MuYXQoMikudG9Cb29sZWFuKGV4ZWMp
KTsKKyAgICBpbXBsKCktPnJlbW92ZUV2ZW50TGlzdGVuZXIodXN0cmluZ1RvQXRvbWljU3RyaW5n
KGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykpLCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09i
amVjdChsaXN0ZW5lciksIHRoaXMsIGZhbHNlLCBjdXJyZW50V29ybGQoZXhlYykpLmdldCgpLCBh
cmdzLmF0KDIpLnRvQm9vbGVhbihleGVjKSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9
CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAJKHJldmlzaW9uIDU3NzQ4
KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00OTksNyArNDk5LDYgQEAgSlNWYWx1ZSBqc1N0cmluZ09yRmFsc2UoRXhlY1N0YXRlKiBl
eGVjLAogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCB1cmwuc3RyaW5nKCkpOwogfQogCi0KIFN0
cmluZyB1c3RyaW5nVG9TdHJpbmcoY29uc3QgVVN0cmluZyYgdSkKIHsKICAgICBpZiAodS5pc051
bGwoKSkKQEAgLTUyMSw2ICs1MjAsMzIgQEAgU3RyaW5nIGlkZW50aWZpZXJUb1N0cmluZyhjb25z
dCBJZGVudGlmaQogICAgIHJldHVybiB1c3RyaW5nVG9TdHJpbmcoaS51c3RyaW5nKCkpOwogfQog
CitBdG9taWNTdHJpbmcgdXN0cmluZ1RvQXRvbWljU3RyaW5nKGNvbnN0IFVTdHJpbmcmIHUpCit7
CisgICAgVVN0cmluZ0ltcGwqIGltcGwgPSB1LnJlcCgpOworICAgIGlmICghaW1wbCkKKyAgICAg
ICAgcmV0dXJuIEF0b21pY1N0cmluZygpOworICAgIHJldHVybiBBdG9taWNTdHJpbmcoaW1wbC0+
Y2hhcmFjdGVycygpLCBpbXBsLT5sZW5ndGgoKSwgaW1wbC0+aGFzaCgpKTsKK30KKworQXRvbWlj
U3RyaW5nIGlkZW50aWZpZXJUb0F0b21pY1N0cmluZyhjb25zdCBJZGVudGlmaWVyJiBpZGVudGlm
aWVyKQoreworICAgIGlmIChpZGVudGlmaWVyLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gQXRv
bWljU3RyaW5nKCk7CisgICAgVVN0cmluZ0ltcGwqIGltcGwgPSBpZGVudGlmaWVyLnVzdHJpbmco
KS5yZXAoKTsKKyAgICBBU1NFUlQoaW1wbC0+ZXhpc3RpbmdIYXNoKCkpOworICAgIHJldHVybiBB
dG9taWNTdHJpbmcoaW1wbC0+Y2hhcmFjdGVycygpLCBpbXBsLT5sZW5ndGgoKSwgaW1wbC0+ZXhp
c3RpbmdIYXNoKCkpOworfQorCitBdG9taWNTdHJpbmdJbXBsKiBmaW5kQXRvbWljU3RyaW5nKGNv
bnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIpCit7CisgICAgaWYgKGlkZW50aWZpZXIuaXNOdWxs
KCkpCisgICAgICAgIHJldHVybiAwOworICAgIFVTdHJpbmdJbXBsKiBpbXBsID0gaWRlbnRpZmll
ci51c3RyaW5nKCkucmVwKCk7CisgICAgQVNTRVJUKGltcGwtPmV4aXN0aW5nSGFzaCgpKTsKKyAg
ICByZXR1cm4gQXRvbWljU3RyaW5nOjpmaW5kKGltcGwtPmNoYXJhY3RlcnMoKSwgaW1wbC0+bGVu
Z3RoKCksIGltcGwtPmV4aXN0aW5nSGFzaCgpKTsKK30KKwogU3RyaW5nIHZhbHVlVG9TdHJpbmdX
aXRoTnVsbENoZWNrKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBpZiAo
dmFsdWUuaXNOdWxsKCkpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJKHJldmlz
aW9uIDU3NzQ4KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYyLDYgKzI2MiwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgU3Ry
aW5nIHVzdHJpbmdUb1N0cmluZyhjb25zdCBKU0M6OlVTdHJpbmcmKTsKICAgICBKU0M6OlVTdHJp
bmcgc3RyaW5nVG9VU3RyaW5nKGNvbnN0IFN0cmluZyYpOwogCisgICAgQXRvbWljU3RyaW5nIGlk
ZW50aWZpZXJUb0F0b21pY1N0cmluZyhjb25zdCBKU0M6OklkZW50aWZpZXImKTsKKyAgICBBdG9t
aWNTdHJpbmcgdXN0cmluZ1RvQXRvbWljU3RyaW5nKGNvbnN0IEpTQzo6VVN0cmluZyYpOworICAg
IEF0b21pY1N0cmluZ0ltcGwqIGZpbmRBdG9taWNTdHJpbmcoY29uc3QgSlNDOjpJZGVudGlmaWVy
Jik7CisKICAgICBTdHJpbmcgdmFsdWVUb1N0cmluZ1dpdGhOdWxsQ2hlY2soSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkpTVmFsdWUpOyAvLyBudWxsIGlmIHRoZSB2YWx1ZSBpcyBudWxsCiAgICAgU3Ry
aW5nIHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkpTVmFsdWUpOyAvLyBudWxsIGlmIHRoZSB2YWx1ZSBpcyBudWxsIG9yIHVuZGVmaW5l
ZAogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcAkocmV2
aXNpb24gNTc3NDcpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTMzLDcgKzEzMyw3IEBAIEpTVmFsdWUgbm9uQ2FjaGluZ1N0
YXRpY0Z1bmN0aW9uR2V0dGVyKEUKIAogc3RhdGljIEpTVmFsdWUgY2hpbGRGcmFtZUdldHRlcihF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5TmFtZSkKIHsKLSAgICByZXR1cm4gdG9KUyhleGVjLCBzdGF0aWNfY2FzdDxKU0RPTVdpbmRv
dyo+KGFzT2JqZWN0KHNsb3RCYXNlKSktPmltcGwoKS0+ZnJhbWUoKS0+dHJlZSgpLT5jaGlsZChB
dG9taWNTdHJpbmcocHJvcGVydHlOYW1lKSktPmRvbVdpbmRvdygpKTsKKyAgICByZXR1cm4gdG9K
UyhleGVjLCBzdGF0aWNfY2FzdDxKU0RPTVdpbmRvdyo+KGFzT2JqZWN0KHNsb3RCYXNlKSktPmlt
cGwoKS0+ZnJhbWUoKS0+dHJlZSgpLT5jaGlsZChpZGVudGlmaWVyVG9BdG9taWNTdHJpbmcocHJv
cGVydHlOYW1lKSktPmRvbVdpbmRvdygpKTsKIH0KIAogc3RhdGljIEpTVmFsdWUgaW5kZXhHZXR0
ZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RCYXNlLCB1bnNpZ25lZCBpbmRleCkKQEAg
LTI1MSw3ICsyNTEsNyBAQCBib29sIEpTRE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhl
CiAgICAgLy8gbmFtaW5nIGZyYW1lcyB0aGluZ3MgdGhhdCBjb25mbGljdCB3aXRoIHdpbmRvdyBw
cm9wZXJ0aWVzIHRoYXQKICAgICAvLyBhcmUgaW4gTW96IGJ1dCBub3QgSUUuIFNpbmNlIHdlIGhh
dmUgc29tZSBvZiB0aGVzZSwgd2UgaGF2ZSB0byBkbwogICAgIC8vIGl0IHRoZSBNb3ogd2F5Lgot
ICAgIGlmIChpbXBsKCktPmZyYW1lKCktPnRyZWUoKS0+Y2hpbGQocHJvcGVydHlOYW1lKSkgewor
ICAgIGlmIChpbXBsKCktPmZyYW1lKCktPnRyZWUoKS0+Y2hpbGQoaWRlbnRpZmllclRvQXRvbWlj
U3RyaW5nKHByb3BlcnR5TmFtZSkpKSB7CiAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXMsIGNo
aWxkRnJhbWVHZXR0ZXIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0yODksNyAr
Mjg5LDcgQEAgYm9vbCBKU0RPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZQogICAgIC8v
IEFsbG93IHNob3J0Y3V0cyBsaWtlICdJbWFnZTEnIGluc3RlYWQgb2YgZG9jdW1lbnQuaW1hZ2Vz
LkltYWdlMQogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGltcGwoKS0+ZnJhbWUoKS0+ZG9jdW1l
bnQoKTsKICAgICBpZiAoZG9jdW1lbnQtPmlzSFRNTERvY3VtZW50KCkpIHsKLSAgICAgICAgQXRv
bWljU3RyaW5nSW1wbCogYXRvbWljUHJvcGVydHlOYW1lID0gQXRvbWljU3RyaW5nOjpmaW5kKHBy
b3BlcnR5TmFtZSk7CisgICAgICAgIEF0b21pY1N0cmluZ0ltcGwqIGF0b21pY1Byb3BlcnR5TmFt
ZSA9IGZpbmRBdG9taWNTdHJpbmcocHJvcGVydHlOYW1lKTsKICAgICAgICAgaWYgKGF0b21pY1By
b3BlcnR5TmFtZSAmJiAoc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4oZG9jdW1lbnQpLT5oYXNO
YW1lZEl0ZW0oYXRvbWljUHJvcGVydHlOYW1lKSB8fCBkb2N1bWVudC0+aGFzRWxlbWVudFdpdGhJ
ZChhdG9taWNQcm9wZXJ0eU5hbWUpKSkgewogICAgICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhp
cywgbmFtZWRJdGVtR2V0dGVyKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMzQwLDcg
KzM0MCw3IEBAIGJvb2wgSlNET01XaW5kb3c6OmdldE93blByb3BlcnR5RGVzY3JpcHQKICAgICAv
LyBuYW1pbmcgZnJhbWVzIHRoaW5ncyB0aGF0IGNvbmZsaWN0IHdpdGggd2luZG93IHByb3BlcnRp
ZXMgdGhhdAogICAgIC8vIGFyZSBpbiBNb3ogYnV0IG5vdCBJRS4gU2luY2Ugd2UgaGF2ZSBzb21l
IG9mIHRoZXNlLCB3ZSBoYXZlIHRvIGRvCiAgICAgLy8gaXQgdGhlIE1veiB3YXkuCi0gICAgaWYg
KGltcGwoKS0+ZnJhbWUoKS0+dHJlZSgpLT5jaGlsZChwcm9wZXJ0eU5hbWUpKSB7CisgICAgaWYg
KGltcGwoKS0+ZnJhbWUoKS0+dHJlZSgpLT5jaGlsZChpZGVudGlmaWVyVG9BdG9taWNTdHJpbmco
cHJvcGVydHlOYW1lKSkpIHsKICAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7CiAgICAgICAgIHNs
b3Quc2V0Q3VzdG9tKHRoaXMsIGNoaWxkRnJhbWVHZXR0ZXIpOwogICAgICAgICBkZXNjcmlwdG9y
LnNldERlc2NyaXB0b3Ioc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpLCBSZWFkT25s
eSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CkBAIC0zNTksNyArMzU5LDcgQEAgYm9vbCBKU0RP
TVdpbmRvdzo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdAogICAgIC8vIEFsbG93IHNob3J0Y3V0cyBs
aWtlICdJbWFnZTEnIGluc3RlYWQgb2YgZG9jdW1lbnQuaW1hZ2VzLkltYWdlMQogICAgIERvY3Vt
ZW50KiBkb2N1bWVudCA9IGltcGwoKS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKTsKICAgICBpZiAoZG9j
dW1lbnQtPmlzSFRNTERvY3VtZW50KCkpIHsKLSAgICAgICAgQXRvbWljU3RyaW5nSW1wbCogYXRv
bWljUHJvcGVydHlOYW1lID0gQXRvbWljU3RyaW5nOjpmaW5kKHByb3BlcnR5TmFtZSk7CisgICAg
ICAgIEF0b21pY1N0cmluZ0ltcGwqIGF0b21pY1Byb3BlcnR5TmFtZSA9IGZpbmRBdG9taWNTdHJp
bmcocHJvcGVydHlOYW1lKTsKICAgICAgICAgaWYgKGF0b21pY1Byb3BlcnR5TmFtZSAmJiAoc3Rh
dGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4oZG9jdW1lbnQpLT5oYXNOYW1lZEl0ZW0oYXRvbWljUHJv
cGVydHlOYW1lKSB8fCBkb2N1bWVudC0+aGFzRWxlbWVudFdpdGhJZChhdG9taWNQcm9wZXJ0eU5h
bWUpKSkgewogICAgICAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7CiAgICAgICAgICAgICBzbG90
LnNldEN1c3RvbSh0aGlzLCBuYW1lZEl0ZW1HZXR0ZXIpOwpAQCAtNzI1LDcgKzcyNSw3IEBAIHN0
YXRpYyBib29sIGRvbVdpbmRvd0FsbG93UG9wVXAoRnJhbWUqIGEKIEpTVmFsdWUgSlNET01XaW5k
b3c6Om9wZW4oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIFN0
cmluZyB1cmxTdHJpbmcgPSB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKGV4
ZWMsIGFyZ3MuYXQoMCkpOwotICAgIEF0b21pY1N0cmluZyBmcmFtZU5hbWUgPSBhcmdzLmF0KDEp
LmlzVW5kZWZpbmVkT3JOdWxsKCkgPyAiX2JsYW5rIiA6IEF0b21pY1N0cmluZyhhcmdzLmF0KDEp
LnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBBdG9taWNTdHJpbmcgZnJhbWVOYW1lID0gYXJncy5hdCgx
KS5pc1VuZGVmaW5lZE9yTnVsbCgpID8gIl9ibGFuayIgOiB1c3RyaW5nVG9BdG9taWNTdHJpbmco
YXJncy5hdCgxKS50b1N0cmluZyhleGVjKSk7CiAgICAgV2luZG93RmVhdHVyZXMgd2luZG93RmVh
dHVyZXModmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjayhleGVjLCBhcmdzLmF0
KDIpKSk7CiAKICAgICBGcmFtZSogZnJhbWUgPSBpbXBsKCktPmZyYW1lKCk7CkBAIC05NDQsNyAr
OTQ0LDcgQEAgSlNWYWx1ZSBKU0RPTVdpbmRvdzo6YWRkRXZlbnRMaXN0ZW5lcihFeAogICAgIGlm
ICghbGlzdGVuZXIuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAK
LSAgICBpbXBsKCktPmFkZEV2ZW50TGlzdGVuZXIoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSwg
SlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCB0aGlzLCBmYWxzZSwg
Y3VycmVudFdvcmxkKGV4ZWMpKSwgYXJncy5hdCgyKS50b0Jvb2xlYW4oZXhlYykpOworICAgIGlt
cGwoKS0+YWRkRXZlbnRMaXN0ZW5lcih1c3RyaW5nVG9BdG9taWNTdHJpbmcoYXJncy5hdCgwKS50
b1N0cmluZyhleGVjKSksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxpc3RlbmVy
KSwgdGhpcywgZmFsc2UsIGN1cnJlbnRXb3JsZChleGVjKSksIGFyZ3MuYXQoMikudG9Cb29sZWFu
KGV4ZWMpKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIApAQCAtOTU4LDcgKzk1OCw3
IEBAIEpTVmFsdWUgSlNET01XaW5kb3c6OnJlbW92ZUV2ZW50TGlzdGVuZXIKICAgICBpZiAoIWxp
c3RlbmVyLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAg
aW1wbCgpLT5yZW1vdmVFdmVudExpc3RlbmVyKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyksIEpT
RXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxpc3RlbmVyKSwgdGhpcywgZmFsc2UsIGN1
cnJlbnRXb3JsZChleGVjKSkuZ2V0KCksIGFyZ3MuYXQoMikudG9Cb29sZWFuKGV4ZWMpKTsKKyAg
ICBpbXBsKCktPnJlbW92ZUV2ZW50TGlzdGVuZXIodXN0cmluZ1RvQXRvbWljU3RyaW5nKGFyZ3Mu
YXQoMCkudG9TdHJpbmcoZXhlYykpLCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChs
aXN0ZW5lciksIHRoaXMsIGZhbHNlLCBjdXJyZW50V29ybGQoZXhlYykpLmdldCgpLCBhcmdzLmF0
KDIpLnRvQm9vbGVhbihleGVjKSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDU3NzQ3
KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0VsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02Nyw4ICs2Nyw4IEBAIHZvaWQgSlNFbGVtZW50OjptYXJrQ2hpbGRyZW4oTWFya1N0
YWNrJiAKIEpTVmFsdWUgSlNFbGVtZW50OjpzZXRBdHRyaWJ1dGUoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIEF0
b21pY1N0cmluZyBuYW1lID0gYXJncy5hdCgwKS50b1N0cmluZyhleGVjKTsKLSAgICBBdG9taWNT
dHJpbmcgdmFsdWUgPSBhcmdzLmF0KDEpLnRvU3RyaW5nKGV4ZWMpOworICAgIEF0b21pY1N0cmlu
ZyBuYW1lID0gdXN0cmluZ1RvQXRvbWljU3RyaW5nKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykp
OworICAgIEF0b21pY1N0cmluZyB2YWx1ZSA9IHVzdHJpbmdUb0F0b21pY1N0cmluZyhhcmdzLmF0
KDEpLnRvU3RyaW5nKGV4ZWMpKTsKIAogICAgIEVsZW1lbnQqIGltcCA9IGltcGwoKTsKICAgICBp
ZiAoIWFsbG93U2V0dGluZ1NyY1RvSmF2YXNjcmlwdFVSTChleGVjLCBpbXAsIG5hbWUsIHZhbHVl
KSkKQEAgLTEwMSw4ICsxMDEsOCBAQCBKU1ZhbHVlIEpTRWxlbWVudDo6c2V0QXR0cmlidXRlTlMo
RXhlY1N0CiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgQXRvbWljU3RyaW5nIG5h
bWVzcGFjZVVSSSA9IHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKGV4ZWMsIGFyZ3MuYXQoMCkp
OwotICAgIEF0b21pY1N0cmluZyBxdWFsaWZpZWROYW1lID0gYXJncy5hdCgxKS50b1N0cmluZyhl
eGVjKTsKLSAgICBBdG9taWNTdHJpbmcgdmFsdWUgPSBhcmdzLmF0KDIpLnRvU3RyaW5nKGV4ZWMp
OworICAgIEF0b21pY1N0cmluZyBxdWFsaWZpZWROYW1lID0gdXN0cmluZ1RvQXRvbWljU3RyaW5n
KGFyZ3MuYXQoMSkudG9TdHJpbmcoZXhlYykpOworICAgIEF0b21pY1N0cmluZyB2YWx1ZSA9IHVz
dHJpbmdUb0F0b21pY1N0cmluZyhhcmdzLmF0KDIpLnRvU3RyaW5nKGV4ZWMpKTsKIAogICAgIEVs
ZW1lbnQqIGltcCA9IGltcGwoKTsKICAgICBpZiAoIWFsbG93U2V0dGluZ1NyY1RvSmF2YXNjcmlw
dFVSTChleGVjLCBpbXAsIHF1YWxpZmllZE5hbWUsIHZhbHVlKSkKSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNFdmVudFNvdXJjZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0V2ZW50U291cmNlQ3VzdG9tLmNwcAkocmV2aXNpb24gNTc3NDcpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRTb3VyY2VDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00OSw3ICs0OSw3IEBAIEpTVmFsdWUgSlNFdmVudFNvdXJjZTo6YWRkRXZlbnRMaXN0ZW5l
cigKICAgICBpZiAoIWxpc3RlbmVyLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogCi0gICAgaW1wbCgpLT5hZGRFdmVudExpc3RlbmVyKGFyZ3MuYXQoMCkudG9TdHJp
bmcoZXhlYyksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxpc3RlbmVyKSwgdGhp
cywgZmFsc2UsIGN1cnJlbnRXb3JsZChleGVjKSkuZ2V0KCksIGFyZ3MuYXQoMikudG9Cb29sZWFu
KGV4ZWMpKTsKKyAgICBpbXBsKCktPmFkZEV2ZW50TGlzdGVuZXIodXN0cmluZ1RvQXRvbWljU3Ry
aW5nKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykpLCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShh
c09iamVjdChsaXN0ZW5lciksIHRoaXMsIGZhbHNlLCBjdXJyZW50V29ybGQoZXhlYykpLmdldCgp
LCBhcmdzLmF0KDIpLnRvQm9vbGVhbihleGVjKSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiB9CiAKQEAgLTU5LDcgKzU5LDcgQEAgSlNWYWx1ZSBKU0V2ZW50U291cmNlOjpyZW1vdmVFdmVu
dExpc3RlbgogICAgIGlmICghbGlzdGVuZXIuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAKLSAgICBpbXBsKCktPnJlbW92ZUV2ZW50TGlzdGVuZXIoYXJncy5hdCgw
KS50b1N0cmluZyhleGVjKSwgSlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVu
ZXIpLCB0aGlzLCBmYWxzZSwgY3VycmVudFdvcmxkKGV4ZWMpKS5nZXQoKSwgYXJncy5hdCgyKS50
b0Jvb2xlYW4oZXhlYykpOworICAgIGltcGwoKS0+cmVtb3ZlRXZlbnRMaXN0ZW5lcih1c3RyaW5n
VG9BdG9taWNTdHJpbmcoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSksIEpTRXZlbnRMaXN0ZW5l
cjo6Y3JlYXRlKGFzT2JqZWN0KGxpc3RlbmVyKSwgdGhpcywgZmFsc2UsIGN1cnJlbnRXb3JsZChl
eGVjKSkuZ2V0KCksIGFyZ3MuYXQoMikudG9Cb29sZWFuKGV4ZWMpKTsKICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIH0KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxBbGxDb2xs
ZWN0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRN
TEFsbENvbGxlY3Rpb25DdXN0b20uY3BwCShyZXZpc2lvbiA1Nzc0NykKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNIVE1MQWxsQ29sbGVjdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQzLDcgKzQzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogc3RhdGljIEpTVmFsdWUgZ2V0TmFt
ZWRJdGVtcyhFeGVjU3RhdGUqIGV4ZWMsIEpTSFRNTEFsbENvbGxlY3Rpb24qIGNvbGxlY3Rpb24s
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKIHsKICAgICBWZWN0b3I8UmVmUHRyPE5v
ZGU+ID4gbmFtZWRJdGVtczsKLSAgICBjb2xsZWN0aW9uLT5pbXBsKCktPm5hbWVkSXRlbXMocHJv
cGVydHlOYW1lLCBuYW1lZEl0ZW1zKTsKKyAgICBjb2xsZWN0aW9uLT5pbXBsKCktPm5hbWVkSXRl
bXMoaWRlbnRpZmllclRvQXRvbWljU3RyaW5nKHByb3BlcnR5TmFtZSksIG5hbWVkSXRlbXMpOwog
CiAgICAgaWYgKG5hbWVkSXRlbXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKQEAgLTEwOCw3ICsxMDgsNyBAQCBDYWxsVHlwZSBKU0hUTUxBbGxDb2xsZWN0aW9uOjpn
ZXRDYWxsRGF0CiBib29sIEpTSFRNTEFsbENvbGxlY3Rpb246OmNhbkdldEl0ZW1zRm9yTmFtZShF
eGVjU3RhdGUqLCBIVE1MQWxsQ29sbGVjdGlvbiogY29sbGVjdGlvbiwgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lKQogewogICAgIFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiBuYW1lZEl0ZW1z
OwotICAgIGNvbGxlY3Rpb24tPm5hbWVkSXRlbXMocHJvcGVydHlOYW1lLCBuYW1lZEl0ZW1zKTsK
KyAgICBjb2xsZWN0aW9uLT5uYW1lZEl0ZW1zKGlkZW50aWZpZXJUb0F0b21pY1N0cmluZyhwcm9w
ZXJ0eU5hbWUpLCBuYW1lZEl0ZW1zKTsKICAgICByZXR1cm4gIW5hbWVkSXRlbXMuaXNFbXB0eSgp
OwogfQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENvbGxlY3Rpb25DdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ29sbGVjdGlvbkN1
c3RvbS5jcHAJKHJldmlzaW9uIDU3NzQ3KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxD
b2xsZWN0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBzdGF0aWMgSlNWYWx1ZSBnZXROYW1lZEl0ZW1zKEV4ZWNTdGF0ZSog
ZXhlYywgSlNIVE1MQ29sbGVjdGlvbiogY29sbGVjdGlvbiwgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lKQogewogICAgIFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiBuYW1lZEl0ZW1zOwotICAg
IGNvbGxlY3Rpb24tPmltcGwoKS0+bmFtZWRJdGVtcyhwcm9wZXJ0eU5hbWUsIG5hbWVkSXRlbXMp
OworICAgIGNvbGxlY3Rpb24tPmltcGwoKS0+bmFtZWRJdGVtcyhpZGVudGlmaWVyVG9BdG9taWNT
dHJpbmcocHJvcGVydHlOYW1lKSwgbmFtZWRJdGVtcyk7CiAKICAgICBpZiAobmFtZWRJdGVtcy5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpAQCAtMTA1LDcgKzEwNSw3
IEBAIENhbGxUeXBlIEpTSFRNTENvbGxlY3Rpb246OmdldENhbGxEYXRhKEMKIGJvb2wgSlNIVE1M
Q29sbGVjdGlvbjo6Y2FuR2V0SXRlbXNGb3JOYW1lKEV4ZWNTdGF0ZSosIEhUTUxDb2xsZWN0aW9u
KiBjb2xsZWN0aW9uLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgVmVj
dG9yPFJlZlB0cjxOb2RlPiA+IG5hbWVkSXRlbXM7Ci0gICAgY29sbGVjdGlvbi0+bmFtZWRJdGVt
cyhwcm9wZXJ0eU5hbWUsIG5hbWVkSXRlbXMpOworICAgIGNvbGxlY3Rpb24tPm5hbWVkSXRlbXMo
aWRlbnRpZmllclRvQXRvbWljU3RyaW5nKHByb3BlcnR5TmFtZSksIG5hbWVkSXRlbXMpOwogICAg
IHJldHVybiAhbmFtZWRJdGVtcy5pc0VtcHR5KCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiA1Nzc0NykKKysrIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRG9jdW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01MSw3ICs1MSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIGJvb2wgSlNI
VE1MRG9jdW1lbnQ6OmNhbkdldEl0ZW1zRm9yTmFtZShFeGVjU3RhdGUqLCBIVE1MRG9jdW1lbnQq
IGRvY3VtZW50LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgQXRvbWlj
U3RyaW5nSW1wbCogYXRvbWljUHJvcGVydHlOYW1lID0gQXRvbWljU3RyaW5nOjpmaW5kKHByb3Bl
cnR5TmFtZSk7CisgICAgQXRvbWljU3RyaW5nSW1wbCogYXRvbWljUHJvcGVydHlOYW1lID0gZmlu
ZEF0b21pY1N0cmluZyhwcm9wZXJ0eU5hbWUpOwogICAgIHJldHVybiBhdG9taWNQcm9wZXJ0eU5h
bWUgJiYgKGRvY3VtZW50LT5oYXNOYW1lZEl0ZW0oYXRvbWljUHJvcGVydHlOYW1lKSB8fCBkb2N1
bWVudC0+aGFzRXh0cmFOYW1lZEl0ZW0oYXRvbWljUHJvcGVydHlOYW1lKSk7CiB9CiAKSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRm9ybUVsZW1lbnRDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRm9ybUVsZW1lbnRDdXN0b20uY3BwCShy
ZXZpc2lvbiA1Nzc0NykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRm9ybUVsZW1lbnRD
dXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIGJvb2wgSlNIVE1MRm9ybUVsZW1lbnQ6OmNhbkdldEl0ZW1zRm9yTmFtZShFeGVjU3Rh
dGUqLCBIVE1MRm9ybUVsZW1lbnQqIGZvcm0sIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSkKIHsKICAgICBWZWN0b3I8UmVmUHRyPE5vZGU+ID4gbmFtZWRJdGVtczsKLSAgICBmb3JtLT5n
ZXROYW1lZEVsZW1lbnRzKHByb3BlcnR5TmFtZSwgbmFtZWRJdGVtcyk7CisgICAgZm9ybS0+Z2V0
TmFtZWRFbGVtZW50cyhpZGVudGlmaWVyVG9BdG9taWNTdHJpbmcocHJvcGVydHlOYW1lKSwgbmFt
ZWRJdGVtcyk7CiAgICAgcmV0dXJuIG5hbWVkSXRlbXMuc2l6ZSgpOwogfQogCkBAIC01MCw3ICs1
MCw3IEBAIEpTVmFsdWUgSlNIVE1MRm9ybUVsZW1lbnQ6Om5hbWVHZXR0ZXIoRXgKICAgICBIVE1M
Rm9ybUVsZW1lbnQqIGZvcm0gPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnQqPihqc0Zvcm0t
PmltcGwoKSk7CiAKICAgICBWZWN0b3I8UmVmUHRyPE5vZGU+ID4gbmFtZWRJdGVtczsKLSAgICBm
b3JtLT5nZXROYW1lZEVsZW1lbnRzKHByb3BlcnR5TmFtZSwgbmFtZWRJdGVtcyk7CisgICAgZm9y
bS0+Z2V0TmFtZWRFbGVtZW50cyhpZGVudGlmaWVyVG9BdG9taWNTdHJpbmcocHJvcGVydHlOYW1l
KSwgbmFtZWRJdGVtcyk7CiAgICAgCiAgICAgaWYgKG5hbWVkSXRlbXMuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNI
VE1MRnJhbWVTZXRFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSFRNTEZyYW1lU2V0RWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDU3NzQ3KQor
KysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxGcmFtZVNldEVsZW1lbnRDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7
CiAKIGJvb2wgSlNIVE1MRnJhbWVTZXRFbGVtZW50OjpjYW5HZXRJdGVtc0Zvck5hbWUoRXhlY1N0
YXRlKiwgSFRNTEZyYW1lU2V0RWxlbWVudCogZnJhbWVTZXQsIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSkKIHsKLSAgICBOb2RlKiBmcmFtZSA9IGZyYW1lU2V0LT5jaGlsZHJlbigpLT5u
YW1lZEl0ZW0ocHJvcGVydHlOYW1lKTsKKyAgICBOb2RlKiBmcmFtZSA9IGZyYW1lU2V0LT5jaGls
ZHJlbigpLT5uYW1lZEl0ZW0oaWRlbnRpZmllclRvQXRvbWljU3RyaW5nKHByb3BlcnR5TmFtZSkp
OwogICAgIHJldHVybiBmcmFtZSAmJiBmcmFtZS0+aGFzVGFnTmFtZShmcmFtZVRhZyk7CiB9CiAK
QEAgLTUyLDcgKzUyLDcgQEAgSlNWYWx1ZSBKU0hUTUxGcmFtZVNldEVsZW1lbnQ6Om5hbWVHZXR0
ZQogICAgIEpTSFRNTEVsZW1lbnQqIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU0hUTUxFbGVtZW50
Kj4oYXNPYmplY3Qoc2xvdEJhc2UpKTsKICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHN0YXRp
Y19jYXN0PEhUTUxFbGVtZW50Kj4odGhpc09iai0+aW1wbCgpKTsKIAotICAgIE5vZGUqIGZyYW1l
ID0gZWxlbWVudC0+Y2hpbGRyZW4oKS0+bmFtZWRJdGVtKHByb3BlcnR5TmFtZSk7CisgICAgTm9k
ZSogZnJhbWUgPSBlbGVtZW50LT5jaGlsZHJlbigpLT5uYW1lZEl0ZW0oaWRlbnRpZmllclRvQXRv
bWljU3RyaW5nKHByb3BlcnR5TmFtZSkpOwogICAgIGlmIChEb2N1bWVudCogZG9jID0gc3RhdGlj
X2Nhc3Q8SFRNTEZyYW1lRWxlbWVudCo+KGZyYW1lKS0+Y29udGVudERvY3VtZW50KCkpIHsKICAg
ICAgICAgaWYgKEpTRE9NV2luZG93U2hlbGwqIHdpbmRvdyA9IHRvSlNET01XaW5kb3dTaGVsbChk
b2MtPmZyYW1lKCksIGN1cnJlbnRXb3JsZChleGVjKSkpCiAgICAgICAgICAgICByZXR1cm4gd2lu
ZG93OwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5j
cHAJKHJldmlzaW9uIDU3NzQ3KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVu
dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDcgQEAgSlNDOjpKU1ZhbHVl
IEpTTWVzc2FnZUV2ZW50Ojppbml0TWVzc2FnZQogICAgIH0KIAogICAgIE1lc3NhZ2VFdmVudCog
ZXZlbnQgPSBzdGF0aWNfY2FzdDxNZXNzYWdlRXZlbnQqPih0aGlzLT5pbXBsKCkpOwotICAgIGV2
ZW50LT5pbml0TWVzc2FnZUV2ZW50KHR5cGVBcmcsIGNhbkJ1YmJsZUFyZywgY2FuY2VsYWJsZUFy
ZywgZGF0YUFyZywgdXN0cmluZ1RvU3RyaW5nKG9yaWdpbkFyZyksIHVzdHJpbmdUb1N0cmluZyhs
YXN0RXZlbnRJZEFyZyksIHNvdXJjZUFyZywgbWVzc2FnZVBvcnRzLnJlbGVhc2UoKSk7CisgICAg
ZXZlbnQtPmluaXRNZXNzYWdlRXZlbnQodXN0cmluZ1RvQXRvbWljU3RyaW5nKHR5cGVBcmcpLCBj
YW5CdWJibGVBcmcsIGNhbmNlbGFibGVBcmcsIGRhdGFBcmcsIHVzdHJpbmdUb1N0cmluZyhvcmln
aW5BcmcpLCB1c3RyaW5nVG9TdHJpbmcobGFzdEV2ZW50SWRBcmcpLCBzb3VyY2VBcmcsIG1lc3Nh
Z2VQb3J0cy5yZWxlYXNlKCkpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZVBvcnRDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAJKHJldmlzaW9u
IDU3NzQ3KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VQb3J0Q3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCBKU1ZhbHVlIEpTTWVzc2FnZVBvcnQ6OmFk
ZEV2ZW50TGlzdGVuZXIoCiAgICAgaWYgKCFsaXN0ZW5lci5pc09iamVjdCgpKQogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIGltcGwoKS0+YWRkRXZlbnRMaXN0ZW5lcihhcmdz
LmF0KDApLnRvU3RyaW5nKGV4ZWMpLCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChs
aXN0ZW5lciksIHRoaXMsIGZhbHNlLCBjdXJyZW50V29ybGQoZXhlYykpLmdldCgpLCBhcmdzLmF0
KDIpLnRvQm9vbGVhbihleGVjKSk7CisgICAgaW1wbCgpLT5hZGRFdmVudExpc3RlbmVyKHVzdHJp
bmdUb0F0b21pY1N0cmluZyhhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpKSwgSlNFdmVudExpc3Rl
bmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCB0aGlzLCBmYWxzZSwgY3VycmVudFdvcmxk
KGV4ZWMpKS5nZXQoKSwgYXJncy5hdCgyKS50b0Jvb2xlYW4oZXhlYykpOwogICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogfQogCkBAIC02OCw3ICs2OCw3IEBAIEpTVmFsdWUgSlNNZXNzYWdlUG9y
dDo6cmVtb3ZlRXZlbnRMaXN0ZW4KICAgICBpZiAoIWxpc3RlbmVyLmlzT2JqZWN0KCkpCiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgaW1wbCgpLT5yZW1vdmVFdmVudExpc3Rl
bmVyKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFz
T2JqZWN0KGxpc3RlbmVyKSwgdGhpcywgZmFsc2UsIGN1cnJlbnRXb3JsZChleGVjKSkuZ2V0KCks
IGFyZ3MuYXQoMikudG9Cb29sZWFuKGV4ZWMpKTsKKyAgICBpbXBsKCktPnJlbW92ZUV2ZW50TGlz
dGVuZXIodXN0cmluZ1RvQXRvbWljU3RyaW5nKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykpLCBK
U0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChsaXN0ZW5lciksIHRoaXMsIGZhbHNlLCBj
dXJyZW50V29ybGQoZXhlYykpLmdldCgpLCBhcmdzLmF0KDIpLnRvQm9vbGVhbihleGVjKSk7CiAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMv
SlNNaW1lVHlwZUFycmF5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTWltZVR5cGVBcnJheUN1c3RvbS5jcHAJKHJldmlzaW9uIDU3NzQ3KQorKysgV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU01pbWVUeXBlQXJyYXlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMCwxMyArMzAsMTMgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogYm9vbCBKU01pbWVUeXBl
QXJyYXk6OmNhbkdldEl0ZW1zRm9yTmFtZShFeGVjU3RhdGUqLCBNaW1lVHlwZUFycmF5KiBtaW1l
VHlwZUFycmF5LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJu
IG1pbWVUeXBlQXJyYXktPmNhbkdldEl0ZW1zRm9yTmFtZShwcm9wZXJ0eU5hbWUpOworICAgIHJl
dHVybiBtaW1lVHlwZUFycmF5LT5jYW5HZXRJdGVtc0Zvck5hbWUoaWRlbnRpZmllclRvQXRvbWlj
U3RyaW5nKHByb3BlcnR5TmFtZSkpOwogfQogCiBKU1ZhbHVlIEpTTWltZVR5cGVBcnJheTo6bmFt
ZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSkKIHsKICAgICBKU01pbWVUeXBlQXJyYXkqIHRoaXNPYmogPSBzdGF0
aWNfY2FzdDxKU01pbWVUeXBlQXJyYXkqPihhc09iamVjdChzbG90QmFzZSkpOwotICAgIHJldHVy
biB0b0pTKGV4ZWMsIHRoaXNPYmotPmltcGwoKS0+bmFtZWRJdGVtKHByb3BlcnR5TmFtZSkpOwor
ICAgIHJldHVybiB0b0pTKGV4ZWMsIHRoaXNPYmotPmltcGwoKS0+bmFtZWRJdGVtKGlkZW50aWZp
ZXJUb0F0b21pY1N0cmluZyhwcm9wZXJ0eU5hbWUpKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3RvbS5jcHAJKHJldmlzaW9uIDU3
NzQ3KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNzUsNyArMTc1LDcgQEAgSlNWYWx1ZSBKU05vZGU6OmFkZEV2ZW50TGlzdGVuZXIo
RXhlY1N0YQogICAgIGlmICghbGlzdGVuZXIuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAKLSAgICBpbXBsKCktPmFkZEV2ZW50TGlzdGVuZXIoYXJncy5hdCgwKS50
b1N0cmluZyhleGVjKSwgSlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIp
LCB0aGlzLCBmYWxzZSwgY3VycmVudFdvcmxkKGV4ZWMpKSwgYXJncy5hdCgyKS50b0Jvb2xlYW4o
ZXhlYykpOworICAgIGltcGwoKS0+YWRkRXZlbnRMaXN0ZW5lcih1c3RyaW5nVG9BdG9taWNTdHJp
bmcoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFz
T2JqZWN0KGxpc3RlbmVyKSwgdGhpcywgZmFsc2UsIGN1cnJlbnRXb3JsZChleGVjKSksIGFyZ3Mu
YXQoMikudG9Cb29sZWFuKGV4ZWMpKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIApA
QCAtMTg1LDcgKzE4NSw3IEBAIEpTVmFsdWUgSlNOb2RlOjpyZW1vdmVFdmVudExpc3RlbmVyKEV4
ZWMKICAgICBpZiAoIWxpc3RlbmVyLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogCi0gICAgaW1wbCgpLT5yZW1vdmVFdmVudExpc3RlbmVyKGFyZ3MuYXQoMCkudG9T
dHJpbmcoZXhlYyksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxpc3RlbmVyKSwg
dGhpcywgZmFsc2UsIGN1cnJlbnRXb3JsZChleGVjKSkuZ2V0KCksIGFyZ3MuYXQoMikudG9Cb29s
ZWFuKGV4ZWMpKTsKKyAgICBpbXBsKCktPnJlbW92ZUV2ZW50TGlzdGVuZXIodXN0cmluZ1RvQXRv
bWljU3RyaW5nKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykpLCBKU0V2ZW50TGlzdGVuZXI6OmNy
ZWF0ZShhc09iamVjdChsaXN0ZW5lciksIHRoaXMsIGZhbHNlLCBjdXJyZW50V29ybGQoZXhlYykp
LmdldCgpLCBhcmdzLmF0KDIpLnRvQm9vbGVhbihleGVjKSk7CiAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlTGlzdEN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVMaXN0Q3VzdG9tLmNw
cAkocmV2aXNpb24gNTc3NDcpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUxpc3RDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MywxMyArNTMsMTMgQEAgQ2FsbFR5cGUgSlNOb2Rl
TGlzdDo6Z2V0Q2FsbERhdGEoQ2FsbERhdAogCiBib29sIEpTTm9kZUxpc3Q6OmNhbkdldEl0ZW1z
Rm9yTmFtZShFeGVjU3RhdGUqLCBOb2RlTGlzdCogaW1wbCwgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lKQogewotICAgIHJldHVybiBpbXBsLT5pdGVtV2l0aE5hbWUocHJvcGVydHlOYW1l
KTsKKyAgICByZXR1cm4gaW1wbC0+aXRlbVdpdGhOYW1lKGlkZW50aWZpZXJUb0F0b21pY1N0cmlu
Zyhwcm9wZXJ0eU5hbWUpKTsKIH0KIAogSlNWYWx1ZSBKU05vZGVMaXN0OjpuYW1lR2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lKQogewogICAgIEpTTm9kZUxpc3QqIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU05vZGVM
aXN0Kj4oYXNPYmplY3Qoc2xvdEJhc2UpKTsKLSAgICByZXR1cm4gdG9KUyhleGVjLCB0aGlzT2Jq
LT5pbXBsKCktPml0ZW1XaXRoTmFtZShwcm9wZXJ0eU5hbWUpKTsKKyAgICByZXR1cm4gdG9KUyhl
eGVjLCB0aGlzT2JqLT5pbXBsKCktPml0ZW1XaXRoTmFtZShpZGVudGlmaWVyVG9BdG9taWNTdHJp
bmcocHJvcGVydHlOYW1lKSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1Z2luQXJyYXlDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNQbHVnaW5BcnJheUN1c3RvbS5jcHAJKHJldmlzaW9uIDU3
NzQ3KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BsdWdpbkFycmF5Q3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzAsMTMgKzMwLDEzIEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIGJv
b2wgSlNQbHVnaW5BcnJheTo6Y2FuR2V0SXRlbXNGb3JOYW1lKEV4ZWNTdGF0ZSosIFBsdWdpbkFy
cmF5KiBwbHVnaW5BcnJheSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQogewotICAg
IHJldHVybiBwbHVnaW5BcnJheS0+Y2FuR2V0SXRlbXNGb3JOYW1lKHByb3BlcnR5TmFtZSk7Cisg
ICAgcmV0dXJuIHBsdWdpbkFycmF5LT5jYW5HZXRJdGVtc0Zvck5hbWUoaWRlbnRpZmllclRvQXRv
bWljU3RyaW5nKHByb3BlcnR5TmFtZSkpOwogfQogCiBKU1ZhbHVlIEpTUGx1Z2luQXJyYXk6Om5h
bWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RCYXNlLCBjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgSlNQbHVnaW5BcnJheSogdGhpc09iaiA9IHN0YXRp
Y19jYXN0PEpTUGx1Z2luQXJyYXkqPihhc09iamVjdChzbG90QmFzZSkpOwotICAgIHJldHVybiB0
b0pTKGV4ZWMsIHRoaXNPYmotPmltcGwoKS0+bmFtZWRJdGVtKHByb3BlcnR5TmFtZSkpOworICAg
IHJldHVybiB0b0pTKGV4ZWMsIHRoaXNPYmotPmltcGwoKS0+bmFtZWRJdGVtKGlkZW50aWZpZXJU
b0F0b21pY1N0cmluZyhwcm9wZXJ0eU5hbWUpKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNQbHVnaW5DdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNQbHVnaW5DdXN0b20uY3BwCShyZXZpc2lvbiA1
Nzc0NykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNQbHVnaW5DdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yOSwxMyArMjksMTMgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogYm9vbCBK
U1BsdWdpbjo6Y2FuR2V0SXRlbXNGb3JOYW1lKEV4ZWNTdGF0ZSosIFBsdWdpbiogcGx1Z2luLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIHBsdWdpbi0+Y2Fu
R2V0SXRlbXNGb3JOYW1lKHByb3BlcnR5TmFtZSk7CisgICAgcmV0dXJuIHBsdWdpbi0+Y2FuR2V0
SXRlbXNGb3JOYW1lKGlkZW50aWZpZXJUb0F0b21pY1N0cmluZyhwcm9wZXJ0eU5hbWUpKTsKIH0K
IAogSlNWYWx1ZSBKU1BsdWdpbjo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
c2xvdEJhc2UsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKIHsKICAgICBKU1BsdWdp
biogdGhpc09iaiA9IHN0YXRpY19jYXN0PEpTUGx1Z2luKj4oYXNPYmplY3Qoc2xvdEJhc2UpKTsK
LSAgICByZXR1cm4gdG9KUyhleGVjLCB0aGlzT2JqLT5pbXBsKCktPm5hbWVkSXRlbShwcm9wZXJ0
eU5hbWUpKTsKKyAgICByZXR1cm4gdG9KUyhleGVjLCB0aGlzT2JqLT5pbXBsKCktPm5hbWVkSXRl
bShpZGVudGlmaWVyVG9BdG9taWNTdHJpbmcocHJvcGVydHlOYW1lKSkpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTUG9wU3RhdGVFdmVu
dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BvcFN0YXRl
RXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiA1Nzc0NykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNQb3BTdGF0ZUV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBA
QCBKU1ZhbHVlIEpTUG9wU3RhdGVFdmVudDo6aW5pdFBvcFN0YXRlRXZlCiAgICAgUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc3RhdGVPYmplY3RBcmcgPSBTZXJpYWxpemVkU2NyaXB0VmFs
dWU6OmNyZWF0ZShleGVjLCBhcmdzLmF0KDMpKTsKICAgICAKICAgICBQb3BTdGF0ZUV2ZW50KiBl
dmVudCA9IHN0YXRpY19jYXN0PFBvcFN0YXRlRXZlbnQqPihpbXBsKCkpOwotICAgIGV2ZW50LT5p
bml0UG9wU3RhdGVFdmVudCh0eXBlQXJnLCBjYW5CdWJibGVBcmcsIGNhbmNlbGFibGVBcmcsIHN0
YXRlT2JqZWN0QXJnLnJlbGVhc2UoKSk7CisgICAgZXZlbnQtPmluaXRQb3BTdGF0ZUV2ZW50KHVz
dHJpbmdUb0F0b21pY1N0cmluZyh0eXBlQXJnKSwgY2FuQnViYmxlQXJnLCBjYW5jZWxhYmxlQXJn
LCBzdGF0ZU9iamVjdEFyZy5yZWxlYXNlKCkpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
fQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHRWxlbWVudEluc3RhbmNlQ3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1ZHRWxlbWVudEluc3Rh
bmNlQ3VzdG9tLmNwcAkocmV2aXNpb24gNTc3NDcpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
U1ZHRWxlbWVudEluc3RhbmNlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIs
NyBAQCBKU1ZhbHVlIEpTU1ZHRWxlbWVudEluc3RhbmNlOjphZGRFdmVudExpCiAgICAgaWYgKCFs
aXN0ZW5lci5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAg
IGltcGwoKS0+YWRkRXZlbnRMaXN0ZW5lcihhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpLCBKU0V2
ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChsaXN0ZW5lciksIHRoaXMsIGZhbHNlLCBjdXJy
ZW50V29ybGQoZXhlYykpLCBhcmdzLmF0KDIpLnRvQm9vbGVhbihleGVjKSk7CisgICAgaW1wbCgp
LT5hZGRFdmVudExpc3RlbmVyKHVzdHJpbmdUb0F0b21pY1N0cmluZyhhcmdzLmF0KDApLnRvU3Ry
aW5nKGV4ZWMpKSwgSlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCB0
aGlzLCBmYWxzZSwgY3VycmVudFdvcmxkKGV4ZWMpKSwgYXJncy5hdCgyKS50b0Jvb2xlYW4oZXhl
YykpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCkBAIC02Miw3ICs2Miw3IEBAIEpT
VmFsdWUgSlNTVkdFbGVtZW50SW5zdGFuY2U6OnJlbW92ZUV2ZW4KICAgICBpZiAoIWxpc3RlbmVy
LmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgaW1wbCgp
LT5yZW1vdmVFdmVudExpc3RlbmVyKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyksIEpTRXZlbnRM
aXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxpc3RlbmVyKSwgdGhpcywgZmFsc2UsIGN1cnJlbnRX
b3JsZChleGVjKSkuZ2V0KCksIGFyZ3MuYXQoMikudG9Cb29sZWFuKGV4ZWMpKTsKKyAgICBpbXBs
KCktPnJlbW92ZUV2ZW50TGlzdGVuZXIodXN0cmluZ1RvQXRvbWljU3RyaW5nKGFyZ3MuYXQoMCku
dG9TdHJpbmcoZXhlYykpLCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChsaXN0ZW5l
ciksIHRoaXMsIGZhbHNlLCBjdXJyZW50V29ybGQoZXhlYykpLmdldCgpLCBhcmdzLmF0KDIpLnRv
Qm9vbGVhbihleGVjKSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvanMvSlNXZWJTb2NrZXRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNXZWJTb2NrZXRDdXN0b20uY3BwCShyZXZpc2lvbiA1Nzc0NykK
KysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJTb2NrZXRDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02NSw3ICs2NSw3IEBAIEpTVmFsdWUgSlNXZWJTb2NrZXQ6OmFkZEV2ZW50TGlzdGVu
ZXIoRXgKICAgICBpZiAoIWxpc3RlbmVyLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogCi0gICAgaW1wbCgpLT5hZGRFdmVudExpc3RlbmVyKGFyZ3MuYXQoMCkudG9T
dHJpbmcoZXhlYyksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxpc3RlbmVyKSwg
dGhpcywgZmFsc2UsIGN1cnJlbnRXb3JsZChleGVjKSksIGFyZ3MuYXQoMikudG9Cb29sZWFuKGV4
ZWMpKTsKKyAgICBpbXBsKCktPmFkZEV2ZW50TGlzdGVuZXIodXN0cmluZ1RvQXRvbWljU3RyaW5n
KGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYykpLCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09i
amVjdChsaXN0ZW5lciksIHRoaXMsIGZhbHNlLCBjdXJyZW50V29ybGQoZXhlYykpLCBhcmdzLmF0
KDIpLnRvQm9vbGVhbihleGVjKSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKQEAg
LTc1LDcgKzc1LDcgQEAgSlNWYWx1ZSBKU1dlYlNvY2tldDo6cmVtb3ZlRXZlbnRMaXN0ZW5lcgog
ICAgIGlmICghbGlzdGVuZXIuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAKLSAgICBpbXBsKCktPnJlbW92ZUV2ZW50TGlzdGVuZXIoYXJncy5hdCgwKS50b1N0cmlu
ZyhleGVjKSwgSlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCB0aGlz
LCBmYWxzZSwgY3VycmVudFdvcmxkKGV4ZWMpKS5nZXQoKSwgYXJncy5hdCgyKS50b0Jvb2xlYW4o
ZXhlYykpOworICAgIGltcGwoKS0+cmVtb3ZlRXZlbnRMaXN0ZW5lcih1c3RyaW5nVG9BdG9taWNT
dHJpbmcoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRl
KGFzT2JqZWN0KGxpc3RlbmVyKSwgdGhpcywgZmFsc2UsIGN1cnJlbnRXb3JsZChleGVjKSkuZ2V0
KCksIGFyZ3MuYXQoMikudG9Cb29sZWFuKGV4ZWMpKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIH0KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0Q3Vz
dG9tLmNwcAkocmV2aXNpb24gNTc3NDcpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2Vy
Q29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMiw3ICsxMjIsNyBAQCBKU1Zh
bHVlIEpTV29ya2VyQ29udGV4dDo6YWRkRXZlbnRMaXN0ZW5lCiAgICAgaWYgKCFsaXN0ZW5lci5p
c09iamVjdCgpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAotICAgIGltcGwoKS0+
YWRkRXZlbnRMaXN0ZW5lcihhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpLCBKU0V2ZW50TGlzdGVu
ZXI6OmNyZWF0ZShhc09iamVjdChsaXN0ZW5lciksIHRoaXMsIGZhbHNlLCBjdXJyZW50V29ybGQo
ZXhlYykpLCBhcmdzLmF0KDIpLnRvQm9vbGVhbihleGVjKSk7CisgICAgaW1wbCgpLT5hZGRFdmVu
dExpc3RlbmVyKHVzdHJpbmdUb0F0b21pY1N0cmluZyhhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMp
KSwgSlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCB0aGlzLCBmYWxz
ZSwgY3VycmVudFdvcmxkKGV4ZWMpKSwgYXJncy5hdCgyKS50b0Jvb2xlYW4oZXhlYykpOwogICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCkBAIC0xMzIsNyArMTMyLDcgQEAgSlNWYWx1ZSBK
U1dvcmtlckNvbnRleHQ6OnJlbW92ZUV2ZW50TGlzdAogICAgIGlmICghbGlzdGVuZXIuaXNPYmpl
Y3QoKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAgICBpbXBsKCktPnJlbW92
ZUV2ZW50TGlzdGVuZXIoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSwgSlNFdmVudExpc3RlbmVy
OjpjcmVhdGUoYXNPYmplY3QobGlzdGVuZXIpLCB0aGlzLCBmYWxzZSwgY3VycmVudFdvcmxkKGV4
ZWMpKS5nZXQoKSwgYXJncy5hdCgyKS50b0Jvb2xlYW4oZXhlYykpOworICAgIGltcGwoKS0+cmVt
b3ZlRXZlbnRMaXN0ZW5lcih1c3RyaW5nVG9BdG9taWNTdHJpbmcoYXJncy5hdCgwKS50b1N0cmlu
ZyhleGVjKSksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxpc3RlbmVyKSwgdGhp
cywgZmFsc2UsIGN1cnJlbnRXb3JsZChleGVjKSkuZ2V0KCksIGFyZ3MuYXQoMikudG9Cb29sZWFu
KGV4ZWMpKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIApJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCShyZXZpc2lvbiA1Nzc0
NykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTk3LDcgKzk3LDcgQEAgSlNWYWx1ZSBKU1hNTEh0dHBSZXF1ZXN0Ojpz
ZXRSZXF1ZXN0SGVhZAogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJv
ciwgIk5vdCBlbm91Z2ggYXJndW1lbnRzIik7CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
LSAgICBpbXBsKCktPnNldFJlcXVlc3RIZWFkZXIoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSwg
dXN0cmluZ1RvU3RyaW5nKGFyZ3MuYXQoMSkudG9TdHJpbmcoZXhlYykpLCBlYyk7CisgICAgaW1w
bCgpLT5zZXRSZXF1ZXN0SGVhZGVyKHVzdHJpbmdUb0F0b21pY1N0cmluZyhhcmdzLmF0KDApLnRv
U3RyaW5nKGV4ZWMpKSwgdXN0cmluZ1RvU3RyaW5nKGFyZ3MuYXQoMSkudG9TdHJpbmcoZXhlYykp
LCBlYyk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKIH0KQEAgLTEzOSw3ICsxMzksNyBAQCBKU1ZhbHVlIEpTWE1MSHR0cFJlcXVlc3Q6
OmdldFJlc3BvbnNlSGVhCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVy
cm9yLCAiTm90IGVub3VnaCBhcmd1bWVudHMiKTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwotICAgIEpTVmFsdWUgaGVhZGVyID0ganNTdHJpbmdPck51bGwoZXhlYywgaW1wbCgpLT5nZXRS
ZXNwb25zZUhlYWRlcihhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpLCBlYykpOworICAgIEpTVmFs
dWUgaGVhZGVyID0ganNTdHJpbmdPck51bGwoZXhlYywgaW1wbCgpLT5nZXRSZXNwb25zZUhlYWRl
cih1c3RyaW5nVG9BdG9taWNTdHJpbmcoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSksIGVjKSk7
CiAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKICAgICByZXR1cm4gaGVhZGVyOwogfQpA
QCAtMTU5LDcgKzE1OSw3IEBAIEpTVmFsdWUgSlNYTUxIdHRwUmVxdWVzdDo6YWRkRXZlbnRMaXN0
ZW4KICAgICBpZiAoIWxpc3RlbmVyLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogCi0gICAgaW1wbCgpLT5hZGRFdmVudExpc3RlbmVyKGFyZ3MuYXQoMCkudG9TdHJp
bmcoZXhlYyksIEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxpc3RlbmVyKSwgdGhp
cywgZmFsc2UsIGN1cnJlbnRXb3JsZChleGVjKSksIGFyZ3MuYXQoMikudG9Cb29sZWFuKGV4ZWMp
KTsKKyAgICBpbXBsKCktPmFkZEV2ZW50TGlzdGVuZXIodXN0cmluZ1RvQXRvbWljU3RyaW5nKGFy
Z3MuYXQoMCkudG9TdHJpbmcoZXhlYykpLCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVj
dChsaXN0ZW5lciksIHRoaXMsIGZhbHNlLCBjdXJyZW50V29ybGQoZXhlYykpLCBhcmdzLmF0KDIp
LnRvQm9vbGVhbihleGVjKSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKQEAgLTE2
OSw3ICsxNjksNyBAQCBKU1ZhbHVlIEpTWE1MSHR0cFJlcXVlc3Q6OnJlbW92ZUV2ZW50TGlzCiAg
ICAgaWYgKCFsaXN0ZW5lci5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIAotICAgIGltcGwoKS0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihhcmdzLmF0KDApLnRvU3RyaW5n
KGV4ZWMpLCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChsaXN0ZW5lciksIHRoaXMs
IGZhbHNlLCBjdXJyZW50V29ybGQoZXhlYykpLmdldCgpLCBhcmdzLmF0KDIpLnRvQm9vbGVhbihl
eGVjKSk7CisgICAgaW1wbCgpLT5yZW1vdmVFdmVudExpc3RlbmVyKHVzdHJpbmdUb0F0b21pY1N0
cmluZyhhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpKSwgSlNFdmVudExpc3RlbmVyOjpjcmVhdGUo
YXNPYmplY3QobGlzdGVuZXIpLCB0aGlzLCBmYWxzZSwgY3VycmVudFdvcmxkKGV4ZWMpKS5nZXQo
KSwgYXJncy5hdCgyKS50b0Jvb2xlYW4oZXhlYykpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogfQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3RVcGxvYWRD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVx
dWVzdFVwbG9hZEN1c3RvbS5jcHAJKHJldmlzaW9uIDU3NzQ3KQorKysgV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1hNTEh0dHBSZXF1ZXN0VXBsb2FkQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTcsNyArNTcsNyBAQCBKU1ZhbHVlIEpTWE1MSHR0cFJlcXVlc3RVcGxvYWQ6OmFkZEV2ZW50CiAg
ICAgaWYgKCFsaXN0ZW5lci5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIAotICAgIGltcGwoKS0+YWRkRXZlbnRMaXN0ZW5lcihhcmdzLmF0KDApLnRvU3RyaW5nKGV4
ZWMpLCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVjdChsaXN0ZW5lciksIHRoaXMsIGZh
bHNlLCBjdXJyZW50V29ybGQoZXhlYykpLCBhcmdzLmF0KDIpLnRvQm9vbGVhbihleGVjKSk7Cisg
ICAgaW1wbCgpLT5hZGRFdmVudExpc3RlbmVyKHVzdHJpbmdUb0F0b21pY1N0cmluZyhhcmdzLmF0
KDApLnRvU3RyaW5nKGV4ZWMpKSwgSlNFdmVudExpc3RlbmVyOjpjcmVhdGUoYXNPYmplY3QobGlz
dGVuZXIpLCB0aGlzLCBmYWxzZSwgY3VycmVudFdvcmxkKGV4ZWMpKSwgYXJncy5hdCgyKS50b0Jv
b2xlYW4oZXhlYykpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCkBAIC02Nyw3ICs2
Nyw3IEBAIEpTVmFsdWUgSlNYTUxIdHRwUmVxdWVzdFVwbG9hZDo6cmVtb3ZlRXYKICAgICBpZiAo
IWxpc3RlbmVyLmlzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0g
ICAgaW1wbCgpLT5yZW1vdmVFdmVudExpc3RlbmVyKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyks
IEpTRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKGFzT2JqZWN0KGxpc3RlbmVyKSwgdGhpcywgZmFsc2Us
IGN1cnJlbnRXb3JsZChleGVjKSkuZ2V0KCksIGFyZ3MuYXQoMikudG9Cb29sZWFuKGV4ZWMpKTsK
KyAgICBpbXBsKCktPnJlbW92ZUV2ZW50TGlzdGVuZXIodXN0cmluZ1RvQXRvbWljU3RyaW5nKGFy
Z3MuYXQoMCkudG9TdHJpbmcoZXhlYykpLCBKU0V2ZW50TGlzdGVuZXI6OmNyZWF0ZShhc09iamVj
dChsaXN0ZW5lciksIHRoaXMsIGZhbHNlLCBjdXJyZW50V29ybGQoZXhlYykpLmdldCgpLCBhcmdz
LmF0KDIpLnRvQm9vbGVhbihleGVjKSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9BdG9taWNTdHJpbmcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9BdG9taWNTdHJpbmcuY3BwCShyZXZpc2lvbiA1Nzc0
OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9BdG9taWNTdHJpbmcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMiwxMiArMzIsNiBAQAogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KICNpbmNs
dWRlIDx3dGYvSGFzaFNldC5oPgogCi0jaWYgVVNFKEpTQykKLSNpbmNsdWRlIDxydW50aW1lL0lk
ZW50aWZpZXIuaD4KLXVzaW5nIEpTQzo6SWRlbnRpZmllcjsKLXVzaW5nIEpTQzo6VVN0cmluZzsK
LSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBpbmxpbmUgSGFzaFNldDxT
dHJpbmdJbXBsKj4mIHN0cmluZ1RhYmxlKCkKQEAgLTE3Niw3ICsxNzAsNyBAQCBzdHJ1Y3QgSGFz
aEFuZENoYXJhY3RlcnNUcmFuc2xhdG9yIHsKICAgICB9CiB9OwogCi1QYXNzUmVmUHRyPFN0cmlu
Z0ltcGw+IEF0b21pY1N0cmluZzo6YWRkKGNvbnN0IFVDaGFyKiBzLCBpbnQgbGVuZ3RoKQorUGFz
c1JlZlB0cjxTdHJpbmdJbXBsPiBBdG9taWNTdHJpbmc6OmFkZChjb25zdCBVQ2hhciogcywgdW5z
aWduZWQgbGVuZ3RoKQogewogICAgIGlmICghcykKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xOTIs
NiArMTg2LDIxIEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gQXRvbWljU3RyaW5nOjphZGQKICAg
ICByZXR1cm4gYWRkUmVzdWx0LnNlY29uZCA/IGFkb3B0UmVmKCphZGRSZXN1bHQuZmlyc3QpIDog
KmFkZFJlc3VsdC5maXJzdDsKIH0KIAorUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBBdG9taWNTdHJp
bmc6OmFkZChjb25zdCBVQ2hhciogcywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBleGlzdGlu
Z0hhc2gpCit7CisgICAgQVNTRVJUKHMpOworICAgIEFTU0VSVChleGlzdGluZ0hhc2gpOworCisg
ICAgaWYgKGxlbmd0aCA9PSAwKQorICAgICAgICByZXR1cm4gU3RyaW5nSW1wbDo6ZW1wdHkoKTsK
KyAgICAKKyAgICBIYXNoQW5kQ2hhcmFjdGVycyBidWZmZXIgPSB7IGV4aXN0aW5nSGFzaCwgcywg
bGVuZ3RoIH07IAorICAgIHBhaXI8SGFzaFNldDxTdHJpbmdJbXBsKj46Oml0ZXJhdG9yLCBib29s
PiBhZGRSZXN1bHQgPSBzdHJpbmdUYWJsZSgpLmFkZDxIYXNoQW5kQ2hhcmFjdGVycywgSGFzaEFu
ZENoYXJhY3RlcnNUcmFuc2xhdG9yPihidWZmZXIpOworICAgIGlmICghYWRkUmVzdWx0LnNlY29u
ZCkKKyAgICAgICAgcmV0dXJuICphZGRSZXN1bHQuZmlyc3Q7CisgICAgcmV0dXJuIGFkb3B0UmVm
KCphZGRSZXN1bHQuZmlyc3QpOworfQorCiBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IEF0b21pY1N0
cmluZzo6YWRkKGNvbnN0IFVDaGFyKiBzKQogewogICAgIGlmICghcykKQEAgLTIyNiw2ICsyMzUs
MjEgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBBdG9taWNTdHJpbmc6OmFkZAogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKK0F0b21pY1N0cmluZ0ltcGwqIEF0b21pY1N0cmluZzo6ZmluZChjb25z
dCBVQ2hhciogcywgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBleGlzdGluZ0hhc2gpCit7Cisg
ICAgQVNTRVJUKHMpOworICAgIEFTU0VSVChleGlzdGluZ0hhc2gpOworCisgICAgaWYgKGxlbmd0
aCA9PSAwKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QXRvbWljU3RyaW5nSW1wbCo+KFN0
cmluZ0ltcGw6OmVtcHR5KCkpOworCisgICAgSGFzaEFuZENoYXJhY3RlcnMgYnVmZmVyID0geyBl
eGlzdGluZ0hhc2gsIHMsIGxlbmd0aCB9OyAKKyAgICBIYXNoU2V0PFN0cmluZ0ltcGwqPjo6aXRl
cmF0b3IgaXRlcmF0b3IgPSBzdHJpbmdUYWJsZSgpLmZpbmQ8SGFzaEFuZENoYXJhY3RlcnMsIEhh
c2hBbmRDaGFyYWN0ZXJzVHJhbnNsYXRvcj4oYnVmZmVyKTsKKyAgICBpZiAoaXRlcmF0b3IgPT0g
c3RyaW5nVGFibGUoKS5lbmQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PEF0b21pY1N0cmluZ0ltcGwqPigqaXRlcmF0b3IpOworfQorCiB2b2lkIEF0b21pY1N0
cmluZzo6cmVtb3ZlKFN0cmluZ0ltcGwqIHIpCiB7CiAgICAgc3RyaW5nVGFibGUoKS5yZW1vdmUo
cik7CkBAIC0yNDEsNjkgKzI2NSw2IEBAIEF0b21pY1N0cmluZyBBdG9taWNTdHJpbmc6Omxvd2Vy
KCkgY29uc3QKICAgICByZXR1cm4gQXRvbWljU3RyaW5nKG5ld0ltcGwpOwogfQogCi0jaWYgVVNF
KEpTQykKLVBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gQXRvbWljU3RyaW5nOjphZGQoY29uc3QgSlND
OjpJZGVudGlmaWVyJiBpZGVudGlmaWVyKQotewotICAgIGlmIChpZGVudGlmaWVyLmlzTnVsbCgp
KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFVTdHJpbmc6OlJlcCogc3RyaW5nID0gaWRlbnRp
Zmllci51c3RyaW5nKCkucmVwKCk7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nLT5sZW5n
dGgoKTsKLSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmVtcHR5
KCk7Ci0KLSAgICBIYXNoQW5kQ2hhcmFjdGVycyBidWZmZXIgPSB7IHN0cmluZy0+ZXhpc3RpbmdI
YXNoKCksIHN0cmluZy0+Y2hhcmFjdGVycygpLCBsZW5ndGggfTsgCi0gICAgcGFpcjxIYXNoU2V0
PFN0cmluZ0ltcGwqPjo6aXRlcmF0b3IsIGJvb2w+IGFkZFJlc3VsdCA9IHN0cmluZ1RhYmxlKCku
YWRkPEhhc2hBbmRDaGFyYWN0ZXJzLCBIYXNoQW5kQ2hhcmFjdGVyc1RyYW5zbGF0b3I+KGJ1ZmZl
cik7Ci0gICAgaWYgKCFhZGRSZXN1bHQuc2Vjb25kKQotICAgICAgICByZXR1cm4gKmFkZFJlc3Vs
dC5maXJzdDsKLSAgICByZXR1cm4gYWRvcHRSZWYoKmFkZFJlc3VsdC5maXJzdCk7Ci19Ci0KLVBh
c3NSZWZQdHI8U3RyaW5nSW1wbD4gQXRvbWljU3RyaW5nOjphZGQoY29uc3QgSlNDOjpVU3RyaW5n
JiB1c3RyaW5nKQotewotICAgIGlmICh1c3RyaW5nLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIFVTdHJpbmc6OlJlcCogc3RyaW5nID0gdXN0cmluZy5yZXAoKTsKLSAgICB1bnNp
Z25lZCBsZW5ndGggPSBzdHJpbmctPmxlbmd0aCgpOwotICAgIGlmICghbGVuZ3RoKQotICAgICAg
ICByZXR1cm4gU3RyaW5nSW1wbDo6ZW1wdHkoKTsKLQotICAgIEhhc2hBbmRDaGFyYWN0ZXJzIGJ1
ZmZlciA9IHsgc3RyaW5nLT5oYXNoKCksIHN0cmluZy0+Y2hhcmFjdGVycygpLCBsZW5ndGggfTsg
Ci0gICAgcGFpcjxIYXNoU2V0PFN0cmluZ0ltcGwqPjo6aXRlcmF0b3IsIGJvb2w+IGFkZFJlc3Vs
dCA9IHN0cmluZ1RhYmxlKCkuYWRkPEhhc2hBbmRDaGFyYWN0ZXJzLCBIYXNoQW5kQ2hhcmFjdGVy
c1RyYW5zbGF0b3I+KGJ1ZmZlcik7Ci0gICAgaWYgKCFhZGRSZXN1bHQuc2Vjb25kKQotICAgICAg
ICByZXR1cm4gKmFkZFJlc3VsdC5maXJzdDsKLSAgICByZXR1cm4gYWRvcHRSZWYoKmFkZFJlc3Vs
dC5maXJzdCk7Ci19Ci0KLUF0b21pY1N0cmluZ0ltcGwqIEF0b21pY1N0cmluZzo6ZmluZChjb25z
dCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIpCi17Ci0gICAgaWYgKGlkZW50aWZpZXIuaXNO
dWxsKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgVVN0cmluZzo6UmVwKiBzdHJpbmcgPSBp
ZGVudGlmaWVyLnVzdHJpbmcoKS5yZXAoKTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmct
Pmxlbmd0aCgpOwotICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
QXRvbWljU3RyaW5nSW1wbCo+KFN0cmluZ0ltcGw6OmVtcHR5KCkpOwotCi0gICAgSGFzaEFuZENo
YXJhY3RlcnMgYnVmZmVyID0geyBzdHJpbmctPmV4aXN0aW5nSGFzaCgpLCBzdHJpbmctPmNoYXJh
Y3RlcnMoKSwgbGVuZ3RoIH07IAotICAgIEhhc2hTZXQ8U3RyaW5nSW1wbCo+OjppdGVyYXRvciBp
dGVyYXRvciA9IHN0cmluZ1RhYmxlKCkuZmluZDxIYXNoQW5kQ2hhcmFjdGVycywgSGFzaEFuZENo
YXJhY3RlcnNUcmFuc2xhdG9yPihidWZmZXIpOwotICAgIGlmIChpdGVyYXRvciA9PSBzdHJpbmdU
YWJsZSgpLmVuZCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
QXRvbWljU3RyaW5nSW1wbCo+KCppdGVyYXRvcik7Ci19Ci0KLUF0b21pY1N0cmluZzo6b3BlcmF0
b3IgVVN0cmluZygpIGNvbnN0Ci17Ci0gICAgU3RyaW5nSW1wbCogaW1wbCA9IG1fc3RyaW5nLmlt
cGwoKTsKLSAgICBpZiAoIWltcGwpCi0gICAgICAgIHJldHVybiBVU3RyaW5nKCk7Ci0gICAgaWYg
KFNoYXJlZFVDaGFyKiBzaGFyZWRCdWZmZXIgPSBpbXBsLT5zaGFyZWRCdWZmZXIoKSkKLSAgICAg
ICAgcmV0dXJuIFVTdHJpbmc6OlJlcDo6Y3JlYXRlKGltcGwtPmNoYXJhY3RlcnMoKSwgaW1wbC0+
bGVuZ3RoKCksIHNoYXJlZEJ1ZmZlcik7Ci0gICAgcmV0dXJuIFVTdHJpbmcoaW1wbC0+Y2hhcmFj
dGVycygpLCBpbXBsLT5sZW5ndGgoKSk7Ci19Ci0jZW5kaWYKLQogREVGSU5FX0dMT0JBTChBdG9t
aWNTdHJpbmcsIG51bGxBdG9tKQogREVGSU5FX0dMT0JBTChBdG9taWNTdHJpbmcsIGVtcHR5QXRv
bSwgIiIpCiBERUZJTkVfR0xPQkFMKEF0b21pY1N0cmluZywgdGV4dEF0b20sICIjdGV4dCIpCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvQXRvbWljU3RyaW5nLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0F0b21pY1N0cmluZy5oCShyZXZpc2lvbiA1Nzc0NykKKysr
IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9BdG9taWNTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAt
MzIsMTMgKzMyLDYgQEAKICNkZWZpbmUgQVRPTUlDU1RSSU5HX0NPTlZFUlNJT04KICNlbmRpZgog
Ci0jaWYgVVNFKEpTQykKLW5hbWVzcGFjZSBKU0MgewotY2xhc3MgSWRlbnRpZmllcjsKLWNsYXNz
IFVTdHJpbmc7Ci19Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdHJ1Y3QgQXRv
bWljU3RyaW5nSGFzaDsKQEAgLTQ5LDEyICs0Miw5IEBAIHB1YmxpYzoKIAogICAgIEF0b21pY1N0
cmluZygpIHsgfQogICAgIEF0b21pY1N0cmluZyhjb25zdCBjaGFyKiBzKSA6IG1fc3RyaW5nKGFk
ZChzKSkgeyB9Ci0gICAgQXRvbWljU3RyaW5nKGNvbnN0IFVDaGFyKiBzLCBpbnQgbGVuZ3RoKSA6
IG1fc3RyaW5nKGFkZChzLCBsZW5ndGgpKSB7IH0KKyAgICBBdG9taWNTdHJpbmcoY29uc3QgVUNo
YXIqIHMsIHVuc2lnbmVkIGxlbmd0aCkgOiBtX3N0cmluZyhhZGQocywgbGVuZ3RoKSkgeyB9Cisg
ICAgQXRvbWljU3RyaW5nKGNvbnN0IFVDaGFyKiBzLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVk
IGV4aXN0aW5nSGFzaCkgOiBtX3N0cmluZyhhZGQocywgbGVuZ3RoLCBleGlzdGluZ0hhc2gpKSB7
IH0KICAgICBBdG9taWNTdHJpbmcoY29uc3QgVUNoYXIqIHMpIDogbV9zdHJpbmcoYWRkKHMpKSB7
IH0KLSNpZiBVU0UoSlNDKQotICAgIEF0b21pY1N0cmluZyhjb25zdCBKU0M6OlVTdHJpbmcmIHMp
IDogbV9zdHJpbmcoYWRkKHMpKSB7IH0KLSAgICBBdG9taWNTdHJpbmcoY29uc3QgSlNDOjpJZGVu
dGlmaWVyJiBzKSA6IG1fc3RyaW5nKGFkZChzKSkgeyB9Ci0jZW5kaWYKICAgICBBVE9NSUNTVFJJ
TkdfQ09OVkVSU0lPTiBBdG9taWNTdHJpbmcoU3RyaW5nSW1wbCogaW1wKSA6IG1fc3RyaW5nKGFk
ZChpbXApKSB7IH0KICAgICBBdG9taWNTdHJpbmcoQXRvbWljU3RyaW5nSW1wbCogaW1wKSA6IG1f
c3RyaW5nKGltcCkgeyB9CiAgICAgQVRPTUlDU1RSSU5HX0NPTlZFUlNJT04gQXRvbWljU3RyaW5n
KGNvbnN0IFN0cmluZyYgcykgOiBtX3N0cmluZyhhZGQocy5pbXBsKCkpKSB7IH0KQEAgLTYzLDE3
ICs1MywxMSBAQCBwdWJsaWM6CiAgICAgQXRvbWljU3RyaW5nKFdURjo6SGFzaFRhYmxlRGVsZXRl
ZFZhbHVlVHlwZSkgOiBtX3N0cmluZyhXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSkgeyB9CiAg
ICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5n
LmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7IH0KIAotI2lmIFVTRShKU0MpCi0gICAgc3RhdGlj
IEF0b21pY1N0cmluZ0ltcGwqIGZpbmQoY29uc3QgSlNDOjpJZGVudGlmaWVyJik7Ci0jZW5kaWYK
KyAgICBzdGF0aWMgQXRvbWljU3RyaW5nSW1wbCogZmluZChjb25zdCBVQ2hhciogcywgdW5zaWdu
ZWQgbGVuZ3RoLCB1bnNpZ25lZCBleGlzdGluZ0hhc2gpOwogCiAgICAgb3BlcmF0b3IgY29uc3Qg
U3RyaW5nJigpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nOyB9CiAgICAgY29uc3QgU3RyaW5nJiBz
dHJpbmcoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZzsgfTsKIAotI2lmIFVTRShKU0MpCi0gICAg
b3BlcmF0b3IgSlNDOjpVU3RyaW5nKCkgY29uc3Q7Ci0jZW5kaWYKLQogICAgIEF0b21pY1N0cmlu
Z0ltcGwqIGltcGwoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxBdG9taWNTdHJpbmdJbXBs
ICo+KG1fc3RyaW5nLmltcGwoKSk7IH0KICAgICAKICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVy
cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLmNoYXJhY3RlcnMoKTsgfQpAQCAtMTI4LDEzICsx
MTIsMTAgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgbV9zdHJpbmc7CiAgICAgCiAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gYWRkKGNvbnN0IGNoYXIqKTsKLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxTdHJpbmdJbXBsPiBhZGQoY29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoKTsKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBhZGQoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBs
ZW5ndGgpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFkZChjb25zdCBVQ2hh
ciosIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgZXhpc3RpbmdIYXNoKTsKICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBhZGQoY29uc3QgVUNoYXIqKTsKICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxTdHJpbmdJbXBsPiBhZGQoU3RyaW5nSW1wbCopOwotI2lmIFVTRShKU0MpCi0gICAg
c3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gYWRkKGNvbnN0IEpTQzo6VVN0cmluZyYpOwot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFkZChjb25zdCBKU0M6OklkZW50aWZp
ZXImKTsKLSNlbmRpZgogfTsKIAogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBdG9taWNT
dHJpbmcmIGEsIGNvbnN0IEF0b21pY1N0cmluZyYgYikgeyByZXR1cm4gYS5pbXBsKCkgPT0gYi5p
bXBsKCk7IH0K
</data>
<flag name="review"
          id="37350"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>