<?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>130769</bug_id>
          
          <creation_ts>2014-03-26 01:19:58 -0700</creation_ts>
          <short_desc>Make _processText and _traverseNode in HTMLConverter more efficient</short_desc>
          <delta_ts>2014-03-26 21:17:11 -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>HTML Editing</component>
          <version>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>130227</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>darin</cc>
    
    <cc>enrica</cc>
    
    <cc>kling</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>994515</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-03-26 01:19:58 -0700</bug_when>
    <thetext>_processText and _traverseNode are two hottest functions in HTMLConverter.
Make them faster by using more raw WebCore objects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>994516</commentid>
    <comment_count>1</comment_count>
      <attachid>227833</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-03-26 01:21:41 -0700</bug_when>
    <thetext>Created attachment 227833
Cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>994517</commentid>
    <comment_count>2</comment_count>
      <attachid>227834</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-03-26 01:22:21 -0700</bug_when>
    <thetext>Created attachment 227834
Reverted erroneous changes to PerformanceTests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>994818</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-03-26 21:17:11 -0700</bug_when>
    <thetext>Committed in http://trac.webkit.org/r166342.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>227833</attachid>
            <date>2014-03-26 01:21:41 -0700</date>
            <delta_ts>2014-03-26 01:22:21 -0700</delta_ts>
            <desc>Cleanup</desc>
            <filename>fix130769</filename>
            <type>text/plain</type>
            <size>21410</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNjYyODQpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDE0LTAzLTI1ICBS
