<?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>48875</bug_id>
          
          <creation_ts>2010-11-02 15:07:12 -0700</creation_ts>
          <short_desc>Add JavaScriptAudioNode files</short_desc>
          <delta_ts>2010-11-09 21:56:15 -0800</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>Other</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="Chris Rogers">crogers</reporter>
          <assigned_to name="Chris Rogers">crogers</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>jamesr</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kbr</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>303708</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-11-02 15:07:12 -0700</bug_when>
    <thetext>Add JavaScriptAudioNode files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303710</commentid>
    <comment_count>1</comment_count>
      <attachid>72747</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-11-02 15:08:55 -0700</bug_when>
    <thetext>Created attachment 72747
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303711</commentid>
    <comment_count>2</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-11-02 15:11:12 -0700</bug_when>
    <thetext>Implements JavaScriptAudioNode as described in the web audio specification:
http://chromium.googlecode.com/svn/trunk/samples/audio/specification/specification.html#JavaScriptAudioNode-section</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>306458</commentid>
    <comment_count>3</comment_count>
      <attachid>72747</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-11-08 16:41:01 -0800</bug_when>
    <thetext>Comment on attachment 72747
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=72747&amp;action=review

This looks good overall; I went through the bounds checking assertions carefully and they all look correct. Because of the potential deletion issue before the callback is called, I&apos;m marking it r-.

&gt; WebCore/webaudio/JavaScriptAudioNode.cpp:101
&gt; +    m_outputBuffers.append(AudioBuffer::create(2, bufferSize(), sampleRate));

This could be a loop to reduce duplicated code.

&gt; WebCore/webaudio/JavaScriptAudioNode.cpp:200
&gt; +            callOnMainThread(fireProcessEventDispatch, this);

Some sort of guard is needed to ensure that this node isn&apos;t deallocated by the time fireProcessEventDispatch is called. Perhaps you could increment one of the node&apos;s reference counts here and decrement it in the callback.

&gt; WebCore/webaudio/JavaScriptAudioNode.h:57
&gt; +        return adoptRef(new JavaScriptAudioNode(context, sampleRate, bufferSize, numberOfInputs, numberOfOutputs));

Unless there&apos;s a strong reason to inline this, move the body to the .cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307069</commentid>
    <comment_count>4</comment_count>
      <attachid>73440</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-11-09 17:20:39 -0800</bug_when>
    <thetext>Created attachment 73440
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307072</commentid>
    <comment_count>5</comment_count>
      <attachid>72747</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-11-09 17:22:18 -0800</bug_when>
    <thetext>Comment on attachment 72747
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=72747&amp;action=review

&gt;&gt; WebCore/webaudio/JavaScriptAudioNode.cpp:101
&gt;&gt; +    m_outputBuffers.append(AudioBuffer::create(2, bufferSize(), sampleRate));
&gt; 
&gt; This could be a loop to reduce duplicated code.

FIXED

&gt;&gt; WebCore/webaudio/JavaScriptAudioNode.cpp:200
&gt;&gt; +            callOnMainThread(fireProcessEventDispatch, this);
&gt; 
&gt; Some sort of guard is needed to ensure that this node isn&apos;t deallocated by the time fireProcessEventDispatch is called. Perhaps you could increment one of the node&apos;s reference counts here and decrement it in the callback.

I added a call to ref() and corresponding call to deref() to avoid a possible problem here.

&gt;&gt; WebCore/webaudio/JavaScriptAudioNode.h:57
&gt;&gt; +        return adoptRef(new JavaScriptAudioNode(context, sampleRate, bufferSize, numberOfInputs, numberOfOutputs));
&gt; 
&gt; Unless there&apos;s a strong reason to inline this, move the body to the .cpp.

FIXED</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307101</commentid>
    <comment_count>6</comment_count>
      <attachid>73440</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-11-09 18:09:33 -0800</bug_when>
    <thetext>Comment on attachment 73440
Patch

Looks good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307162</commentid>
    <comment_count>7</comment_count>
      <attachid>73440</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-11-09 21:56:10 -0800</bug_when>
    <thetext>Comment on attachment 73440
Patch

Clearing flags on attachment: 73440

Committed r71719: &lt;http://trac.webkit.org/changeset/71719&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307163</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-11-09 21:56:15 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72747</attachid>
            <date>2010-11-02 15:08:55 -0700</date>
            <delta_ts>2010-11-09 17:22:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-48875-20101102150853.patch</filename>
            <type>text/plain</type>
            <size>19667</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MTE3NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzQgQEAKKzIwMTAtMTEtMDIgIENocmlzIFJvZ2VycyAgPGNyb2dlcnNAZ29vZ2xl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgSmF2YVNjcmlwdEF1ZGlvTm9kZSBmaWxlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDg4NzUKKworICAgICAgICBObyBuZXcgdGVzdHMgc2luY2Ug
