<?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>171320</bug_id>
          
          <creation_ts>2017-04-26 03:31:59 -0700</creation_ts>
          <short_desc>WebItemProviderPasteboard should fetch preloaded assets from disk when possible</short_desc>
          <delta_ts>2017-04-28 21:44:19 -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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>171341</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Wenson Hsieh">wenson_hsieh</reporter>
          <assigned_to name="Wenson Hsieh">wenson_hsieh</assigned_to>
          <cc>aestes</cc>
    
    <cc>bdakin</cc>
    
    <cc>megan_gardner</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1301551</commentid>
    <comment_count>0</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-04-26 03:31:59 -0700</bug_when>
    <thetext>&lt;rdar://problem/31614010&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1301552</commentid>
    <comment_count>1</comment_count>
      <attachid>308235</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-04-26 03:49:45 -0700</bug_when>
    <thetext>Created attachment 308235
First pass</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1301801</commentid>
    <comment_count>2</comment_count>
      <attachid>308235</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2017-04-26 15:51:32 -0700</bug_when>
    <thetext>Comment on attachment 308235
First pass

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

&gt; Source/WebCore/platform/ios/WebItemProviderPasteboard.mm:182
&gt; +    RetainPtr&lt;NSArray&gt; _typeToFileURLMaps;

What&apos;s with all these NSArrays? (no need to fix in this patch though)

&gt; Source/WebCore/platform/ios/WebItemProviderPasteboard.mm:294
&gt; +        // We&apos;ve already loaded data relevant for this UTI type into disk, so there&apos;s no need to ask the UIItemProvider for the same data again.

into disk? onto disk?

&gt; Source/WebCore/platform/ios/WebItemProviderPasteboard.mm:295
&gt; +        if (NSData *result = [NSData dataWithContentsOfURL:typeToFileURLMap[loadedType] options:NSDataReadingMappedAlways error:nil])