eW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIE5lZWQgYSBzaG9ydCBk
ZXNjcmlwdGlvbiAoT09QUyEpLgorICAgICAgICBOZWVkIHRoZSBidWcgVVJMIChPT1BTISkuCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBJbnRlcmFj
dGl2ZS9Db3B5QWxsLmh0bWw6CisKKzIwMTQtMDMtMjQgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgUmVwbGFjZSBIVE1MQ29udmVydGVyOjpfc3RyaW5nRm9yTm9k
ZSBieSBwcm9wZXJ0eVZhbHVlRm9yTm9kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTMwNzExCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBJbnRlcmFjdGl2ZS9Db3B5QWxsLmh0bWw6CisKIDIwMTQtMDMt
MjAgIFpvbHRhbiBIb3J2YXRoICA8em9sdGFuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQWRkIG9w
dGlvbiBmb3IgaGlkaW5nIENvbmZpZGVuY2UgSW50ZXJ2YWwgRGVsdGEgb24gdGhlIHBlcmZvcm1h
bmNlIHRlc3RzIHJlc3VsdHMgcGFnZQpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9JbnRlcmFjdGl2
ZS9Db3B5QWxsLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9JbnRlcmFjdGl2
ZS9Db3B5QWxsLmh0bWwJKHJldmlzaW9uIDE2NjI4MykKKysrIFBlcmZvcm1hbmNlVGVzdHMvSW50
ZXJhY3RpdmUvQ29weUFsbC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw4IEBACiAg
ICAgICAgIH0sCiAgICAgICAgIGRvbmU6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgIGRvY3Vt
ZW50LnF1ZXJ5U2VsZWN0b3IoJ2lmcmFtZScpLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaWZyYW1l
KTsKLSAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICBjdXN0b21JdGVyYXRpb25Db3VudDog
MiwKICAgICB9KTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY2Mjg2KQorKysgU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQgQEAKKzIw
MTQtMDMtMjYgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTWFr
ZSBfcHJvY2Vzc1RleHQgYW5kIF90cmF2ZXJzZU5vZGUgaW4gSFRNTENvbnZlcnRlciBtb3JlIGVm
ZmljaWVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTMwNzY5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
UmV3cm90ZSBhIGJ1bmNoIG9mIGNvZGUgaW4gQysrIGFuZCBhdm9pZGVkIGNyZWF0aW5nIHdyYXBw
ZXJzLgorICAgICAgICBUaGlzIHJlZHVjZXMgdGhlIHJ1bnRpbWUgb2YgSW50ZXJhY3RpdmUvQ29w
eUFsbC5odG1sIGZyb20gfjE2LjVzIHRvIDE1cy4KKworICAgICAgICAqIGVkaXRpbmcvY29jb2Ev
SFRNTENvbnZlcnRlci5tbToKKyAgICAgICAgKEhUTUxDb252ZXJ0ZXJDYWNoZXM6OmlzQW5jZXN0
b3JzT2ZTdGFydFRvQmVDb252ZXJ0ZWQpOgorICAgICAgICAoSFRNTENvbnZlcnRlcjo6SFRNTENv
bnZlcnRlcik6CisgICAgICAgIChIVE1MQ29udmVydGVyOjp+SFRNTENvbnZlcnRlcik6CisgICAg
ICAgIChIVE1MQ29udmVydGVyOjpfcHJvY2Vzc0VsZW1lbnQpOgorICAgICAgICAoSFRNTENvbnZl
cnRlcjo6X3Byb2Nlc3NUZXh0KToKKyAgICAgICAgKEhUTUxDb252ZXJ0ZXI6Ol90cmF2ZXJzZU5v
ZGUpOgorICAgICAgICAoSFRNTENvbnZlcnRlcjo6X3RyYXZlcnNlRm9vdGVyTm9kZSk6CisgICAg
ICAgIChIVE1MQ29udmVydGVyQ2FjaGVzOjpjYWNoZUFuY2VzdG9yc09mU3RhcnRUb0JlQ29udmVy
dGVkKToKKyAgICAgICAgKEhUTUxDb252ZXJ0ZXI6Ol9sb2FkRnJvbURPTVJhbmdlKToKKwogMjAx
NC0wMy0yNSAgUHJhdGlrIFNvbGFua2kgIDxwc29sYW5raUBhcHBsZS5jb20+CiAKICAgICAgICAg
aU9TIGJ1aWxkIGZpeC4gQWRkIG1pc3Npbmcgc2VtaWNvbG9uLgpJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbQkocmV2aXNpb24gMTY2Mjg0KQor
KysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC00OSw2ICs0OSw3IEBACiAjaW1wb3J0ICJGcmFtZS5oIgogI2ltcG9ydCAiRnJh
bWVMb2FkZXIuaCIKICNpbXBvcnQgIkhUTUxFbGVtZW50LmgiCisjaW1wb3J0ICJIVE1MRnJhbWVF
bGVtZW50QmFzZS5oIgogI2ltcG9ydCAiSFRNTE5hbWVzLmgiCiAjaW1wb3J0ICJIVE1MUGFyc2Vy
SWRpb21zLmgiCiAjaW1wb3J0ICJMb2FkZXJOU1VSTEV4dHJhcy5oIgpAQCAtNjAsNiArNjEsNyBA
QAogI2ltcG9ydCAiVGV4dEl0ZXJhdG9yLmgiCiAjaW1wb3J0IDxvYmpjL3J1bnRpbWUuaD4KICNp
bXBvcnQgPHd0Zi9BU0NJSUNUeXBlLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVy
Lmg+CiAKICNpZiBQTEFURk9STShJT1MpCiAKQEAgLTQxNiw4ICs0MTgsMTIgQEAKICAgICBQYXNz
UmVmUHRyPENTU1ZhbHVlPiBjb21wdXRlZFN0eWxlUHJvcGVydHlGb3JFbGVtZW50KEVsZW1lbnQm
LCBDU1NQcm9wZXJ0eUlEKTsKICAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBpbmxpbmVTdHlsZVBy
b3BlcnR5Rm9yRWxlbWVudChFbGVtZW50JiwgQ1NTUHJvcGVydHlJRCk7CiAKKyAgICBOb2RlKiBj
YWNoZUFuY2VzdG9yc09mU3RhcnRUb0JlQ29udmVydGVkKGNvbnN0IFJhbmdlJik7CisgICAgYm9v
bCBpc0FuY2VzdG9yc09mU3RhcnRUb0JlQ29udmVydGVkKE5vZGUqIG5vZGUpIGNvbnN0IHsgcmV0
dXJuIG1fYW5jZXN0b3JzVW5kZXJDb21tb25BbmNlc3Rvci5jb250YWlucyhub2RlKTsgfQorCiBw
cml2YXRlOgogICAgIEhhc2hNYXA8RWxlbWVudCosIHN0ZDo6dW5pcXVlX3B0cjxDb21wdXRlZFN0
eWxlRXh0cmFjdG9yPj4gbV9jb21wdXRlZFN0eWxlczsKKyAgICBIYXNoU2V0PE5vZGUqPiBtX2Fu
Y2VzdG9yc1VuZGVyQ29tbW9uQW5jZXN0b3I7CiB9OwogCiBAaW50ZXJmYWNlIE5TVGV4dExpc3Qg
KFdlYkNvcmVOU1RleHRMaXN0RGV0YWlscykKQEAgLTQ1Miw3ICs0NTgsNiBAQAogICAgIE5TVVJM
ICpfYmFzZVVSTDsKICAgICBET01Eb2N1bWVudCAqX2RvY3VtZW50OwogICAgIERPTVJhbmdlICpf
ZG9tUmFuZ2U7Ci0gICAgTlNNdXRhYmxlQXJyYXkgKl9kb21TdGFydEFuY2VzdG9yczsKICAgICBX
ZWJDb3JlOjpEb2N1bWVudExvYWRlciAqX2RhdGFTb3VyY2U7CiAgICAgTlNNdXRhYmxlQXJyYXkg
Kl90ZXh0TGlzdHM7CiAgICAgTlNNdXRhYmxlQXJyYXkgKl90ZXh0QmxvY2tzOwpAQCAtNDg3LDcg
KzQ5Miw3IEBACiAgICAgUGxhdGZvcm1Db2xvciAqX2NvbG9yRm9yTm9kZShET01Ob2RlICosIENT
U1Byb3BlcnR5SUQpOwogICAgIEJPT0wgX2dldEZsb2F0KENHRmxvYXQgKnZhbCwgRE9NTm9kZSAq
LCBDU1NQcm9wZXJ0eUlEKTsKIAotICAgIHZvaWQgX3RyYXZlcnNlTm9kZShET01Ob2RlICpub2Rl
LCBOU0ludGVnZXIgZGVwdGgsIEJPT0wgZW1iZWRkZWQpOworICAgIHZvaWQgX3RyYXZlcnNlTm9k
ZShOb2RlKiBub2RlLCB1bnNpZ25lZCBkZXB0aCwgYm9vbCBlbWJlZGRlZCk7CiAgICAgdm9pZCBf
dHJhdmVyc2VGb290ZXJOb2RlKERPTU5vZGUgKm5vZGUsIE5TSW50ZWdlciBkZXB0aCk7CiAgICAg
CiAgICAgTlNEaWN0aW9uYXJ5ICpfY29tcHV0ZWRBdHRyaWJ1dGVzRm9yRWxlbWVudChET01FbGVt
ZW50ICopOwpAQCAtNTEyLDcgKzUxNyw3IEBACiAgICAgQk9PTCBfcHJvY2Vzc0VsZW1lbnQoRE9N
RWxlbWVudCAqZWxlbWVudCwgTlNJbnRlZ2VyIGRlcHRoKTsKICAgICB2b2lkIF9hZGRNYXJrZXJz
VG9MaXN0KE5TVGV4dExpc3QgKmxpc3QsIE5TUmFuZ2UgcmFuZ2UpOwogICAgIHZvaWQgX2V4aXRF
bGVtZW50KERPTUVsZW1lbnQgKmVsZW1lbnQsIE5TSW50ZWdlciBkZXB0aCwgTlNVSW50ZWdlciBz
dGFydEluZGV4KTsKLSAgICB2b2lkIF9wcm9jZXNzVGV4dChET01DaGFyYWN0ZXJEYXRhICp0ZXh0
KTsKKyAgICB2b2lkIF9wcm9jZXNzVGV4dChDaGFyYWN0ZXJEYXRhJik7CiAgICAgdm9pZCBfYWRq
dXN0VHJhaWxpbmdOZXdsaW5lKCk7CiB9OwogCkBAIC01MjMsNyArNTI4LDYgQEAKICAgICBfZG9j
dW1lbnRBdHRycyA9IFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF07CiAgICAgX2Jh
c2VVUkwgPSBuaWw7CiAgICAgX2RvY3VtZW50ID0gbmlsOwotICAgIF9kb21TdGFydEFuY2VzdG9y
cyA9IG5pbDsKICAgICBfZGF0YVNvdXJjZSA9IG51bGxwdHI7CiAgICAgX3RleHRMaXN0cyA9IFtb
TlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdOwogICAgIF90ZXh0QmxvY2tzID0gW1tOU011dGFi
bGVBcnJheSBhbGxvY10gaW5pdF07CkBAIC01NTUsNyArNTU5LDYgQEAKICAgICBbX2F0dHJTdHIg
cmVsZWFzZV07CiAgICAgW19kb2N1bWVudEF0dHJzIHJlbGVhc2VdOwogICAgIFtfZG9tUmFuZ2Ug
cmVsZWFzZV07Ci0gICAgW19kb21TdGFydEFuY2VzdG9ycyByZWxlYXNlXTsKICAgICBbX3RleHRM
aXN0cyByZWxlYXNlXTsKICAgICBbX3RleHRCbG9ja3MgcmVsZWFzZV07CiAgICAgW190ZXh0VGFi
bGVzIHJlbGVhc2VdOwpAQCAtMTk4MCwyMSArMTk4MywxMSBAQAogICAgICAgICAgICAgaWYgKHVy
bCkKICAgICAgICAgICAgICAgICByZXR2YWwgPSAhX2FkZEF0dGFjaG1lbnRGb3JFbGVtZW50KGVs
ZW1lbnQsIHVybCwgaXNCbG9ja0xldmVsLCBOTyk7CiAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYg
KGNvcmVFbGVtZW50Lmhhc1RhZ05hbWUoZnJhbWVUYWcpKSB7Ci0gICAgICAgIGlmIChbZWxlbWVu
dCByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGNvbnRlbnREb2N1bWVudCldKSB7Ci0gICAg
ICAgICAgICBET01Eb2N1bWVudCAqY29udGVudERvY3VtZW50ID0gWyhET01IVE1MRnJhbWVFbGVt
ZW50ICopZWxlbWVudCBjb250ZW50RG9jdW1lbnRdOwotICAgICAgICAgICAgaWYgKGNvbnRlbnRE
b2N1bWVudCkKLSAgICAgICAgICAgICAgICBfdHJhdmVyc2VOb2RlKGNvbnRlbnREb2N1bWVudCwg
ZGVwdGggKyAxLCBZRVMpOworICAgIH0gZWxzZSBpZiAoY29yZUVsZW1lbnQuaGFzVGFnTmFtZShm
cmFtZVRhZykgfHwgY29yZUVsZW1lbnQuaGFzVGFnTmFtZShpZnJhbWVUYWcpKSB7CisgICAgICAg
IGlmIChEb2N1bWVudCogY29udGVudERvY3VtZW50ID0gdG9IVE1MRnJhbWVFbGVtZW50QmFzZShj
b3JlRWxlbWVudCkuY29udGVudERvY3VtZW50KCkpIHsKKyAgICAgICAgICAgIF90cmF2ZXJzZU5v
ZGUoY29udGVudERvY3VtZW50LCBkZXB0aCArIDEsIHRydWUgLyogZW1iZWRkZWQgKi8pOworICAg
ICAgICAgICAgcmV0dmFsID0gTk87CiAgICAgICAgIH0KLSAgICAgICAgcmV0dmFsID0gTk87Ci0g
ICAgfSBlbHNlIGlmIChjb3JlRWxlbWVudC5oYXNUYWdOYW1lKGlmcmFtZVRhZykpIHsKLSAgICAg
ICAgaWYgKFtlbGVtZW50IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoY29udGVudERvY3Vt
ZW50KV0pIHsKLSAgICAgICAgICAgIERPTURvY3VtZW50ICpjb250ZW50RG9jdW1lbnQgPSBbKERP
TUhUTUxJRnJhbWVFbGVtZW50ICopZWxlbWVudCBjb250ZW50RG9jdW1lbnRdOwotICAgICAgICAg
ICAgaWYgKGNvbnRlbnREb2N1bWVudCkgewotICAgICAgICAgICAgICAgIF90cmF2ZXJzZU5vZGUo
Y29udGVudERvY3VtZW50LCBkZXB0aCArIDEsIFlFUyk7Ci0gICAgICAgICAgICAgICAgcmV0dmFs
ID0gTk87Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KICAgICB9IGVsc2UgaWYgKGNvcmVFbGVt
ZW50Lmhhc1RhZ05hbWUoYnJUYWcpKSB7CiAgICAgICAgIERPTUVsZW1lbnQgKmJsb2NrRWxlbWVu
dCA9IF9ibG9ja0xldmVsRWxlbWVudEZvck5vZGUoW2VsZW1lbnQgcGFyZW50Tm9kZV0pOwogICAg
ICAgICBOU1N0cmluZyAqYnJlYWtDbGFzcyA9IFtlbGVtZW50IGdldEF0dHJpYnV0ZTpAImNsYXNz
Il0sICpibG9ja1RhZyA9IFtibG9ja0VsZW1lbnQgdGFnTmFtZV07CkBAIC0yMjY3LDEwMCArMjI2
MCw4OSBAQAogICAgIH0KIH0KIAotdm9pZCBIVE1MQ29udmVydGVyOjpfcHJvY2Vzc1RleHQoRE9N
Q2hhcmFjdGVyRGF0YSAqdGV4dCkKK3ZvaWQgSFRNTENvbnZlcnRlcjo6X3Byb2Nlc3NUZXh0KENo
YXJhY3RlckRhdGEmIGNoYXJhY3RlckRhdGEpCiB7Ci0gICAgQVNTRVJUKHRleHQpOwotICAgIENo
YXJhY3RlckRhdGEmIGNoYXJhY3RlckRhdGEgPSAqY29yZSh0ZXh0KTsKLSAgICBOU1N0cmluZyAq
aW5zdHIgPSBbdGV4dCBkYXRhXTsKLSAgICBOU1N0cmluZyAqb3V0c3RyID0gaW5zdHI7CiAgICAg
TlNVSW50ZWdlciB0ZXh0TGVuZ3RoID0gW19hdHRyU3RyIGxlbmd0aF07Ci0gICAgTlNVSW50ZWdl
ciBzdGFydE9mZnNldCA9IDA7Ci0gICAgTlNVSW50ZWdlciBlbmRPZmZzZXQgPSBbaW5zdHIgbGVu
Z3RoXTsKICAgICB1bmljaGFyIGxhc3RDaGFyID0gKHRleHRMZW5ndGggPiAwKSA/IFtbX2F0dHJT
dHIgc3RyaW5nXSBjaGFyYWN0ZXJBdEluZGV4OnRleHRMZW5ndGggLSAxXSA6ICdcbic7Ci0gICAg
Qk9PTCB3YXNTcGFjZSA9IE5POwotICAgIEJPT0wgd2FzTGVhZGluZyA9IFlFUzsKICAgICBCT09M
IHN1cHByZXNzTGVhZGluZ1NwYWNlID0gKChfZmxhZ3MuaXNTb2Z0ICYmIGxhc3RDaGFyID09ICcg
JykgfHwgbGFzdENoYXIgPT0gJ1xuJyB8fCBsYXN0Q2hhciA9PSAnXHInIHx8IGxhc3RDaGFyID09
ICdcdCcgfHwgbGFzdENoYXIgPT0gTlNQYXJhZ3JhcGhTZXBhcmF0b3JDaGFyYWN0ZXIgfHwgbGFz
dENoYXIgPT0gTlNMaW5lU2VwYXJhdG9yQ2hhcmFjdGVyIHx8IGxhc3RDaGFyID09IE5TRm9ybUZl
ZWRDaGFyYWN0ZXIgfHwgbGFzdENoYXIgPT0gV2ViTmV4dExpbmVDaGFyYWN0ZXIpOwogICAgIE5T
UmFuZ2UgcmFuZ2VUb1JlcGxhY2UgPSBOU01ha2VSYW5nZSh0ZXh0TGVuZ3RoLCAwKTsKICAgICBD
Rk11dGFibGVTdHJpbmdSZWYgbXV0c3RyID0gTlVMTDsKIAorICAgIFN0cmluZyBvcmlnaW5hbFN0
cmluZyA9IGNoYXJhY3RlckRhdGEuZGF0YSgpOworICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0g
MDsKKyAgICB1bnNpZ25lZCBlbmRPZmZzZXQgPSBvcmlnaW5hbFN0cmluZy5sZW5ndGgoKTsKICAg
ICBpZiAoX2RvbVJhbmdlKSB7Ci0gICAgICAgIGlmICh0ZXh0ID09IFtfZG9tUmFuZ2Ugc3RhcnRD
b250YWluZXJdKSB7CisgICAgICAgIGlmICgmY2hhcmFjdGVyRGF0YSA9PSBjb3JlKFtfZG9tUmFu
Z2Ugc3RhcnRDb250YWluZXJdKSkgewogICAgICAgICAgICAgc3RhcnRPZmZzZXQgPSAoTlNVSW50
ZWdlcilbX2RvbVJhbmdlIHN0YXJ0T2Zmc2V0XTsKICAgICAgICAgICAgIF9kb21SYW5nZVN0YXJ0
SW5kZXggPSBbX2F0dHJTdHIgbGVuZ3RoXTsKICAgICAgICAgICAgIF9mbGFncy5yZWFjaGVkU3Rh
cnQgPSBZRVM7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHRleHQgPT0gW19kb21SYW5nZSBlbmRD
b250YWluZXJdKSB7CisgICAgICAgIGlmICgmY2hhcmFjdGVyRGF0YSA9PSBjb3JlKFtfZG9tUmFu
Z2UgZW5kQ29udGFpbmVyXSkpIHsKICAgICAgICAgICAgIGVuZE9mZnNldCA9IChOU1VJbnRlZ2Vy
KVtfZG9tUmFuZ2UgZW5kT2Zmc2V0XTsKICAgICAgICAgICAgIF9mbGFncy5yZWFjaGVkRW5kID0g
WUVTOwogICAgICAgICB9Ci0gICAgICAgIGlmICgoc3RhcnRPZmZzZXQgPiAwIHx8IGVuZE9mZnNl
dCA8IFtpbnN0ciBsZW5ndGhdKSAmJiBlbmRPZmZzZXQgPj0gc3RhcnRPZmZzZXQpIHsKLSAgICAg
ICAgICAgIGluc3RyID0gW2luc3RyIHN1YnN0cmluZ1dpdGhSYW5nZTpOU01ha2VSYW5nZShzdGFy
dE9mZnNldCwgZW5kT2Zmc2V0IC0gc3RhcnRPZmZzZXQpXTsKLSAgICAgICAgICAgIG91dHN0ciA9
IGluc3RyOwotICAgICAgICB9CisgICAgICAgIGlmICgoc3RhcnRPZmZzZXQgPiAwIHx8IGVuZE9m
ZnNldCA8IG9yaWdpbmFsU3RyaW5nLmxlbmd0aCgpKSAmJiBlbmRPZmZzZXQgPj0gc3RhcnRPZmZz
ZXQpCisgICAgICAgICAgICBvcmlnaW5hbFN0cmluZyA9IG9yaWdpbmFsU3RyaW5nLnN1YnN0cmlu
ZyhzdGFydE9mZnNldCwgZW5kT2Zmc2V0IC0gc3RhcnRPZmZzZXQpOwogICAgIH0KKyAgICBTdHJp
bmcgb3V0cHV0U3RyaW5nID0gb3JpZ2luYWxTdHJpbmc7CiAKKyAgICAvLyBGSVhNRTogVXNlIFJl
bmRlclRleHQncyBjb250ZW50IGluc3RlYWQuCisgICAgYm9vbCB3YXNTcGFjZSA9IGZhbHNlOwog
ICAgIGlmIChfY2FjaGVzLT5wcm9wZXJ0eVZhbHVlRm9yTm9kZShjaGFyYWN0ZXJEYXRhLCBDU1NQ
cm9wZXJ0eVdoaXRlU3BhY2UpLnN0YXJ0c1dpdGgoInByZSIpKSB7Ci0gICAgICAgIGlmICh0ZXh0
TGVuZ3RoID4gMCAmJiBbaW5zdHIgbGVuZ3RoXSA+IDAgJiYgX2ZsYWdzLmlzU29mdCkgewotICAg
ICAgICAgICAgdW5pY2hhciBjID0gW2luc3RyIGNoYXJhY3RlckF0SW5kZXg6MF07CisgICAgICAg
IGlmICh0ZXh0TGVuZ3RoICYmIG9yaWdpbmFsU3RyaW5nLmxlbmd0aCgpICYmIF9mbGFncy5pc1Nv
ZnQpIHsKKyAgICAgICAgICAgIHVuaWNoYXIgYyA9IG9yaWdpbmFsU3RyaW5nLmF0KDApOwogICAg
ICAgICAgICAgaWYgKGMgPT0gJ1xuJyB8fCBjID09ICdccicgfHwgYyA9PSBOU1BhcmFncmFwaFNl
cGFyYXRvckNoYXJhY3RlciB8fCBjID09IE5TTGluZVNlcGFyYXRvckNoYXJhY3RlciB8fCBjID09
IE5TRm9ybUZlZWRDaGFyYWN0ZXIgfHwgYyA9PSBXZWJOZXh0TGluZUNoYXJhY3RlcikKICAgICAg
ICAgICAgICAgICByYW5nZVRvUmVwbGFjZSA9IE5TTWFrZVJhbmdlKHRleHRMZW5ndGggLSAxLCAx
KTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIENGU3RyaW5nSW5saW5lQnVmZmVy
IGlubGluZUJ1ZmZlcjsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IFRleHRCdWZmZXJTaXpl
ID0gMjU1OwotCi0gICAgICAgIHVuaWNoYXIgYnVmZmVyW1RleHRCdWZmZXJTaXplICsgMV07Ci0g
ICAgICAgIE5TVUludGVnZXIgaSwgY291bnQgPSBbaW5zdHIgbGVuZ3RoXSwgaWR4ID0gMDsKLQot
ICAgICAgICBtdXRzdHIgPSBDRlN0cmluZ0NyZWF0ZU11dGFibGUoTlVMTCwgMCk7Ci0gICAgICAg
IENGU3RyaW5nSW5pdElubGluZUJ1ZmZlcigoQ0ZTdHJpbmdSZWYpaW5zdHIsICZpbmxpbmVCdWZm
ZXIsIENGUmFuZ2VNYWtlKDAsIGNvdW50KSk7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3Vu
dDsgaSsrKSB7Ci0gICAgICAgICAgICB1bmljaGFyIGMgPSBDRlN0cmluZ0dldENoYXJhY3RlckZy
b21JbmxpbmVCdWZmZXIoJmlubGluZUJ1ZmZlciwgaSk7Ci0gICAgICAgICAgICBpZiAoYyA9PSAn
ICcgfHwgYyA9PSAnXG4nIHx8IGMgPT0gJ1xyJyB8fCBjID09ICdcdCcgfHwgYyA9PSAweGMgfHwg
YyA9PSAweDIwMGIpIHsKKyAgICAgICAgdW5zaWduZWQgY291bnQgPSBvcmlnaW5hbFN0cmluZy5s
ZW5ndGgoKTsKKyAgICAgICAgYm9vbCB3YXNMZWFkaW5nID0gdHJ1ZTsKKyAgICAgICAgU3RyaW5n
QnVpbGRlciBidWlsZGVyOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7
IGkrKykgeworICAgICAgICAgICAgVUNoYXIgYyA9IG9yaWdpbmFsU3RyaW5nLmF0KGkpOworICAg
ICAgICAgICAgYm9vbCBpc1doaXRlc3BhY2UgPSBjID09ICcgJyB8fCBjID09ICdcbicgfHwgYyA9
PSAnXHInIHx8IGMgPT0gJ1x0JyB8fCBjID09IDB4YyB8fCBjID09IDB4MjAwYjsKKyAgICAgICAg
ICAgIGlmIChpc1doaXRlc3BhY2UpCiAgICAgICAgICAgICAgICAgd2FzU3BhY2UgPSAoIXdhc0xl
YWRpbmcgfHwgIXN1cHByZXNzTGVhZGluZ1NwYWNlKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBpZiAod2FzU3BhY2UpCi0gICAgICAg
ICAgICAgICAgICAgIGJ1ZmZlcltpZHgrK10gPSAnICc7Ci0gICAgICAgICAgICAgICAgYnVmZmVy
W2lkeCsrXSA9IGM7Ci0gICAgICAgICAgICAgICAgaWYgKGlkeCA+PSBUZXh0QnVmZmVyU2l6ZSkg
ewotICAgICAgICAgICAgICAgICAgICBDRlN0cmluZ0FwcGVuZENoYXJhY3RlcnMobXV0c3RyLCBi
dWZmZXIsIGlkeCk7Ci0gICAgICAgICAgICAgICAgICAgIGlkeCA9IDA7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIHdhc1NwYWNlID0gd2FzTGVhZGluZyA9IE5POworICAgICAg
ICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOworICAgICAgICAgICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKGMpOworICAgICAgICAgICAgICAgIHdhc1NwYWNlID0gZmFsc2U7CisgICAgICAg
ICAgICAgICAgd2FzTGVhZGluZyA9IGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgICAgIGlmICh3YXNTcGFjZSkKLSAgICAgICAgICAgIGJ1ZmZlcltpZHgrK10gPSAnICc7Ci0g
ICAgICAgIGlmIChpZHggPiAwKQotICAgICAgICAgICAgQ0ZTdHJpbmdBcHBlbmRDaGFyYWN0ZXJz
KG11dHN0ciwgYnVmZmVyLCBpZHgpOwotICAgICAgICBvdXRzdHIgPSAoTlNTdHJpbmcgKiltdXRz
dHI7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOworICAgICAgICBvdXRwdXRTdHJp
bmcgPSBidWlsZGVyLnRvU3RyaW5nKCk7CiAgICAgfQotICAgIGlmIChbb3V0c3RyIGxlbmd0aF0g
PiAwKSB7CisKKyAgICBpZiAob3V0cHV0U3RyaW5nLmxlbmd0aCgpKSB7CiAgICAgICAgIFN0cmlu
ZyB0ZXh0VHJhbnNmb3JtID0gX2NhY2hlcy0+cHJvcGVydHlWYWx1ZUZvck5vZGUoY2hhcmFjdGVy
RGF0YSwgQ1NTUHJvcGVydHlUZXh0VHJhbnNmb3JtKTsKICAgICAgICAgaWYgKHRleHRUcmFuc2Zv
cm0ubGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIGlmICh0ZXh0VHJhbnNmb3JtID09ICJjYXBpdGFs
aXplIikKLSAgICAgICAgICAgICAgICBvdXRzdHIgPSBbb3V0c3RyIGNhcGl0YWxpemVkU3RyaW5n
XTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHRleHRUcmFuc2Zvcm0gPT0gInVwcGVyY2FzZSIpCi0g
ICAgICAgICAgICAgICAgb3V0c3RyID0gW291dHN0ciB1cHBlcmNhc2VTdHJpbmddOworICAgICAg
ICAgICAgaWYgKHRleHRUcmFuc2Zvcm0gPT0gImNhcGl0YWxpemUiKSB7Ly8gRklYTUU6IFRoaXMg
aXMgZXh0cmVtZWx5IGluZWZmaWNpZW50LgorICAgICAgICAgICAgICAgIE5TU3RyaW5nICp0ZW1w
b3JhcnlTdHJpbmcgPSBvdXRwdXRTdHJpbmc7CisgICAgICAgICAgICAgICAgb3V0cHV0U3RyaW5n
ID0gW3RlbXBvcmFyeVN0cmluZyBjYXBpdGFsaXplZFN0cmluZ107CisgICAgICAgICAgICB9IGVs
c2UgaWYgKHRleHRUcmFuc2Zvcm0gPT0gInVwcGVyY2FzZSIpCisgICAgICAgICAgICAgICAgb3V0
cHV0U3RyaW5nID0gb3V0cHV0U3RyaW5nLnVwcGVyKCk7CiAgICAgICAgICAgICBlbHNlIGlmICh0
ZXh0VHJhbnNmb3JtID09ICJsb3dlcmNhc2UiKQotICAgICAgICAgICAgICAgIG91dHN0ciA9IFtv
dXRzdHIgbG93ZXJjYXNlU3RyaW5nXTsKKyAgICAgICAgICAgICAgICBvdXRwdXRTdHJpbmcgPSBv
dXRwdXRTdHJpbmcubG93ZXIoKTsKICAgICAgICAgfQogCi0gICAgICAgIFtfYXR0clN0ciByZXBs
YWNlQ2hhcmFjdGVyc0luUmFuZ2U6cmFuZ2VUb1JlcGxhY2Ugd2l0aFN0cmluZzpvdXRzdHJdOwot
ICAgICAgICByYW5nZVRvUmVwbGFjZS5sZW5ndGggPSBbb3V0c3RyIGxlbmd0aF07CisgICAgICAg
IFtfYXR0clN0ciByZXBsYWNlQ2hhcmFjdGVyc0luUmFuZ2U6cmFuZ2VUb1JlcGxhY2Ugd2l0aFN0
cmluZzpvdXRwdXRTdHJpbmddOworICAgICAgICByYW5nZVRvUmVwbGFjZS5sZW5ndGggPSBvdXRw
dXRTdHJpbmcubGVuZ3RoKCk7CiAgICAgICAgIFJldGFpblB0cjxOU0RpY3Rpb25hcnk+IGF0dHJz
OwotICAgICAgICBET01FbGVtZW50ICplbGVtZW50ID0gKERPTUVsZW1lbnQgKil0ZXh0OwotICAg
ICAgICB3aGlsZSAoZWxlbWVudCkgeworICAgICAgICBOb2RlKiBhbmNlc3RvciA9IGNoYXJhY3Rl
ckRhdGEucGFyZW50Tm9kZSgpOworICAgICAgICB3aGlsZSAoYW5jZXN0b3IpIHsKICAgICAgICAg
ICAgIC8vIEZpbGwgYXR0cnMgZGljdGlvbmFyeSB3aXRoIGF0dHJpYnV0ZXMgZnJvbSBwYXJlbnQg
bm9kZXMsIG5vdCBvdmVyd3JpdGluZyBvbmVzIGRlZXBlciBpbiB0aGUgdHJlZQotICAgICAgICAg
ICAgaWYoW2VsZW1lbnQgbm9kZVR5cGVdID09IERPTV9FTEVNRU5UX05PREUpIHsKLSAgICAgICAg
ICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeT4gbmV3QXR0cnMgPSBhZG9wdE5T
KFtfYXR0cmlidXRlc0ZvckVsZW1lbnQoZWxlbWVudCkgbXV0YWJsZUNvcHldKTsKKyAgICAgICAg
ICAgIGlmKGFuY2VzdG9yLT5pc0VsZW1lbnROb2RlKCkpIHsKKyAgICAgICAgICAgICAgICBSZXRh
aW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeT4gbmV3QXR0cnMgPSBhZG9wdE5TKFtfYXR0cmlidXRl
c0ZvckVsZW1lbnQoa2l0KHRvRWxlbWVudChhbmNlc3RvcikpKSBtdXRhYmxlQ29weV0pOwogICAg
ICAgICAgICAgICAgIGlmIChhdHRycykgewogICAgICAgICAgICAgICAgICAgICAvLyBBbHJlYWR5
LXNldCBhdHRyaWJ1dGVzIChmcm9tIGxvd2VyIGluIHRoZSB0cmVlKSBvdmVyd3JpdGUgdGhlIGhp
Z2hlciBvbmVzLgogICAgICAgICAgICAgICAgICAgICBbbmV3QXR0cnMgYWRkRW50cmllc0Zyb21E
aWN0aW9uYXJ5OmF0dHJzLmdldCgpXTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgYXR0cnMgPSBuZXdBdHRyczsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsZW1lbnQg
PSAoRE9NRWxlbWVudCAqKVtlbGVtZW50IHBhcmVudE5vZGVdOworICAgICAgICAgICAgYW5jZXN0
b3IgPSBhbmNlc3Rvci0+cGFyZW50Tm9kZSgpOwogICAgICAgICB9CiAgICAgICAgIGlmIChyYW5n
ZVRvUmVwbGFjZS5sZW5ndGggPiAwKQogICAgICAgICAgICAgW19hdHRyU3RyIHNldEF0dHJpYnV0
ZXM6YXR0cnMuZ2V0KCkgcmFuZ2U6cmFuZ2VUb1JlcGxhY2VdOwpAQCAtMjM3MCw3MSArMjM1Miw2
NSBAQAogICAgICAgICBDRlJlbGVhc2UobXV0c3RyKTsKIH0KIAotdm9pZCBIVE1MQ29udmVydGVy
OjpfdHJhdmVyc2VOb2RlKERPTU5vZGUgKm5vZGUsIE5TSW50ZWdlciBkZXB0aCwgQk9PTCBlbWJl
ZGRlZCkKK3ZvaWQgSFRNTENvbnZlcnRlcjo6X3RyYXZlcnNlTm9kZShOb2RlKiBub2RlLCB1bnNp
Z25lZCBkZXB0aCwgYm9vbCBlbWJlZGRlZCkKIHsKLSAgICB1bnNpZ25lZCBzaG9ydCBub2RlVHlw
ZTsKLSAgICBOU0FycmF5ICpjaGlsZE5vZGVzOwotICAgIE5TVUludGVnZXIgY291bnQ7Ci0gICAg
TlNVSW50ZWdlciBzdGFydE9mZnNldDsKLSAgICBOU1VJbnRlZ2VyIGVuZE9mZnNldDsKLSAgICBC
T09MIGlzU3RhcnQgPSBOTzsKLSAgICBCT09MIGlzRW5kID0gTk87Ci0KLSAgICBpZiAoX2ZsYWdz
LnJlYWNoZWRFbmQpCisgICAgaWYgKCFub2RlIHx8IF9mbGFncy5yZWFjaGVkRW5kKQogICAgICAg
ICByZXR1cm47Ci0gICAgaWYgKF9kb21SYW5nZSAmJiAhX2ZsYWdzLnJlYWNoZWRTdGFydCAmJiBf
ZG9tU3RhcnRBbmNlc3RvcnMgJiYgIVtfZG9tU3RhcnRBbmNlc3RvcnMgY29udGFpbnNPYmplY3Q6
bm9kZV0pCisgICAgaWYgKF9kb21SYW5nZSAmJiAhX2ZsYWdzLnJlYWNoZWRTdGFydCAmJiAhX2Nh
Y2hlcy0+aXNBbmNlc3RvcnNPZlN0YXJ0VG9CZUNvbnZlcnRlZChub2RlKSkKICAgICAgICAgcmV0
dXJuOwotICAgIAotICAgIG5vZGVUeXBlID0gW25vZGUgbm9kZVR5cGVdOwotICAgIGNoaWxkTm9k
ZXMgPSBfY2hpbGRyZW5Gb3JOb2RlKG5vZGUpOwotICAgIGNvdW50ID0gW2NoaWxkTm9kZXMgY291
bnRdOwotICAgIHN0YXJ0T2Zmc2V0ID0gMDsKLSAgICBlbmRPZmZzZXQgPSBjb3VudDsKIAorICAg
IHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gMDsKKyAgICB1bnNpZ25lZCBlbmRPZmZzZXQgPSBVSU5U
X01BWDsKKyAgICBib29sIGlzU3RhcnQgPSBmYWxzZTsKKyAgICBib29sIGlzRW5kID0gZmFsc2U7
CiAgICAgaWYgKF9kb21SYW5nZSkgewotICAgICAgICBpZiAobm9kZSA9PSBbX2RvbVJhbmdlIHN0
YXJ0Q29udGFpbmVyXSkgeworICAgICAgICBpZiAobm9kZSA9PSBjb3JlKFtfZG9tUmFuZ2Ugc3Rh
cnRDb250YWluZXJdKSkgewogICAgICAgICAgICAgc3RhcnRPZmZzZXQgPSAoTlNVSW50ZWdlcilb
X2RvbVJhbmdlIHN0YXJ0T2Zmc2V0XTsKLSAgICAgICAgICAgIGlzU3RhcnQgPSBZRVM7CisgICAg
ICAgICAgICBpc1N0YXJ0ID0gdHJ1ZTsKICAgICAgICAgICAgIF9mbGFncy5yZWFjaGVkU3RhcnQg
PSBZRVM7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG5vZGUgPT0gW19kb21SYW5nZSBlbmRDb250
YWluZXJdKSB7CisgICAgICAgIGlmIChub2RlID09IGNvcmUoW19kb21SYW5nZSBlbmRDb250YWlu
ZXJdKSkgewogICAgICAgICAgICAgZW5kT2Zmc2V0ID0gKE5TVUludGVnZXIpW19kb21SYW5nZSBl
bmRPZmZzZXRdOwotICAgICAgICAgICAgaXNFbmQgPSBZRVM7CisgICAgICAgICAgICBpc0VuZCA9
IHRydWU7CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgaWYgKG5vZGVUeXBlID09IERPTV9E
T0NVTUVOVF9OT0RFIHx8IG5vZGVUeXBlID09IERPTV9ET0NVTUVOVF9GUkFHTUVOVF9OT0RFKSB7
Ci0gICAgICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICBp
ZiAobm9kZS0+aXNEb2N1bWVudE5vZGUoKSB8fCBub2RlLT5pc0RvY3VtZW50RnJhZ21lbnQoKSkg
eworICAgICAgICBOb2RlKiBjaGlsZCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgZm9y
IChOU1VJbnRlZ2VyIGkgPSAwOyBjaGlsZDsgaSsrKSB7CiAgICAgICAgICAgICBpZiAoaXNTdGFy
dCAmJiBpID09IHN0YXJ0T2Zmc2V0KQogICAgICAgICAgICAgICAgIF9kb21SYW5nZVN0YXJ0SW5k
ZXggPSBbX2F0dHJTdHIgbGVuZ3RoXTsKICAgICAgICAgICAgIGlmICgoIWlzU3RhcnQgfHwgc3Rh
cnRPZmZzZXQgPD0gaSkgJiYgKCFpc0VuZCB8fCBlbmRPZmZzZXQgPiBpKSkKLSAgICAgICAgICAg
ICAgICBfdHJhdmVyc2VOb2RlKFtjaGlsZE5vZGVzIG9iamVjdEF0SW5kZXg6aV0sIGRlcHRoICsg
MSwgZW1iZWRkZWQpOworICAgICAgICAgICAgICAgIF90cmF2ZXJzZU5vZGUoY2hpbGQsIGRlcHRo
ICsgMSwgZW1iZWRkZWQpOwogICAgICAgICAgICAgaWYgKGlzRW5kICYmIGkgKyAxID49IGVuZE9m
ZnNldCkKICAgICAgICAgICAgICAgICBfZmxhZ3MucmVhY2hlZEVuZCA9IFlFUzsKLSAgICAgICAg
ICAgIGlmIChfZmxhZ3MucmVhY2hlZEVuZCkgYnJlYWs7CisgICAgICAgICAgICBpZiAoX2ZsYWdz
LnJlYWNoZWRFbmQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjaGlsZCA9
IGNoaWxkLT5uZXh0U2libGluZygpOwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChub2RlVHlw
ZSA9PSBET01fRUxFTUVOVF9OT0RFKSB7Ci0gICAgICAgIERPTUVsZW1lbnQgKmVsZW1lbnQgPSAo
RE9NRWxlbWVudCAqKW5vZGU7CisgICAgfSBlbHNlIGlmIChub2RlLT5pc0VsZW1lbnROb2RlKCkp
IHsKKyAgICAgICAgRE9NRWxlbWVudCogZWxlbWVudCA9IGtpdCh0b0VsZW1lbnQobm9kZSkpOwog
ICAgICAgICBpZiAoX2VudGVyRWxlbWVudChlbGVtZW50LCBlbWJlZGRlZCkpIHsKICAgICAgICAg
ICAgIE5TVUludGVnZXIgc3RhcnRJbmRleCA9IFtfYXR0clN0ciBsZW5ndGhdOwogICAgICAgICAg
ICAgaWYgKF9wcm9jZXNzRWxlbWVudChlbGVtZW50LCBkZXB0aCkpIHsKLSAgICAgICAgICAgICAg
ICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgICAgICAg
ICAgTm9kZSogY2hpbGQgPSBub2RlLT5maXJzdENoaWxkKCk7CisgICAgICAgICAgICAgICAgZm9y
IChOU1VJbnRlZ2VyIGkgPSAwOyBjaGlsZDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgIGlm
IChpc1N0YXJ0ICYmIGkgPT0gc3RhcnRPZmZzZXQpCiAgICAgICAgICAgICAgICAgICAgICAgICBf
ZG9tUmFuZ2VTdGFydEluZGV4ID0gW19hdHRyU3RyIGxlbmd0aF07CiAgICAgICAgICAgICAgICAg
ICAgIGlmICgoIWlzU3RhcnQgfHwgc3RhcnRPZmZzZXQgPD0gaSkgJiYgKCFpc0VuZCB8fCBlbmRP
ZmZzZXQgPiBpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIF90cmF2ZXJzZU5vZGUoW2NoaWxk
Tm9kZXMgb2JqZWN0QXRJbmRleDppXSwgZGVwdGggKyAxLCBlbWJlZGRlZCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBfdHJhdmVyc2VOb2RlKGNoaWxkLCBkZXB0aCArIDEsIGVtYmVkZGVkKTsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKGlzRW5kICYmIGkgKyAxID49IGVuZE9mZnNldCkKICAg
ICAgICAgICAgICAgICAgICAgICAgIF9mbGFncy5yZWFjaGVkRW5kID0gWUVTOwogICAgICAgICAg
ICAgICAgICAgICBpZiAoX2ZsYWdzLnJlYWNoZWRFbmQpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmco
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgX2V4aXRFbGVtZW50KGVsZW1l
bnQsIGRlcHRoLCBzdGFydEluZGV4KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgIH0g
ZWxzZSBpZiAobm9kZVR5cGUgPT0gRE9NX1RFWFRfTk9ERSB8fCBub2RlVHlwZSA9PSBET01fQ0RB
VEFfU0VDVElPTl9OT0RFKSB7Ci0gICAgICAgIF9wcm9jZXNzVGV4dCgoRE9NQ2hhcmFjdGVyRGF0
YSAqKW5vZGUpOwotICAgIH0KLSAgICAKKyAgICB9IGVsc2UgaWYgKG5vZGUtPmlzQ2hhcmFjdGVy
RGF0YU5vZGUoKSkKKyAgICAgICAgX3Byb2Nlc3NUZXh0KCp0b0NoYXJhY3RlckRhdGEobm9kZSkp
OworCiAgICAgaWYgKGlzRW5kKQogICAgICAgICBfZmxhZ3MucmVhY2hlZEVuZCA9IFlFUzsKIH0K
QEAgLTI0NDIsNDAgKzI0MTgsNDEgQEAKIHZvaWQgSFRNTENvbnZlcnRlcjo6X3RyYXZlcnNlRm9v
dGVyTm9kZShET01Ob2RlICpub2RlLCBOU0ludGVnZXIgZGVwdGgpCiB7CiAgICAgRE9NRWxlbWVu
dCAqZWxlbWVudCA9IChET01FbGVtZW50ICopbm9kZTsKLSAgICBOU0FycmF5ICpjaGlsZE5vZGVz
ID0gX2NoaWxkcmVuRm9yTm9kZShub2RlKTsKLSAgICBOU1VJbnRlZ2VyIGNvdW50ID0gW2NoaWxk
Tm9kZXMgY291bnRdOwotICAgIE5TVUludGVnZXIgc3RhcnRPZmZzZXQgPSAwOwotICAgIE5TVUlu
dGVnZXIgZW5kT2Zmc2V0ID0gY291bnQ7Ci0gICAgQk9PTCBpc1N0YXJ0ID0gTk87Ci0gICAgQk9P
TCBpc0VuZCA9IE5POwogCiAgICAgaWYgKF9mbGFncy5yZWFjaGVkRW5kKQogICAgICAgICByZXR1
cm47Ci0gICAgaWYgKF9kb21SYW5nZSAmJiAhX2ZsYWdzLnJlYWNoZWRTdGFydCAmJiBfZG9tU3Rh
cnRBbmNlc3RvcnMgJiYgIVtfZG9tU3RhcnRBbmNlc3RvcnMgY29udGFpbnNPYmplY3Q6bm9kZV0p
CisgICAgaWYgKF9kb21SYW5nZSAmJiAhX2ZsYWdzLnJlYWNoZWRTdGFydCAmJiAhX2NhY2hlcy0+
aXNBbmNlc3RvcnNPZlN0YXJ0VG9CZUNvbnZlcnRlZChjb3JlKG5vZGUpKSkKICAgICAgICAgcmV0
dXJuOworCisgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSAwOworICAgIHVuc2lnbmVkIGVuZE9m
ZnNldCA9IFVJTlRfTUFYOworICAgIGJvb2wgaXNTdGFydCA9IGZhbHNlOworICAgIGJvb2wgaXNF
bmQgPSBmYWxzZTsKICAgICBpZiAoX2RvbVJhbmdlKSB7CiAgICAgICAgIGlmIChub2RlID09IFtf
ZG9tUmFuZ2Ugc3RhcnRDb250YWluZXJdKSB7CiAgICAgICAgICAgICBzdGFydE9mZnNldCA9IChO
U1VJbnRlZ2VyKVtfZG9tUmFuZ2Ugc3RhcnRPZmZzZXRdOwotICAgICAgICAgICAgaXNTdGFydCA9
IFlFUzsKKyAgICAgICAgICAgIGlzU3RhcnQgPSB0cnVlOwogICAgICAgICAgICAgX2ZsYWdzLnJl
YWNoZWRTdGFydCA9IFlFUzsKICAgICAgICAgfQogICAgICAgICBpZiAobm9kZSA9PSBbX2RvbVJh
bmdlIGVuZENvbnRhaW5lcl0pIHsKICAgICAgICAgICAgIGVuZE9mZnNldCA9IChOU1VJbnRlZ2Vy
KVtfZG9tUmFuZ2UgZW5kT2Zmc2V0XTsKLSAgICAgICAgICAgIGlzRW5kID0gWUVTOworICAgICAg
ICAgICAgaXNFbmQgPSB0cnVlOwogICAgICAgICB9CiAgICAgfQogICAgIGlmIChfZW50ZXJFbGVt
ZW50KGVsZW1lbnQsIFlFUykpIHsKICAgICAgICAgTlNVSW50ZWdlciBzdGFydEluZGV4ID0gW19h
dHRyU3RyIGxlbmd0aF07CiAgICAgICAgIGlmIChfcHJvY2Vzc0VsZW1lbnQoZWxlbWVudCwgZGVw
dGgpKSB7Ci0gICAgICAgICAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBjb3VudDsgaSsr
KSB7CisgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IGNvcmUoZWxlbWVudCktPmZpcnN0Q2hpbGQo
KTsKKyAgICAgICAgICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgY2hpbGQ7IGkrKykgewogICAg
ICAgICAgICAgICAgIGlmIChpc1N0YXJ0ICYmIGkgPT0gc3RhcnRPZmZzZXQpCiAgICAgICAgICAg
ICAgICAgICAgIF9kb21SYW5nZVN0YXJ0SW5kZXggPSBbX2F0dHJTdHIgbGVuZ3RoXTsKICAgICAg
ICAgICAgICAgICBpZiAoKCFpc1N0YXJ0IHx8IHN0YXJ0T2Zmc2V0IDw9IGkpICYmICghaXNFbmQg
fHwgZW5kT2Zmc2V0ID4gaSkpCi0gICAgICAgICAgICAgICAgICAgIF90cmF2ZXJzZU5vZGUoW2No
aWxkTm9kZXMgb2JqZWN0QXRJbmRleDppXSwgZGVwdGggKyAxLCBZRVMpOworICAgICAgICAgICAg
ICAgICAgICBfdHJhdmVyc2VOb2RlKGNoaWxkLCBkZXB0aCArIDEsIHRydWUgLyogZW1iZWRkZWQg
Ki8pOwogICAgICAgICAgICAgICAgIGlmIChpc0VuZCAmJiBpICsgMSA+PSBlbmRPZmZzZXQpCiAg
ICAgICAgICAgICAgICAgICAgIF9mbGFncy5yZWFjaGVkRW5kID0gWUVTOwogICAgICAgICAgICAg
ICAgIGlmIChfZmxhZ3MucmVhY2hlZEVuZCkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIF9leGl0RWxlbWVudChlbGVtZW50LCBkZXB0aCwgc3RhcnRJbmRleCk7
CiAgICAgICAgIH0KQEAgLTI0OTMsMjcgKzI0NzAsMzUgQEAKICAgICAgICAgW19hdHRyU3RyIHJl
cGxhY2VDaGFyYWN0ZXJzSW5SYW5nZTpOU01ha2VSYW5nZSh0ZXh0TGVuZ3RoLCAwKSB3aXRoU3Ry
aW5nOkAiXG4iXTsKIH0KIAorTm9kZSogSFRNTENvbnZlcnRlckNhY2hlczo6Y2FjaGVBbmNlc3Rv
cnNPZlN0YXJ0VG9CZUNvbnZlcnRlZChjb25zdCBSYW5nZSYgcmFuZ2UpCit7CisgICAgTm9kZSog
Y29tbW9uQW5jZXN0b3IgPSByYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lcihBU1NFUlRfTk9f
RVhDRVBUSU9OKTsKKyAgICBOb2RlKiBhbmNlc3RvciA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyKCk7
CisKKyAgICB3aGlsZSAoYW5jZXN0b3IpIHsKKyAgICAgICAgbV9hbmNlc3RvcnNVbmRlckNvbW1v
bkFuY2VzdG9yLmFkZChhbmNlc3Rvcik7CisgICAgICAgIGlmIChhbmNlc3RvciA9PSBjb21tb25B
bmNlc3RvcikKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBhbmNlc3RvciA9IGFuY2VzdG9y
LT5wYXJlbnROb2RlKCk7CisgICAgfQorCisgICAgcmV0dXJuIGNvbW1vbkFuY2VzdG9yOworfQor
CiB2b2lkIEhUTUxDb252ZXJ0ZXI6Ol9sb2FkRnJvbURPTVJhbmdlKCkKIHsKKyAgICBBU1NFUlQo
X2RvbVJhbmdlKTsKICAgICBpZiAoLTEgPT0gX2Vycm9yQ29kZSkgewotICAgICAgICBET01Ob2Rl
ICpjb21tb25BbmNlc3RvckNvbnRhaW5lciA9IFtfZG9tUmFuZ2UgY29tbW9uQW5jZXN0b3JDb250
YWluZXJdOwotICAgICAgICBET01Ob2RlICphbmNlc3RvckNvbnRhaW5lciA9IFtfZG9tUmFuZ2Ug
c3RhcnRDb250YWluZXJdOwotICAgICAgICAKLSAgICAgICAgX2RvbVN0YXJ0QW5jZXN0b3JzID0g
W1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF07Ci0gICAgICAgIHdoaWxlIChhbmNlc3RvckNv
bnRhaW5lcikgewotICAgICAgICAgICAgW19kb21TdGFydEFuY2VzdG9ycyBhZGRPYmplY3Q6YW5j
ZXN0b3JDb250YWluZXJdOwotICAgICAgICAgICAgaWYgKGFuY2VzdG9yQ29udGFpbmVyID09IGNv
bW1vbkFuY2VzdG9yQ29udGFpbmVyKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgYW5jZXN0b3JDb250YWluZXIgPSBbYW5jZXN0b3JDb250YWluZXIgcGFyZW50Tm9kZV07Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIF9kb2N1bWVudCA9IFtjb21tb25BbmNlc3RvckNv
bnRhaW5lciBvd25lckRvY3VtZW50XTsKKyAgICAgICAgTm9kZSogY29tbW9uQW5jZXN0b3JDb250
YWluZXIgPSBfY2FjaGVzLT5jYWNoZUFuY2VzdG9yc09mU3RhcnRUb0JlQ29udmVydGVkKCpjb3Jl
KF9kb21SYW5nZSkpOworICAgICAgICBBU1NFUlQoY29tbW9uQW5jZXN0b3JDb250YWluZXIpOwor
CisgICAgICAgIF9kb2N1bWVudCA9IGtpdChjb21tb25BbmNlc3RvckNvbnRhaW5lci0+b3duZXJE
b2N1bWVudCgpKTsKICAgICAgICAgX2RhdGFTb3VyY2UgPSAoRG9jdW1lbnRMb2FkZXIgKiljb3Jl
KF9kb2N1bWVudCktPmZyYW1lKCktPmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCk7CiAgICAgICAg
IAogICAgICAgICBpZiAoX2RvY3VtZW50ICYmIF9kYXRhU291cmNlKSB7CiAgICAgICAgICAgICBf
ZG9tUmFuZ2VTdGFydEluZGV4ID0gMDsKICAgICAgICAgICAgIF9lcnJvckNvZGUgPSAwOwotICAg
ICAgICAgICAgX3RyYXZlcnNlTm9kZShjb21tb25BbmNlc3RvckNvbnRhaW5lciwgMCwgTk8pOwor
ICAgICAgICAgICAgX3RyYXZlcnNlTm9kZShjb21tb25BbmNlc3RvckNvbnRhaW5lciwgMCwgZmFs
c2UgLyogZW1iZWRkZWQgKi8pOwogICAgICAgICAgICAgaWYgKF9kb21SYW5nZVN0YXJ0SW5kZXgg
PiAwICYmIF9kb21SYW5nZVN0YXJ0SW5kZXggPD0gW19hdHRyU3RyIGxlbmd0aF0pCiAgICAgICAg
ICAgICAgICAgW19hdHRyU3RyIGRlbGV0ZUNoYXJhY3RlcnNJblJhbmdlOk5TTWFrZVJhbmdlKDAs
IF9kb21SYW5nZVN0YXJ0SW5kZXgpXTsKICAgICAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>227834</attachid>
            <date>2014-03-26 01:22:21 -0700</date>
            <delta_ts>2014-03-26 20:29:56 -0700</delta_ts>
            <desc>Reverted erroneous changes to PerformanceTests</desc>
            <filename>fix130769</filename>
            <type>text/plain</type>
            <size>20139</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2NjI4NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDE0LTAzLTI2ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIE1ha2UgX3Byb2Nlc3NUZXh0IGFu
