<?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>21705</bug_id>
          
          <creation_ts>2008-10-17 04:15:35 -0700</creation_ts>
          <short_desc>Implement Web Workers client-side API</short_desc>
          <delta_ts>2008-10-20 02:24:59 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>95725</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-10-17 04:15:35 -0700</bug_when>
    <thetext>I&apos;m going to submit a patch that implements some form of Worker/DedicatedWorker interface.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95726</commentid>
    <comment_count>1</comment_count>
      <attachid>24457</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-10-17 04:25:06 -0700</bug_when>
    <thetext>Created attachment 24457
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95851</commentid>
    <comment_count>2</comment_count>
      <attachid>24457</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-10-18 01:38:44 -0700</bug_when>
    <thetext>Comment on attachment 24457
proposed patch

In constructDedicatedWorker toString() may throw so you should probably exception check there

In DedicatedWorker::DedicatedWorker shouldn&apos;t &apos;if (!document-&gt;securityOrigin()-&gt;canAccess(SecurityOrigin::createFromString(url).get())) &apos; be referencing m_scriptURL ?

Is there anything here that can be tested yet?  Perhaps security tests to make sure we can&apos;t create a DedicatedWorker for an unsafe url, also

new DedicatedWorker({toString:function(){throw &quot;Woo!!!!11!!one!&quot;;}})

and
var foo = {toString:function(){new DedicatedWorker(foo);}}
new DedicatedWorker(foo)

Although i think that should magically be limited to ~500 levels of recursion it&apos;s worth testing -- I wonder if we should however actually just require that we be given a real string -- eg. not a generic object.

other than these minor questions, r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95980</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-10-20 02:24:59 -0700</bug_when>
    <thetext>Committed revision 37715.