Should we go with Always or IfSafe?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1301930</commentid>
    <comment_count>3</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-04-26 20:47:27 -0700</bug_when>
    <thetext>(In reply to Tim Horton from comment #2)
&gt; Comment on attachment 308235 [details]
&gt; First pass
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=308235&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/ios/WebItemProviderPasteboard.mm:182
&gt; &gt; +    RetainPtr&lt;NSArray&gt; _typeToFileURLMaps;
&gt; 
&gt; What&apos;s with all these NSArrays? (no need to fix in this patch though)

There&apos;s no particular reason these are just NSArrays :/ I&apos;ll refactor these to be Vector&lt;RetainPtr&lt;NSString&gt;&gt; in a followup patch.

&gt; 
&gt; &gt; Source/WebCore/platform/ios/WebItemProviderPasteboard.mm:294
&gt; &gt; +        // We&apos;ve already loaded data relevant for this UTI type into disk, so there&apos;s no need to ask the UIItemProvider for the same data again.
&gt; 
&gt; into disk? onto disk?

s/into/onto/

&gt; 
&gt; &gt; Source/WebCore/platform/ios/WebItemProviderPasteboard.mm:295
&gt; &gt; +        if (NSData *result = [NSData dataWithContentsOfURL:typeToFileURLMap[loadedType] options:NSDataReadingMappedAlways error:nil])
&gt; 
&gt; Should we go with Always or IfSafe?

Good point. Changed to use NSDataReadingMappedIfSafe.

Committed &lt;https://trac.webkit.org/changeset/215835&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>308235</attachid>
            <date>2017-04-26 03:49:45 -0700</date>
            <delta_ts>2017-04-26 15:51:32 -0700</delta_ts>
            <desc>First pass</desc>
            <filename>bug-171320-20170426034945.patch</filename>
            <type>text/plain</type>
            <size>19656</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1Nzg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2NiYmQzYmFlMjhjZmQ1
YzBmYzUxY2ZlZDkwYzUwYzM0YzUwMGJlMS4uMThiYjU4NjU4MmZkYzczNTQ4NjY4MjAzNzNkMTEx
YTE0NDViNTZlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDE3LTA0LTI2ICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFdlYkl0ZW1Qcm92
aWRlclBhc3RlYm9hcmQgc2hvdWxkIGZldGNoIHByZWxvYWRlZCBhc3NldHMgZnJvbSBkaXNrIHdo
ZW4gcG9zc2libGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3MTMyMAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzE2MTQwMTA+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBhIG1lY2hhbmlzbSB0
byBXZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJkIHRvIHJlbWVtYmVyIHRoZSB0ZW1wb3JhcnkgZmls
ZSBVUkxzIG9mIGFzc2V0cyBpdCBoYXMgbG9hZGVkIHVzaW5nCisgICAgICAgIGRvQWZ0ZXJMb2Fk
aW5nUHJvdmlkZWRDb250ZW50SW50b0ZpbGVVUkxzOi4gV2hlbiByZXRyaWV2aW5nIGRhdGEgZnJv
bSB0aGUgcGFzdGVib2FyZCwgd2UgdGhlbiBzZWUgaWYgd2UgY2FuCisgICAgICAgIGZpcnN0IGZl
dGNoIHNlcmlhbGl6ZWQgZGF0YSBzdHJhaWdodCBmcm9tIGRpc2sgaW5zdGVhZCBvZiBoYXZpbmcg
dG8gZ28gdGhyb3VnaCB0aGUgaXRlbSBwcm92aWRlciBpbiBib3RoCisgICAgICAgIC1kYXRhRm9y
UGFzdGVib2FyZFR5cGU6aW5JdGVtU2V0OiBhbmQgLXZhbHVlc0ZvclBhc3RlYm9hcmRUeXBlOmlu
SXRlbVNldDouCisKKyAgICAgICAgU2VlIGJlbG93IGFubm90YXRpb25zIGZvciBtb3JlIGRldGFp
bC4KKworICAgICAgICAqIHBsYXRmb3JtL2lvcy9BYnN0cmFjdFBhc3RlYm9hcmQuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9pb3MvUGxhdGZvcm1QYXN0ZWJvYXJkSU9TLm1tOgorICAgICAgICAoV2Vi
Q29yZTo6UGxhdGZvcm1QYXN0ZWJvYXJkOjpmaWxlbmFtZXNGb3JEYXRhSW50ZXJhY3Rpb24pOgor
ICAgICAgICAqIHBsYXRmb3JtL2lvcy9XZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJkLmg6CisgICAg
ICAgICogcGxhdGZvcm0vaW9zL1dlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmQubW06CisKKyAgICAg
ICAgSW50cm9kdWNlcyBfdHlwZVRvRmlsZVVSTE1hcHMsIGFuIGFycmF5IG9mIGRpY3Rpb25hcmll
cy4gQSBkaWN0aW9uYXJ5IGF0IHRoZSBpdGggaW5kZXggb2YgdGhpcyBhcnJheSByZXByZXNlbnRz
CisgICAgICAgIGEgbWFwcGluZyBvZiBVVElzIHRvIGxvYWRlZCB0ZW1vIGZpbGUgVVJMcyBmb3Ig
dGhlIGl0aCBVSUl0ZW1Qcm92aWRlciBpbiB0aGUgX2l0ZW1Qcm92aWRlcnMgYXJyYXkuIEJlZm9y
ZSBkYXRhCisgICAgICAgIGludGVyYWN0aW9uIGlzIHBlcmZvcm1lZCwgYWxsIGVudHJpZXMgaW4g
dGhpcyBhcnJheSB3aWxsIGJlIGVtcHR5LgorCisgICAgICAgICgtW1dlYkl0ZW1Qcm92aWRlclBh
c3RlYm9hcmQgaW5pdF0pOgorICAgICAgICAoLVtXZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJkIHNl
dEl0ZW1Qcm92aWRlcnM6XSk6CisgICAgICAgICgtW1dlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmQg
X3ByZUxvYWRlZERhdGFDb25mb3JtaW5nVG9UeXBlOmZvckl0ZW1Qcm92aWRlckF0SW5kZXg6XSk6
CisgICAgICAgICgtW1dlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmQgZGF0YUZvclBhc3RlYm9hcmRU
eXBlOmluSXRlbVNldDpdKToKKyAgICAgICAgKC1bV2ViSXRlbVByb3ZpZGVyUGFzdGVib2FyZCB2
YWx1ZXNGb3JQYXN0ZWJvYXJkVHlwZTppbkl0ZW1TZXQ6XSk6CisKKyAgICAgICAgQ29uc3VsdCBh
bnkgbG9hZGVkIGFzc2V0cyBvbiBkaXNrIGJlZm9yZSBoaXR0aW5nIFVJSXRlbVByb3ZpZGVycyB2
aWEgdGhlIG5ldworICAgICAgICAtX3ByZUxvYWRlZERhdGFDb25mb3JtaW5nVG9UeXBlOmZvckl0
ZW1Qcm92aWRlckF0SW5kZXg6IGhlbHBlciBtZXRob2QuCisKKyAgICAgICAgKC1bV2ViSXRlbVBy
b3ZpZGVyUGFzdGVib2FyZCBfdHJ5VG9DcmVhdGVPYmplY3RPZkNsYXNzOnVzaW5nUHJvdmlkZXI6
XSk6CisgICAgICAgICgtW1dlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmQgZmlsZVVSTHNGb3JEYXRh
SW50ZXJhY3Rpb25dKToKKworICAgICAgICBUcmF2ZXJzZSBfdHlwZVRvRmlsZVVSTE1hcHMgdG8g
Y29sbGVjdCBhbGwgZmlsZSBVUkxzLgorCisgICAgICAgICgtW1dlYkl0ZW1Qcm92aWRlclBhc3Rl
Ym9hcmQgZG9BZnRlckxvYWRpbmdQcm92aWRlZENvbnRlbnRJbnRvRmlsZVVSTHM6XSk6CisKKyAg
ICAgICAgUmVmYWN0b3JlZCB0byBwb3B1bGF0ZSBhbmQgc2V0IF90eXBlVG9GaWxlVVJMTWFwcyB3
aGVuIGxvYWRpbmcgY29tcGxldGVzLCByYXRoZXIgdGhhbiBhbiBhcnJheSBvZiBmaWxlIFVSTHMu
CisKKyAgICAgICAgKC1bV2ViSXRlbVByb3ZpZGVyUGFzdGVib2FyZCBfdHJ5VG9DcmVhdGVBbmRB
cHBlbmRPYmplY3RPZkNsYXNzOnRvQXJyYXk6dXNpbmdQcm92aWRlcjpdKTogRGVsZXRlZC4KKyAg
ICAgICAgKC1bV2ViSXRlbVByb3ZpZGVyUGFzdGVib2FyZCBmaWxlbmFtZXNGb3JEYXRhSW50ZXJh
Y3Rpb25dKTogRGVsZXRlZC4KKworICAgICAgICBDb3JyZWN0IGFuIGVycm9uZW91c2x5IG5hbWVk
IG1ldGhvZCAocmVwbGFjZXMgZmlsZW5hbWVzIHdpdGggZmlsZVVSTHMpLgorCiAyMDE3LTA0LTI1
ICBKb2huIFdpbGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJlc291cmNl
IExvYWQgU3RhdGlzdGljczogSW50cm9kdWNlIHNob3J0ZXIgdGltZS10by1saXZlIGZvciBjb29r
aWUgcGFydGl0aW9uIHdoaXRlbGlzdGluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW9zL0Fic3RyYWN0UGFzdGVib2FyZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW9zL0Fic3RyYWN0UGFzdGVib2FyZC5oCmluZGV4IDE5ZjMxOTM5OTY5NTA3YzBiNGU1MGQwNmMx
MTYxOGVhNDcwYzhjZjMuLjdjYjJkYWU4OGJiYTk2YjIwYmJkNjE4ZmE5NDlmMjM2MDRhNzFhMTMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9BYnN0cmFjdFBhc3RlYm9h
cmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvQWJzdHJhY3RQYXN0ZWJvYXJk
LmgKQEAgLTQ0LDcgKzQ0LDcgQEAgTlNfQVNTVU1FX05PTk5VTExfQkVHSU4KIC0gKHZvaWQpc2V0
SXRlbXM6KE5TQXJyYXk8TlNEaWN0aW9uYXJ5ICo+ICopaXRlbXM7CiAtIChOU0FycmF5PE5TU3Ry
aW5nICo+ICopcGFzdGVib2FyZFR5cGVzQnlGaWRlbGl0eUZvckl0ZW1BdEluZGV4OihOU1VJbnRl
Z2VyKWluZGV4OwogQHByb3BlcnR5IChyZWFkb25seSwgbm9uYXRvbWljKSBOU0ludGVnZXIgbnVt
YmVyT2ZGaWxlczsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIG5vbmF0b21pYykgTlNBcnJheTxOU1VS
TCAqPiAqZmlsZW5hbWVzRm9yRGF0YUludGVyYWN0aW9uOworQHByb3BlcnR5IChyZWFkb25seSwg
bm9uYXRvbWljKSBOU0FycmF5PE5TVVJMICo+ICpmaWxlVVJMc0ZvckRhdGFJbnRlcmFjdGlvbjsK
IAogQGVuZAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZv
cm1QYXN0ZWJvYXJkSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXRmb3Jt
UGFzdGVib2FyZElPUy5tbQppbmRleCBhY2IwYjAxZWQyY2MyMTZlYTUwZmEwMDFmYWNkYTI0MmRh
NWYzNDFiLi5iNTM3ZDMwMzMwNDU5Y2Q1YjQ4MDE0Mjk2NjA4ZWFiMTlhMTJiZjY1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1QYXN0ZWJvYXJkSU9TLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF0Zm9ybVBhc3RlYm9hcmRJT1Mu
bW0KQEAgLTEwMiwxMSArMTAyLDExIEBAIGludCBQbGF0Zm9ybVBhc3RlYm9hcmQ6Om51bWJlck9m
RmlsZXMoKQogCiBWZWN0b3I8U3RyaW5nPiBQbGF0Zm9ybVBhc3RlYm9hcmQ6OmZpbGVuYW1lc0Zv
ckRhdGFJbnRlcmFjdGlvbigpCiB7Ci0gICAgaWYgKCFbbV9wYXN0ZWJvYXJkIHJlc3BvbmRzVG9T
ZWxlY3RvcjpAc2VsZWN0b3IoZmlsZW5hbWVzRm9yRGF0YUludGVyYWN0aW9uKV0pCisgICAgaWYg
KCFbbV9wYXN0ZWJvYXJkIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoZmlsZVVSTHNGb3JE
YXRhSW50ZXJhY3Rpb24pXSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIFZlY3RvcjxTdHJp
bmc+IGZpbGVuYW1lczsKLSAgICBmb3IgKE5TVVJMICpmaWxlVVJMIGluIFttX3Bhc3RlYm9hcmQg
ZmlsZW5hbWVzRm9yRGF0YUludGVyYWN0aW9uXSkKKyAgICBmb3IgKE5TVVJMICpmaWxlVVJMIGlu
IFttX3Bhc3RlYm9hcmQgZmlsZVVSTHNGb3JEYXRhSW50ZXJhY3Rpb25dKQogICAgICAgICBmaWxl
bmFtZXMuYXBwZW5kKGZpbGVVUkwucGF0aCk7CiAKICAgICByZXR1cm4gZmlsZW5hbWVzOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkl0ZW1Qcm92aWRlclBhc3Rl
Ym9hcmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9XZWJJdGVtUHJvdmlkZXJQYXN0
ZWJvYXJkLmgKaW5kZXggNDdmNTk2NDNjMzI4NjAwN2U2ODk1ZTNlNzliZTIyMGIwZjNkODg5ZS4u
OWI4OTc5MDE0YTA0MTIzYzM2NmZmODVlYzg1ZTA1NjE1ZDk0YmIyYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvV2ViSXRlbVByb3ZpZGVyUGFzdGVib2FyZC5o
CkBAIC03Niw3ICs3Niw3IEBAIFdFQkNPUkVfRVhQT1JUIEBpbnRlcmZhY2UgV2ViSXRlbVByb3Zp
ZGVyUGFzdGVib2FyZCA6IE5TT2JqZWN0PEFic3RyYWN0UGFzdGVib2FyCiBAcHJvcGVydHkgKHJl
YWRvbmx5LCBub25hdG9taWMpIE5TSW50ZWdlciBjaGFuZ2VDb3VudDsKIAogLy8gVGhpcyB3aWxs
IG9ubHkgYmUgbm9uLWVtcHR5IHdoZW4gYW4gb3BlcmF0aW9uIGlzIGJlaW5nIHBlcmZvcm1lZC4K
LUBwcm9wZXJ0eSAocmVhZG9ubHksIG5vbmF0b21pYykgTlNBcnJheTxOU1VSTCAqPiAqZmlsZW5h
bWVzRm9yRGF0YUludGVyYWN0aW9uOworQHByb3BlcnR5IChyZWFkb25seSwgbm9uYXRvbWljKSBO
U0FycmF5PE5TVVJMICo+ICpmaWxlVVJMc0ZvckRhdGFJbnRlcmFjdGlvbjsKIAogQHByb3BlcnR5
IChyZWFkb25seSwgbm9uYXRvbWljKSBCT09MIGhhc1BlbmRpbmdPcGVyYXRpb247CiAtICh2b2lk
KWluY3JlbWVudFBlbmRpbmdPcGVyYXRpb25Db3VudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2lvcy9XZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJkLm1tIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW9zL1dlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmQubW0KaW5kZXggY2Q3
NjM5YTkwOTZkNjZmNTgwZTRkNmNmNzAwYWY1ZmQyMmZkZDZhNy4uYjBmNjM1MGFiM2ZkY2VkZDky
NTExZTVlYzAwZmQwY2YxYWZjMDY5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL1dlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmQubW0KKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL1dlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmQubW0KQEAgLTM1LDYgKzM1LDcg
QEAKICNpbXBvcnQgPFVJS2l0L05TVVJMK1VJSXRlbVByb3ZpZGVyLmg+CiAjaW1wb3J0IDxVSUtp
dC9VSUNvbG9yLmg+CiAjaW1wb3J0IDxVSUtpdC9VSUltYWdlLmg+CisjaW1wb3J0IDxVSUtpdC9V
SUl0ZW1Qcm92aWRlclJlYWRpbmcuaD4KICNpbXBvcnQgPFVJS2l0L1VJSXRlbVByb3ZpZGVyV3Jp
dGluZy5oPgogI2ltcG9ydCA8V2ViQ29yZS9GaWxlU3lzdGVtSU9TLmg+CiAjaW1wb3J0IDx3dGYv
QmxvY2tQdHIuaD4KQEAgLTQ3LDYgKzQ4LDcgQEAgU09GVF9MSU5LX0NMQVNTKFVJS2l0LCBVSUlt
YWdlKQogU09GVF9MSU5LX0NMQVNTKFVJS2l0LCBVSUl0ZW1Qcm92aWRlcikKIAogdHlwZWRlZiB2
b2lkKF5JdGVtUHJvdmlkZXJEYXRhTG9hZENvbXBsZXRpb25IYW5kbGVyKShOU0RhdGEgKiwgTlNF
cnJvciAqKTsKK3R5cGVkZWYgTlNEaWN0aW9uYXJ5PE5TU3RyaW5nICosIE5TVVJMICo+IFR5cGVU
b0ZpbGVVUkxNYXA7CiAKICNkZWZpbmUgTUFUQ0hFU19VVElfVFlQRSh0eXBlLCBzdWZmaXgpIFt0
eXBlIGlzRXF1YWxUb1N0cmluZzooX19icmlkZ2UgTlNTdHJpbmcgKilrVVRUeXBlICMjIHN1ZmZp
eF0KICNkZWZpbmUgTUFUQ0hFU19VSUtJVF9UWVBFKHR5cGUsIHN1ZmZpeCkgW3R5cGUgaXNFcXVh
bFRvU3RyaW5nOkAiY29tLmFwcGxlLnVpa2l0LiAjIyBzdWZmaXggIyMiXQpAQCAtMTc3LDcgKzE3
OSw3IEBAIEBlbmQKIEBpbXBsZW1lbnRhdGlvbiBXZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJkIHsK
ICAgICBSZXRhaW5QdHI8TlNBcnJheT4gX2l0ZW1Qcm92aWRlcnM7CiAgICAgUmV0YWluUHRyPE5T
QXJyYXk+IF9jYWNoZWRUeXBlSWRlbnRpZmllcnM7Ci0gICAgUmV0YWluUHRyPE5TQXJyYXk+IF9m
aWxlbmFtZXNGb3JEYXRhSW50ZXJhY3Rpb247CisgICAgUmV0YWluUHRyPE5TQXJyYXk+IF90eXBl
VG9GaWxlVVJMTWFwczsKIH0KIAogKyAoaW5zdGFuY2V0eXBlKXNoYXJlZEluc3RhbmNlCkBAIC0x
OTYsNyArMTk4LDcgQEAgLSAoaW5zdGFuY2V0eXBlKWluaXQKICAgICAgICAgX2l0ZW1Qcm92aWRl
cnMgPSBhZG9wdE5TKFtbTlNBcnJheSBhbGxvY10gaW5pdF0pOwogICAgICAgICBfY2hhbmdlQ291
bnQgPSAwOwogICAgICAgICBfcGVuZGluZ09wZXJhdGlvbkNvdW50ID0gMDsKLSAgICAgICAgX2Zp
bGVuYW1lc0ZvckRhdGFJbnRlcmFjdGlvbiA9IEBbIF07CisgICAgICAgIF90eXBlVG9GaWxlVVJM
TWFwcyA9IGFkb3B0TlMoW1tOU0FycmF5IGFsbG9jXSBpbml0XSk7CiAgICAgfQogICAgIHJldHVy
biBzZWxmOwogfQpAQCAtMjQwLDcgKzI0MiwxMiBAQCAtICh2b2lkKXNldEl0ZW1Qcm92aWRlcnM6
KE5TQXJyYXk8VUlJdGVtUHJvdmlkZXIgKj4gKilpdGVtUHJvdmlkZXJzCiAgICAgX2l0ZW1Qcm92
aWRlcnMgPSBpdGVtUHJvdmlkZXJzOwogICAgIF9jaGFuZ2VDb3VudCsrOwogICAgIF9jYWNoZWRU
eXBlSWRlbnRpZmllcnMgPSBuaWw7Ci0gICAgX2ZpbGVuYW1lc0ZvckRhdGFJbnRlcmFjdGlvbiA9
IEBbIF07CisKKyAgICBOU011dGFibGVBcnJheSAqdHlwZVRvRmlsZVVSTE1hcHMgPSBbTlNNdXRh
YmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6aXRlbVByb3ZpZGVycy5jb3VudF07CisgICAgW2l0
ZW1Qcm92aWRlcnMgZW51bWVyYXRlT2JqZWN0c1VzaW5nQmxvY2s6W3R5cGVUb0ZpbGVVUkxNYXBz
XSAoVUlJdGVtUHJvdmlkZXIgKiwgTlNVSW50ZWdlciwgQk9PTCAqKSB7CisgICAgICAgIFt0eXBl
VG9GaWxlVVJMTWFwcyBhZGRPYmplY3Q6QHsgfV07CisgICAgfV07CisgICAgX3R5cGVUb0ZpbGVV
UkxNYXBzID0gdHlwZVRvRmlsZVVSTE1hcHM7CiB9CiAKIC0gKE5TSW50ZWdlciludW1iZXJPZkl0
ZW1zCkBAIC0yNzcsNjkgKzI4NCw4OSBAQCAtICh2b2lkKXNldEl0ZW1zVXNpbmdSZWdpc3RyYXRp
b25JbmZvTGlzdHM6KE5TQXJyYXk8V2ViSXRlbVByb3ZpZGVyUmVnaXN0cmF0aW9uSQogICAgIHNl
bGYuaXRlbVByb3ZpZGVycyA9IHByb3ZpZGVyczsKIH0KIAorLSAoTlNEYXRhICopX3ByZUxvYWRl
ZERhdGFDb25mb3JtaW5nVG9UeXBlOihOU1N0cmluZyAqKXR5cGVJZGVudGlmaWVyIGZvckl0ZW1Q
cm92aWRlckF0SW5kZXg6KE5TVUludGVnZXIpaW5kZXgKK3sKKyAgICBUeXBlVG9GaWxlVVJMTWFw
ICp0eXBlVG9GaWxlVVJMTWFwID0gW190eXBlVG9GaWxlVVJMTWFwcyBvYmplY3RBdEluZGV4Omlu
ZGV4XTsKKyAgICBmb3IgKE5TU3RyaW5nICpsb2FkZWRUeXBlIGluIHR5cGVUb0ZpbGVVUkxNYXAp
IHsKKyAgICAgICAgaWYgKCFVVFR5cGVDb25mb3Jtc1RvKChDRlN0cmluZ1JlZilsb2FkZWRUeXBl
LCAoQ0ZTdHJpbmdSZWYpdHlwZUlkZW50aWZpZXIpKQorICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBsb2FkZWQgZGF0YSByZWxldmFudCBmb3IgdGhpcyBV
VEkgdHlwZSBpbnRvIGRpc2ssIHNvIHRoZXJlJ3Mgbm8gbmVlZCB0byBhc2sgdGhlIFVJSXRlbVBy
b3ZpZGVyIGZvciB0aGUgc2FtZSBkYXRhIGFnYWluLgorICAgICAgICBpZiAoTlNEYXRhICpyZXN1
bHQgPSBbTlNEYXRhIGRhdGFXaXRoQ29udGVudHNPZlVSTDp0eXBlVG9GaWxlVVJMTWFwW2xvYWRl
ZFR5cGVdIG9wdGlvbnM6TlNEYXRhUmVhZGluZ01hcHBlZEFsd2F5cyBlcnJvcjpuaWxdKQorICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgcmV0dXJuIG5pbDsKK30KKwogLSAo
TlNBcnJheSAqKWRhdGFGb3JQYXN0ZWJvYXJkVHlwZTooTlNTdHJpbmcgKilwYXN0ZWJvYXJkVHlw
ZSBpbkl0ZW1TZXQ6KE5TSW5kZXhTZXQgKilpdGVtU2V0CiB7Ci0gICAgX19ibG9jayBOU011dGFi
bGVBcnJheSAqdmFsdWVzID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKLSAgICBbaXRlbVNldCBl
bnVtZXJhdGVJbmRleGVzVXNpbmdCbG9jazpeKE5TVUludGVnZXIgaW5kZXgsIEJPT0wgKikgewot
ICAgICAgICBVSUl0ZW1Qcm92aWRlciAqcHJvdmlkZXIgPSBbc2VsZiBpdGVtUHJvdmlkZXJBdElu
ZGV4OmluZGV4XTsKKyAgICBhdXRvIHZhbHVlcyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBh
bGxvY10gaW5pdF0pOworICAgIFJldGFpblB0cjxXZWJJdGVtUHJvdmlkZXJQYXN0ZWJvYXJkPiBy
ZXRhaW5lZFNlbGYgPSBzZWxmOworICAgIFtpdGVtU2V0IGVudW1lcmF0ZUluZGV4ZXNVc2luZ0Js
b2NrOltyZXRhaW5lZFNlbGYsIHBhc3RlYm9hcmRUeXBlLCB2YWx1ZXNdIChOU1VJbnRlZ2VyIGlu
ZGV4LCBCT09MICopIHsKKyAgICAgICAgVUlJdGVtUHJvdmlkZXIgKnByb3ZpZGVyID0gW3JldGFp
bmVkU2VsZiBpdGVtUHJvdmlkZXJBdEluZGV4OmluZGV4XTsKICAgICAgICAgaWYgKCFwcm92aWRl
cikKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9i
bGVtLzMwNDUxMDk2PiBBZG9wdCBhc3luY2hyb25vdXMgVUlJdGVtUHJvdmlkZXIgbWV0aG9kcyB3
aGVuIHJldHJpZXZpbmcgZGF0YS4KKyAgICAgICAgTlNEYXRhICpkYXRhID0gW3JldGFpbmVkU2Vs
ZiBfcHJlTG9hZGVkRGF0YUNvbmZvcm1pbmdUb1R5cGU6cGFzdGVib2FyZFR5cGUgZm9ySXRlbVBy
b3ZpZGVyQXRJbmRleDppbmRleF07CiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAogI3By
YWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMi
Ci0gICAgICAgIE5TRGF0YSAqZGF0YSA9IFtwcm92aWRlciBjb3B5RGF0YVJlcHJlc2VudGF0aW9u
Rm9yVHlwZUlkZW50aWZpZXI6cGFzdGVib2FyZFR5cGUgZXJyb3I6bmlsXTsKKyAgICAgICAgLy8g
RklYTUU6IDxyZGFyOi8vcHJvYmxlbS8zMDQ1MTA5Nj4gQWRvcHQgYXN5bmNocm9ub3VzIFVJSXRl
bVByb3ZpZGVyIG1ldGhvZHMgd2hlbiByZXRyaWV2aW5nIGRhdGEuCisgICAgICAgIGlmICghZGF0
YSkKKyAgICAgICAgICAgIGRhdGEgPSBbcHJvdmlkZXIgY29weURhdGFSZXByZXNlbnRhdGlvbkZv
clR5cGVJZGVudGlmaWVyOnBhc3RlYm9hcmRUeXBlIGVycm9yOm5pbF07CiAjcHJhZ21hIGNsYW5n
IGRpYWdub3N0aWMgcG9wCiAgICAgICAgIGlmIChkYXRhKQogICAgICAgICAgICAgW3ZhbHVlcyBh
ZGRPYmplY3Q6ZGF0YV07CiAgICAgfV07Ci0KLSAgICByZXR1cm4gdmFsdWVzOworICAgIHJldHVy
biB2YWx1ZXMuYXV0b3JlbGVhc2UoKTsKIH0KIAogLSAoTlNBcnJheSAqKXZhbHVlc0ZvclBhc3Rl
Ym9hcmRUeXBlOihOU1N0cmluZyAqKXBhc3RlYm9hcmRUeXBlIGluSXRlbVNldDooTlNJbmRleFNl
dCAqKWl0ZW1TZXQKIHsKLSAgICBfX2Jsb2NrIE5TTXV0YWJsZUFycmF5ICp2YWx1ZXMgPSBbTlNN
dXRhYmxlQXJyYXkgYXJyYXldOwotICAgIFtpdGVtU2V0IGVudW1lcmF0ZUluZGV4ZXNVc2luZ0Js
b2NrOl4oTlNVSW50ZWdlciBpbmRleCwgQk9PTCAqKSB7Ci0gICAgICAgIFVJSXRlbVByb3ZpZGVy
ICpwcm92aWRlciA9IFtzZWxmIGl0ZW1Qcm92aWRlckF0SW5kZXg6aW5kZXhdOworICAgIGF1dG8g
dmFsdWVzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CisgICAgUmV0
YWluUHRyPFdlYkl0ZW1Qcm92aWRlclBhc3RlYm9hcmQ+IHJldGFpbmVkU2VsZiA9IHNlbGY7Cisg
ICAgW2l0ZW1TZXQgZW51bWVyYXRlSW5kZXhlc1VzaW5nQmxvY2s6W3JldGFpbmVkU2VsZiwgcGFz
dGVib2FyZFR5cGUsIHZhbHVlc10gKE5TVUludGVnZXIgaW5kZXgsIEJPT0wgKikgeworICAgICAg
ICBVSUl0ZW1Qcm92aWRlciAqcHJvdmlkZXIgPSBbcmV0YWluZWRTZWxmIGl0ZW1Qcm92aWRlckF0
SW5kZXg6aW5kZXhdOwogICAgICAgICBpZiAoIXByb3ZpZGVyKQogICAgICAgICAgICAgcmV0dXJu
OwogCi0gICAgICAgIC8vIEZJWE1FOiBUaGVzZSBzaG91bGQgYmUgcmVmYWN0b3JlZCB0byB1c2Ug
YXN5bmNocm9ub3VzIGNhbGxzLgotICAgICAgICBpZiAoaXNDb2xvclR5cGUocGFzdGVib2FyZFR5
cGUpICYmIFtzZWxmIF90cnlUb0NyZWF0ZUFuZEFwcGVuZE9iamVjdE9mQ2xhc3M6W2dldFVJQ29s
b3JDbGFzcygpIGNsYXNzXSB0b0FycmF5OnZhbHVlcyB1c2luZ1Byb3ZpZGVyOnByb3ZpZGVyXSkK
KyAgICAgICAgQ2xhc3MgcmVhZGFibGVDbGFzczsKKyAgICAgICAgaWYgKGlzQ29sb3JUeXBlKHBh
c3RlYm9hcmRUeXBlKSkKKyAgICAgICAgICAgIHJlYWRhYmxlQ2xhc3MgPSBbZ2V0VUlDb2xvckNs
YXNzKCkgY2xhc3NdOworICAgICAgICBlbHNlIGlmIChpc0ltYWdlVHlwZShwYXN0ZWJvYXJkVHlw
ZSkpCisgICAgICAgICAgICByZWFkYWJsZUNsYXNzID0gW2dldFVJSW1hZ2VDbGFzcygpIGNsYXNz
XTsKKyAgICAgICAgZWxzZSBpZiAoaXNVUkxUeXBlKHBhc3RlYm9hcmRUeXBlKSkKKyAgICAgICAg
ICAgIHJlYWRhYmxlQ2xhc3MgPSBbTlNVUkwgY2xhc3NdOworICAgICAgICBlbHNlIGlmIChpc1Jp
Y2hUZXh0VHlwZShwYXN0ZWJvYXJkVHlwZSkpCisgICAgICAgICAgICByZWFkYWJsZUNsYXNzID0g
W05TQXR0cmlidXRlZFN0cmluZyBjbGFzc107CisgICAgICAgIGVsc2UgaWYgKGlzU3RyaW5nVHlw
ZShwYXN0ZWJvYXJkVHlwZSkpCisgICAgICAgICAgICByZWFkYWJsZUNsYXNzID0gW05TU3RyaW5n
IGNsYXNzXTsKKyAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGlm
IChpc0ltYWdlVHlwZShwYXN0ZWJvYXJkVHlwZSkgJiYgW3NlbGYgX3RyeVRvQ3JlYXRlQW5kQXBw
ZW5kT2JqZWN0T2ZDbGFzczpbZ2V0VUlJbWFnZUNsYXNzKCkgY2xhc3NdIHRvQXJyYXk6dmFsdWVz
IHVzaW5nUHJvdmlkZXI6cHJvdmlkZXJdKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
IGlmIChpc1VSTFR5cGUocGFzdGVib2FyZFR5cGUpICYmIFtzZWxmIF90cnlUb0NyZWF0ZUFuZEFw
cGVuZE9iamVjdE9mQ2xhc3M6W05TVVJMIGNsYXNzXSB0b0FycmF5OnZhbHVlcyB1c2luZ1Byb3Zp
ZGVyOnByb3ZpZGVyXSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWQgPFVJSXRlbVBy
b3ZpZGVyUmVhZGluZz4gcmVhZE9iamVjdCA9IG5pbDsKKyAgICAgICAgaWYgKE5TRGF0YSAqcHJl
bG9hZGVkRGF0YSA9IFtyZXRhaW5lZFNlbGYgX3ByZUxvYWRlZERhdGFDb25mb3JtaW5nVG9UeXBl
OnBhc3RlYm9hcmRUeXBlIGZvckl0ZW1Qcm92aWRlckF0SW5kZXg6aW5kZXhdKQorICAgICAgICAg
ICAgcmVhZE9iamVjdCA9IFtbcmVhZGFibGVDbGFzcyBhbGxvY10gaW5pdFdpdGhJdGVtUHJvdmlk
ZXJEYXRhOnByZWxvYWRlZERhdGEgdHlwZUlkZW50aWZpZXI6cGFzdGVib2FyZFR5cGUgZXJyb3I6
bmlsXTsKIAotICAgICAgICBpZiAoaXNSaWNoVGV4dFR5cGUocGFzdGVib2FyZFR5cGUpICYmIFtz
ZWxmIF90cnlUb0NyZWF0ZUFuZEFwcGVuZE9iamVjdE9mQ2xhc3M6W05TQXR0cmlidXRlZFN0cmlu
ZyBjbGFzc10gdG9BcnJheTp2YWx1ZXMgdXNpbmdQcm92aWRlcjpwcm92aWRlcl0pCi0gICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGlmICghcmVhZE9iamVjdCkKKyAgICAgICAgICAgIHJlYWRP
YmplY3QgPSBbcmV0YWluZWRTZWxmIF90cnlUb0NyZWF0ZU9iamVjdE9mQ2xhc3M6cmVhZGFibGVD
bGFzcyB1c2luZ1Byb3ZpZGVyOnByb3ZpZGVyXTsKIAotICAgICAgICBpZiAoaXNTdHJpbmdUeXBl
KHBhc3RlYm9hcmRUeXBlKSAmJiBbc2VsZiBfdHJ5VG9DcmVhdGVBbmRBcHBlbmRPYmplY3RPZkNs
YXNzOltOU1N0cmluZyBjbGFzc10gdG9BcnJheTp2YWx1ZXMgdXNpbmdQcm92aWRlcjpwcm92aWRl
cl0pCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgV1RGTG9nQWx3YXlzKCJGYWlsZWQg
dG8gaW5zdGFudGlhdGUgb2JqZWN0IGZvciB0eXBlOiAnJXMnIGF0IGluZGV4OiAldHUiLCBwYXN0
ZWJvYXJkVHlwZS5VVEY4U3RyaW5nLCBpbmRleCk7CisgICAgICAgIGlmIChyZWFkT2JqZWN0KQor
ICAgICAgICAgICAgW3ZhbHVlcyBhZGRPYmplY3Q6cmVhZE9iamVjdF07CiAgICAgfV07Ci0gICAg
cmV0dXJuIHZhbHVlczsKKworICAgIHJldHVybiB2YWx1ZXMuYXV0b3JlbGVhc2UoKTsKIH0KIAot
LSAoQk9PTClfdHJ5VG9DcmVhdGVBbmRBcHBlbmRPYmplY3RPZkNsYXNzOihDbGFzcylvYmplY3RD
bGFzcyB0b0FycmF5OihOU011dGFibGVBcnJheSAqKWFycmF5IHVzaW5nUHJvdmlkZXI6KFVJSXRl
bVByb3ZpZGVyICopcHJvdmlkZXIKKy0gKGlkIDxVSUl0ZW1Qcm92aWRlclJlYWRpbmc+KV90cnlU
b0NyZWF0ZU9iamVjdE9mQ2xhc3M6KENsYXNzIDxVSUl0ZW1Qcm92aWRlclJlYWRpbmc+KW9iamVj
dENsYXNzIHVzaW5nUHJvdmlkZXI6KFVJSXRlbVByb3ZpZGVyICopcHJvdmlkZXIKIHsKICNwcmFn
bWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3Jl
ZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKICAgICBpZiAoIVtwcm92aWRlciBjYW5DcmVh
dGVPYmplY3RPZkNsYXNzOm9iamVjdENsYXNzXSkKLSAgICAgICAgcmV0dXJuIE5POworICAgICAg
ICByZXR1cm4gbmlsOwogCiAgICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS8zMDQ1MTA5Nj4g
QWRvcHQgYXN5bmNocm9ub3VzIFVJSXRlbVByb3ZpZGVyIG1ldGhvZHMgd2hlbiByZXRyaWV2aW5n
IGRhdGEuCi0gICAgaWQgb2JqZWN0ID0gW3Byb3ZpZGVyIGNyZWF0ZU9iamVjdE9mQ2xhc3M6b2Jq
ZWN0Q2xhc3MgZXJyb3I6bmlsXTsKKyAgICByZXR1cm4gW3Byb3ZpZGVyIGNyZWF0ZU9iamVjdE9m
Q2xhc3M6b2JqZWN0Q2xhc3MgZXJyb3I6bmlsXTsKICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBw
b3AKLSAgICBpZiAob2JqZWN0KQotICAgICAgICBbYXJyYXkgYWRkT2JqZWN0Om9iamVjdF07Ci0K
LSAgICByZXR1cm4gISFvYmplY3Q7CiB9CiAKIC0gKE5TSW50ZWdlciljaGFuZ2VDb3VudApAQCAt
MzQ3LDkgKzM3NCwxMiBAQCAtIChOU0ludGVnZXIpY2hhbmdlQ291bnQKICAgICByZXR1cm4gX2No
YW5nZUNvdW50OwogfQogCi0tIChOU0FycmF5PE5TVVJMICo+ICopZmlsZW5hbWVzRm9yRGF0YUlu
dGVyYWN0aW9uCistIChOU0FycmF5PE5TVVJMICo+ICopZmlsZVVSTHNGb3JEYXRhSW50ZXJhY3Rp
b24KIHsKLSAgICByZXR1cm4gX2ZpbGVuYW1lc0ZvckRhdGFJbnRlcmFjdGlvbi5nZXQoKTsKKyAg
ICBOU011dGFibGVBcnJheTxOU1VSTCAqPiAqZmlsZVVSTHMgPSBbTlNNdXRhYmxlQXJyYXkgYXJy
YXldOworICAgIGZvciAoVHlwZVRvRmlsZVVSTE1hcCAqdHlwZVRvRmlsZVVSTE1hcCBpbiBfdHlw
ZVRvRmlsZVVSTE1hcHMuZ2V0KCkpCisgICAgICAgIFtmaWxlVVJMcyBhZGRPYmplY3RzRnJvbUFy
cmF5Olt0eXBlVG9GaWxlVVJMTWFwIGFsbFZhbHVlc11dOworICAgIHJldHVybiBmaWxlVVJMczsK
IH0KIAogLSAoTlNJbnRlZ2VyKW51bWJlck9mRmlsZXMKQEAgLTM4NCwxMSArNDE0LDEzIEBAIHN0
YXRpYyBOU1VSTCAqdGVtcG9yYXJ5RmlsZVVSTEZvckRhdGFJbnRlcmFjdGlvbkNvbnRlbnQoTlNT
dHJpbmcgKmZpbGVFeHRlbnNpb24sCiAtICh2b2lkKWRvQWZ0ZXJMb2FkaW5nUHJvdmlkZWRDb250
ZW50SW50b0ZpbGVVUkxzOihXZWJJdGVtUHJvdmlkZXJGaWxlTG9hZEJsb2NrKWFjdGlvbgogewog
ICAgIGF1dG8gY2hhbmdlQ291bnRCZWZvcmVMb2FkaW5nID0gX2NoYW5nZUNvdW50OworICAgIGF1
dG8gdHlwZVRvRmlsZVVSTE1hcHMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGlu
aXRXaXRoQ2FwYWNpdHk6W19pdGVtUHJvdmlkZXJzIGNvdW50XV0pOwogCisgICAgLy8gRmlyc3Qs
IGZpZ3VyZSBvdXQgd2hpY2ggaXRlbSBwcm92aWRlcnMgd2Ugd2FudCB0byB0cnkgYW5kIGxvYWQg
ZmlsZXMgZnJvbS4KICAgICBhdXRvIGl0ZW1Qcm92aWRlcnNXaXRoRmlsZXMgPSBhZG9wdE5TKFtb
TlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKICAgICBhdXRvIGNvbnRlbnRUeXBlSWRlbnRp
ZmllcnNUb0xvYWQgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKLSAg
ICBhdXRvIGxvYWRlZEZpbGVVUkxzID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBp
bml0XSk7Ci0gICAgZm9yIChVSUl0ZW1Qcm92aWRlciAqaXRlbVByb3ZpZGVyIGluIF9pdGVtUHJv
dmlkZXJzLmdldCgpKSB7CisgICAgYXV0byBpbmRpY2VzT2ZJdGVtUHJvdmlkZXJzV2l0aEZpbGVz
ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XSk7CisgICAgW19pdGVtUHJv
dmlkZXJzIGVudW1lcmF0ZU9iamVjdHNVc2luZ0Jsb2NrOltpdGVtUHJvdmlkZXJzV2l0aEZpbGVz
LCBjb250ZW50VHlwZUlkZW50aWZpZXJzVG9Mb2FkLCBpbmRpY2VzT2ZJdGVtUHJvdmlkZXJzV2l0
aEZpbGVzLCB0eXBlVG9GaWxlVVJMTWFwc10gKFVJSXRlbVByb3ZpZGVyICppdGVtUHJvdmlkZXIs
IE5TVUludGVnZXIgaW5kZXgsIEJPT0wgKikgewogICAgICAgICBOU1N0cmluZyAqdHlwZUlkZW50
aWZpZXJPZkNvbnRlbnRUb1NhdmUgPSBuaWw7CiAgICAgICAgIGZvciAoTlNTdHJpbmcgKmlkZW50
aWZpZXIgaW4gaXRlbVByb3ZpZGVyLnJlZ2lzdGVyZWRUeXBlSWRlbnRpZmllcnMpIHsKICAgICAg
ICAgICAgIGlmICghVVRUeXBlQ29uZm9ybXNUbygoQ0ZTdHJpbmdSZWYpaWRlbnRpZmllciwga1VU
VHlwZUNvbnRlbnQpKQpAQCAtNDAxLDggKzQzMywxMSBAQCAtICh2b2lkKWRvQWZ0ZXJMb2FkaW5n
UHJvdmlkZWRDb250ZW50SW50b0ZpbGVVUkxzOihXZWJJdGVtUHJvdmlkZXJGaWxlTG9hZEJsb2Nr
KQogICAgICAgICBpZiAodHlwZUlkZW50aWZpZXJPZkNvbnRlbnRUb1NhdmUpIHsKICAgICAgICAg
ICAgIFtpdGVtUHJvdmlkZXJzV2l0aEZpbGVzIGFkZE9iamVjdDppdGVtUHJvdmlkZXJdOwogICAg
ICAgICAgICAgW2NvbnRlbnRUeXBlSWRlbnRpZmllcnNUb0xvYWQgYWRkT2JqZWN0OnR5cGVJZGVu
dGlmaWVyT2ZDb250ZW50VG9TYXZlXTsKKyAgICAgICAgICAgIFtpbmRpY2VzT2ZJdGVtUHJvdmlk
ZXJzV2l0aEZpbGVzIGFkZE9iamVjdDpAKGluZGV4KV07CiAgICAgICAgIH0KLSAgICB9CisKKyAg
ICAgICAgW3R5cGVUb0ZpbGVVUkxNYXBzIGFkZE9iamVjdDpAeyB9XTsKKyAgICB9XTsKIAogICAg
IGlmICghW2l0ZW1Qcm92aWRlcnNXaXRoRmlsZXMgY291bnRdKSB7CiAgICAgICAgIGFjdGlvbihA
WyBdKTsKQEAgLTQxMywyNyArNDQ4LDM0IEBAIC0gKHZvaWQpZG9BZnRlckxvYWRpbmdQcm92aWRl
ZENvbnRlbnRJbnRvRmlsZVVSTHM6KFdlYkl0ZW1Qcm92aWRlckZpbGVMb2FkQmxvY2spCiAgICAg
Zm9yIChOU1VJbnRlZ2VyIGluZGV4ID0gMDsgaW5kZXggPCBbaXRlbVByb3ZpZGVyc1dpdGhGaWxl
cyBjb3VudF07ICsraW5kZXgpIHsKICAgICAgICAgUmV0YWluUHRyPFVJSXRlbVByb3ZpZGVyPiBp
dGVtUHJvdmlkZXIgPSBbaXRlbVByb3ZpZGVyc1dpdGhGaWxlcyBvYmplY3RBdEluZGV4OmluZGV4
XTsKICAgICAgICAgUmV0YWluUHRyPE5TU3RyaW5nPiB0eXBlSWRlbnRpZmllciA9IFtjb250ZW50
VHlwZUlkZW50aWZpZXJzVG9Mb2FkIG9iamVjdEF0SW5kZXg6aW5kZXhdOworICAgICAgICBOU1VJ
bnRlZ2VyIGluZGV4SW5JdGVtUHJvdmlkZXJBcnJheSA9IFtbaW5kaWNlc09mSXRlbVByb3ZpZGVy
c1dpdGhGaWxlcyBvYmplY3RBdEluZGV4OmluZGV4XSB1bnNpZ25lZEludGVnZXJWYWx1ZV07CiAg
ICAgICAgIFJldGFpblB0cjxOU1N0cmluZz4gc3VnZ2VzdGVkTmFtZSA9IFtpdGVtUHJvdmlkZXIg
c3VnZ2VzdGVkTmFtZV07CiAgICAgICAgIGRpc3BhdGNoX2dyb3VwX2VudGVyKGZpbGVMb2FkaW5n
R3JvdXAuZ2V0KCkpOwotICAgICAgICBkaXNwYXRjaF9ncm91cF9hc3luYyhmaWxlTG9hZGluZ0dy
b3VwLmdldCgpLCBkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBbaXRlbVByb3ZpZGVyLCB0eXBl
SWRlbnRpZmllciwgc3VnZ2VzdGVkTmFtZSwgbG9hZGVkRmlsZVVSTHMsIGZpbGVMb2FkaW5nR3Jv
dXBdIHsKLSAgICAgICAgICAgIFtpdGVtUHJvdmlkZXIgbG9hZEZpbGVSZXByZXNlbnRhdGlvbkZv
clR5cGVJZGVudGlmaWVyOnR5cGVJZGVudGlmaWVyLmdldCgpIGNvbXBsZXRpb25IYW5kbGVyOltz
dWdnZXN0ZWROYW1lLCBsb2FkZWRGaWxlVVJMcywgZmlsZUxvYWRpbmdHcm91cF0gKE5TVVJMICp1
cmwsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgICAgIGRpc3BhdGNoX2dyb3VwX2FzeW5jKGZpbGVM
b2FkaW5nR3JvdXAuZ2V0KCksIGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtpbmRleEluSXRl
bVByb3ZpZGVyQXJyYXksIGl0ZW1Qcm92aWRlciwgdHlwZUlkZW50aWZpZXIsIHN1Z2dlc3RlZE5h
bWUsIHR5cGVUb0ZpbGVVUkxNYXBzLCBmaWxlTG9hZGluZ0dyb3VwXSB7CisgICAgICAgICAgICBb
aXRlbVByb3ZpZGVyIGxvYWRGaWxlUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjp0eXBl
SWRlbnRpZmllci5nZXQoKSBjb21wbGV0aW9uSGFuZGxlcjpbaW5kZXhJbkl0ZW1Qcm92aWRlckFy
cmF5LCBzdWdnZXN0ZWROYW1lLCB0eXBlSWRlbnRpZmllciwgdHlwZVRvRmlsZVVSTE1hcHMsIGZp
bGVMb2FkaW5nR3JvdXBdIChOU1VSTCAqdXJsLCBOU0Vycm9yICplcnJvcikgewogICAgICAgICAg
ICAgICAgIC8vIEFmdGVyIGV4ZWN1dGluZyB0aGlzIGNvbXBsZXRpb24gYmxvY2ssIFVJS2l0IHJl
bW92ZXMgdGhlIGZpbGUgYXQgdGhlIGdpdmVuIFVSTC4gSG93ZXZlciwgd2UgbmVlZCB0aGlzIGRh
dGEgdG8gcGVyc2lzdCBsb25nZXIgZm9yIHRoZSB3ZWIgY29udGVudCBwcm9jZXNzLgogICAgICAg
ICAgICAgICAgIC8vIFRvIGFkZHJlc3MgdGhpcywgd2UgaGFyZCBsaW5rIHRoZSBnaXZlbiBVUkwg
dG8gYSBuZXcgdGVtcG9yYXJ5IGZpbGUgaW4gdGhlIHRlbXBvcmFyeSBkaXJlY3RvcnkuIFRoaXMg
Zm9sbG93cyB0aGUgc2FtZSBmbG93IGFzIHJlZ3VsYXIgZmlsZSB1cGxvYWQsIGluCiAgICAgICAg
ICAgICAgICAgLy8gV0tGaWxlVXBsb2FkUGFuZWwubW0uIFRoZSB0ZW1wb3JhcnkgZmlsZXMgYXJl
IGNsZWFuZWQgdXAgYnkgdGhlIHN5c3RlbSBhdCBhIGxhdGVyIHRpbWUuCiAgICAgICAgICAgICAg
ICAgUmV0YWluUHRyPE5TVVJMPiBkZXN0aW5hdGlvblVSTCA9IHRlbXBvcmFyeUZpbGVVUkxGb3JE
YXRhSW50ZXJhY3Rpb25Db250ZW50KHVybC5wYXRoRXh0ZW5zaW9uLCBzdWdnZXN0ZWROYW1lLmdl
dCgpKTsKLSAgICAgICAgICAgICAgICBpZiAoZGVzdGluYXRpb25VUkwgJiYgIWVycm9yICYmIFtb
TlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gbGlua0l0ZW1BdFVSTDp1cmwgdG9VUkw6ZGVz
dGluYXRpb25VUkwuZ2V0KCkgZXJyb3I6bmlsXSkKLSAgICAgICAgICAgICAgICAgICAgW2xvYWRl
ZEZpbGVVUkxzIGFkZE9iamVjdDpkZXN0aW5hdGlvblVSTC5nZXQoKV07Ci0gICAgICAgICAgICAg
ICAgZGlzcGF0Y2hfZ3JvdXBfbGVhdmUoZmlsZUxvYWRpbmdHcm91cC5nZXQoKSk7CisgICAgICAg
ICAgICAgICAgaWYgKCFkZXN0aW5hdGlvblVSTCB8fCBlcnJvciB8fCAhW1tOU0ZpbGVNYW5hZ2Vy
IGRlZmF1bHRNYW5hZ2VyXSBsaW5rSXRlbUF0VVJMOnVybCB0b1VSTDpkZXN0aW5hdGlvblVSTC5n
ZXQoKSBlcnJvcjpuaWxdKSB7CisgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoX2dyb3VwX2xl
YXZlKGZpbGVMb2FkaW5nR3JvdXAuZ2V0KCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZGlzcGF0Y2hfYXN5bmMoZGlz
cGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgW2luZGV4SW5JdGVtUHJvdmlkZXJBcnJheSwgdHlwZUlk
ZW50aWZpZXIsIGRlc3RpbmF0aW9uVVJMLCB0eXBlVG9GaWxlVVJMTWFwcywgZmlsZUxvYWRpbmdH
cm91cF0geworICAgICAgICAgICAgICAgICAgICBbdHlwZVRvRmlsZVVSTE1hcHMgc2V0T2JqZWN0
OltOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3Q6ZGVzdGluYXRpb25VUkwuZ2V0KCkg
Zm9yS2V5OnR5cGVJZGVudGlmaWVyLmdldCgpXSBhdEluZGV4ZWRTdWJzY3JpcHQ6aW5kZXhJbkl0
ZW1Qcm92aWRlckFycmF5XTsKKyAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hfZ3JvdXBfbGVh
dmUoZmlsZUxvYWRpbmdHcm91cC5nZXQoKSk7CisgICAgICAgICAgICAgICAgfSk7CiAgICAgICAg
ICAgICB9XTsKICAgICAgICAgfSk7CiAgICAgfQogCiAgICAgUmV0YWluUHRyPFdlYkl0ZW1Qcm92
aWRlclBhc3RlYm9hcmQ+IHJldGFpbmVkU2VsZiA9IHNlbGY7Ci0gICAgZGlzcGF0Y2hfZ3JvdXBf
bm90aWZ5KGZpbGVMb2FkaW5nR3JvdXAuZ2V0KCksIGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCks
IFtyZXRhaW5lZFNlbGYsIGZpbGVMb2FkaW5nR3JvdXAsIGxvYWRlZEZpbGVVUkxzLCBjb21wbGV0
aW9uQmxvY2sgPSBtYWtlQmxvY2tQdHIoYWN0aW9uKSwgY2hhbmdlQ291bnRCZWZvcmVMb2FkaW5n
XSB7CisgICAgZGlzcGF0Y2hfZ3JvdXBfbm90aWZ5KGZpbGVMb2FkaW5nR3JvdXAuZ2V0KCksIGRp
c3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtyZXRhaW5lZFNlbGYsIGZpbGVMb2FkaW5nR3JvdXAs
IHR5cGVUb0ZpbGVVUkxNYXBzLCBjb21wbGV0aW9uQmxvY2sgPSBtYWtlQmxvY2tQdHIoYWN0aW9u
KSwgY2hhbmdlQ291bnRCZWZvcmVMb2FkaW5nXSB7CiAgICAgICAgIGlmIChjaGFuZ2VDb3VudEJl
Zm9yZUxvYWRpbmcgPT0gcmV0YWluZWRTZWxmLT5fY2hhbmdlQ291bnQpCi0gICAgICAgICAgICBy
ZXRhaW5lZFNlbGYtPl9maWxlbmFtZXNGb3JEYXRhSW50ZXJhY3Rpb24gPSBhZG9wdE5TKFtsb2Fk
ZWRGaWxlVVJMcyBjb3B5XSk7CisgICAgICAgICAgICByZXRhaW5lZFNlbGYtPl90eXBlVG9GaWxl
VVJMTWFwcyA9IHR5cGVUb0ZpbGVVUkxNYXBzOwogCi0gICAgICAgIGNvbXBsZXRpb25CbG9jayhs
b2FkZWRGaWxlVVJMcy5nZXQoKSk7CisgICAgICAgIGNvbXBsZXRpb25CbG9jayhbcmV0YWluZWRT
ZWxmIGZpbGVVUkxzRm9yRGF0YUludGVyYWN0aW9uXSk7CiAgICAgfSk7CiB9CiAK
</data>
<flag name="review"
          id="329404"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
      

    </bug>

</bugzilla>