ZCBfdHJhdmVyc2VOb2RlIGluIEhUTUxDb252ZXJ0ZXIgbW9yZSBlZmZpY2llbnQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMDc2OQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJld3JvdGUgYSBidW5jaCBv
ZiBjb2RlIGluIEMrKyBhbmQgYXZvaWRlZCBjcmVhdGluZyB3cmFwcGVycy4KKyAgICAgICAgVGhp
cyByZWR1Y2VzIHRoZSBydW50aW1lIG9mIEludGVyYWN0aXZlL0NvcHlBbGwuaHRtbCBmcm9tIH4x
Ni41cyB0byAxNXMuCisKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIubW06
CisgICAgICAgIChIVE1MQ29udmVydGVyQ2FjaGVzOjppc0FuY2VzdG9yc09mU3RhcnRUb0JlQ29u
dmVydGVkKToKKyAgICAgICAgKEhUTUxDb252ZXJ0ZXI6OkhUTUxDb252ZXJ0ZXIpOgorICAgICAg
ICAoSFRNTENvbnZlcnRlcjo6fkhUTUxDb252ZXJ0ZXIpOgorICAgICAgICAoSFRNTENvbnZlcnRl
cjo6X3Byb2Nlc3NFbGVtZW50KToKKyAgICAgICAgKEhUTUxDb252ZXJ0ZXI6Ol9wcm9jZXNzVGV4
dCk6CisgICAgICAgIChIVE1MQ29udmVydGVyOjpfdHJhdmVyc2VOb2RlKToKKyAgICAgICAgKEhU
TUxDb252ZXJ0ZXI6Ol90cmF2ZXJzZUZvb3Rlck5vZGUpOgorICAgICAgICAoSFRNTENvbnZlcnRl
ckNhY2hlczo6Y2FjaGVBbmNlc3RvcnNPZlN0YXJ0VG9CZUNvbnZlcnRlZCk6CisgICAgICAgIChI
VE1MQ29udmVydGVyOjpfbG9hZEZyb21ET01SYW5nZSk6CisKIDIwMTQtMDMtMjUgIFByYXRpayBT
b2xhbmtpICA8cHNvbGFua2lAYXBwbGUuY29tPgogCiAgICAgICAgIGlPUyBidWlsZCBmaXguIEFk
ZCBtaXNzaW5nIHNlbWljb2xvbi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2Ev
SFRNTENvbnZlcnRlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2Nv
Y29hL0hUTUxDb252ZXJ0ZXIubW0JKHJldmlzaW9uIDE2NjI4NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbQkod29ya2luZyBjb3B5KQpAQCAtNDksNiAr
NDksNyBAQAogI2ltcG9ydCAiRnJhbWUuaCIKICNpbXBvcnQgIkZyYW1lTG9hZGVyLmgiCiAjaW1w
b3J0ICJIVE1MRWxlbWVudC5oIgorI2ltcG9ydCAiSFRNTEZyYW1lRWxlbWVudEJhc2UuaCIKICNp
bXBvcnQgIkhUTUxOYW1lcy5oIgogI2ltcG9ydCAiSFRNTFBhcnNlcklkaW9tcy5oIgogI2ltcG9y
dCAiTG9hZGVyTlNVUkxFeHRyYXMuaCIKQEAgLTYwLDYgKzYxLDcgQEAKICNpbXBvcnQgIlRleHRJ
dGVyYXRvci5oIgogI2ltcG9ydCA8b2JqYy9ydW50aW1lLmg+CiAjaW1wb3J0IDx3dGYvQVNDSUlD
VHlwZS5oPgorI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiAjaWYgUExBVEZP
Uk0oSU9TKQogCkBAIC00MTYsOCArNDE4LDEyIEBACiAgICAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4g
Y29tcHV0ZWRTdHlsZVByb3BlcnR5Rm9yRWxlbWVudChFbGVtZW50JiwgQ1NTUHJvcGVydHlJRCk7
CiAgICAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gaW5saW5lU3R5bGVQcm9wZXJ0eUZvckVsZW1lbnQo
RWxlbWVudCYsIENTU1Byb3BlcnR5SUQpOwogCisgICAgTm9kZSogY2FjaGVBbmNlc3RvcnNPZlN0
YXJ0VG9CZUNvbnZlcnRlZChjb25zdCBSYW5nZSYpOworICAgIGJvb2wgaXNBbmNlc3RvcnNPZlN0
YXJ0VG9CZUNvbnZlcnRlZChOb2RlKiBub2RlKSBjb25zdCB7IHJldHVybiBtX2FuY2VzdG9yc1Vu
ZGVyQ29tbW9uQW5jZXN0b3IuY29udGFpbnMobm9kZSk7IH0KKwogcHJpdmF0ZToKICAgICBIYXNo
TWFwPEVsZW1lbnQqLCBzdGQ6OnVuaXF1ZV9wdHI8Q29tcHV0ZWRTdHlsZUV4dHJhY3Rvcj4+IG1f
Y29tcHV0ZWRTdHlsZXM7CisgICAgSGFzaFNldDxOb2RlKj4gbV9hbmNlc3RvcnNVbmRlckNvbW1v
bkFuY2VzdG9yOwogfTsKIAogQGludGVyZmFjZSBOU1RleHRMaXN0IChXZWJDb3JlTlNUZXh0TGlz
dERldGFpbHMpCkBAIC00NTIsNyArNDU4LDYgQEAKICAgICBOU1VSTCAqX2Jhc2VVUkw7CiAgICAg
RE9NRG9jdW1lbnQgKl9kb2N1bWVudDsKICAgICBET01SYW5nZSAqX2RvbVJhbmdlOwotICAgIE5T
TXV0YWJsZUFycmF5ICpfZG9tU3RhcnRBbmNlc3RvcnM7CiAgICAgV2ViQ29yZTo6RG9jdW1lbnRM
b2FkZXIgKl9kYXRhU291cmNlOwogICAgIE5TTXV0YWJsZUFycmF5ICpfdGV4dExpc3RzOwogICAg
IE5TTXV0YWJsZUFycmF5ICpfdGV4dEJsb2NrczsKQEAgLTQ4Nyw3ICs0OTIsNyBAQAogICAgIFBs
YXRmb3JtQ29sb3IgKl9jb2xvckZvck5vZGUoRE9NTm9kZSAqLCBDU1NQcm9wZXJ0eUlEKTsKICAg
ICBCT09MIF9nZXRGbG9hdChDR0Zsb2F0ICp2YWwsIERPTU5vZGUgKiwgQ1NTUHJvcGVydHlJRCk7
CiAKLSAgICB2b2lkIF90cmF2ZXJzZU5vZGUoRE9NTm9kZSAqbm9kZSwgTlNJbnRlZ2VyIGRlcHRo
LCBCT09MIGVtYmVkZGVkKTsKKyAgICB2b2lkIF90cmF2ZXJzZU5vZGUoTm9kZSogbm9kZSwgdW5z
aWduZWQgZGVwdGgsIGJvb2wgZW1iZWRkZWQpOwogICAgIHZvaWQgX3RyYXZlcnNlRm9vdGVyTm9k
ZShET01Ob2RlICpub2RlLCBOU0ludGVnZXIgZGVwdGgpOwogICAgIAogICAgIE5TRGljdGlvbmFy
eSAqX2NvbXB1dGVkQXR0cmlidXRlc0ZvckVsZW1lbnQoRE9NRWxlbWVudCAqKTsKQEAgLTUxMiw3
ICs1MTcsNyBAQAogICAgIEJPT0wgX3Byb2Nlc3NFbGVtZW50KERPTUVsZW1lbnQgKmVsZW1lbnQs
IE5TSW50ZWdlciBkZXB0aCk7CiAgICAgdm9pZCBfYWRkTWFya2Vyc1RvTGlzdChOU1RleHRMaXN0
ICpsaXN0LCBOU1JhbmdlIHJhbmdlKTsKICAgICB2b2lkIF9leGl0RWxlbWVudChET01FbGVtZW50
ICplbGVtZW50LCBOU0ludGVnZXIgZGVwdGgsIE5TVUludGVnZXIgc3RhcnRJbmRleCk7Ci0gICAg
dm9pZCBfcHJvY2Vzc1RleHQoRE9NQ2hhcmFjdGVyRGF0YSAqdGV4dCk7CisgICAgdm9pZCBfcHJv
Y2Vzc1RleHQoQ2hhcmFjdGVyRGF0YSYpOwogICAgIHZvaWQgX2FkanVzdFRyYWlsaW5nTmV3bGlu
ZSgpOwogfTsKIApAQCAtNTIzLDcgKzUyOCw2IEBACiAgICAgX2RvY3VtZW50QXR0cnMgPSBbW05T
TXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdOwogICAgIF9iYXNlVVJMID0gbmlsOwogICAg
IF9kb2N1bWVudCA9IG5pbDsKLSAgICBfZG9tU3RhcnRBbmNlc3RvcnMgPSBuaWw7CiAgICAgX2Rh
dGFTb3VyY2UgPSBudWxscHRyOwogICAgIF90ZXh0TGlzdHMgPSBbW05TTXV0YWJsZUFycmF5IGFs
bG9jXSBpbml0XTsKICAgICBfdGV4dEJsb2NrcyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGlu
aXRdOwpAQCAtNTU1LDcgKzU1OSw2IEBACiAgICAgW19hdHRyU3RyIHJlbGVhc2VdOwogICAgIFtf
ZG9jdW1lbnRBdHRycyByZWxlYXNlXTsKICAgICBbX2RvbVJhbmdlIHJlbGVhc2VdOwotICAgIFtf
ZG9tU3RhcnRBbmNlc3RvcnMgcmVsZWFzZV07CiAgICAgW190ZXh0TGlzdHMgcmVsZWFzZV07CiAg
ICAgW190ZXh0QmxvY2tzIHJlbGVhc2VdOwogICAgIFtfdGV4dFRhYmxlcyByZWxlYXNlXTsKQEAg
LTE5ODAsMjEgKzE5ODMsMTEgQEAKICAgICAgICAgICAgIGlmICh1cmwpCiAgICAgICAgICAgICAg
ICAgcmV0dmFsID0gIV9hZGRBdHRhY2htZW50Rm9yRWxlbWVudChlbGVtZW50LCB1cmwsIGlzQmxv
Y2tMZXZlbCwgTk8pOwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChjb3JlRWxlbWVudC5oYXNU
YWdOYW1lKGZyYW1lVGFnKSkgewotICAgICAgICBpZiAoW2VsZW1lbnQgcmVzcG9uZHNUb1NlbGVj
dG9yOkBzZWxlY3Rvcihjb250ZW50RG9jdW1lbnQpXSkgewotICAgICAgICAgICAgRE9NRG9jdW1l
bnQgKmNvbnRlbnREb2N1bWVudCA9IFsoRE9NSFRNTEZyYW1lRWxlbWVudCAqKWVsZW1lbnQgY29u
dGVudERvY3VtZW50XTsKLSAgICAgICAgICAgIGlmIChjb250ZW50RG9jdW1lbnQpCi0gICAgICAg
ICAgICAgICAgX3RyYXZlcnNlTm9kZShjb250ZW50RG9jdW1lbnQsIGRlcHRoICsgMSwgWUVTKTsK
KyAgICB9IGVsc2UgaWYgKGNvcmVFbGVtZW50Lmhhc1RhZ05hbWUoZnJhbWVUYWcpIHx8IGNvcmVF
bGVtZW50Lmhhc1RhZ05hbWUoaWZyYW1lVGFnKSkgeworICAgICAgICBpZiAoRG9jdW1lbnQqIGNv
bnRlbnREb2N1bWVudCA9IHRvSFRNTEZyYW1lRWxlbWVudEJhc2UoY29yZUVsZW1lbnQpLmNvbnRl
bnREb2N1bWVudCgpKSB7CisgICAgICAgICAgICBfdHJhdmVyc2VOb2RlKGNvbnRlbnREb2N1bWVu
dCwgZGVwdGggKyAxLCB0cnVlIC8qIGVtYmVkZGVkICovKTsKKyAgICAgICAgICAgIHJldHZhbCA9
IE5POwogICAgICAgICB9Ci0gICAgICAgIHJldHZhbCA9IE5POwotICAgIH0gZWxzZSBpZiAoY29y
ZUVsZW1lbnQuaGFzVGFnTmFtZShpZnJhbWVUYWcpKSB7Ci0gICAgICAgIGlmIChbZWxlbWVudCBy
ZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGNvbnRlbnREb2N1bWVudCldKSB7Ci0gICAgICAg
ICAgICBET01Eb2N1bWVudCAqY29udGVudERvY3VtZW50ID0gWyhET01IVE1MSUZyYW1lRWxlbWVu
dCAqKWVsZW1lbnQgY29udGVudERvY3VtZW50XTsKLSAgICAgICAgICAgIGlmIChjb250ZW50RG9j
dW1lbnQpIHsKLSAgICAgICAgICAgICAgICBfdHJhdmVyc2VOb2RlKGNvbnRlbnREb2N1bWVudCwg
ZGVwdGggKyAxLCBZRVMpOwotICAgICAgICAgICAgICAgIHJldHZhbCA9IE5POwotICAgICAgICAg
ICAgfQotICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChjb3JlRWxlbWVudC5oYXNUYWdOYW1lKGJy
VGFnKSkgewogICAgICAgICBET01FbGVtZW50ICpibG9ja0VsZW1lbnQgPSBfYmxvY2tMZXZlbEVs
ZW1lbnRGb3JOb2RlKFtlbGVtZW50IHBhcmVudE5vZGVdKTsKICAgICAgICAgTlNTdHJpbmcgKmJy
ZWFrQ2xhc3MgPSBbZWxlbWVudCBnZXRBdHRyaWJ1dGU6QCJjbGFzcyJdLCAqYmxvY2tUYWcgPSBb
YmxvY2tFbGVtZW50IHRhZ05hbWVdOwpAQCAtMjI2NywxMDAgKzIyNjAsODkgQEAKICAgICB9CiB9
CiAKLXZvaWQgSFRNTENvbnZlcnRlcjo6X3Byb2Nlc3NUZXh0KERPTUNoYXJhY3RlckRhdGEgKnRl
eHQpCit2b2lkIEhUTUxDb252ZXJ0ZXI6Ol9wcm9jZXNzVGV4dChDaGFyYWN0ZXJEYXRhJiBjaGFy
YWN0ZXJEYXRhKQogewotICAgIEFTU0VSVCh0ZXh0KTsKLSAgICBDaGFyYWN0ZXJEYXRhJiBjaGFy
YWN0ZXJEYXRhID0gKmNvcmUodGV4dCk7Ci0gICAgTlNTdHJpbmcgKmluc3RyID0gW3RleHQgZGF0
YV07Ci0gICAgTlNTdHJpbmcgKm91dHN0ciA9IGluc3RyOwogICAgIE5TVUludGVnZXIgdGV4dExl
bmd0aCA9IFtfYXR0clN0ciBsZW5ndGhdOwotICAgIE5TVUludGVnZXIgc3RhcnRPZmZzZXQgPSAw
OwotICAgIE5TVUludGVnZXIgZW5kT2Zmc2V0ID0gW2luc3RyIGxlbmd0aF07CiAgICAgdW5pY2hh
ciBsYXN0Q2hhciA9ICh0ZXh0TGVuZ3RoID4gMCkgPyBbW19hdHRyU3RyIHN0cmluZ10gY2hhcmFj
dGVyQXRJbmRleDp0ZXh0TGVuZ3RoIC0gMV0gOiAnXG4nOwotICAgIEJPT0wgd2FzU3BhY2UgPSBO
TzsKLSAgICBCT09MIHdhc0xlYWRpbmcgPSBZRVM7CiAgICAgQk9PTCBzdXBwcmVzc0xlYWRpbmdT
cGFjZSA9ICgoX2ZsYWdzLmlzU29mdCAmJiBsYXN0Q2hhciA9PSAnICcpIHx8IGxhc3RDaGFyID09
ICdcbicgfHwgbGFzdENoYXIgPT0gJ1xyJyB8fCBsYXN0Q2hhciA9PSAnXHQnIHx8IGxhc3RDaGFy
ID09IE5TUGFyYWdyYXBoU2VwYXJhdG9yQ2hhcmFjdGVyIHx8IGxhc3RDaGFyID09IE5TTGluZVNl
cGFyYXRvckNoYXJhY3RlciB8fCBsYXN0Q2hhciA9PSBOU0Zvcm1GZWVkQ2hhcmFjdGVyIHx8IGxh
c3RDaGFyID09IFdlYk5leHRMaW5lQ2hhcmFjdGVyKTsKICAgICBOU1JhbmdlIHJhbmdlVG9SZXBs
YWNlID0gTlNNYWtlUmFuZ2UodGV4dExlbmd0aCwgMCk7CiAgICAgQ0ZNdXRhYmxlU3RyaW5nUmVm
IG11dHN0ciA9IE5VTEw7CiAKKyAgICBTdHJpbmcgb3JpZ2luYWxTdHJpbmcgPSBjaGFyYWN0ZXJE
YXRhLmRhdGEoKTsKKyAgICB1bnNpZ25lZCBzdGFydE9mZnNldCA9IDA7CisgICAgdW5zaWduZWQg
ZW5kT2Zmc2V0ID0gb3JpZ2luYWxTdHJpbmcubGVuZ3RoKCk7CiAgICAgaWYgKF9kb21SYW5nZSkg
ewotICAgICAgICBpZiAodGV4dCA9PSBbX2RvbVJhbmdlIHN0YXJ0Q29udGFpbmVyXSkgeworICAg
ICAgICBpZiAoJmNoYXJhY3RlckRhdGEgPT0gY29yZShbX2RvbVJhbmdlIHN0YXJ0Q29udGFpbmVy
XSkpIHsKICAgICAgICAgICAgIHN0YXJ0T2Zmc2V0ID0gKE5TVUludGVnZXIpW19kb21SYW5nZSBz
dGFydE9mZnNldF07CiAgICAgICAgICAgICBfZG9tUmFuZ2VTdGFydEluZGV4ID0gW19hdHRyU3Ry
IGxlbmd0aF07CiAgICAgICAgICAgICBfZmxhZ3MucmVhY2hlZFN0YXJ0ID0gWUVTOwogICAgICAg
ICB9Ci0gICAgICAgIGlmICh0ZXh0ID09IFtfZG9tUmFuZ2UgZW5kQ29udGFpbmVyXSkgeworICAg
ICAgICBpZiAoJmNoYXJhY3RlckRhdGEgPT0gY29yZShbX2RvbVJhbmdlIGVuZENvbnRhaW5lcl0p
KSB7CiAgICAgICAgICAgICBlbmRPZmZzZXQgPSAoTlNVSW50ZWdlcilbX2RvbVJhbmdlIGVuZE9m
ZnNldF07CiAgICAgICAgICAgICBfZmxhZ3MucmVhY2hlZEVuZCA9IFlFUzsKICAgICAgICAgfQot
ICAgICAgICBpZiAoKHN0YXJ0T2Zmc2V0ID4gMCB8fCBlbmRPZmZzZXQgPCBbaW5zdHIgbGVuZ3Ro
XSkgJiYgZW5kT2Zmc2V0ID49IHN0YXJ0T2Zmc2V0KSB7Ci0gICAgICAgICAgICBpbnN0ciA9IFtp
bnN0ciBzdWJzdHJpbmdXaXRoUmFuZ2U6TlNNYWtlUmFuZ2Uoc3RhcnRPZmZzZXQsIGVuZE9mZnNl
dCAtIHN0YXJ0T2Zmc2V0KV07Ci0gICAgICAgICAgICBvdXRzdHIgPSBpbnN0cjsKLSAgICAgICAg
fQorICAgICAgICBpZiAoKHN0YXJ0T2Zmc2V0ID4gMCB8fCBlbmRPZmZzZXQgPCBvcmlnaW5hbFN0
cmluZy5sZW5ndGgoKSkgJiYgZW5kT2Zmc2V0ID49IHN0YXJ0T2Zmc2V0KQorICAgICAgICAgICAg
b3JpZ2luYWxTdHJpbmcgPSBvcmlnaW5hbFN0cmluZy5zdWJzdHJpbmcoc3RhcnRPZmZzZXQsIGVu
ZE9mZnNldCAtIHN0YXJ0T2Zmc2V0KTsKICAgICB9CisgICAgU3RyaW5nIG91dHB1dFN0cmluZyA9
IG9yaWdpbmFsU3RyaW5nOwogCisgICAgLy8gRklYTUU6IFVzZSBSZW5kZXJUZXh0J3MgY29udGVu
dCBpbnN0ZWFkLgorICAgIGJvb2wgd2FzU3BhY2UgPSBmYWxzZTsKICAgICBpZiAoX2NhY2hlcy0+
cHJvcGVydHlWYWx1ZUZvck5vZGUoY2hhcmFjdGVyRGF0YSwgQ1NTUHJvcGVydHlXaGl0ZVNwYWNl
KS5zdGFydHNXaXRoKCJwcmUiKSkgewotICAgICAgICBpZiAodGV4dExlbmd0aCA+IDAgJiYgW2lu
c3RyIGxlbmd0aF0gPiAwICYmIF9mbGFncy5pc1NvZnQpIHsKLSAgICAgICAgICAgIHVuaWNoYXIg
YyA9IFtpbnN0ciBjaGFyYWN0ZXJBdEluZGV4OjBdOworICAgICAgICBpZiAodGV4dExlbmd0aCAm
JiBvcmlnaW5hbFN0cmluZy5sZW5ndGgoKSAmJiBfZmxhZ3MuaXNTb2Z0KSB7CisgICAgICAgICAg
ICB1bmljaGFyIGMgPSBvcmlnaW5hbFN0cmluZy5hdCgwKTsKICAgICAgICAgICAgIGlmIChjID09
ICdcbicgfHwgYyA9PSAnXHInIHx8IGMgPT0gTlNQYXJhZ3JhcGhTZXBhcmF0b3JDaGFyYWN0ZXIg
fHwgYyA9PSBOU0xpbmVTZXBhcmF0b3JDaGFyYWN0ZXIgfHwgYyA9PSBOU0Zvcm1GZWVkQ2hhcmFj
dGVyIHx8IGMgPT0gV2ViTmV4dExpbmVDaGFyYWN0ZXIpCiAgICAgICAgICAgICAgICAgcmFuZ2VU
b1JlcGxhY2UgPSBOU01ha2VSYW5nZSh0ZXh0TGVuZ3RoIC0gMSwgMSk7CiAgICAgICAgIH0KICAg
ICB9IGVsc2UgewotICAgICAgICBDRlN0cmluZ0lubGluZUJ1ZmZlciBpbmxpbmVCdWZmZXI7Ci0g
ICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBUZXh0QnVmZmVyU2l6ZSA9IDI1NTsKLQotICAgICAg
ICB1bmljaGFyIGJ1ZmZlcltUZXh0QnVmZmVyU2l6ZSArIDFdOwotICAgICAgICBOU1VJbnRlZ2Vy
IGksIGNvdW50ID0gW2luc3RyIGxlbmd0aF0sIGlkeCA9IDA7Ci0KLSAgICAgICAgbXV0c3RyID0g
Q0ZTdHJpbmdDcmVhdGVNdXRhYmxlKE5VTEwsIDApOwotICAgICAgICBDRlN0cmluZ0luaXRJbmxp
bmVCdWZmZXIoKENGU3RyaW5nUmVmKWluc3RyLCAmaW5saW5lQnVmZmVyLCBDRlJhbmdlTWFrZSgw
LCBjb3VudCkpOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAg
ICAgICAgdW5pY2hhciBjID0gQ0ZTdHJpbmdHZXRDaGFyYWN0ZXJGcm9tSW5saW5lQnVmZmVyKCZp
bmxpbmVCdWZmZXIsIGkpOwotICAgICAgICAgICAgaWYgKGMgPT0gJyAnIHx8IGMgPT0gJ1xuJyB8
fCBjID09ICdccicgfHwgYyA9PSAnXHQnIHx8IGMgPT0gMHhjIHx8IGMgPT0gMHgyMDBiKSB7Cisg
ICAgICAgIHVuc2lnbmVkIGNvdW50ID0gb3JpZ2luYWxTdHJpbmcubGVuZ3RoKCk7CisgICAgICAg
IGJvb2wgd2FzTGVhZGluZyA9IHRydWU7CisgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAg
ICAgIFVDaGFyIGMgPSBvcmlnaW5hbFN0cmluZy5hdChpKTsKKyAgICAgICAgICAgIGJvb2wgaXNX
aGl0ZXNwYWNlID0gYyA9PSAnICcgfHwgYyA9PSAnXG4nIHx8IGMgPT0gJ1xyJyB8fCBjID09ICdc
dCcgfHwgYyA9PSAweGMgfHwgYyA9PSAweDIwMGI7CisgICAgICAgICAgICBpZiAoaXNXaGl0ZXNw
YWNlKQogICAgICAgICAgICAgICAgIHdhc1NwYWNlID0gKCF3YXNMZWFkaW5nIHx8ICFzdXBwcmVz
c0xlYWRpbmdTcGFjZSk7Ci0gICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZWxzZSB7
CiAgICAgICAgICAgICAgICAgaWYgKHdhc1NwYWNlKQotICAgICAgICAgICAgICAgICAgICBidWZm
ZXJbaWR4KytdID0gJyAnOwotICAgICAgICAgICAgICAgIGJ1ZmZlcltpZHgrK10gPSBjOwotICAg
ICAgICAgICAgICAgIGlmIChpZHggPj0gVGV4dEJ1ZmZlclNpemUpIHsKLSAgICAgICAgICAgICAg
ICAgICAgQ0ZTdHJpbmdBcHBlbmRDaGFyYWN0ZXJzKG11dHN0ciwgYnVmZmVyLCBpZHgpOwotICAg
ICAgICAgICAgICAgICAgICBpZHggPSAwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB3YXNTcGFjZSA9IHdhc0xlYWRpbmcgPSBOTzsKKyAgICAgICAgICAgICAgICAgICAgYnVp
bGRlci5hcHBlbmQoJyAnKTsKKyAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChjKTsKKyAg
ICAgICAgICAgICAgICB3YXNTcGFjZSA9IGZhbHNlOworICAgICAgICAgICAgICAgIHdhc0xlYWRp
bmcgPSBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpZiAod2FzU3Bh
Y2UpCi0gICAgICAgICAgICBidWZmZXJbaWR4KytdID0gJyAnOwotICAgICAgICBpZiAoaWR4ID4g
MCkKLSAgICAgICAgICAgIENGU3RyaW5nQXBwZW5kQ2hhcmFjdGVycyhtdXRzdHIsIGJ1ZmZlciwg
aWR4KTsKLSAgICAgICAgb3V0c3RyID0gKE5TU3RyaW5nICopbXV0c3RyOworICAgICAgICAgICAg
YnVpbGRlci5hcHBlbmQoJyAnKTsKKyAgICAgICAgb3V0cHV0U3RyaW5nID0gYnVpbGRlci50b1N0
cmluZygpOwogICAgIH0KLSAgICBpZiAoW291dHN0ciBsZW5ndGhdID4gMCkgeworCisgICAgaWYg
KG91dHB1dFN0cmluZy5sZW5ndGgoKSkgewogICAgICAgICBTdHJpbmcgdGV4dFRyYW5zZm9ybSA9
IF9jYWNoZXMtPnByb3BlcnR5VmFsdWVGb3JOb2RlKGNoYXJhY3RlckRhdGEsIENTU1Byb3BlcnR5
VGV4dFRyYW5zZm9ybSk7CiAgICAgICAgIGlmICh0ZXh0VHJhbnNmb3JtLmxlbmd0aCgpKSB7Ci0g
ICAgICAgICAgICBpZiAodGV4dFRyYW5zZm9ybSA9PSAiY2FwaXRhbGl6ZSIpCi0gICAgICAgICAg
ICAgICAgb3V0c3RyID0gW291dHN0ciBjYXBpdGFsaXplZFN0cmluZ107Ci0gICAgICAgICAgICBl
bHNlIGlmICh0ZXh0VHJhbnNmb3JtID09ICJ1cHBlcmNhc2UiKQotICAgICAgICAgICAgICAgIG91
dHN0ciA9IFtvdXRzdHIgdXBwZXJjYXNlU3RyaW5nXTsKKyAgICAgICAgICAgIGlmICh0ZXh0VHJh
bnNmb3JtID09ICJjYXBpdGFsaXplIikgey8vIEZJWE1FOiBUaGlzIGlzIGV4dHJlbWVseSBpbmVm
ZmljaWVudC4KKyAgICAgICAgICAgICAgICBOU1N0cmluZyAqdGVtcG9yYXJ5U3RyaW5nID0gb3V0
cHV0U3RyaW5nOworICAgICAgICAgICAgICAgIG91dHB1dFN0cmluZyA9IFt0ZW1wb3JhcnlTdHJp
bmcgY2FwaXRhbGl6ZWRTdHJpbmddOworICAgICAgICAgICAgfSBlbHNlIGlmICh0ZXh0VHJhbnNm
b3JtID09ICJ1cHBlcmNhc2UiKQorICAgICAgICAgICAgICAgIG91dHB1dFN0cmluZyA9IG91dHB1
dFN0cmluZy51cHBlcigpOwogICAgICAgICAgICAgZWxzZSBpZiAodGV4dFRyYW5zZm9ybSA9PSAi
bG93ZXJjYXNlIikKLSAgICAgICAgICAgICAgICBvdXRzdHIgPSBbb3V0c3RyIGxvd2VyY2FzZVN0
cmluZ107CisgICAgICAgICAgICAgICAgb3V0cHV0U3RyaW5nID0gb3V0cHV0U3RyaW5nLmxvd2Vy
KCk7CiAgICAgICAgIH0KIAotICAgICAgICBbX2F0dHJTdHIgcmVwbGFjZUNoYXJhY3RlcnNJblJh
bmdlOnJhbmdlVG9SZXBsYWNlIHdpdGhTdHJpbmc6b3V0c3RyXTsKLSAgICAgICAgcmFuZ2VUb1Jl
cGxhY2UubGVuZ3RoID0gW291dHN0ciBsZW5ndGhdOworICAgICAgICBbX2F0dHJTdHIgcmVwbGFj
ZUNoYXJhY3RlcnNJblJhbmdlOnJhbmdlVG9SZXBsYWNlIHdpdGhTdHJpbmc6b3V0cHV0U3RyaW5n
XTsKKyAgICAgICAgcmFuZ2VUb1JlcGxhY2UubGVuZ3RoID0gb3V0cHV0U3RyaW5nLmxlbmd0aCgp
OwogICAgICAgICBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiBhdHRyczsKLSAgICAgICAgRE9NRWxl
bWVudCAqZWxlbWVudCA9IChET01FbGVtZW50ICopdGV4dDsKLSAgICAgICAgd2hpbGUgKGVsZW1l
bnQpIHsKKyAgICAgICAgTm9kZSogYW5jZXN0b3IgPSBjaGFyYWN0ZXJEYXRhLnBhcmVudE5vZGUo
KTsKKyAgICAgICAgd2hpbGUgKGFuY2VzdG9yKSB7CiAgICAgICAgICAgICAvLyBGaWxsIGF0dHJz
IGRpY3Rpb25hcnkgd2l0aCBhdHRyaWJ1dGVzIGZyb20gcGFyZW50IG5vZGVzLCBub3Qgb3Zlcndy
aXRpbmcgb25lcyBkZWVwZXIgaW4gdGhlIHRyZWUKLSAgICAgICAgICAgIGlmKFtlbGVtZW50IG5v
ZGVUeXBlXSA9PSBET01fRUxFTUVOVF9OT0RFKSB7Ci0gICAgICAgICAgICAgICAgUmV0YWluUHRy
PE5TTXV0YWJsZURpY3Rpb25hcnk+IG5ld0F0dHJzID0gYWRvcHROUyhbX2F0dHJpYnV0ZXNGb3JF
bGVtZW50KGVsZW1lbnQpIG11dGFibGVDb3B5XSk7CisgICAgICAgICAgICBpZihhbmNlc3Rvci0+
aXNFbGVtZW50Tm9kZSgpKSB7CisgICAgICAgICAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZURp
Y3Rpb25hcnk+IG5ld0F0dHJzID0gYWRvcHROUyhbX2F0dHJpYnV0ZXNGb3JFbGVtZW50KGtpdCh0
b0VsZW1lbnQoYW5jZXN0b3IpKSkgbXV0YWJsZUNvcHldKTsKICAgICAgICAgICAgICAgICBpZiAo
YXR0cnMpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gQWxyZWFkeS1zZXQgYXR0cmlidXRlcyAo
ZnJvbSBsb3dlciBpbiB0aGUgdHJlZSkgb3ZlcndyaXRlIHRoZSBoaWdoZXIgb25lcy4KICAgICAg
ICAgICAgICAgICAgICAgW25ld0F0dHJzIGFkZEVudHJpZXNGcm9tRGljdGlvbmFyeTphdHRycy5n
ZXQoKV07CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGF0dHJzID0gbmV3QXR0
cnM7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbGVtZW50ID0gKERPTUVsZW1lbnQgKilb
ZWxlbWVudCBwYXJlbnROb2RlXTsKKyAgICAgICAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3ItPnBh
cmVudE5vZGUoKTsKICAgICAgICAgfQogICAgICAgICBpZiAocmFuZ2VUb1JlcGxhY2UubGVuZ3Ro
ID4gMCkKICAgICAgICAgICAgIFtfYXR0clN0ciBzZXRBdHRyaWJ1dGVzOmF0dHJzLmdldCgpIHJh
bmdlOnJhbmdlVG9SZXBsYWNlXTsKQEAgLTIzNzAsNzEgKzIzNTIsNjUgQEAKICAgICAgICAgQ0ZS
ZWxlYXNlKG11dHN0cik7CiB9CiAKLXZvaWQgSFRNTENvbnZlcnRlcjo6X3RyYXZlcnNlTm9kZShE
T01Ob2RlICpub2RlLCBOU0ludGVnZXIgZGVwdGgsIEJPT0wgZW1iZWRkZWQpCit2b2lkIEhUTUxD
b252ZXJ0ZXI6Ol90cmF2ZXJzZU5vZGUoTm9kZSogbm9kZSwgdW5zaWduZWQgZGVwdGgsIGJvb2wg
ZW1iZWRkZWQpCiB7Ci0gICAgdW5zaWduZWQgc2hvcnQgbm9kZVR5cGU7Ci0gICAgTlNBcnJheSAq
Y2hpbGROb2RlczsKLSAgICBOU1VJbnRlZ2VyIGNvdW50OwotICAgIE5TVUludGVnZXIgc3RhcnRP
ZmZzZXQ7Ci0gICAgTlNVSW50ZWdlciBlbmRPZmZzZXQ7Ci0gICAgQk9PTCBpc1N0YXJ0ID0gTk87
Ci0gICAgQk9PTCBpc0VuZCA9IE5POwotCi0gICAgaWYgKF9mbGFncy5yZWFjaGVkRW5kKQorICAg
IGlmICghbm9kZSB8fCBfZmxhZ3MucmVhY2hlZEVuZCkKICAgICAgICAgcmV0dXJuOwotICAgIGlm
IChfZG9tUmFuZ2UgJiYgIV9mbGFncy5yZWFjaGVkU3RhcnQgJiYgX2RvbVN0YXJ0QW5jZXN0b3Jz
ICYmICFbX2RvbVN0YXJ0QW5jZXN0b3JzIGNvbnRhaW5zT2JqZWN0Om5vZGVdKQorICAgIGlmIChf
ZG9tUmFuZ2UgJiYgIV9mbGFncy5yZWFjaGVkU3RhcnQgJiYgIV9jYWNoZXMtPmlzQW5jZXN0b3Jz
T2ZTdGFydFRvQmVDb252ZXJ0ZWQobm9kZSkpCiAgICAgICAgIHJldHVybjsKLSAgICAKLSAgICBu
b2RlVHlwZSA9IFtub2RlIG5vZGVUeXBlXTsKLSAgICBjaGlsZE5vZGVzID0gX2NoaWxkcmVuRm9y
Tm9kZShub2RlKTsKLSAgICBjb3VudCA9IFtjaGlsZE5vZGVzIGNvdW50XTsKLSAgICBzdGFydE9m
ZnNldCA9IDA7Ci0gICAgZW5kT2Zmc2V0ID0gY291bnQ7CiAKKyAgICB1bnNpZ25lZCBzdGFydE9m
ZnNldCA9IDA7CisgICAgdW5zaWduZWQgZW5kT2Zmc2V0ID0gVUlOVF9NQVg7CisgICAgYm9vbCBp
c1N0YXJ0ID0gZmFsc2U7CisgICAgYm9vbCBpc0VuZCA9IGZhbHNlOwogICAgIGlmIChfZG9tUmFu
Z2UpIHsKLSAgICAgICAgaWYgKG5vZGUgPT0gW19kb21SYW5nZSBzdGFydENvbnRhaW5lcl0pIHsK
KyAgICAgICAgaWYgKG5vZGUgPT0gY29yZShbX2RvbVJhbmdlIHN0YXJ0Q29udGFpbmVyXSkpIHsK
ICAgICAgICAgICAgIHN0YXJ0T2Zmc2V0ID0gKE5TVUludGVnZXIpW19kb21SYW5nZSBzdGFydE9m
ZnNldF07Ci0gICAgICAgICAgICBpc1N0YXJ0ID0gWUVTOworICAgICAgICAgICAgaXNTdGFydCA9
IHRydWU7CiAgICAgICAgICAgICBfZmxhZ3MucmVhY2hlZFN0YXJ0ID0gWUVTOwogICAgICAgICB9
Ci0gICAgICAgIGlmIChub2RlID09IFtfZG9tUmFuZ2UgZW5kQ29udGFpbmVyXSkgeworICAgICAg
ICBpZiAobm9kZSA9PSBjb3JlKFtfZG9tUmFuZ2UgZW5kQ29udGFpbmVyXSkpIHsKICAgICAgICAg
ICAgIGVuZE9mZnNldCA9IChOU1VJbnRlZ2VyKVtfZG9tUmFuZ2UgZW5kT2Zmc2V0XTsKLSAgICAg
ICAgICAgIGlzRW5kID0gWUVTOworICAgICAgICAgICAgaXNFbmQgPSB0cnVlOwogICAgICAgICB9
CiAgICAgfQogICAgIAotICAgIGlmIChub2RlVHlwZSA9PSBET01fRE9DVU1FTlRfTk9ERSB8fCBu
b2RlVHlwZSA9PSBET01fRE9DVU1FTlRfRlJBR01FTlRfTk9ERSkgewotICAgICAgICBmb3IgKE5T
VUludGVnZXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgaWYgKG5vZGUtPmlzRG9jdW1l
bnROb2RlKCkgfHwgbm9kZS0+aXNEb2N1bWVudEZyYWdtZW50KCkpIHsKKyAgICAgICAgTm9kZSog
Y2hpbGQgPSBub2RlLT5maXJzdENoaWxkKCk7CisgICAgICAgIGZvciAoTlNVSW50ZWdlciBpID0g
MDsgY2hpbGQ7IGkrKykgewogICAgICAgICAgICAgaWYgKGlzU3RhcnQgJiYgaSA9PSBzdGFydE9m
ZnNldCkKICAgICAgICAgICAgICAgICBfZG9tUmFuZ2VTdGFydEluZGV4ID0gW19hdHRyU3RyIGxl
bmd0aF07CiAgICAgICAgICAgICBpZiAoKCFpc1N0YXJ0IHx8IHN0YXJ0T2Zmc2V0IDw9IGkpICYm
ICghaXNFbmQgfHwgZW5kT2Zmc2V0ID4gaSkpCi0gICAgICAgICAgICAgICAgX3RyYXZlcnNlTm9k
ZShbY2hpbGROb2RlcyBvYmplY3RBdEluZGV4OmldLCBkZXB0aCArIDEsIGVtYmVkZGVkKTsKKyAg
ICAgICAgICAgICAgICBfdHJhdmVyc2VOb2RlKGNoaWxkLCBkZXB0aCArIDEsIGVtYmVkZGVkKTsK
ICAgICAgICAgICAgIGlmIChpc0VuZCAmJiBpICsgMSA+PSBlbmRPZmZzZXQpCiAgICAgICAgICAg
ICAgICAgX2ZsYWdzLnJlYWNoZWRFbmQgPSBZRVM7Ci0gICAgICAgICAgICBpZiAoX2ZsYWdzLnJl
YWNoZWRFbmQpIGJyZWFrOworICAgICAgICAgICAgaWYgKF9mbGFncy5yZWFjaGVkRW5kKQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxp
bmcoKTsKICAgICAgICAgfQotICAgIH0gZWxzZSBpZiAobm9kZVR5cGUgPT0gRE9NX0VMRU1FTlRf
Tk9ERSkgewotICAgICAgICBET01FbGVtZW50ICplbGVtZW50ID0gKERPTUVsZW1lbnQgKilub2Rl
OworICAgIH0gZWxzZSBpZiAobm9kZS0+aXNFbGVtZW50Tm9kZSgpKSB7CisgICAgICAgIERPTUVs
ZW1lbnQqIGVsZW1lbnQgPSBraXQodG9FbGVtZW50KG5vZGUpKTsKICAgICAgICAgaWYgKF9lbnRl
ckVsZW1lbnQoZWxlbWVudCwgZW1iZWRkZWQpKSB7CiAgICAgICAgICAgICBOU1VJbnRlZ2VyIHN0
YXJ0SW5kZXggPSBbX2F0dHJTdHIgbGVuZ3RoXTsKICAgICAgICAgICAgIGlmIChfcHJvY2Vzc0Vs
ZW1lbnQoZWxlbWVudCwgZGVwdGgpKSB7Ci0gICAgICAgICAgICAgICAgZm9yIChOU1VJbnRlZ2Vy
IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxkID0g
bm9kZS0+Zmlyc3RDaGlsZCgpOworICAgICAgICAgICAgICAgIGZvciAoTlNVSW50ZWdlciBpID0g
MDsgY2hpbGQ7IGkrKykgewogICAgICAgICAgICAgICAgICAgICBpZiAoaXNTdGFydCAmJiBpID09
IHN0YXJ0T2Zmc2V0KQogICAgICAgICAgICAgICAgICAgICAgICAgX2RvbVJhbmdlU3RhcnRJbmRl
eCA9IFtfYXR0clN0ciBsZW5ndGhdOwogICAgICAgICAgICAgICAgICAgICBpZiAoKCFpc1N0YXJ0
IHx8IHN0YXJ0T2Zmc2V0IDw9IGkpICYmICghaXNFbmQgfHwgZW5kT2Zmc2V0ID4gaSkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICBfdHJhdmVyc2VOb2RlKFtjaGlsZE5vZGVzIG9iamVjdEF0SW5k
ZXg6aV0sIGRlcHRoICsgMSwgZW1iZWRkZWQpOworICAgICAgICAgICAgICAgICAgICAgICAgX3Ry
YXZlcnNlTm9kZShjaGlsZCwgZGVwdGggKyAxLCBlbWJlZGRlZCk7CiAgICAgICAgICAgICAgICAg
ICAgIGlmIChpc0VuZCAmJiBpICsgMSA+PSBlbmRPZmZzZXQpCiAgICAgICAgICAgICAgICAgICAg
ICAgICBfZmxhZ3MucmVhY2hlZEVuZCA9IFlFUzsKICAgICAgICAgICAgICAgICAgICAgaWYgKF9m
bGFncy5yZWFjaGVkRW5kKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIF9leGl0RWxlbWVudChlbGVtZW50LCBkZXB0aCwgc3RhcnRJ
bmRleCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKG5vZGVUeXBl
ID09IERPTV9URVhUX05PREUgfHwgbm9kZVR5cGUgPT0gRE9NX0NEQVRBX1NFQ1RJT05fTk9ERSkg
ewotICAgICAgICBfcHJvY2Vzc1RleHQoKERPTUNoYXJhY3RlckRhdGEgKilub2RlKTsKLSAgICB9
Ci0gICAgCisgICAgfSBlbHNlIGlmIChub2RlLT5pc0NoYXJhY3RlckRhdGFOb2RlKCkpCisgICAg
ICAgIF9wcm9jZXNzVGV4dCgqdG9DaGFyYWN0ZXJEYXRhKG5vZGUpKTsKKwogICAgIGlmIChpc0Vu
ZCkKICAgICAgICAgX2ZsYWdzLnJlYWNoZWRFbmQgPSBZRVM7CiB9CkBAIC0yNDQyLDQwICsyNDE4
LDQxIEBACiB2b2lkIEhUTUxDb252ZXJ0ZXI6Ol90cmF2ZXJzZUZvb3Rlck5vZGUoRE9NTm9kZSAq
bm9kZSwgTlNJbnRlZ2VyIGRlcHRoKQogewogICAgIERPTUVsZW1lbnQgKmVsZW1lbnQgPSAoRE9N
RWxlbWVudCAqKW5vZGU7Ci0gICAgTlNBcnJheSAqY2hpbGROb2RlcyA9IF9jaGlsZHJlbkZvck5v
ZGUobm9kZSk7Ci0gICAgTlNVSW50ZWdlciBjb3VudCA9IFtjaGlsZE5vZGVzIGNvdW50XTsKLSAg
ICBOU1VJbnRlZ2VyIHN0YXJ0T2Zmc2V0ID0gMDsKLSAgICBOU1VJbnRlZ2VyIGVuZE9mZnNldCA9
IGNvdW50OwotICAgIEJPT0wgaXNTdGFydCA9IE5POwotICAgIEJPT0wgaXNFbmQgPSBOTzsKIAog
ICAgIGlmIChfZmxhZ3MucmVhY2hlZEVuZCkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChfZG9t
UmFuZ2UgJiYgIV9mbGFncy5yZWFjaGVkU3RhcnQgJiYgX2RvbVN0YXJ0QW5jZXN0b3JzICYmICFb
X2RvbVN0YXJ0QW5jZXN0b3JzIGNvbnRhaW5zT2JqZWN0Om5vZGVdKQorICAgIGlmIChfZG9tUmFu
Z2UgJiYgIV9mbGFncy5yZWFjaGVkU3RhcnQgJiYgIV9jYWNoZXMtPmlzQW5jZXN0b3JzT2ZTdGFy
dFRvQmVDb252ZXJ0ZWQoY29yZShub2RlKSkpCiAgICAgICAgIHJldHVybjsKKworICAgIHVuc2ln
bmVkIHN0YXJ0T2Zmc2V0ID0gMDsKKyAgICB1bnNpZ25lZCBlbmRPZmZzZXQgPSBVSU5UX01BWDsK
KyAgICBib29sIGlzU3RhcnQgPSBmYWxzZTsKKyAgICBib29sIGlzRW5kID0gZmFsc2U7CiAgICAg
aWYgKF9kb21SYW5nZSkgewogICAgICAgICBpZiAobm9kZSA9PSBbX2RvbVJhbmdlIHN0YXJ0Q29u
dGFpbmVyXSkgewogICAgICAgICAgICAgc3RhcnRPZmZzZXQgPSAoTlNVSW50ZWdlcilbX2RvbVJh
bmdlIHN0YXJ0T2Zmc2V0XTsKLSAgICAgICAgICAgIGlzU3RhcnQgPSBZRVM7CisgICAgICAgICAg
ICBpc1N0YXJ0ID0gdHJ1ZTsKICAgICAgICAgICAgIF9mbGFncy5yZWFjaGVkU3RhcnQgPSBZRVM7
CiAgICAgICAgIH0KICAgICAgICAgaWYgKG5vZGUgPT0gW19kb21SYW5nZSBlbmRDb250YWluZXJd
KSB7CiAgICAgICAgICAgICBlbmRPZmZzZXQgPSAoTlNVSW50ZWdlcilbX2RvbVJhbmdlIGVuZE9m
ZnNldF07Ci0gICAgICAgICAgICBpc0VuZCA9IFlFUzsKKyAgICAgICAgICAgIGlzRW5kID0gdHJ1
ZTsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoX2VudGVyRWxlbWVudChlbGVtZW50LCBZRVMp
KSB7CiAgICAgICAgIE5TVUludGVnZXIgc3RhcnRJbmRleCA9IFtfYXR0clN0ciBsZW5ndGhdOwog
ICAgICAgICBpZiAoX3Byb2Nlc3NFbGVtZW50KGVsZW1lbnQsIGRlcHRoKSkgewotICAgICAgICAg
ICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICAgICAg
Tm9kZSogY2hpbGQgPSBjb3JlKGVsZW1lbnQpLT5maXJzdENoaWxkKCk7CisgICAgICAgICAgICBm
b3IgKE5TVUludGVnZXIgaSA9IDA7IGNoaWxkOyBpKyspIHsKICAgICAgICAgICAgICAgICBpZiAo
aXNTdGFydCAmJiBpID09IHN0YXJ0T2Zmc2V0KQogICAgICAgICAgICAgICAgICAgICBfZG9tUmFu
Z2VTdGFydEluZGV4ID0gW19hdHRyU3RyIGxlbmd0aF07CiAgICAgICAgICAgICAgICAgaWYgKCgh
aXNTdGFydCB8fCBzdGFydE9mZnNldCA8PSBpKSAmJiAoIWlzRW5kIHx8IGVuZE9mZnNldCA+IGkp
KQotICAgICAgICAgICAgICAgICAgICBfdHJhdmVyc2VOb2RlKFtjaGlsZE5vZGVzIG9iamVjdEF0
SW5kZXg6aV0sIGRlcHRoICsgMSwgWUVTKTsKKyAgICAgICAgICAgICAgICAgICAgX3RyYXZlcnNl
Tm9kZShjaGlsZCwgZGVwdGggKyAxLCB0cnVlIC8qIGVtYmVkZGVkICovKTsKICAgICAgICAgICAg
ICAgICBpZiAoaXNFbmQgJiYgaSArIDEgPj0gZW5kT2Zmc2V0KQogICAgICAgICAgICAgICAgICAg
ICBfZmxhZ3MucmVhY2hlZEVuZCA9IFlFUzsKICAgICAgICAgICAgICAgICBpZiAoX2ZsYWdzLnJl
YWNoZWRFbmQpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNo
aWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBf
ZXhpdEVsZW1lbnQoZWxlbWVudCwgZGVwdGgsIHN0YXJ0SW5kZXgpOwogICAgICAgICB9CkBAIC0y
NDkzLDI3ICsyNDcwLDM1IEBACiAgICAgICAgIFtfYXR0clN0ciByZXBsYWNlQ2hhcmFjdGVyc0lu
UmFuZ2U6TlNNYWtlUmFuZ2UodGV4dExlbmd0aCwgMCkgd2l0aFN0cmluZzpAIlxuIl07CiB9CiAK
K05vZGUqIEhUTUxDb252ZXJ0ZXJDYWNoZXM6OmNhY2hlQW5jZXN0b3JzT2ZTdGFydFRvQmVDb252
ZXJ0ZWQoY29uc3QgUmFuZ2UmIHJhbmdlKQoreworICAgIE5vZGUqIGNvbW1vbkFuY2VzdG9yID0g
cmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIoQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAg
Tm9kZSogYW5jZXN0b3IgPSByYW5nZS5zdGFydENvbnRhaW5lcigpOworCisgICAgd2hpbGUgKGFu
Y2VzdG9yKSB7CisgICAgICAgIG1fYW5jZXN0b3JzVW5kZXJDb21tb25BbmNlc3Rvci5hZGQoYW5j
ZXN0b3IpOworICAgICAgICBpZiAoYW5jZXN0b3IgPT0gY29tbW9uQW5jZXN0b3IpCisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgYW5jZXN0b3IgPSBhbmNlc3Rvci0+cGFyZW50Tm9kZSgpOwor
ICAgIH0KKworICAgIHJldHVybiBjb21tb25BbmNlc3RvcjsKK30KKwogdm9pZCBIVE1MQ29udmVy
dGVyOjpfbG9hZEZyb21ET01SYW5nZSgpCiB7CisgICAgQVNTRVJUKF9kb21SYW5nZSk7CiAgICAg
aWYgKC0xID09IF9lcnJvckNvZGUpIHsKLSAgICAgICAgRE9NTm9kZSAqY29tbW9uQW5jZXN0b3JD
b250YWluZXIgPSBbX2RvbVJhbmdlIGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyXTsKLSAgICAgICAg
RE9NTm9kZSAqYW5jZXN0b3JDb250YWluZXIgPSBbX2RvbVJhbmdlIHN0YXJ0Q29udGFpbmVyXTsK
LSAgICAgICAgCi0gICAgICAgIF9kb21TdGFydEFuY2VzdG9ycyA9IFtbTlNNdXRhYmxlQXJyYXkg
YWxsb2NdIGluaXRdOwotICAgICAgICB3aGlsZSAoYW5jZXN0b3JDb250YWluZXIpIHsKLSAgICAg
ICAgICAgIFtfZG9tU3RhcnRBbmNlc3RvcnMgYWRkT2JqZWN0OmFuY2VzdG9yQ29udGFpbmVyXTsK
LSAgICAgICAgICAgIGlmIChhbmNlc3RvckNvbnRhaW5lciA9PSBjb21tb25BbmNlc3RvckNvbnRh
aW5lcikKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGFuY2VzdG9yQ29udGFp
bmVyID0gW2FuY2VzdG9yQ29udGFpbmVyIHBhcmVudE5vZGVdOwotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICBfZG9jdW1lbnQgPSBbY29tbW9uQW5jZXN0b3JDb250YWluZXIgb3duZXJEb2N1
bWVudF07CisgICAgICAgIE5vZGUqIGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyID0gX2NhY2hlcy0+
Y2FjaGVBbmNlc3RvcnNPZlN0YXJ0VG9CZUNvbnZlcnRlZCgqY29yZShfZG9tUmFuZ2UpKTsKKyAg
ICAgICAgQVNTRVJUKGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKTsKKworICAgICAgICBfZG9jdW1l
bnQgPSBraXQoY29tbW9uQW5jZXN0b3JDb250YWluZXItPm93bmVyRG9jdW1lbnQoKSk7CiAgICAg
ICAgIF9kYXRhU291cmNlID0gKERvY3VtZW50TG9hZGVyICopY29yZShfZG9jdW1lbnQpLT5mcmFt
ZSgpLT5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpOwogICAgICAgICAKICAgICAgICAgaWYgKF9k
b2N1bWVudCAmJiBfZGF0YVNvdXJjZSkgewogICAgICAgICAgICAgX2RvbVJhbmdlU3RhcnRJbmRl
eCA9IDA7CiAgICAgICAgICAgICBfZXJyb3JDb2RlID0gMDsKLSAgICAgICAgICAgIF90cmF2ZXJz
ZU5vZGUoY29tbW9uQW5jZXN0b3JDb250YWluZXIsIDAsIE5PKTsKKyAgICAgICAgICAgIF90cmF2
ZXJzZU5vZGUoY29tbW9uQW5jZXN0b3JDb250YWluZXIsIDAsIGZhbHNlIC8qIGVtYmVkZGVkICov
KTsKICAgICAgICAgICAgIGlmIChfZG9tUmFuZ2VTdGFydEluZGV4ID4gMCAmJiBfZG9tUmFuZ2VT
dGFydEluZGV4IDw9IFtfYXR0clN0ciBsZW5ndGhdKQogICAgICAgICAgICAgICAgIFtfYXR0clN0
ciBkZWxldGVDaGFyYWN0ZXJzSW5SYW5nZTpOU01ha2VSYW5nZSgwLCBfZG9tUmFuZ2VTdGFydElu
ZGV4KV07CiAgICAgICAgIH0K
</data>
<flag name="review"
          id="252078"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>