YXVkaW8gQVBJIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQuCisKKyAgICAgICAgKiB3ZWJhdWRpby9K
YXZhU2NyaXB0QXVkaW9Ob2RlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpKYXZhU2Ny
aXB0QXVkaW9Ob2RlOjpKYXZhU2NyaXB0QXVkaW9Ob2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okph
dmFTY3JpcHRBdWRpb05vZGU6On5KYXZhU2NyaXB0QXVkaW9Ob2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OkphdmFTY3JpcHRBdWRpb05vZGU6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6
SmF2YVNjcmlwdEF1ZGlvTm9kZTo6dW5pbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6Okph
dmFTY3JpcHRBdWRpb05vZGU6OnRvSmF2YVNjcmlwdEF1ZGlvTm9kZSk6CisgICAgICAgIChXZWJD
b3JlOjpKYXZhU2NyaXB0QXVkaW9Ob2RlOjpwcm9jZXNzKToKKyAgICAgICAgKFdlYkNvcmU6Okph
dmFTY3JpcHRBdWRpb05vZGU6OmZpcmVQcm9jZXNzRXZlbnREaXNwYXRjaCk6CisgICAgICAgIChX
ZWJDb3JlOjpKYXZhU2NyaXB0QXVkaW9Ob2RlOjpmaXJlUHJvY2Vzc0V2ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkphdmFTY3JpcHRBdWRpb05vZGU6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OkphdmFTY3JpcHRBdWRpb05vZGU6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOgorICAgICAgICAq
IHdlYmF1ZGlvL0phdmFTY3JpcHRBdWRpb05vZGUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpKYXZhU2NyaXB0QXVkaW9Ob2RlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SmF2YVNj
cmlwdEF1ZGlvTm9kZTo6ZXZlbnRUYXJnZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkphdmFT
Y3JpcHRBdWRpb05vZGU6OmVuc3VyZUV2ZW50VGFyZ2V0RGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpKYXZhU2NyaXB0QXVkaW9Ob2RlOjpidWZmZXJTaXplKToKKyAgICAgICAgKFdlYkNvcmU6Okph
dmFTY3JpcHRBdWRpb05vZGU6OmRvdWJsZUJ1ZmZlckluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6
OkphdmFTY3JpcHRBdWRpb05vZGU6OnN3YXBCdWZmZXJzKToKKyAgICAgICAgKFdlYkNvcmU6Okph
dmFTY3JpcHRBdWRpb05vZGU6OnJlZkV2ZW50VGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6Okph
dmFTY3JpcHRBdWRpb05vZGU6OmRlcmVmRXZlbnRUYXJnZXQpOgorICAgICAgICAqIHdlYmF1ZGlv
L0phdmFTY3JpcHRBdWRpb05vZGUuaWRsOiBBZGRlZC4KKwogMjAxMC0xMS0wMiAgQWRhbSBCYXJ0
aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVs
LgpJbmRleDogV2ViQ29yZS93ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3dlYmF1ZGlvL0phdmFTY3JpcHRBdWRpb05vZGUuY3BwCShyZXZpc2lv
biAwKQorKysgV2ViQ29yZS93ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwyNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorCisjaW5jbHVkZSAiSmF2YVNjcmlwdEF1ZGlvTm9k
ZS5oIgorCisjaW5jbHVkZSAiQXVkaW9CdWZmZXIuaCIKKyNpbmNsdWRlICJBdWRpb0J1cy5oIgor
I2luY2x1ZGUgIkF1ZGlvQ29udGV4dC5oIgorI2luY2x1ZGUgIkF1ZGlvTm9kZUlucHV0LmgiCisj
aW5jbHVkZSAiQXVkaW9Ob2RlT3V0cHV0LmgiCisjaW5jbHVkZSAiQXVkaW9Qcm9jZXNzaW5nRXZl
bnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZsb2F0MzJBcnJheS5oIgor
I2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY29u
c3Qgc2l6ZV90IERlZmF1bHRCdWZmZXJTaXplID0gNDA5NjsKKworSmF2YVNjcmlwdEF1ZGlvTm9k
ZTo6SmF2YVNjcmlwdEF1ZGlvTm9kZShBdWRpb0NvbnRleHQqIGNvbnRleHQsIGRvdWJsZSBzYW1w
bGVSYXRlLCBzaXplX3QgYnVmZmVyU2l6ZSwgdW5zaWduZWQgbnVtYmVyT2ZJbnB1dHMsIHVuc2ln
bmVkIG51bWJlck9mT3V0cHV0cykKKyAgICA6IEF1ZGlvTm9kZShjb250ZXh0LCBzYW1wbGVSYXRl
KQorICAgICwgbV9kb3VibGVCdWZmZXJJbmRleCgwKQorICAgICwgbV9kb3VibGVCdWZmZXJJbmRl
eEZvckV2ZW50KDApCisgICAgLCBtX2J1ZmZlclNpemUoYnVmZmVyU2l6ZSkKKyAgICAsIG1fYnVm
ZmVyUmVhZFdyaXRlSW5kZXgoMCkKKyAgICAsIG1faXNSZXF1ZXN0T3V0c3RhbmRpbmcoZmFsc2Up
Cit7CisgICAgLy8gQ2hlY2sgZm9yIHZhbGlkIGJ1ZmZlciBzaXplLgorICAgIHN3aXRjaCAoYnVm
ZmVyU2l6ZSkgeworICAgIGNhc2UgMjU2OgorICAgIGNhc2UgNTEyOgorICAgIGNhc2UgMTAyNDoK
KyAgICBjYXNlIDIwNDg6CisgICAgY2FzZSA0MDk2OgorICAgIGNhc2UgODE5MjoKKyAgICBjYXNl
IDE2Mzg0OgorICAgICAgICBtX2J1ZmZlclNpemUgPSBidWZmZXJTaXplOworICAgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgICBtX2J1ZmZlclNpemUgPSBEZWZhdWx0QnVmZmVyU2l6
ZTsKKyAgICB9CisgICAgICAgIAorICAgIC8vIFJlZ2FyZGxlc3Mgb2YgdGhlIGFsbG93ZWQgYnVm
ZmVyIHNpemVzIGFib3ZlLCB3ZSBzdGlsbCBuZWVkIHRvIHByb2Nlc3MgYXQgdGhlIGdyYW51bGFy
aXR5IG9mIHRoZSBBdWRpb05vZGUuCisgICAgaWYgKG1fYnVmZmVyU2l6ZSA8IEF1ZGlvTm9kZTo6
UHJvY2Vzc2luZ1NpemVJbkZyYW1lcykKKyAgICAgICAgbV9idWZmZXJTaXplID0gQXVkaW9Ob2Rl
OjpQcm9jZXNzaW5nU2l6ZUluRnJhbWVzOworCisgICAgLy8gRklYTUU6IFJpZ2h0IG5vdyB3ZSdy
ZSBoYXJkY29kZWQgdG8gc2luZ2xlIGlucHV0IGFuZCBzaW5nbGUgb3V0cHV0LgorICAgIC8vIEFs
dGhvdWdoIHRoZSBzcGVjaWZpY2F0aW9uIHNheXMgdGhpcyBpcyBPSyBmb3IgYSBzaW1wbGUgaW1w
bGVtZW50YXRpb24sIG11bHRpcGxlIGlucHV0cyBhbmQgb3V0cHV0cyB3b3VsZCBiZSBnb29kLgor
ICAgIEFTU0VSVF9VTlVTRUQobnVtYmVyT2ZJbnB1dHMsIG51bWJlck9mSW5wdXRzID09IDEpOwor
ICAgIEFTU0VSVF9VTlVTRUQobnVtYmVyT2ZPdXRwdXRzLCBudW1iZXJPZk91dHB1dHMgPT0gMSk7
CisgICAgYWRkSW5wdXQoYWRvcHRQdHIobmV3IEF1ZGlvTm9kZUlucHV0KHRoaXMpKSk7CisgICAg
YWRkT3V0cHV0KGFkb3B0UHRyKG5ldyBBdWRpb05vZGVPdXRwdXQodGhpcywgMikpKTsKKworICAg
IHNldFR5cGUoTm9kZVR5cGVKYXZhU2NyaXB0KTsKKworICAgIGluaXRpYWxpemUoKTsKK30KKwor
SmF2YVNjcmlwdEF1ZGlvTm9kZTo6fkphdmFTY3JpcHRBdWRpb05vZGUoKQoreworICAgIHVuaW5p
dGlhbGl6ZSgpOworfQorCit2b2lkIEphdmFTY3JpcHRBdWRpb05vZGU6OmluaXRpYWxpemUoKQor
eworICAgIGlmIChpc0luaXRpYWxpemVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGRvdWJs
ZSBzYW1wbGVSYXRlID0gY29udGV4dCgpLT5zYW1wbGVSYXRlKCk7CisKKyAgICAvLyBDcmVhdGUg
ZG91YmxlIGJ1ZmZlcnMgb24gYm90aCB0aGUgaW5wdXQgYW5kIG91dHB1dCBzaWRlcy4KKyAgICAv
LyBUaGVzZSBBdWRpb0J1ZmZlcnMgd2lsbCBiZSBkaXJlY3RseSBhY2Nlc3NlZCBpbiB0aGUgbWFp
biB0aHJlYWQgYnkgSmF2YVNjcmlwdC4KKyAgICBtX2lucHV0QnVmZmVycy5hcHBlbmQoQXVkaW9C
dWZmZXI6OmNyZWF0ZSgyLCBidWZmZXJTaXplKCksIHNhbXBsZVJhdGUpKTsKKyAgICBtX2lucHV0
QnVmZmVycy5hcHBlbmQoQXVkaW9CdWZmZXI6OmNyZWF0ZSgyLCBidWZmZXJTaXplKCksIHNhbXBs
ZVJhdGUpKTsKKyAgICBtX291dHB1dEJ1ZmZlcnMuYXBwZW5kKEF1ZGlvQnVmZmVyOjpjcmVhdGUo
MiwgYnVmZmVyU2l6ZSgpLCBzYW1wbGVSYXRlKSk7CisgICAgbV9vdXRwdXRCdWZmZXJzLmFwcGVu
ZChBdWRpb0J1ZmZlcjo6Y3JlYXRlKDIsIGJ1ZmZlclNpemUoKSwgc2FtcGxlUmF0ZSkpOworCisg
ICAgQXVkaW9Ob2RlOjppbml0aWFsaXplKCk7Cit9CisKK3ZvaWQgSmF2YVNjcmlwdEF1ZGlvTm9k
ZTo6dW5pbml0aWFsaXplKCkKK3sKKyAgICBpZiAoIWlzSW5pdGlhbGl6ZWQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9pbnB1dEJ1ZmZlcnMuY2xlYXIoKTsKKyAgICBtX291dHB1dEJ1ZmZl
cnMuY2xlYXIoKTsKKworICAgIEF1ZGlvTm9kZTo6dW5pbml0aWFsaXplKCk7Cit9CisKK0phdmFT
Y3JpcHRBdWRpb05vZGUqIEphdmFTY3JpcHRBdWRpb05vZGU6OnRvSmF2YVNjcmlwdEF1ZGlvTm9k
ZSgpCit7CisgICAgcmV0dXJuIHRoaXM7Cit9CisKK3ZvaWQgSmF2YVNjcmlwdEF1ZGlvTm9kZTo6
cHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQoreworICAgIC8vIERpc2N1c3Npb24gYWJv
dXQgaW5wdXRzIGFuZCBvdXRwdXRzOgorICAgIC8vIEFzIGluIG90aGVyIEF1ZGlvTm9kZXMsIEph
dmFTY3JpcHRBdWRpb05vZGUgdXNlcyBhbiBBdWRpb0J1cyBmb3IgaXRzIGlucHV0IGFuZCBvdXRw
dXQgKHNlZSBpbnB1dEJ1cyBhbmQgb3V0cHV0QnVzIGJlbG93KS4KKyAgICAvLyBBZGRpdGlvbmFs
bHksIHRoZXJlIGlzIGEgZG91YmxlLWJ1ZmZlcmluZyBmb3IgaW5wdXQgYW5kIG91dHB1dCB3aGlj
aCBpcyBleHBvc2VkIGRpcmVjdGx5IHRvIEphdmFTY3JpcHQgKHNlZSBpbnB1dEJ1ZmZlciBhbmQg
b3V0cHV0QnVmZmVyIGJlbG93KS4KKyAgICAvLyBUaGlzIG5vZGUgaXMgdGhlIHByb2R1Y2VyIGZv
ciBpbnB1dEJ1ZmZlciBhbmQgdGhlIGNvbnN1bWVyIGZvciBvdXRwdXRCdWZmZXIuCisgICAgLy8g
VGhlIEphdmFTY3JpcHQgY29kZSBpcyB0aGUgY29uc3VtZXIgb2YgaW5wdXRCdWZmZXIgYW5kIHRo
ZSBwcm9kdWNlciBmb3Igb3V0cHV0QnVmZmVyLgorICAgIAorICAgIC8vIEdldCBpbnB1dCBhbmQg
b3V0cHV0IGJ1c3Nlcy4KKyAgICBBdWRpb0J1cyogaW5wdXRCdXMgPSB0aGlzLT5pbnB1dCgwKS0+
YnVzKCk7CisgICAgQXVkaW9CdXMqIG91dHB1dEJ1cyA9IHRoaXMtPm91dHB1dCgwKS0+YnVzKCk7
CisKKyAgICAvLyBHZXQgaW5wdXQgYW5kIG91dHB1dCBidWZmZXJzLiAgV2UgZG91YmxlLWJ1ZmZl
ciBib3RoIHRoZSBpbnB1dCBhbmQgb3V0cHV0IHNpZGVzLgorICAgIHVuc2lnbmVkIGRvdWJsZUJ1
ZmZlckluZGV4ID0gdGhpcy0+ZG91YmxlQnVmZmVySW5kZXgoKTsKKyAgICBib29sIGlzRG91Ymxl
QnVmZmVySW5kZXhHb29kID0gZG91YmxlQnVmZmVySW5kZXggPCAyICYmIGRvdWJsZUJ1ZmZlcklu
ZGV4IDwgbV9pbnB1dEJ1ZmZlcnMuc2l6ZSgpICYmIGRvdWJsZUJ1ZmZlckluZGV4IDwgbV9vdXRw
dXRCdWZmZXJzLnNpemUoKTsKKyAgICBBU1NFUlQoaXNEb3VibGVCdWZmZXJJbmRleEdvb2QpOwor
ICAgIGlmICghaXNEb3VibGVCdWZmZXJJbmRleEdvb2QpCisgICAgICAgIHJldHVybjsKKyAgICAK
KyAgICBBdWRpb0J1ZmZlciogaW5wdXRCdWZmZXIgPSBtX2lucHV0QnVmZmVyc1tkb3VibGVCdWZm
ZXJJbmRleF0uZ2V0KCk7CisgICAgQXVkaW9CdWZmZXIqIG91dHB1dEJ1ZmZlciA9IG1fb3V0cHV0
QnVmZmVyc1tkb3VibGVCdWZmZXJJbmRleF0uZ2V0KCk7CisKKyAgICAvLyBDaGVjayB0aGUgY29u
c2lzdGVuY3kgb2YgaW5wdXQgYW5kIG91dHB1dCBidWZmZXJzLgorICAgIGJvb2wgYnVmZmVyc0Fy
ZUdvb2QgPSBpbnB1dEJ1ZmZlciAmJiBvdXRwdXRCdWZmZXIgJiYgYnVmZmVyU2l6ZSgpID09IGlu
cHV0QnVmZmVyLT5sZW5ndGgoKSAmJiBidWZmZXJTaXplKCkgPT0gb3V0cHV0QnVmZmVyLT5sZW5n
dGgoKQorICAgICAgICAmJiBtX2J1ZmZlclJlYWRXcml0ZUluZGV4ICsgZnJhbWVzVG9Qcm9jZXNz
IDw9IGJ1ZmZlclNpemUoKTsKKyAgICBBU1NFUlQoYnVmZmVyc0FyZUdvb2QpOworICAgIGlmICgh
YnVmZmVyc0FyZUdvb2QpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFdlIGFzc3VtZSB0aGF0
IGJ1ZmZlclNpemUoKSBpcyBldmVubHkgZGl2aXNpYmxlIGJ5IGZyYW1lc1RvUHJvY2VzcyAtIHNo
b3VsZCBhbHdheXMgYmUgdHJ1ZSwgYnV0IHdlIHNob3VsZCBzdGlsbCBjaGVjay4KKyAgICBib29s
IGlzRnJhbWVzVG9Qcm9jZXNzR29vZCA9IGZyYW1lc1RvUHJvY2VzcyAmJiBidWZmZXJTaXplKCkg
Pj0gZnJhbWVzVG9Qcm9jZXNzICYmICEoYnVmZmVyU2l6ZSgpICUgZnJhbWVzVG9Qcm9jZXNzKTsK
KyAgICBBU1NFUlQoaXNGcmFtZXNUb1Byb2Nlc3NHb29kKTsKKyAgICBpZiAoIWlzRnJhbWVzVG9Q
cm9jZXNzR29vZCkKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICB1bnNpZ25lZCBudW1i
ZXJPZklucHV0Q2hhbm5lbHMgPSBpbnB1dEJ1cy0+bnVtYmVyT2ZDaGFubmVscygpOworICAgIAor
ICAgIGJvb2wgY2hhbm5lbHNBcmVHb29kID0gKG51bWJlck9mSW5wdXRDaGFubmVscyA9PSAxIHx8
IG51bWJlck9mSW5wdXRDaGFubmVscyA9PSAyKSAmJiBvdXRwdXRCdXMtPm51bWJlck9mQ2hhbm5l
bHMoKSA9PSAyOworICAgIEFTU0VSVChjaGFubmVsc0FyZUdvb2QpOworICAgIGlmICghY2hhbm5l
bHNBcmVHb29kKQorICAgICAgICByZXR1cm47CisKKyAgICBmbG9hdCogc291cmNlTCA9IGlucHV0
QnVzLT5jaGFubmVsKDApLT5kYXRhKCk7CisgICAgZmxvYXQqIHNvdXJjZVIgPSBudW1iZXJPZklu
cHV0Q2hhbm5lbHMgPiAxID8gaW5wdXRCdXMtPmNoYW5uZWwoMSktPmRhdGEoKSA6IDA7CisgICAg
ZmxvYXQqIGRlc3RpbmF0aW9uTCA9IG91dHB1dEJ1cy0+Y2hhbm5lbCgwKS0+ZGF0YSgpOworICAg
IGZsb2F0KiBkZXN0aW5hdGlvblIgPSBvdXRwdXRCdXMtPmNoYW5uZWwoMSktPmRhdGEoKTsKKwor
ICAgIC8vIENvcHkgZnJvbSB0aGUgaW5wdXQgdG8gdGhlIGlucHV0IGJ1ZmZlci4gIFNlZSAiYnVm
ZmVyc0FyZUdvb2QiIGNoZWNrIGFib3ZlIGZvciBzYWZldHkuCisgICAgc2l6ZV90IGJ5dGVzVG9D
b3B5ID0gc2l6ZW9mKGZsb2F0KSAqIGZyYW1lc1RvUHJvY2VzczsKKyAgICBtZW1jcHkoaW5wdXRC
dWZmZXItPmdldENoYW5uZWxEYXRhKDApLT5kYXRhKCkgKyBtX2J1ZmZlclJlYWRXcml0ZUluZGV4
LCBzb3VyY2VMLCBieXRlc1RvQ29weSk7CisgICAgCisgICAgaWYgKG51bWJlck9mSW5wdXRDaGFu
bmVscyA9PSAyKQorICAgICAgICBtZW1jcHkoaW5wdXRCdWZmZXItPmdldENoYW5uZWxEYXRhKDEp
LT5kYXRhKCkgKyBtX2J1ZmZlclJlYWRXcml0ZUluZGV4LCBzb3VyY2VSLCBieXRlc1RvQ29weSk7
CisgICAgZWxzZSBpZiAobnVtYmVyT2ZJbnB1dENoYW5uZWxzID09IDEpIHsKKyAgICAgICAgLy8g
SWYgdGhlIGlucHV0IGlzIG1vbm8sIHRoZW4gYWxzbyBjb3B5IHRoZSBtb25vIGlucHV0IHRvIHRo
ZSByaWdodCBjaGFubmVsIG9mIHRoZSBBdWRpb0J1ZmZlciB3aGljaCB0aGUgQXVkaW9Qcm9jZXNz
aW5nRXZlbnQgdXNlcy4KKyAgICAgICAgLy8gRklYTUU6IGl0IGlzIGxpa2VseSB0aGUgYXVkaW8g
QVBJIHdpbGwgZXZvbHZlIHRvIHByZXNlbnQgYW4gQXVkaW9CdWZmZXIgd2l0aCB0aGUgc2FtZSBu
dW1iZXIgb2YgY2hhbm5lbHMgYXMgb3VyIGlucHV0LgorICAgICAgICBtZW1jcHkoaW5wdXRCdWZm
ZXItPmdldENoYW5uZWxEYXRhKDEpLT5kYXRhKCkgKyBtX2J1ZmZlclJlYWRXcml0ZUluZGV4LCBz
b3VyY2VMLCBieXRlc1RvQ29weSk7CisgICAgfQorICAgIAorICAgIC8vIENvcHkgZnJvbSB0aGUg
b3V0cHV0IGJ1ZmZlciB0byB0aGUgb3V0cHV0LiAgU2VlICJidWZmZXJzQXJlR29vZCIgY2hlY2sg
YWJvdmUgZm9yIHNhZmV0eS4KKyAgICBtZW1jcHkoZGVzdGluYXRpb25MLCBvdXRwdXRCdWZmZXIt
PmdldENoYW5uZWxEYXRhKDApLT5kYXRhKCkgKyBtX2J1ZmZlclJlYWRXcml0ZUluZGV4LCBieXRl
c1RvQ29weSk7CisgICAgbWVtY3B5KGRlc3RpbmF0aW9uUiwgb3V0cHV0QnVmZmVyLT5nZXRDaGFu
bmVsRGF0YSgxKS0+ZGF0YSgpICsgbV9idWZmZXJSZWFkV3JpdGVJbmRleCwgYnl0ZXNUb0NvcHkp
OworCisgICAgLy8gVXBkYXRlIHRoZSBidWZmZXJpbmcgaW5kZXguCisgICAgbV9idWZmZXJSZWFk
V3JpdGVJbmRleCA9IChtX2J1ZmZlclJlYWRXcml0ZUluZGV4ICsgZnJhbWVzVG9Qcm9jZXNzKSAl
IGJ1ZmZlclNpemUoKTsKKworICAgIC8vIG1fYnVmZmVyUmVhZFdyaXRlSW5kZXggd2lsbCB3cmFw
IGJhY2sgYXJvdW5kIHRvIDAgd2hlbiB0aGUgY3VycmVudCBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZl
cnMgYXJlIGZ1bGwuCisgICAgLy8gV2hlbiB0aGlzIGhhcHBlbnMsIGZpcmUgYW4gZXZlbnQgYW5k
IHN3YXAgYnVmZmVycy4KKyAgICBpZiAoIW1fYnVmZmVyUmVhZFdyaXRlSW5kZXgpIHsKKyAgICAg
ICAgLy8gQXZvaWQgYnVpbGRpbmcgdXAgcmVxdWVzdHMgb24gdGhlIG1haW4gdGhyZWFkIHRvIGZp
cmUgcHJvY2VzcyBldmVudHMgd2hlbiB0aGV5J3JlIG5vdCBiZWluZyBoYW5kbGVkLgorICAgICAg
ICAvLyBUaGlzIGNvdWxkIGJlIGEgcHJvYmxlbSBpZiB0aGUgbWFpbiB0aHJlYWQgaXMgdmVyeSBi
dXN5IGRvaW5nIG90aGVyIHRoaW5ncyBhbmQgaXMgYmVpbmcgaGVsZCB1cCBoYW5kbGluZyBwcmV2
aW91cyByZXF1ZXN0cy4KKyAgICAgICAgaWYgKG1faXNSZXF1ZXN0T3V0c3RhbmRpbmcpIHsKKyAg
ICAgICAgICAgIC8vIFdlJ3JlIGxhdGUgaW4gaGFuZGxpbmcgdGhlIHByZXZpb3VzIHJlcXVlc3Qu
ICBUaGUgbWFpbiB0aHJlYWQgbXVzdCBiZSB2ZXJ5IGJ1c3kuCisgICAgICAgICAgICAvLyBUaGUg
YmVzdCB3ZSBjYW4gZG8gaXMgY2xlYXIgb3V0IHRoZSBidWZmZXIgb3Vyc2VsZiBoZXJlLgorICAg
ICAgICAgICAgb3V0cHV0QnVmZmVyLT56ZXJvKCk7ICAgICAgICAgICAgCisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAvLyBGaXJlIHRoZSBldmVudCBvbiB0aGUgbWFpbiB0aHJlYWQsIG5v
dCB0aGlzIG9uZSAod2hpY2ggaXMgdGhlIHJlYWx0aW1lIGF1ZGlvIHRocmVhZCkuCisgICAgICAg
ICAgICBtX2RvdWJsZUJ1ZmZlckluZGV4Rm9yRXZlbnQgPSBtX2RvdWJsZUJ1ZmZlckluZGV4Owor
ICAgICAgICAgICAgY2FsbE9uTWFpblRocmVhZChmaXJlUHJvY2Vzc0V2ZW50RGlzcGF0Y2gsIHRo
aXMpOworICAgICAgICAgICAgbV9pc1JlcXVlc3RPdXRzdGFuZGluZyA9IHRydWU7CisgICAgICAg
IH0KKworICAgICAgICBzd2FwQnVmZmVycygpOworICAgIH0KK30KKwordm9pZCBKYXZhU2NyaXB0
QXVkaW9Ob2RlOjpmaXJlUHJvY2Vzc0V2ZW50RGlzcGF0Y2godm9pZCogdXNlckRhdGEpCit7Cisg
ICAgSmF2YVNjcmlwdEF1ZGlvTm9kZSoganNBdWRpb05vZGUgPSBzdGF0aWNfY2FzdDxKYXZhU2Ny
aXB0QXVkaW9Ob2RlKj4odXNlckRhdGEpOworICAgIEFTU0VSVChqc0F1ZGlvTm9kZSk7CisgICAg
aWYgKCFqc0F1ZGlvTm9kZSkKKyAgICAgICAgcmV0dXJuOworCisgICAganNBdWRpb05vZGUtPmZp
cmVQcm9jZXNzRXZlbnQoKTsKK30KKwordm9pZCBKYXZhU2NyaXB0QXVkaW9Ob2RlOjpmaXJlUHJv
Y2Vzc0V2ZW50KCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkgJiYgbV9pc1JlcXVlc3RP
dXRzdGFuZGluZyk7CisgICAgCisgICAgYm9vbCBpc0luZGV4R29vZCA9IG1fZG91YmxlQnVmZmVy
SW5kZXhGb3JFdmVudCA8IDI7CisgICAgQVNTRVJUKGlzSW5kZXhHb29kKTsKKyAgICBpZiAoIWlz
SW5kZXhHb29kKQorICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIEF1ZGlvQnVmZmVyKiBp
bnB1dEJ1ZmZlciA9IG1faW5wdXRCdWZmZXJzW21fZG91YmxlQnVmZmVySW5kZXhGb3JFdmVudF0u
Z2V0KCk7CisgICAgQXVkaW9CdWZmZXIqIG91dHB1dEJ1ZmZlciA9IG1fb3V0cHV0QnVmZmVyc1tt
X2RvdWJsZUJ1ZmZlckluZGV4Rm9yRXZlbnRdLmdldCgpOworICAgIEFTU0VSVChpbnB1dEJ1ZmZl
ciAmJiBvdXRwdXRCdWZmZXIpOworICAgIGlmICghaW5wdXRCdWZmZXIgfHwgIW91dHB1dEJ1ZmZl
cikKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gQXZvaWQgZmlyaW5nIHRoZSBldmVudCBpZiB0
aGUgZG9jdW1lbnQgaGFzIGFscmVhZHkgZ29uZSBhd2F5LgorICAgIGlmIChjb250ZXh0KCktPmhh
c0RvY3VtZW50KCkpIHsKKyAgICAgICAgLy8gTGV0IHRoZSBhdWRpbyB0aHJlYWQga25vdyB3ZSd2
ZSBnb3R0ZW4gdG8gdGhlIHBvaW50IHdoZXJlIGl0J3MgT0sgZm9yIGl0IHRvIG1ha2UgYW5vdGhl
ciByZXF1ZXN0LgorICAgICAgICBtX2lzUmVxdWVzdE91dHN0YW5kaW5nID0gZmFsc2U7CisgICAg
ICAgIAorICAgICAgICAvLyBDYWxsIHRoZSBKYXZhU2NyaXB0IGV2ZW50IGhhbmRsZXIgd2hpY2gg
d2lsbCBkbyB0aGUgYXVkaW8gcHJvY2Vzc2luZy4KKyAgICAgICAgZGlzcGF0Y2hFdmVudChBdWRp
b1Byb2Nlc3NpbmdFdmVudDo6Y3JlYXRlKGlucHV0QnVmZmVyLCBvdXRwdXRCdWZmZXIpKTsKKyAg
ICB9Cit9CisKK3ZvaWQgSmF2YVNjcmlwdEF1ZGlvTm9kZTo6cmVzZXQoKQoreworICAgIG1fYnVm
ZmVyUmVhZFdyaXRlSW5kZXggPSAwOworICAgIG1fZG91YmxlQnVmZmVySW5kZXggPSAwOworCisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI7ICsraSkgeworICAgICAgICBtX2lucHV0QnVm
ZmVyc1tpXS0+emVybygpOworICAgICAgICBtX291dHB1dEJ1ZmZlcnNbaV0tPnplcm8oKTsKKyAg
ICB9Cit9CisKK1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIEphdmFTY3JpcHRBdWRpb05vZGU6OnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBjb25zdF9jYXN0PEph
dmFTY3JpcHRBdWRpb05vZGUqPih0aGlzKS0+Y29udGV4dCgpLT5kb2N1bWVudCgpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpJbmRl
eDogV2ViQ29yZS93ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS93ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmgJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL3dlYmF1ZGlvL0phdmFTY3JpcHRBdWRpb05vZGUuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEphdmFTY3JpcHRBdWRpb05vZGVfaAor
I2RlZmluZSBKYXZhU2NyaXB0QXVkaW9Ob2RlX2gKKworI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVj
dC5oIgorI2luY2x1ZGUgIkF1ZGlvTm9kZS5oIgorI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIK
KyNpbmNsdWRlICJFdmVudFRhcmdldC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBBdWRpb0J1ZmZlcjsKK2NsYXNzIEF1ZGlvQ29udGV4dDsK
K2NsYXNzIEF1ZGlvUHJvY2Vzc2luZ0V2ZW50OworY2xhc3MgRmxvYXQzMkFycmF5OworCisvLyBK
YXZhU2NyaXB0QXVkaW9Ob2RlIGlzIGFuIEF1ZGlvTm9kZSB3aGljaCBhbGxvd3MgZm9yIGFyYml0
cmFyeSBzeW50aGVzaXMgb3IgcHJvY2Vzc2luZyBkaXJlY3RseSB1c2luZyBKYXZhU2NyaXB0Lgor
Ly8gVGhlIEFQSSBhbGxvd3MgZm9yIGEgdmFyaWFibGUgbnVtYmVyIG9mIGlucHV0cyBhbmQgb3V0
cHV0cywgYWx0aG91Z2ggaXQgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBpbnB1dCBvciBvdXRwdXQu
CisvLyBUaGlzIGJhc2ljIGltcGxlbWVudGF0aW9uIHN1cHBvcnRzIG5vIG1vcmUgdGhhbiBvbmUg
aW5wdXQgYW5kIG91dHB1dC4KKy8vIFRoZSAib25hdWRpb3Byb2Nlc3MiIGF0dHJpYnV0ZSBpcyBh
biBldmVudCBsaXN0ZW5lciB3aGljaCB3aWxsIGdldCBjYWxsZWQgcGVyaW9kaWNhbGx5IHdpdGgg
YW4gQXVkaW9Qcm9jZXNzaW5nRXZlbnQgd2hpY2ggaGFzCisvLyBBdWRpb0J1ZmZlcnMgZm9yIGVh
Y2ggaW5wdXQgYW5kIG91dHB1dC4KKworY2xhc3MgSmF2YVNjcmlwdEF1ZGlvTm9kZSA6IHB1Ymxp
YyBBdWRpb05vZGUsIHB1YmxpYyBFdmVudFRhcmdldCB7CitwdWJsaWM6CisgICAgLy8gYnVmZmVy
U2l6ZSBtdXN0IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczogMjU2LCA1MTIsIDEwMjQs
IDIwNDgsIDQwOTYsIDgxOTIsIDE2Mzg0LgorICAgIC8vIFRoaXMgdmFsdWUgY29udHJvbHMgaG93
IGZyZXF1ZW50bHkgdGhlIG9uYXVkaW9wcm9jZXNzIGV2ZW50IGhhbmRsZXIgaXMgY2FsbGVkIGFu
ZCBob3cgbWFueSBzYW1wbGUtZnJhbWVzIG5lZWQgdG8gYmUgcHJvY2Vzc2VkIGVhY2ggY2FsbC4K
KyAgICAvLyBMb3dlciBudW1iZXJzIGZvciBidWZmZXJTaXplIHdpbGwgcmVzdWx0IGluIGEgbG93
ZXIgKGJldHRlcikgbGF0ZW5jeS4gSGlnaGVyIG51bWJlcnMgd2lsbCBiZSBuZWNlc3NhcnkgdG8g
YXZvaWQgYXVkaW8gYnJlYWt1cCBhbmQgZ2xpdGNoZXMuCisgICAgLy8gVGhlIHZhbHVlIGNob3Nl
biBtdXN0IGNhcmVmdWxseSBiYWxhbmNlIGJldHdlZW4gbGF0ZW5jeSBhbmQgYXVkaW8gcXVhbGl0
eS4KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxKYXZhU2NyaXB0QXVkaW9Ob2RlPiBjcmVhdGUoQXVk
aW9Db250ZXh0KiBjb250ZXh0LCBkb3VibGUgc2FtcGxlUmF0ZSwgc2l6ZV90IGJ1ZmZlclNpemUs
IHVuc2lnbmVkIG51bWJlck9mSW5wdXRzID0gMSwgdW5zaWduZWQgbnVtYmVyT2ZPdXRwdXRzID0g
MSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSmF2YVNjcmlwdEF1ZGlvTm9k
ZShjb250ZXh0LCBzYW1wbGVSYXRlLCBidWZmZXJTaXplLCBudW1iZXJPZklucHV0cywgbnVtYmVy
T2ZPdXRwdXRzKSk7CisgICAgfQorCisgICAgdmlydHVhbCB+SmF2YVNjcmlwdEF1ZGlvTm9kZSgp
OworCisgICAgLy8gQXVkaW9Ob2RlCisgICAgdmlydHVhbCB2b2lkIHByb2Nlc3Moc2l6ZV90IGZy
YW1lc1RvUHJvY2Vzcyk7CisgICAgdmlydHVhbCB2b2lkIHJlc2V0KCk7CisgICAgdmlydHVhbCB2
b2lkIGluaXRpYWxpemUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5pbml0aWFsaXplKCk7CisKKyAg
ICAvLyBFdmVudFRhcmdldAorICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OworICAgIHZpcnR1YWwgSmF2YVNjcmlwdEF1ZGlv
Tm9kZSogdG9KYXZhU2NyaXB0QXVkaW9Ob2RlKCk7CisgICAgdmlydHVhbCBFdmVudFRhcmdldERh
dGEqIGV2ZW50VGFyZ2V0RGF0YSgpIHsgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsgfQorICAg
IHZpcnR1YWwgRXZlbnRUYXJnZXREYXRhKiBlbnN1cmVFdmVudFRhcmdldERhdGEoKSAgeyByZXR1
cm4gJm1fZXZlbnRUYXJnZXREYXRhOyB9CisKKyAgICBzaXplX3QgYnVmZmVyU2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fYnVmZmVyU2l6ZTsgfQorCisgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9M
SVNURU5FUihhdWRpb3Byb2Nlc3MpOworCisgICAgLy8gUmVjb25jaWxlIHJlZi9kZXJlZiB3aGlj
aCBhcmUgZGVmaW5lZCBib3RoIGluIEF1ZGlvTm9kZSBhbmQgRXZlbnRUYXJnZXQuCisgICAgdXNp
bmcgQXVkaW9Ob2RlOjpyZWY7CisgICAgdXNpbmcgQXVkaW9Ob2RlOjpkZXJlZjsKKyAgICAKK3By
aXZhdGU6CisgICAgSmF2YVNjcmlwdEF1ZGlvTm9kZShBdWRpb0NvbnRleHQqLCBkb3VibGUgc2Ft
cGxlUmF0ZSwgc2l6ZV90IGJ1ZmZlclNpemUsIHVuc2lnbmVkIG51bWJlck9mSW5wdXRzLCB1bnNp
Z25lZCBudW1iZXJPZk91dHB1dHMpOworCisgICAgc3RhdGljIHZvaWQgZmlyZVByb2Nlc3NFdmVu
dERpc3BhdGNoKHZvaWQqIHVzZXJEYXRhKTsKKyAgICB2b2lkIGZpcmVQcm9jZXNzRXZlbnQoKTsK
KworICAgIC8vIERvdWJsZSBidWZmZXJpbmcKKyAgICB1bnNpZ25lZCBkb3VibGVCdWZmZXJJbmRl
eCgpIGNvbnN0IHsgcmV0dXJuIG1fZG91YmxlQnVmZmVySW5kZXg7IH0KKyAgICB2b2lkIHN3YXBC
dWZmZXJzKCkgeyBtX2RvdWJsZUJ1ZmZlckluZGV4ID0gMSAtIG1fZG91YmxlQnVmZmVySW5kZXg7
IH0KKyAgICB1bnNpZ25lZCBtX2RvdWJsZUJ1ZmZlckluZGV4OworICAgIHVuc2lnbmVkIG1fZG91
YmxlQnVmZmVySW5kZXhGb3JFdmVudDsKKyAgICBWZWN0b3I8UmVmUHRyPEF1ZGlvQnVmZmVyPiA+
IG1faW5wdXRCdWZmZXJzOworICAgIFZlY3RvcjxSZWZQdHI8QXVkaW9CdWZmZXI+ID4gbV9vdXRw
dXRCdWZmZXJzOworCisgICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgeyByZWYoKTsg
fQorICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgeyBkZXJlZigpOyB9CisgICAg
RXZlbnRUYXJnZXREYXRhIG1fZXZlbnRUYXJnZXREYXRhOworCisgICAgc2l6ZV90IG1fYnVmZmVy
U2l6ZTsKKyAgICB1bnNpZ25lZCBtX2J1ZmZlclJlYWRXcml0ZUluZGV4OworICAgIHZvbGF0aWxl
IGJvb2wgbV9pc1JlcXVlc3RPdXRzdGFuZGluZzsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEphdmFTY3JpcHRBdWRpb05vZGVfaApJbmRleDogV2ViQ29yZS93ZWJh
dWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dlYmF1
ZGlvL0phdmFTY3JpcHRBdWRpb05vZGUuaWRsCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93ZWJh
dWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmlkbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMK
KyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKK21vZHVsZSBhdWRpbyB7CisgICAgLy8gRm9yIHJlYWwtdGltZSBhdWRp
byBzdHJlYW0gc3ludGhlc2lzL3Byb2Nlc3NpbmcgaW4gSmF2YVNjcmlwdCAKKyAgICBpbnRlcmZh
Y2UgWworICAgICAgICBDb25kaXRpb25hbD1XRUJfQVVESU8sCisgICAgICAgIEdlbmVyYXRlVG9K
UywKKyAgICAgICAgQ3VzdG9tTWFya0Z1bmN0aW9uLAorI2lmIGRlZmluZWQoVjhfQklORElORykg
JiYgVjhfQklORElORworICAgICAgICBFdmVudFRhcmdldAorI2VuZGlmCisgICAgXSBKYXZhU2Ny
aXB0QXVkaW9Ob2RlIDogQXVkaW9Ob2RlIHsKKyAgICAgICAgLy8gUmVuZGVyaW5nIGNhbGxiYWNr
CisgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9uYXVkaW9wcm9jZXNzOworICAgICAg
ICAKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGxvbmcgYnVmZmVyU2l6ZTsKKyAgICB9Owor
fQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73440</attachid>
            <date>2010-11-09 17:20:39 -0800</date>
            <delta_ts>2010-11-09 21:56:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-48875-20101109172038.patch</filename>
            <type>text/plain</type>
            <size>19962</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MTY5OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzQgQEAKKzIwMTAtMTEtMDkgIENocmlzIFJvZ2VycyAgPGNyb2dlcnNAZ29vZ2xl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgSmF2YVNjcmlwdEF1ZGlvTm9kZSBmaWxlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDg4NzUKKworICAgICAgICBObyBuZXcgdGVzdHMgc2luY2Ug
