<?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>28750</bug_id>
          
          <creation_ts>2009-08-26 13:16:00 -0700</creation_ts>
          <short_desc>Add a Linux and Mac SQLite VFS for Chromium</short_desc>
          <delta_ts>2009-08-28 14:44:51 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>Linux</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>0</everconfirmed>
          <reporter name="Dumitru Daniliuc">dumi</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>agl</cc>
    
    <cc>andersca</cc>
    
    <cc>aroben</cc>
    
    <cc>beidson</cc>
    
    <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>michaeln</cc>
    
    <cc>ojan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>142953</commentid>
    <comment_count>0</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-08-26 13:16:00 -0700</bug_when>
    <thetext>We should add a Chromium-specific SQLite VFS for Linux and Mac (just like we did for Windows) to support HTML5 DBs on all 3 platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142955</commentid>
    <comment_count>1</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-08-26 13:20:36 -0700</bug_when>
    <thetext>A significant part of the review was already done at http://codereview.chromium.org/173205/show.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142977</commentid>
    <comment_count>2</comment_count>
      <attachid>38640</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-08-26 15:24:29 -0700</bug_when>
    <thetext>Created attachment 38640
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143430</commentid>
    <comment_count>3</comment_count>
      <attachid>38640</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-08-28 12:34:52 -0700</bug_when>
    <thetext>Comment on attachment 38640
patch

&gt; -    // open databases using Chromium&apos;s VFS
&gt; +    // open databases using the default VFS
&gt; +    // in renderers, it should be Chromium&apos;s VFS; in the browser process it should be SQLite&apos;s default VFS
&gt;      return sqlite3_open_v2(fileName.utf8().data(), database,
&gt;                             SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_FULLMUTEX,
&gt; -                           &quot;chromium_vfs&quot;);
&gt; +                           NULL);
0 is WebKit style.

Otherwise, LGTM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143434</commentid>
    <comment_count>4</comment_count>
      <attachid>38747</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-08-28 12:56:59 -0700</bug_when>
    <thetext>Created attachment 38747
patch

Replaced NULL with 0.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143435</commentid>
    <comment_count>5</comment_count>
      <attachid>38747</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-08-28 13:01:36 -0700</bug_when>
    <thetext>Comment on attachment 38747
patch

r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143443</commentid>
    <comment_count>6</comment_count>
      <attachid>38747</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-08-28 13:26:40 -0700</bug_when>
    <thetext>Comment on attachment 38747
patch

It&apos;s a two-sided patch. Out the queue we go.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143464</commentid>
    <comment_count>7</comment_count>
      <attachid>38747</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2009-08-28 14:44:46 -0700</bug_when>
    <thetext>Comment on attachment 38747
patch

Clearing flags on attachment: 38747

Committed r47874: &lt;http://trac.webkit.org/changeset/47874&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143465</commentid>
    <comment_count>8</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2009-08-28 14:44:51 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38640</attachid>
            <date>2009-08-26 15:24:29 -0700</date>
            <delta_ts>2009-08-28 12:56:59 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>17853</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0Nzc5NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjEgQEAKKzIwMDktMDgtMjYgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGRpbmcgQ2hyb21pdW0ncyBWRlMgZm9yIExpbnV4IGFuZCBNYWMuCisKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4NzUwCisKKyAgICAgICAgKiBX
ZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1CcmlkZ2Uu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvY2hyb21pdW0vU1FMaXRlRmlsZVN5c3RlbUNocm9t
aXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZUZpbGVTeXN0ZW06Om9wZW5EYXRhYmFz
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZp
bGUpOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVtQ2hy
b21pdW1MaW51eC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vc3FsL2Nocm9taXVt
L1NRTGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bU1hYy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxh
dGZvcm0vc3FsL2Nocm9taXVtL1NRTGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bVBvc2l4LmNwcDogQWRk
ZWQuCisgICAgICAgICogcGxhdGZvcm0vc3FsL2Nocm9taXVtL1NRTGl0ZUZpbGVTeXN0ZW1DaHJv
bWl1bVdpbi5jcHA6CisKIDIwMDktMDgtMjYgIERhdmlkIExldmluICA8bGV2aW5AY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4KSW5kZXg6IFdlYkNvcmUv
V2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lv
biA0Nzc4OCkKKysrIFdlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0yMzg1
LDggKzIzODUsNyBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL3NxbC9TUUxpdGVUcmFuc2FjdGlv
bi5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL3NxbC9TUUxpdGVUcmFuc2FjdGlvbi5oJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9zcWwvY2hyb21pdW0vU1FMaXRlRmlsZVN5c3RlbUNocm9t
aXVtLmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vc3FsL2Nocm9taXVtL1NRTGl0ZUZpbGVT
eXN0ZW1DaHJvbWl1bUxpbnV4LmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vc3FsL2Nocm9t
aXVtL1NRTGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bU1hYy5jcHAnLAorICAgICAgICAgICAgJ3BsYXRm
b3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVtQ2hyb21pdW1Qb3NpeC5jcHAnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVtQ2hyb21pdW1X
aW4uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9zeW1iaWFuL0Zsb2F0UG9pbnRTeW1iaWFu
LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vc3ltYmlhbi9GbG9hdFJlY3RTeW1iaWFuLmNw
cCcsCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtQnJpZGdlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bUJyaWRnZS5oCShy
ZXZpc2lvbiA0Nzc4OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1Ccmlk
Z2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDEyICsxMDMsMTYgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAgICAgICAgIC8vIEZvcm1zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIHN0YXRpYyB2b2lkIG5vdGlm
eUZvcm1TdGF0ZUNoYW5nZWQoY29uc3QgRG9jdW1lbnQqKTsKLSAgICAgICAgCisKICAgICAgICAg
Ly8gSFRNTDUgREIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KICNpZiBFTkFCTEUoREFUQUJBU0UpCi0gICAgICAgIHN0YXRpYyBQbGF0
Zm9ybUZpbGVIYW5kbGUgZGF0YWJhc2VPcGVuRmlsZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBp
bnQgZGVzaXJlZEZsYWdzKTsKLSAgICAgICAgc3RhdGljIGJvb2wgZGF0YWJhc2VEZWxldGVGaWxl
KGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpOworICAgICAgICAvLyBSZXR1cm5zIGEgaGFuZGxlIHRv
IHRoZSBEQiBmaWxlIGFuZCBvb3B0aW9uYWxseSBhIGhhbmRsZSB0byBpdHMgY29udGFpbmluZyBk
aXJlY3RvcnkKKyAgICAgICAgc3RhdGljIFBsYXRmb3JtRmlsZUhhbmRsZSBkYXRhYmFzZU9wZW5G
aWxlKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGludCBkZXNpcmVkRmxhZ3MsIFBsYXRmb3JtRmls
ZUhhbmRsZSogZGlySGFuZGxlID0gMCk7CisgICAgICAgIC8vIFJldHVybnMgYSBTUUxpdGUgY29k
ZSAoU1FMSVRFX09LID0gMCwgb24gc3VjY2VzcykKKyAgICAgICAgc3RhdGljIGludCBkYXRhYmFz
ZURlbGV0ZUZpbGUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgYm9vbCBzeW5jRGlyID0gZmFsc2Up
OworICAgICAgICAvLyBSZXR1cm5zIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBEQiBmaWxlCiAgICAg
ICAgIHN0YXRpYyBsb25nIGRhdGFiYXNlR2V0RmlsZUF0dHJpYnV0ZXMoY29uc3QgU3RyaW5nJiBm
aWxlTmFtZSk7CisgICAgICAgIC8vIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIERCIGZpbGUKICAg
ICAgICAgc3RhdGljIGxvbmcgbG9uZyBkYXRhYmFzZUdldEZpbGVTaXplKGNvbnN0IFN0cmluZyYg
ZmlsZU5hbWUpOwogI2VuZGlmCiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vc3FsL2Nocm9taXVt
L1NRTGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9zcWwvY2hyb21pdW0vU1FMaXRlRmlsZVN5c3RlbUNocm9taXVtLmNwcAkocmV2aXNpb24g
NDc3ODgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVt
Q2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSwxMCArNTUsMTEgQEAgaW50IFNRTGl0
ZUZpbGVTeXN0ZW06Om9wZW5EYXRhYmFzZShjb25zdAogICAgICAgICByZXR1cm4gc3FsaXRlM19v
cGVuMTYocGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCBkYXRhYmFzZSk7CiAg
ICAgfQogCi0gICAgLy8gb3BlbiBkYXRhYmFzZXMgdXNpbmcgQ2hyb21pdW0ncyBWRlMKKyAgICAv
LyBvcGVuIGRhdGFiYXNlcyB1c2luZyB0aGUgZGVmYXVsdCBWRlMKKyAgICAvLyBpbiByZW5kZXJl
cnMsIGl0IHNob3VsZCBiZSBDaHJvbWl1bSdzIFZGUzsgaW4gdGhlIGJyb3dzZXIgcHJvY2VzcyBp
dCBzaG91bGQgYmUgU1FMaXRlJ3MgZGVmYXVsdCBWRlMKICAgICByZXR1cm4gc3FsaXRlM19vcGVu
X3YyKGZpbGVOYW1lLnV0ZjgoKS5kYXRhKCksIGRhdGFiYXNlLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgU1FMSVRFX09QRU5fUkVBRFdSSVRFIHwgU1FMSVRFX09QRU5fQ1JFQVRFIHwgU1FM
SVRFX09QRU5fRlVMTE1VVEVYLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgImNocm9taXVt
X3ZmcyIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CiB9CiAKIFN0cmluZyBT
UUxpdGVGaWxlU3lzdGVtOjpnZXRGaWxlTmFtZUZvck5ld0RhdGFiYXNlKApAQCAtOTksOSArMTAw
LDcgQEAgYm9vbCBTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVFbXB0eURhdGFiYQogCiBib29sIFNR
TGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZURhdGFiYXNlRmlsZShjb25zdCBTdHJpbmcmIGZpbGVOYW1l
KQogewotICAgIC8vIHJldHVybiB0cnVlIGlmIGFuZCBvbmx5IGlmIHRoZSBlcnJvciBjb2RlIHJl
dHVybmVkIGJ5Ci0gICAgLy8gQ2hyb21pdW1CcmlkZ2U6OmRlbGV0ZURhdGFiYXNlKCkgaXMgMAot
ICAgIHJldHVybiAoIUNocm9taXVtQnJpZGdlOjpkYXRhYmFzZURlbGV0ZUZpbGUoZmlsZU5hbWUp
KTsKKyAgICByZXR1cm4gKENocm9taXVtQnJpZGdlOjpkYXRhYmFzZURlbGV0ZUZpbGUoZmlsZU5h
bWUpID09IFNRTElURV9PSyk7CiB9CiAKIGxvbmcgbG9uZyBTUUxpdGVGaWxlU3lzdGVtOjpnZXRE
YXRhYmFzZUZpbGVTaXplKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVtQ2hyb21pdW1MaW51eC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9zcWwvY2hyb21pdW0vU1FMaXRlRmlsZVN5c3Rl
bUNocm9taXVtTGludXguY3BwCShyZXZpc2lvbiA0Nzc4OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
c3FsL2Nocm9taXVtL1NRTGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bUxpbnV4LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw0MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNRTGl0
ZUZpbGVTeXN0ZW0uaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIFNRTGl0ZUZpbGVT
eXN0ZW06OnJlZ2lzdGVyU1FMaXRlVkZTKCkKLXsKLSAgICAvLyBzdHViIGZvciByZWdpc3Rlcmlu
ZyBDaHJvbWl1bSdzIFNRTGl0ZSBWRlMgZm9yIExpbnV4Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
c3FsL2Nocm9taXVtL1NRTGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bU1hYy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9zcWwvY2hyb21pdW0vU1FMaXRlRmlsZVN5c3RlbUNocm9taXVt
TWFjLmNwcAkocmV2aXNpb24gNDc3ODgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3NxbC9jaHJvbWl1
bS9TUUxpdGVGaWxlU3lzdGVtQ2hyb21pdW1NYWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQy
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoK
LSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU1FMaXRlRmlsZVN5c3RlbS5o
IgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgU1FMaXRlRmlsZVN5c3RlbTo6cmVnaXN0
ZXJTUUxpdGVWRlMoKQotewotICAgIC8vIHN0dWIgZm9yIHJlZ2lzdGVyaW5nIENocm9taXVtJ3Mg
U1FMaXRlIFZGUyBmb3IgTWFjCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vc3FsL2Nocm9taXVtL1NR
TGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bVBvc2l4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVtQ2hyb21pdW1Qb3NpeC5jcHAJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lz
dGVtQ2hyb21pdW1Qb3NpeC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTkwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNRTGl0ZUZpbGVTeXN0ZW0uaCIKKworI2luY2x1ZGUg
IkNocm9taXVtQnJpZGdlLmgiCisjaW5jbHVkZSA8c3FsaXRlMy5oPgorCisjaW5jbHVkZSA8ZmNu
dGwuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKwordXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CisKKy8vIERlZmluZWQgaW4gQ2hyb21pdW0ncyBjb2RlYmFzZSBp
biB0aGlyZF9wYXJ0eS9zcWxpdGUvc3JjL29zX3VuaXguYworZXh0ZXJuICJDIiB7Cit2b2lkIGlu
aXRVbml4RmlsZShzcWxpdGUzX2ZpbGUqIGZpbGUpOworaW50IGZpbGxJblVuaXhGaWxlKHNxbGl0
ZTNfdmZzKiB2ZnMsIGludCBmZCwgaW50IGRpcmZkLCBzcWxpdGUzX2ZpbGUqIGZpbGUsIGNvbnN0
IGNoYXIqIGZpbGVOYW1lLCBpbnQgbm9Mb2NrKTsKK30KKworLy8gQ2hyb21pdW0ncyBQb3NpeCBp
bXBsZW1lbnRhdGlvbiBvZiBTUUxpdGUgVkZTCituYW1lc3BhY2UgeworCisvLyBPcGVucyBhIGZp
bGUuCisvLworLy8gdmZzIC0gcG9pbnRlciB0byB0aGUgc3FsaXRlM192ZnMgb2JqZWN0LgorLy8g
ZmlsZU5hbWUgLSB0aGUgbmFtZSBvZiB0aGUgZmlsZS4KKy8vIGlkIC0gdGhlIHN0cnVjdHVyZSB0
aGF0IHdpbGwgbWFuaXB1bGF0ZSB0aGUgbmV3bHkgb3BlbmVkIGZpbGUuCisvLyBkZXNpcmVkRmxh
Z3MgLSB0aGUgZGVzaXJlZCBvcGVuIG1vZGUgZmxhZ3MuCisvLyB1c2VkRmxhZ3MgLSB0aGUgYWN0
dWFsIG9wZW4gbW9kZSBmbGFncyB0aGF0IHdlcmUgdXNlZC4KK2ludCBjaHJvbWl1bU9wZW4oc3Fs
aXRlM192ZnMqIHZmcywgY29uc3QgY2hhciogZmlsZU5hbWUsCisgICAgICAgICAgICAgICAgIHNx
bGl0ZTNfZmlsZSogaWQsIGludCBkZXNpcmVkRmxhZ3MsIGludCogdXNlZEZsYWdzKQoreworICAg
IGluaXRVbml4RmlsZShpZCk7CisgICAgaW50IGRpcmZkID0gLTE7CisgICAgaW50IGZkID0gQ2hy
b21pdW1CcmlkZ2U6OmRhdGFiYXNlT3BlbkZpbGUoZmlsZU5hbWUsIGRlc2lyZWRGbGFncywgJmRp
cmZkKTsKKyAgICBpZiAoZmQgPCAwKSB7CisgICAgICAgIGlmIChkZXNpcmVkRmxhZ3MgJiBTUUxJ
VEVfT1BFTl9SRUFEV1JJVEUpIHsKKyAgICAgICAgICAgIGludCBuZXdGbGFncyA9IChkZXNpcmVk
RmxhZ3MgJiB+KFNRTElURV9PUEVOX1JFQURXUklURSB8IFNRTElURV9PUEVOX0NSRUFURSkpIHwg
U1FMSVRFX09QRU5fUkVBRE9OTFk7CisgICAgICAgICAgICByZXR1cm4gY2hyb21pdW1PcGVuKHZm
cywgZmlsZU5hbWUsIGlkLCBuZXdGbGFncywgdXNlZEZsYWdzKTsKKyAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICByZXR1cm4gU1FMSVRFX0NBTlRPUEVOOworICAgIH0KKyAgICBpZiAodXNlZEZs
YWdzKQorICAgICAgICAqdXNlZEZsYWdzID0gZGVzaXJlZEZsYWdzOworCisgICAgZmNudGwoZmQs
IEZfU0VURkQsIGZjbnRsKGZkLCBGX0dFVEZEKSB8IEZEX0NMT0VYRUMpOworICAgIGlmIChkaXJm
ZCA+PSAwKQorICAgICAgICBmY250bChkaXJmZCwgRl9TRVRGRCwgZmNudGwoZmQsIEZfR0VURkQp
IHwgRkRfQ0xPRVhFQyk7CisKKyAgICAvLyBUaGUgbWFzayAweDAwMDA3RjAwIGdpdmVzIHVzIHRo
ZSA3IGJpdHMgdGhhdCBkZXRlcm1pbmUgdGhlIHR5cGUgb2YgdGhlIGZpbGUgU1FMaXRlIGlzIHRy
eWluZyB0byBvcGVuLgorICAgIGludCBmaWxlVHlwZSA9IGRlc2lyZWRGbGFncyAmIDB4MDAwMDdG
MDA7CisgICAgaW50IG5vTG9jayA9IChmaWxlVHlwZSAhPSBTUUxJVEVfT1BFTl9NQUlOX0RCKTsK
KyAgICByZXR1cm4gZmlsbEluVW5peEZpbGUodmZzLCBmZCwgZGlyZmQsIGlkLCBmaWxlTmFtZSwg
bm9Mb2NrKTsKK30KKworLy8gRGVsZXRlcyB0aGUgZ2l2ZW4gZmlsZS4KKy8vCisvLyB2ZnMgLSBw
b2ludGVyIHRvIHRoZSBzcWxpdGUzX3ZmcyBvYmplY3QuCisvLyBmaWxlTmFtZSAtIHRoZSBuYW1l
IG9mIHRoZSBmaWxlLgorLy8gc3luY0RpciAtIGRldGVybWluZXMgaWYgdGhlIGRpcmVjdG9yeSB0
byB3aGljaCB0aGlzIGZpbGUgYmVsb25ncworLy8gICAgICAgICAgIHNob3VsZCBiZSBzeW5jaGVk
IGFmdGVyIHRoZSBmaWxlIGlzIGRlbGV0ZWQuCitpbnQgY2hyb21pdW1EZWxldGUoc3FsaXRlM192
ZnMqLCBjb25zdCBjaGFyKiBmaWxlTmFtZSwgaW50IHN5bmNEaXIpCit7CisgICAgcmV0dXJuIENo
cm9taXVtQnJpZGdlOjpkYXRhYmFzZURlbGV0ZUZpbGUoZmlsZU5hbWUsIHN5bmNEaXIpOworfQor
CisvLyBDaGVjayB0aGUgZXhpc3RhbmNlIGFuZCBzdGF0dXMgb2YgdGhlIGdpdmVuIGZpbGUuCisv
LworLy8gdmZzIC0gcG9pbnRlciB0byB0aGUgc3FsaXRlM192ZnMgb2JqZWN0LgorLy8gZmlsZU5h
bWUgLSB0aGUgbmFtZSBvZiB0aGUgZmlsZS4KKy8vIGZsYWcgLSB0aGUgdHlwZSBvZiB0ZXN0IHRv
IG1ha2Ugb24gdGhpcyBmaWxlLgorLy8gcmVzIC0gdGhlIHJlc3VsdC4KK2ludCBjaHJvbWl1bUFj
Y2VzcyhzcWxpdGUzX3ZmcyosIGNvbnN0IGNoYXIqIGZpbGVOYW1lLCBpbnQgZmxhZywgaW50KiBy
ZXMpCit7CisgICAgaW50IGF0dHIgPSBzdGF0aWNfY2FzdDxpbnQ+KENocm9taXVtQnJpZGdlOjpk
YXRhYmFzZUdldEZpbGVBdHRyaWJ1dGVzKGZpbGVOYW1lKSk7CisgICAgaWYgKGF0dHIgPCAwKSB7
CisgICAgICAgICpyZXMgPSAwOworICAgICAgICByZXR1cm4gU1FMSVRFX09LOworICAgIH0KKwor
ICAgIHN3aXRjaCAoZmxhZykgeworICAgIGNhc2UgU1FMSVRFX0FDQ0VTU19FWElTVFM6CisgICAg
ICAgICpyZXMgPSAxOyAgIC8vIGlmIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3QsIGF0dHIgPCAwCisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgU1FMSVRFX0FDQ0VTU19SRUFEV1JJVEU6CisgICAgICAg
ICpyZXMgPSAoYXR0ciAmIFdfT0spICYmIChhdHRyICYgUl9PSyk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgU1FMSVRFX0FDQ0VTU19SRUFEOgorICAgICAgICAqcmVzID0gKGF0dHIgJiBSX09L
KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIFNRTElURV9F
UlJPUjsKKyAgICB9CisKKyAgICByZXR1cm4gU1FMSVRFX09LOworfQorCisvLyBUdXJucyBhIHJl
bGF0aXZlIHBhdGhuYW1lIGludG8gYSBmdWxsIHBhdGhuYW1lLgorLy8KKy8vIHZmcyAtIHBvaW50
ZXIgdG8gdGhlIHNxbGl0ZTNfdmZzIG9iamVjdC4KKy8vIHJlbGF0aXZlUGF0aCAtIHRoZSByZWxh
dGl2ZSBwYXRoLgorLy8gYnVmU2l6ZSAtIHRoZSBzaXplIG9mIHRoZSBvdXRwdXQgYnVmZmVyIGlu
IGJ5dGVzLgorLy8gYWJzb2x1dGVQYXRoIC0gdGhlIG91dHB1dCBidWZmZXIgd2hlcmUgdGhlIGFi
c29sdXRlIHBhdGggd2lsbCBiZSBzdG9yZWQuCitpbnQgY2hyb21pdW1GdWxsUGF0aG5hbWUoc3Fs
aXRlM192ZnMqIHZmcywgY29uc3QgY2hhciogcmVsYXRpdmVQYXRoLAorICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCwgY2hhciogYWJzb2x1dGVQYXRoKQoreworICAgIC8vIFRoZSByZW5kZXJl
ciBwcm9jZXNzIGRvZXNuJ3QgbmVlZCB0byBrbm93IHRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBm
aWxlCisgICAgc3FsaXRlM19zbnByaW50Zih2ZnMtPm14UGF0aG5hbWUsIGFic29sdXRlUGF0aCwg
IiVzIiwgcmVsYXRpdmVQYXRoKTsKKyAgICByZXR1cm4gU1FMSVRFX09LOworfQorCisjaWZuZGVm
IFNRTElURV9PTUlUX0xPQURfRVhURU5TSU9OCisvLyBSZXR1cm5zIE5VTEwsIHRodXMgZGlzYWxs
b3dpbmcgbG9hZGluZyBsaWJyYXJpZXMgaW4gdGhlIHJlbmRlcmVyIHByb2Nlc3MuCisvLworLy8g
dmZzIC0gcG9pbnRlciB0byB0aGUgc3FsaXRlM192ZnMgb2JqZWN0LgorLy8gZmlsZU5hbWUgLSB0
aGUgbmFtZSBvZiB0aGUgc2hhcmVkIGxpYnJhcnkgZmlsZS4KK3ZvaWQqIGNocm9taXVtRGxPcGVu
KHNxbGl0ZTNfdmZzKiwgY29uc3QgY2hhciopCit7CisgICAgcmV0dXJuIDA7Cit9CisjZWxzZQor
I2RlZmluZSBjaHJvbWl1bURsT3BlbiAwCisjZW5kaWYgLy8gU1FMSVRFX09NSVRfTE9BRF9FWFRF
TlNJT04KKworfSAvLyBuYW1lc3BhY2UKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIFNR
TGl0ZUZpbGVTeXN0ZW06OnJlZ2lzdGVyU1FMaXRlVkZTKCkKK3sKKyAgICAvLyBGSVhNRTogTWFr
ZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgdW5pbnRlbmRlZCBjb25zZXF1ZW5jZXMgd2hlbiBWRlMg
Y29kZSBpcyBjYWxsZWQgaW4gdGhlIGJyb3dzZXIgcHJvY2Vzcy4KKyAgICBpZiAoIUNocm9taXVt
QnJpZGdlOjpzYW5kYm94RW5hYmxlZCgpKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc3FsaXRlM192ZnMqIHVuaXhfdmZzID0g
c3FsaXRlM192ZnNfZmluZCgidW5peCIpOworICAgIHN0YXRpYyBzcWxpdGUzX3ZmcyBjaHJvbWl1
bV92ZnMgPSB7CisgICAgICAgIDEsCisgICAgICAgIHVuaXhfdmZzLT5zek9zRmlsZSwKKyAgICAg
ICAgdW5peF92ZnMtPm14UGF0aG5hbWUsCisgICAgICAgIDAsCisgICAgICAgICJjaHJvbWl1bV92
ZnMiLAorICAgICAgICAwLAorICAgICAgICBjaHJvbWl1bU9wZW4sCisgICAgICAgIGNocm9taXVt
RGVsZXRlLAorICAgICAgICBjaHJvbWl1bUFjY2VzcywKKyAgICAgICAgY2hyb21pdW1GdWxsUGF0
aG5hbWUsCisgICAgICAgIGNocm9taXVtRGxPcGVuLAorICAgICAgICB1bml4X3Zmcy0+eERsRXJy
b3IsCisgICAgICAgIHVuaXhfdmZzLT54RGxTeW0sCisgICAgICAgIHVuaXhfdmZzLT54RGxDbG9z
ZSwKKyAgICAgICAgdW5peF92ZnMtPnhSYW5kb21uZXNzLAorICAgICAgICB1bml4X3Zmcy0+eFNs
ZWVwLAorICAgICAgICB1bml4X3Zmcy0+eEN1cnJlbnRUaW1lLAorICAgICAgICB1bml4X3Zmcy0+
eEdldExhc3RFcnJvcgorICAgIH07CisgICAgc3FsaXRlM192ZnNfcmVnaXN0ZXIoJmNocm9taXVt
X3ZmcywgMSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMg
b246IFdlYkNvcmUvcGxhdGZvcm0vc3FsL2Nocm9taXVtL1NRTGl0ZUZpbGVTeXN0ZW1DaHJvbWl1
bVBvc2l4LmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVtQ2hyb21pdW1X
aW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vc3FsL2Nocm9taXVtL1NRTGl0
ZUZpbGVTeXN0ZW1DaHJvbWl1bVdpbi5jcHAJKHJldmlzaW9uIDQ3Nzg4KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9zcWwvY2hyb21pdW0vU1FMaXRlRmlsZVN5c3RlbUNocm9taXVtV2luLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzUsNiArMzUsOCBAQAogI2luY2x1ZGUgPHNxbGl0ZTMuaD4KICNpbmNs
dWRlIDx3aW5kb3dzLmg+CiAKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCiAvLyBEZWZpbmVk
IGluIENocm9taXVtJ3MgY29kZWJhc2UgaW4gdGhpcmRfcGFydHkvc3FsaXRlL3NyYy9vc193aW4u
YwogZXh0ZXJuICJDIiB7CiBpbnQgY2hyb21pdW1fc3FsaXRlM19pbml0aWFsaXplX3dpbl9zcWxp
dGUzX2ZpbGUoc3FsaXRlM19maWxlKiBmaWxlLCBIQU5ETEUgaGFuZGxlKTsKQEAgLTUzLDcgKzU1
LDcgQEAgbmFtZXNwYWNlIHsKIGludCBjaHJvbWl1bU9wZW4oc3FsaXRlM192ZnMqLCBjb25zdCBj
aGFyKiBmaWxlTmFtZSwKICAgICAgICAgICAgICAgICAgc3FsaXRlM19maWxlKiBpZCwgaW50IGRl
c2lyZWRGbGFncywgaW50KiB1c2VkRmxhZ3MpCiB7Ci0gICAgSEFORExFIGggPSBXZWJDb3JlOjpD
aHJvbWl1bUJyaWRnZTo6ZGF0YWJhc2VPcGVuRmlsZShmaWxlTmFtZSwgZGVzaXJlZEZsYWdzKTsK
KyAgICBIQU5ETEUgaCA9IENocm9taXVtQnJpZGdlOjpkYXRhYmFzZU9wZW5GaWxlKGZpbGVOYW1l
LCBkZXNpcmVkRmxhZ3MpOwogICAgIGlmIChoID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7CiAg
ICAgICAgIGlmIChkZXNpcmVkRmxhZ3MgJiBTUUxJVEVfT1BFTl9SRUFEV1JJVEUpIHsKICAgICAg
ICAgICAgIGludCBuZXdGbGFncyA9IChkZXNpcmVkRmxhZ3MgfCBTUUxJVEVfT1BFTl9SRUFET05M
WSkgJiB+U1FMSVRFX09QRU5fUkVBRFdSSVRFOwpAQCAtODAsMTAgKzgyLDcgQEAgaW50IGNocm9t
aXVtT3BlbihzcWxpdGUzX3ZmcyosIGNvbnN0IGNoYQogLy8gICAgICAgICAgIHNob3VsZCBiZSBz
eW5jaGVkIGFmdGVyIHRoZSBmaWxlIGlzIGRlbGV0ZWQuCiBpbnQgY2hyb21pdW1EZWxldGUoc3Fs
aXRlM192ZnMqLCBjb25zdCBjaGFyKiBmaWxlTmFtZSwgaW50KQogewotICAgIGJvb2wgZGVsZXRl
ZCA9IFdlYkNvcmU6OkNocm9taXVtQnJpZGdlOjpkYXRhYmFzZURlbGV0ZUZpbGUoZmlsZU5hbWUp
OwotICAgIERXT1JEIHJjID0gV2ViQ29yZTo6Q2hyb21pdW1CcmlkZ2U6OmRhdGFiYXNlR2V0Rmls
ZUF0dHJpYnV0ZXMoZmlsZU5hbWUpOwotICAgIHJldHVybiAoKHJjID09IElOVkFMSURfRklMRV9B
VFRSSUJVVEVTKSAmJiBkZWxldGVkID8KLSAgICAgICAgICAgIFNRTElURV9PSyA6IFNRTElURV9J
T0VSUl9ERUxFVEUpOworICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6ZGF0YWJhc2VEZWxldGVG
aWxlKGZpbGVOYW1lKTsKIH0KIAogLy8gQ2hlY2sgdGhlIGV4aXN0YW5jZSBhbmQgc3RhdHVzIG9m
IHRoZSBnaXZlbiBmaWxlLgpAQCAtOTQsNyArOTMsNyBAQCBpbnQgY2hyb21pdW1EZWxldGUoc3Fs
aXRlM192ZnMqLCBjb25zdCBjCiAvLyByZXMgLSB0aGUgcmVzdWx0LgogaW50IGNocm9taXVtQWNj
ZXNzKHNxbGl0ZTNfdmZzKiwgY29uc3QgY2hhciogZmlsZU5hbWUsIGludCBmbGFnLCBpbnQqIHJl
cykKIHsKLSAgICBEV09SRCBhdHRyID0gV2ViQ29yZTo6Q2hyb21pdW1CcmlkZ2U6OmRhdGFiYXNl
R2V0RmlsZUF0dHJpYnV0ZXMoZmlsZU5hbWUpOworICAgIERXT1JEIGF0dHIgPSBDaHJvbWl1bUJy
aWRnZTo6ZGF0YWJhc2VHZXRGaWxlQXR0cmlidXRlcyhmaWxlTmFtZSk7CiAgICAgc3dpdGNoIChm
bGFnKSB7CiAgICAgY2FzZSBTUUxJVEVfQUNDRVNTX1JFQUQ6CiAgICAgY2FzZSBTUUxJVEVfQUND
RVNTX0VYSVNUUzoK
</data>
<flag name="review"
          id="19639"
          type_id="1"
          status="-"
          setter="dglazkov"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38747</attachid>
            <date>2009-08-28 12:56:59 -0700</date>
            <delta_ts>2009-08-28 14:44:46 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>17733</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0Nzc5NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjEgQEAKKzIwMDktMDgtMjYgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGRpbmcgQ2hyb21pdW0ncyBWRlMgZm9yIExpbnV4IGFuZCBNYWMuCisKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4NzUwCisKKyAgICAgICAgKiBX
ZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1CcmlkZ2Uu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvY2hyb21pdW0vU1FMaXRlRmlsZVN5c3RlbUNocm9t
aXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZUZpbGVTeXN0ZW06Om9wZW5EYXRhYmFz
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZp
bGUpOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVtQ2hy
b21pdW1MaW51eC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vc3FsL2Nocm9taXVt
L1NRTGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bU1hYy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxh
dGZvcm0vc3FsL2Nocm9taXVtL1NRTGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bVBvc2l4LmNwcDogQWRk
ZWQuCisgICAgICAgICogcGxhdGZvcm0vc3FsL2Nocm9taXVtL1NRTGl0ZUZpbGVTeXN0ZW1DaHJv
bWl1bVdpbi5jcHA6CisKIDIwMDktMDgtMjYgIERhdmlkIExldmluICA8bGV2aW5AY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4KSW5kZXg6IFdlYkNvcmUv
V2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lv
biA0Nzc4OCkKKysrIFdlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0yMzg1
LDggKzIzODUsNyBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL3NxbC9TUUxpdGVUcmFuc2FjdGlv
bi5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL3NxbC9TUUxpdGVUcmFuc2FjdGlvbi5oJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9zcWwvY2hyb21pdW0vU1FMaXRlRmlsZVN5c3RlbUNocm9t
aXVtLmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vc3FsL2Nocm9taXVtL1NRTGl0ZUZpbGVT
eXN0ZW1DaHJvbWl1bUxpbnV4LmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vc3FsL2Nocm9t
aXVtL1NRTGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bU1hYy5jcHAnLAorICAgICAgICAgICAgJ3BsYXRm
b3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVtQ2hyb21pdW1Qb3NpeC5jcHAnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVtQ2hyb21pdW1X
aW4uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9zeW1iaWFuL0Zsb2F0UG9pbnRTeW1iaWFu
LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vc3ltYmlhbi9GbG9hdFJlY3RTeW1iaWFuLmNw
cCcsCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtQnJpZGdlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bUJyaWRnZS5oCShy
ZXZpc2lvbiA0Nzc4OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1Ccmlk
Z2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDEyICsxMDMsMTYgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAgICAgICAgIC8vIEZvcm1zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgIHN0YXRpYyB2b2lkIG5vdGlm
eUZvcm1TdGF0ZUNoYW5nZWQoY29uc3QgRG9jdW1lbnQqKTsKLSAgICAgICAgCisKICAgICAgICAg
Ly8gSFRNTDUgREIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KICNpZiBFTkFCTEUoREFUQUJBU0UpCi0gICAgICAgIHN0YXRpYyBQbGF0
Zm9ybUZpbGVIYW5kbGUgZGF0YWJhc2VPcGVuRmlsZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBp
bnQgZGVzaXJlZEZsYWdzKTsKLSAgICAgICAgc3RhdGljIGJvb2wgZGF0YWJhc2VEZWxldGVGaWxl
KGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpOworICAgICAgICAvLyBSZXR1cm5zIGEgaGFuZGxlIHRv
IHRoZSBEQiBmaWxlIGFuZCBvb3B0aW9uYWxseSBhIGhhbmRsZSB0byBpdHMgY29udGFpbmluZyBk
aXJlY3RvcnkKKyAgICAgICAgc3RhdGljIFBsYXRmb3JtRmlsZUhhbmRsZSBkYXRhYmFzZU9wZW5G
aWxlKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGludCBkZXNpcmVkRmxhZ3MsIFBsYXRmb3JtRmls
ZUhhbmRsZSogZGlySGFuZGxlID0gMCk7CisgICAgICAgIC8vIFJldHVybnMgYSBTUUxpdGUgY29k
ZSAoU1FMSVRFX09LID0gMCwgb24gc3VjY2VzcykKKyAgICAgICAgc3RhdGljIGludCBkYXRhYmFz
ZURlbGV0ZUZpbGUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgYm9vbCBzeW5jRGlyID0gZmFsc2Up
OworICAgICAgICAvLyBSZXR1cm5zIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBEQiBmaWxlCiAgICAg
ICAgIHN0YXRpYyBsb25nIGRhdGFiYXNlR2V0RmlsZUF0dHJpYnV0ZXMoY29uc3QgU3RyaW5nJiBm
aWxlTmFtZSk7CisgICAgICAgIC8vIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIERCIGZpbGUKICAg
ICAgICAgc3RhdGljIGxvbmcgbG9uZyBkYXRhYmFzZUdldEZpbGVTaXplKGNvbnN0IFN0cmluZyYg
ZmlsZU5hbWUpOwogI2VuZGlmCiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vc3FsL2Nocm9taXVt
L1NRTGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9zcWwvY2hyb21pdW0vU1FMaXRlRmlsZVN5c3RlbUNocm9taXVtLmNwcAkocmV2aXNpb24g
NDc3ODgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVt
Q2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSwxMCArNTUsMTAgQEAgaW50IFNRTGl0
ZUZpbGVTeXN0ZW06Om9wZW5EYXRhYmFzZShjb25zdAogICAgICAgICByZXR1cm4gc3FsaXRlM19v
cGVuMTYocGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCBkYXRhYmFzZSk7CiAg
ICAgfQogCi0gICAgLy8gb3BlbiBkYXRhYmFzZXMgdXNpbmcgQ2hyb21pdW0ncyBWRlMKKyAgICAv
LyBvcGVuIGRhdGFiYXNlcyB1c2luZyB0aGUgZGVmYXVsdCBWRlMKKyAgICAvLyBpbiByZW5kZXJl
cnMsIGl0IHNob3VsZCBiZSBDaHJvbWl1bSdzIFZGUzsgaW4gdGhlIGJyb3dzZXIgcHJvY2VzcyBp
dCBzaG91bGQgYmUgU1FMaXRlJ3MgZGVmYXVsdCBWRlMKICAgICByZXR1cm4gc3FsaXRlM19vcGVu
X3YyKGZpbGVOYW1lLnV0ZjgoKS5kYXRhKCksIGRhdGFiYXNlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgU1FMSVRFX09QRU5fUkVBRFdSSVRFIHwgU1FMSVRFX09QRU5fQ1JFQVRFIHwgU1FM
SVRFX09QRU5fRlVMTE1VVEVYLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgImNocm9taXVt
X3ZmcyIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgU1FMSVRFX09QRU5fUkVBRFdSSVRF
IHwgU1FMSVRFX09QRU5fQ1JFQVRFIHwgU1FMSVRFX09QRU5fRlVMTE1VVEVYLCAwKTsKIH0KIAog
U3RyaW5nIFNRTGl0ZUZpbGVTeXN0ZW06OmdldEZpbGVOYW1lRm9yTmV3RGF0YWJhc2UoCkBAIC05
OSw5ICs5OSw3IEBAIGJvb2wgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRW1wdHlEYXRhYmEKIAog
Ym9vbCBTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZpbGUoY29uc3QgU3RyaW5nJiBm
aWxlTmFtZSkKIHsKLSAgICAvLyByZXR1cm4gdHJ1ZSBpZiBhbmQgb25seSBpZiB0aGUgZXJyb3Ig
Y29kZSByZXR1cm5lZCBieQotICAgIC8vIENocm9taXVtQnJpZGdlOjpkZWxldGVEYXRhYmFzZSgp
IGlzIDAKLSAgICByZXR1cm4gKCFDaHJvbWl1bUJyaWRnZTo6ZGF0YWJhc2VEZWxldGVGaWxlKGZp
bGVOYW1lKSk7CisgICAgcmV0dXJuIChDaHJvbWl1bUJyaWRnZTo6ZGF0YWJhc2VEZWxldGVGaWxl
KGZpbGVOYW1lKSA9PSBTUUxJVEVfT0spOwogfQogCiBsb25nIGxvbmcgU1FMaXRlRmlsZVN5c3Rl
bTo6Z2V0RGF0YWJhc2VGaWxlU2l6ZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKQpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9zcWwvY2hyb21pdW0vU1FMaXRlRmlsZVN5c3RlbUNocm9taXVtTGludXgu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vc3FsL2Nocm9taXVtL1NRTGl0ZUZp
bGVTeXN0ZW1DaHJvbWl1bUxpbnV4LmNwcAkocmV2aXNpb24gNDc3ODgpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVtQ2hyb21pdW1MaW51eC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
Ci0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJTUUxpdGVGaWxlU3lzdGVtLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBTUUxp
dGVGaWxlU3lzdGVtOjpyZWdpc3RlclNRTGl0ZVZGUygpCi17Ci0gICAgLy8gc3R1YiBmb3IgcmVn
aXN0ZXJpbmcgQ2hyb21pdW0ncyBTUUxpdGUgVkZTIGZvciBMaW51eAotICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVtQ2hyb21pdW1NYWMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vc3FsL2Nocm9taXVtL1NRTGl0ZUZpbGVTeXN0ZW1D
aHJvbWl1bU1hYy5jcHAJKHJldmlzaW9uIDQ3Nzg4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9zcWwv
Y2hyb21pdW0vU1FMaXRlRmlsZVN5c3RlbUNocm9taXVtTWFjLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw0MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0g
KiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0g
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAot
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNRTGl0ZUZpbGVT
eXN0ZW0uaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIFNRTGl0ZUZpbGVTeXN0ZW06
OnJlZ2lzdGVyU1FMaXRlVkZTKCkKLXsKLSAgICAvLyBzdHViIGZvciByZWdpc3RlcmluZyBDaHJv
bWl1bSdzIFNRTGl0ZSBWRlMgZm9yIE1hYwotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3NxbC9jaHJv
bWl1bS9TUUxpdGVGaWxlU3lzdGVtQ2hyb21pdW1Qb3NpeC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9zcWwvY2hyb21pdW0vU1FMaXRlRmlsZVN5c3RlbUNocm9taXVtUG9zaXgu
Y3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9zcWwvY2hyb21pdW0vU1FMaXRl
RmlsZVN5c3RlbUNocm9taXVtUG9zaXguY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE5MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTUUxpdGVGaWxlU3lzdGVtLmgiCisKKyNp
bmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgorI2luY2x1ZGUgPHNxbGl0ZTMuaD4KKworI2luY2x1
ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCisvLyBEZWZpbmVkIGluIENocm9taXVtJ3MgY29k
ZWJhc2UgaW4gdGhpcmRfcGFydHkvc3FsaXRlL3NyYy9vc191bml4LmMKK2V4dGVybiAiQyIgewor
dm9pZCBpbml0VW5peEZpbGUoc3FsaXRlM19maWxlKiBmaWxlKTsKK2ludCBmaWxsSW5Vbml4Rmls
ZShzcWxpdGUzX3ZmcyogdmZzLCBpbnQgZmQsIGludCBkaXJmZCwgc3FsaXRlM19maWxlKiBmaWxl
LCBjb25zdCBjaGFyKiBmaWxlTmFtZSwgaW50IG5vTG9jayk7Cit9CisKKy8vIENocm9taXVtJ3Mg
UG9zaXggaW1wbGVtZW50YXRpb24gb2YgU1FMaXRlIFZGUworbmFtZXNwYWNlIHsKKworLy8gT3Bl
bnMgYSBmaWxlLgorLy8KKy8vIHZmcyAtIHBvaW50ZXIgdG8gdGhlIHNxbGl0ZTNfdmZzIG9iamVj
dC4KKy8vIGZpbGVOYW1lIC0gdGhlIG5hbWUgb2YgdGhlIGZpbGUuCisvLyBpZCAtIHRoZSBzdHJ1
Y3R1cmUgdGhhdCB3aWxsIG1hbmlwdWxhdGUgdGhlIG5ld2x5IG9wZW5lZCBmaWxlLgorLy8gZGVz
aXJlZEZsYWdzIC0gdGhlIGRlc2lyZWQgb3BlbiBtb2RlIGZsYWdzLgorLy8gdXNlZEZsYWdzIC0g
dGhlIGFjdHVhbCBvcGVuIG1vZGUgZmxhZ3MgdGhhdCB3ZXJlIHVzZWQuCitpbnQgY2hyb21pdW1P
cGVuKHNxbGl0ZTNfdmZzKiB2ZnMsIGNvbnN0IGNoYXIqIGZpbGVOYW1lLAorICAgICAgICAgICAg
ICAgICBzcWxpdGUzX2ZpbGUqIGlkLCBpbnQgZGVzaXJlZEZsYWdzLCBpbnQqIHVzZWRGbGFncykK
K3sKKyAgICBpbml0VW5peEZpbGUoaWQpOworICAgIGludCBkaXJmZCA9IC0xOworICAgIGludCBm
ZCA9IENocm9taXVtQnJpZGdlOjpkYXRhYmFzZU9wZW5GaWxlKGZpbGVOYW1lLCBkZXNpcmVkRmxh
Z3MsICZkaXJmZCk7CisgICAgaWYgKGZkIDwgMCkgeworICAgICAgICBpZiAoZGVzaXJlZEZsYWdz
ICYgU1FMSVRFX09QRU5fUkVBRFdSSVRFKSB7CisgICAgICAgICAgICBpbnQgbmV3RmxhZ3MgPSAo
ZGVzaXJlZEZsYWdzICYgfihTUUxJVEVfT1BFTl9SRUFEV1JJVEUgfCBTUUxJVEVfT1BFTl9DUkVB
VEUpKSB8IFNRTElURV9PUEVOX1JFQURPTkxZOworICAgICAgICAgICAgcmV0dXJuIGNocm9taXVt
T3Blbih2ZnMsIGZpbGVOYW1lLCBpZCwgbmV3RmxhZ3MsIHVzZWRGbGFncyk7CisgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgcmV0dXJuIFNRTElURV9DQU5UT1BFTjsKKyAgICB9CisgICAgaWYg
KHVzZWRGbGFncykKKyAgICAgICAgKnVzZWRGbGFncyA9IGRlc2lyZWRGbGFnczsKKworICAgIGZj
bnRsKGZkLCBGX1NFVEZELCBmY250bChmZCwgRl9HRVRGRCkgfCBGRF9DTE9FWEVDKTsKKyAgICBp
ZiAoZGlyZmQgPj0gMCkKKyAgICAgICAgZmNudGwoZGlyZmQsIEZfU0VURkQsIGZjbnRsKGZkLCBG
X0dFVEZEKSB8IEZEX0NMT0VYRUMpOworCisgICAgLy8gVGhlIG1hc2sgMHgwMDAwN0YwMCBnaXZl
cyB1cyB0aGUgNyBiaXRzIHRoYXQgZGV0ZXJtaW5lIHRoZSB0eXBlIG9mIHRoZSBmaWxlIFNRTGl0
ZSBpcyB0cnlpbmcgdG8gb3Blbi4KKyAgICBpbnQgZmlsZVR5cGUgPSBkZXNpcmVkRmxhZ3MgJiAw
eDAwMDA3RjAwOworICAgIGludCBub0xvY2sgPSAoZmlsZVR5cGUgIT0gU1FMSVRFX09QRU5fTUFJ
Tl9EQik7CisgICAgcmV0dXJuIGZpbGxJblVuaXhGaWxlKHZmcywgZmQsIGRpcmZkLCBpZCwgZmls
ZU5hbWUsIG5vTG9jayk7Cit9CisKKy8vIERlbGV0ZXMgdGhlIGdpdmVuIGZpbGUuCisvLworLy8g
dmZzIC0gcG9pbnRlciB0byB0aGUgc3FsaXRlM192ZnMgb2JqZWN0LgorLy8gZmlsZU5hbWUgLSB0
aGUgbmFtZSBvZiB0aGUgZmlsZS4KKy8vIHN5bmNEaXIgLSBkZXRlcm1pbmVzIGlmIHRoZSBkaXJl
Y3RvcnkgdG8gd2hpY2ggdGhpcyBmaWxlIGJlbG9uZ3MKKy8vICAgICAgICAgICBzaG91bGQgYmUg
c3luY2hlZCBhZnRlciB0aGUgZmlsZSBpcyBkZWxldGVkLgoraW50IGNocm9taXVtRGVsZXRlKHNx
bGl0ZTNfdmZzKiwgY29uc3QgY2hhciogZmlsZU5hbWUsIGludCBzeW5jRGlyKQoreworICAgIHJl
dHVybiBDaHJvbWl1bUJyaWRnZTo6ZGF0YWJhc2VEZWxldGVGaWxlKGZpbGVOYW1lLCBzeW5jRGly
KTsKK30KKworLy8gQ2hlY2sgdGhlIGV4aXN0YW5jZSBhbmQgc3RhdHVzIG9mIHRoZSBnaXZlbiBm
aWxlLgorLy8KKy8vIHZmcyAtIHBvaW50ZXIgdG8gdGhlIHNxbGl0ZTNfdmZzIG9iamVjdC4KKy8v
IGZpbGVOYW1lIC0gdGhlIG5hbWUgb2YgdGhlIGZpbGUuCisvLyBmbGFnIC0gdGhlIHR5cGUgb2Yg
dGVzdCB0byBtYWtlIG9uIHRoaXMgZmlsZS4KKy8vIHJlcyAtIHRoZSByZXN1bHQuCitpbnQgY2hy
b21pdW1BY2Nlc3Moc3FsaXRlM192ZnMqLCBjb25zdCBjaGFyKiBmaWxlTmFtZSwgaW50IGZsYWcs
IGludCogcmVzKQoreworICAgIGludCBhdHRyID0gc3RhdGljX2Nhc3Q8aW50PihDaHJvbWl1bUJy
aWRnZTo6ZGF0YWJhc2VHZXRGaWxlQXR0cmlidXRlcyhmaWxlTmFtZSkpOworICAgIGlmIChhdHRy
IDwgMCkgeworICAgICAgICAqcmVzID0gMDsKKyAgICAgICAgcmV0dXJuIFNRTElURV9PSzsKKyAg
ICB9CisKKyAgICBzd2l0Y2ggKGZsYWcpIHsKKyAgICBjYXNlIFNRTElURV9BQ0NFU1NfRVhJU1RT
OgorICAgICAgICAqcmVzID0gMTsgICAvLyBpZiB0aGUgZmlsZSBkb2Vzbid0IGV4aXN0LCBhdHRy
IDwgMAorICAgICAgICBicmVhazsKKyAgICBjYXNlIFNRTElURV9BQ0NFU1NfUkVBRFdSSVRFOgor
ICAgICAgICAqcmVzID0gKGF0dHIgJiBXX09LKSAmJiAoYXR0ciAmIFJfT0spOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFNRTElURV9BQ0NFU1NfUkVBRDoKKyAgICAgICAgKnJlcyA9IChhdHRy
ICYgUl9PSyk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBT
UUxJVEVfRVJST1I7CisgICAgfQorCisgICAgcmV0dXJuIFNRTElURV9PSzsKK30KKworLy8gVHVy
bnMgYSByZWxhdGl2ZSBwYXRobmFtZSBpbnRvIGEgZnVsbCBwYXRobmFtZS4KKy8vCisvLyB2ZnMg
LSBwb2ludGVyIHRvIHRoZSBzcWxpdGUzX3ZmcyBvYmplY3QuCisvLyByZWxhdGl2ZVBhdGggLSB0
aGUgcmVsYXRpdmUgcGF0aC4KKy8vIGJ1ZlNpemUgLSB0aGUgc2l6ZSBvZiB0aGUgb3V0cHV0IGJ1
ZmZlciBpbiBieXRlcy4KKy8vIGFic29sdXRlUGF0aCAtIHRoZSBvdXRwdXQgYnVmZmVyIHdoZXJl
IHRoZSBhYnNvbHV0ZSBwYXRoIHdpbGwgYmUgc3RvcmVkLgoraW50IGNocm9taXVtRnVsbFBhdGhu
YW1lKHNxbGl0ZTNfdmZzKiB2ZnMsIGNvbnN0IGNoYXIqIHJlbGF0aXZlUGF0aCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQsIGNoYXIqIGFic29sdXRlUGF0aCkKK3sKKyAgICAvLyBUaGUg
cmVuZGVyZXIgcHJvY2VzcyBkb2Vzbid0IG5lZWQgdG8ga25vdyB0aGUgYWJzb2x1dGUgcGF0aCBv
ZiB0aGUgZmlsZQorICAgIHNxbGl0ZTNfc25wcmludGYodmZzLT5teFBhdGhuYW1lLCBhYnNvbHV0
ZVBhdGgsICIlcyIsIHJlbGF0aXZlUGF0aCk7CisgICAgcmV0dXJuIFNRTElURV9PSzsKK30KKwor
I2lmbmRlZiBTUUxJVEVfT01JVF9MT0FEX0VYVEVOU0lPTgorLy8gUmV0dXJucyBOVUxMLCB0aHVz
IGRpc2FsbG93aW5nIGxvYWRpbmcgbGlicmFyaWVzIGluIHRoZSByZW5kZXJlciBwcm9jZXNzLgor
Ly8KKy8vIHZmcyAtIHBvaW50ZXIgdG8gdGhlIHNxbGl0ZTNfdmZzIG9iamVjdC4KKy8vIGZpbGVO
YW1lIC0gdGhlIG5hbWUgb2YgdGhlIHNoYXJlZCBsaWJyYXJ5IGZpbGUuCit2b2lkKiBjaHJvbWl1
bURsT3BlbihzcWxpdGUzX3ZmcyosIGNvbnN0IGNoYXIqKQoreworICAgIHJldHVybiAwOworfQor
I2Vsc2UKKyNkZWZpbmUgY2hyb21pdW1EbE9wZW4gMAorI2VuZGlmIC8vIFNRTElURV9PTUlUX0xP
QURfRVhURU5TSU9OCisKK30gLy8gbmFtZXNwYWNlCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
dm9pZCBTUUxpdGVGaWxlU3lzdGVtOjpyZWdpc3RlclNRTGl0ZVZGUygpCit7CisgICAgLy8gRklY
TUU6IE1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IHVuaW50ZW5kZWQgY29uc2VxdWVuY2VzIHdo
ZW4gVkZTIGNvZGUgaXMgY2FsbGVkIGluIHRoZSBicm93c2VyIHByb2Nlc3MuCisgICAgaWYgKCFD
aHJvbWl1bUJyaWRnZTo6c2FuZGJveEVuYWJsZWQoKSkgeworICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNxbGl0ZTNfdmZzKiB1bml4
X3ZmcyA9IHNxbGl0ZTNfdmZzX2ZpbmQoInVuaXgiKTsKKyAgICBzdGF0aWMgc3FsaXRlM192ZnMg
Y2hyb21pdW1fdmZzID0geworICAgICAgICAxLAorICAgICAgICB1bml4X3Zmcy0+c3pPc0ZpbGUs
CisgICAgICAgIHVuaXhfdmZzLT5teFBhdGhuYW1lLAorICAgICAgICAwLAorICAgICAgICAiY2hy
b21pdW1fdmZzIiwKKyAgICAgICAgMCwKKyAgICAgICAgY2hyb21pdW1PcGVuLAorICAgICAgICBj
aHJvbWl1bURlbGV0ZSwKKyAgICAgICAgY2hyb21pdW1BY2Nlc3MsCisgICAgICAgIGNocm9taXVt
RnVsbFBhdGhuYW1lLAorICAgICAgICBjaHJvbWl1bURsT3BlbiwKKyAgICAgICAgdW5peF92ZnMt
PnhEbEVycm9yLAorICAgICAgICB1bml4X3Zmcy0+eERsU3ltLAorICAgICAgICB1bml4X3Zmcy0+
eERsQ2xvc2UsCisgICAgICAgIHVuaXhfdmZzLT54UmFuZG9tbmVzcywKKyAgICAgICAgdW5peF92
ZnMtPnhTbGVlcCwKKyAgICAgICAgdW5peF92ZnMtPnhDdXJyZW50VGltZSwKKyAgICAgICAgdW5p
eF92ZnMtPnhHZXRMYXN0RXJyb3IKKyAgICB9OworICAgIHNxbGl0ZTNfdmZzX3JlZ2lzdGVyKCZj
aHJvbWl1bV92ZnMsIDEpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVtQ2hyb21pdW1XaW4uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vc3FsL2Nocm9taXVtL1NRTGl0ZUZpbGVT
eXN0ZW1DaHJvbWl1bVdpbi5jcHAJKHJldmlzaW9uIDQ3Nzg4KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9zcWwvY2hyb21pdW0vU1FMaXRlRmlsZVN5c3RlbUNocm9taXVtV2luLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzUsNiArMzUsOCBAQAogI2luY2x1ZGUgPHNxbGl0ZTMuaD4KICNpbmNsdWRlIDx3
aW5kb3dzLmg+CiAKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCiAvLyBEZWZpbmVkIGluIENo
cm9taXVtJ3MgY29kZWJhc2UgaW4gdGhpcmRfcGFydHkvc3FsaXRlL3NyYy9vc193aW4uYwogZXh0
ZXJuICJDIiB7CiBpbnQgY2hyb21pdW1fc3FsaXRlM19pbml0aWFsaXplX3dpbl9zcWxpdGUzX2Zp
bGUoc3FsaXRlM19maWxlKiBmaWxlLCBIQU5ETEUgaGFuZGxlKTsKQEAgLTUzLDcgKzU1LDcgQEAg
bmFtZXNwYWNlIHsKIGludCBjaHJvbWl1bU9wZW4oc3FsaXRlM192ZnMqLCBjb25zdCBjaGFyKiBm
aWxlTmFtZSwKICAgICAgICAgICAgICAgICAgc3FsaXRlM19maWxlKiBpZCwgaW50IGRlc2lyZWRG
bGFncywgaW50KiB1c2VkRmxhZ3MpCiB7Ci0gICAgSEFORExFIGggPSBXZWJDb3JlOjpDaHJvbWl1
bUJyaWRnZTo6ZGF0YWJhc2VPcGVuRmlsZShmaWxlTmFtZSwgZGVzaXJlZEZsYWdzKTsKKyAgICBI
QU5ETEUgaCA9IENocm9taXVtQnJpZGdlOjpkYXRhYmFzZU9wZW5GaWxlKGZpbGVOYW1lLCBkZXNp
cmVkRmxhZ3MpOwogICAgIGlmIChoID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7CiAgICAgICAg
IGlmIChkZXNpcmVkRmxhZ3MgJiBTUUxJVEVfT1BFTl9SRUFEV1JJVEUpIHsKICAgICAgICAgICAg
IGludCBuZXdGbGFncyA9IChkZXNpcmVkRmxhZ3MgfCBTUUxJVEVfT1BFTl9SRUFET05MWSkgJiB+
U1FMSVRFX09QRU5fUkVBRFdSSVRFOwpAQCAtODAsMTAgKzgyLDcgQEAgaW50IGNocm9taXVtT3Bl
bihzcWxpdGUzX3ZmcyosIGNvbnN0IGNoYQogLy8gICAgICAgICAgIHNob3VsZCBiZSBzeW5jaGVk
IGFmdGVyIHRoZSBmaWxlIGlzIGRlbGV0ZWQuCiBpbnQgY2hyb21pdW1EZWxldGUoc3FsaXRlM192
ZnMqLCBjb25zdCBjaGFyKiBmaWxlTmFtZSwgaW50KQogewotICAgIGJvb2wgZGVsZXRlZCA9IFdl
YkNvcmU6OkNocm9taXVtQnJpZGdlOjpkYXRhYmFzZURlbGV0ZUZpbGUoZmlsZU5hbWUpOwotICAg
IERXT1JEIHJjID0gV2ViQ29yZTo6Q2hyb21pdW1CcmlkZ2U6OmRhdGFiYXNlR2V0RmlsZUF0dHJp
YnV0ZXMoZmlsZU5hbWUpOwotICAgIHJldHVybiAoKHJjID09IElOVkFMSURfRklMRV9BVFRSSUJV
VEVTKSAmJiBkZWxldGVkID8KLSAgICAgICAgICAgIFNRTElURV9PSyA6IFNRTElURV9JT0VSUl9E
RUxFVEUpOworICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6ZGF0YWJhc2VEZWxldGVGaWxlKGZp
bGVOYW1lKTsKIH0KIAogLy8gQ2hlY2sgdGhlIGV4aXN0YW5jZSBhbmQgc3RhdHVzIG9mIHRoZSBn
aXZlbiBmaWxlLgpAQCAtOTQsNyArOTMsNyBAQCBpbnQgY2hyb21pdW1EZWxldGUoc3FsaXRlM192
ZnMqLCBjb25zdCBjCiAvLyByZXMgLSB0aGUgcmVzdWx0LgogaW50IGNocm9taXVtQWNjZXNzKHNx
bGl0ZTNfdmZzKiwgY29uc3QgY2hhciogZmlsZU5hbWUsIGludCBmbGFnLCBpbnQqIHJlcykKIHsK
LSAgICBEV09SRCBhdHRyID0gV2ViQ29yZTo6Q2hyb21pdW1CcmlkZ2U6OmRhdGFiYXNlR2V0Rmls
ZUF0dHJpYnV0ZXMoZmlsZU5hbWUpOworICAgIERXT1JEIGF0dHIgPSBDaHJvbWl1bUJyaWRnZTo6
ZGF0YWJhc2VHZXRGaWxlQXR0cmlidXRlcyhmaWxlTmFtZSk7CiAgICAgc3dpdGNoIChmbGFnKSB7
CiAgICAgY2FzZSBTUUxJVEVfQUNDRVNTX1JFQUQ6CiAgICAgY2FzZSBTUUxJVEVfQUNDRVNTX0VY
SVNUUzoK
</data>

          </attachment>
      

    </bug>

</bugzilla>