<?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>200693</bug_id>
          
          <creation_ts>2019-08-13 15:46:17 -0700</creation_ts>
          <short_desc>Add phase, block, and node numbers to left margin of DFG graph dumps.</short_desc>
          <delta_ts>2019-08-13 16:33:25 -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>JavaScriptCore</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1560990</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-08-13 15:46:17 -0700</bug_when>
    <thetext>When scrolling through the DFG graph dumps, it&apos;s easy to get lost as to which phase or block one is looking at, especially if the blocks are long.  This patch adds phase, block, and node numbers on the left margin of the dumps.  Here&apos;s a sample:

           53:     %Bd:Function                   = 0x1079fd960:[Function, {}, NonArray, Proto:0x1079d8000, Leaf]
           53:     %Bf:Function                   = 0x1079b0700:[Function, {name:100, prototype:101, length:102, stackTraceLimit:103}, NonArray, Proto:0x1079d8000, Leaf]
           53:     %Bj:Function                   = 0x1079fd5e0:[Function, {name:100, length:101, toString:102, apply:103, call:104, bind:105, Symbol.hasInstance:106, caller:107, arguments:108, constructor:109}, NonArray, Proto:0x1079c0000, Leaf]
           53:     %CV:JSGlobalLexicalEnvironment = 0x1079fd6c0:[JSGlobalLexicalEnvironment, {}, NonArray, Leaf]

           53: Phase liveness analysis changed the IR.

           54: Beginning DFG phase OSR availability analysis.
           54: Before OSR availability analysis:

           54: DFG for foo#DXMNag:[0x1079a4850-&gt;0x1079a4130-&gt;0x1079c7600, DFGFunctionCall, 204 (NeverInline)]:
           54:   Fixpoint state: FixpointConverged; Form: SSA; Unification state: GloballyUnified; Ref count state: ExactRefCount
           54:   Argument formats for entrypoint index: 0 : FlushedJSValue, FlushedCell, FlushedJSValue

         0 54: Block #0 (bc#0): (OSR target)
         0 54:   Execution count: 1.000000
         0 54:   Predecessors:
         0 54:   Successors:
         0 54:   Dominated by: #0
         0 54:   Dominates: #0
         0 54:   Dominance Frontier: 
         0 54:   Iterated Dominance Frontier: 
         0 54:   Backwards dominates by: #root #0
         0 54:   Backwards dominates: #0
         0 54:   Control equivalent to: #0
         0 54:   States: StructuresAreWatched
         0 54:   Live: 
         0 54:   Values: 
      0  0 54:   53:&lt; 1:-&gt;	JSConstant(JS|UseAsOther, Other, Null, bc#0, ExitValid)
      1  0 54:   64:&lt; 2:-&gt;	JSConstant(JS|UseAsOther, NonBoolInt32, Int32: 10, bc#0, ExitValid)
      2  0 54:    3:&lt; 5:-&gt;	JSConstant(JS|PureInt, Other, Undefined, bc#0, ExitValid)
      3  0 54:   32:&lt; 1:-&gt;	JSConstant(JS|UseAsOther, Bool, False, bc#0, ExitValid)
      4  0 54:   19:&lt; 2:-&gt;	JSConstant(JS|UseAsOther, OtherObj, Weak:Object: 0x1079d4000 with butterfly 0x0 (Structure %CV:JSGlobalLexicalEnvironment), StructureID: 31423, bc#0, ExitValid)

The numbers in the left margin before the &apos;:&apos; are node number (index of node in the block), block number, and phase number respectively.  Now, we can scroll thru the dumps quickly and tell at a glance when we&apos;ve scrolled passed the end of a phase, or block.  These sets of numbers can also serve as a positional marker that we can search for to return to a node in the dump after scrolling away.

Currently, these numbers are only added to the DFG part.  The FTL (from lowering to B3 onwards) does not have this feature yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1560991</commentid>
    <comment_count>1</comment_count>
      <attachid>376221</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-08-13 15:54:15 -0700</bug_when>
    <thetext>Created attachment 376221
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1560992</commentid>
    <comment_count>2</comment_count>
      <attachid>376221</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-08-13 16:02:41 -0700</bug_when>
    <thetext>Comment on attachment 376221
proposed patch.

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

&gt; Source/JavaScriptCore/ChangeLog:46
&gt; +        The numbers in the left margin before the &apos;:&apos; are node number (index of node in

not sure this I&apos;d call this node number (since node number is the index that&apos;s used as an identifier). Just say node index inside basic block

&gt; Source/JavaScriptCore/dfg/DFGGraph.h:1007
&gt; +    void incPhase() { m_prefix.phaseNumber++; }

maybe call this &quot;nextPhase&quot; or &quot;startingNextPhase&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1561001</commentid>
    <comment_count>3</comment_count>
      <attachid>376221</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-08-13 16:30:47 -0700</bug_when>
    <thetext>Comment on attachment 376221
proposed patch.

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

&gt;&gt; Source/JavaScriptCore/ChangeLog:46
&gt;&gt; +        The numbers in the left margin before the &apos;:&apos; are node number (index of node in
&gt; 
&gt; not sure this I&apos;d call this node number (since node number is the index that&apos;s used as an identifier). Just say node index inside basic block

There&apos;s already a m_index and index() in DFGNode, but I&apos;ll just clarify that I mean a different index here.

&gt;&gt; Source/JavaScriptCore/dfg/DFGGraph.h:1007
&gt;&gt; +    void incPhase() { m_prefix.phaseNumber++; }
&gt; 
&gt; maybe call this &quot;nextPhase&quot; or &quot;startingNextPhase&quot;?

Will rename to nextPhase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1561002</commentid>
    <comment_count>4</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-08-13 16:32:06 -0700</bug_when>
    <thetext>Thanks for the review.  Landed in r248642: &lt;http://trac.webkit.org/r248642&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1561005</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-08-13 16:33:25 -0700</bug_when>
    <thetext>&lt;rdar://problem/54279703&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376221</attachid>
            <date>2019-08-13 15:54:15 -0700</date>
            <delta_ts>2019-08-13 16:02:41 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-200693.patch</filename>
            <type>text/plain</type>
            <size>23294</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjQ4NjM5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgyIEBA
CisyMDE5LTA4LTEzICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZGQgcGhhc2UsIGJsb2NrLCBhbmQgbm9kZSBudW1iZXJzIHRvIGxlZnQgbWFyZ2luIG9mIERGRyBn
cmFwaCBkdW1wcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIwMDY5MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFdoZW4gc2Nyb2xsaW5nIHRocm91Z2ggdGhlIERGRyBncmFwaCBkdW1wcywgaXQncyBlYXN5
IHRvIGdldCBsb3N0IGFzIHRvIHdoaWNoIHBoYXNlCisgICAgICAgIG9yIGJsb2NrIG9uZSBpcyBs
b29raW5nIGF0LCBlc3BlY2lhbGx5IGlmIHRoZSBibG9ja3MgYXJlIGxvbmcuICBUaGlzIHBhdGNo
IGFkZHMKKyAgICAgICAgcGhhc2UsIGJsb2NrLCBhbmQgbm9kZSBudW1iZXJzIG9uIHRoZSBsZWZ0
IG1hcmdpbiBvZiB0aGUgZHVtcHMuICBIZXJlJ3MgYSBzYW1wbGU6CisKKyAgICAgICAgICAgICAg
IDUzOiAgICAgJUJkOkZ1bmN0aW9uICAgICAgICAgICAgICAgICAgID0gMHgxMDc5ZmQ5NjA6W0Z1
bmN0aW9uLCB7fSwgTm9uQXJyYXksIFByb3RvOjB4MTA3OWQ4MDAwLCBMZWFmXQorICAgICAgICAg
ICAgICAgNTM6ICAgICAlQmY6RnVuY3Rpb24gICAgICAgICAgICAgICAgICAgPSAweDEwNzliMDcw
MDpbRnVuY3Rpb24sIHtuYW1lOjEwMCwgcHJvdG90eXBlOjEwMSwgbGVuZ3RoOjEwMiwgc3RhY2tU
cmFjZUxpbWl0OjEwM30sIE5vbkFycmF5LCBQcm90bzoweDEwNzlkODAwMCwgTGVhZl0KKyAgICAg
ICAgICAgICAgIDUzOiAgICAgJUJqOkZ1bmN0aW9uICAgICAgICAgICAgICAgICAgID0gMHgxMDc5
ZmQ1ZTA6W0Z1bmN0aW9uLCB7bmFtZToxMDAsIGxlbmd0aDoxMDEsIHRvU3RyaW5nOjEwMiwgYXBw
bHk6MTAzLCBjYWxsOjEwNCwgYmluZDoxMDUsIFN5bWJvbC5oYXNJbnN0YW5jZToxMDYsIGNhbGxl
cjoxMDcsIGFyZ3VtZW50czoxMDgsIGNvbnN0cnVjdG9yOjEwOX0sIE5vbkFycmF5LCBQcm90bzow
eDEwNzljMDAwMCwgTGVhZl0KKyAgICAgICAgICAgICAgIDUzOiAgICAgJUNWOkpTR2xvYmFsTGV4
aWNhbEVudmlyb25tZW50ID0gMHgxMDc5ZmQ2YzA6W0pTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50
LCB7fSwgTm9uQXJyYXksIExlYWZdCisKKyAgICAgICAgICAgICAgIDUzOiBQaGFzZSBsaXZlbmVz
cyBhbmFseXNpcyBjaGFuZ2VkIHRoZSBJUi4KKworICAgICAgICAgICAgICAgNTQ6IEJlZ2lubmlu
ZyBERkcgcGhhc2UgT1NSIGF2YWlsYWJpbGl0eSBhbmFseXNpcy4KKyAgICAgICAgICAgICAgIDU0
OiBCZWZvcmUgT1NSIGF2YWlsYWJpbGl0eSBhbmFseXNpczoKKworICAgICAgICAgICAgICAgNTQ6
IERGRyBmb3IgZm9vI0RYTU5hZzpbMHgxMDc5YTQ4NTAtPjB4MTA3OWE0MTMwLT4weDEwNzljNzYw
MCwgREZHRnVuY3Rpb25DYWxsLCAyMDQgKE5ldmVySW5saW5lKV06CisgICAgICAgICAgICAgICA1
NDogICBGaXhwb2ludCBzdGF0ZTogRml4cG9pbnRDb252ZXJnZWQ7IEZvcm06IFNTQTsgVW5pZmlj
YXRpb24gc3RhdGU6IEdsb2JhbGx5VW5pZmllZDsgUmVmIGNvdW50IHN0YXRlOiBFeGFjdFJlZkNv
dW50CisgICAgICAgICAgICAgICA1NDogICBBcmd1bWVudCBmb3JtYXRzIGZvciBlbnRyeXBvaW50
IGluZGV4OiAwIDogRmx1c2hlZEpTVmFsdWUsIEZsdXNoZWRDZWxsLCBGbHVzaGVkSlNWYWx1ZQor
CisgICAgICAgICAgICAgMCA1NDogQmxvY2sgIzAgKGJjIzApOiAoT1NSIHRhcmdldCkKKyAgICAg
ICAgICAgICAwIDU0OiAgIEV4ZWN1dGlvbiBjb3VudDogMS4wMDAwMDAKKyAgICAgICAgICAgICAw
IDU0OiAgIFByZWRlY2Vzc29yczoKKyAgICAgICAgICAgICAwIDU0OiAgIFN1Y2Nlc3NvcnM6Cisg
ICAgICAgICAgICAgMCA1NDogICBEb21pbmF0ZWQgYnk6ICMwCisgICAgICAgICAgICAgMCA1NDog
ICBEb21pbmF0ZXM6ICMwCisgICAgICAgICAgICAgMCA1NDogICBEb21pbmFuY2UgRnJvbnRpZXI6
IAorICAgICAgICAgICAgIDAgNTQ6ICAgSXRlcmF0ZWQgRG9taW5hbmNlIEZyb250aWVyOiAKKyAg
ICAgICAgICAgICAwIDU0OiAgIEJhY2t3YXJkcyBkb21pbmF0ZXMgYnk6ICNyb290ICMwCisgICAg
ICAgICAgICAgMCA1NDogICBCYWNrd2FyZHMgZG9taW5hdGVzOiAjMAorICAgICAgICAgICAgIDAg
NTQ6ICAgQ29udHJvbCBlcXVpdmFsZW50IHRvOiAjMAorICAgICAgICAgICAgIDAgNTQ6ICAgU3Rh
dGVzOiBTdHJ1Y3R1cmVzQXJlV2F0Y2hlZAorICAgICAgICAgICAgIDAgNTQ6ICAgTGl2ZToKKyAg
ICAgICAgICAgICAwIDU0OiAgIFZhbHVlcyAKKyAgICAgICAgICAwICAwIDU0OiAgIDUzOjwgMTot
PiBKU0NvbnN0YW50KEpTfFVzZUFzT3RoZXIsIE90aGVyLCBOdWxsLCBiYyMwLCBFeGl0VmFsaWQp
CisgICAgICAgICAgMSAgMCA1NDogICA2NDo8IDI6LT4gSlNDb25zdGFudChKU3xVc2VBc090aGVy
LCBOb25Cb29sSW50MzIsIEludDMyOiAxMCwgYmMjMCwgRXhpdFZhbGlkKQorICAgICAgICAgIDIg
IDAgNTQ6ICAgIDM6PCA1Oi0+IEpTQ29uc3RhbnQoSlN8UHVyZUludCwgT3RoZXIsIFVuZGVmaW5l
ZCwgYmMjMCwgRXhpdFZhbGlkKQorICAgICAgICAgIDMgIDAgNTQ6ICAgMzI6PCAxOi0+IEpTQ29u
c3RhbnQoSlN8VXNlQXNPdGhlciwgQm9vbCwgRmFsc2UsIGJjIzAsIEV4aXRWYWxpZCkKKyAgICAg
ICAgICA0ICAwIDU0OiAgIDE5OjwgMjotPiBKU0NvbnN0YW50KEpTfFVzZUFzT3RoZXIsIE90aGVy
T2JqLCBXZWFrOk9iamVjdDogMHgxMDc5ZDQwMDAgd2l0aCBidXR0ZXJmbHkgMHgwIChTdHJ1Y3R1
cmUgJUNWOkpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50KSwgU3RydWN0dXJlSUQ6IDMxNDIzLCBi
YyMwLCBFeGl0VmFsaWQpCisKKyAgICAgICAgVGhlIG51bWJlcnMgaW4gdGhlIGxlZnQgbWFyZ2lu
IGJlZm9yZSB0aGUgJzonIGFyZSBub2RlIG51bWJlciAoaW5kZXggb2Ygbm9kZSBpbgorICAgICAg
ICB0aGUgYmxvY2spLCBibG9jayBudW1iZXIsIGFuZCBwaGFzZSBudW1iZXIgcmVzcGVjdGl2ZWx5
LiAgTm93LCB3ZSBjYW4gc2Nyb2xsIHRocnUKKyAgICAgICAgdGhlIGR1bXBzIHF1aWNrbHkgYW5k
IHRlbGwgYXQgYSBnbGFuY2Ugd2hlbiB3ZSd2ZSBzY3JvbGxlZCBwYXNzZWQgdGhlIGVuZCBvZiBh
CisgICAgICAgIHBoYXNlLCBvciBibG9jay4gIFRoZXNlIHNldHMgb2YgbnVtYmVycyBjYW4gYWxz
byBzZXJ2ZSBhcyBhIHBvc2l0aW9uYWwgbWFya2VyIHRoYXQKKyAgICAgICAgd2UgY2FuIHNlYXJj
aCBmb3IgdG8gcmV0dXJuIHRvIGEgbm9kZSBpbiB0aGUgZHVtcCBhZnRlciBzY3JvbGxpbmcgYXdh
eS4KKworICAgICAgICBDdXJyZW50bHksIHRoZXNlIG51bWJlcnMgYXJlIG9ubHkgYWRkZWQgdG8g
dGhlIERGRyBwYXJ0LiAgVGhlIEZUTCAoZnJvbSBsb3dlcmluZworICAgICAgICB0byBCMyBvbndh
cmRzKSBkb2VzIG5vdCBoYXZlIHRoaXMgZmVhdHVyZSB5ZXQuCisKKyAgICAgICAgKiBkZmcvREZH
RGVzaXJlZFdhdGNocG9pbnRzLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVkV2F0Y2hw
b2ludHM6OmR1bXBJbkNvbnRleHQgY29uc3QpOgorICAgICAgICAqIGRmZy9ERkdEZXNpcmVkV2F0
Y2hwb2ludHMuaDoKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkdyYXBoOjpkdW1wQ29kZU9yaWdpbik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1
bXApOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wQmxvY2tIZWFkZXIpOgorICAgICAg
ICAoSlNDOjpERkc6OlByZWZpeDo6ZHVtcCBjb25zdCk6CisgICAgICAgICogZGZnL0RGR0dyYXBo
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZml4OjpQcmVmaXgpOgorICAgICAgICAoSlNDOjpE
Rkc6OlByZWZpeDo6Y2xlYXJCbG9ja0luZGV4KToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVmaXg6
OmNsZWFyTm9kZUluZGV4KToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVmaXg6OmVuYWJsZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6UHJlZml4OjpkaXNhYmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpH
cmFwaDo6cHJlZml4KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6aW5jUGhhc2UpOgorICAg
ICAgICAqIGRmZy9ERkdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UGhhc2U6OmJlZ2lu
UGhhc2UpOgorICAgICAgICAqIGRmZy9ERkdQaGFzZS5oOgorICAgICAgICAoSlNDOjpERkc6OnJ1
bkFuZExvZyk6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlBsYW46OmNvbXBpbGVJblRocmVhZEltcGwpOgorICAgICAgICAqIGRmZy9ERkdWYWx1ZVJlcFJl
ZHVjdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVJlcFJlZHVjdGlvblBo
YXNlOjpjb252ZXJ0VmFsdWVSZXBzVG9Eb3VibGUpOgorCiAyMDE5LTA4LTEzICBNaWNoYWVsIFNh
Ym9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIyNDg1MzMp
OiBKU0MgQ29tbWFuZCAtIE5lZWQgdG8gaW5pdGlhbGl6ZU1haW5UaHJlYWQoKSBiZWZvcmUgcHJv
Y2Vzc2luZyBjb25maWcgZmlsZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
ZXNpcmVkV2F0Y2hwb2ludHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcAkocmV2aXNpb24gMjQ4NjI5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQXJyYXlCdWZmZXJOZXV0ZXJp
bmdXYXRjaHBvaW50U2V0LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiREZH
R3JhcGguaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKQEAgLTEzOSwxMyArMTQwLDE1IEBAIGJvb2wgRGVzaXJlZFdhdGNocG9pbnRz
OjphcmVTdGlsbFZhbGlkKCkKIAogdm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmR1bXBJbkNvbnRl
eHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0CiB7Ci0gICAg
b3V0LnByaW50KCJEZXNpcmVkIHdhdGNocG9pbnRzOlxuIik7Ci0gICAgb3V0LnByaW50KCIgICAg
V2F0Y2hwb2ludCBzZXRzOiAiLCBpbkNvbnRleHQobV9zZXRzLCBjb250ZXh0KSwgIlxuIik7Ci0g
ICAgb3V0LnByaW50KCIgICAgSW5saW5lIHdhdGNocG9pbnQgc2V0czogIiwgaW5Db250ZXh0KG1f
aW5saW5lU2V0cywgY29udGV4dCksICJcbiIpOwotICAgIG91dC5wcmludCgiICAgIFN5bWJvbFRh
YmxlczogIiwgaW5Db250ZXh0KG1fc3ltYm9sVGFibGVzLCBjb250ZXh0KSwgIlxuIik7Ci0gICAg
b3V0LnByaW50KCIgICAgRnVuY3Rpb25FeGVjdXRhYmxlczogIiwgaW5Db250ZXh0KG1fZnVuY3Rp
b25FeGVjdXRhYmxlcywgY29udGV4dCksICJcbiIpOwotICAgIG91dC5wcmludCgiICAgIEJ1ZmZl
ciB2aWV3czogIiwgaW5Db250ZXh0KG1fYnVmZmVyVmlld3MsIGNvbnRleHQpLCAiXG4iKTsKLSAg
ICBvdXQucHJpbnQoIiAgICBPYmplY3QgcHJvcGVydHkgY29uZGl0aW9uczogIiwgaW5Db250ZXh0
KG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLCBjb250ZXh0KSwgIlxuIik7CisgICAgUHJlZml4IG5v
UHJlZml4KFByZWZpeDo6Tm9IZWFkZXIpOworICAgIFByZWZpeCYgcHJlZml4ID0gY29udGV4dCAm
JiBjb250ZXh0LT5ncmFwaCA/IGNvbnRleHQtPmdyYXBoLT5wcmVmaXgoKSA6IG5vUHJlZml4Owor
ICAgIG91dC5wcmludChwcmVmaXgsICJEZXNpcmVkIHdhdGNocG9pbnRzOlxuIik7CisgICAgb3V0
LnByaW50KHByZWZpeCwgIiAgICBXYXRjaHBvaW50IHNldHM6ICIsIGluQ29udGV4dChtX3NldHMs
IGNvbnRleHQpLCAiXG4iKTsKKyAgICBvdXQucHJpbnQocHJlZml4LCAiICAgIElubGluZSB3YXRj
aHBvaW50IHNldHM6ICIsIGluQ29udGV4dChtX2lubGluZVNldHMsIGNvbnRleHQpLCAiXG4iKTsK
KyAgICBvdXQucHJpbnQocHJlZml4LCAiICAgIFN5bWJvbFRhYmxlczogIiwgaW5Db250ZXh0KG1f
c3ltYm9sVGFibGVzLCBjb250ZXh0KSwgIlxuIik7CisgICAgb3V0LnByaW50KHByZWZpeCwgIiAg
ICBGdW5jdGlvbkV4ZWN1dGFibGVzOiAiLCBpbkNvbnRleHQobV9mdW5jdGlvbkV4ZWN1dGFibGVz
LCBjb250ZXh0KSwgIlxuIik7CisgICAgb3V0LnByaW50KHByZWZpeCwgIiAgICBCdWZmZXIgdmll
d3M6ICIsIGluQ29udGV4dChtX2J1ZmZlclZpZXdzLCBjb250ZXh0KSwgIlxuIik7CisgICAgb3V0
LnByaW50KHByZWZpeCwgIiAgICBPYmplY3QgcHJvcGVydHkgY29uZGl0aW9uczogIiwgaW5Db250
ZXh0KG1fYWRhcHRpdmVTdHJ1Y3R1cmVTZXRzLCBjb250ZXh0KSwgIlxuIik7CiB9CiAKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RGVzaXJlZFdhdGNocG9pbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaAkocmV2aXNpb24gMjQ4NjI5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTM5LDYgKzM5LDcgQEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAog
Y2xhc3MgR3JhcGg7CitzdHJ1Y3QgUHJlZml4OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogc3Ry
dWN0IFNldFBvaW50ZXJBZGFwdG9yIHsKQEAgLTIwNiw3ICsyMDcsNiBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBtX2FkYXB0aXZlU3RydWN0dXJlU2V0cy5pc1dhdGNoZWQoa2V5KTsKICAgICB9
CiAgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25z
dDsKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICAKIHByaXZhdGU6CiAg
ICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxXYXRjaHBvaW50U2V0Kj4gbV9zZXRzOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDI0ODYyOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMTA5LDggKzEwOSwxMSBAQCBzdGF0aWMgdm9pZCBwcmludFdoaXRlU3BhY2UoUHJpbnRT
dHJlYW0mCiAgICAgICAgIG91dC5wcmludCgiICIpOwogfQogCi1ib29sIEdyYXBoOjpkdW1wQ29k
ZU9yaWdpbihQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXgsIE5vZGUqJiBwcmV2
aW91c05vZGVSZWYsIE5vZGUqIGN1cnJlbnROb2RlLCBEdW1wQ29udGV4dCogY29udGV4dCkKK2Jv
b2wgR3JhcGg6OmR1bXBDb2RlT3JpZ2luKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIqIHBy
ZWZpeFN0ciwgTm9kZSomIHByZXZpb3VzTm9kZVJlZiwgTm9kZSogY3VycmVudE5vZGUsIER1bXBD
b250ZXh0KiBjb250ZXh0KQogeworICAgIFByZWZpeCBteVByZWZpeChwcmVmaXhTdHIpOworICAg
IFByZWZpeCYgcHJlZml4ID0gcHJlZml4U3RyID8gbXlQcmVmaXggOiBtX3ByZWZpeDsKKwogICAg
IGlmICghY3VycmVudE5vZGUtPm9yaWdpbi5zZW1hbnRpYykKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIApAQCAtMTY1LDggKzE2OCwxMSBAQCB2b2lkIEdyYXBoOjpwcmludE5vZGVXaGl0ZVNw
YWNlKFByaW50U3RyCiAgICAgcHJpbnRXaGl0ZVNwYWNlKG91dCwgYW1vdW50T2ZOb2RlV2hpdGVT
cGFjZShub2RlKSk7CiB9CiAKLXZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QgY2hhciogcHJlZml4LCBOb2RlKiBub2RlLCBEdW1wQ29udGV4dCogY29udGV4dCkKK3ZvaWQg
R3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogcHJlZml4U3RyLCBOb2Rl
KiBub2RlLCBEdW1wQ29udGV4dCogY29udGV4dCkKIHsKKyAgICBQcmVmaXggbXlQcmVmaXgocHJl
Zml4U3RyKTsKKyAgICBQcmVmaXgmIHByZWZpeCA9IHByZWZpeFN0ciA/IG15UHJlZml4IDogbV9w
cmVmaXg7CisKICAgICBOb2RlVHlwZSBvcCA9IG5vZGUtPm9wKCk7CiAKICAgICB1bnNpZ25lZCBy
ZWZDb3VudCA9IG5vZGUtPnJlZkNvdW50KCk7CkBAIC00MjMsOCArNDI5LDExIEBAIGJvb2wgR3Jh
cGg6OnRlcm1pbmFsc0FyZVZhbGlkKCkKIHN0YXRpYyBCYXNpY0Jsb2NrKiB1bmJveExvb3BOb2Rl
KGNvbnN0IENQU0NGRzo6Tm9kZSYgbm9kZSkgeyByZXR1cm4gbm9kZS5ub2RlKCk7IH0KIHN0YXRp
YyBCYXNpY0Jsb2NrKiB1bmJveExvb3BOb2RlKEJhc2ljQmxvY2sqIGJsb2NrKSB7IHJldHVybiBi
bG9jazsgfQogCi12b2lkIEdyYXBoOjpkdW1wQmxvY2tIZWFkZXIoUHJpbnRTdHJlYW0mIG91dCwg
Y29uc3QgY2hhciogcHJlZml4LCBCYXNpY0Jsb2NrKiBibG9jaywgUGhpTm9kZUR1bXBNb2RlIHBo
aU5vZGVEdW1wTW9kZSwgRHVtcENvbnRleHQqIGNvbnRleHQpCit2b2lkIEdyYXBoOjpkdW1wQmxv
Y2tIZWFkZXIoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogcHJlZml4U3RyLCBCYXNpY0Js
b2NrKiBibG9jaywgUGhpTm9kZUR1bXBNb2RlIHBoaU5vZGVEdW1wTW9kZSwgRHVtcENvbnRleHQq
IGNvbnRleHQpCiB7CisgICAgUHJlZml4IG15UHJlZml4KHByZWZpeFN0cik7CisgICAgUHJlZml4
JiBwcmVmaXggPSBwcmVmaXhTdHIgPyBteVByZWZpeCA6IG1fcHJlZml4OworCiAgICAgb3V0LnBy
aW50KHByZWZpeCwgIkJsb2NrICIsICpibG9jaywgIiAoIiwgaW5Db250ZXh0KGJsb2NrLT5hdCgw
KS0+b3JpZ2luLnNlbWFudGljLCBjb250ZXh0KSwgIik6IiwKICAgICAgICAgYmxvY2stPmlzUmVh
Y2hhYmxlID8gIiIgOiAiIChza2lwcGVkKSIsIGJsb2NrLT5pc09TUlRhcmdldCA/ICIgKE9TUiB0
YXJnZXQpIiA6ICIiLCBibG9jay0+aXNDYXRjaEVudHJ5cG9pbnQgPyAiIChDYXRjaCBFbnRyeXBv
aW50KSIgOiAiIiwgIlxuIik7CiAgICAgaWYgKGJsb2NrLT5leGVjdXRpb25Db3VudCA9PSBibG9j
ay0+ZXhlY3V0aW9uQ291bnQpCkBAIC01MTksMjEgKzUyOCwyMiBAQCB2b2lkIEdyYXBoOjpkdW1w
QmxvY2tIZWFkZXIoUHJpbnRTdHJlYW0mCiAKIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpCiB7CisgICAgUHJlZml4JiBwcmVmaXggPSBtX3By
ZWZpeDsKICAgICBEdW1wQ29udGV4dCBteUNvbnRleHQ7CiAgICAgbXlDb250ZXh0LmdyYXBoID0g
dGhpczsKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIGNvbnRleHQgPSAmbXlDb250ZXh0Owog
ICAgIAogICAgIG91dC5wcmludCgiXG4iKTsKLSAgICBvdXQucHJpbnQoIkRGRyBmb3IgIiwgQ29k
ZUJsb2NrV2l0aEpJVFR5cGUobV9jb2RlQmxvY2ssIEpJVFR5cGU6OkRGR0pJVCksICI6XG4iKTsK
LSAgICBvdXQucHJpbnQoIiAgRml4cG9pbnQgc3RhdGU6ICIsIG1fZml4cG9pbnRTdGF0ZSwgIjsg
Rm9ybTogIiwgbV9mb3JtLCAiOyBVbmlmaWNhdGlvbiBzdGF0ZTogIiwgbV91bmlmaWNhdGlvblN0
YXRlLCAiOyBSZWYgY291bnQgc3RhdGU6ICIsIG1fcmVmQ291bnRTdGF0ZSwgIlxuIik7CisgICAg
b3V0LnByaW50KHByZWZpeCwgIkRGRyBmb3IgIiwgQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9jb2Rl
QmxvY2ssIEpJVFR5cGU6OkRGR0pJVCksICI6XG4iKTsKKyAgICBvdXQucHJpbnQocHJlZml4LCAi
ICBGaXhwb2ludCBzdGF0ZTogIiwgbV9maXhwb2ludFN0YXRlLCAiOyBGb3JtOiAiLCBtX2Zvcm0s
ICI7IFVuaWZpY2F0aW9uIHN0YXRlOiAiLCBtX3VuaWZpY2F0aW9uU3RhdGUsICI7IFJlZiBjb3Vu
dCBzdGF0ZTogIiwgbV9yZWZDb3VudFN0YXRlLCAiXG4iKTsKICAgICBpZiAobV9mb3JtID09IFNT
QSkgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGVudHJ5cG9pbnRJbmRleCA9IDA7IGVudHJ5cG9p
bnRJbmRleCA8IG1fYXJndW1lbnRGb3JtYXRzLnNpemUoKTsgKytlbnRyeXBvaW50SW5kZXgpCi0g
ICAgICAgICAgICBvdXQucHJpbnQoIiAgQXJndW1lbnQgZm9ybWF0cyBmb3IgZW50cnlwb2ludCBp
bmRleDogIiwgZW50cnlwb2ludEluZGV4LCAiIDogIiwgbGlzdER1bXAobV9hcmd1bWVudEZvcm1h
dHNbZW50cnlwb2ludEluZGV4XSksICJcbiIpOworICAgICAgICAgICAgb3V0LnByaW50KHByZWZp
eCwgIiAgQXJndW1lbnQgZm9ybWF0cyBmb3IgZW50cnlwb2ludCBpbmRleDogIiwgZW50cnlwb2lu
dEluZGV4LCAiIDogIiwgbGlzdER1bXAobV9hcmd1bWVudEZvcm1hdHNbZW50cnlwb2ludEluZGV4
XSksICJcbiIpOwogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgZm9yIChhdXRvIHBhaXIgOiBt
X3Jvb3RUb0FyZ3VtZW50cykKLSAgICAgICAgICAgIG91dC5wcmludCgiICBBcmd1bWVudHMgZm9y
IGJsb2NrIyIsIHBhaXIua2V5LT5pbmRleCwgIjogIiwgbGlzdER1bXAocGFpci52YWx1ZSksICJc
biIpOworICAgICAgICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgQXJndW1lbnRzIGZvciBibG9j
ayMiLCBwYWlyLmtleS0+aW5kZXgsICI6ICIsIGxpc3REdW1wKHBhaXIudmFsdWUpLCAiXG4iKTsK
ICAgICB9CiAgICAgb3V0LnByaW50KCJcbiIpOwogICAgIApAQCAtNTQyLDggKzU1Miw5IEBAIHZv
aWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgRHVtcEMKICAgICAgICAgQmFzaWNCbG9j
ayogYmxvY2sgPSBtX2Jsb2Nrc1tiXS5nZXQoKTsKICAgICAgICAgaWYgKCFibG9jaykKICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICBkdW1wQmxvY2tIZWFkZXIob3V0LCAiIiwgYmxvY2ss
IER1bXBBbGxQaGlzLCBjb250ZXh0KTsKLSAgICAgICAgb3V0LnByaW50KCIgIFN0YXRlczogIiwg
YmxvY2stPmNmYVN0cnVjdHVyZUNsb2JiZXJTdGF0ZUF0SGVhZCk7CisgICAgICAgIHByZWZpeC5i
bG9ja0luZGV4ID0gYmxvY2stPmluZGV4OworICAgICAgICBkdW1wQmxvY2tIZWFkZXIob3V0LCBQ
cmVmaXg6Om5vU3RyaW5nLCBibG9jaywgRHVtcEFsbFBoaXMsIGNvbnRleHQpOworICAgICAgICBv
dXQucHJpbnQocHJlZml4LCAiICBTdGF0ZXM6ICIsIGJsb2NrLT5jZmFTdHJ1Y3R1cmVDbG9iYmVy
U3RhdGVBdEhlYWQpOwogICAgICAgICBpZiAoIWJsb2NrLT5jZmFIYXNWaXNpdGVkKQogICAgICAg
ICAgICAgb3V0LnByaW50KCIsIEN1cnJlbnRseUNGQVVucmVhY2hhYmxlIik7CiAgICAgICAgIGlm
ICghYmxvY2stPmludGVyc2VjdGlvbk9mQ0ZBSGFzVmlzaXRlZCkKQEAgLTU1Miw3MiArNTYzLDc4
IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgRHVtcEMKICAgICAgICAgc3dp
dGNoIChtX2Zvcm0pIHsKICAgICAgICAgY2FzZSBMb2FkU3RvcmU6CiAgICAgICAgIGNhc2UgVGhy
ZWFkZWRDUFM6IHsKLSAgICAgICAgICAgIG91dC5wcmludCgiICBWYXJzIEJlZm9yZTogIik7Cisg
ICAgICAgICAgICBvdXQucHJpbnQocHJlZml4LCAiICBWYXJzIEJlZm9yZTogIik7CiAgICAgICAg
ICAgICBpZiAoYmxvY2stPmNmYUhhc1Zpc2l0ZWQpCiAgICAgICAgICAgICAgICAgb3V0LnByaW50
KGluQ29udGV4dChibG9jay0+dmFsdWVzQXRIZWFkLCBjb250ZXh0KSk7CiAgICAgICAgICAgICBl
bHNlCiAgICAgICAgICAgICAgICAgb3V0LnByaW50KCI8ZW1wdHk+Iik7CiAgICAgICAgICAgICBv
dXQucHJpbnQoIlxuIik7Ci0gICAgICAgICAgICBvdXQucHJpbnQoIiAgSW50ZXJzZWN0ZWQgVmFy
cyBCZWZvcmU6ICIpOworICAgICAgICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgSW50ZXJzZWN0
ZWQgVmFycyBCZWZvcmU6ICIpOwogICAgICAgICAgICAgaWYgKGJsb2NrLT5pbnRlcnNlY3Rpb25P
ZkNGQUhhc1Zpc2l0ZWQpCiAgICAgICAgICAgICAgICAgb3V0LnByaW50KGluQ29udGV4dChibG9j
ay0+aW50ZXJzZWN0aW9uT2ZQYXN0VmFsdWVzQXRIZWFkLCBjb250ZXh0KSk7CiAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgICAgb3V0LnByaW50KCI8ZW1wdHk+Iik7CiAgICAgICAgICAg
ICBvdXQucHJpbnQoIlxuIik7Ci0gICAgICAgICAgICBvdXQucHJpbnQoIiAgVmFyIExpbmtzOiAi
LCBibG9jay0+dmFyaWFibGVzQXRIZWFkLCAiXG4iKTsKKyAgICAgICAgICAgIG91dC5wcmludChw
cmVmaXgsICIgIFZhciBMaW5rczogIiwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZCwgIlxuIik7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
U1NBOiB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChibG9jay0+c3NhKTsKICAgICAgICAg
ICAgIGlmIChkdW1wT1NSQXZhaWxhYmlsaXR5RGF0YSkKLSAgICAgICAgICAgICAgICBvdXQucHJp
bnQoIiAgQXZhaWxhYmlsaXR5OiAiLCBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQsICJc
biIpOwotICAgICAgICAgICAgb3V0LnByaW50KCIgIExpdmU6ICIsIG5vZGVMaXN0RHVtcChibG9j
ay0+c3NhLT5saXZlQXRIZWFkKSwgIlxuIik7Ci0gICAgICAgICAgICBvdXQucHJpbnQoIiAgVmFs
dWVzOiAiLCBub2RlVmFsdWVQYWlyTGlzdER1bXAoYmxvY2stPnNzYS0+dmFsdWVzQXRIZWFkLCBj
b250ZXh0KSwgIlxuIik7CisgICAgICAgICAgICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgQXZh
aWxhYmlsaXR5OiAiLCBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQsICJcbiIpOworICAg
ICAgICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgTGl2ZTogIiwgbm9kZUxpc3REdW1wKGJsb2Nr
LT5zc2EtPmxpdmVBdEhlYWQpLCAiXG4iKTsKKyAgICAgICAgICAgIG91dC5wcmludChwcmVmaXgs
ICIgIFZhbHVlczogIiwgbm9kZVZhbHVlUGFpckxpc3REdW1wKGJsb2NrLT5zc2EtPnZhbHVlc0F0
SGVhZCwgY29udGV4dCksICJcbiIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0gfQog
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5zaXplKCk7ICsraSkgewotICAg
ICAgICAgICAgZHVtcENvZGVPcmlnaW4ob3V0LCAiIiwgbGFzdE5vZGUsIGJsb2NrLT5hdChpKSwg
Y29udGV4dCk7Ci0gICAgICAgICAgICBkdW1wKG91dCwgIiIsIGJsb2NrLT5hdChpKSwgY29udGV4
dCk7CisgICAgICAgICAgICBwcmVmaXguY2xlYXJOb2RlSW5kZXgoKTsKKyAgICAgICAgICAgIGR1
bXBDb2RlT3JpZ2luKG91dCwgUHJlZml4Ojpub1N0cmluZywgbGFzdE5vZGUsIGJsb2NrLT5hdChp
KSwgY29udGV4dCk7CisgICAgICAgICAgICBwcmVmaXgubm9kZUluZGV4ID0gaTsKKyAgICAgICAg
ICAgIGR1bXAob3V0LCBQcmVmaXg6Om5vU3RyaW5nLCBibG9jay0+YXQoaSksIGNvbnRleHQpOwog
ICAgICAgICB9Ci0gICAgICAgIG91dC5wcmludCgiICBTdGF0ZXM6ICIsIGJsb2NrLT5jZmFCcmFu
Y2hEaXJlY3Rpb24sICIsICIsIGJsb2NrLT5jZmFTdHJ1Y3R1cmVDbG9iYmVyU3RhdGVBdFRhaWwp
OworICAgICAgICBwcmVmaXguY2xlYXJOb2RlSW5kZXgoKTsKKyAgICAgICAgb3V0LnByaW50KHBy
ZWZpeCwgIiAgU3RhdGVzOiAiLCBibG9jay0+Y2ZhQnJhbmNoRGlyZWN0aW9uLCAiLCAiLCBibG9j
ay0+Y2ZhU3RydWN0dXJlQ2xvYmJlclN0YXRlQXRUYWlsKTsKICAgICAgICAgaWYgKCFibG9jay0+
Y2ZhRGlkRmluaXNoKQogICAgICAgICAgICAgb3V0LnByaW50KCIsIENGQUludmFsaWRhdGVkIik7
CiAgICAgICAgIG91dC5wcmludCgiXG4iKTsKICAgICAgICAgc3dpdGNoIChtX2Zvcm0pIHsKICAg
ICAgICAgY2FzZSBMb2FkU3RvcmU6CiAgICAgICAgIGNhc2UgVGhyZWFkZWRDUFM6IHsKLSAgICAg
ICAgICAgIG91dC5wcmludCgiICBWYXJzIEFmdGVyOiAiKTsKKyAgICAgICAgICAgIG91dC5wcmlu
dChwcmVmaXgsICIgIFZhcnMgQWZ0ZXI6ICIpOwogICAgICAgICAgICAgaWYgKGJsb2NrLT5jZmFI
YXNWaXNpdGVkKQogICAgICAgICAgICAgICAgIG91dC5wcmludChpbkNvbnRleHQoYmxvY2stPnZh
bHVlc0F0VGFpbCwgY29udGV4dCkpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
IG91dC5wcmludCgiPGVtcHR5PiIpOwogICAgICAgICAgICAgb3V0LnByaW50KCJcbiIpOwotICAg
ICAgICAgICAgb3V0LnByaW50KCIgIFZhciBMaW5rczogIiwgYmxvY2stPnZhcmlhYmxlc0F0VGFp
bCwgIlxuIik7CisgICAgICAgICAgICBvdXQucHJpbnQocHJlZml4LCAiICBWYXIgTGlua3M6ICIs
IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwsICJcbiIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFNTQTogewogICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoYmxvY2stPnNzYSk7CiAgICAgICAgICAgICBpZiAoZHVtcE9TUkF2YWlsYWJp
bGl0eURhdGEpCi0gICAgICAgICAgICAgICAgb3V0LnByaW50KCIgIEF2YWlsYWJpbGl0eTogIiwg
YmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRUYWlsLCAiXG4iKTsKLSAgICAgICAgICAgIG91dC5w
cmludCgiICBMaXZlOiAiLCBub2RlTGlzdER1bXAoYmxvY2stPnNzYS0+bGl2ZUF0VGFpbCksICJc
biIpOwotICAgICAgICAgICAgb3V0LnByaW50KCIgIFZhbHVlczogIiwgbm9kZVZhbHVlUGFpckxp
c3REdW1wKGJsb2NrLT5zc2EtPnZhbHVlc0F0VGFpbCwgY29udGV4dCksICJcbiIpOworICAgICAg
ICAgICAgICAgIG91dC5wcmludChwcmVmaXgsICIgIEF2YWlsYWJpbGl0eTogIiwgYmxvY2stPnNz
YS0+YXZhaWxhYmlsaXR5QXRUYWlsLCAiXG4iKTsKKyAgICAgICAgICAgIG91dC5wcmludChwcmVm
aXgsICIgIExpdmU6ICIsIG5vZGVMaXN0RHVtcChibG9jay0+c3NhLT5saXZlQXRUYWlsKSwgIlxu
Iik7CisgICAgICAgICAgICBvdXQucHJpbnQocHJlZml4LCAiICBWYWx1ZXM6ICIsIG5vZGVWYWx1
ZVBhaXJMaXN0RHVtcChibG9jay0+c3NhLT52YWx1ZXNBdFRhaWwsIGNvbnRleHQpLCAiXG4iKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9IH0KICAgICAgICAgb3V0LnByaW50KCJcbiIp
OwogICAgIH0KLSAgICAKLSAgICBvdXQucHJpbnQoIkdDIFZhbHVlczpcbiIpOworICAgIHByZWZp
eC5jbGVhckJsb2NrSW5kZXgoKTsKKworICAgIG91dC5wcmludChwcmVmaXgsICJHQyBWYWx1ZXM6
XG4iKTsKICAgICBmb3IgKEZyb3plblZhbHVlKiB2YWx1ZSA6IG1fZnJvemVuVmFsdWVzKSB7CiAg
ICAgICAgIGlmICh2YWx1ZS0+cG9pbnRzVG9IZWFwKCkpCi0gICAgICAgICAgICBvdXQucHJpbnQo
IiAgICAiLCBpbkNvbnRleHQoKnZhbHVlLCAmbXlDb250ZXh0KSwgIlxuIik7CisgICAgICAgICAg
ICBvdXQucHJpbnQocHJlZml4LCAiICAgICIsIGluQ29udGV4dCgqdmFsdWUsICZteUNvbnRleHQp
LCAiXG4iKTsKICAgICB9CiAKICAgICBvdXQucHJpbnQoaW5Db250ZXh0KHdhdGNocG9pbnRzKCks
ICZteUNvbnRleHQpKTsKICAgICAKICAgICBpZiAoIW15Q29udGV4dC5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgbXlDb250ZXh0LmR1bXAob3V0KTsKKyAgICAgICAgU3RyaW5nUHJpbnRTdHJlYW0gcHJl
Zml4U3RyOworICAgICAgICBwcmVmaXhTdHIucHJpbnQocHJlZml4KTsKKyAgICAgICAgbXlDb250
ZXh0LmR1bXAob3V0LCBwcmVmaXhTdHIudG9DU3RyaW5nKCkuZGF0YSgpKTsKICAgICAgICAgb3V0
LnByaW50KCJcbiIpOwogICAgIH0KIH0KQEAgLTE3ODcsNiArMTgwNCwzMSBAQCB2b2lkIEdyYXBo
OjpjbGVhckNQU0NGR0RhdGEoKQogICAgIG1fY3BzQ0ZHID0gbnVsbHB0cjsKIH0KIAordm9pZCBQ
cmVmaXg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoIW1fZW5hYmxl
ZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFub0hlYWRlcikgeworICAgICAgICBpZiAo
bm9kZUluZGV4ID49IDApCisgICAgICAgICAgICBvdXQucHJpbnRmKCIlM2QgIiwgbm9kZUluZGV4
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3V0LnByaW50ZigiICAgICIpOworCisgICAg
ICAgIGlmIChibG9ja0luZGV4ID49IDApCisgICAgICAgICAgICBvdXQucHJpbnRmKCIlMmQgIiwg
YmxvY2tJbmRleCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludGYoIiAgICIp
OworCisgICAgICAgIGlmIChwaGFzZU51bWJlciA+PSAwKQorICAgICAgICAgICAgb3V0LnByaW50
ZigiJTJkOiAiLCBwaGFzZU51bWJlcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5w
cmludGYoIiAgOiAiKTsKKyAgICB9CisgICAgaWYgKHByZWZpeFN0cikKKyAgICAgICAgb3V0LnBy
aW50ZigiJXMiLCBwcmVmaXhTdHIpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAK
ICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmgJKHJldmlzaW9uIDI0ODYyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExOSw2ICsxMTksNDAgQEAgZW51bSBBZGRT
cGVjdWxhdGlvbk1vZGUgewogICAgIFNwZWN1bGF0ZUludDMyCiB9OwogCitzdHJ1Y3QgUHJlZml4
IHsKKyAgICBlbnVtIE5vSGVhZGVyVGFnIHsgTm9IZWFkZXIgfTsKKworICAgIFByZWZpeCgpIHsg
fQorCisgICAgUHJlZml4KGNvbnN0IGNoYXIqIHByZWZpeFN0ciwgTm9IZWFkZXJUYWcgdGFnID0g
Tm9IZWFkZXIpCisgICAgICAgIDogcHJlZml4U3RyKHByZWZpeFN0cikKKyAgICAgICAgLCBub0hl
YWRlcih0YWcgPT0gTm9IZWFkZXIpCisgICAgeyB9CisKKyAgICBQcmVmaXgoTm9IZWFkZXJUYWcp
CisgICAgICAgIDogbm9IZWFkZXIodHJ1ZSkKKyAgICB7IH0KKworICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdDsKKworICAgIHZvaWQgY2xlYXJCbG9ja0luZGV4KCkgeyBibG9j
a0luZGV4ID0gLTE7IH0KKyAgICB2b2lkIGNsZWFyTm9kZUluZGV4KCkgeyBub2RlSW5kZXggPSAt
MTsgfQorCisgICAgdm9pZCBlbmFibGUoKSB7IG1fZW5hYmxlZCA9IHRydWU7IH0KKyAgICB2b2lk
IGRpc2FibGUoKSB7IG1fZW5hYmxlZCA9IGZhbHNlOyB9CisKKyAgICBpbnQzMl90IHBoYXNlTnVt
YmVyIHsgLTEgfTsKKyAgICBpbnQzMl90IGJsb2NrSW5kZXggeyAtMSB9OworICAgIGludDMyX3Qg
bm9kZUluZGV4IHsgLTEgfTsKKyAgICBjb25zdCBjaGFyKiBwcmVmaXhTdHIgeyBudWxscHRyIH07
CisgICAgYm9vbCBub0hlYWRlciB7IGZhbHNlIH07CisKKyAgICBzdGF0aWMgY29uc3RleHByIGNv
bnN0IGNoYXIqIG5vU3RyaW5nID0gbnVsbHB0cjsKKworcHJpdmF0ZToKKyAgICBib29sIG1fZW5h
YmxlZCB7IHRydWUgfTsKK307CisKIC8vCiAvLyA9PT0gR3JhcGggPT09CiAvLwpAQCAtMjIyLDcg
KzI1Niw3IEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBDb2RlQmxvY2sgaXMgb3B0aW9uYWwsIGJ1
dCBtYXkgYWxsb3cgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiB0byBiZSBkdW1wZWQgKGUuZy4gSWRl
bnRpZmllciBuYW1lcykuCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiA9IFdURjo6ZGF0YUZp
bGUoKSwgRHVtcENvbnRleHQqID0gMCk7Ci0gICAgCisKICAgICBib29sIHRlcm1pbmFsc0FyZVZh
bGlkKCk7CiAgICAgCiAgICAgZW51bSBQaGlOb2RlRHVtcE1vZGUgeyBEdW1wTGl2ZVBoaXNPbmx5
LCBEdW1wQWxsUGhpcyB9OwpAQCAtOTY5LDYgKzEwMDMsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgfQogCisgICAgUHJlZml4JiBwcmVmaXgoKSB7IHJldHVybiBtX3By
ZWZpeDsgfQorICAgIHZvaWQgaW5jUGhhc2UoKSB7IG1fcHJlZml4LnBoYXNlTnVtYmVyKys7IH0K
KwogICAgIFZNJiBtX3ZtOwogICAgIFBsYW4mIG1fcGxhbjsKICAgICBDb2RlQmxvY2sqIG1fY29k
ZUJsb2NrOwpAQCAtMTExOSw2ICsxMTU2LDcgQEAgcHJpdmF0ZToKIAogICAgIEIzOjpTcGFyc2VD
b2xsZWN0aW9uPE5vZGU+IG1fbm9kZXM7CiAgICAgU2VnbWVudGVkVmVjdG9yPFJlZ2lzdGVyZWRT
dHJ1Y3R1cmVTZXQsIDE2PiBtX3N0cnVjdHVyZVNldHM7CisgICAgUHJlZml4IG1fcHJlZml4Owog
fTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQaGFzZS5jcHAJKHJldmlzaW9uIDI0ODYyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw4ICs0OSw4IEBAIHZv
aWQgUGhhc2U6OmJlZ2luUGhhc2UoKQogICAgIGlmICghc2hvdWxkRHVtcEdyYXBoQXRFYWNoUGhh
c2UobV9ncmFwaC5tX3BsYW4ubW9kZSgpKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGRh
dGFMb2coIkJlZ2lubmluZyBERkcgcGhhc2UgIiwgbV9uYW1lLCAiLlxuIik7Ci0gICAgZGF0YUxv
ZygiQmVmb3JlICIsIG1fbmFtZSwgIjpcbiIpOworICAgIGRhdGFMb2cobV9ncmFwaC5wcmVmaXgo
KSwgIkJlZ2lubmluZyBERkcgcGhhc2UgIiwgbV9uYW1lLCAiLlxuIik7CisgICAgZGF0YUxvZyht
X2dyYXBoLnByZWZpeCgpLCAiQmVmb3JlICIsIG1fbmFtZSwgIjpcbiIpOwogICAgIG1fZ3JhcGgu
ZHVtcCgpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYXNlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5oCShyZXZp
c2lvbiAyNDg2MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYXNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTUzLDYgKzUzLDggQEAgcHVibGljOgogICAgIAogICAgIC8vIEVhY2gg
cGhhc2UgbXVzdCBoYXZlIGEgcnVuKCkgbWV0aG9kLgogICAgIAorICAgIFByZWZpeCBwcmVmaXg7
CisKIHByb3RlY3RlZDoKICAgICAvLyBUaGluZ3MgeW91IG5lZWQgdG8gaGF2ZSBhIERGRyBjb21w
aWxlciBwaGFzZS4KICAgICBHcmFwaCYgbV9ncmFwaDsKQEAgLTgyLDcgKzg0LDcgQEAgYm9vbCBy
dW5BbmRMb2coUGhhc2VUeXBlJiBwaGFzZSkKICAgICBib29sIHJlc3VsdCA9IHBoYXNlLnJ1bigp
OwogCiAgICAgaWYgKHJlc3VsdCAmJiBsb2dDb21waWxhdGlvbkNoYW5nZXMocGhhc2UuZ3JhcGgo
KS5tX3BsYW4ubW9kZSgpKSkKLSAgICAgICAgZGF0YUxvZ0YoIlBoYXNlICVzIGNoYW5nZWQgdGhl
IElSLlxuIiwgcGhhc2UubmFtZSgpKTsKKyAgICAgICAgZGF0YUxvZ0xuKHBoYXNlLmdyYXBoKCku
cHJlZml4KCksICJQaGFzZSAiLCBwaGFzZS5uYW1lKCksICIgY2hhbmdlZCB0aGUgSVIuXG4iKTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UGxhbi5jcHAJKHJldmlzaW9uIDI0ODYyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2NCw2ICsyNjQsNyBAQCBQbGFuOjpDb21w
aWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAgICAgICBpZiAoc2FmZXBvaW50
UmVzdWx0LmRpZEdldENhbmNlbGxlZCgpKSAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAg
ICByZXR1cm4gQ2FuY2VsUGF0aDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAg
ICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgIGRmZy5pbmNQaGFzZSgpOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKICAgICAgICAgY2hhbmdlZCB8PSBwaGFzZShkZmcpOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0gd2hpbGUgKGZhbHNlKTsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAKQEAgLTQ4MSw2ICs0ODIs
NyBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAgICAg
ICByZXR1cm4gRmFpbFBhdGg7CiAgICAgICAgIH0KIAorICAgICAgICBkZmcuaW5jUGhhc2UoKTsK
ICAgICAgICAgZHVtcEFuZFZlcmlmeUdyYXBoKGRmZywgIkdyYXBoIGp1c3QgYmVmb3JlIEZUTCBs
b3dlcmluZzoiLCBzaG91bGREdW1wRGlzYXNzZW1ibHkobV9tb2RlKSk7CiAKICAgICAgICAgLy8g
Rmxhc2ggYSBzYWZlcG9pbnQgaW4gY2FzZSB0aGUgR0Mgd2FudHMgc29tZSBhY3Rpb24uCkBAIC00
OTEsOSArNDkzLDEwIEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHIK
ICAgICAgICAgaWYgKHNhZmVwb2ludFJlc3VsdC5kaWRHZXRDYW5jZWxsZWQoKSkKICAgICAgICAg
ICAgIHJldHVybiBDYW5jZWxQYXRoOwogCisgICAgICAgIGRmZy5pbmNQaGFzZSgpOwogICAgICAg
ICBGVEw6OlN0YXRlIHN0YXRlKGRmZyk7CiAgICAgICAgIEZUTDo6bG93ZXJERkdUb0IzKHN0YXRl
KTsKLSAgICAgICAgCisKICAgICAgICAgaWYgKFVOTElLRUxZKGNvbXB1dGVDb21waWxlVGltZXMo
KSkpCiAgICAgICAgICAgICBtX3RpbWVCZWZvcmVGVEwgPSBNb25vdG9uaWNUaW1lOjpub3coKTsK
ICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbHVlUmVwUmVk
dWN0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVmFsdWVSZXBSZWR1Y3Rpb25QaGFzZS5jcHAJKHJldmlzaW9uIDI0ODYyOSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsdWVSZXBSZWR1Y3Rpb25QaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE0Myw5ICsxNDMsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oZGVzY3JpcHRpb24p
OwogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICBjYW5kaWRhdGU6ICIpOwotICAgICAg
ICAgICAgICAgICAgICBtX2dyYXBoLmR1bXAoV1RGOjpkYXRhRmlsZSgpLCAiIiwgY2FuZGlkYXRl
KTsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5kdW1wKFdURjo6ZGF0YUZpbGUoKSwgUHJl
Zml4Ojpub1N0cmluZywgY2FuZGlkYXRlKTsKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygi
ICAgcmVhc29uOiAiKTsKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5kdW1wKFdURjo6ZGF0
YUZpbGUoKSwgIiIsIG5vZGUpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmR1bXAoV1RG
OjpkYXRhRmlsZSgpLCBQcmVmaXg6Om5vU3RyaW5nLCBub2RlKTsKICAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZ0xuKCk7CiAgICAgICAgICAgICAgICAgfTsKIAo=
</data>
<flag name="review"
          id="391999"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>