YXVkaW8gQVBJIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQuCisKKyAgICAgICAgKiB3ZWJhdWRpby9K
YXZhU2NyaXB0QXVkaW9Ob2RlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpKYXZhU2Ny
aXB0QXVkaW9Ob2RlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SmF2YVNjcmlwdEF1ZGlv
Tm9kZTo6SmF2YVNjcmlwdEF1ZGlvTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpKYXZhU2NyaXB0
QXVkaW9Ob2RlOjp+SmF2YVNjcmlwdEF1ZGlvTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpKYXZh
U2NyaXB0QXVkaW9Ob2RlOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkphdmFTY3Jp
cHRBdWRpb05vZGU6OnVuaW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpKYXZhU2NyaXB0
QXVkaW9Ob2RlOjp0b0phdmFTY3JpcHRBdWRpb05vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SmF2
YVNjcmlwdEF1ZGlvTm9kZTo6cHJvY2Vzcyk6CisgICAgICAgIChXZWJDb3JlOjpKYXZhU2NyaXB0
QXVkaW9Ob2RlOjpmaXJlUHJvY2Vzc0V2ZW50RGlzcGF0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6
SmF2YVNjcmlwdEF1ZGlvTm9kZTo6ZmlyZVByb2Nlc3NFdmVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpKYXZhU2NyaXB0QXVkaW9Ob2RlOjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpKYXZhU2Ny
aXB0QXVkaW9Ob2RlOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KToKKyAgICAgICAgKiB3ZWJhdWRp
by9KYXZhU2NyaXB0QXVkaW9Ob2RlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SmF2YVNj
cmlwdEF1ZGlvTm9kZTo6ZXZlbnRUYXJnZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkphdmFT
Y3JpcHRBdWRpb05vZGU6OmVuc3VyZUV2ZW50VGFyZ2V0RGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpKYXZhU2NyaXB0QXVkaW9Ob2RlOjpidWZmZXJTaXplKToKKyAgICAgICAgKFdlYkNvcmU6Okph
dmFTY3JpcHRBdWRpb05vZGU6OmRvdWJsZUJ1ZmZlckluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6
OkphdmFTY3JpcHRBdWRpb05vZGU6OnN3YXBCdWZmZXJzKToKKyAgICAgICAgKFdlYkNvcmU6Okph
dmFTY3JpcHRBdWRpb05vZGU6OnJlZkV2ZW50VGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6Okph
dmFTY3JpcHRBdWRpb05vZGU6OmRlcmVmRXZlbnRUYXJnZXQpOgorICAgICAgICAqIHdlYmF1ZGlv
L0phdmFTY3JpcHRBdWRpb05vZGUuaWRsOiBBZGRlZC4KKwogMjAxMC0xMS0wOSAgQWJoaXNoZWsg
QXJ5YSAgPGluZmVybm9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFudHRp
IEtvaXZpc3RvLgpJbmRleDogV2ViQ29yZS93ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dlYmF1ZGlvL0phdmFTY3JpcHRBdWRpb05vZGUuY3Bw
CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmNw
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorCisjaW5jbHVkZSAiSmF2YVNjcmlw
dEF1ZGlvTm9kZS5oIgorCisjaW5jbHVkZSAiQXVkaW9CdWZmZXIuaCIKKyNpbmNsdWRlICJBdWRp
b0J1cy5oIgorI2luY2x1ZGUgIkF1ZGlvQ29udGV4dC5oIgorI2luY2x1ZGUgIkF1ZGlvTm9kZUlu
cHV0LmgiCisjaW5jbHVkZSAiQXVkaW9Ob2RlT3V0cHV0LmgiCisjaW5jbHVkZSAiQXVkaW9Qcm9j
ZXNzaW5nRXZlbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZsb2F0MzJB
cnJheS5oIgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY29uc3Qgc2l6ZV90IERlZmF1bHRCdWZmZXJTaXplID0gNDA5NjsKKworUGFzc1JlZlB0
cjxKYXZhU2NyaXB0QXVkaW9Ob2RlPiBKYXZhU2NyaXB0QXVkaW9Ob2RlOjpjcmVhdGUoQXVkaW9D
b250ZXh0KiBjb250ZXh0LCBkb3VibGUgc2FtcGxlUmF0ZSwgc2l6ZV90IGJ1ZmZlclNpemUsIHVu
c2lnbmVkIG51bWJlck9mSW5wdXRzLCB1bnNpZ25lZCBudW1iZXJPZk91dHB1dHMpCit7CisgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBKYXZhU2NyaXB0QXVkaW9Ob2RlKGNvbnRleHQsIHNhbXBsZVJh
dGUsIGJ1ZmZlclNpemUsIG51bWJlck9mSW5wdXRzLCBudW1iZXJPZk91dHB1dHMpKTsKK30KKwor
SmF2YVNjcmlwdEF1ZGlvTm9kZTo6SmF2YVNjcmlwdEF1ZGlvTm9kZShBdWRpb0NvbnRleHQqIGNv
bnRleHQsIGRvdWJsZSBzYW1wbGVSYXRlLCBzaXplX3QgYnVmZmVyU2l6ZSwgdW5zaWduZWQgbnVt
YmVyT2ZJbnB1dHMsIHVuc2lnbmVkIG51bWJlck9mT3V0cHV0cykKKyAgICA6IEF1ZGlvTm9kZShj
b250ZXh0LCBzYW1wbGVSYXRlKQorICAgICwgbV9kb3VibGVCdWZmZXJJbmRleCgwKQorICAgICwg
bV9kb3VibGVCdWZmZXJJbmRleEZvckV2ZW50KDApCisgICAgLCBtX2J1ZmZlclNpemUoYnVmZmVy
U2l6ZSkKKyAgICAsIG1fYnVmZmVyUmVhZFdyaXRlSW5kZXgoMCkKKyAgICAsIG1faXNSZXF1ZXN0
T3V0c3RhbmRpbmcoZmFsc2UpCit7CisgICAgLy8gQ2hlY2sgZm9yIHZhbGlkIGJ1ZmZlciBzaXpl
LgorICAgIHN3aXRjaCAoYnVmZmVyU2l6ZSkgeworICAgIGNhc2UgMjU2OgorICAgIGNhc2UgNTEy
OgorICAgIGNhc2UgMTAyNDoKKyAgICBjYXNlIDIwNDg6CisgICAgY2FzZSA0MDk2OgorICAgIGNh
c2UgODE5MjoKKyAgICBjYXNlIDE2Mzg0OgorICAgICAgICBtX2J1ZmZlclNpemUgPSBidWZmZXJT
aXplOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBtX2J1ZmZlclNpemUg
PSBEZWZhdWx0QnVmZmVyU2l6ZTsKKyAgICB9CisgICAgICAgIAorICAgIC8vIFJlZ2FyZGxlc3Mg
b2YgdGhlIGFsbG93ZWQgYnVmZmVyIHNpemVzIGFib3ZlLCB3ZSBzdGlsbCBuZWVkIHRvIHByb2Nl
c3MgYXQgdGhlIGdyYW51bGFyaXR5IG9mIHRoZSBBdWRpb05vZGUuCisgICAgaWYgKG1fYnVmZmVy
U2l6ZSA8IEF1ZGlvTm9kZTo6UHJvY2Vzc2luZ1NpemVJbkZyYW1lcykKKyAgICAgICAgbV9idWZm
ZXJTaXplID0gQXVkaW9Ob2RlOjpQcm9jZXNzaW5nU2l6ZUluRnJhbWVzOworCisgICAgLy8gRklY
TUU6IFJpZ2h0IG5vdyB3ZSdyZSBoYXJkY29kZWQgdG8gc2luZ2xlIGlucHV0IGFuZCBzaW5nbGUg
b3V0cHV0LgorICAgIC8vIEFsdGhvdWdoIHRoZSBzcGVjaWZpY2F0aW9uIHNheXMgdGhpcyBpcyBP
SyBmb3IgYSBzaW1wbGUgaW1wbGVtZW50YXRpb24sIG11bHRpcGxlIGlucHV0cyBhbmQgb3V0cHV0
cyB3b3VsZCBiZSBnb29kLgorICAgIEFTU0VSVF9VTlVTRUQobnVtYmVyT2ZJbnB1dHMsIG51bWJl
ck9mSW5wdXRzID09IDEpOworICAgIEFTU0VSVF9VTlVTRUQobnVtYmVyT2ZPdXRwdXRzLCBudW1i
ZXJPZk91dHB1dHMgPT0gMSk7CisgICAgYWRkSW5wdXQoYWRvcHRQdHIobmV3IEF1ZGlvTm9kZUlu
cHV0KHRoaXMpKSk7CisgICAgYWRkT3V0cHV0KGFkb3B0UHRyKG5ldyBBdWRpb05vZGVPdXRwdXQo
dGhpcywgMikpKTsKKworICAgIHNldFR5cGUoTm9kZVR5cGVKYXZhU2NyaXB0KTsKKworICAgIGlu
aXRpYWxpemUoKTsKK30KKworSmF2YVNjcmlwdEF1ZGlvTm9kZTo6fkphdmFTY3JpcHRBdWRpb05v
ZGUoKQoreworICAgIHVuaW5pdGlhbGl6ZSgpOworfQorCit2b2lkIEphdmFTY3JpcHRBdWRpb05v
ZGU6OmluaXRpYWxpemUoKQoreworICAgIGlmIChpc0luaXRpYWxpemVkKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGRvdWJsZSBzYW1wbGVSYXRlID0gY29udGV4dCgpLT5zYW1wbGVSYXRlKCk7
CisKKyAgICAvLyBDcmVhdGUgZG91YmxlIGJ1ZmZlcnMgb24gYm90aCB0aGUgaW5wdXQgYW5kIG91
dHB1dCBzaWRlcy4KKyAgICAvLyBUaGVzZSBBdWRpb0J1ZmZlcnMgd2lsbCBiZSBkaXJlY3RseSBh
Y2Nlc3NlZCBpbiB0aGUgbWFpbiB0aHJlYWQgYnkgSmF2YVNjcmlwdC4KKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgMjsgKytpKSB7CisgICAgICAgIG1faW5wdXRCdWZmZXJzLmFwcGVuZChB
dWRpb0J1ZmZlcjo6Y3JlYXRlKDIsIGJ1ZmZlclNpemUoKSwgc2FtcGxlUmF0ZSkpOworICAgICAg
ICBtX291dHB1dEJ1ZmZlcnMuYXBwZW5kKEF1ZGlvQnVmZmVyOjpjcmVhdGUoMiwgYnVmZmVyU2l6
ZSgpLCBzYW1wbGVSYXRlKSk7CisgICAgfQorCisgICAgQXVkaW9Ob2RlOjppbml0aWFsaXplKCk7
Cit9CisKK3ZvaWQgSmF2YVNjcmlwdEF1ZGlvTm9kZTo6dW5pbml0aWFsaXplKCkKK3sKKyAgICBp
ZiAoIWlzSW5pdGlhbGl6ZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbnB1dEJ1ZmZl
cnMuY2xlYXIoKTsKKyAgICBtX291dHB1dEJ1ZmZlcnMuY2xlYXIoKTsKKworICAgIEF1ZGlvTm9k
ZTo6dW5pbml0aWFsaXplKCk7Cit9CisKK0phdmFTY3JpcHRBdWRpb05vZGUqIEphdmFTY3JpcHRB
dWRpb05vZGU6OnRvSmF2YVNjcmlwdEF1ZGlvTm9kZSgpCit7CisgICAgcmV0dXJuIHRoaXM7Cit9
CisKK3ZvaWQgSmF2YVNjcmlwdEF1ZGlvTm9kZTo6cHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9j
ZXNzKQoreworICAgIC8vIERpc2N1c3Npb24gYWJvdXQgaW5wdXRzIGFuZCBvdXRwdXRzOgorICAg
IC8vIEFzIGluIG90aGVyIEF1ZGlvTm9kZXMsIEphdmFTY3JpcHRBdWRpb05vZGUgdXNlcyBhbiBB
dWRpb0J1cyBmb3IgaXRzIGlucHV0IGFuZCBvdXRwdXQgKHNlZSBpbnB1dEJ1cyBhbmQgb3V0cHV0
QnVzIGJlbG93KS4KKyAgICAvLyBBZGRpdGlvbmFsbHksIHRoZXJlIGlzIGEgZG91YmxlLWJ1ZmZl
cmluZyBmb3IgaW5wdXQgYW5kIG91dHB1dCB3aGljaCBpcyBleHBvc2VkIGRpcmVjdGx5IHRvIEph
dmFTY3JpcHQgKHNlZSBpbnB1dEJ1ZmZlciBhbmQgb3V0cHV0QnVmZmVyIGJlbG93KS4KKyAgICAv
LyBUaGlzIG5vZGUgaXMgdGhlIHByb2R1Y2VyIGZvciBpbnB1dEJ1ZmZlciBhbmQgdGhlIGNvbnN1
bWVyIGZvciBvdXRwdXRCdWZmZXIuCisgICAgLy8gVGhlIEphdmFTY3JpcHQgY29kZSBpcyB0aGUg
Y29uc3VtZXIgb2YgaW5wdXRCdWZmZXIgYW5kIHRoZSBwcm9kdWNlciBmb3Igb3V0cHV0QnVmZmVy
LgorICAgIAorICAgIC8vIEdldCBpbnB1dCBhbmQgb3V0cHV0IGJ1c3Nlcy4KKyAgICBBdWRpb0J1
cyogaW5wdXRCdXMgPSB0aGlzLT5pbnB1dCgwKS0+YnVzKCk7CisgICAgQXVkaW9CdXMqIG91dHB1
dEJ1cyA9IHRoaXMtPm91dHB1dCgwKS0+YnVzKCk7CisKKyAgICAvLyBHZXQgaW5wdXQgYW5kIG91
dHB1dCBidWZmZXJzLiAgV2UgZG91YmxlLWJ1ZmZlciBib3RoIHRoZSBpbnB1dCBhbmQgb3V0cHV0
IHNpZGVzLgorICAgIHVuc2lnbmVkIGRvdWJsZUJ1ZmZlckluZGV4ID0gdGhpcy0+ZG91YmxlQnVm
ZmVySW5kZXgoKTsKKyAgICBib29sIGlzRG91YmxlQnVmZmVySW5kZXhHb29kID0gZG91YmxlQnVm
ZmVySW5kZXggPCAyICYmIGRvdWJsZUJ1ZmZlckluZGV4IDwgbV9pbnB1dEJ1ZmZlcnMuc2l6ZSgp
ICYmIGRvdWJsZUJ1ZmZlckluZGV4IDwgbV9vdXRwdXRCdWZmZXJzLnNpemUoKTsKKyAgICBBU1NF
UlQoaXNEb3VibGVCdWZmZXJJbmRleEdvb2QpOworICAgIGlmICghaXNEb3VibGVCdWZmZXJJbmRl
eEdvb2QpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBBdWRpb0J1ZmZlciogaW5wdXRCdWZm
ZXIgPSBtX2lucHV0QnVmZmVyc1tkb3VibGVCdWZmZXJJbmRleF0uZ2V0KCk7CisgICAgQXVkaW9C
dWZmZXIqIG91dHB1dEJ1ZmZlciA9IG1fb3V0cHV0QnVmZmVyc1tkb3VibGVCdWZmZXJJbmRleF0u
Z2V0KCk7CisKKyAgICAvLyBDaGVjayB0aGUgY29uc2lzdGVuY3kgb2YgaW5wdXQgYW5kIG91dHB1
dCBidWZmZXJzLgorICAgIGJvb2wgYnVmZmVyc0FyZUdvb2QgPSBpbnB1dEJ1ZmZlciAmJiBvdXRw
dXRCdWZmZXIgJiYgYnVmZmVyU2l6ZSgpID09IGlucHV0QnVmZmVyLT5sZW5ndGgoKSAmJiBidWZm
ZXJTaXplKCkgPT0gb3V0cHV0QnVmZmVyLT5sZW5ndGgoKQorICAgICAgICAmJiBtX2J1ZmZlclJl
YWRXcml0ZUluZGV4ICsgZnJhbWVzVG9Qcm9jZXNzIDw9IGJ1ZmZlclNpemUoKTsKKyAgICBBU1NF
UlQoYnVmZmVyc0FyZUdvb2QpOworICAgIGlmICghYnVmZmVyc0FyZUdvb2QpCisgICAgICAgIHJl
dHVybjsKKworICAgIC8vIFdlIGFzc3VtZSB0aGF0IGJ1ZmZlclNpemUoKSBpcyBldmVubHkgZGl2
aXNpYmxlIGJ5IGZyYW1lc1RvUHJvY2VzcyAtIHNob3VsZCBhbHdheXMgYmUgdHJ1ZSwgYnV0IHdl
IHNob3VsZCBzdGlsbCBjaGVjay4KKyAgICBib29sIGlzRnJhbWVzVG9Qcm9jZXNzR29vZCA9IGZy
YW1lc1RvUHJvY2VzcyAmJiBidWZmZXJTaXplKCkgPj0gZnJhbWVzVG9Qcm9jZXNzICYmICEoYnVm
ZmVyU2l6ZSgpICUgZnJhbWVzVG9Qcm9jZXNzKTsKKyAgICBBU1NFUlQoaXNGcmFtZXNUb1Byb2Nl
c3NHb29kKTsKKyAgICBpZiAoIWlzRnJhbWVzVG9Qcm9jZXNzR29vZCkKKyAgICAgICAgcmV0dXJu
OworICAgICAgICAKKyAgICB1bnNpZ25lZCBudW1iZXJPZklucHV0Q2hhbm5lbHMgPSBpbnB1dEJ1
cy0+bnVtYmVyT2ZDaGFubmVscygpOworICAgIAorICAgIGJvb2wgY2hhbm5lbHNBcmVHb29kID0g
KG51bWJlck9mSW5wdXRDaGFubmVscyA9PSAxIHx8IG51bWJlck9mSW5wdXRDaGFubmVscyA9PSAy
KSAmJiBvdXRwdXRCdXMtPm51bWJlck9mQ2hhbm5lbHMoKSA9PSAyOworICAgIEFTU0VSVChjaGFu
bmVsc0FyZUdvb2QpOworICAgIGlmICghY2hhbm5lbHNBcmVHb29kKQorICAgICAgICByZXR1cm47
CisKKyAgICBmbG9hdCogc291cmNlTCA9IGlucHV0QnVzLT5jaGFubmVsKDApLT5kYXRhKCk7Cisg
ICAgZmxvYXQqIHNvdXJjZVIgPSBudW1iZXJPZklucHV0Q2hhbm5lbHMgPiAxID8gaW5wdXRCdXMt
PmNoYW5uZWwoMSktPmRhdGEoKSA6IDA7CisgICAgZmxvYXQqIGRlc3RpbmF0aW9uTCA9IG91dHB1
dEJ1cy0+Y2hhbm5lbCgwKS0+ZGF0YSgpOworICAgIGZsb2F0KiBkZXN0aW5hdGlvblIgPSBvdXRw
dXRCdXMtPmNoYW5uZWwoMSktPmRhdGEoKTsKKworICAgIC8vIENvcHkgZnJvbSB0aGUgaW5wdXQg
dG8gdGhlIGlucHV0IGJ1ZmZlci4gIFNlZSAiYnVmZmVyc0FyZUdvb2QiIGNoZWNrIGFib3ZlIGZv
ciBzYWZldHkuCisgICAgc2l6ZV90IGJ5dGVzVG9Db3B5ID0gc2l6ZW9mKGZsb2F0KSAqIGZyYW1l
c1RvUHJvY2VzczsKKyAgICBtZW1jcHkoaW5wdXRCdWZmZXItPmdldENoYW5uZWxEYXRhKDApLT5k
YXRhKCkgKyBtX2J1ZmZlclJlYWRXcml0ZUluZGV4LCBzb3VyY2VMLCBieXRlc1RvQ29weSk7Cisg
ICAgCisgICAgaWYgKG51bWJlck9mSW5wdXRDaGFubmVscyA9PSAyKQorICAgICAgICBtZW1jcHko
aW5wdXRCdWZmZXItPmdldENoYW5uZWxEYXRhKDEpLT5kYXRhKCkgKyBtX2J1ZmZlclJlYWRXcml0
ZUluZGV4LCBzb3VyY2VSLCBieXRlc1RvQ29weSk7CisgICAgZWxzZSBpZiAobnVtYmVyT2ZJbnB1
dENoYW5uZWxzID09IDEpIHsKKyAgICAgICAgLy8gSWYgdGhlIGlucHV0IGlzIG1vbm8sIHRoZW4g
YWxzbyBjb3B5IHRoZSBtb25vIGlucHV0IHRvIHRoZSByaWdodCBjaGFubmVsIG9mIHRoZSBBdWRp
b0J1ZmZlciB3aGljaCB0aGUgQXVkaW9Qcm9jZXNzaW5nRXZlbnQgdXNlcy4KKyAgICAgICAgLy8g
RklYTUU6IGl0IGlzIGxpa2VseSB0aGUgYXVkaW8gQVBJIHdpbGwgZXZvbHZlIHRvIHByZXNlbnQg
YW4gQXVkaW9CdWZmZXIgd2l0aCB0aGUgc2FtZSBudW1iZXIgb2YgY2hhbm5lbHMgYXMgb3VyIGlu
cHV0LgorICAgICAgICBtZW1jcHkoaW5wdXRCdWZmZXItPmdldENoYW5uZWxEYXRhKDEpLT5kYXRh
KCkgKyBtX2J1ZmZlclJlYWRXcml0ZUluZGV4LCBzb3VyY2VMLCBieXRlc1RvQ29weSk7CisgICAg
fQorICAgIAorICAgIC8vIENvcHkgZnJvbSB0aGUgb3V0cHV0IGJ1ZmZlciB0byB0aGUgb3V0cHV0
LiAgU2VlICJidWZmZXJzQXJlR29vZCIgY2hlY2sgYWJvdmUgZm9yIHNhZmV0eS4KKyAgICBtZW1j
cHkoZGVzdGluYXRpb25MLCBvdXRwdXRCdWZmZXItPmdldENoYW5uZWxEYXRhKDApLT5kYXRhKCkg
KyBtX2J1ZmZlclJlYWRXcml0ZUluZGV4LCBieXRlc1RvQ29weSk7CisgICAgbWVtY3B5KGRlc3Rp
bmF0aW9uUiwgb3V0cHV0QnVmZmVyLT5nZXRDaGFubmVsRGF0YSgxKS0+ZGF0YSgpICsgbV9idWZm
ZXJSZWFkV3JpdGVJbmRleCwgYnl0ZXNUb0NvcHkpOworCisgICAgLy8gVXBkYXRlIHRoZSBidWZm
ZXJpbmcgaW5kZXguCisgICAgbV9idWZmZXJSZWFkV3JpdGVJbmRleCA9IChtX2J1ZmZlclJlYWRX
cml0ZUluZGV4ICsgZnJhbWVzVG9Qcm9jZXNzKSAlIGJ1ZmZlclNpemUoKTsKKworICAgIC8vIG1f
YnVmZmVyUmVhZFdyaXRlSW5kZXggd2lsbCB3cmFwIGJhY2sgYXJvdW5kIHRvIDAgd2hlbiB0aGUg
Y3VycmVudCBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlcnMgYXJlIGZ1bGwuCisgICAgLy8gV2hlbiB0
aGlzIGhhcHBlbnMsIGZpcmUgYW4gZXZlbnQgYW5kIHN3YXAgYnVmZmVycy4KKyAgICBpZiAoIW1f
YnVmZmVyUmVhZFdyaXRlSW5kZXgpIHsKKyAgICAgICAgLy8gQXZvaWQgYnVpbGRpbmcgdXAgcmVx
dWVzdHMgb24gdGhlIG1haW4gdGhyZWFkIHRvIGZpcmUgcHJvY2VzcyBldmVudHMgd2hlbiB0aGV5
J3JlIG5vdCBiZWluZyBoYW5kbGVkLgorICAgICAgICAvLyBUaGlzIGNvdWxkIGJlIGEgcHJvYmxl
bSBpZiB0aGUgbWFpbiB0aHJlYWQgaXMgdmVyeSBidXN5IGRvaW5nIG90aGVyIHRoaW5ncyBhbmQg
aXMgYmVpbmcgaGVsZCB1cCBoYW5kbGluZyBwcmV2aW91cyByZXF1ZXN0cy4KKyAgICAgICAgaWYg
KG1faXNSZXF1ZXN0T3V0c3RhbmRpbmcpIHsKKyAgICAgICAgICAgIC8vIFdlJ3JlIGxhdGUgaW4g
aGFuZGxpbmcgdGhlIHByZXZpb3VzIHJlcXVlc3QuICBUaGUgbWFpbiB0aHJlYWQgbXVzdCBiZSB2
ZXJ5IGJ1c3kuCisgICAgICAgICAgICAvLyBUaGUgYmVzdCB3ZSBjYW4gZG8gaXMgY2xlYXIgb3V0
IHRoZSBidWZmZXIgb3Vyc2VsZiBoZXJlLgorICAgICAgICAgICAgb3V0cHV0QnVmZmVyLT56ZXJv
KCk7ICAgICAgICAgICAgCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBSZWZlcmVu
Y2Ugb3Vyc2VsZiBzbyB3ZSBkb24ndCBhY2NpZGVudGFsbHkgZ2V0IGRlbGV0ZWQgYmVmb3JlIGZp
cmVQcm9jZXNzRXZlbnQoKSBnZXRzIGNhbGxlZC4KKyAgICAgICAgICAgIHJlZigpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICAvLyBGaXJlIHRoZSBldmVudCBvbiB0aGUgbWFpbiB0aHJlYWQs
IG5vdCB0aGlzIG9uZSAod2hpY2ggaXMgdGhlIHJlYWx0aW1lIGF1ZGlvIHRocmVhZCkuCisgICAg
ICAgICAgICBtX2RvdWJsZUJ1ZmZlckluZGV4Rm9yRXZlbnQgPSBtX2RvdWJsZUJ1ZmZlckluZGV4
OworICAgICAgICAgICAgY2FsbE9uTWFpblRocmVhZChmaXJlUHJvY2Vzc0V2ZW50RGlzcGF0Y2gs
IHRoaXMpOworICAgICAgICAgICAgbV9pc1JlcXVlc3RPdXRzdGFuZGluZyA9IHRydWU7CisgICAg
ICAgIH0KKworICAgICAgICBzd2FwQnVmZmVycygpOworICAgIH0KK30KKwordm9pZCBKYXZhU2Ny
aXB0QXVkaW9Ob2RlOjpmaXJlUHJvY2Vzc0V2ZW50RGlzcGF0Y2godm9pZCogdXNlckRhdGEpCit7
CisgICAgSmF2YVNjcmlwdEF1ZGlvTm9kZSoganNBdWRpb05vZGUgPSBzdGF0aWNfY2FzdDxKYXZh
U2NyaXB0QXVkaW9Ob2RlKj4odXNlckRhdGEpOworICAgIEFTU0VSVChqc0F1ZGlvTm9kZSk7Cisg
ICAgaWYgKCFqc0F1ZGlvTm9kZSkKKyAgICAgICAgcmV0dXJuOworCisgICAganNBdWRpb05vZGUt
PmZpcmVQcm9jZXNzRXZlbnQoKTsKKworICAgIC8vIERlLXJlZmVyZW5jZSB0byBtYXRjaCB0aGUg
cmVmKCkgY2FsbCBpbiBwcm9jZXNzKCkuCisgICAganNBdWRpb05vZGUtPmRlcmVmKCk7Cit9CisK
K3ZvaWQgSmF2YVNjcmlwdEF1ZGlvTm9kZTo6ZmlyZVByb2Nlc3NFdmVudCgpCit7CisgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpICYmIG1faXNSZXF1ZXN0T3V0c3RhbmRpbmcpOworICAgIAorICAg
IGJvb2wgaXNJbmRleEdvb2QgPSBtX2RvdWJsZUJ1ZmZlckluZGV4Rm9yRXZlbnQgPCAyOworICAg
IEFTU0VSVChpc0luZGV4R29vZCk7CisgICAgaWYgKCFpc0luZGV4R29vZCkKKyAgICAgICAgcmV0
dXJuOworICAgICAgICAKKyAgICBBdWRpb0J1ZmZlciogaW5wdXRCdWZmZXIgPSBtX2lucHV0QnVm
ZmVyc1ttX2RvdWJsZUJ1ZmZlckluZGV4Rm9yRXZlbnRdLmdldCgpOworICAgIEF1ZGlvQnVmZmVy
KiBvdXRwdXRCdWZmZXIgPSBtX291dHB1dEJ1ZmZlcnNbbV9kb3VibGVCdWZmZXJJbmRleEZvckV2
ZW50XS5nZXQoKTsKKyAgICBBU1NFUlQoaW5wdXRCdWZmZXIgJiYgb3V0cHV0QnVmZmVyKTsKKyAg
ICBpZiAoIWlucHV0QnVmZmVyIHx8ICFvdXRwdXRCdWZmZXIpCisgICAgICAgIHJldHVybjsKKwor
ICAgIC8vIEF2b2lkIGZpcmluZyB0aGUgZXZlbnQgaWYgdGhlIGRvY3VtZW50IGhhcyBhbHJlYWR5
IGdvbmUgYXdheS4KKyAgICBpZiAoY29udGV4dCgpLT5oYXNEb2N1bWVudCgpKSB7CisgICAgICAg
IC8vIExldCB0aGUgYXVkaW8gdGhyZWFkIGtub3cgd2UndmUgZ290dGVuIHRvIHRoZSBwb2ludCB3
aGVyZSBpdCdzIE9LIGZvciBpdCB0byBtYWtlIGFub3RoZXIgcmVxdWVzdC4KKyAgICAgICAgbV9p
c1JlcXVlc3RPdXRzdGFuZGluZyA9IGZhbHNlOworICAgICAgICAKKyAgICAgICAgLy8gQ2FsbCB0
aGUgSmF2YVNjcmlwdCBldmVudCBoYW5kbGVyIHdoaWNoIHdpbGwgZG8gdGhlIGF1ZGlvIHByb2Nl
c3NpbmcuCisgICAgICAgIGRpc3BhdGNoRXZlbnQoQXVkaW9Qcm9jZXNzaW5nRXZlbnQ6OmNyZWF0
ZShpbnB1dEJ1ZmZlciwgb3V0cHV0QnVmZmVyKSk7CisgICAgfQorfQorCit2b2lkIEphdmFTY3Jp
cHRBdWRpb05vZGU6OnJlc2V0KCkKK3sKKyAgICBtX2J1ZmZlclJlYWRXcml0ZUluZGV4ID0gMDsK
KyAgICBtX2RvdWJsZUJ1ZmZlckluZGV4ID0gMDsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCAyOyArK2kpIHsKKyAgICAgICAgbV9pbnB1dEJ1ZmZlcnNbaV0tPnplcm8oKTsKKyAgICAg
ICAgbV9vdXRwdXRCdWZmZXJzW2ldLT56ZXJvKCk7CisgICAgfQorfQorCitTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBKYXZhU2NyaXB0QXVkaW9Ob2RlOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gY29uc3RfY2FzdDxKYXZhU2NyaXB0QXVkaW9Ob2RlKj4odGhp
cyktPmNvbnRleHQoKS0+ZG9jdW1lbnQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFdlYkNvcmUvd2ViYXVkaW8vSmF2
YVNjcmlwdEF1ZGlvTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd2ViYXVkaW8vSmF2YVNj
cmlwdEF1ZGlvTm9kZS5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93ZWJhdWRpby9KYXZhU2Ny
aXB0QXVkaW9Ob2RlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04K
KyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBKYXZhU2NyaXB0QXVkaW9Ob2RlX2gKKyNkZWZpbmUgSmF2YVNjcmlwdEF1ZGlv
Tm9kZV9oCisKKyNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJBdWRpb05v
ZGUuaCIKKyNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiRXZlbnRUYXJnZXQu
aCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
QXVkaW9CdWZmZXI7CitjbGFzcyBBdWRpb0NvbnRleHQ7CitjbGFzcyBBdWRpb1Byb2Nlc3NpbmdF
dmVudDsKK2NsYXNzIEZsb2F0MzJBcnJheTsKKworLy8gSmF2YVNjcmlwdEF1ZGlvTm9kZSBpcyBh
biBBdWRpb05vZGUgd2hpY2ggYWxsb3dzIGZvciBhcmJpdHJhcnkgc3ludGhlc2lzIG9yIHByb2Nl
c3NpbmcgZGlyZWN0bHkgdXNpbmcgSmF2YVNjcmlwdC4KKy8vIFRoZSBBUEkgYWxsb3dzIGZvciBh
IHZhcmlhYmxlIG51bWJlciBvZiBpbnB1dHMgYW5kIG91dHB1dHMsIGFsdGhvdWdoIGl0IG11c3Qg
aGF2ZSBhdCBsZWFzdCBvbmUgaW5wdXQgb3Igb3V0cHV0LgorLy8gVGhpcyBiYXNpYyBpbXBsZW1l
bnRhdGlvbiBzdXBwb3J0cyBubyBtb3JlIHRoYW4gb25lIGlucHV0IGFuZCBvdXRwdXQuCisvLyBU
aGUgIm9uYXVkaW9wcm9jZXNzIiBhdHRyaWJ1dGUgaXMgYW4gZXZlbnQgbGlzdGVuZXIgd2hpY2gg
d2lsbCBnZXQgY2FsbGVkIHBlcmlvZGljYWxseSB3aXRoIGFuIEF1ZGlvUHJvY2Vzc2luZ0V2ZW50
IHdoaWNoIGhhcworLy8gQXVkaW9CdWZmZXJzIGZvciBlYWNoIGlucHV0IGFuZCBvdXRwdXQuCisK
K2NsYXNzIEphdmFTY3JpcHRBdWRpb05vZGUgOiBwdWJsaWMgQXVkaW9Ob2RlLCBwdWJsaWMgRXZl
bnRUYXJnZXQgeworcHVibGljOgorICAgIC8vIGJ1ZmZlclNpemUgbXVzdCBiZSBvbmUgb2YgdGhl
IGZvbGxvd2luZyB2YWx1ZXM6IDI1NiwgNTEyLCAxMDI0LCAyMDQ4LCA0MDk2LCA4MTkyLCAxNjM4
NC4KKyAgICAvLyBUaGlzIHZhbHVlIGNvbnRyb2xzIGhvdyBmcmVxdWVudGx5IHRoZSBvbmF1ZGlv
cHJvY2VzcyBldmVudCBoYW5kbGVyIGlzIGNhbGxlZCBhbmQgaG93IG1hbnkgc2FtcGxlLWZyYW1l
cyBuZWVkIHRvIGJlIHByb2Nlc3NlZCBlYWNoIGNhbGwuCisgICAgLy8gTG93ZXIgbnVtYmVycyBm
b3IgYnVmZmVyU2l6ZSB3aWxsIHJlc3VsdCBpbiBhIGxvd2VyIChiZXR0ZXIpIGxhdGVuY3kuIEhp
Z2hlciBudW1iZXJzIHdpbGwgYmUgbmVjZXNzYXJ5IHRvIGF2b2lkIGF1ZGlvIGJyZWFrdXAgYW5k
IGdsaXRjaGVzLgorICAgIC8vIFRoZSB2YWx1ZSBjaG9zZW4gbXVzdCBjYXJlZnVsbHkgYmFsYW5j
ZSBiZXR3ZWVuIGxhdGVuY3kgYW5kIGF1ZGlvIHF1YWxpdHkuCisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8SmF2YVNjcmlwdEF1ZGlvTm9kZT4gY3JlYXRlKEF1ZGlvQ29udGV4dCosIGRvdWJsZSBzYW1w
bGVSYXRlLCBzaXplX3QgYnVmZmVyU2l6ZSwgdW5zaWduZWQgbnVtYmVyT2ZJbnB1dHMgPSAxLCB1
bnNpZ25lZCBudW1iZXJPZk91dHB1dHMgPSAxKTsKKworICAgIHZpcnR1YWwgfkphdmFTY3JpcHRB
dWRpb05vZGUoKTsKKworICAgIC8vIEF1ZGlvTm9kZQorICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNz
KHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpOworICAgIHZpcnR1YWwgdm9pZCByZXNldCgpOworICAg
IHZpcnR1YWwgdm9pZCBpbml0aWFsaXplKCk7CisgICAgdmlydHVhbCB2b2lkIHVuaW5pdGlhbGl6
ZSgpOworCisgICAgLy8gRXZlbnRUYXJnZXQKKyAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEphdmFT
Y3JpcHRBdWRpb05vZGUqIHRvSmF2YVNjcmlwdEF1ZGlvTm9kZSgpOworICAgIHZpcnR1YWwgRXZl
bnRUYXJnZXREYXRhKiBldmVudFRhcmdldERhdGEoKSB7IHJldHVybiAmbV9ldmVudFRhcmdldERh
dGE7IH0KKyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0YSogZW5zdXJlRXZlbnRUYXJnZXREYXRh
KCkgIHsgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsgfQorCisgICAgc2l6ZV90IGJ1ZmZlclNp
emUoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlclNpemU7IH0KKworICAgIERFRklORV9BVFRSSUJV
VEVfRVZFTlRfTElTVEVORVIoYXVkaW9wcm9jZXNzKTsKKworICAgIC8vIFJlY29uY2lsZSByZWYv
ZGVyZWYgd2hpY2ggYXJlIGRlZmluZWQgYm90aCBpbiBBdWRpb05vZGUgYW5kIEV2ZW50VGFyZ2V0
LgorICAgIHVzaW5nIEF1ZGlvTm9kZTo6cmVmOworICAgIHVzaW5nIEF1ZGlvTm9kZTo6ZGVyZWY7
CisgICAgCitwcml2YXRlOgorICAgIEphdmFTY3JpcHRBdWRpb05vZGUoQXVkaW9Db250ZXh0Kiwg
ZG91YmxlIHNhbXBsZVJhdGUsIHNpemVfdCBidWZmZXJTaXplLCB1bnNpZ25lZCBudW1iZXJPZklu
cHV0cywgdW5zaWduZWQgbnVtYmVyT2ZPdXRwdXRzKTsKKworICAgIHN0YXRpYyB2b2lkIGZpcmVQ
cm9jZXNzRXZlbnREaXNwYXRjaCh2b2lkKiB1c2VyRGF0YSk7CisgICAgdm9pZCBmaXJlUHJvY2Vz
c0V2ZW50KCk7CisKKyAgICAvLyBEb3VibGUgYnVmZmVyaW5nCisgICAgdW5zaWduZWQgZG91Ymxl
QnVmZmVySW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2RvdWJsZUJ1ZmZlckluZGV4OyB9CisgICAg
dm9pZCBzd2FwQnVmZmVycygpIHsgbV9kb3VibGVCdWZmZXJJbmRleCA9IDEgLSBtX2RvdWJsZUJ1
ZmZlckluZGV4OyB9CisgICAgdW5zaWduZWQgbV9kb3VibGVCdWZmZXJJbmRleDsKKyAgICB1bnNp
Z25lZCBtX2RvdWJsZUJ1ZmZlckluZGV4Rm9yRXZlbnQ7CisgICAgVmVjdG9yPFJlZlB0cjxBdWRp
b0J1ZmZlcj4gPiBtX2lucHV0QnVmZmVyczsKKyAgICBWZWN0b3I8UmVmUHRyPEF1ZGlvQnVmZmVy
PiA+IG1fb3V0cHV0QnVmZmVyczsKKworICAgIHZpcnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgp
IHsgcmVmKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGVyZWZFdmVudFRhcmdldCgpIHsgZGVyZWYo
KTsgfQorICAgIEV2ZW50VGFyZ2V0RGF0YSBtX2V2ZW50VGFyZ2V0RGF0YTsKKworICAgIHNpemVf
dCBtX2J1ZmZlclNpemU7CisgICAgdW5zaWduZWQgbV9idWZmZXJSZWFkV3JpdGVJbmRleDsKKyAg
ICB2b2xhdGlsZSBib29sIG1faXNSZXF1ZXN0T3V0c3RhbmRpbmc7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBKYXZhU2NyaXB0QXVkaW9Ob2RlX2gKSW5kZXg6IFdl
YkNvcmUvd2ViYXVkaW8vSmF2YVNjcmlwdEF1ZGlvTm9kZS5pZGwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS93ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmlkbAkocmV2aXNpb24gMCkKKysrIFdl
YkNvcmUvd2ViYXVkaW8vSmF2YVNjcmlwdEF1ZGlvTm9kZS5pZGwJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCittb2R1bGUgYXVkaW8geworICAgIC8vIEZvciByZWFs
LXRpbWUgYXVkaW8gc3RyZWFtIHN5bnRoZXNpcy9wcm9jZXNzaW5nIGluIEphdmFTY3JpcHQgCisg
ICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9V0VCX0FVRElPLAorICAgICAgICBH
ZW5lcmF0ZVRvSlMsCisgICAgICAgIEN1c3RvbU1hcmtGdW5jdGlvbiwKKyNpZiBkZWZpbmVkKFY4
X0JJTkRJTkcpICYmIFY4X0JJTkRJTkcKKyAgICAgICAgRXZlbnRUYXJnZXQKKyNlbmRpZgorICAg
IF0gSmF2YVNjcmlwdEF1ZGlvTm9kZSA6IEF1ZGlvTm9kZSB7CisgICAgICAgIC8vIFJlbmRlcmlu
ZyBjYWxsYmFjaworICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmF1ZGlvcHJvY2Vz
czsKKyAgICAgICAgCisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBsb25nIGJ1ZmZlclNpemU7
CisgICAgfTsKK30K
</data>

          </attachment>
      

    </bug>

</bugzilla>