<?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>42783</bug_id>
          
          <creation_ts>2010-07-21 13:43:30 -0700</creation_ts>
          <short_desc>Break out &quot;scheme registration&quot; functionality to a SchemeRegistry</short_desc>
          <delta_ts>2010-07-21 16:20:09 -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>All</rep_platform>
          <op_sys>All</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="Brady Eidson">beidson</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>254498</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2010-07-21 13:43:30 -0700</bug_when>
    <thetext>Break out &quot;scheme registration&quot; functionality to a SchemeRegistry.

Currently, SecurityOrigin tracks &quot;stuff&quot; about Schemes that can be programmatically registered.  Some of the associations to SecurityOrigin were already kind of loose.

To support future WebKit API we&apos;d like to track other special types of schemes that are in no way related to SecurityOrigin.

We can model MIMETypeRegistry here, as a central holding tank for all Schemes WebCore/WebKit already know about, as well as giving client apps a way to customize things a bit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254512</commentid>
    <comment_count>1</comment_count>
      <attachid>62229</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2010-07-21 14:08:15 -0700</bug_when>
    <thetext>Created attachment 62229
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254528</commentid>
    <comment_count>2</comment_count>
      <attachid>62229</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-07-21 14:46:35 -0700</bug_when>
    <thetext>Comment on attachment 62229
Patch

WebCore/platform/SchemeRegistry.cpp:94
 +  
Boo on two names for the same thing. I would rename &quot;localSchemes&quot; to &quot;localURLSchemes&quot;. (Requires a namespace qualification on the return statement.)

WebCore/platform/SchemeRegistry.cpp:106
 +  
Seems like these fast cases should assert that they&apos;re correct. Something like &quot;ASSERT(localSchemes().contains(X))&quot;.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254576</commentid>
    <comment_count>3</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2010-07-21 16:20:09 -0700</bug_when>
    <thetext>Committed r63863: &lt;http://trac.webkit.org/changeset/63863&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62229</attachid>
            <date>2010-07-21 14:08:15 -0700</date>
            <delta_ts>2010-07-21 14:46:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-42783-20100721140813.patch</filename>
            <type>text/plain</type>
            <size>33895</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2Mzg1NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDEgQEAKKzIwMTAtMDctMjEgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJy
ZWFrIG91dCAic2NoZW1lIHJlZ2lzdHJhdGlvbiIgZnVuY3Rpb25hbGl0eSB0byBhIFNjaGVtZVJl
Z2lzdHJ5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00
Mjc4MworCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogR05VbWFr
ZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5leHAuaW46CisgICAgICAgICogV2ViQ29yZS5n
eXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVMb2FkZXI6OmlzTWl4ZWRDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9h
ZGVyOjpsb2FkRnJhbWVSZXF1ZXN0KToKKyAgICAgICAgKiBwYWdlL1NlY3VyaXR5T3JpZ2luLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luOjpTZWN1cml0eU9yaWdpbik6Cisg
ICAgICAgIChXZWJDb3JlOjpTZWN1cml0eU9yaWdpbjo6Y2FuTG9hZCk6CisgICAgICAgIChXZWJD
b3JlOjpTZWN1cml0eU9yaWdpbjo6aXNMb2NhbCk6CisgICAgICAgICogcGFnZS9TZWN1cml0eU9y
aWdpbi5oOgorICAgICAgICAqIHBsYXRmb3JtL1NjaGVtZVJlZ2lzdHJ5LmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpsb2NhbFNjaGVtZXMpOgorICAgICAgICAoV2ViQ29yZTo6c2VjdXJl
U2NoZW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpzY2hlbWVzV2l0aFVuaXF1ZU9yaWdpbnMpOgor
ICAgICAgICAoV2ViQ29yZTo6U2NoZW1lUmVnaXN0cnk6OnJlZ2lzdGVyVVJMU2NoZW1lQXNMb2Nh
bCk6CisgICAgICAgIChXZWJDb3JlOjpTY2hlbWVSZWdpc3RyeTo6cmVtb3ZlVVJMU2NoZW1lUmVn
aXN0ZXJlZEFzTG9jYWwpOgorICAgICAgICAoV2ViQ29yZTo6U2NoZW1lUmVnaXN0cnk6OmxvY2Fs
VVJMU2NoZW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpTY2hlbWVSZWdpc3RyeTo6c2hvdWxkVHJl
YXRVUkxBc0xvY2FsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjaGVtZVJlZ2lzdHJ5OjpzaG91bGRU
cmVhdFVSTFNjaGVtZUFzTG9jYWwpOgorICAgICAgICAoV2ViQ29yZTo6U2NoZW1lUmVnaXN0cnk6
OnJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyk6CisgICAgICAgIChXZWJDb3JlOjpTY2hlbWVS
ZWdpc3RyeTo6c2hvdWxkVHJlYXRVUkxTY2hlbWVBc05vQWNjZXNzKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjaGVtZVJlZ2lzdHJ5OjpyZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjaGVtZVJlZ2lzdHJ5OjpzaG91bGRUcmVhdFVSTFNjaGVtZUFzU2VjdXJlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9TY2hlbWVSZWdpc3RyeS5oOiBBZGRlZC4KKwogMjAxMC0wNy0y
MSAgUGV0ZXIgQmV2ZXJsb28gIDxwZXRlckBsdnAtbWVkaWEuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IEVyaWMgQ2FybHNvbi4KSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNjM4MzEpCisrKyBXZWJD
b3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xOTE1LDYgKzE5MTUsOCBAQCB3
ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVHlwZXMuaCBcCiAJ
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxWaWV3LmggXAorCVdlYkNvcmUvcGxhdGZvcm0vU2NoZW1lUmVnaXN0cnkuY3BwIFwKKwlXZWJD
b3JlL3BsYXRmb3JtL1NjaGVtZVJlZ2lzdHJ5LmggXAogCVdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
YmFyLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuaCBcCiAJV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxiYXJDbGllbnQuaCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDYzODMxKQorKysg
V2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkod29ya2luZyBjb3B5KQpAQCAtMzEwLDExICszMTAsMTEg
QEAgX19aTjdXZWJDb3JlMTRSZXNvdXJjZUhhbmRsZTIwZm9yY2VDb250ZQogX19aTjdXZWJDb3Jl
MTRSZXNvdXJjZUxvYWRlcjE0Y2FuY2VsbGVkRXJyb3JFdgogX19aTjdXZWJDb3JlMTRSZXNvdXJj
ZUxvYWRlcjE5c2V0U2hvdWxkQnVmZmVyRGF0YUViCiBfX1pON1dlYkNvcmUxNFNWR1NNSUxFbGVt
ZW50MTNpc1NNSUxFbGVtZW50RVBOU180Tm9kZUUKK19fWk43V2ViQ29yZTE0U2NoZW1lUmVnaXN0
cnkyNXJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmVFUktOU182U3RyaW5nRQorX19aTjdXZWJDb3Jl
MTRTY2hlbWVSZWdpc3RyeTI0cmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsRVJLTlNfNlN0cmluZ0UK
IF9fWk43V2ViQ29yZTE0U2VjdXJpdHlPcmlnaW4xNmNyZWF0ZUZyb21TdHJpbmdFUktOU182U3Ry
aW5nRQogX19aTjdXZWJDb3JlMTRTZWN1cml0eU9yaWdpbjE4c2V0TG9jYWxMb2FkUG9saWN5RU5T
MF8xNUxvY2FsTG9hZFBvbGljeUUKIF9fWk43V2ViQ29yZTE0U2VjdXJpdHlPcmlnaW4xOHNob3Vs
ZEhpZGVSZWZlcnJlckVSS05TXzRLVVJMRVJLTlNfNlN0cmluZ0UKLV9fWk43V2ViQ29yZTE0U2Vj
dXJpdHlPcmlnaW4yNHJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbEVSS05TXzZTdHJpbmdFCi1fX1pO
N1dlYkNvcmUxNFNlY3VyaXR5T3JpZ2luMjVyZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlRVJLTlNf
NlN0cmluZ0UKIF9fWk43V2ViQ29yZTE0U2VjdXJpdHlPcmlnaW4yN3Jlc2V0T3JpZ2luQWNjZXNz
V2hpdGVsaXN0c0V2CiBfX1pON1dlYkNvcmUxNFNlY3VyaXR5T3JpZ2luMjlhZGRPcmlnaW5BY2Nl
c3NXaGl0ZWxpc3RFbnRyeUVSS1MwX1JLTlNfNlN0cmluZ0VTNV9iCiBfX1pON1dlYkNvcmUxNFNl
Y3VyaXR5T3JpZ2luMzJyZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeUVSS1MwX1JLTlNf
NlN0cmluZ0VTNV9iCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNjM4MzEpCisrKyBXZWJDb3JlL1dlYkNvcmUu
Z3lwaQkod29ya2luZyBjb3B5KQpAQCAtMzAyOSw2ICszMDI5LDggQEAKICAgICAgICAgICAgICdw
bGF0Zm9ybS9TY3JvbGxUeXBlcy5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9TY3JvbGxWaWV3
LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vU2Nyb2xsVmlldy5oJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9TY2hlbWVSZWdpc3RyeS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL1Nj
aGVtZVJlZ2lzdHJ5LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1Njcm9sbGJhci5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL1Njcm9sbGJhci5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9TY3JvbGxiYXJDbGllbnQuaCcsCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDYzODMxKQorKysgV2ViQ29yZS9X
ZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtOTI1LDYgKzkyNSw3IEBAIFNPVVJDRVMgKz0g
XAogICAgIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAgXAogICAgIHBs
YXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuY3BwIFwKICAgICBwbGF0Zm9ybS90
ZXh0L1JlZ3VsYXJFeHByZXNzaW9uLmNwcCBcCisgICAgcGxhdGZvcm0vU2NoZW1lUmVnaXN0cnku
Y3BwIFwKICAgICBwbGF0Zm9ybS9TY3JvbGxiYXIuY3BwIFwKICAgICBwbGF0Zm9ybS9TY3JvbGxi
YXJUaGVtZUNvbXBvc2l0ZS5jcHAgXAogICAgIHBsYXRmb3JtL1Njcm9sbFZpZXcuY3BwIFwKSW5k
ZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gNjM4MzEpCisr
KyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0yMzQ1Nyw2ICsyMzQ1NywxNCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxTY2hlbWVSZWdpc3RyeS5jcHAiDQorCQkJCT4N
CisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxT
Y2hlbWVSZWdpc3RyeS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJl
bGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cU2Nyb2xsYmFyLmNwcCINCiAJCQkJPg0KIAkJCTwvRmls
ZT4NCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2
aXNpb24gNjM4MzEpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtMTEwNiw2ICsxMTA2LDggQEAKIAkJNTE2MDMwMEIwQ0M0MjUx
MjAwQzhBQzI1IC8qIEZpbGVTeXN0ZW1QT1NJWC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTYwMzAwQTBDQzQyNTEyMDBDOEFDMjUgLyogRmlsZVN5
c3RlbVBPU0lYLmNwcCAqLzsgfTsKIAkJNTE2MDMwNkMwQ0M0MzYyMzAwQzhBQzI1IC8qIEZpbGVT
eXN0ZW1DRi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MTYwMzA2QjBDQzQzNjIzMDBDOEFDMjUgLyogRmlsZVN5c3RlbUNGLmNwcCAqLzsgfTsKIAkJ
NTE2MEY0OTgwQjBBQTc1RjAwQzFEMkFGIC8qIEhpc3RvcnlJdGVtTWFjLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2MEY0OTcwQjBBQTc1RjAwQzFE
MkFGIC8qIEhpc3RvcnlJdGVtTWFjLm1tICovOyB9OworCQk1MTYyQzdGNDExRjc3RUZCMDA2MTJF
RkUgLyogU2NoZW1lUmVnaXN0cnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTE2MkM3RjIxMUY3N0VGQTAwNjEyRUZFIC8qIFNjaGVtZVJlZ2lzdHJ5
LmNwcCAqLzsgfTsKKwkJNTE2MkM3RjUxMUY3N0VGQjAwNjEyRUZFIC8qIFNjaGVtZVJlZ2lzdHJ5
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTYyQzdG
MzExRjc3RUZCMDA2MTJFRkUgLyogU2NoZW1lUmVnaXN0cnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MTZCQjc5NDBDRTkxRTY4MDA1MTJGNzkg
LyogSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxNkJCNzkyMENFOTFFNjgwMDUxMkY3OSAvKiBKU1RyZWVXYWxrZXJD
dXN0b20uY3BwICovOyB9OwogCQk1MTcyMUZCQjExRDI3OTA3MDA2MzhCNDIgLyogQmVmb3JlUHJv
Y2Vzc0V2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MTcyMUZCOTExRDI3OTA3MDA2MzhCNDIgLyogQmVmb3JlUHJvY2Vzc0V2ZW50LmggKi87IH07
CiAJCTUxNzIxRkQyMTFEMjdFRjIwMDYzOEI0MiAvKiBKU0JlZm9yZVByb2Nlc3NFdmVudC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTcyMUZEMDEx
RDI3RUYyMDA2MzhCNDIgLyogSlNCZWZvcmVQcm9jZXNzRXZlbnQuY3BwICovOyB9OwpAQCAtNjg1
MCw2ICs2ODUyLDggQEAKIAkJNTE2MDMwMEEwQ0M0MjUxMjAwQzhBQzI1IC8qIEZpbGVTeXN0ZW1Q
T1NJWC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaWxlU3lzdGVt
UE9TSVguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTYwMzA2QjBDQzQzNjIz
MDBDOEFDMjUgLyogRmlsZVN5c3RlbUNGLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEZpbGVTeXN0ZW1DRi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUxNjBGNDk3MEIwQUE3NUYwMEMxRDJBRiAvKiBIaXN0b3J5SXRlbU1hYy5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IEhpc3RvcnlJdGVtTWFjLm1tOyBwYXRoID0g
bWFjL0hpc3RvcnlJdGVtTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTYy
QzdGMjExRjc3RUZBMDA2MTJFRkUgLyogU2NoZW1lUmVnaXN0cnkuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2NoZW1lUmVnaXN0cnkuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1MTYyQzdGMzExRjc3RUZCMDA2MTJFRkUgLyogU2NoZW1lUmVnaXN0
cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NoZW1lUmVnaXN0cnkuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE2QkI3OTIwQ0U5MUU2ODAwNTEyRjc5IC8q
IEpTVHJlZVdhbGtlckN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU1RyZWVXYWxrZXJDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MTcyMUZCOTExRDI3OTA3MDA2MzhCNDIgLyogQmVmb3JlUHJvY2Vzc0V2ZW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJlZm9yZVByb2Nlc3NFdmVudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MTcyMUZCQTExRDI3OTA3MDA2MzhCNDIgLyogQmVmb3Jl
UHJvY2Vzc0V2ZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBCZWZvcmVQcm9jZXNzRXZl
bnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTYyMzUsNiArMTYyMzksOCBA
QAogCQkJCUJDM0JFMTJBMEU5ODA5MkYwMDgzNTU4OCAvKiBQb3B1cE1lbnVTdHlsZS5oICovLAog
CQkJCUU0RDY4Nzc4MEVEN0FFNEYwMDZFQTk3OCAvKiBQdXJnZWFibGVCdWZmZXIuaCAqLywKIAkJ
CQkxQzYzQTI0NjBGNzE2NDY2MDBDMDlENUEgLyogUnVuTG9vcFRpbWVyLmggKi8sCisJCQkJNTE2
MkM3RjIxMUY3N0VGQTAwNjEyRUZFIC8qIFNjaGVtZVJlZ2lzdHJ5LmNwcCAqLywKKwkJCQk1MTYy
QzdGMzExRjc3RUZCMDA2MTJFRkUgLyogU2NoZW1lUmVnaXN0cnkuaCAqLywKIAkJCQlCQzdCMkFG
ODA0NTA4MjQxMDBBODAwMEYgLyogU2Nyb2xsYmFyLmggKi8sCiAJCQkJQkM5QkM2NEQwRTdDNDg4
OTAwOEI5ODQ5IC8qIFNjcm9sbGJhckNsaWVudC5oICovLAogCQkJCUJDOEI4NTRBMEU3QzdGNTYw
MEFCNjk4NCAvKiBTY3JvbGxiYXJUaGVtZS5oICovLApAQCAtMTk4MzIsNiArMTk4MzgsNyBAQAog
CQkJCTk3REQ0RDg3MEZERjRENkUwMEVDRjlBNCAvKiBYU1NBdWRpdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQlDRTE3MkUwMTExMzZFOENFMDA2MkE1MzMgLyogWm9vbU1vZGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCThDNkVBNjFBMTFFRjdFMDQwMEZEOEVFMyAvKiBSdW50aW1lRW5hYmxlZEZlYXR1
cmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MTYyQzdGNTExRjc3RUZCMDA2MTJFRkUgLyogU2No
ZW1lUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjIyMjUsNiArMjIyMzIsNyBAQAogCQkJ
CUUxQkU1MTJEMENGNkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJOTdERDREODYwRkRGNEQ2RTAwRUNGOUE0IC8qIFhTU0F1ZGl0b3IuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJOEM2RUE2MTkxMUVGN0UwNDAwRkQ4RUUzIC8qIFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTE2MkM3RjQxMUY3N0VGQjAwNjEy
RUZFIC8qIFNjaGVtZVJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogV2ViQ29yZS9s
b2FkZXIvRnJhbWVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1l
TG9hZGVyLmNwcAkocmV2aXNpb24gNjM4MzEpCisrKyBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyLDYgKzgyLDcgQEAKICNpbmNsdWRlICJQcm9ncmVz
c1RyYWNrZXIuaCIKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgogI2luY2x1ZGUgIlJlc291
cmNlUmVxdWVzdC5oIgorI2luY2x1ZGUgIlNjaGVtZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiU2Ny
aXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNjcmlwdFNvdXJjZUNvZGUuaCIKICNpbmNsdWRl
ICJTY3JpcHRTdHJpbmcuaCIKQEAgLTEwNTksNyArMTA2MCw3IEBAIGJvb2wgRnJhbWVMb2FkZXI6
OmlzTWl4ZWRDb250ZW50KFNlY3VyaXQKICAgICBpZiAoY29udGV4dC0+cHJvdG9jb2woKSAhPSAi
aHR0cHMiKQogICAgICAgICByZXR1cm4gZmFsc2U7ICAvLyBXZSBvbmx5IGNhcmUgYWJvdXQgSFRU
UFMgc2VjdXJpdHkgb3JpZ2lucy4KIAotICAgIGlmICghdXJsLmlzVmFsaWQoKSB8fCBTZWN1cml0
eU9yaWdpbjo6c2hvdWxkVHJlYXRVUkxTY2hlbWVBc1NlY3VyZSh1cmwucHJvdG9jb2woKSkpCisg
ICAgaWYgKCF1cmwuaXNWYWxpZCgpIHx8IFNjaGVtZVJlZ2lzdHJ5OjpzaG91bGRUcmVhdFVSTFNj
aGVtZUFzU2VjdXJlKHVybC5wcm90b2NvbCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOyAgLy8g
TG9hZGluZyB0aGVzZSBwcm90b2NvbHMgaXMgc2VjdXJlLgogCiAgICAgcmV0dXJuIHRydWU7CkBA
IC0xMzIxLDcgKzEzMjIsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpsb2FkRnJhbWVSZXF1ZXN0KGNv
bnN0CiAgICAgICAgIHJlZmVycmVyID0gbV9vdXRnb2luZ1JlZmVycmVyOwogCiAgICAgQVNTRVJU
KGZyYW1lKCktPmRvY3VtZW50KCkpOwotICAgIGlmIChTZWN1cml0eU9yaWdpbjo6c2hvdWxkVHJl
YXRVUkxBc0xvY2FsKHVybC5zdHJpbmcoKSkgJiYgIWlzRmVlZFdpdGhOZXN0ZWRQcm90b2NvbElu
SFRUUEZhbWlseSh1cmwpKSB7CisgICAgaWYgKFNjaGVtZVJlZ2lzdHJ5OjpzaG91bGRUcmVhdFVS
TEFzTG9jYWwodXJsLnN0cmluZygpKSAmJiAhaXNGZWVkV2l0aE5lc3RlZFByb3RvY29sSW5IVFRQ
RmFtaWx5KHVybCkpIHsKICAgICAgICAgaWYgKCFTZWN1cml0eU9yaWdpbjo6Y2FuTG9hZCh1cmws
IFN0cmluZygpLCBmcmFtZSgpLT5kb2N1bWVudCgpKSAmJiAhU2VjdXJpdHlPcmlnaW46OmNhbkxv
YWQodXJsLCByZWZlcnJlciwgMCkpIHsKICAgICAgICAgICAgIEZyYW1lTG9hZGVyOjpyZXBvcnRM
b2NhbExvYWRGYWlsZWQobV9mcmFtZSwgdXJsLnN0cmluZygpKTsKICAgICAgICAgICAgIHJldHVy
bjsKSW5kZXg6IFdlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAkocmV2aXNpb24gNjM4MzEpCisrKyBXZWJD
b3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3
IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAi
T3JpZ2luQWNjZXNzRW50cnkuaCIKKyNpbmNsdWRlICJTY2hlbWVSZWdpc3RyeS5oIgogI2luY2x1
ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDcsNDgg
KzQ4LDYgQEAgc3RhdGljIE9yaWdpbkFjY2Vzc01hcCYgb3JpZ2luQWNjZXNzTWFwKAogICAgIHJl
dHVybiBvcmlnaW5BY2Nlc3NNYXA7CiB9CiAKLXN0YXRpYyBVUkxTY2hlbWVzTWFwJiBsb2NhbFNj
aGVtZXMoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoVVJMU2NoZW1lc01hcCwgbG9jYWxT
Y2hlbWVzLCAoKSk7Ci0KLSAgICBpZiAobG9jYWxTY2hlbWVzLmlzRW1wdHkoKSkgewotICAgICAg
ICBsb2NhbFNjaGVtZXMuYWRkKCJmaWxlIik7Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgICAgICBs
b2NhbFNjaGVtZXMuYWRkKCJhcHBsZXdlYmRhdGEiKTsKLSNlbmRpZgotI2lmIFBMQVRGT1JNKFFU
KQotICAgICAgICBsb2NhbFNjaGVtZXMuYWRkKCJxcmMiKTsKLSNlbmRpZgotICAgIH0KLQotICAg
IHJldHVybiBsb2NhbFNjaGVtZXM7Ci19Ci0KLXN0YXRpYyBVUkxTY2hlbWVzTWFwJiBzZWN1cmVT
Y2hlbWVzKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFVSTFNjaGVtZXNNYXAsIHNlY3Vy
ZVNjaGVtZXMsICgpKTsKLQotICAgIGlmIChzZWN1cmVTY2hlbWVzLmlzRW1wdHkoKSkgewotICAg
ICAgICBzZWN1cmVTY2hlbWVzLmFkZCgiaHR0cHMiKTsKLSAgICAgICAgc2VjdXJlU2NoZW1lcy5h
ZGQoImFib3V0Iik7Ci0gICAgICAgIHNlY3VyZVNjaGVtZXMuYWRkKCJkYXRhIik7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIHNlY3VyZVNjaGVtZXM7Ci19Ci0KLXN0YXRpYyBVUkxTY2hlbWVzTWFwJiBz
Y2hlbWVzV2l0aFVuaXF1ZU9yaWdpbnMoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoVVJM
U2NoZW1lc01hcCwgc2NoZW1lc1dpdGhVbmlxdWVPcmlnaW5zLCAoKSk7Ci0KLSAgICAvLyBUaGlz
IGlzIGEgd2lsbGZ1bCB2aW9sYXRpb24gb2YgSFRNTDUuCi0gICAgLy8gU2VlIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTg4NQotICAgIGlmIChzY2hlbWVzV2l0aFVu
aXF1ZU9yaWdpbnMuaXNFbXB0eSgpKQotICAgICAgICBzY2hlbWVzV2l0aFVuaXF1ZU9yaWdpbnMu
YWRkKCJkYXRhIik7Ci0KLSAgICByZXR1cm4gc2NoZW1lc1dpdGhVbmlxdWVPcmlnaW5zOwotfQot
CiBzdGF0aWMgYm9vbCBzY2hlbWVSZXF1aXJlc0F1dGhvcml0eShjb25zdCBTdHJpbmcmIHNjaGVt
ZSkKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFVSTFNjaGVtZXNNYXAsIHNjaGVtZXMsICgp
KTsKQEAgLTEwOCw3ICs2Nyw3IEBAIFNlY3VyaXR5T3JpZ2luOjpTZWN1cml0eU9yaWdpbihjb25z
dCBLVVIKICAgICAsIG1fcHJvdG9jb2wodXJsLnByb3RvY29sKCkuaXNOdWxsKCkgPyAiIiA6IHVy
bC5wcm90b2NvbCgpLmxvd2VyKCkpCiAgICAgLCBtX2hvc3QodXJsLmhvc3QoKS5pc051bGwoKSA/
ICIiIDogdXJsLmhvc3QoKS5sb3dlcigpKQogICAgICwgbV9wb3J0KHVybC5wb3J0KCkpCi0gICAg
LCBtX2lzVW5pcXVlKGlzU2FuZGJveGVkKFNhbmRib3hPcmlnaW4pIHx8IHNob3VsZFRyZWF0VVJM
U2NoZW1lQXNOb0FjY2VzcyhtX3Byb3RvY29sKSkKKyAgICAsIG1faXNVbmlxdWUoaXNTYW5kYm94
ZWQoU2FuZGJveE9yaWdpbikgfHwgU2NoZW1lUmVnaXN0cnk6OnNob3VsZFRyZWF0VVJMU2NoZW1l
QXNOb0FjY2VzcyhtX3Byb3RvY29sKSkKICAgICAsIG1fdW5pdmVyc2FsQWNjZXNzKGZhbHNlKQog
ICAgICwgbV9kb21haW5XYXNTZXRJbkRPTShmYWxzZSkKICAgICAsIG1fZW5mb3JjZUZpbGVQYXRo
U2VwYXJhdGlvbihmYWxzZSkKQEAgLTMxNSw3ICsyNzQsNyBAQCBib29sIFNlY3VyaXR5T3JpZ2lu
Ojppc0FjY2Vzc1doaXRlTGlzdGVkCiAgIAogYm9vbCBTZWN1cml0eU9yaWdpbjo6Y2FuTG9hZChj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIsIERvY3VtZW50KiBkb2N1bWVu
dCkKIHsKLSAgICBpZiAoIXNob3VsZFRyZWF0VVJMQXNMb2NhbCh1cmwuc3RyaW5nKCkpKQorICAg
IGlmICghU2NoZW1lUmVnaXN0cnk6OnNob3VsZFRyZWF0VVJMQXNMb2NhbCh1cmwuc3RyaW5nKCkp
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIC8vIElmIHdlIHdlcmUgcHJvdmlkZWQgYSBk
b2N1bWVudCwgd2UgZmlyc3QgY2hlY2sgaWYgdGhlIGFjY2VzcyBoYXMgYmVlbiB3aGl0ZSBsaXN0
ZWQuCkBAIC0zMjksNyArMjg4LDcgQEAgYm9vbCBTZWN1cml0eU9yaWdpbjo6Y2FuTG9hZChjb25z
dCBLVVJMJgogICAgICAgICByZXR1cm4gZG9jdW1lbnRPcmlnaW4tPmNhbkxvYWRMb2NhbFJlc291
cmNlcygpOwogICAgIH0KICAgICBpZiAoIXJlZmVycmVyLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuIHNob3VsZFRyZWF0VVJMQXNMb2NhbChyZWZlcnJlcik7CisgICAgICAgIHJldHVybiBTY2hl
bWVSZWdpc3RyeTo6c2hvdWxkVHJlYXRVUkxBc0xvY2FsKHJlZmVycmVyKTsKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKQEAgLTM1Nyw3ICszMTYsNyBAQCB2b2lkIFNlY3VyaXR5T3JpZ2luOjplbmZv
cmNlRmlsZVBhdGhTZXBhCiAKIGJvb2wgU2VjdXJpdHlPcmlnaW46OmlzTG9jYWwoKSBjb25zdAog
ewotICAgIHJldHVybiBzaG91bGRUcmVhdFVSTFNjaGVtZUFzTG9jYWwobV9wcm90b2NvbCk7Cisg
ICAgcmV0dXJuIFNjaGVtZVJlZ2lzdHJ5OjpzaG91bGRUcmVhdFVSTFNjaGVtZUFzTG9jYWwobV9w
cm90b2NvbCk7CiB9CiAKIGJvb2wgU2VjdXJpdHlPcmlnaW46OmlzU2VjdXJlVHJhbnNpdGlvblRv
KGNvbnN0IEtVUkwmIHVybCkgY29uc3QKQEAgLTU1Nyw4NSArNTE2LDYgQEAgYm9vbCBTZWN1cml0
eU9yaWdpbjo6aXNTYW1lU2NoZW1lSG9zdFBvcgogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lk
IFNlY3VyaXR5T3JpZ2luOjpyZWdpc3RlclVSTFNjaGVtZUFzTG9jYWwoY29uc3QgU3RyaW5nJiBz
Y2hlbWUpCi17Ci0gICAgbG9jYWxTY2hlbWVzKCkuYWRkKHNjaGVtZSk7Ci19Ci0KLXZvaWQgU2Vj
dXJpdHlPcmlnaW46OnJlbW92ZVVSTFNjaGVtZVJlZ2lzdGVyZWRBc0xvY2FsKGNvbnN0IFN0cmlu
ZyYgc2NoZW1lKQotewotICAgIGlmIChzY2hlbWUgPT0gImZpbGUiKQotICAgICAgICByZXR1cm47
Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIGlmIChzY2hlbWUgPT0gImFwcGxld2ViZGF0YSIpCi0g
ICAgICAgIHJldHVybjsKLSNlbmRpZgotICAgIGxvY2FsU2NoZW1lcygpLnJlbW92ZShzY2hlbWUp
OwotfQotCi1jb25zdCBVUkxTY2hlbWVzTWFwJiBTZWN1cml0eU9yaWdpbjo6bG9jYWxVUkxTY2hl
bWVzKCkKLXsKLSAgICByZXR1cm4gbG9jYWxTY2hlbWVzKCk7Ci19Ci0KLWJvb2wgU2VjdXJpdHlP
cmlnaW46OnNob3VsZFRyZWF0VVJMQXNMb2NhbChjb25zdCBTdHJpbmcmIHVybCkKLXsKLSAgICAv
LyBUaGlzIGF2b2lkcyBhbiBhbGxvY2F0aW9uIG9mIGFub3RoZXIgU3RyaW5nIGFuZCB0aGUgSGFz
aFNldCBjb250YWlucygpCi0gICAgLy8gY2FsbCBmb3IgdGhlIGZpbGU6IGFuZCBodHRwOiBzY2hl
bWVzLgotICAgIGlmICh1cmwubGVuZ3RoKCkgPj0gNSkgewotICAgICAgICBjb25zdCBVQ2hhciog
cyA9IHVybC5jaGFyYWN0ZXJzKCk7Ci0gICAgICAgIGlmIChzWzBdID09ICdoJyAmJiBzWzFdID09
ICd0JyAmJiBzWzJdID09ICd0JyAmJiBzWzNdID09ICdwJyAmJiBzWzRdID09ICc6JykKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKHNbMF0gPT0gJ2YnICYmIHNbMV0gPT0g
J2knICYmIHNbMl0gPT0gJ2wnICYmIHNbM10gPT0gJ2UnICYmIHNbNF0gPT0gJzonKQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaW50IGxvYyA9IHVybC5maW5kKCc6Jyk7
Ci0gICAgaWYgKGxvYyA9PSAtMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgU3RyaW5n
IHNjaGVtZSA9IHVybC5sZWZ0KGxvYyk7Ci0gICAgcmV0dXJuIGxvY2FsU2NoZW1lcygpLmNvbnRh
aW5zKHNjaGVtZSk7Ci19Ci0KLWJvb2wgU2VjdXJpdHlPcmlnaW46OnNob3VsZFRyZWF0VVJMU2No
ZW1lQXNMb2NhbChjb25zdCBTdHJpbmcmIHNjaGVtZSkKLXsKLSAgICAvLyBUaGlzIGF2b2lkcyBh
biBhbGxvY2F0aW9uIG9mIGFub3RoZXIgU3RyaW5nIGFuZCB0aGUgSGFzaFNldCBjb250YWlucygp
Ci0gICAgLy8gY2FsbCBmb3IgdGhlIGZpbGU6IGFuZCBodHRwOiBzY2hlbWVzLgotICAgIGlmIChz
Y2hlbWUubGVuZ3RoKCkgPT0gNCkgewotICAgICAgICBjb25zdCBVQ2hhciogcyA9IHNjaGVtZS5j
aGFyYWN0ZXJzKCk7Ci0gICAgICAgIGlmIChzWzBdID09ICdoJyAmJiBzWzFdID09ICd0JyAmJiBz
WzJdID09ICd0JyAmJiBzWzNdID09ICdwJykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgaWYgKHNbMF0gPT0gJ2YnICYmIHNbMV0gPT0gJ2knICYmIHNbMl0gPT0gJ2wnICYmIHNb
M10gPT0gJ2UnKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKHNj
aGVtZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBsb2Nh
bFNjaGVtZXMoKS5jb250YWlucyhzY2hlbWUpOwotfQotCi12b2lkIFNlY3VyaXR5T3JpZ2luOjpy
ZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3MoY29uc3QgU3RyaW5nJiBzY2hlbWUpCi17Ci0gICAg
c2NoZW1lc1dpdGhVbmlxdWVPcmlnaW5zKCkuYWRkKHNjaGVtZSk7Ci19Ci0KLWJvb2wgU2VjdXJp
dHlPcmlnaW46OnNob3VsZFRyZWF0VVJMU2NoZW1lQXNOb0FjY2Vzcyhjb25zdCBTdHJpbmcmIHNj
aGVtZSkKLXsKLSAgICByZXR1cm4gc2NoZW1lc1dpdGhVbmlxdWVPcmlnaW5zKCkuY29udGFpbnMo
c2NoZW1lKTsKLX0KLQotdm9pZCBTZWN1cml0eU9yaWdpbjo6cmVnaXN0ZXJVUkxTY2hlbWVBc1Nl
Y3VyZShjb25zdCBTdHJpbmcmIHNjaGVtZSkKLXsKLSAgICBzZWN1cmVTY2hlbWVzKCkuYWRkKHNj
aGVtZSk7Ci19Ci0KLWJvb2wgU2VjdXJpdHlPcmlnaW46OnNob3VsZFRyZWF0VVJMU2NoZW1lQXNT
ZWN1cmUoY29uc3QgU3RyaW5nJiBzY2hlbWUpCi17Ci0gICAgcmV0dXJuIHNlY3VyZVNjaGVtZXMo
KS5jb250YWlucyhzY2hlbWUpOwotfQotCiBib29sIFNlY3VyaXR5T3JpZ2luOjpzaG91bGRIaWRl
UmVmZXJyZXIoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHJlZmVycmVyKQogewogICAg
IGJvb2wgcmVmZXJyZXJJc1NlY3VyZVVSTCA9IHByb3RvY29sSXMocmVmZXJyZXIsICJodHRwcyIp
OwpJbmRleDogV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmgJKHJldmlzaW9uIDYzODMxKQorKysgV2ViQ29yZS9w
YWdlL1NlY3VyaXR5T3JpZ2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDggKzQwLDYgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi10eXBlZGVmIEhhc2hTZXQ8U3RyaW5nLCBDYXNlRm9sZGlu
Z0hhc2g+IFVSTFNjaGVtZXNNYXA7Ci0KIGNsYXNzIERvY3VtZW50OwogY2xhc3MgS1VSTDsKIApA
QCAtMTc0LDE4ICsxNzIsNiBAQCBwdWJsaWM6CiAgICAgLy8gKGFuZCB3aGV0aGVyIGl0IHdhcyBz
ZXQpIGJ1dCBjb25zaWRlcmluZyB0aGUgaG9zdC4gSXQgaXMgdXNlZCBmb3IgcG9zdE1lc3NhZ2Uu
CiAgICAgYm9vbCBpc1NhbWVTY2hlbWVIb3N0UG9ydChjb25zdCBTZWN1cml0eU9yaWdpbiopIGNv
bnN0OwogCi0gICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsKGNvbnN0IFN0
cmluZyYpOwotICAgIHN0YXRpYyB2b2lkIHJlbW92ZVVSTFNjaGVtZVJlZ2lzdGVyZWRBc0xvY2Fs
KGNvbnN0IFN0cmluZyYpOwotICAgIHN0YXRpYyBjb25zdCBVUkxTY2hlbWVzTWFwJiBsb2NhbFVS
TFNjaGVtZXMoKTsKLSAgICBzdGF0aWMgYm9vbCBzaG91bGRUcmVhdFVSTEFzTG9jYWwoY29uc3Qg
U3RyaW5nJik7Ci0gICAgc3RhdGljIGJvb2wgc2hvdWxkVHJlYXRVUkxTY2hlbWVBc0xvY2FsKGNv
bnN0IFN0cmluZyYpOwotCi0gICAgLy8gU2VjdXJlIHNjaGVtZXMgZG8gbm90IHRyaWdnZXIgbWl4
ZWQgY29udGVudCB3YXJuaW5ncy4gRm9yIGV4YW1wbGUsCi0gICAgLy8gaHR0cHMgYW5kIGRhdGEg
YXJlIHNlY3VyZSBzY2hlbWVzIGJlY2F1c2UgdGhleSBjYW5ub3QgYmUgY29ycnVwdGVkIGJ5Ci0g
ICAgLy8gYWN0aXZlIG5ldHdvcmsgYXR0YWNrZXJzLgotICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVy
VVJMU2NoZW1lQXNTZWN1cmUoY29uc3QgU3RyaW5nJik7Ci0gICAgc3RhdGljIGJvb2wgc2hvdWxk
VHJlYXRVUkxTY2hlbWVBc1NlY3VyZShjb25zdCBTdHJpbmcmKTsKLQogICAgIHN0YXRpYyBib29s
IHNob3VsZEhpZGVSZWZlcnJlcihjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiByZWZlcnJlcik7
CiAKICAgICBlbnVtIExvY2FsTG9hZFBvbGljeSB7CkBAIC0xOTcsOSArMTgzLDYgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBib29sIHJlc3RyaWN0QWNjZXNzVG9Mb2NhbCgpOwogICAgIHN0YXRpYyBi
b29sIGFsbG93U3Vic3RpdHV0ZURhdGFBY2Nlc3NUb0xvY2FsKCk7CiAKLSAgICBzdGF0aWMgdm9p
ZCByZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3MoY29uc3QgU3RyaW5nJik7Ci0gICAgc3RhdGlj
IGJvb2wgc2hvdWxkVHJlYXRVUkxTY2hlbWVBc05vQWNjZXNzKGNvbnN0IFN0cmluZyYpOwotCiAg
ICAgc3RhdGljIHZvaWQgYWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoY29uc3QgU2VjdXJp
dHlPcmlnaW4mIHNvdXJjZU9yaWdpbiwgY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvblByb3RvY29s
LCBjb25zdCBTdHJpbmcmIGRlc3RpbmF0aW9uRG9tYWlucywgYm9vbCBhbGxvd0Rlc3RpbmF0aW9u
U3ViZG9tYWlucyk7CiAgICAgc3RhdGljIHZvaWQgcmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0
RW50cnkoY29uc3QgU2VjdXJpdHlPcmlnaW4mIHNvdXJjZU9yaWdpbiwgY29uc3QgU3RyaW5nJiBk
ZXN0aW5hdGlvblByb3RvY29sLCBjb25zdCBTdHJpbmcmIGRlc3RpbmF0aW9uRG9tYWlucywgYm9v
bCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucyk7CiAgICAgc3RhdGljIHZvaWQgcmVzZXRPcmln
aW5BY2Nlc3NXaGl0ZWxpc3RzKCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1NjaGVtZVJlZ2lz
dHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1NjaGVtZVJlZ2lzdHJ5LmNw
cAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2NoZW1lUmVnaXN0cnkuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiU2NoZW1lUmVnaXN0cnkuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0
aWMgVVJMU2NoZW1lc01hcCYgbG9jYWxTY2hlbWVzKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKFVSTFNjaGVtZXNNYXAsIGxvY2FsU2NoZW1lcywgKCkpOworCisgICAgaWYgKGxvY2FsU2No
ZW1lcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgbG9jYWxTY2hlbWVzLmFkZCgiZmlsZSIpOworI2lm
IFBMQVRGT1JNKE1BQykKKyAgICAgICAgbG9jYWxTY2hlbWVzLmFkZCgiYXBwbGV3ZWJkYXRhIik7
CisjZW5kaWYKKyNpZiBQTEFURk9STShRVCkKKyAgICAgICAgbG9jYWxTY2hlbWVzLmFkZCgicXJj
Iik7CisjZW5kaWYKKyAgICB9CisKKyAgICByZXR1cm4gbG9jYWxTY2hlbWVzOworfQorCitzdGF0
aWMgVVJMU2NoZW1lc01hcCYgc2VjdXJlU2NoZW1lcygpCit7CisgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChVUkxTY2hlbWVzTWFwLCBzZWN1cmVTY2hlbWVzLCAoKSk7CisKKyAgICBpZiAoc2VjdXJl
U2NoZW1lcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgc2VjdXJlU2NoZW1lcy5hZGQoImh0dHBzIik7
CisgICAgICAgIHNlY3VyZVNjaGVtZXMuYWRkKCJhYm91dCIpOworICAgICAgICBzZWN1cmVTY2hl
bWVzLmFkZCgiZGF0YSIpOworICAgIH0KKworICAgIHJldHVybiBzZWN1cmVTY2hlbWVzOworfQor
CitzdGF0aWMgVVJMU2NoZW1lc01hcCYgc2NoZW1lc1dpdGhVbmlxdWVPcmlnaW5zKCkKK3sKKyAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKFVSTFNjaGVtZXNNYXAsIHNjaGVtZXNXaXRoVW5pcXVlT3Jp
Z2lucywgKCkpOworCisgICAgLy8gVGhpcyBpcyBhIHdpbGxmdWwgdmlvbGF0aW9uIG9mIEhUTUw1
LgorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE4
ODUKKyAgICBpZiAoc2NoZW1lc1dpdGhVbmlxdWVPcmlnaW5zLmlzRW1wdHkoKSkKKyAgICAgICAg
c2NoZW1lc1dpdGhVbmlxdWVPcmlnaW5zLmFkZCgiZGF0YSIpOworCisgICAgcmV0dXJuIHNjaGVt
ZXNXaXRoVW5pcXVlT3JpZ2luczsKK30KKwordm9pZCBTY2hlbWVSZWdpc3RyeTo6cmVnaXN0ZXJV
UkxTY2hlbWVBc0xvY2FsKGNvbnN0IFN0cmluZyYgc2NoZW1lKQoreworICAgIGxvY2FsU2NoZW1l
cygpLmFkZChzY2hlbWUpOworfQorCit2b2lkIFNjaGVtZVJlZ2lzdHJ5OjpyZW1vdmVVUkxTY2hl
bWVSZWdpc3RlcmVkQXNMb2NhbChjb25zdCBTdHJpbmcmIHNjaGVtZSkKK3sKKyAgICBpZiAoc2No
ZW1lID09ICJmaWxlIikKKyAgICAgICAgcmV0dXJuOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBp
ZiAoc2NoZW1lID09ICJhcHBsZXdlYmRhdGEiKQorICAgICAgICByZXR1cm47CisjZW5kaWYKKyAg
ICBsb2NhbFNjaGVtZXMoKS5yZW1vdmUoc2NoZW1lKTsKK30KKworY29uc3QgVVJMU2NoZW1lc01h
cCYgU2NoZW1lUmVnaXN0cnk6OmxvY2FsVVJMU2NoZW1lcygpCit7CisgICAgcmV0dXJuIGxvY2Fs
U2NoZW1lcygpOworfQorCitib29sIFNjaGVtZVJlZ2lzdHJ5OjpzaG91bGRUcmVhdFVSTEFzTG9j
YWwoY29uc3QgU3RyaW5nJiB1cmwpCit7CisgICAgLy8gVGhpcyBhdm9pZHMgYW4gYWxsb2NhdGlv
biBvZiBhbm90aGVyIFN0cmluZyBhbmQgdGhlIEhhc2hTZXQgY29udGFpbnMoKQorICAgIC8vIGNh
bGwgZm9yIHRoZSBmaWxlOiBhbmQgaHR0cDogc2NoZW1lcy4KKyAgICBpZiAodXJsLmxlbmd0aCgp
ID49IDUpIHsKKyAgICAgICAgY29uc3QgVUNoYXIqIHMgPSB1cmwuY2hhcmFjdGVycygpOworICAg
ICAgICBpZiAoc1swXSA9PSAnaCcgJiYgc1sxXSA9PSAndCcgJiYgc1syXSA9PSAndCcgJiYgc1sz
XSA9PSAncCcgJiYgc1s0XSA9PSAnOicpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIGlmIChzWzBdID09ICdmJyAmJiBzWzFdID09ICdpJyAmJiBzWzJdID09ICdsJyAmJiBzWzNd
ID09ICdlJyAmJiBzWzRdID09ICc6JykKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIGludCBsb2MgPSB1cmwuZmluZCgnOicpOworICAgIGlmIChsb2MgPT0gLTEpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIFN0cmluZyBzY2hlbWUgPSB1cmwubGVmdChsb2MpOwor
ICAgIHJldHVybiBsb2NhbFNjaGVtZXMoKS5jb250YWlucyhzY2hlbWUpOworfQorCitib29sIFNj
aGVtZVJlZ2lzdHJ5OjpzaG91bGRUcmVhdFVSTFNjaGVtZUFzTG9jYWwoY29uc3QgU3RyaW5nJiBz
Y2hlbWUpCit7CisgICAgLy8gVGhpcyBhdm9pZHMgYW4gYWxsb2NhdGlvbiBvZiBhbm90aGVyIFN0
cmluZyBhbmQgdGhlIEhhc2hTZXQgY29udGFpbnMoKQorICAgIC8vIGNhbGwgZm9yIHRoZSBmaWxl
OiBhbmQgaHR0cDogc2NoZW1lcy4KKyAgICBpZiAoc2NoZW1lLmxlbmd0aCgpID09IDQpIHsKKyAg
ICAgICAgY29uc3QgVUNoYXIqIHMgPSBzY2hlbWUuY2hhcmFjdGVycygpOworICAgICAgICBpZiAo
c1swXSA9PSAnaCcgJiYgc1sxXSA9PSAndCcgJiYgc1syXSA9PSAndCcgJiYgc1szXSA9PSAncCcp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChzWzBdID09ICdmJyAmJiBz
WzFdID09ICdpJyAmJiBzWzJdID09ICdsJyAmJiBzWzNdID09ICdlJykKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChzY2hlbWUuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gbG9jYWxTY2hlbWVzKCkuY29udGFpbnMoc2NoZW1l
KTsKK30KKwordm9pZCBTY2hlbWVSZWdpc3RyeTo6cmVnaXN0ZXJVUkxTY2hlbWVBc05vQWNjZXNz
KGNvbnN0IFN0cmluZyYgc2NoZW1lKQoreworICAgIHNjaGVtZXNXaXRoVW5pcXVlT3JpZ2lucygp
LmFkZChzY2hlbWUpOworfQorCitib29sIFNjaGVtZVJlZ2lzdHJ5OjpzaG91bGRUcmVhdFVSTFNj
aGVtZUFzTm9BY2Nlc3MoY29uc3QgU3RyaW5nJiBzY2hlbWUpCit7CisgICAgcmV0dXJuIHNjaGVt
ZXNXaXRoVW5pcXVlT3JpZ2lucygpLmNvbnRhaW5zKHNjaGVtZSk7Cit9CisKK3ZvaWQgU2NoZW1l
UmVnaXN0cnk6OnJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUoY29uc3QgU3RyaW5nJiBzY2hlbWUp
Cit7CisgICAgc2VjdXJlU2NoZW1lcygpLmFkZChzY2hlbWUpOworfQorCitib29sIFNjaGVtZVJl
Z2lzdHJ5OjpzaG91bGRUcmVhdFVSTFNjaGVtZUFzU2VjdXJlKGNvbnN0IFN0cmluZyYgc2NoZW1l
KQoreworICAgIHJldHVybiBzZWN1cmVTY2hlbWVzKCkuY29udGFpbnMoc2NoZW1lKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9TY2hlbWVSZWdp
c3RyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vU2NoZW1lUmVnaXN0cnkuaAko
cmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2NoZW1lUmVnaXN0cnkuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICoKKyAqLworI2lmbmRlZiBTY2hlbWVSZWdpc3RyeV9oCisjZGVm
aW5lIFNjaGVtZVJlZ2lzdHJ5X2gKKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5j
bHVkZSAiU3RyaW5nSGFzaC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKwordHlwZWRlZiBIYXNoU2V0PFN0cmluZywgQ2FzZUZvbGRpbmdIYXNoPiBV
UkxTY2hlbWVzTWFwOworCitjbGFzcyBTY2hlbWVSZWdpc3RyeSB7CitwdWJsaWM6CisgICAgc3Rh
dGljIHZvaWQgcmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsKGNvbnN0IFN0cmluZyYpOworICAgIHN0
YXRpYyB2b2lkIHJlbW92ZVVSTFNjaGVtZVJlZ2lzdGVyZWRBc0xvY2FsKGNvbnN0IFN0cmluZyYp
OworICAgIHN0YXRpYyBjb25zdCBVUkxTY2hlbWVzTWFwJiBsb2NhbFVSTFNjaGVtZXMoKTsKKwor
ICAgIHN0YXRpYyBib29sIHNob3VsZFRyZWF0VVJMQXNMb2NhbChjb25zdCBTdHJpbmcmKTsKKyAg
ICBzdGF0aWMgYm9vbCBzaG91bGRUcmVhdFVSTFNjaGVtZUFzTG9jYWwoY29uc3QgU3RyaW5nJik7
CisKKyAgICAvLyBTZWN1cmUgc2NoZW1lcyBkbyBub3QgdHJpZ2dlciBtaXhlZCBjb250ZW50IHdh
cm5pbmdzLiBGb3IgZXhhbXBsZSwKKyAgICAvLyBodHRwcyBhbmQgZGF0YSBhcmUgc2VjdXJlIHNj
aGVtZXMgYmVjYXVzZSB0aGV5IGNhbm5vdCBiZSBjb3JydXB0ZWQgYnkKKyAgICAvLyBhY3RpdmUg
bmV0d29yayBhdHRhY2tlcnMuCisgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJVUkxTY2hlbWVBc1Nl
Y3VyZShjb25zdCBTdHJpbmcmKTsKKyAgICBzdGF0aWMgYm9vbCBzaG91bGRUcmVhdFVSTFNjaGVt
ZUFzU2VjdXJlKGNvbnN0IFN0cmluZyYpOworCisgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJVUkxT
Y2hlbWVBc05vQWNjZXNzKGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyBib29sIHNob3VsZFRy
ZWF0VVJMU2NoZW1lQXNOb0FjY2Vzcyhjb25zdCBTdHJpbmcmKTsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFNjaGVtZVJlZ2lzdHJ5X2gKSW5kZXg6IFdlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwkocmV2aXNpb24gNjM4NTUpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTAtMDctMjEgIEJyYWR5IEVpZHNvbiAgPGJlaWRz
b25AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEJyZWFrIG91dCAic2NoZW1lIHJlZ2lzdHJhdGlvbiIgZnVuY3Rpb25hbGl0eSB0byBh
IFNjaGVtZVJlZ2lzdHJ5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00Mjc4MworCisgICAgICAgICogc3JjL1dlYlNlY3VyaXR5UG9saWN5LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViU2VjdXJpdHlQb2xpY3k6OnJlZ2lzdGVyVVJMU2NoZW1lQXNMb2Nh
bCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNlY3VyaXR5UG9saWN5OjpyZWdpc3RlclVSTFNjaGVt
ZUFzTm9BY2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJTZWN1cml0eVBvbGljeTo6cmVnaXN0
ZXJVUkxTY2hlbWVBc1NlY3VyZSk6CisKIDIwMTAtMDctMjEgIEZpbm51ciBUaG9yYXJpbnNzb24g
IDxmaW5udXIud2Via2l0QGdtYWlsLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEaW1pdHJp
IEdsYXprb3YuCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNlY3VyaXR5UG9saWN5LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNlY3VyaXR5UG9saWN5LmNw
cAkocmV2aXNpb24gNjM4MzEpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNlY3VyaXR5UG9s
aWN5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIldlYlNl
Y3VyaXR5UG9saWN5LmgiCiAKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIlNj
aGVtZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKIAogI2luY2x1ZGUg
IldlYlN0cmluZy5oIgpAQCAtNDMsMTcgKzQ0LDE3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiB2
b2lkIFdlYlNlY3VyaXR5UG9saWN5OjpyZWdpc3RlclVSTFNjaGVtZUFzTG9jYWwoY29uc3QgV2Vi
U3RyaW5nJiBzY2hlbWUpCiB7Ci0gICAgU2VjdXJpdHlPcmlnaW46OnJlZ2lzdGVyVVJMU2NoZW1l
QXNMb2NhbChzY2hlbWUpOworICAgIFNjaGVtZVJlZ2lzdHJ5OjpyZWdpc3RlclVSTFNjaGVtZUFz
TG9jYWwoc2NoZW1lKTsKIH0KIAogdm9pZCBXZWJTZWN1cml0eVBvbGljeTo6cmVnaXN0ZXJVUkxT
Y2hlbWVBc05vQWNjZXNzKGNvbnN0IFdlYlN0cmluZyYgc2NoZW1lKQogewotICAgIFNlY3VyaXR5
T3JpZ2luOjpyZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3Moc2NoZW1lKTsKKyAgICBTY2hlbWVS
ZWdpc3RyeTo6cmVnaXN0ZXJVUkxTY2hlbWVBc05vQWNjZXNzKHNjaGVtZSk7CiB9CiAKIHZvaWQg
V2ViU2VjdXJpdHlQb2xpY3k6OnJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUoY29uc3QgV2ViU3Ry
aW5nJiBzY2hlbWUpCiB7Ci0gICAgU2VjdXJpdHlPcmlnaW46OnJlZ2lzdGVyVVJMU2NoZW1lQXNT
ZWN1cmUoc2NoZW1lKTsKKyAgICBTY2hlbWVSZWdpc3RyeTo6cmVnaXN0ZXJVUkxTY2hlbWVBc1Nl
Y3VyZShzY2hlbWUpOwogfQogCiB2b2lkIFdlYlNlY3VyaXR5UG9saWN5OjphZGRPcmlnaW5BY2Nl
c3NXaGl0ZWxpc3RFbnRyeSgKSW5kZXg6IFdlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2Mzg1NSkKKysrIFdlYktpdC9tYWMv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMDctMjEgIEJy
YWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEJyZWFrIG91dCAic2NoZW1lIHJlZ2lzdHJhdGlvbiIg
ZnVuY3Rpb25hbGl0eSB0byBhIFNjaGVtZVJlZ2lzdHJ5CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00Mjc4MworCisgICAgICAgICogV2ViVmlldy9XZWJW
aWV3Lm1tOgorICAgICAgICAoK1tXZWJWaWV3IF9yZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlOl0p
OgorICAgICAgICAoK1tXZWJWaWV3IHJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbDpdKToKKwogMjAx
MC0wNy0yMSAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIuCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
Vmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkocmV2
aXNpb24gNjM4MzEpCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMTQxLDYgKzE0MSw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlcldpZGdldC5o
PgogI2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJjZUhhbmRsZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9S
dW50aW1lQXBwbGljYXRpb25DaGVja3MuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2NoZW1lUmVnaXN0
cnkuaD4KICNpbXBvcnQgPFdlYkNvcmUvU2NyaXB0Q29udHJvbGxlci5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9TY3JpcHRWYWx1ZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbi5oPgpA
QCAtMjUwMCw3ICsyNTAxLDcgQEAgKyAodm9pZClfc2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRl
bjooQgogCiArICh2b2lkKV9yZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlOihOU1N0cmluZyAqKXNj
aGVtZQogewotICAgIFNlY3VyaXR5T3JpZ2luOjpyZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKHNj
aGVtZSk7CisgICAgU2NoZW1lUmVnaXN0cnk6OnJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUoc2No
ZW1lKTsKIH0KIAogQGVuZApAQCAtMjcyMCw3ICsyNzIxLDcgQEAgKyAoTlNTdHJpbmcgKilVUkxU
aXRsZUZyb21QYXN0ZWJvYXJkOihOUwogCiArICh2b2lkKXJlZ2lzdGVyVVJMU2NoZW1lQXNMb2Nh
bDooTlNTdHJpbmcgKilwcm90b2NvbAogewotICAgIFNlY3VyaXR5T3JpZ2luOjpyZWdpc3RlclVS
TFNjaGVtZUFzTG9jYWwocHJvdG9jb2wpOworICAgIFNjaGVtZVJlZ2lzdHJ5OjpyZWdpc3RlclVS
TFNjaGVtZUFzTG9jYWwocHJvdG9jb2wpOwogfQogCiAtIChpZClfaW5pdFdpdGhBcmd1bWVudHM6
KE5TRGljdGlvbmFyeSAqKSBhcmd1bWVudHMKSW5kZXg6IFdlYktpdC9xdC9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L3F0L0NoYW5nZUxvZwkocmV2aXNpb24gNjM4NTUpCisrKyBXZWJL
aXQvcXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAtMDct
MjEgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJyZWFrIG91dCAic2NoZW1lIHJlZ2lzdHJh
dGlvbiIgZnVuY3Rpb25hbGl0eSB0byBhIFNjaGVtZVJlZ2lzdHJ5CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00Mjc4MworCisgICAgICAgICogQXBpL3F3
ZWJwYWdlLmNwcDoKKyAgICAgICAgKFFXZWJQYWdlOjphY2NlcHROYXZpZ2F0aW9uUmVxdWVzdCk6
CisgICAgICAgICogQXBpL3F3ZWJzZWN1cml0eW9yaWdpbi5jcHA6CisgICAgICAgIChRV2ViU2Vj
dXJpdHlPcmlnaW46OmFkZExvY2FsU2NoZW1lKToKKyAgICAgICAgKFFXZWJTZWN1cml0eU9yaWdp
bjo6cmVtb3ZlTG9jYWxTY2hlbWUpOgorICAgICAgICAoUVdlYlNlY3VyaXR5T3JpZ2luOjpsb2Nh
bFNjaGVtZXMpOgorCiAyMDEwLTA3LTIwICBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbiAgPGtl
bm5ldGguY2hyaXN0aWFuc2VuQG9wZW5ib3NzYS5vcmc+CiAKICAgICAgICAgW1F0XSBBZGQgQVBJ
IHRvIGRlZmluZSBkZXZpY2Utd2lkdGggYW5kIGhlaWdodCBmb3IgdXNlIHdpdGggdGhlIHZpZXdw
b3J0IG1ldGEgdGFnCkluZGV4OiBXZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAkocmV2aXNpb24gNjM4MzEpCisrKyBXZWJL
aXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksNyBAQAog
I2luY2x1ZGUgIkRyYWdDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRHJhZ0RhdGEuaCIKICNpbmNs
dWRlICJFZGl0b3JDbGllbnRRdC5oIgorI2luY2x1ZGUgIlNjaGVtZVJlZ2lzdHJ5LmgiCiAjaW5j
bHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUg
IlBhZ2UuaCIKQEAgLTIzOTMsNyArMjM5NCw3IEBAIGJvb2wgUVdlYlBhZ2U6OmFjY2VwdE5hdmln
YXRpb25SZXF1ZXN0KFEKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgICAgICAg
ICAgY2FzZSBEZWxlZ2F0ZUV4dGVybmFsTGlua3M6Ci0gICAgICAgICAgICAgICAgaWYgKFdlYkNv
cmU6OlNlY3VyaXR5T3JpZ2luOjpzaG91bGRUcmVhdFVSTFNjaGVtZUFzTG9jYWwocmVxdWVzdC51
cmwoKS5zY2hlbWUoKSkpCisgICAgICAgICAgICAgICAgaWYgKFdlYkNvcmU6OlNjaGVtZVJlZ2lz
dHJ5OjpzaG91bGRUcmVhdFVSTFNjaGVtZUFzTG9jYWwocmVxdWVzdC51cmwoKS5zY2hlbWUoKSkp
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIGVtaXQg
bGlua0NsaWNrZWQocmVxdWVzdC51cmwoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwpJbmRleDogV2ViS2l0L3F0L0FwaS9xd2Vic2VjdXJpdHlvcmlnaW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9xdC9BcGkvcXdlYnNlY3VyaXR5b3JpZ2luLmNwcAkocmV2aXNpb24gNjM4MzEp
CisrKyBXZWJLaXQvcXQvQXBpL3F3ZWJzZWN1cml0eW9yaWdpbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlci5oIgogI2luY2x1
ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJTY2hlbWVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIlNlY3Vy
aXR5T3JpZ2luLmgiCiAjaW5jbHVkZSA8UVN0cmluZ0xpc3Q+CiAKQEAgLTIyMiw3ICsyMjMsNyBA
QCBRTGlzdDxRV2ViRGF0YWJhc2U+IFFXZWJTZWN1cml0eU9yaWdpbjo6CiAqLwogdm9pZCBRV2Vi
U2VjdXJpdHlPcmlnaW46OmFkZExvY2FsU2NoZW1lKGNvbnN0IFFTdHJpbmcmIHNjaGVtZSkKIHsK
LSAgICBTZWN1cml0eU9yaWdpbjo6cmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsKHNjaGVtZSk7Cisg
ICAgU2NoZW1lUmVnaXN0cnk6OnJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbChzY2hlbWUpOwogfQog
CiAvKiEKQEAgLTIzNyw3ICsyMzgsNyBAQCB2b2lkIFFXZWJTZWN1cml0eU9yaWdpbjo6YWRkTG9j
YWxTY2hlbWUoCiAqLwogdm9pZCBRV2ViU2VjdXJpdHlPcmlnaW46OnJlbW92ZUxvY2FsU2NoZW1l
KGNvbnN0IFFTdHJpbmcmIHNjaGVtZSkKIHsKLSAgICBTZWN1cml0eU9yaWdpbjo6cmVtb3ZlVVJM
U2NoZW1lUmVnaXN0ZXJlZEFzTG9jYWwoc2NoZW1lKTsKKyAgICBTY2hlbWVSZWdpc3RyeTo6cmVt
b3ZlVVJMU2NoZW1lUmVnaXN0ZXJlZEFzTG9jYWwoc2NoZW1lKTsKIH0KIAogLyohCkBAIC0yNTEs
NyArMjUyLDcgQEAgdm9pZCBRV2ViU2VjdXJpdHlPcmlnaW46OnJlbW92ZUxvY2FsU2NoZQogUVN0
cmluZ0xpc3QgUVdlYlNlY3VyaXR5T3JpZ2luOjpsb2NhbFNjaGVtZXMoKQogewogICAgIFFTdHJp
bmdMaXN0IGxpc3Q7Ci0gICAgY29uc3QgVVJMU2NoZW1lc01hcCYgbWFwID0gU2VjdXJpdHlPcmln
aW46OmxvY2FsVVJMU2NoZW1lcygpOworICAgIGNvbnN0IFVSTFNjaGVtZXNNYXAmIG1hcCA9IFNj
aGVtZVJlZ2lzdHJ5Ojpsb2NhbFVSTFNjaGVtZXMoKTsKICAgICBVUkxTY2hlbWVzTWFwOjpjb25z
dF9pdGVyYXRvciBlbmQgPSBtYXAuZW5kKCk7CiAgICAgZm9yIChVUkxTY2hlbWVzTWFwOjpjb25z
dF9pdGVyYXRvciBpID0gbWFwLmJlZ2luKCk7IGkgIT0gZW5kOyArK2kpIHsKICAgICAgICAgY29u
c3QgUVN0cmluZyBzY2hlbWUgPSAqaTsKSW5kZXg6IFdlYktpdC93aW4vQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC93aW4vQ2hhbmdlTG9nCShyZXZpc2lvbiA2Mzg1NSkKKysrIFdlYktp
dC93aW4vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMDct
MjEgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJyZWFrIG91dCAic2NoZW1lIHJlZ2lzdHJh
dGlvbiIgZnVuY3Rpb25hbGl0eSB0byBhIFNjaGVtZVJlZ2lzdHJ5CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00Mjc4MworCisgICAgICAgICogV2ViVmll
dy5jcHA6CisgICAgICAgIChXZWJWaWV3OjpyZWdpc3RlclVSTFNjaGVtZUFzTG9jYWwpOgorICAg
ICAgICAoV2ViVmlldzo6cmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3VyZSk6CisKIDIwMTAtMDctMjAg
IFN0ZXZlIEZhbGtlbmJ1cmcgIDxzZmFsa2VuQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBBZGFtIFJvYmVuLgpJbmRleDogV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvd2luL1dlYlZpZXcuY3BwCShyZXZpc2lvbiA2MzgzMSkKKysrIFdlYktpdC93
aW4vV2ViVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCw2ICsxMTgsNyBAQAogI2luY2x1
ZGUgPFdlYkNvcmUvUmVuZGVyV2lkZ2V0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUhh
bmRsZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VIYW5kbGVDbGllbnQuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL1NjaGVtZVJlZ2lzdHJ5Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TY3JpcHRW
YWx1ZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsYmFyLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9TY3JvbGxiYXJUaGVtZS5oPgpAQCAtMzY1Miw3ICszNjUzLDcgQEAgSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSBXZWJWaWV3OjpyZWdpcwogICAgIGlmICghc2NoZW1lKQogICAgICAgICByZXR1
cm4gRV9QT0lOVEVSOwogCi0gICAgU2VjdXJpdHlPcmlnaW46OnJlZ2lzdGVyVVJMU2NoZW1lQXNM
b2NhbChTdHJpbmcoc2NoZW1lLCA6OlN5c1N0cmluZ0xlbihzY2hlbWUpKSk7CisgICAgU2NoZW1l
UmVnaXN0cnk6OnJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbChTdHJpbmcoc2NoZW1lLCA6OlN5c1N0
cmluZ0xlbihzY2hlbWUpKSk7CiAKICAgICByZXR1cm4gU19PSzsKIH0KQEAgLTY0MTIsNyArNjQx
Myw3IEBAIEhSRVNVTFQgV2ViVmlldzo6c2V0RG9tYWluUmVsYXhhdGlvbkZvcmIKIAogSFJFU1VM
VCBXZWJWaWV3OjpyZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKEJTVFIgc2NoZW1lKQogewotICAg
IFNlY3VyaXR5T3JpZ2luOjpyZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKHRvU3RyaW5nKHNjaGVt
ZSkpOworICAgIFNjaGVtZVJlZ2lzdHJ5OjpyZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKHRvU3Ry
aW5nKHNjaGVtZSkpOwogICAgIHJldHVybiBTX09LOwogfQogCg==
</data>
<flag name="review"
          id="50378"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>