(In reply to comment #2)
&gt; In constructDedicatedWorker toString() may throw so you should probably
&gt; exception check there

Not sure - looks like we almost never check for toString() exceptions in bindings - and the behavior in this case is not too horrible anyway (the string will be empty, so the worker will try to use calling document URL for its script, which won&apos;t parse as JS).

&gt; In DedicatedWorker::DedicatedWorker shouldn&apos;t &apos;if
&gt; (!document-&gt;securityOrigin()-&gt;canAccess(SecurityOrigin::createFromString(url).get()))
&gt; &apos; be referencing m_scriptURL ?

Fixed.

&gt; Is there anything here that can be tested yet?

The functionality is currently disabled, so tests cannot be landed - but I&apos;ll make local tests for your suggestions.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24457</attachid>
            <date>2008-10-17 04:25:06 -0700</date>
            <delta_ts>2008-10-18 01:38:44 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>WorkerThreads.txt</filename>
            <type>text/plain</type>
            <size>35943</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNzY1MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzkgQEAKKzIwMDgtMTAtMTcgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTcwNQorICAgICAgICBJ
bXBsZW1lbnQgV2ViIFdvcmtlcnMgY2xpZW50LXNpZGUgQVBJCisKKyAgICAgICAgVGhlIGltcGxl
bWVudGF0aW9uIGlzIGV4cGVyaW1lbnRhbCwgYW5kIGRpc2FibGVkIGJ5IGRlZmF1bHQuIEl0IGRv
ZXNuJ3QgcXVpdGUgbWF0Y2ggdGhlCisgICAgICAgIHB1Ymxpc2hlZCBkcmFmdCwgYmVpbmcgaW5m
bHVlbmNlZCBieSBmdXJ0aGVyIFdIQVRXRyBkaXNjdXNzaW9ucy4KKworICAgICAgICBUaGlzIG9u
bHkgaW1wbGVtZW50cyB0aGUgY2xpZW50LXNpZGUgQVBJLCBhbmQgZG9lcyBub3QgYWN0dWFsbHkg
Y3JlYXRlIGFueSB0aHJlYWRzIG9yCisgICAgICAgIGdsb2JhbCBjb250ZXh0cyB5ZXQuCisKKyAg
ICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOiBBZGRlZCBEZWRpY2F0ZWRXb3JrZXIuIFNoYXJl
ZFdvcmtlciBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LCBhcyBJJ20KKyAgICAgICAgc3RpbGwgbm90
IHN1cmUgaWYgaGF2aW5nIHNlcGFyYXRlIGNsYXNzZXMgZm9yIHRoZXNlIGhlbHBzIGF0IGFsbC4K
KworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogQWRkZWQgbmV3
IGZpbGVzLgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcDoKKyAg
ICAgICAgKGpzRE9NV2luZG93QmFzZVdvcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdp
bmRvd0Jhc2U6OnB1dCk6CisgICAgICAgIChzZXRKU0RPTVdpbmRvd0Jhc2VXb3JrZXIpOgorICAg
ICAgICBBZGRlZCB3aW5kb3cuV29ya2VyIGNvbnN0cnVjdG9yLiBNb3ZlZCBKU1hTTFRQcm9jZXNz
b3JDb25zdHJ1Y3Rvci5oIGluY2x1ZGUgb3V0IG9mIGlmZGVmCisgICAgICAgIHRvIG1hdGNoIHBy
ZXZhaWxpbmcgc3R5bGUuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RlZGljYXRlZFdvcmtl
ckNvbnN0cnVjdG9yLmNwcDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNEZWRpY2F0
ZWRXb3JrZXJDb25zdHJ1Y3Rvci5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0Rl
ZGljYXRlZFdvcmtlckN1c3RvbS5jcHA6IEFkZGVkLgorICAgICAgICBUaGUgaW1wbGVtZW50YXRp
b24gb2YgZXZlbnQgbGlzdGVuZXJzIGFyZSBsZWZ0IGN1c3RvbSBpbnRlbnRpb25hbGx5LCBmb3Ig
ZWFzaWVyIGltcGxlbWVudGF0aW9uCisgICAgICAgIG9mIGxpc3RlbmVycyB0aGF0IGFyZSBub3Qg
dGllZCB0byBhbnkgRG9jdW1lbnQgaW4gdGhlIGZ1dHVyZS4KKworICAgICAgICAqIGRvbS9EZWRp
Y2F0ZWRXb3JrZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBkb20vRGVkaWNhdGVkV29ya2VyLmg6
IEFkZGVkLgorICAgICAgICAqIGRvbS9EZWRpY2F0ZWRXb3JrZXIuaWRsOiBBZGRlZC4KKyAgICAg
ICAgQWRkZWQgYW4gaW1wbGVtZW50YXRpb24gdGhhdCBjYW4gb25seSBsb2FkIHJlcXVlc3RlZCBz
Y3JpcHRzIGZvciBub3cuCisKIDIwMDgtMTAtMTcgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3
ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCkluZGV4OiBXZWJD
b3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9EZXJpdmVkU291
cmNlcy5tYWtlCShyZXZpc2lvbiAzNzY0NykKKysrIFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFr
ZQkod29ya2luZyBjb3B5KQpAQCAtNzcsNiArNzcsNyBAQCBET01fQ0xBU1NFUyA9IFwKICAgICBE
T01QYXJzZXIgXAogICAgIERPTVNlbGVjdGlvbiBcCiAgICAgRE9NV2luZG93IFwKKyAgICBEZWRp
Y2F0ZWRXb3JrZXIgXAogICAgIERhdGFiYXNlIFwKICAgICBEb2N1bWVudCBcCiAgICAgRG9jdW1l
bnRGcmFnbWVudCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gMzc2NDkpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDE1NSw2ICs0MTU1LDEzIEBACiAJCUUxQkU1
MTJFMENGNkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQkU1MTJDMENGNkM1MTIwMDJFQTk1OSAv
KiBYU0xUVW5pY29kZVNvcnQuaCAqLzsgfTsKIAkJRTFDNERFNjkwRUE3NUMxRTAwMjNDQ0Q2IC8q
IEFjdGl2ZURPTU9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTFDNERFNjgwRUE3NUMxRTAwMjNDQ0Q2IC8qIEFjdGl2ZURPTU9iamVjdC5oICov
OyB9OwogCQlFMUM0REU2RTBFQTc1QzY1MDAyM0NDRDYgLyogQWN0aXZlRE9NT2JqZWN0LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQzRERTZEMEVB
NzVDNjUwMDIzQ0NENiAvKiBBY3RpdmVET01PYmplY3QuY3BwICovOyB9OworCQlFMUM4QkU1RDBF
OEJEMTVBMDA2NENCN0QgLyogSlNEZWRpY2F0ZWRXb3JrZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFDOEJFNUMwRThCRDE1QTAwNjRDQjdEIC8q
IEpTRGVkaWNhdGVkV29ya2VyLmNwcCAqLzsgfTsKKwkJRTFDQTVDQTAwRThDRDczQjAwRThFRjkw
IC8qIERlZGljYXRlZFdvcmtlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTFDQTVDOUYwRThDRDczQjAwRThFRjkwIC8qIERlZGljYXRlZFdvcmtlci5o
ICovOyB9OworCQlFMUNBNUNBNTBFOENENzg1MDBFOEVGOTAgLyogRGVkaWNhdGVkV29ya2VyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQ0E1Q0E0
MEU4Q0Q3ODUwMEU4RUY5MCAvKiBEZWRpY2F0ZWRXb3JrZXIuY3BwICovOyB9OworCQlFMUNBNUNC
QzBFOENEQ0FGMDBFOEVGOTAgLyogSlNEZWRpY2F0ZWRXb3JrZXJDdXN0b20uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFDQTVDQkIwRThDRENBRjAw
RThFRjkwIC8qIEpTRGVkaWNhdGVkV29ya2VyQ3VzdG9tLmNwcCAqLzsgfTsKKwkJRTFDQTVDRDMw
RThDREU4MDAwRThFRjkwIC8qIEpTRGVkaWNhdGVkV29ya2VyQ29uc3RydWN0b3IuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQ0E1Q0QyMEU4Q0RFODAw
MEU4RUY5MCAvKiBKU0RlZGljYXRlZFdvcmtlckNvbnN0cnVjdG9yLmggKi87IH07CisJCUUxQ0E1
Q0Q2MEU4Q0RFRTkwMEU4RUY5MCAvKiBKU0RlZGljYXRlZFdvcmtlckNvbnN0cnVjdG9yLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQ0E1Q0Q1MEU4
Q0RFRTkwMEU4RUY5MCAvKiBKU0RlZGljYXRlZFdvcmtlckNvbnN0cnVjdG9yLmNwcCAqLzsgfTsK
KwkJRTFDQUE1QzYwRThCRDIzNjAwQTczRUNBIC8qIEpTRGVkaWNhdGVkV29ya2VyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUNBQTVDNTBFOEJEMjM2
MDBBNzNFQ0EgLyogSlNEZWRpY2F0ZWRXb3JrZXIuaCAqLzsgfTsKIAkJRTFFNkVFQTQwQjYyOERB
ODAwNUYyRjcwIC8qIEpTSFRNTFNlbGVjdEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFFNkVFQTMwQjYyOERBODAwNUYyRjcwIC8qIEpT
SFRNTFNlbGVjdEVsZW1lbnQuY3BwICovOyB9OwogCQlFMUU2RUVBODBCNjI4REIzMDA1RjJGNzAg
LyogSlNIVE1MU2VsZWN0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTFFNkVFQTcwQjYyOERCMzAwNUYyRjcwIC8qIEpTSFRNTFNlbGVjdEVs
ZW1lbnQuaCAqLzsgfTsKIAkJRTFFQkJCRDQwQUFDOUI4NzAwMUZFOEUyIC8qIENTU0NoYXJzZXRS
dWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUx
RUJCQkQzMEFBQzlCODcwMDFGRThFMiAvKiBDU1NDaGFyc2V0UnVsZS5jcHAgKi87IH07CkBAIC04
NzI1LDYgKzg3MzIsMTQgQEAKIAkJRTFCRTUxMkMwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmlj
b2RlU29ydC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBYU0xUVW5pY29kZVNv
cnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFDNERFNjgwRUE3NUMxRTAwMjND
Q0Q2IC8qIEFjdGl2ZURPTU9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBY3RpdmVET01PYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFDNERF
NkQwRUE3NUM2NTAwMjNDQ0Q2IC8qIEFjdGl2ZURPTU9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBY3RpdmVET01PYmplY3QuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlFMUM4QkU0NDBFOEJDQ0JCMDA2NENCN0QgLyogRGVkaWNhdGVkV29y
a2VyLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBEZWRpY2F0ZWRXb3JrZXIuaWRsOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMUM4QkU1QzBFOEJEMTVBMDA2NENCN0QgLyogSlNE
ZWRpY2F0ZWRXb3JrZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNEZWRpY2F0ZWRXb3JrZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMUNB
NUM5RjBFOENENzNCMDBFOEVGOTAgLyogRGVkaWNhdGVkV29ya2VyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IERlZGljYXRlZFdvcmtlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlFMUNBNUNBNDBFOENENzg1MDBFOEVGOTAgLyogRGVkaWNhdGVkV29ya2VyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlZGljYXRlZFdvcmtlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxQ0E1Q0JCMEU4Q0RDQUYwMEU4RUY5
MCAvKiBKU0RlZGljYXRlZFdvcmtlckN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKU0RlZGljYXRlZFdvcmtlckN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUUxQ0E1Q0QyMEU4Q0RFODAwMEU4RUY5MCAvKiBKU0RlZGljYXRlZFdv
cmtlckNvbnN0cnVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRGVk
aWNhdGVkV29ya2VyQ29uc3RydWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RTFDQTVDRDUwRThDREVFOTAwRThFRjkwIC8qIEpTRGVkaWNhdGVkV29ya2VyQ29uc3RydWN0b3Iu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNEZWRpY2F0ZWRXb3Jr
ZXJDb25zdHJ1Y3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxQ0FBNUM1
MEU4QkQyMzYwMEE3M0VDQSAvKiBKU0RlZGljYXRlZFdvcmtlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU0RlZGljYXRlZFdvcmtlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlFMUU2RUVBMzBCNjI4REE4MDA1RjJGNzAgLyogSlNIVE1MU2VsZWN0RWxlbWVu
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0hUTUxTZWxlY3RF
bGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFFNkVFQTcwQjYyOERC
MzAwNUYyRjcwIC8qIEpTSFRNTFNlbGVjdEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmg7IHBhdGggPSBKU0hUTUxTZWxlY3RFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUUxRUJCQkQzMEFBQzlCODcwMDFGRThFMiAvKiBDU1NDaGFyc2V0UnVsZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NDaGFyc2V0UnVsZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04OTc0LDYgKzg5ODksNyBAQAogCQkJCUJD
OTg1NDQ2MENEM0RBNUYwMDA2OUJDMSAvKiBSYW5nZXMgKi8sCiAJCQkJQTgzQjc5MTUwQ0NCMDA3
ODAwMEIwODI1IC8qIFN0b3JhZ2UgKi8sCiAJCQkJQTgzQjc5MEEwQ0NBRkY0NzAwMEIwODI1IC8q
IFNWRyAqLywKKwkJCQlFMUM4QkU0QjBFOEJEMEQxMDA2NENCN0QgLyogVGhyZWFkcyAqLywKIAkJ
CQlCQzk4NTQ1MzBDRDNEQThGMDAwNjlCQzEgLyogVHJhdmVyc2FsICovLAogCQkJCUJDOTg1NDQz
MENEM0Q5RDAwMDA2OUJDMSAvKiBXaW5kb3cgKi8sCiAJCQkJQTgzQjc5MjIwQ0NCMDBGMDAwMEIw
ODI1IC8qIFhNTCAqLywKQEAgLTEyODQ4LDYgKzEyODY0LDkgQEAKIAkJCQkxQTM0MTdDODBDRUNG
RjI1MDA0OUNCREUgLyogSlNDdXN0b21Wb2lkQ2FsbGJhY2suY3BwICovLAogCQkJCTFBMzQxN0M3
MENFQ0ZGMjUwMDQ5Q0JERSAvKiBKU0N1c3RvbVZvaWRDYWxsYmFjay5oICovLAogCQkJCTFBRTgz
MDQyMENBQjBFRDEwMDIyMzdBRSAvKiBKU0RhdGFiYXNlQ3VzdG9tLmNwcCAqLywKKwkJCQlFMUNB
NUNEMjBFOENERTgwMDBFOEVGOTAgLyogSlNEZWRpY2F0ZWRXb3JrZXJDb25zdHJ1Y3Rvci5oICov
LAorCQkJCUUxQ0E1Q0Q1MEU4Q0RFRTkwMEU4RUY5MCAvKiBKU0RlZGljYXRlZFdvcmtlckNvbnN0
cnVjdG9yLmNwcCAqLywKKwkJCQlFMUNBNUNCQjBFOENEQ0FGMDBFOEVGOTAgLyogSlNEZWRpY2F0
ZWRXb3JrZXJDdXN0b20uY3BwICovLAogCQkJCTkyOTI2NDc2MEI2MUZDNzIwMEI0MUQzNCAvKiBK
U0RvY3VtZW50Q3VzdG9tLmNwcCAqLywKIAkJCQlCQzFERUE0RTBFMjY4RUI2MDA4M0E3M0YgLyog
SlNEb2N1bWVudEZyYWdtZW50Q3VzdG9tLmNwcCAqLywKIAkJCQkxQUMyMjYxNjBEQjY5Rjc0MDA4
OUI2NjkgLyogSlNET01BcHBsaWNhdGlvbkNhY2hlQ3VzdG9tLmNwcCAqLywKQEAgLTEzMjEzLDYg
KzEzMjMyLDE1IEBACiAJCQl0YWJXaWR0aCA9IDQ7CiAJCQl1c2VzVGFicyA9IDA7CiAJCX07CisJ
CUUxQzhCRTRCMEU4QkQwRDEwMDY0Q0I3RCAvKiBUaHJlYWRzICovID0geworCQkJaXNhID0gUEJY
R3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlFMUM4QkU1QzBFOEJEMTVBMDA2NENCN0QgLyog
SlNEZWRpY2F0ZWRXb3JrZXIuY3BwICovLAorCQkJCUUxQ0FBNUM1MEU4QkQyMzYwMEE3M0VDQSAv
KiBKU0RlZGljYXRlZFdvcmtlci5oICovLAorCQkJKTsKKwkJCW5hbWUgPSBUaHJlYWRzOworCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJRTFGMDQyNDMwOTgzOTM4OTAwNjY5NEVB
IC8qIHhtbCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0x
MzcxMiw2ICsxMzc0MCw5IEBACiAJCQkJQTgxODcyMTEwOTc3RDNDMDAwNTgyNkQ5IC8qIENvbnRh
aW5lck5vZGUuaCAqLywKIAkJCQlBOEM0QTdGODA5RDU2MzI3MDAwM0FDOEQgLyogQ1NTTWFwcGVk
QXR0cmlidXRlRGVjbGFyYXRpb24uY3BwICovLAogCQkJCUE4QzRBN0Y3MDlENTYzMjcwMDAzQUM4
RCAvKiBDU1NNYXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbi5oICovLAorCQkJCUUxQ0E1Q0E0MEU4
Q0Q3ODUwMEU4RUY5MCAvKiBEZWRpY2F0ZWRXb3JrZXIuY3BwICovLAorCQkJCUUxQ0E1QzlGMEU4
Q0Q3M0IwMEU4RUY5MCAvKiBEZWRpY2F0ZWRXb3JrZXIuaCAqLywKKwkJCQlFMUM4QkU0NDBFOEJD
Q0JCMDA2NENCN0QgLyogRGVkaWNhdGVkV29ya2VyLmlkbCAqLywKIAkJCQk5M0VFQzFFNzA5QzI4
Nzc3MDBDNTE1RDEgLyogRG9jUHRyLmggKi8sCiAJCQkJQTgxODVGMzQwOTc2NTc2NTAwNTgyNkQ5
IC8qIERvY3VtZW50LmNwcCAqLywKIAkJCQlBODE4NUYzODA5NzY1NzY1MDA1ODI2RDkgLyogRG9j
dW1lbnQuaCAqLywKQEAgLTE1OTY2LDggKzE1OTk3LDExIEBACiAJCQkJMDg5NTgyNTYwRTg1N0E3
RTAwRjgyQzgzIC8qIEltYWdlTG9hZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOENCNDEzRTBF
ODYzM0ZEMDAzMkM0RjAgLyogRGFzaEFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzBCM0JF
MjBFODg0OTIxMDA5NzcwQzUgLyogSlNDYW52YXNQaXhlbEFycmF5Q3VzdG9tLmggaW4gSGVhZGVy
cyAqLywKKwkJCQlFMUNBQTVDNjBFOEJEMjM2MDBBNzNFQ0EgLyogSlNEZWRpY2F0ZWRXb3JrZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDRjkzN0U3MEU4QjJFOTUwMDVDN0FCNyAvKiBKU0RPTVdp
bmRvd0Jhc2UubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQk2M0Y1RDRGNzBFOEM0QjcxMDBDMEJE
MDQgLyogRWxlbWVudFJhcmVEYXRhLmggaW4gSGVhZGVycyAqLywKKwkJCQlFMUNBNUNBMDBFOENE
NzNCMDBFOEVGOTAgLyogRGVkaWNhdGVkV29ya2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQlFMUNB
NUNEMzBFOENERTgwMDBFOEVGOTAgLyogSlNEZWRpY2F0ZWRXb3JrZXJDb25zdHJ1Y3Rvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMzQjdBRjQwRTkxOUNBOTAwRDU0MDY1IC8qIEpTRXZlbnRUYXJn
ZXROb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzYwOTAxRjBFOTFCOEVDMDAwQzY4QjUgLyog
SlNFdmVudFRhcmdldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMzQkMyOUMwRTkxQUIwRjAwODM1
NTg4IC8qIEhvc3RXaW5kb3cuaCBpbiBIZWFkZXJzICovLApAQCAtMTc4MzksNiArMTc4NzMsMTAg
QEAKIAkJCQk5MzUwRTcwRDBFODc1MDBCMDAxODlGRkYgLyogSlNIVE1MQWxsQ29sbGVjdGlvbi5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0M0Mzg3ODBFODg2Q0M3MDA1MzNERDUgLyogSlNIVE1M
SW5wdXRFbGVtZW50Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMjQ0MUM0MEU4QjY1
RDAwMDU1MzIwRiAvKiBTY3JvbGxWaWV3LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUUxQzhCRTVE
MEU4QkQxNUEwMDY0Q0I3RCAvKiBKU0RlZGljYXRlZFdvcmtlci5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQlFMUNBNUNBNTBFOENENzg1MDBFOEVGOTAgLyogRGVkaWNhdGVkV29ya2VyLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCUUxQ0E1Q0JDMEU4Q0RDQUYwMEU4RUY5MCAvKiBKU0RlZGljYXRlZFdv
cmtlckN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFMUNBNUNENjBFOENERUU5MDBFOEVG
OTAgLyogSlNEZWRpY2F0ZWRXb3JrZXJDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlCQzNCN0FGMzBFOTE5Q0E5MDBENTQwNjUgLyogSlNFdmVudFRhcmdldE5vZGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQkMzQjdCMjEwRTkxQUFGNDAwRDU0MDY1IC8qIEpTRXZlbnRUYXJnZXRO
b2RlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNjA5MDIwMEU5MUI4RUMwMDBDNjhC
NSAvKiBKU0V2ZW50VGFyZ2V0LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAkocmV2aXNpb24gMzc2NDcpCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4
LDcgQEAKICNpbmNsdWRlICJHQ0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJIVE1MRG9jdW1lbnQu
aCIKICNpbmNsdWRlICJKU0F1ZGlvQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJKU0RlZGljYXRl
ZFdvcmtlckNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiSlNET01XaW5kb3dDdXN0b20uaCIKICNp
bmNsdWRlICJKU0V2ZW50LmgiCiAjaW5jbHVkZSAiSlNFdmVudExpc3RlbmVyLmgiCkBAIC00Nyw2
ICs0OCw3IEBACiAjaW5jbHVkZSAiSlNNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yLmgiCiAjaW5j
bHVkZSAiSlNOb2RlLmgiCiAjaW5jbHVkZSAiSlNYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yLmgi
CisjaW5jbHVkZSAiSlNYU0xUUHJvY2Vzc29yQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJMb2dn
aW5nLmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKICNpbmNsdWRlICJQYWdlLmgiCkBAIC02
NSwxMCArNjcsNiBAQAogI2luY2x1ZGUgPHd0Zi9BbHdheXNJbmxpbmUuaD4KICNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgogCi0jaWYgRU5BQkxFKFhTTFQpCi0jaW5jbHVkZSAiSlNYU0xUUHJv
Y2Vzc29yQ29uc3RydWN0b3IuaCIKLSNlbmRpZgotCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBz
dGF0aWMgSlNWYWx1ZSogd2luZG93UHJvdG9GdW5jT3BlbihFeGVjU3RhdGUqLCBKU09iamVjdCos
IEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7CkBAIC04Niw2ICs4NCw4IEBAIHN0YXRpYyBKU1Zh
bHVlKiBqc0RPTVdpbmRvd0Jhc2VJbWFnZShFeGUKIHN0YXRpYyB2b2lkIHNldEpTRE9NV2luZG93
QmFzZUltYWdlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSopOwogc3RhdGljIEpTVmFs
dWUqIGpzRE9NV2luZG93QmFzZU1lc3NhZ2VDaGFubmVsKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50
aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKIHN0YXRpYyB2b2lkIHNldEpTRE9NV2luZG93
QmFzZU1lc3NhZ2VDaGFubmVsKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSopOworc3Rh
dGljIEpTVmFsdWUqIGpzRE9NV2luZG93QmFzZVdvcmtlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVu
dGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CitzdGF0aWMgdm9pZCBzZXRKU0RPTVdpbmRv
d0Jhc2VXb3JrZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKik7CiBzdGF0aWMgSlNW
YWx1ZSoganNET01XaW5kb3dCYXNlT3B0aW9uKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXIm
LCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKIHN0YXRpYyB2b2lkIHNldEpTRE9NV2luZG93QmFzZU9w
dGlvbihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqKTsKIHN0YXRpYyBKU1ZhbHVlKiBq
c0RPTVdpbmRvd0Jhc2VYTUxIdHRwUmVxdWVzdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVy
JiwgY29uc3QgUHJvcGVydHlTbG90Jik7CkBAIC0xNTgsNiArMTU4LDcgQEAgY29uc3QgQ2xhc3NJ
bmZvIEpTRE9NV2luZG93QmFzZTo6c19pbmZvIAogICBJbWFnZSAgICAgICAgICAgICAgICAgICAg
ICAgICBqc0RPTVdpbmRvd0Jhc2VJbWFnZSAgICAgICAgICAgICAgICAgICAgICAgIERvbnREZWxl
dGUKICAgTWVzc2FnZUNoYW5uZWwgICAgICAgICAgICAgICAganNET01XaW5kb3dCYXNlTWVzc2Fn
ZUNoYW5uZWwgICAgICAgICAgICAgICBEb250RGVsZXRlCiAgIE9wdGlvbiAgICAgICAgICAgICAg
ICAgICAgICAgIGpzRE9NV2luZG93QmFzZU9wdGlvbiAgICAgICAgICAgICAgICAgICAgICAgRG9u
dERlbGV0ZQorICBXb3JrZXIgICAgICAgICAgICAgICAgICAgICAgICBqc0RPTVdpbmRvd0Jhc2VX
b3JrZXIgICAgICAgICAgICAgICAgICAgICAgIERvbnREZWxldGUKICAgWE1MSHR0cFJlcXVlc3Qg
ICAgICAgICAgICAgICAganNET01XaW5kb3dCYXNlWE1MSHR0cFJlcXVlc3QgICAgICAgICAgICAg
ICBEb250RGVsZXRlCiAgIFhTTFRQcm9jZXNzb3IgICAgICAgICAgICAgICAgIGpzRE9NV2luZG93
QmFzZVhTTFRQcm9jZXNzb3IgICAgICAgICAgICAgICAgRG9udERlbGV0ZQogQGVuZApAQCAtNDcw
LDYgKzQ3MSwxNyBAQCBKU1ZhbHVlKiBqc0RPTVdpbmRvd0Jhc2VBdWRpbyhFeGVjU3RhdGUqCiAj
ZW5kaWYKIH0KIAorSlNWYWx1ZSoganNET01XaW5kb3dCYXNlV29ya2VyKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyNpZiBF
TkFCTEUoV09SS0VSUykKKyAgICBpZiAoIXN0YXRpY19jYXN0PEpTRE9NV2luZG93QmFzZSo+KHNs
b3Quc2xvdEJhc2UoKSktPmFsbG93c0FjY2Vzc0Zyb20oZXhlYykpCisgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOworICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU0RlZGljYXRlZFdv
cmtlckNvbnN0cnVjdG9yPihleGVjKTsKKyNlbHNlCisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CisjZW5kaWYKK30KKwogSlNWYWx1ZSoganNET01XaW5kb3dCYXNlWFNMVFByb2Nlc3NvcihFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
CiB7CiAjaWYgRU5BQkxFKFhTTFQpCkBAIC02MDIsNiArNjE0LDcgQEAgdm9pZCBKU0RPTVdpbmRv
d0Jhc2U6OnB1dChFeGVjU3RhdGUqIGV4ZQogICAgICAgICAgICAgICAgIHx8IGVudHJ5LT5wcm9w
ZXJ0eVB1dHRlcigpID09IHNldEpTRE9NV2luZG93QmFzZUltYWdlCiAgICAgICAgICAgICAgICAg
fHwgZW50cnktPnByb3BlcnR5UHV0dGVyKCkgPT0gc2V0SlNET01XaW5kb3dCYXNlT3B0aW9uCiAg
ICAgICAgICAgICAgICAgfHwgZW50cnktPnByb3BlcnR5UHV0dGVyKCkgPT0gc2V0SlNET01XaW5k
b3dCYXNlTWVzc2FnZUNoYW5uZWwKKyAgICAgICAgICAgICAgICB8fCBlbnRyeS0+cHJvcGVydHlQ
dXR0ZXIoKSA9PSBzZXRKU0RPTVdpbmRvd0Jhc2VXb3JrZXIKICAgICAgICAgICAgICAgICB8fCBl
bnRyeS0+cHJvcGVydHlQdXR0ZXIoKSA9PSBzZXRKU0RPTVdpbmRvd0Jhc2VYTUxIdHRwUmVxdWVz
dAogICAgICAgICAgICAgICAgIHx8IGVudHJ5LT5wcm9wZXJ0eVB1dHRlcigpID09IHNldEpTRE9N
V2luZG93QmFzZVhTTFRQcm9jZXNzb3IpKSB7CiAgICAgICAgICAgICBlbnRyeS0+cHJvcGVydHlQ
dXR0ZXIoKShleGVjLCB0aGlzLCB2YWx1ZSk7CkBAIC02NDAsNiArNjUzLDExIEBAIHZvaWQgc2V0
SlNET01XaW5kb3dCYXNlT3B0aW9uKEV4ZWNTdGF0ZSoKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKIH0KIAordm9pZCBzZXRKU0RPTVdpbmRvd0Jhc2VXb3JrZXIoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBKU1ZhbHVlKikKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwogdm9pZCBz
ZXRKU0RPTVdpbmRvd0Jhc2VYTUxIdHRwUmVxdWVzdChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpT
VmFsdWUqKQogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RlZGljYXRlZFdvcmtlckNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGVkaWNhdGVkV29ya2VyQ29uc3RydWN0b3IuY3BwCShyZXZp
c2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RlZGljYXRlZFdvcmtlckNvbnN0cnVj
dG9yLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXT1JLRVJTKQorCisjaW5jbHVkZSAiSlNEZWRpY2F0
ZWRXb3JrZXJDb25zdHJ1Y3Rvci5oIgorCisjaW5jbHVkZSAiRE9NV2luZG93LmgiCisjaW5jbHVk
ZSAiRGVkaWNhdGVkV29ya2VyLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJF
eGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiSlNET01XaW5kb3dDdXN0b20uaCIKKyNpbmNsdWRl
ICJKU0RlZGljYXRlZFdvcmtlci5oIgorCit1c2luZyBuYW1lc3BhY2UgSlNDOworCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NvbnN0IENsYXNzSW5mbyBKU0RlZGljYXRlZFdvcmtlckNvbnN0cnVj
dG9yOjpzX2luZm8gPSB7ICJEZWRpY2F0ZWRXb3JrZXJDb25zdHJ1Y3RvciIsIDAsIDAsIDAgfTsK
KworSlNEZWRpY2F0ZWRXb3JrZXJDb25zdHJ1Y3Rvcjo6SlNEZWRpY2F0ZWRXb3JrZXJDb25zdHJ1
Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCisgICAgOiBET01PYmplY3QoSlNEZWRpY2F0ZWRXb3JrZXJD
b25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlSUQoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT5vYmplY3RQcm90b3R5cGUoKSkpCit7CisgICAgcHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5sZW5ndGgsIGpzTnVtYmVyKGV4ZWMsIDEpLCBSZWFkT25seXxEb250RGVsZXRlfERvbnRF
bnVtKTsKK30KKworc3RhdGljIEpTT2JqZWN0KiBjb25zdHJ1Y3REZWRpY2F0ZWRXb3JrZXIoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogY29uc3RydWN0b3IsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
Cit7CisgICAgaWYgKGFyZ3Muc2l6ZSgpID09IDApCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9y
KGV4ZWMsIFN5bnRheEVycm9yLCAiTm90IGVub3VnaCBhcmd1bWVudHMiKTsKKworICAgIFVTdHJp
bmcgc2NyaXB0VVJMID0gYXJncy5hdChleGVjLCAwKS0+dG9TdHJpbmcoZXhlYyk7CisKKyAgICBE
T01XaW5kb3cqIHdpbmRvdyA9IGFzSlNET01XaW5kb3coZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpKS0+aW1wbCgpOworICAgIAorICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFJlZlB0
cjxEZWRpY2F0ZWRXb3JrZXI+IHdvcmtlciA9IERlZGljYXRlZFdvcmtlcjo6Y3JlYXRlKHNjcmlw
dFVSTCwgd2luZG93LT5kb2N1bWVudCgpLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMs
IGVjKTsKKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHRvSlMoZXhlYywgd29y
a2VyLnJlbGVhc2UoKSkpOworfQorCitDb25zdHJ1Y3RUeXBlIEpTRGVkaWNhdGVkV29ya2VyQ29u
c3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEoQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkK
K3sKKyAgICBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNvbnN0cnVjdERlZGljYXRl
ZFdvcmtlcjsKKyAgICByZXR1cm4gQ29uc3RydWN0VHlwZUhvc3Q7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQoKUHJvcGVydHkgY2hhbmdl
cyBvbjogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RlZGljYXRlZFdvcmtlckNvbnN0cnVjdG9yLmNw
cApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCk5hbWU6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRGVkaWNhdGVkV29ya2VyQ29uc3RydWN0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGVkaWNhdGVkV29ya2VyQ29uc3RydWN0b3IuaAko
cmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNEZWRpY2F0ZWRXb3JrZXJDb25z
dHJ1Y3Rvci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBKU0RlZGljYXRlZFdvcmtlckNvbnN0cnVjdG9yX2gKKyNkZWZpbmUgSlNEZWRpY2F0ZWRXb3Jr
ZXJDb25zdHJ1Y3Rvcl9oCisKKyNpZiBFTkFCTEUoV09SS0VSUykKKworI2luY2x1ZGUgIkpTRE9N
QmluZGluZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBKU0RlZGljYXRl
ZFdvcmtlckNvbnN0cnVjdG9yIDogcHVibGljIERPTU9iamVjdCB7CisgICAgcHVibGljOgorICAg
ICAgICBKU0RlZGljYXRlZFdvcmtlckNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKik7CisKKyAg
ICAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKKworICAgIHByaXZhdGU6
CisgICAgICAgIHZpcnR1YWwgSlNDOjpDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlND
OjpDb25zdHJ1Y3REYXRhJik7CisKKyAgICAgICAgdmlydHVhbCBjb25zdCBKU0M6OkNsYXNzSW5m
byogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJnNfaW5mbzsgfQorICAgIH07CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQorCisjZW5kaWYg
Ly8gSlNEZWRpY2F0ZWRXb3JrZXJDb25zdHJ1Y3Rvcl9oCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGVkaWNhdGVkV29ya2VyQ29uc3RydWN0b3IuaApfX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fCk5hbWU6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRGVkaWNhdGVkV29ya2VyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRGVkaWNhdGVkV29ya2VyQ3VzdG9tLmNwcAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNEZWRpY2F0ZWRXb3JrZXJDdXN0b20uY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV09SS0VSUykK
KworI2luY2x1ZGUgIkpTRGVkaWNhdGVkV29ya2VyLmgiCisKKyNpbmNsdWRlICJEZWRpY2F0ZWRX
b3JrZXIuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkpTRE9NV2luZG93Q3Vz
dG9tLmgiCisjaW5jbHVkZSAiSlNFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiSlNNZXNzYWdl
UG9ydC5oIgorI2luY2x1ZGUgIk1lc3NhZ2VQb3J0LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK3ZvaWQgSlNEZWRpY2F0ZWRXb3JrZXI6Om1h
cmsoKQoreworICAgIERPTU9iamVjdDo6bWFyaygpOworCisgICAgaWYgKEpTVW5wcm90ZWN0ZWRF
dmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PEpTVW5wcm90ZWN0ZWRFdmVudExp
c3RlbmVyKj4obV9pbXBsLT5vbk1lc3NhZ2VMaXN0ZW5lcigpKSkKKyAgICAgICAgbGlzdGVuZXIt
Pm1hcmsoKTsKKworICAgIGlmIChKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIg
PSBzdGF0aWNfY2FzdDxKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcio+KG1faW1wbC0+b25DbG9z
ZUxpc3RlbmVyKCkpKQorICAgICAgICBsaXN0ZW5lci0+bWFyaygpOworCisgICAgaWYgKEpTVW5w
cm90ZWN0ZWRFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PEpTVW5wcm90ZWN0
ZWRFdmVudExpc3RlbmVyKj4obV9pbXBsLT5vbkVycm9yTGlzdGVuZXIoKSkpCisgICAgICAgIGxp
c3RlbmVyLT5tYXJrKCk7Cit9CisKK0pTVmFsdWUqIEpTRGVkaWNhdGVkV29ya2VyOjpzdGFydENv
bnZlcnNhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAg
RE9NV2luZG93KiB3aW5kb3cgPSBhc0pTRE9NV2luZG93KGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSktPmltcGwoKTsKKyAgICBjb25zdCBVU3RyaW5nJiBtZXNzYWdlID0gYXJncy5hdChleGVj
LCAwKS0+dG9TdHJpbmcoZXhlYyk7CisKKyAgICByZXR1cm4gdG9KUyhleGVjLCBpbXBsKCktPnN0
YXJ0Q29udmVyc2F0aW9uKHdpbmRvdy0+ZG9jdW1lbnQoKSwgbWVzc2FnZSkuZ2V0KCkpOworfQor
Cit2b2lkIEpTRGVkaWNhdGVkV29ya2VyOjpzZXRPbm1lc3NhZ2UoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBpbXBsKCktPmRvY3Vt
ZW50KCk7CisgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuOworICAgIEpTRE9NV2lu
ZG93KiB3aW5kb3cgPSB0b0pTRE9NV2luZG93KGRvY3VtZW50LT5mcmFtZSgpKTsKKyAgICBpZiAo
IXdpbmRvdykKKyAgICAgICAgcmV0dXJuOworICAgIGltcGwoKS0+c2V0T25NZXNzYWdlTGlzdGVu
ZXIod2luZG93LT5maW5kT3JDcmVhdGVKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcihleGVjLCB2
YWx1ZSwgdHJ1ZSkpOworfQorCitKU1ZhbHVlKiBKU0RlZGljYXRlZFdvcmtlcjo6b25tZXNzYWdl
KEV4ZWNTdGF0ZSopIGNvbnN0Cit7CisgICAgaWYgKEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVy
KiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKj4oaW1w
bCgpLT5vbk1lc3NhZ2VMaXN0ZW5lcigpKSkKKyAgICAgICAgaWYgKEpTT2JqZWN0KiBsaXN0ZW5l
ck9iaiA9IGxpc3RlbmVyLT5saXN0ZW5lck9iaigpKQorICAgICAgICAgICAgcmV0dXJuIGxpc3Rl
bmVyT2JqOworICAgIHJldHVybiBqc051bGwoKTsKK30KKwordm9pZCBKU0RlZGljYXRlZFdvcmtl
cjo6c2V0T25jbG9zZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHZhbHVlKQoreworICAgIERv
Y3VtZW50KiBkb2N1bWVudCA9IGltcGwoKS0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50
KQorICAgICAgICByZXR1cm47CisgICAgSlNET01XaW5kb3cqIHdpbmRvdyA9IHRvSlNET01XaW5k
b3coZG9jdW1lbnQtPmZyYW1lKCkpOworICAgIGlmICghd2luZG93KQorICAgICAgICByZXR1cm47
CisgICAgaW1wbCgpLT5zZXRPbkNsb3NlTGlzdGVuZXIod2luZG93LT5maW5kT3JDcmVhdGVKU1Vu
cHJvdGVjdGVkRXZlbnRMaXN0ZW5lcihleGVjLCB2YWx1ZSwgdHJ1ZSkpOworfQorCitKU1ZhbHVl
KiBKU0RlZGljYXRlZFdvcmtlcjo6b25jbG9zZShFeGVjU3RhdGUqKSBjb25zdAoreworICAgIGlm
IChKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxKU1Vu
cHJvdGVjdGVkRXZlbnRMaXN0ZW5lcio+KGltcGwoKS0+b25DbG9zZUxpc3RlbmVyKCkpKQorICAg
ICAgICBpZiAoSlNPYmplY3QqIGxpc3RlbmVyT2JqID0gbGlzdGVuZXItPmxpc3RlbmVyT2JqKCkp
CisgICAgICAgICAgICByZXR1cm4gbGlzdGVuZXJPYmo7CisgICAgcmV0dXJuIGpzTnVsbCgpOwor
fQorCit2b2lkIEpTRGVkaWNhdGVkV29ya2VyOjpzZXRPbmVycm9yKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSogdmFsdWUpCit7CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gaW1wbCgpLT5kb2N1
bWVudCgpOworICAgIGlmICghZG9jdW1lbnQpCisgICAgICAgIHJldHVybjsKKyAgICBKU0RPTVdp
bmRvdyogd2luZG93ID0gdG9KU0RPTVdpbmRvdyhkb2N1bWVudC0+ZnJhbWUoKSk7CisgICAgaWYg
KCF3aW5kb3cpCisgICAgICAgIHJldHVybjsKKyAgICBpbXBsKCktPnNldE9uRXJyb3JMaXN0ZW5l
cih3aW5kb3ctPmZpbmRPckNyZWF0ZUpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKGV4ZWMsIHZh
bHVlLCB0cnVlKSk7Cit9CisKK0pTVmFsdWUqIEpTRGVkaWNhdGVkV29ya2VyOjpvbmVycm9yKEV4
ZWNTdGF0ZSopIGNvbnN0Cit7CisgICAgaWYgKEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKiBs
aXN0ZW5lciA9IHN0YXRpY19jYXN0PEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKj4oaW1wbCgp
LT5vbkVycm9yTGlzdGVuZXIoKSkpCisgICAgICAgIGlmIChKU09iamVjdCogbGlzdGVuZXJPYmog
PSBsaXN0ZW5lci0+bGlzdGVuZXJPYmooKSkKKyAgICAgICAgICAgIHJldHVybiBsaXN0ZW5lck9i
ajsKKyAgICByZXR1cm4ganNOdWxsKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RlZGljYXRlZFdvcmtlckN1c3RvbS5jcHAKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBz
dm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogV2ViQ29yZS9kb20vRGVkaWNhdGVkV29y
a2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9EZWRpY2F0ZWRXb3JrZXIuY3BwCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9kb20vRGVkaWNhdGVkV29ya2VyLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaWYgRU5BQkxFKFdPUktFUlMpCisKKyNpbmNsdWRlICJEZWRpY2F0ZWRXb3JrZXIuaCIKKwor
I2luY2x1ZGUgIkNhY2hlZFNjcmlwdC5oIgorI2luY2x1ZGUgIkRvY0xvYWRlci5oIgorI2luY2x1
ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJFdmVudEV4Y2Vw
dGlvbi5oIgorI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVz
LmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgi
CisjaW5jbHVkZSAiTWVzc2FnZVBvcnQuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgor
I2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBXb3JrZXJUaHJlYWRTY3JpcHRMb2FkVGltZXIgOiBwdWJs
aWMgVGltZXJCYXNlIHsKK3B1YmxpYzoKKyAgICBXb3JrZXJUaHJlYWRTY3JpcHRMb2FkVGltZXIo
UGFzc1JlZlB0cjxEZWRpY2F0ZWRXb3JrZXI+IHdvcmtlcikKKyAgICAgICAgOiBtX3dvcmtlcih3
b3JrZXIpCisgICAgeworICAgICAgICBBU1NFUlQobV93b3JrZXIpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICB2aXJ0dWFsIHZvaWQgZmlyZWQoKQorICAgIHsKKyAgICAgICAgbV93b3JrZXItPnN0
YXJ0TG9hZCgpOworICAgICAgICBkZWxldGUgdGhpczsKKyAgICB9CisKKyAgICBSZWZQdHI8RGVk
aWNhdGVkV29ya2VyPiBtX3dvcmtlcjsKK307CisKK0RlZGljYXRlZFdvcmtlcjo6RGVkaWNhdGVk
V29ya2VyKGNvbnN0IFN0cmluZyYgdXJsLCBEb2N1bWVudCogZG9jdW1lbnQsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQorICAgIDogQWN0aXZlRE9NT2JqZWN0KGRvY3VtZW50LCB0aGlzKQoreworICAgIG1f
c2NyaXB0VVJMID0gZG9jdW1lbnQtPmNvbXBsZXRlVVJMKHVybCk7CisgICAgaWYgKCFtX3Njcmlw
dFVSTC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgZWMgPSBTWU5UQVhfRVJSOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKCFkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuQWNj
ZXNzKFNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tU3RyaW5nKHVybCkuZ2V0KCkpKSB7CisgICAg
ICAgIGVjID0gU0VDVVJJVFlfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgV29y
a2VyVGhyZWFkU2NyaXB0TG9hZFRpbWVyKiB0aW1lciA9IG5ldyBXb3JrZXJUaHJlYWRTY3JpcHRM
b2FkVGltZXIodGhpcyk7CisgICAgdGltZXItPnN0YXJ0T25lU2hvdCgwKTsKK30KKworRGVkaWNh
dGVkV29ya2VyOjp+RGVkaWNhdGVkV29ya2VyKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworfQorCitQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0PiBEZWRpY2F0ZWRXb3JrZXI6OnN0YXJ0
Q29udmVyc2F0aW9uKERvY3VtZW50KiAvKnNjcmlwdENvbnRleHREb2N1bWVudCovLCBjb25zdCBT
dHJpbmcmIC8qbWVzc2FnZSovKQoreworICAgIC8vIE5vdCBpbXBsZW1lbnRlZC4KKyAgICByZXR1
cm4gMDsKK30KKwordm9pZCBEZWRpY2F0ZWRXb3JrZXI6OmNsb3NlKCkKK3sKKyAgICAvLyBOb3Qg
aW1wbGVtZW50ZWQuCit9CisKK3ZvaWQgRGVkaWNhdGVkV29ya2VyOjpwb3N0TWVzc2FnZShjb25z
dCBTdHJpbmcmIC8qbWVzc2FnZSovLCBNZXNzYWdlUG9ydCogLypwb3J0Ki8pCit7CisgICAgLy8g
Tm90IGltcGxlbWVudGVkLgorfQorCit2b2lkIERlZGljYXRlZFdvcmtlcjo6c3RhcnRMb2FkKCkK
K3sKKyAgICBtX2NhY2hlZFNjcmlwdCA9IGRvY3VtZW50KCktPmRvY0xvYWRlcigpLT5yZXF1ZXN0
U2NyaXB0KG1fc2NyaXB0VVJMLCBkb2N1bWVudCgpLT5jaGFyc2V0KCkpOworCisgICAgaWYgKG1f
Y2FjaGVkU2NyaXB0KSB7CisgICAgICAgIHNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsgIC8vIFRo
ZSB3b3JrZXIgY29udGV4dCBkb2VzIG5vdCBleGlzdCB3aGlsZSBsb2FkaW5nLCBzbyB3ZSBtdWNo
IGVuc3VyZSB0aGF0IHRoZSB3b3JrZXIgb2JqZWN0IGlzIG5vdCBjb2xsZWN0ZWQsIGFzIHdlbGwg
YXMgaXRzIGV2ZW50IGxpc3RlbmVycy4KKyAgICAgICAgbV9jYWNoZWRTY3JpcHQtPmFkZENsaWVu
dCh0aGlzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGRpc3BhdGNoRXJyb3JFdmVu
dCgpOworfQorCit2b2lkIERlZGljYXRlZFdvcmtlcjo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVz
b3VyY2UqIHJlc291cmNlKQoreworICAgIEFTU0VSVChyZXNvdXJjZSA9PSBtX2NhY2hlZFNjcmlw
dC5nZXQoKSk7CisgICAgaWYgKG1fY2FjaGVkU2NyaXB0LT5lcnJvck9jY3VycmVkKCkpIHsKKyAg
ICAgICAgZGlzcGF0Y2hFcnJvckV2ZW50KCk7CisgICAgICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5
KHRoaXMpOworICAgIH0gZWxzZSAgeworICAgICAgICAvLyBTdGFydCB0aGUgd29ya2VyIHRocmVh
ZC4KKyAgICB9CisKKyAgICBtX2NhY2hlZFNjcmlwdC0+cmVtb3ZlQ2xpZW50KHRoaXMpOworICAg
IG1fY2FjaGVkU2NyaXB0ID0gMDsKK30KKwordm9pZCBEZWRpY2F0ZWRXb3JrZXI6OmRpc3BhdGNo
RXJyb3JFdmVudCgpCit7CisgICAgaWYgKG1fb25FcnJvckxpc3RlbmVyKSB7CisgICAgICAgIFJl
ZlB0cjxFdmVudD4gZXZ0ID0gRXZlbnQ6OmNyZWF0ZShFdmVudE5hbWVzOjplcnJvckV2ZW50LCBm
YWxzZSwgdHJ1ZSk7CisgICAgICAgIC8vIERlZGljYXRlZFdvcmtlciBpcyBub3QgYW4gRXZlbnRU
YXJnZXQsIHNvIHRhcmdldCBhbmQgY3VycmVudFRhcmdldCByZW1haW4gbnVsbC4KKyAgICAgICAg
bV9vbkVycm9yTGlzdGVuZXItPmhhbmRsZUV2ZW50KGV2dC5yZWxlYXNlKCkuZ2V0KCksIHRydWUp
OworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KFdPUktFUlMpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL2RvbS9EZWRpY2F0ZWRXb3Jr
ZXIuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5kZXg6
IFdlYkNvcmUvZG9tL0RlZGljYXRlZFdvcmtlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9t
L0RlZGljYXRlZFdvcmtlci5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9kb20vRGVkaWNhdGVk
V29ya2VyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqCisgKi8KKworI2lm
bmRlZiBEZWRpY2F0ZWRXb3JrZXJfaAorI2RlZmluZSBEZWRpY2F0ZWRXb3JrZXJfaAorCisjaWYg
RU5BQkxFKFdPUktFUlMpCisKKyNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRl
ICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlSGFuZGxl
LmgiCisjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIENhY2hlZFJlc291cmNlOworICAg
IGNsYXNzIENhY2hlZFNjcmlwdDsKKyAgICBjbGFzcyBEb2N1bWVudDsKKyAgICBjbGFzcyBNZXNz
YWdlUG9ydDsKKyAgICBjbGFzcyBTdHJpbmc7CisKKyAgICB0eXBlZGVmIGludCBFeGNlcHRpb25D
b2RlOworCisgICAgY2xhc3MgRGVkaWNhdGVkV29ya2VyIDogcHVibGljIFJlZkNvdW50ZWQ8RGVk
aWNhdGVkV29ya2VyPiwgcHVibGljIEFjdGl2ZURPTU9iamVjdCwgcHJpdmF0ZSBDYWNoZWRSZXNv
dXJjZUNsaWVudCB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxEZWRp
Y2F0ZWRXb3JrZXI+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHVybCwgRG9jdW1lbnQqIGRvY3VtZW50
LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gYWRvcHRSZWYobmV3IERlZGljYXRlZFdvcmtl
cih1cmwsIGRvY3VtZW50LCBlYykpOyB9CisgICAgICAgIH5EZWRpY2F0ZWRXb3JrZXIoKTsKKwor
ICAgICAgICBQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0PiBzdGFydENvbnZlcnNhdGlvbihEb2N1bWVu
dCosIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CisgICAgICAgIHZvaWQgY2xvc2UoKTsKKyAgICAg
ICAgdm9pZCBwb3N0TWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIE1lc3NhZ2VQb3J0KiBw
b3J0ID0gMCk7CisKKyAgICAgICAgdm9pZCBzZXRPbk1lc3NhZ2VMaXN0ZW5lcihQYXNzUmVmUHRy
PEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpIHsgbV9vbk1lc3NhZ2VMaXN0ZW5lciA9IGV2
ZW50TGlzdGVuZXI7IH0KKyAgICAgICAgRXZlbnRMaXN0ZW5lciogb25NZXNzYWdlTGlzdGVuZXIo
KSBjb25zdCB7IHJldHVybiBtX29uTWVzc2FnZUxpc3RlbmVyLmdldCgpOyB9CisKKyAgICAgICAg
dm9pZCBzZXRPbkNsb3NlTGlzdGVuZXIoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExp
c3RlbmVyKSB7IG1fb25DbG9zZUxpc3RlbmVyID0gZXZlbnRMaXN0ZW5lcjsgfQorICAgICAgICBF
dmVudExpc3RlbmVyKiBvbkNsb3NlTGlzdGVuZXIoKSBjb25zdCB7IHJldHVybiBtX29uQ2xvc2VM
aXN0ZW5lci5nZXQoKTsgfQorCisgICAgICAgIHZvaWQgc2V0T25FcnJvckxpc3RlbmVyKFBhc3NS
ZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikgeyBtX29uRXJyb3JMaXN0ZW5lciA9
IGV2ZW50TGlzdGVuZXI7IH0KKyAgICAgICAgRXZlbnRMaXN0ZW5lciogb25FcnJvckxpc3RlbmVy
KCkgY29uc3QgeyByZXR1cm4gbV9vbkVycm9yTGlzdGVuZXIuZ2V0KCk7IH0KKworICAgIHByaXZh
dGU6CisgICAgICAgIGZyaWVuZCBjbGFzcyBXb3JrZXJUaHJlYWRTY3JpcHRMb2FkVGltZXI7CisK
KyAgICAgICAgRGVkaWNhdGVkV29ya2VyKGNvbnN0IFN0cmluZyYsIERvY3VtZW50KiwgRXhjZXB0
aW9uQ29kZSYpOworCisgICAgICAgIHZvaWQgc3RhcnRMb2FkKCk7CisgICAgICAgIHZpcnR1YWwg
dm9pZCBub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSopOworCisgICAgICAgIHZvaWQgZGlz
cGF0Y2hFcnJvckV2ZW50KCk7CisKKyAgICAgICAgS1VSTCBtX3NjcmlwdFVSTDsKKyAgICAgICAg
Q2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkU2NyaXB0PiBtX2NhY2hlZFNjcmlwdDsKKworICAg
ICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbV9vbk1lc3NhZ2VMaXN0ZW5lcjsKKyAgICAgICAg
UmVmUHRyPEV2ZW50TGlzdGVuZXI+IG1fb25DbG9zZUxpc3RlbmVyOworICAgICAgICBSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4gbV9vbkVycm9yTGlzdGVuZXI7CisgICAgfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCisKKyNlbmRpZiAvLyBEZWRp
Y2F0ZWRXb3JrZXJfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9kb20vRGVkaWNhdGVk
V29ya2VyLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRl
eDogV2ViQ29yZS9kb20vRGVkaWNhdGVkV29ya2VyLmlkbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2RvbS9EZWRpY2F0ZWRXb3JrZXIuaWRsCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9kb20vRGVk
aWNhdGVkV29ya2VyLmlkbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICoKKyAq
LworCittb2R1bGUgdGhyZWFkcyB7CisKKyAgICBpbnRlcmZhY2UgW0N1c3RvbU1hcmtGdW5jdGlv
biwgQ29uZGl0aW9uYWw9V09SS0VSU10gRGVkaWNhdGVkV29ya2VyIHsKKworICAgICAgICAvLyBU
aGVzZSBhbHNvIHVzZWQgZm9yIHNoYXJlZCB3b3JrZXJzLgorICAgICAgICBhdHRyaWJ1dGUgW0N1
c3RvbV0gRXZlbnRMaXN0ZW5lciBvbmNsb3NlOworICAgICAgICBhdHRyaWJ1dGUgW0N1c3RvbV0g
RXZlbnRMaXN0ZW5lciBvbmVycm9yOworCisgICAgICAgIC8vIFRoZXNlIGFyZSBvbmx5IGZvciBk
ZWRpY2F0ZWQgd29ya2Vycy4KKyAgICAgICAgYXR0cmlidXRlIFtDdXN0b21dIEV2ZW50TGlzdGVu
ZXIgb25tZXNzYWdlOworICAgICAgICBbQ3VzdG9tXSBNZXNzYWdlUG9ydCBzdGFydENvbnZlcnNh
dGlvbihpbiBET01TdHJpbmcgbWVzc2FnZSk7CisgICAgICAgIHZvaWQgY2xvc2UoKTsKKyAgICAg
ICAgdm9pZCBwb3N0TWVzc2FnZShpbiBET01TdHJpbmcgbWVzc2FnZSwgaW4gW09wdGlvbmFsXSBN
ZXNzYWdlUG9ydCBwb3J0KTsKKworICAgIH07CisKK30K
</data>
<flag name="review"
          id="11126"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>