<?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>154425</bug_id>
          
          <creation_ts>2016-02-18 16:46:24 -0800</creation_ts>
          <short_desc>[ES6] Implement Proxy.[[Call]]</short_desc>
          <delta_ts>2016-03-01 04:06:01 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>154853</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sukolsak</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1166253</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-18 16:46:24 -0800</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166282</commentid>
    <comment_count>1</comment_count>
      <attachid>271721</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-18 18:22:30 -0800</bug_when>
    <thetext>Created attachment 271721
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166341</commentid>
    <comment_count>2</comment_count>
      <attachid>271736</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-18 23:02:38 -0800</bug_when>
    <thetext>Created attachment 271736
patch

forgot to update some es6.yaml tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166494</commentid>
    <comment_count>3</comment_count>
      <attachid>271736</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-02-19 12:22:42 -0800</bug_when>
    <thetext>Comment on attachment 271736
patch

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

r=me with fixes.

&gt; Source/JavaScriptCore/runtime/ProxyObject.cpp:71
&gt; +    CallData ignored;
&gt; +    m_isCallable = jsCast&lt;JSObject*&gt;(target)-&gt;methodTable(vm)-&gt;getCallData(jsCast&lt;JSObject*&gt;(target), ignored) != CallTypeNone;
&gt; +
&gt;      m_target.set(vm, this, jsCast&lt;JSObject*&gt;(target));

nit: you could factor out the jsCast of target and make this code a little less verbose and easier to read:

JSObject* targetObj =  jsCast&lt;JSObject*&gt;(target);
m_isCallable = targetObj-&gt;methodTable(vm)-&gt;getCallData(targetObj, ignored) != CallTypeNone;
m_target.set(vm, this, targetObj);

&gt; Source/JavaScriptCore/runtime/ProxyObject.cpp:304
&gt; +    if (handlerValue.isNull())
&gt; +        return throwVMTypeError(exec, ASCIILiteral(&quot;Proxy &apos;handler&apos; is null. It should be an Object.&quot;));

Do we need this check?  ProxyObject::finishCreation() already guarantees that handlerValue isObject().

&gt; Source/JavaScriptCore/tests/stress/proxy-call.js:103
&gt; +        proxy.call(thisValue, 20, 45, &quot;foo&quot;);

Shouldn&apos;t you assert(called) followed by set called = false here?

&gt; Source/JavaScriptCore/tests/stress/proxy-call.js:135
&gt; +        assert(proxy.call(thisValue, 20, 45, &quot;foo&quot;) === thisValue);

Ditto: assert called and reset it after here?

&gt; Source/JavaScriptCore/tests/stress/proxy-call.js:225
&gt; +        called = false;

Don&apos;t you want to assert(called) before this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166544</commentid>
    <comment_count>4</comment_count>
      <attachid>271736</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-19 14:18:56 -0800</bug_when>
    <thetext>Comment on attachment 271736
patch

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

&gt;&gt; Source/JavaScriptCore/runtime/ProxyObject.cpp:71
&gt;&gt;      m_target.set(vm, this, jsCast&lt;JSObject*&gt;(target));
&gt; 
&gt; nit: you could factor out the jsCast of target and make this code a little less verbose and easier to read:
&gt; 
&gt; JSObject* targetObj =  jsCast&lt;JSObject*&gt;(target);
&gt; m_isCallable = targetObj-&gt;methodTable(vm)-&gt;getCallData(targetObj, ignored) != CallTypeNone;
&gt; m_target.set(vm, this, targetObj);

will do

&gt;&gt; Source/JavaScriptCore/runtime/ProxyObject.cpp:304
&gt;&gt; +        return throwVMTypeError(exec, ASCIILiteral(&quot;Proxy &apos;handler&apos; is null. It should be an Object.&quot;));
&gt; 
&gt; Do we need this check?  ProxyObject::finishCreation() already guarantees that handlerValue isObject().

We really do need this.
It&apos;s in the spec. Right now we don&apos;t implement revocable Proxys, but when we do,
we&apos;ll have a test that covers this.

&gt;&gt; Source/JavaScriptCore/tests/stress/proxy-call.js:103
&gt;&gt; +        proxy.call(thisValue, 20, 45, &quot;foo&quot;);
&gt; 
&gt; Shouldn&apos;t you assert(called) followed by set called = false here?

Yeah. I&apos;ll add

&gt;&gt; Source/JavaScriptCore/tests/stress/proxy-call.js:225
&gt;&gt; +        called = false;
&gt; 
&gt; Don&apos;t you want to assert(called) before this?

yeah</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166559</commentid>
    <comment_count>5</comment_count>
      <attachid>271803</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-19 14:36:42 -0800</bug_when>
    <thetext>Created attachment 271803
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166560</commentid>
    <comment_count>6</comment_count>
      <attachid>271803</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-19 14:37:14 -0800</bug_when>
    <thetext>Comment on attachment 271803
patch for landing

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

&gt; Source/JavaScriptCore/runtime/ProxyObject.h:38
&gt; +    const static unsigned StructureFlags = Base::StructureFlags | OverridesGetOwnPropertySlot | TypeOfShouldCallGetCallData;

this is new

&gt; Source/JavaScriptCore/tests/stress/proxy-call.js:394
&gt; +{
&gt; +    let target = (x) =&gt; x;
&gt; +    let handler = {
&gt; +        apply: function(theTarget, thisArg, argArray) {
&gt; +            return theTarget.apply(thisArg, argArray);
&gt; +        }
&gt; +    };
&gt; +    let proxy = new Proxy(target, handler);
&gt; +    for (let i = 0; i &lt; 500; i++) {
&gt; +        assert(typeof proxy === &quot;function&quot;);
&gt; +    }
&gt; +}
&gt; +
&gt; +{
&gt; +    let target = function() { }
&gt; +    let handler = {
&gt; +        apply: function(theTarget, thisArg, argArray) {
&gt; +            return theTarget.apply(thisArg, argArray);
&gt; +        }
&gt; +    };
&gt; +    let proxy = new Proxy(target, handler);
&gt; +    for (let i = 0; i &lt; 500; i++) {
&gt; +        assert(typeof proxy === &quot;function&quot;);
&gt; +    }
&gt; +}
&gt; +
&gt; +{
&gt; +    let target = Error;
&gt; +    let handler = {
&gt; +        apply: function(theTarget, thisArg, argArray) {
&gt; +            return theTarget.apply(thisArg, argArray);
&gt; +        }
&gt; +    };
&gt; +    let proxy = new Proxy(target, handler);
&gt; +    for (let i = 0; i &lt; 500; i++) {
&gt; +        assert(typeof proxy === &quot;function&quot;);
&gt; +    }
&gt; +}
&gt; +
&gt; +{
&gt; +    let target = (function foo() { }).bind({});
&gt; +    let handler = {
&gt; +        apply: function(theTarget, thisArg, argArray) {
&gt; +            return theTarget.apply(thisArg, argArray);
&gt; +        }
&gt; +    };
&gt; +    let proxy = new Proxy(target, handler);
&gt; +    for (let i = 0; i &lt; 500; i++) {
&gt; +        assert(typeof proxy === &quot;function&quot;);
&gt; +    }
&gt; +}
&gt; +
&gt; +{
&gt; +    let target = function() { };
&gt; +    let handler = {};
&gt; +    let proxy = new Proxy(target, handler);
&gt; +    for (let i = 0; i &lt; 500; i++) {
&gt; +        assert(typeof proxy === &quot;function&quot;);
&gt; +    }
&gt; +}
&gt; +
&gt; +{
&gt; +    let target = {};
&gt; +    let handler = {};
&gt; +    let proxy = new Proxy(target, handler);
&gt; +    for (let i = 0; i &lt; 500; i++) {
&gt; +        assert(typeof proxy === &quot;object&quot;);
&gt; +    }
&gt; +}
&gt; +
&gt; +{
&gt; +    let target = [];
&gt; +    let handler = {};
&gt; +    let proxy = new Proxy(target, handler);
&gt; +    for (let i = 0; i &lt; 500; i++) {
&gt; +        assert(typeof proxy === &quot;object&quot;);
&gt; +    }
&gt; +}
&gt; +
&gt; +{
&gt; +    let target = new String(&quot;foo&quot;);
&gt; +    let handler = {};
&gt; +    let proxy = new Proxy(target, handler);
&gt; +    for (let i = 0; i &lt; 500; i++) {
&gt; +        assert(typeof proxy === &quot;object&quot;);
&gt; +    }
&gt; +}

these are new</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166567</commentid>
    <comment_count>7</comment_count>
      <attachid>271803</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-02-19 14:53:49 -0800</bug_when>
    <thetext>Comment on attachment 271803
patch for landing

LGTM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166571</commentid>
    <comment_count>8</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-19 14:56:57 -0800</bug_when>
    <thetext>landed in:
http://trac.webkit.org/changeset/196836</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271721</attachid>
            <date>2016-02-18 18:22:30 -0800</date>
            <delta_ts>2016-02-18 23:02:38 -0800</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>13632</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk2NzkxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBA
CisyMDE2LTAyLTE4ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFtFUzZdIEltcGxlbWVudCBQcm94eS5bW0NhbGxdXQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU0NDI1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyBhIHN0cmFpZ2h0IGZvcndhcmQg
aW1wbGVtZW50YXRpb24gb2YKKyAgICAgICAgUHJveHkuW1tDYWxsXV0gd2l0aCByZXNwZWN0IHRv
IHNlY3Rpb24gOS41LjEyCisgICAgICAgIG9mIHRoZSBFQ01BU2NyaXB0IHNwZWMuCisgICAgICAg
IGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXByb3h5LW9iamVjdC1pbnRlcm5h
bC1tZXRob2RzLWFuZC1pbnRlcm5hbC1zbG90cy1jYWxsLXRoaXNhcmd1bWVudC1hcmd1bWVudHNs
aXN0CisKKyAgICAgICAgKiBydW50aW1lL1Byb3h5T2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6
UHJveHlPYmplY3Q6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6cGVyZm9ybVByb3h5
R2V0KToKKyAgICAgICAgKEpTQzo6UHJveHlPYmplY3Q6OnBlcmZvcm1JbnRlcm5hbE1ldGhvZEdl
dE93blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6UHJveHlPYmplY3Q6OnBlcmZvcm1IYXNQcm9w
ZXJ0eSk6CisgICAgICAgIChKU0M6OlByb3h5T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
ZGV4KToKKyAgICAgICAgKEpTQzo6cGVyZm9ybVByb3h5Q2FsbCk6CisgICAgICAgIChKU0M6OlBy
b3h5T2JqZWN0OjpnZXRDYWxsRGF0YSk6CisgICAgICAgIChKU0M6OlByb3h5T2JqZWN0Ojp2aXNp
dENoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL1Byb3h5T2JqZWN0Lmg6CisgICAgICAgICog
dGVzdHMvc3RyZXNzL3Byb3h5LWNhbGwuanM6IEFkZGVkLgorICAgICAgICAoYXNzZXJ0KToKKyAg
ICAgICAgKHRocm93Lm5ldy5FcnJvci5sZXQudGFyZ2V0KToKKyAgICAgICAgKHRocm93Lm5ldy5F
cnJvci5sZXQuaGFuZGxlci5hcHBseSk6CisgICAgICAgICh0aHJvdy5uZXcuRXJyb3IpOgorICAg
ICAgICAoYXNzZXJ0LmxldC50YXJnZXQpOgorICAgICAgICAoYXNzZXJ0LmxldC5oYW5kbGVyLmdl
dCBhcHBseSk6CisgICAgICAgIChsZXQudGFyZ2V0KToKKyAgICAgICAgKGxldC5oYW5kbGVyLmFw
cGx5KToKKyAgICAgICAgKGkuY2F0Y2gpOgorICAgICAgICAoYXNzZXJ0LmxldC5oYW5kbGVyLmFw
cGx5KToKKwogMjAxNi0wMi0xOCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAog
ICAgICAgICBJbXBsZW1lbnQgUHJveHkuW1tIYXNQcm9wZXJ0eV1dCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuY3BwCShyZXZpc2lvbiAxOTY3ODkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY1LDYgKzY1LDkgQEAgdm9pZCBQcm94eU9iamVjdDo6ZmluaXNoQ3JlYXRp
b24oVk0mIHZtLAogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgQ2FsbERhdGEgaWdub3Jl
ZDsKKyAgICBtX2lzQ2FsbGFibGUgPSBqc0Nhc3Q8SlNPYmplY3QqPih0YXJnZXQpLT5tZXRob2RU
YWJsZSh2bSktPmdldENhbGxEYXRhKGpzQ2FzdDxKU09iamVjdCo+KHRhcmdldCksIGlnbm9yZWQp
ICE9IENhbGxUeXBlTm9uZTsKKwogICAgIG1fdGFyZ2V0LnNldCh2bSwgdGhpcywganNDYXN0PEpT
T2JqZWN0Kj4odGFyZ2V0KSk7CiAgICAgbV9oYW5kbGVyLnNldCh2bSwgdGhpcywgaGFuZGxlcik7
CiB9CkBAIC0xMDUsOCArMTA4LDYgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIHBlcmZvcm1Qcm94
eUdldChFeAogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKICAgICBhcmd1bWVu
dHMuYXBwZW5kKHRhcmdldCk7CiAgICAgYXJndW1lbnRzLmFwcGVuZChpZGVudGlmaWVyVG9TYWZl
UHVibGljSlNWYWx1ZSh2bSwgSWRlbnRpZmllcjo6ZnJvbVVpZCgmdm0sIHByb3BlcnR5TmFtZS51
aWQoKSkpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXJndW1lbnRzLmFwcGVuZCh0aGlz
T2JqZWN0KTsKICAgICBKU1ZhbHVlIHRyYXBSZXN1bHQgPSBjYWxsKGV4ZWMsIGdldEhhbmRsZXIs
IGNhbGxUeXBlLCBjYWxsRGF0YSwgaGFuZGxlciwgYXJndW1lbnRzKTsKICAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCkBAIC0xNTIsOCArMTUzLDYgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVy
Zm9ybUludGVybmFsTWV0aG9kRwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsK
ICAgICBhcmd1bWVudHMuYXBwZW5kKHRhcmdldCk7CiAgICAgYXJndW1lbnRzLmFwcGVuZChpZGVu
dGlmaWVyVG9TYWZlUHVibGljSlNWYWx1ZSh2bSwgSWRlbnRpZmllcjo6ZnJvbVVpZCgmdm0sIHBy
b3BlcnR5TmFtZS51aWQoKSkpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICBKU1ZhbHVlIHRyYXBSZXN1bHQgPSBjYWxsKGV4ZWMsIGdl
dE93blByb3BlcnR5RGVzY3JpcHRvck1ldGhvZCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBoYW5kbGVy
LCBhcmd1bWVudHMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtMjM0LDggKzIzMyw2IEBAIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1I
YXNQcm9wZXJ0eShFeGUKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CiAgICAg
YXJndW1lbnRzLmFwcGVuZCh0YXJnZXQpOwogICAgIGFyZ3VtZW50cy5hcHBlbmQoaWRlbnRpZmll
clRvU2FmZVB1YmxpY0pTVmFsdWUodm0sIElkZW50aWZpZXI6OmZyb21VaWQoJnZtLCBwcm9wZXJ0
eU5hbWUudWlkKCkpKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgSlNWYWx1ZSB0cmFwUmVzdWx0ID0gY2FsbChleGVjLCBoYXNNZXRo
b2QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgaGFuZGxlciwgYXJndW1lbnRzKTsKICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTI5OCw2ICsyOTUs
NTEgQEAgYm9vbCBQcm94eU9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbgogICAgIHJldHVy
biB0aGlzT2JqZWN0LT5nZXRPd25Qcm9wZXJ0eVNsb3RDb21tb24oZXhlYywgaWRlbnQuaW1wbCgp
LCBzbG90KTsKIH0KIAorc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcGVyZm9y
bVByb3h5Q2FsbChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
KyAgICBQcm94eU9iamVjdCogcHJveHkgPSBqc0Nhc3Q8UHJveHlPYmplY3QqPihleGVjLT5jYWxs
ZWUoKSk7CisgICAgSlNWYWx1ZSBoYW5kbGVyVmFsdWUgPSBwcm94eS0+aGFuZGxlcigpOworICAg
IGlmIChoYW5kbGVyVmFsdWUuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiUHJveHkgJ2hhbmRsZXInIGlzIG51bGwuIEl0IHNob3Vs
ZCBiZSBhbiBPYmplY3QuIikpOworCisgICAgSlNPYmplY3QqIGhhbmRsZXIgPSBqc0Nhc3Q8SlNP
YmplY3QqPihoYW5kbGVyVmFsdWUpOworICAgIENhbGxEYXRhIGNhbGxEYXRhOworICAgIENhbGxU
eXBlIGNhbGxUeXBlOworICAgIEpTVmFsdWUgYXBwbHlNZXRob2QgPSBoYW5kbGVyLT5nZXRNZXRo
b2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCBtYWtlSWRlbnRpZmllcih2bSwgImFwcGx5Iiks
IEFTQ0lJTGl0ZXJhbCgiJ2FwcGx5JyBwcm9wZXJ0eSBvZiBhIFByb3h5J3MgaGFuZGxlciBzaG91
bGQgYmUgY2FsbGFibGUuIikpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBKU09iamVjdCog
dGFyZ2V0ID0gcHJveHktPnRhcmdldCgpOworICAgIGlmIChhcHBseU1ldGhvZC5pc1VuZGVmaW5l
ZCgpKSB7CisgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOworICAgICAgICBDYWxsVHlwZSBjYWxs
VHlwZSA9IHRhcmdldC0+bWV0aG9kVGFibGUodm0pLT5nZXRDYWxsRGF0YSh0YXJnZXQsIGNhbGxE
YXRhKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbFR5cGUgIT0gQ2FsbFR5cGVOb25lKTsK
KyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWxsKGV4ZWMsIHRhcmdldCwgY2FsbFR5
cGUsIGNhbGxEYXRhLCBleGVjLT50aGlzVmFsdWUoKSwgQXJnTGlzdChleGVjKSkpOworICAgIH0K
KworICAgIEpTQXJyYXkqIGFyZ0FycmF5ID0gY29uc3RydWN0QXJyYXkoZXhlYywgc3RhdGljX2Nh
c3Q8QXJyYXlBbGxvY2F0aW9uUHJvZmlsZSo+KG51bGxwdHIpLCBBcmdMaXN0KGV4ZWMpKTsKKyAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CisgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOwor
ICAgIGFyZ3VtZW50cy5hcHBlbmQodGFyZ2V0KTsKKyAgICBhcmd1bWVudHMuYXBwZW5kKGV4ZWMt
PnRoaXNWYWx1ZSgpKTsKKyAgICBhcmd1bWVudHMuYXBwZW5kKGFyZ0FycmF5KTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhbGwoZXhlYywgYXBwbHlNZXRob2QsIGNhbGxUeXBlLCBjYWxs
RGF0YSwgaGFuZGxlciwgYXJndW1lbnRzKSk7Cit9CisKK0NhbGxUeXBlIFByb3h5T2JqZWN0Ojpn
ZXRDYWxsRGF0YShKU0NlbGwqIGNlbGwsIENhbGxEYXRhJiBjYWxsRGF0YSkKK3sKKyAgICBQcm94
eU9iamVjdCogcHJveHkgPSBqc0Nhc3Q8UHJveHlPYmplY3QqPihjZWxsKTsKKyAgICBpZiAoIXBy
b3h5LT5tX2lzQ2FsbGFibGUpIHsKKyAgICAgICAgY2FsbERhdGEuanMuZnVuY3Rpb25FeGVjdXRh
YmxlID0gbnVsbHB0cjsKKyAgICAgICAgY2FsbERhdGEuanMuc2NvcGUgPSBudWxscHRyOworICAg
ICAgICByZXR1cm4gQ2FsbFR5cGVOb25lOworICAgIH0KKworICAgIGNhbGxEYXRhLm5hdGl2ZS5m
dW5jdGlvbiA9IHBlcmZvcm1Qcm94eUNhbGw7CisgICAgcmV0dXJuIENhbGxUeXBlSG9zdDsKK30K
Kwogdm9pZCBQcm94eU9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIFByb3h5T2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFBy
b3h5T2JqZWN0Kj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Q
cm94eU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Byb3h5T2JqZWN0LmgJKHJldmlzaW9uIDE5Njc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Byb3h5T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDcgQEAg
cHJpdmF0ZToKIAogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCosIEV4ZWNTdGF0ZSosIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIENhbGxUeXBlIGdl
dENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJik7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3RDb21tb24oRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKQEAgLTY5
LDYgKzcwLDcgQEAgcHJpdmF0ZToKIAogICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4gbV90YXJn
ZXQ7CiAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1faGFuZGxlcjsKKyAgICBib29sIG1faXND
YWxsYWJsZSA6IDE7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcHJveHktY2FsbC5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3Byb3h5LWNhbGwuanMJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3Byb3h5LWNhbGwuanMJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwzMDEgQEAKK2Z1bmN0aW9uIGFzc2VydChiKSB7CisgICAg
aWYgKCFiKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBhc3NlcnRpb24iKTsKK30KKwor
eworICAgIGxldCB0YXJnZXQgPSBmdW5jdGlvbiBmb28oLi4uYXJncykgeworICAgICAgICBhc3Nl
cnQoYXJnc1swXSA9PT0gMTApOworICAgICAgICBhc3NlcnQoYXJnc1sxXSA9PT0gMjApOworICAg
ICAgICByZXR1cm4gImZvbyI7CisgICAgfQorICAgIGxldCBoYW5kbGVyID0geworICAgICAgICBh
cHBseTogZnVuY3Rpb24odGhlVGFyZ2V0LCB0aGlzQXJnLCBhcmdBcnJheSkgeworICAgICAgICAg
ICAgYXNzZXJ0KHRoZVRhcmdldCA9PT0gdGFyZ2V0KTsKKyAgICAgICAgICAgIGFzc2VydChhcmdB
cnJheVswXSA9PT0gMTApOworICAgICAgICAgICAgYXNzZXJ0KGFyZ0FycmF5WzFdID09PSAyMCk7
CisgICAgICAgICAgICByZXR1cm4gdGhlVGFyZ2V0LmFwcGx5KHRoaXNBcmcsIGFyZ0FycmF5KTsK
KyAgICAgICAgfQorICAgIH07CisgICAgbGV0IHByb3h5ID0gbmV3IFByb3h5KHRhcmdldCwgaGFu
ZGxlcik7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MDA7IGkrKykgeworICAgICAgICBhc3Nl
cnQocHJveHkoMTAsIDIwKSA9PT0gImZvbyIpOworICAgIH0KK30KKworeworICAgIGxldCB0YXJn
ZXQgPSBmdW5jdGlvbiBmb28oKSB7IH0KKyAgICBsZXQgZXJyb3IgPSBudWxsOworICAgIGxldCBo
YW5kbGVyID0geworICAgICAgICBnZXQgYXBwbHkoKSB7CisgICAgICAgICAgICBlcnJvciA9IG5l
dyBFcnJvcigpOworICAgICAgICAgICAgdGhyb3cgZXJyb3I7CisgICAgICAgIH0KKyAgICB9Owor
ICAgIGxldCBwcm94eSA9IG5ldyBQcm94eSh0YXJnZXQsIGhhbmRsZXIpOworICAgIGZvciAobGV0
IGkgPSAwOyBpIDwgNTAwOyBpKyspIHsKKyAgICAgICAgbGV0IHRocmV3ID0gZmFsc2U7CisgICAg
ICAgIHRyeSB7CisgICAgICAgICAgICBwcm94eSgxMCwgMjApOworICAgICAgICB9IGNhdGNoKGUp
IHsKKyAgICAgICAgICAgIGFzc2VydChlID09PSBlcnJvcik7CisgICAgICAgICAgICB0aHJldyA9
IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgYXNzZXJ0KHRocmV3KTsKKyAgICB9Cit9CisKK3sK
KyAgICBsZXQgY2FsbGVkID0gZmFsc2U7CisgICAgbGV0IGdsb2JhbFRoaXMgPSB0aGlzOworICAg
IGxldCB0YXJnZXQgPSBmdW5jdGlvbiBmb28oKSB7CisgICAgICAgIGFzc2VydCh0aGlzID09PSBn
bG9iYWxUaGlzKTsKKyAgICAgICAgY2FsbGVkID0gdHJ1ZTsKKyAgICB9CisgICAgbGV0IGhhbmRs
ZXIgPSB7CisgICAgICAgIGFwcGx5OiBudWxsCisgICAgfTsKKworICAgIGxldCBwcm94eSA9IG5l
dyBQcm94eSh0YXJnZXQsIGhhbmRsZXIpOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTAwOyBp
KyspIHsKKyAgICAgICAgcHJveHkoKTsKKyAgICAgICAgYXNzZXJ0KGNhbGxlZCk7CisgICAgICAg
IGNhbGxlZCA9IGZhbHNlOworICAgIH0KK30KKworeworICAgIGxldCBjYWxsZWQgPSBmYWxzZTsK
KyAgICBsZXQgZ2xvYmFsVGhpcyA9IHRoaXM7CisgICAgbGV0IHRhcmdldCA9IGZ1bmN0aW9uIGZv
bygpIHsKKyAgICAgICAgYXNzZXJ0KHRoaXMgPT09IGdsb2JhbFRoaXMpOworICAgICAgICBjYWxs
ZWQgPSB0cnVlOworICAgIH0KKyAgICBsZXQgaGFuZGxlciA9IHsKKyAgICAgICAgYXBwbHk6IHVu
ZGVmaW5lZAorICAgIH07CisKKyAgICBsZXQgcHJveHkgPSBuZXcgUHJveHkodGFyZ2V0LCBoYW5k
bGVyKTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDUwMDsgaSsrKSB7CisgICAgICAgIHByb3h5
KCk7CisgICAgICAgIGFzc2VydChjYWxsZWQpOworICAgICAgICBjYWxsZWQgPSBmYWxzZTsKKyAg
ICB9Cit9CisKK3sKKyAgICBsZXQgY2FsbGVkID0gZmFsc2U7CisgICAgbGV0IHRoaXNWYWx1ZSA9
IHt9OworICAgIGxldCB0YXJnZXQgPSBmdW5jdGlvbiBmb28oeCwgeSwgeikgeworICAgICAgICBh
c3NlcnQodGhpcyA9PT0gdGhpc1ZhbHVlKTsKKyAgICAgICAgYXNzZXJ0KHggPT09IDIwKTsKKyAg
ICAgICAgYXNzZXJ0KHkgPT09IDQ1KTsKKyAgICAgICAgYXNzZXJ0KHogPT09ICJmb28iKTsKKyAg
ICAgICAgY2FsbGVkID0gdHJ1ZTsKKyAgICB9CisKKyAgICBsZXQgaGFuZGxlciA9IHsKKyAgICAg
ICAgYXBwbHk6IHVuZGVmaW5lZAorICAgIH07CisKKyAgICBsZXQgcHJveHkgPSBuZXcgUHJveHko
dGFyZ2V0LCBoYW5kbGVyKTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDUwMDsgaSsrKSB7Cisg
ICAgICAgIHByb3h5LmNhbGwodGhpc1ZhbHVlLCAyMCwgNDUsICJmb28iKTsKKyAgICAgICAgcHJv
eHkuYXBwbHkodGhpc1ZhbHVlLCBbMjAsIDQ1LCAiZm9vIl0pOworICAgICAgICBhc3NlcnQoY2Fs
bGVkKTsKKyAgICAgICAgY2FsbGVkID0gZmFsc2U7CisgICAgfQorfQorCit7CisgICAgbGV0IGNh
bGxlZCA9IGZhbHNlOworICAgIGxldCB0aGlzVmFsdWUgPSB7fTsKKyAgICBsZXQgdGFyZ2V0ID0g
ZnVuY3Rpb24gZm9vKHgsIHksIHopIHsKKyAgICAgICAgYXNzZXJ0KHRoaXMgPT09IHRoaXNWYWx1
ZSk7CisgICAgICAgIGFzc2VydCh4ID09PSAyMCk7CisgICAgICAgIGFzc2VydCh5ID09PSA0NSk7
CisgICAgICAgIGFzc2VydCh6ID09PSAiZm9vIik7CisgICAgICAgIGNhbGxlZCA9IHRydWU7Cisg
ICAgICAgIHJldHVybiB0aGlzOworICAgIH0KKworICAgIGxldCBoYW5kbGVyID0geworICAgICAg
ICBhcHBseTogZnVuY3Rpb24odGhlVGFyZ2V0LCB0aGlzQXJnLCBhcmdBcnJheSkgeworICAgICAg
ICAgICAgYXNzZXJ0KHRoZVRhcmdldCA9PT0gdGFyZ2V0KTsKKyAgICAgICAgICAgIGFzc2VydChh
cmdBcnJheVswXSA9PT0gMjApOworICAgICAgICAgICAgYXNzZXJ0KGFyZ0FycmF5WzFdID09PSA0
NSk7CisgICAgICAgICAgICBhc3NlcnQoYXJnQXJyYXlbMl0gPT09ICJmb28iKTsKKyAgICAgICAg
ICAgIGFzc2VydCh0aGlzQXJnID09PSB0aGlzVmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIHRo
ZVRhcmdldC5hcHBseSh0aGlzQXJnLCBhcmdBcnJheSk7CisgICAgICAgIH0KKyAgICB9OworCisg
ICAgbGV0IHByb3h5ID0gbmV3IFByb3h5KHRhcmdldCwgaGFuZGxlcik7CisgICAgZm9yIChsZXQg
aSA9IDA7IGkgPCA1MDA7IGkrKykgeworICAgICAgICBhc3NlcnQocHJveHkuY2FsbCh0aGlzVmFs
dWUsIDIwLCA0NSwgImZvbyIpID09PSB0aGlzVmFsdWUpOworICAgICAgICBhc3NlcnQocHJveHku
YXBwbHkodGhpc1ZhbHVlLCBbMjAsIDQ1LCAiZm9vIl0pID09PSB0aGlzVmFsdWUpOworICAgICAg
ICBhc3NlcnQoY2FsbGVkKTsKKyAgICAgICAgY2FsbGVkID0gZmFsc2U7CisgICAgfQorfQorCit7
CisgICAgbGV0IGNhbGxlZCA9IGZhbHNlOworICAgIGxldCB0YXJnZXQgPSBFcnJvcjsKKworICAg
IGxldCBoYW5kbGVyID0geworICAgICAgICBhcHBseTogZnVuY3Rpb24odGhlVGFyZ2V0LCB0aGlz
QXJnLCBhcmdBcnJheSkgeworICAgICAgICAgICAgY2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgICAg
IGFzc2VydCh0aGVUYXJnZXQgPT09IEVycm9yKTsKKyAgICAgICAgICAgIHJldHVybiB0aGVUYXJn
ZXQuYXBwbHkodGhpc0FyZywgYXJnQXJyYXkpOworICAgICAgICB9CisgICAgfTsKKworICAgIGxl
dCBwcm94eSA9IG5ldyBQcm94eSh0YXJnZXQsIGhhbmRsZXIpOworICAgIGZvciAobGV0IGkgPSAw
OyBpIDwgNTAwOyBpKyspIHsKKyAgICAgICAgbGV0IGVycm9yID0gcHJveHkoKTsKKyAgICAgICAg
YXNzZXJ0KCEhZXJyb3Iuc3RhY2spOworICAgICAgICBjYWxsZWQgPSBmYWxzZTsKKyAgICB9Cit9
CisKK3sKKyAgICBsZXQgY2FsbGVkID0gZmFsc2U7CisgICAgbGV0IHNlbGYgPSB0aGlzOworICAg
IGxldCB0YXJnZXQgPSAoeCkgPT4geworICAgICAgICBjYWxsZWQgPSB0cnVlOworICAgICAgICBh
c3NlcnQodGhpcyA9PT0gc2VsZik7CisgICAgICAgIHJldHVybiB4OworICAgIH07CisKKyAgICBs
ZXQgaGFuZGxlciA9IHsgfTsKKworICAgIGxldCBwcm94eSA9IG5ldyBQcm94eSh0YXJnZXQsIGhh
bmRsZXIpOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTAwOyBpKyspIHsKKyAgICAgICAgbGV0
IHJlc3VsdCA9IHByb3h5KGkpOworICAgICAgICBhc3NlcnQocmVzdWx0ID09PSBpKTsKKyAgICAg
ICAgY2FsbGVkID0gZmFsc2U7CisgICAgfQorfQorCit7CisgICAgbGV0IGNhbGxlZCA9IGZhbHNl
OworICAgIGxldCBzZWxmID0gdGhpczsKKyAgICBsZXQgdGFyZ2V0ID0gKHgpID0+IHsKKyAgICAg
ICAgYXNzZXJ0KHRoaXMgPT09IHNlbGYpOworICAgICAgICByZXR1cm4geDsKKyAgICB9OworCisg
ICAgbGV0IGhhbmRsZXIgPSB7CisgICAgICAgIGFwcGx5OiBmdW5jdGlvbih0aGVUYXJnZXQsIHRo
aXNBcmcsIGFyZ0FycmF5KSB7CisgICAgICAgICAgICBjYWxsZWQgPSB0cnVlOworICAgICAgICAg
ICAgYXNzZXJ0KHRoZVRhcmdldCA9PT0gdGFyZ2V0KTsKKyAgICAgICAgICAgIHJldHVybiB0aGVU
YXJnZXQuYXBwbHkodGhpc0FyZywgYXJnQXJyYXkpOworICAgICAgICB9CisgICAgfTsKKworICAg
IGxldCBwcm94eSA9IG5ldyBQcm94eSh0YXJnZXQsIGhhbmRsZXIpOworICAgIGZvciAobGV0IGkg
PSAwOyBpIDwgNTAwOyBpKyspIHsKKyAgICAgICAgbGV0IHJlc3VsdCA9IHByb3h5KGkpOworICAg
ICAgICBhc3NlcnQocmVzdWx0ID09PSBpKTsKKyAgICAgICAgY2FsbGVkID0gZmFsc2U7CisgICAg
fQorfQorCit7CisgICAgbGV0IGNhbGxlZCA9IGZhbHNlOworICAgIGxldCBzZWxmID0gdGhpczsK
KyAgICBsZXQgdGFyZ2V0ID0gKHgpID0+IHsKKyAgICAgICAgYXNzZXJ0KHRoaXMgPT09IHNlbGYp
OworICAgICAgICByZXR1cm4geDsKKyAgICB9OworCisgICAgbGV0IGhhbmRsZXIgPSB7CisgICAg
ICAgIGFwcGx5OiBmdW5jdGlvbih0aGVUYXJnZXQsIHRoaXNBcmcsIGFyZ0FycmF5KSB7CisgICAg
ICAgICAgICBjYWxsZWQgPSB0cnVlOworICAgICAgICAgICAgYXNzZXJ0KHRoZVRhcmdldCA9PT0g
dGFyZ2V0KTsKKyAgICAgICAgICAgIHJldHVybiB0aGVUYXJnZXQuYXBwbHkobnVsbCwgYXJnQXJy
YXkpOworICAgICAgICB9CisgICAgfTsKKworICAgIGxldCBwcm94eSA9IG5ldyBQcm94eSh0YXJn
ZXQsIGhhbmRsZXIpOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTAwOyBpKyspIHsKKyAgICAg
ICAgbGV0IHJlc3VsdCA9IHByb3h5KGkpOworICAgICAgICBhc3NlcnQocmVzdWx0ID09PSBpKTsK
KyAgICAgICAgY2FsbGVkID0gZmFsc2U7CisgICAgfQorfQorCit7CisgICAgbGV0IGNhbGxlZCA9
IGZhbHNlOworICAgIGxldCB0YXJnZXQgPSAoeCkgPT4geyB9OworICAgIGxldCBlcnJvciA9IG51
bGw7CisKKyAgICBsZXQgaGFuZGxlciA9IHsKKyAgICAgICAgYXBwbHk6IGZ1bmN0aW9uKHRoZVRh
cmdldCwgdGhpc0FyZywgYXJnQXJyYXkpIHsKKyAgICAgICAgICAgIGVycm9yID0gbmV3IEVycm9y
KCk7CisgICAgICAgICAgICB0aHJvdyBlcnJvcjsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBs
ZXQgcHJveHkgPSBuZXcgUHJveHkodGFyZ2V0LCBoYW5kbGVyKTsKKyAgICBmb3IgKGxldCBpID0g
MDsgaSA8IDUwMDsgaSsrKSB7CisgICAgICAgIGxldCB0aHJldyA9IGZhbHNlOworICAgICAgICB0
cnkgeworICAgICAgICAgICAgcHJveHkoKTsKKyAgICAgICAgfSBjYXRjaChlKSB7CisgICAgICAg
ICAgICBhc3NlcnQoZSA9PT0gZXJyb3IpOworICAgICAgICAgICAgdGhyZXcgPSB0cnVlOworICAg
ICAgICB9CisgICAgICAgIGFzc2VydCh0aHJldyk7CisgICAgfQorfQorCit7CisgICAgbGV0IGNh
bGxlZCA9IGZhbHNlOworICAgIGxldCBlcnJvciA9IG51bGw7CisgICAgbGV0IHRhcmdldCA9ICh4
KSA9PiB7CisgICAgICAgIGVycm9yID0gbmV3IEVycm9yKCk7CisgICAgICAgIHRocm93IGVycm9y
OworICAgIH07CisKKyAgICBsZXQgaGFuZGxlciA9IHsKKyAgICAgICAgYXBwbHk6IGZ1bmN0aW9u
KHRoZVRhcmdldCwgdGhpc0FyZywgYXJnQXJyYXkpIHsKKyAgICAgICAgICAgIGFzc2VydCh0aGVU
YXJnZXQgPT09IHRhcmdldCk7CisgICAgICAgICAgICByZXR1cm4gdGhlVGFyZ2V0LmFwcGx5KG51
bGwsIGFyZ0FycmF5KTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBsZXQgcHJveHkgPSBuZXcg
UHJveHkodGFyZ2V0LCBoYW5kbGVyKTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDUwMDsgaSsr
KSB7CisgICAgICAgIGxldCB0aHJldyA9IGZhbHNlOworICAgICAgICB0cnkgeworICAgICAgICAg
ICAgcHJveHkoKTsKKyAgICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICAgICBhc3NlcnQoZSA9
PT0gZXJyb3IpOworICAgICAgICAgICAgdGhyZXcgPSB0cnVlOworICAgICAgICB9CisgICAgICAg
IGFzc2VydCh0aHJldyk7CisgICAgfQorfQorCit7CisgICAgbGV0IGNhbGxlZCA9IGZhbHNlOwor
ICAgIGxldCBlcnJvciA9IG51bGw7CisgICAgbGV0IHRhcmdldCA9IG5ldyBQcm94eSgoeCkgPT4g
eCwge30pOworCisgICAgbGV0IGhhbmRsZXIgPSB7CisgICAgICAgIGFwcGx5OiBmdW5jdGlvbih0
aGVUYXJnZXQsIHRoaXNBcmcsIGFyZ0FycmF5KSB7CisgICAgICAgICAgICBhc3NlcnQodGhlVGFy
Z2V0ID09PSB0YXJnZXQpOworICAgICAgICAgICAgY2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgICAg
IHJldHVybiB0aGVUYXJnZXQuYXBwbHkobnVsbCwgYXJnQXJyYXkpOworICAgICAgICB9CisgICAg
fTsKKworICAgIGxldCBwcm94eSA9IG5ldyBQcm94eSh0YXJnZXQsIGhhbmRsZXIpOworICAgIGZv
ciAobGV0IGkgPSAwOyBpIDwgNTAwOyBpKyspIHsKKyAgICAgICAgYXNzZXJ0KHByb3h5KGkpID09
PSBpKTsKKyAgICAgICAgYXNzZXJ0KGNhbGxlZCk7CisgICAgICAgIGNhbGxlZCA9IGZhbHNlOwor
ICAgIH0KK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271736</attachid>
            <date>2016-02-18 23:02:38 -0800</date>
            <delta_ts>2016-02-19 14:36:42 -0800</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>14929</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk2NzkxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBA
CisyMDE2LTAyLTE4ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFtFUzZdIEltcGxlbWVudCBQcm94eS5bW0NhbGxdXQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU0NDI1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyBhIHN0cmFpZ2h0IGZvcndhcmQg
aW1wbGVtZW50YXRpb24gb2YKKyAgICAgICAgUHJveHkuW1tDYWxsXV0gd2l0aCByZXNwZWN0IHRv
IHNlY3Rpb24gOS41LjEyCisgICAgICAgIG9mIHRoZSBFQ01BU2NyaXB0IHNwZWMuCisgICAgICAg
IGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXByb3h5LW9iamVjdC1pbnRlcm5h
bC1tZXRob2RzLWFuZC1pbnRlcm5hbC1zbG90cy1jYWxsLXRoaXNhcmd1bWVudC1hcmd1bWVudHNs
aXN0CisKKyAgICAgICAgKiBydW50aW1lL1Byb3h5T2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6
UHJveHlPYmplY3Q6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6cGVyZm9ybVByb3h5
R2V0KToKKyAgICAgICAgKEpTQzo6UHJveHlPYmplY3Q6OnBlcmZvcm1JbnRlcm5hbE1ldGhvZEdl
dE93blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6UHJveHlPYmplY3Q6OnBlcmZvcm1IYXNQcm9w
ZXJ0eSk6CisgICAgICAgIChKU0M6OlByb3h5T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
ZGV4KToKKyAgICAgICAgKEpTQzo6cGVyZm9ybVByb3h5Q2FsbCk6CisgICAgICAgIChKU0M6OlBy
b3h5T2JqZWN0OjpnZXRDYWxsRGF0YSk6CisgICAgICAgIChKU0M6OlByb3h5T2JqZWN0Ojp2aXNp
dENoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL1Byb3h5T2JqZWN0Lmg6CisgICAgICAgICog
dGVzdHMvc3RyZXNzL3Byb3h5LWNhbGwuanM6IEFkZGVkLgorICAgICAgICAoYXNzZXJ0KToKKyAg
ICAgICAgKHRocm93Lm5ldy5FcnJvci5sZXQudGFyZ2V0KToKKyAgICAgICAgKHRocm93Lm5ldy5F
cnJvci5sZXQuaGFuZGxlci5hcHBseSk6CisgICAgICAgICh0aHJvdy5uZXcuRXJyb3IpOgorICAg
ICAgICAoYXNzZXJ0LmxldC50YXJnZXQpOgorICAgICAgICAoYXNzZXJ0LmxldC5oYW5kbGVyLmdl
dCBhcHBseSk6CisgICAgICAgIChsZXQudGFyZ2V0KToKKyAgICAgICAgKGxldC5oYW5kbGVyLmFw
cGx5KToKKyAgICAgICAgKGkuY2F0Y2gpOgorICAgICAgICAoYXNzZXJ0LmxldC5oYW5kbGVyLmFw
cGx5KToKKwogMjAxNi0wMi0xOCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAog
ICAgICAgICBJbXBsZW1lbnQgUHJveHkuW1tIYXNQcm9wZXJ0eV1dCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJveHlPYmplY3QuY3BwCShyZXZpc2lvbiAxOTY3ODkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY1LDYgKzY1LDkgQEAgdm9pZCBQcm94eU9iamVjdDo6ZmluaXNoQ3JlYXRp
b24oVk0mIHZtLAogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgQ2FsbERhdGEgaWdub3Jl
ZDsKKyAgICBtX2lzQ2FsbGFibGUgPSBqc0Nhc3Q8SlNPYmplY3QqPih0YXJnZXQpLT5tZXRob2RU
YWJsZSh2bSktPmdldENhbGxEYXRhKGpzQ2FzdDxKU09iamVjdCo+KHRhcmdldCksIGlnbm9yZWQp
ICE9IENhbGxUeXBlTm9uZTsKKwogICAgIG1fdGFyZ2V0LnNldCh2bSwgdGhpcywganNDYXN0PEpT
T2JqZWN0Kj4odGFyZ2V0KSk7CiAgICAgbV9oYW5kbGVyLnNldCh2bSwgdGhpcywgaGFuZGxlcik7
CiB9CkBAIC0xMDUsOCArMTA4LDYgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIHBlcmZvcm1Qcm94
eUdldChFeAogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKICAgICBhcmd1bWVu
dHMuYXBwZW5kKHRhcmdldCk7CiAgICAgYXJndW1lbnRzLmFwcGVuZChpZGVudGlmaWVyVG9TYWZl
UHVibGljSlNWYWx1ZSh2bSwgSWRlbnRpZmllcjo6ZnJvbVVpZCgmdm0sIHByb3BlcnR5TmFtZS51
aWQoKSkpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXJndW1lbnRzLmFwcGVuZCh0aGlz
T2JqZWN0KTsKICAgICBKU1ZhbHVlIHRyYXBSZXN1bHQgPSBjYWxsKGV4ZWMsIGdldEhhbmRsZXIs
IGNhbGxUeXBlLCBjYWxsRGF0YSwgaGFuZGxlciwgYXJndW1lbnRzKTsKICAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCkBAIC0xNTIsOCArMTUzLDYgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVy
Zm9ybUludGVybmFsTWV0aG9kRwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsK
ICAgICBhcmd1bWVudHMuYXBwZW5kKHRhcmdldCk7CiAgICAgYXJndW1lbnRzLmFwcGVuZChpZGVu
dGlmaWVyVG9TYWZlUHVibGljSlNWYWx1ZSh2bSwgSWRlbnRpZmllcjo6ZnJvbVVpZCgmdm0sIHBy
b3BlcnR5TmFtZS51aWQoKSkpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICBKU1ZhbHVlIHRyYXBSZXN1bHQgPSBjYWxsKGV4ZWMsIGdl
dE93blByb3BlcnR5RGVzY3JpcHRvck1ldGhvZCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBoYW5kbGVy
LCBhcmd1bWVudHMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtMjM0LDggKzIzMyw2IEBAIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1I
YXNQcm9wZXJ0eShFeGUKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CiAgICAg
YXJndW1lbnRzLmFwcGVuZCh0YXJnZXQpOwogICAgIGFyZ3VtZW50cy5hcHBlbmQoaWRlbnRpZmll
clRvU2FmZVB1YmxpY0pTVmFsdWUodm0sIElkZW50aWZpZXI6OmZyb21VaWQoJnZtLCBwcm9wZXJ0
eU5hbWUudWlkKCkpKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgSlNWYWx1ZSB0cmFwUmVzdWx0ID0gY2FsbChleGVjLCBoYXNNZXRo
b2QsIGNhbGxUeXBlLCBjYWxsRGF0YSwgaGFuZGxlciwgYXJndW1lbnRzKTsKICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTI5OCw2ICsyOTUs
NTEgQEAgYm9vbCBQcm94eU9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbgogICAgIHJldHVy
biB0aGlzT2JqZWN0LT5nZXRPd25Qcm9wZXJ0eVNsb3RDb21tb24oZXhlYywgaWRlbnQuaW1wbCgp
LCBzbG90KTsKIH0KIAorc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcGVyZm9y
bVByb3h5Q2FsbChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
KyAgICBQcm94eU9iamVjdCogcHJveHkgPSBqc0Nhc3Q8UHJveHlPYmplY3QqPihleGVjLT5jYWxs
ZWUoKSk7CisgICAgSlNWYWx1ZSBoYW5kbGVyVmFsdWUgPSBwcm94eS0+aGFuZGxlcigpOworICAg
IGlmIChoYW5kbGVyVmFsdWUuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiUHJveHkgJ2hhbmRsZXInIGlzIG51bGwuIEl0IHNob3Vs
ZCBiZSBhbiBPYmplY3QuIikpOworCisgICAgSlNPYmplY3QqIGhhbmRsZXIgPSBqc0Nhc3Q8SlNP
YmplY3QqPihoYW5kbGVyVmFsdWUpOworICAgIENhbGxEYXRhIGNhbGxEYXRhOworICAgIENhbGxU
eXBlIGNhbGxUeXBlOworICAgIEpTVmFsdWUgYXBwbHlNZXRob2QgPSBoYW5kbGVyLT5nZXRNZXRo
b2QoZXhlYywgY2FsbERhdGEsIGNhbGxUeXBlLCBtYWtlSWRlbnRpZmllcih2bSwgImFwcGx5Iiks
IEFTQ0lJTGl0ZXJhbCgiJ2FwcGx5JyBwcm9wZXJ0eSBvZiBhIFByb3h5J3MgaGFuZGxlciBzaG91
bGQgYmUgY2FsbGFibGUuIikpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBKU09iamVjdCog
dGFyZ2V0ID0gcHJveHktPnRhcmdldCgpOworICAgIGlmIChhcHBseU1ldGhvZC5pc1VuZGVmaW5l
ZCgpKSB7CisgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOworICAgICAgICBDYWxsVHlwZSBjYWxs
VHlwZSA9IHRhcmdldC0+bWV0aG9kVGFibGUodm0pLT5nZXRDYWxsRGF0YSh0YXJnZXQsIGNhbGxE
YXRhKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbFR5cGUgIT0gQ2FsbFR5cGVOb25lKTsK
KyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWxsKGV4ZWMsIHRhcmdldCwgY2FsbFR5
cGUsIGNhbGxEYXRhLCBleGVjLT50aGlzVmFsdWUoKSwgQXJnTGlzdChleGVjKSkpOworICAgIH0K
KworICAgIEpTQXJyYXkqIGFyZ0FycmF5ID0gY29uc3RydWN0QXJyYXkoZXhlYywgc3RhdGljX2Nh
c3Q8QXJyYXlBbGxvY2F0aW9uUHJvZmlsZSo+KG51bGxwdHIpLCBBcmdMaXN0KGV4ZWMpKTsKKyAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CisgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOwor
ICAgIGFyZ3VtZW50cy5hcHBlbmQodGFyZ2V0KTsKKyAgICBhcmd1bWVudHMuYXBwZW5kKGV4ZWMt
PnRoaXNWYWx1ZSgpKTsKKyAgICBhcmd1bWVudHMuYXBwZW5kKGFyZ0FycmF5KTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhbGwoZXhlYywgYXBwbHlNZXRob2QsIGNhbGxUeXBlLCBjYWxs
RGF0YSwgaGFuZGxlciwgYXJndW1lbnRzKSk7Cit9CisKK0NhbGxUeXBlIFByb3h5T2JqZWN0Ojpn
ZXRDYWxsRGF0YShKU0NlbGwqIGNlbGwsIENhbGxEYXRhJiBjYWxsRGF0YSkKK3sKKyAgICBQcm94
eU9iamVjdCogcHJveHkgPSBqc0Nhc3Q8UHJveHlPYmplY3QqPihjZWxsKTsKKyAgICBpZiAoIXBy
b3h5LT5tX2lzQ2FsbGFibGUpIHsKKyAgICAgICAgY2FsbERhdGEuanMuZnVuY3Rpb25FeGVjdXRh
YmxlID0gbnVsbHB0cjsKKyAgICAgICAgY2FsbERhdGEuanMuc2NvcGUgPSBudWxscHRyOworICAg
ICAgICByZXR1cm4gQ2FsbFR5cGVOb25lOworICAgIH0KKworICAgIGNhbGxEYXRhLm5hdGl2ZS5m
dW5jdGlvbiA9IHBlcmZvcm1Qcm94eUNhbGw7CisgICAgcmV0dXJuIENhbGxUeXBlSG9zdDsKK30K
Kwogdm9pZCBQcm94eU9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIFByb3h5T2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFBy
b3h5T2JqZWN0Kj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Q
cm94eU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Byb3h5T2JqZWN0LmgJKHJldmlzaW9uIDE5Njc4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Byb3h5T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDcgQEAg
cHJpdmF0ZToKIAogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCos
IEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCosIEV4ZWNTdGF0ZSosIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgc3RhdGljIENhbGxUeXBlIGdl
dENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJik7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3RDb21tb24oRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKQEAgLTY5
LDYgKzcwLDcgQEAgcHJpdmF0ZToKIAogICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4gbV90YXJn
ZXQ7CiAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1faGFuZGxlcjsKKyAgICBib29sIG1faXND
YWxsYWJsZSA6IDE7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90ZXN0cy9lczYueWFtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvZXM2LnlhbWwJKHJldmlzaW9uIDE5Njc4OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90ZXN0cy9lczYueWFtbAkod29ya2luZyBjb3B5KQpAQCAtOTA3LDcgKzkwNyw3IEBA
CiAtIHBhdGg6IGVzNi9wcm90b3R5cGVfb2ZfYm91bmRfZnVuY3Rpb25zX3N1YmNsYXNzZXMuanMK
ICAgY21kOiBydW5FUzYgOmZhaWwKIC0gcGF0aDogZXM2L1Byb3h5X2FwcGx5X2hhbmRsZXIuanMK
LSAgY21kOiBydW5FUzYgOmZhaWwKKyAgY21kOiBydW5FUzYgOm5vcm1hbAogLSBwYXRoOiBlczYv
UHJveHlfQXJyYXkuaXNBcnJheV9zdXBwb3J0LmpzCiAgIGNtZDogcnVuRVM2IDpmYWlsCiAtIHBh
dGg6IGVzNi9Qcm94eV9jb25zdHJ1Y3RfaGFuZGxlci5qcwpAQCAtOTc1LDcgKzk3NSw3IEBACiAt
IHBhdGg6IGVzNi9Qcm94eV9pbnRlcm5hbF9nZXRfY2FsbHNfRXJyb3IucHJvdG90eXBlLnRvU3Ry
aW5nLmpzCiAgIGNtZDogcnVuRVM2IDpub3JtYWwKIC0gcGF0aDogZXM2L1Byb3h5X2ludGVybmFs
X2dldF9jYWxsc19GdW5jdGlvbi5wcm90b3R5cGUuYmluZC5qcwotICBjbWQ6IHJ1bkVTNiA6ZmFp
bAorICBjbWQ6IHJ1bkVTNiA6bm9ybWFsCiAtIHBhdGg6IGVzNi9Qcm94eV9pbnRlcm5hbF9nZXRf
Y2FsbHNfSGFzQmluZGluZy5qcwogICBjbWQ6IHJ1bkVTNiA6bm9ybWFsCiAtIHBhdGg6IGVzNi9Q
cm94eV9pbnRlcm5hbF9nZXRfY2FsbHNfaW5zdGFuY2VvZl9vcGVyYXRvci5qcwpAQCAtMTAyMSw3
ICsxMDIxLDcgQEAKIC0gcGF0aDogZXM2L1Byb3h5X2ludGVybmFsX2dldE93blByb3BlcnR5RGVz
Y3JpcHRvcl9jYWxsc19bW1NldF1dLmpzCiAgIGNtZDogcnVuRVM2IDpmYWlsCiAtIHBhdGg6IGVz
Ni9Qcm94eV9pbnRlcm5hbF9nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JfY2FsbHNfRnVuY3Rpb24u
cHJvdG90eXBlLmJpbmQuanMKLSAgY21kOiBydW5FUzYgOmZhaWwKKyAgY21kOiBydW5FUzYgOm5v
cm1hbAogLSBwYXRoOiBlczYvUHJveHlfaW50ZXJuYWxfZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
X2NhbGxzX09iamVjdC5hc3NpZ24uanMKICAgY21kOiBydW5FUzYgOmZhaWwKIC0gcGF0aDogZXM2
L1Byb3h5X2ludGVybmFsX2dldE93blByb3BlcnR5RGVzY3JpcHRvcl9jYWxsc19PYmplY3QucHJv
dG90eXBlLmhhc093blByb3BlcnR5LmpzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVz
dHMvc3RyZXNzL3Byb3h5LWNhbGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rlc3RzL3N0cmVzcy9wcm94eS1jYWxsLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9wcm94eS1jYWxsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMzAxIEBACitmdW5jdGlvbiBhc3NlcnQoYikgeworICAgIGlmICghYikKKyAgICAg
ICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgYXNzZXJ0aW9uIik7Cit9CisKK3sKKyAgICBsZXQgdGFy
Z2V0ID0gZnVuY3Rpb24gZm9vKC4uLmFyZ3MpIHsKKyAgICAgICAgYXNzZXJ0KGFyZ3NbMF0gPT09
IDEwKTsKKyAgICAgICAgYXNzZXJ0KGFyZ3NbMV0gPT09IDIwKTsKKyAgICAgICAgcmV0dXJuICJm
b28iOworICAgIH0KKyAgICBsZXQgaGFuZGxlciA9IHsKKyAgICAgICAgYXBwbHk6IGZ1bmN0aW9u
KHRoZVRhcmdldCwgdGhpc0FyZywgYXJnQXJyYXkpIHsKKyAgICAgICAgICAgIGFzc2VydCh0aGVU
YXJnZXQgPT09IHRhcmdldCk7CisgICAgICAgICAgICBhc3NlcnQoYXJnQXJyYXlbMF0gPT09IDEw
KTsKKyAgICAgICAgICAgIGFzc2VydChhcmdBcnJheVsxXSA9PT0gMjApOworICAgICAgICAgICAg
cmV0dXJuIHRoZVRhcmdldC5hcHBseSh0aGlzQXJnLCBhcmdBcnJheSk7CisgICAgICAgIH0KKyAg
ICB9OworICAgIGxldCBwcm94eSA9IG5ldyBQcm94eSh0YXJnZXQsIGhhbmRsZXIpOworICAgIGZv
ciAobGV0IGkgPSAwOyBpIDwgNTAwOyBpKyspIHsKKyAgICAgICAgYXNzZXJ0KHByb3h5KDEwLCAy
MCkgPT09ICJmb28iKTsKKyAgICB9Cit9CisKK3sKKyAgICBsZXQgdGFyZ2V0ID0gZnVuY3Rpb24g
Zm9vKCkgeyB9CisgICAgbGV0IGVycm9yID0gbnVsbDsKKyAgICBsZXQgaGFuZGxlciA9IHsKKyAg
ICAgICAgZ2V0IGFwcGx5KCkgeworICAgICAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoKTsKKyAg
ICAgICAgICAgIHRocm93IGVycm9yOworICAgICAgICB9CisgICAgfTsKKyAgICBsZXQgcHJveHkg
PSBuZXcgUHJveHkodGFyZ2V0LCBoYW5kbGVyKTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDUw
MDsgaSsrKSB7CisgICAgICAgIGxldCB0aHJldyA9IGZhbHNlOworICAgICAgICB0cnkgeworICAg
ICAgICAgICAgcHJveHkoMTAsIDIwKTsKKyAgICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICAg
ICBhc3NlcnQoZSA9PT0gZXJyb3IpOworICAgICAgICAgICAgdGhyZXcgPSB0cnVlOworICAgICAg
ICB9CisgICAgICAgIGFzc2VydCh0aHJldyk7CisgICAgfQorfQorCit7CisgICAgbGV0IGNhbGxl
ZCA9IGZhbHNlOworICAgIGxldCBnbG9iYWxUaGlzID0gdGhpczsKKyAgICBsZXQgdGFyZ2V0ID0g
ZnVuY3Rpb24gZm9vKCkgeworICAgICAgICBhc3NlcnQodGhpcyA9PT0gZ2xvYmFsVGhpcyk7Cisg
ICAgICAgIGNhbGxlZCA9IHRydWU7CisgICAgfQorICAgIGxldCBoYW5kbGVyID0geworICAgICAg
ICBhcHBseTogbnVsbAorICAgIH07CisKKyAgICBsZXQgcHJveHkgPSBuZXcgUHJveHkodGFyZ2V0
LCBoYW5kbGVyKTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDUwMDsgaSsrKSB7CisgICAgICAg
IHByb3h5KCk7CisgICAgICAgIGFzc2VydChjYWxsZWQpOworICAgICAgICBjYWxsZWQgPSBmYWxz
ZTsKKyAgICB9Cit9CisKK3sKKyAgICBsZXQgY2FsbGVkID0gZmFsc2U7CisgICAgbGV0IGdsb2Jh
bFRoaXMgPSB0aGlzOworICAgIGxldCB0YXJnZXQgPSBmdW5jdGlvbiBmb28oKSB7CisgICAgICAg
IGFzc2VydCh0aGlzID09PSBnbG9iYWxUaGlzKTsKKyAgICAgICAgY2FsbGVkID0gdHJ1ZTsKKyAg
ICB9CisgICAgbGV0IGhhbmRsZXIgPSB7CisgICAgICAgIGFwcGx5OiB1bmRlZmluZWQKKyAgICB9
OworCisgICAgbGV0IHByb3h5ID0gbmV3IFByb3h5KHRhcmdldCwgaGFuZGxlcik7CisgICAgZm9y
IChsZXQgaSA9IDA7IGkgPCA1MDA7IGkrKykgeworICAgICAgICBwcm94eSgpOworICAgICAgICBh
c3NlcnQoY2FsbGVkKTsKKyAgICAgICAgY2FsbGVkID0gZmFsc2U7CisgICAgfQorfQorCit7Cisg
ICAgbGV0IGNhbGxlZCA9IGZhbHNlOworICAgIGxldCB0aGlzVmFsdWUgPSB7fTsKKyAgICBsZXQg
dGFyZ2V0ID0gZnVuY3Rpb24gZm9vKHgsIHksIHopIHsKKyAgICAgICAgYXNzZXJ0KHRoaXMgPT09
IHRoaXNWYWx1ZSk7CisgICAgICAgIGFzc2VydCh4ID09PSAyMCk7CisgICAgICAgIGFzc2VydCh5
ID09PSA0NSk7CisgICAgICAgIGFzc2VydCh6ID09PSAiZm9vIik7CisgICAgICAgIGNhbGxlZCA9
IHRydWU7CisgICAgfQorCisgICAgbGV0IGhhbmRsZXIgPSB7CisgICAgICAgIGFwcGx5OiB1bmRl
ZmluZWQKKyAgICB9OworCisgICAgbGV0IHByb3h5ID0gbmV3IFByb3h5KHRhcmdldCwgaGFuZGxl
cik7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MDA7IGkrKykgeworICAgICAgICBwcm94eS5j
YWxsKHRoaXNWYWx1ZSwgMjAsIDQ1LCAiZm9vIik7CisgICAgICAgIHByb3h5LmFwcGx5KHRoaXNW
YWx1ZSwgWzIwLCA0NSwgImZvbyJdKTsKKyAgICAgICAgYXNzZXJ0KGNhbGxlZCk7CisgICAgICAg
IGNhbGxlZCA9IGZhbHNlOworICAgIH0KK30KKworeworICAgIGxldCBjYWxsZWQgPSBmYWxzZTsK
KyAgICBsZXQgdGhpc1ZhbHVlID0ge307CisgICAgbGV0IHRhcmdldCA9IGZ1bmN0aW9uIGZvbyh4
LCB5LCB6KSB7CisgICAgICAgIGFzc2VydCh0aGlzID09PSB0aGlzVmFsdWUpOworICAgICAgICBh
c3NlcnQoeCA9PT0gMjApOworICAgICAgICBhc3NlcnQoeSA9PT0gNDUpOworICAgICAgICBhc3Nl
cnQoeiA9PT0gImZvbyIpOworICAgICAgICBjYWxsZWQgPSB0cnVlOworICAgICAgICByZXR1cm4g
dGhpczsKKyAgICB9CisKKyAgICBsZXQgaGFuZGxlciA9IHsKKyAgICAgICAgYXBwbHk6IGZ1bmN0
aW9uKHRoZVRhcmdldCwgdGhpc0FyZywgYXJnQXJyYXkpIHsKKyAgICAgICAgICAgIGFzc2VydCh0
aGVUYXJnZXQgPT09IHRhcmdldCk7CisgICAgICAgICAgICBhc3NlcnQoYXJnQXJyYXlbMF0gPT09
IDIwKTsKKyAgICAgICAgICAgIGFzc2VydChhcmdBcnJheVsxXSA9PT0gNDUpOworICAgICAgICAg
ICAgYXNzZXJ0KGFyZ0FycmF5WzJdID09PSAiZm9vIik7CisgICAgICAgICAgICBhc3NlcnQodGhp
c0FyZyA9PT0gdGhpc1ZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiB0aGVUYXJnZXQuYXBwbHko
dGhpc0FyZywgYXJnQXJyYXkpOworICAgICAgICB9CisgICAgfTsKKworICAgIGxldCBwcm94eSA9
IG5ldyBQcm94eSh0YXJnZXQsIGhhbmRsZXIpOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTAw
OyBpKyspIHsKKyAgICAgICAgYXNzZXJ0KHByb3h5LmNhbGwodGhpc1ZhbHVlLCAyMCwgNDUsICJm
b28iKSA9PT0gdGhpc1ZhbHVlKTsKKyAgICAgICAgYXNzZXJ0KHByb3h5LmFwcGx5KHRoaXNWYWx1
ZSwgWzIwLCA0NSwgImZvbyJdKSA9PT0gdGhpc1ZhbHVlKTsKKyAgICAgICAgYXNzZXJ0KGNhbGxl
ZCk7CisgICAgICAgIGNhbGxlZCA9IGZhbHNlOworICAgIH0KK30KKworeworICAgIGxldCBjYWxs
ZWQgPSBmYWxzZTsKKyAgICBsZXQgdGFyZ2V0ID0gRXJyb3I7CisKKyAgICBsZXQgaGFuZGxlciA9
IHsKKyAgICAgICAgYXBwbHk6IGZ1bmN0aW9uKHRoZVRhcmdldCwgdGhpc0FyZywgYXJnQXJyYXkp
IHsKKyAgICAgICAgICAgIGNhbGxlZCA9IHRydWU7CisgICAgICAgICAgICBhc3NlcnQodGhlVGFy
Z2V0ID09PSBFcnJvcik7CisgICAgICAgICAgICByZXR1cm4gdGhlVGFyZ2V0LmFwcGx5KHRoaXNB
cmcsIGFyZ0FycmF5KTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBsZXQgcHJveHkgPSBuZXcg
UHJveHkodGFyZ2V0LCBoYW5kbGVyKTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDUwMDsgaSsr
KSB7CisgICAgICAgIGxldCBlcnJvciA9IHByb3h5KCk7CisgICAgICAgIGFzc2VydCghIWVycm9y
LnN0YWNrKTsKKyAgICAgICAgY2FsbGVkID0gZmFsc2U7CisgICAgfQorfQorCit7CisgICAgbGV0
IGNhbGxlZCA9IGZhbHNlOworICAgIGxldCBzZWxmID0gdGhpczsKKyAgICBsZXQgdGFyZ2V0ID0g
KHgpID0+IHsKKyAgICAgICAgY2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgYXNzZXJ0KHRoaXMgPT09
IHNlbGYpOworICAgICAgICByZXR1cm4geDsKKyAgICB9OworCisgICAgbGV0IGhhbmRsZXIgPSB7
IH07CisKKyAgICBsZXQgcHJveHkgPSBuZXcgUHJveHkodGFyZ2V0LCBoYW5kbGVyKTsKKyAgICBm
b3IgKGxldCBpID0gMDsgaSA8IDUwMDsgaSsrKSB7CisgICAgICAgIGxldCByZXN1bHQgPSBwcm94
eShpKTsKKyAgICAgICAgYXNzZXJ0KHJlc3VsdCA9PT0gaSk7CisgICAgICAgIGNhbGxlZCA9IGZh
bHNlOworICAgIH0KK30KKworeworICAgIGxldCBjYWxsZWQgPSBmYWxzZTsKKyAgICBsZXQgc2Vs
ZiA9IHRoaXM7CisgICAgbGV0IHRhcmdldCA9ICh4KSA9PiB7CisgICAgICAgIGFzc2VydCh0aGlz
ID09PSBzZWxmKTsKKyAgICAgICAgcmV0dXJuIHg7CisgICAgfTsKKworICAgIGxldCBoYW5kbGVy
ID0geworICAgICAgICBhcHBseTogZnVuY3Rpb24odGhlVGFyZ2V0LCB0aGlzQXJnLCBhcmdBcnJh
eSkgeworICAgICAgICAgICAgY2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIGFzc2VydCh0aGVU
YXJnZXQgPT09IHRhcmdldCk7CisgICAgICAgICAgICByZXR1cm4gdGhlVGFyZ2V0LmFwcGx5KHRo
aXNBcmcsIGFyZ0FycmF5KTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBsZXQgcHJveHkgPSBu
ZXcgUHJveHkodGFyZ2V0LCBoYW5kbGVyKTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDUwMDsg
aSsrKSB7CisgICAgICAgIGxldCByZXN1bHQgPSBwcm94eShpKTsKKyAgICAgICAgYXNzZXJ0KHJl
c3VsdCA9PT0gaSk7CisgICAgICAgIGNhbGxlZCA9IGZhbHNlOworICAgIH0KK30KKworeworICAg
IGxldCBjYWxsZWQgPSBmYWxzZTsKKyAgICBsZXQgc2VsZiA9IHRoaXM7CisgICAgbGV0IHRhcmdl
dCA9ICh4KSA9PiB7CisgICAgICAgIGFzc2VydCh0aGlzID09PSBzZWxmKTsKKyAgICAgICAgcmV0
dXJuIHg7CisgICAgfTsKKworICAgIGxldCBoYW5kbGVyID0geworICAgICAgICBhcHBseTogZnVu
Y3Rpb24odGhlVGFyZ2V0LCB0aGlzQXJnLCBhcmdBcnJheSkgeworICAgICAgICAgICAgY2FsbGVk
ID0gdHJ1ZTsKKyAgICAgICAgICAgIGFzc2VydCh0aGVUYXJnZXQgPT09IHRhcmdldCk7CisgICAg
ICAgICAgICByZXR1cm4gdGhlVGFyZ2V0LmFwcGx5KG51bGwsIGFyZ0FycmF5KTsKKyAgICAgICAg
fQorICAgIH07CisKKyAgICBsZXQgcHJveHkgPSBuZXcgUHJveHkodGFyZ2V0LCBoYW5kbGVyKTsK
KyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDUwMDsgaSsrKSB7CisgICAgICAgIGxldCByZXN1bHQg
PSBwcm94eShpKTsKKyAgICAgICAgYXNzZXJ0KHJlc3VsdCA9PT0gaSk7CisgICAgICAgIGNhbGxl
ZCA9IGZhbHNlOworICAgIH0KK30KKworeworICAgIGxldCBjYWxsZWQgPSBmYWxzZTsKKyAgICBs
ZXQgdGFyZ2V0ID0gKHgpID0+IHsgfTsKKyAgICBsZXQgZXJyb3IgPSBudWxsOworCisgICAgbGV0
IGhhbmRsZXIgPSB7CisgICAgICAgIGFwcGx5OiBmdW5jdGlvbih0aGVUYXJnZXQsIHRoaXNBcmcs
IGFyZ0FycmF5KSB7CisgICAgICAgICAgICBlcnJvciA9IG5ldyBFcnJvcigpOworICAgICAgICAg
ICAgdGhyb3cgZXJyb3I7CisgICAgICAgIH0KKyAgICB9OworCisgICAgbGV0IHByb3h5ID0gbmV3
IFByb3h5KHRhcmdldCwgaGFuZGxlcik7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MDA7IGkr
KykgeworICAgICAgICBsZXQgdGhyZXcgPSBmYWxzZTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAg
ICAgIHByb3h5KCk7CisgICAgICAgIH0gY2F0Y2goZSkgeworICAgICAgICAgICAgYXNzZXJ0KGUg
PT09IGVycm9yKTsKKyAgICAgICAgICAgIHRocmV3ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAg
ICBhc3NlcnQodGhyZXcpOworICAgIH0KK30KKworeworICAgIGxldCBjYWxsZWQgPSBmYWxzZTsK
KyAgICBsZXQgZXJyb3IgPSBudWxsOworICAgIGxldCB0YXJnZXQgPSAoeCkgPT4geworICAgICAg
ICBlcnJvciA9IG5ldyBFcnJvcigpOworICAgICAgICB0aHJvdyBlcnJvcjsKKyAgICB9OworCisg
ICAgbGV0IGhhbmRsZXIgPSB7CisgICAgICAgIGFwcGx5OiBmdW5jdGlvbih0aGVUYXJnZXQsIHRo
aXNBcmcsIGFyZ0FycmF5KSB7CisgICAgICAgICAgICBhc3NlcnQodGhlVGFyZ2V0ID09PSB0YXJn
ZXQpOworICAgICAgICAgICAgcmV0dXJuIHRoZVRhcmdldC5hcHBseShudWxsLCBhcmdBcnJheSk7
CisgICAgICAgIH0KKyAgICB9OworCisgICAgbGV0IHByb3h5ID0gbmV3IFByb3h5KHRhcmdldCwg
aGFuZGxlcik7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MDA7IGkrKykgeworICAgICAgICBs
ZXQgdGhyZXcgPSBmYWxzZTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHByb3h5KCk7Cisg
ICAgICAgIH0gY2F0Y2goZSkgeworICAgICAgICAgICAgYXNzZXJ0KGUgPT09IGVycm9yKTsKKyAg
ICAgICAgICAgIHRocmV3ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBhc3NlcnQodGhyZXcp
OworICAgIH0KK30KKworeworICAgIGxldCBjYWxsZWQgPSBmYWxzZTsKKyAgICBsZXQgZXJyb3Ig
PSBudWxsOworICAgIGxldCB0YXJnZXQgPSBuZXcgUHJveHkoKHgpID0+IHgsIHt9KTsKKworICAg
IGxldCBoYW5kbGVyID0geworICAgICAgICBhcHBseTogZnVuY3Rpb24odGhlVGFyZ2V0LCB0aGlz
QXJnLCBhcmdBcnJheSkgeworICAgICAgICAgICAgYXNzZXJ0KHRoZVRhcmdldCA9PT0gdGFyZ2V0
KTsKKyAgICAgICAgICAgIGNhbGxlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gdGhlVGFy
Z2V0LmFwcGx5KG51bGwsIGFyZ0FycmF5KTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBsZXQg
cHJveHkgPSBuZXcgUHJveHkodGFyZ2V0LCBoYW5kbGVyKTsKKyAgICBmb3IgKGxldCBpID0gMDsg
aSA8IDUwMDsgaSsrKSB7CisgICAgICAgIGFzc2VydChwcm94eShpKSA9PT0gaSk7CisgICAgICAg
IGFzc2VydChjYWxsZWQpOworICAgICAgICBjYWxsZWQgPSBmYWxzZTsKKyAgICB9Cit9Cg==
</data>
<flag name="review"
          id="296565"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271803</attachid>
            <date>2016-02-19 14:36:42 -0800</date>
            <delta_ts>2016-02-19 14:53:49 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>17752</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk2ODM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5IEBA
CisyMDE2LTAyLTE5ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFtFUzZdIEltcGxlbWVudCBQcm94eS5bW0NhbGxdXQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU0NDI1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTWFy
ayBMYW0uCisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyBhIHN0cmFpZ2h0IGZvcndhcmQgaW1wbGVt
ZW50YXRpb24gb2YKKyAgICAgICAgUHJveHkuW1tDYWxsXV0gd2l0aCByZXNwZWN0IHRvIHNlY3Rp
b24gOS41LjEyCisgICAgICAgIG9mIHRoZSBFQ01BU2NyaXB0IHNwZWMuCisgICAgICAgIGh0dHBz
Oi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXByb3h5LW9iamVjdC1pbnRlcm5hbC1tZXRo
b2RzLWFuZC1pbnRlcm5hbC1zbG90cy1jYWxsLXRoaXNhcmd1bWVudC1hcmd1bWVudHNsaXN0CisK
KyAgICAgICAgKiBydW50aW1lL1Byb3h5T2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6UHJveHlP
YmplY3Q6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6cGVyZm9ybVByb3h5R2V0KToK
KyAgICAgICAgKEpTQzo6UHJveHlPYmplY3Q6OnBlcmZvcm1JbnRlcm5hbE1ldGhvZEdldE93blBy
b3BlcnR5KToKKyAgICAgICAgKEpTQzo6UHJveHlPYmplY3Q6OnBlcmZvcm1IYXNQcm9wZXJ0eSk6
CisgICAgICAgIChKU0M6OlByb3h5T2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToK
KyAgICAgICAgKEpTQzo6cGVyZm9ybVByb3h5Q2FsbCk6CisgICAgICAgIChKU0M6OlByb3h5T2Jq
ZWN0OjpnZXRDYWxsRGF0YSk6CisgICAgICAgIChKU0M6OlByb3h5T2JqZWN0Ojp2aXNpdENoaWxk
cmVuKToKKyAgICAgICAgKiBydW50aW1lL1Byb3h5T2JqZWN0Lmg6CisgICAgICAgIChKU0M6OlBy
b3h5T2JqZWN0OjpjcmVhdGUpOgorICAgICAgICAqIHRlc3RzL2VzNi55YW1sOgorICAgICAgICAq
IHRlc3RzL3N0cmVzcy9wcm94eS1jYWxsLmpzOiBBZGRlZC4KKyAgICAgICAgKGFzc2VydCk6Cisg
ICAgICAgICh0aHJvdy5uZXcuRXJyb3IubGV0LnRhcmdldCk6CisgICAgICAgICh0aHJvdy5uZXcu
RXJyb3IubGV0LmhhbmRsZXIuYXBwbHkpOgorICAgICAgICAodGhyb3cubmV3LkVycm9yKToKKyAg
ICAgICAgKGFzc2VydC5sZXQudGFyZ2V0KToKKyAgICAgICAgKGFzc2VydC5sZXQuaGFuZGxlci5n
ZXQgYXBwbHkpOgorICAgICAgICAobGV0LnRhcmdldCk6CisgICAgICAgIChsZXQuaGFuZGxlci5h
cHBseSk6CisgICAgICAgIChpLmNhdGNoKToKKyAgICAgICAgKGFzc2VydC5sZXQuaGFuZGxlci5h
cHBseSk6CisKIDIwMTYtMDItMTkgIENzYWJhIE9zenRyb2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9y
Zz4KIAogICAgICAgICBSZW1vdmUgbW9yZSBMTFZNIHJlbGF0ZWQgZGVhZCBjb2RlIGFmdGVyIHIx
OTY3MjkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5T2JqZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9iamVj
dC5jcHAJKHJldmlzaW9uIDE5NjgzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Byb3h5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsMTEgQEAgdm9pZCBQ
cm94eU9iamVjdDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLAogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgbV90YXJnZXQuc2V0KHZtLCB0aGlzLCBqc0Nhc3Q8SlNPYmplY3QqPih0YXJnZXQp
KTsKKyAgICBDYWxsRGF0YSBpZ25vcmVkOworICAgIEpTT2JqZWN0KiB0YXJnZXRBc09iamVjdCA9
IGpzQ2FzdDxKU09iamVjdCo+KHRhcmdldCk7CisgICAgbV9pc0NhbGxhYmxlID0gdGFyZ2V0QXNP
YmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+Z2V0Q2FsbERhdGEodGFyZ2V0QXNPYmplY3QsIGlnbm9y
ZWQpICE9IENhbGxUeXBlTm9uZTsKKworICAgIG1fdGFyZ2V0LnNldCh2bSwgdGhpcywgdGFyZ2V0
QXNPYmplY3QpOwogICAgIG1faGFuZGxlci5zZXQodm0sIHRoaXMsIGhhbmRsZXIpOwogfQogCkBA
IC0xMDUsOCArMTA5LDYgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIHBlcmZvcm1Qcm94eUdldChF
eAogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKICAgICBhcmd1bWVudHMuYXBw
ZW5kKHRhcmdldCk7CiAgICAgYXJndW1lbnRzLmFwcGVuZChpZGVudGlmaWVyVG9TYWZlUHVibGlj
SlNWYWx1ZSh2bSwgSWRlbnRpZmllcjo6ZnJvbVVpZCgmdm0sIHByb3BlcnR5TmFtZS51aWQoKSkp
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXJndW1lbnRzLmFwcGVuZCh0aGlzT2JqZWN0
KTsKICAgICBKU1ZhbHVlIHRyYXBSZXN1bHQgPSBjYWxsKGV4ZWMsIGdldEhhbmRsZXIsIGNhbGxU
eXBlLCBjYWxsRGF0YSwgaGFuZGxlciwgYXJndW1lbnRzKTsKICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCkBAIC0xNTIsOCArMTU0LDYgQEAgYm9vbCBQcm94eU9iamVjdDo6cGVyZm9ybUlu
dGVybmFsTWV0aG9kRwogICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKICAgICBh
cmd1bWVudHMuYXBwZW5kKHRhcmdldCk7CiAgICAgYXJndW1lbnRzLmFwcGVuZChpZGVudGlmaWVy
VG9TYWZlUHVibGljSlNWYWx1ZSh2bSwgSWRlbnRpZmllcjo6ZnJvbVVpZCgmdm0sIHByb3BlcnR5
TmFtZS51aWQoKSkpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBKU1ZhbHVlIHRyYXBSZXN1bHQgPSBjYWxsKGV4ZWMsIGdldE93blBy
b3BlcnR5RGVzY3JpcHRvck1ldGhvZCwgY2FsbFR5cGUsIGNhbGxEYXRhLCBoYW5kbGVyLCBhcmd1
bWVudHMpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtMjM0LDggKzIzNCw2IEBAIGJvb2wgUHJveHlPYmplY3Q6OnBlcmZvcm1IYXNQcm9w
ZXJ0eShFeGUKICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CiAgICAgYXJndW1l
bnRzLmFwcGVuZCh0YXJnZXQpOwogICAgIGFyZ3VtZW50cy5hcHBlbmQoaWRlbnRpZmllclRvU2Fm
ZVB1YmxpY0pTVmFsdWUodm0sIElkZW50aWZpZXI6OmZyb21VaWQoJnZtLCBwcm9wZXJ0eU5hbWUu
dWlkKCkpKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgSlNWYWx1ZSB0cmFwUmVzdWx0ID0gY2FsbChleGVjLCBoYXNNZXRob2QsIGNh
bGxUeXBlLCBjYWxsRGF0YSwgaGFuZGxlciwgYXJndW1lbnRzKTsKICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTI5OCw2ICsyOTYsNTEgQEAg
Ym9vbCBQcm94eU9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbgogICAgIHJldHVybiB0aGlz
T2JqZWN0LT5nZXRPd25Qcm9wZXJ0eVNsb3RDb21tb24oZXhlYywgaWRlbnQuaW1wbCgpLCBzbG90
KTsKIH0KIAorc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcGVyZm9ybVByb3h5
Q2FsbChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBQ
cm94eU9iamVjdCogcHJveHkgPSBqc0Nhc3Q8UHJveHlPYmplY3QqPihleGVjLT5jYWxsZWUoKSk7
CisgICAgSlNWYWx1ZSBoYW5kbGVyVmFsdWUgPSBwcm94eS0+aGFuZGxlcigpOworICAgIGlmICho
YW5kbGVyVmFsdWUuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4
ZWMsIEFTQ0lJTGl0ZXJhbCgiUHJveHkgJ2hhbmRsZXInIGlzIG51bGwuIEl0IHNob3VsZCBiZSBh
biBPYmplY3QuIikpOworCisgICAgSlNPYmplY3QqIGhhbmRsZXIgPSBqc0Nhc3Q8SlNPYmplY3Qq
PihoYW5kbGVyVmFsdWUpOworICAgIENhbGxEYXRhIGNhbGxEYXRhOworICAgIENhbGxUeXBlIGNh
bGxUeXBlOworICAgIEpTVmFsdWUgYXBwbHlNZXRob2QgPSBoYW5kbGVyLT5nZXRNZXRob2QoZXhl
YywgY2FsbERhdGEsIGNhbGxUeXBlLCBtYWtlSWRlbnRpZmllcih2bSwgImFwcGx5IiksIEFTQ0lJ
TGl0ZXJhbCgiJ2FwcGx5JyBwcm9wZXJ0eSBvZiBhIFByb3h5J3MgaGFuZGxlciBzaG91bGQgYmUg
Y2FsbGFibGUuIikpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBKU09iamVjdCogdGFyZ2V0
ID0gcHJveHktPnRhcmdldCgpOworICAgIGlmIChhcHBseU1ldGhvZC5pc1VuZGVmaW5lZCgpKSB7
CisgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOworICAgICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9
IHRhcmdldC0+bWV0aG9kVGFibGUodm0pLT5nZXRDYWxsRGF0YSh0YXJnZXQsIGNhbGxEYXRhKTsK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbFR5cGUgIT0gQ2FsbFR5cGVOb25lKTsKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWxsKGV4ZWMsIHRhcmdldCwgY2FsbFR5cGUsIGNh
bGxEYXRhLCBleGVjLT50aGlzVmFsdWUoKSwgQXJnTGlzdChleGVjKSkpOworICAgIH0KKworICAg
IEpTQXJyYXkqIGFyZ0FycmF5ID0gY29uc3RydWN0QXJyYXkoZXhlYywgc3RhdGljX2Nhc3Q8QXJy
YXlBbGxvY2F0aW9uUHJvZmlsZSo+KG51bGxwdHIpLCBBcmdMaXN0KGV4ZWMpKTsKKyAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CisgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOworICAgIGFy
Z3VtZW50cy5hcHBlbmQodGFyZ2V0KTsKKyAgICBhcmd1bWVudHMuYXBwZW5kKGV4ZWMtPnRoaXNW
YWx1ZSgpKTsKKyAgICBhcmd1bWVudHMuYXBwZW5kKGFyZ0FycmF5KTsKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGNhbGwoZXhlYywgYXBwbHlNZXRob2QsIGNhbGxUeXBlLCBjYWxsRGF0YSwg
aGFuZGxlciwgYXJndW1lbnRzKSk7Cit9CisKK0NhbGxUeXBlIFByb3h5T2JqZWN0OjpnZXRDYWxs
RGF0YShKU0NlbGwqIGNlbGwsIENhbGxEYXRhJiBjYWxsRGF0YSkKK3sKKyAgICBQcm94eU9iamVj
dCogcHJveHkgPSBqc0Nhc3Q8UHJveHlPYmplY3QqPihjZWxsKTsKKyAgICBpZiAoIXByb3h5LT5t
X2lzQ2FsbGFibGUpIHsKKyAgICAgICAgY2FsbERhdGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlID0g
bnVsbHB0cjsKKyAgICAgICAgY2FsbERhdGEuanMuc2NvcGUgPSBudWxscHRyOworICAgICAgICBy
ZXR1cm4gQ2FsbFR5cGVOb25lOworICAgIH0KKworICAgIGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlv
biA9IHBlcmZvcm1Qcm94eUNhbGw7CisgICAgcmV0dXJuIENhbGxUeXBlSG9zdDsKK30KKwogdm9p
ZCBQcm94eU9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIFByb3h5T2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFByb3h5T2Jq
ZWN0Kj4oY2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm94eU9i
amVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3h5
T2JqZWN0LmgJKHJldmlzaW9uIDE5NjgzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Byb3h5T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAgY2xhc3Mg
UHJveHlPYmplY3QgOiBwdWJsaWMgSlNOb25GaW5hbE9iagogcHVibGljOgogICAgIHR5cGVkZWYg
SlNOb25GaW5hbE9iamVjdCBCYXNlOwogCi0gICAgY29uc3Qgc3RhdGljIHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0
eVNsb3Q7CisgICAgY29uc3Qgc3RhdGljIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6
U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBUeXBlT2ZTaG91
bGRDYWxsR2V0Q2FsbERhdGE7CiAKICAgICBzdGF0aWMgUHJveHlPYmplY3QqIGNyZWF0ZShFeGVj
U3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1ZhbHVlIHRhcmdldCwgSlNWYWx1
ZSBoYW5kbGVyKQogICAgIHsKQEAgLTYxLDYgKzYxLDcgQEAgcHJpdmF0ZToKIAogICAgIHN0YXRp
YyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90
QnlJbmRleChKU09iamVjdCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90Jik7CisgICAgc3RhdGljIENhbGxUeXBlIGdldENhbGxEYXRhKEpTQ2VsbCosIENh
bGxEYXRhJik7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOwogCiAgICAgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RDb21tb24oRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKQEAgLTY5LDYgKzcwLDcgQEAgcHJpdmF0ZToK
IAogICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4gbV90YXJnZXQ7CiAgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+IG1faGFuZGxlcjsKKyAgICBib29sIG1faXNDYWxsYWJsZSA6IDE7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9lczYu
eWFtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvZXM2LnlhbWwJ
KHJldmlzaW9uIDE5NjgzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9lczYueWFt
bAkod29ya2luZyBjb3B5KQpAQCAtOTA3LDcgKzkwNyw3IEBACiAtIHBhdGg6IGVzNi9wcm90b3R5
cGVfb2ZfYm91bmRfZnVuY3Rpb25zX3N1YmNsYXNzZXMuanMKICAgY21kOiBydW5FUzYgOmZhaWwK
IC0gcGF0aDogZXM2L1Byb3h5X2FwcGx5X2hhbmRsZXIuanMKLSAgY21kOiBydW5FUzYgOmZhaWwK
KyAgY21kOiBydW5FUzYgOm5vcm1hbAogLSBwYXRoOiBlczYvUHJveHlfQXJyYXkuaXNBcnJheV9z
dXBwb3J0LmpzCiAgIGNtZDogcnVuRVM2IDpmYWlsCiAtIHBhdGg6IGVzNi9Qcm94eV9jb25zdHJ1
Y3RfaGFuZGxlci5qcwpAQCAtOTc1LDcgKzk3NSw3IEBACiAtIHBhdGg6IGVzNi9Qcm94eV9pbnRl
cm5hbF9nZXRfY2FsbHNfRXJyb3IucHJvdG90eXBlLnRvU3RyaW5nLmpzCiAgIGNtZDogcnVuRVM2
IDpub3JtYWwKIC0gcGF0aDogZXM2L1Byb3h5X2ludGVybmFsX2dldF9jYWxsc19GdW5jdGlvbi5w
cm90b3R5cGUuYmluZC5qcwotICBjbWQ6IHJ1bkVTNiA6ZmFpbAorICBjbWQ6IHJ1bkVTNiA6bm9y
bWFsCiAtIHBhdGg6IGVzNi9Qcm94eV9pbnRlcm5hbF9nZXRfY2FsbHNfSGFzQmluZGluZy5qcwog
ICBjbWQ6IHJ1bkVTNiA6bm9ybWFsCiAtIHBhdGg6IGVzNi9Qcm94eV9pbnRlcm5hbF9nZXRfY2Fs
bHNfaW5zdGFuY2VvZl9vcGVyYXRvci5qcwpAQCAtMTAyMSw3ICsxMDIxLDcgQEAKIC0gcGF0aDog
ZXM2L1Byb3h5X2ludGVybmFsX2dldE93blByb3BlcnR5RGVzY3JpcHRvcl9jYWxsc19bW1NldF1d
LmpzCiAgIGNtZDogcnVuRVM2IDpmYWlsCiAtIHBhdGg6IGVzNi9Qcm94eV9pbnRlcm5hbF9nZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3JfY2FsbHNfRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuanMKLSAg
Y21kOiBydW5FUzYgOmZhaWwKKyAgY21kOiBydW5FUzYgOm5vcm1hbAogLSBwYXRoOiBlczYvUHJv
eHlfaW50ZXJuYWxfZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yX2NhbGxzX09iamVjdC5hc3NpZ24u
anMKICAgY21kOiBydW5FUzYgOmZhaWwKIC0gcGF0aDogZXM2L1Byb3h5X2ludGVybmFsX2dldE93
blByb3BlcnR5RGVzY3JpcHRvcl9jYWxsc19PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5
LmpzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3Byb3h5LWNhbGwu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9wcm94
eS1jYWxsLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0
cmVzcy9wcm94eS1jYWxsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzk0IEBACitmdW5j
dGlvbiBhc3NlcnQoYikgeworICAgIGlmICghYikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJC
YWQgYXNzZXJ0aW9uIik7Cit9CisKK3sKKyAgICBsZXQgdGFyZ2V0ID0gZnVuY3Rpb24gZm9vKC4u
LmFyZ3MpIHsKKyAgICAgICAgYXNzZXJ0KGFyZ3NbMF0gPT09IDEwKTsKKyAgICAgICAgYXNzZXJ0
KGFyZ3NbMV0gPT09IDIwKTsKKyAgICAgICAgcmV0dXJuICJmb28iOworICAgIH0KKyAgICBsZXQg
aGFuZGxlciA9IHsKKyAgICAgICAgYXBwbHk6IGZ1bmN0aW9uKHRoZVRhcmdldCwgdGhpc0FyZywg
YXJnQXJyYXkpIHsKKyAgICAgICAgICAgIGFzc2VydCh0aGVUYXJnZXQgPT09IHRhcmdldCk7Cisg
ICAgICAgICAgICBhc3NlcnQoYXJnQXJyYXlbMF0gPT09IDEwKTsKKyAgICAgICAgICAgIGFzc2Vy
dChhcmdBcnJheVsxXSA9PT0gMjApOworICAgICAgICAgICAgcmV0dXJuIHRoZVRhcmdldC5hcHBs
eSh0aGlzQXJnLCBhcmdBcnJheSk7CisgICAgICAgIH0KKyAgICB9OworICAgIGxldCBwcm94eSA9
IG5ldyBQcm94eSh0YXJnZXQsIGhhbmRsZXIpOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTAw
OyBpKyspIHsKKyAgICAgICAgYXNzZXJ0KHByb3h5KDEwLCAyMCkgPT09ICJmb28iKTsKKyAgICB9
Cit9CisKK3sKKyAgICBsZXQgdGFyZ2V0ID0gZnVuY3Rpb24gZm9vKCkgeyB9CisgICAgbGV0IGVy
cm9yID0gbnVsbDsKKyAgICBsZXQgaGFuZGxlciA9IHsKKyAgICAgICAgZ2V0IGFwcGx5KCkgewor
ICAgICAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoKTsKKyAgICAgICAgICAgIHRocm93IGVycm9y
OworICAgICAgICB9CisgICAgfTsKKyAgICBsZXQgcHJveHkgPSBuZXcgUHJveHkodGFyZ2V0LCBo
YW5kbGVyKTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDUwMDsgaSsrKSB7CisgICAgICAgIGxl
dCB0aHJldyA9IGZhbHNlOworICAgICAgICB0cnkgeworICAgICAgICAgICAgcHJveHkoMTAsIDIw
KTsKKyAgICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICAgICBhc3NlcnQoZSA9PT0gZXJyb3Ip
OworICAgICAgICAgICAgdGhyZXcgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGFzc2VydCh0
aHJldyk7CisgICAgfQorfQorCit7CisgICAgbGV0IGNhbGxlZCA9IGZhbHNlOworICAgIGxldCBn
bG9iYWxUaGlzID0gdGhpczsKKyAgICBsZXQgdGFyZ2V0ID0gZnVuY3Rpb24gZm9vKCkgeworICAg
ICAgICBhc3NlcnQodGhpcyA9PT0gZ2xvYmFsVGhpcyk7CisgICAgICAgIGNhbGxlZCA9IHRydWU7
CisgICAgfQorICAgIGxldCBoYW5kbGVyID0geworICAgICAgICBhcHBseTogbnVsbAorICAgIH07
CisKKyAgICBsZXQgcHJveHkgPSBuZXcgUHJveHkodGFyZ2V0LCBoYW5kbGVyKTsKKyAgICBmb3Ig
KGxldCBpID0gMDsgaSA8IDUwMDsgaSsrKSB7CisgICAgICAgIHByb3h5KCk7CisgICAgICAgIGFz
c2VydChjYWxsZWQpOworICAgICAgICBjYWxsZWQgPSBmYWxzZTsKKyAgICB9Cit9CisKK3sKKyAg
ICBsZXQgY2FsbGVkID0gZmFsc2U7CisgICAgbGV0IGdsb2JhbFRoaXMgPSB0aGlzOworICAgIGxl
dCB0YXJnZXQgPSBmdW5jdGlvbiBmb28oKSB7CisgICAgICAgIGFzc2VydCh0aGlzID09PSBnbG9i
YWxUaGlzKTsKKyAgICAgICAgY2FsbGVkID0gdHJ1ZTsKKyAgICB9CisgICAgbGV0IGhhbmRsZXIg
PSB7CisgICAgICAgIGFwcGx5OiB1bmRlZmluZWQKKyAgICB9OworCisgICAgbGV0IHByb3h5ID0g
bmV3IFByb3h5KHRhcmdldCwgaGFuZGxlcik7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MDA7
IGkrKykgeworICAgICAgICBwcm94eSgpOworICAgICAgICBhc3NlcnQoY2FsbGVkKTsKKyAgICAg
ICAgY2FsbGVkID0gZmFsc2U7CisgICAgfQorfQorCit7CisgICAgbGV0IGNhbGxlZCA9IGZhbHNl
OworICAgIGxldCB0aGlzVmFsdWUgPSB7fTsKKyAgICBsZXQgdGFyZ2V0ID0gZnVuY3Rpb24gZm9v
KHgsIHksIHopIHsKKyAgICAgICAgYXNzZXJ0KHRoaXMgPT09IHRoaXNWYWx1ZSk7CisgICAgICAg
IGFzc2VydCh4ID09PSAyMCk7CisgICAgICAgIGFzc2VydCh5ID09PSA0NSk7CisgICAgICAgIGFz
c2VydCh6ID09PSAiZm9vIik7CisgICAgICAgIGNhbGxlZCA9IHRydWU7CisgICAgfQorCisgICAg
bGV0IGhhbmRsZXIgPSB7CisgICAgICAgIGFwcGx5OiB1bmRlZmluZWQKKyAgICB9OworCisgICAg
bGV0IHByb3h5ID0gbmV3IFByb3h5KHRhcmdldCwgaGFuZGxlcik7CisgICAgZm9yIChsZXQgaSA9
IDA7IGkgPCA1MDA7IGkrKykgeworICAgICAgICBwcm94eS5jYWxsKHRoaXNWYWx1ZSwgMjAsIDQ1
LCAiZm9vIik7CisgICAgICAgIGFzc2VydChjYWxsZWQpOworICAgICAgICBjYWxsZWQgPSBmYWxz
ZTsKKyAgICAgICAgcHJveHkuYXBwbHkodGhpc1ZhbHVlLCBbMjAsIDQ1LCAiZm9vIl0pOworICAg
ICAgICBhc3NlcnQoY2FsbGVkKTsKKyAgICAgICAgY2FsbGVkID0gZmFsc2U7CisgICAgfQorfQor
Cit7CisgICAgbGV0IGNhbGxlZCA9IGZhbHNlOworICAgIGxldCB0aGlzVmFsdWUgPSB7fTsKKyAg
ICBsZXQgdGFyZ2V0ID0gZnVuY3Rpb24gZm9vKHgsIHksIHopIHsKKyAgICAgICAgYXNzZXJ0KHRo
aXMgPT09IHRoaXNWYWx1ZSk7CisgICAgICAgIGFzc2VydCh4ID09PSAyMCk7CisgICAgICAgIGFz
c2VydCh5ID09PSA0NSk7CisgICAgICAgIGFzc2VydCh6ID09PSAiZm9vIik7CisgICAgICAgIGNh
bGxlZCA9IHRydWU7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0KKworICAgIGxldCBoYW5k
bGVyID0geworICAgICAgICBhcHBseTogZnVuY3Rpb24odGhlVGFyZ2V0LCB0aGlzQXJnLCBhcmdB
cnJheSkgeworICAgICAgICAgICAgYXNzZXJ0KHRoZVRhcmdldCA9PT0gdGFyZ2V0KTsKKyAgICAg
ICAgICAgIGFzc2VydChhcmdBcnJheVswXSA9PT0gMjApOworICAgICAgICAgICAgYXNzZXJ0KGFy
Z0FycmF5WzFdID09PSA0NSk7CisgICAgICAgICAgICBhc3NlcnQoYXJnQXJyYXlbMl0gPT09ICJm
b28iKTsKKyAgICAgICAgICAgIGFzc2VydCh0aGlzQXJnID09PSB0aGlzVmFsdWUpOworICAgICAg
ICAgICAgcmV0dXJuIHRoZVRhcmdldC5hcHBseSh0aGlzQXJnLCBhcmdBcnJheSk7CisgICAgICAg
IH0KKyAgICB9OworCisgICAgbGV0IHByb3h5ID0gbmV3IFByb3h5KHRhcmdldCwgaGFuZGxlcik7
CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MDA7IGkrKykgeworICAgICAgICBhc3NlcnQocHJv
eHkuY2FsbCh0aGlzVmFsdWUsIDIwLCA0NSwgImZvbyIpID09PSB0aGlzVmFsdWUpOworICAgICAg
ICBhc3NlcnQoY2FsbGVkKTsKKyAgICAgICAgY2FsbGVkID0gZmFsc2U7CisgICAgICAgIGFzc2Vy
dChwcm94eS5hcHBseSh0aGlzVmFsdWUsIFsyMCwgNDUsICJmb28iXSkgPT09IHRoaXNWYWx1ZSk7
CisgICAgICAgIGFzc2VydChjYWxsZWQpOworICAgICAgICBjYWxsZWQgPSBmYWxzZTsKKyAgICB9
Cit9CisKK3sKKyAgICBsZXQgY2FsbGVkID0gZmFsc2U7CisgICAgbGV0IHRhcmdldCA9IEVycm9y
OworCisgICAgbGV0IGhhbmRsZXIgPSB7CisgICAgICAgIGFwcGx5OiBmdW5jdGlvbih0aGVUYXJn
ZXQsIHRoaXNBcmcsIGFyZ0FycmF5KSB7CisgICAgICAgICAgICBjYWxsZWQgPSB0cnVlOworICAg
ICAgICAgICAgYXNzZXJ0KHRoZVRhcmdldCA9PT0gRXJyb3IpOworICAgICAgICAgICAgcmV0dXJu
IHRoZVRhcmdldC5hcHBseSh0aGlzQXJnLCBhcmdBcnJheSk7CisgICAgICAgIH0KKyAgICB9Owor
CisgICAgbGV0IHByb3h5ID0gbmV3IFByb3h5KHRhcmdldCwgaGFuZGxlcik7CisgICAgZm9yIChs
ZXQgaSA9IDA7IGkgPCA1MDA7IGkrKykgeworICAgICAgICBsZXQgZXJyb3IgPSBwcm94eSgpOwor
ICAgICAgICBhc3NlcnQoISFlcnJvci5zdGFjayk7CisgICAgICAgIGNhbGxlZCA9IGZhbHNlOwor
ICAgIH0KK30KKworeworICAgIGxldCBjYWxsZWQgPSBmYWxzZTsKKyAgICBsZXQgc2VsZiA9IHRo
aXM7CisgICAgbGV0IHRhcmdldCA9ICh4KSA9PiB7CisgICAgICAgIGNhbGxlZCA9IHRydWU7Cisg
ICAgICAgIGFzc2VydCh0aGlzID09PSBzZWxmKTsKKyAgICAgICAgcmV0dXJuIHg7CisgICAgfTsK
KworICAgIGxldCBoYW5kbGVyID0geyB9OworCisgICAgbGV0IHByb3h5ID0gbmV3IFByb3h5KHRh
cmdldCwgaGFuZGxlcik7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MDA7IGkrKykgeworICAg
ICAgICBsZXQgcmVzdWx0ID0gcHJveHkoaSk7CisgICAgICAgIGFzc2VydChyZXN1bHQgPT09IGkp
OworICAgICAgICBjYWxsZWQgPSBmYWxzZTsKKyAgICB9Cit9CisKK3sKKyAgICBsZXQgY2FsbGVk
ID0gZmFsc2U7CisgICAgbGV0IHNlbGYgPSB0aGlzOworICAgIGxldCB0YXJnZXQgPSAoeCkgPT4g
eworICAgICAgICBhc3NlcnQodGhpcyA9PT0gc2VsZik7CisgICAgICAgIHJldHVybiB4OworICAg
IH07CisKKyAgICBsZXQgaGFuZGxlciA9IHsKKyAgICAgICAgYXBwbHk6IGZ1bmN0aW9uKHRoZVRh
cmdldCwgdGhpc0FyZywgYXJnQXJyYXkpIHsKKyAgICAgICAgICAgIGNhbGxlZCA9IHRydWU7Cisg
ICAgICAgICAgICBhc3NlcnQodGhlVGFyZ2V0ID09PSB0YXJnZXQpOworICAgICAgICAgICAgcmV0
dXJuIHRoZVRhcmdldC5hcHBseSh0aGlzQXJnLCBhcmdBcnJheSk7CisgICAgICAgIH0KKyAgICB9
OworCisgICAgbGV0IHByb3h5ID0gbmV3IFByb3h5KHRhcmdldCwgaGFuZGxlcik7CisgICAgZm9y
IChsZXQgaSA9IDA7IGkgPCA1MDA7IGkrKykgeworICAgICAgICBsZXQgcmVzdWx0ID0gcHJveHko
aSk7CisgICAgICAgIGFzc2VydChyZXN1bHQgPT09IGkpOworICAgICAgICBjYWxsZWQgPSBmYWxz
ZTsKKyAgICB9Cit9CisKK3sKKyAgICBsZXQgY2FsbGVkID0gZmFsc2U7CisgICAgbGV0IHNlbGYg
PSB0aGlzOworICAgIGxldCB0YXJnZXQgPSAoeCkgPT4geworICAgICAgICBhc3NlcnQodGhpcyA9
PT0gc2VsZik7CisgICAgICAgIHJldHVybiB4OworICAgIH07CisKKyAgICBsZXQgaGFuZGxlciA9
IHsKKyAgICAgICAgYXBwbHk6IGZ1bmN0aW9uKHRoZVRhcmdldCwgdGhpc0FyZywgYXJnQXJyYXkp
IHsKKyAgICAgICAgICAgIGNhbGxlZCA9IHRydWU7CisgICAgICAgICAgICBhc3NlcnQodGhlVGFy
Z2V0ID09PSB0YXJnZXQpOworICAgICAgICAgICAgcmV0dXJuIHRoZVRhcmdldC5hcHBseShudWxs
LCBhcmdBcnJheSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgbGV0IHByb3h5ID0gbmV3IFBy
b3h5KHRhcmdldCwgaGFuZGxlcik7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MDA7IGkrKykg
eworICAgICAgICBsZXQgcmVzdWx0ID0gcHJveHkoaSk7CisgICAgICAgIGFzc2VydChjYWxsZWQp
OworICAgICAgICBhc3NlcnQocmVzdWx0ID09PSBpKTsKKyAgICAgICAgY2FsbGVkID0gZmFsc2U7
CisgICAgfQorfQorCit7CisgICAgbGV0IGNhbGxlZCA9IGZhbHNlOworICAgIGxldCB0YXJnZXQg
PSAoeCkgPT4geyB9OworICAgIGxldCBlcnJvciA9IG51bGw7CisKKyAgICBsZXQgaGFuZGxlciA9
IHsKKyAgICAgICAgYXBwbHk6IGZ1bmN0aW9uKHRoZVRhcmdldCwgdGhpc0FyZywgYXJnQXJyYXkp
IHsKKyAgICAgICAgICAgIGVycm9yID0gbmV3IEVycm9yKCk7CisgICAgICAgICAgICB0aHJvdyBl
cnJvcjsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBsZXQgcHJveHkgPSBuZXcgUHJveHkodGFy
Z2V0LCBoYW5kbGVyKTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDUwMDsgaSsrKSB7CisgICAg
ICAgIGxldCB0aHJldyA9IGZhbHNlOworICAgICAgICB0cnkgeworICAgICAgICAgICAgcHJveHko
KTsKKyAgICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICAgICBhc3NlcnQoZSA9PT0gZXJyb3Ip
OworICAgICAgICAgICAgdGhyZXcgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGFzc2VydCh0
aHJldyk7CisgICAgfQorfQorCit7CisgICAgbGV0IGNhbGxlZCA9IGZhbHNlOworICAgIGxldCBl
cnJvciA9IG51bGw7CisgICAgbGV0IHRhcmdldCA9ICh4KSA9PiB7CisgICAgICAgIGVycm9yID0g
bmV3IEVycm9yKCk7CisgICAgICAgIHRocm93IGVycm9yOworICAgIH07CisKKyAgICBsZXQgaGFu
ZGxlciA9IHsKKyAgICAgICAgYXBwbHk6IGZ1bmN0aW9uKHRoZVRhcmdldCwgdGhpc0FyZywgYXJn
QXJyYXkpIHsKKyAgICAgICAgICAgIGFzc2VydCh0aGVUYXJnZXQgPT09IHRhcmdldCk7CisgICAg
ICAgICAgICByZXR1cm4gdGhlVGFyZ2V0LmFwcGx5KG51bGwsIGFyZ0FycmF5KTsKKyAgICAgICAg
fQorICAgIH07CisKKyAgICBsZXQgcHJveHkgPSBuZXcgUHJveHkodGFyZ2V0LCBoYW5kbGVyKTsK
KyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDUwMDsgaSsrKSB7CisgICAgICAgIGxldCB0aHJldyA9
IGZhbHNlOworICAgICAgICB0cnkgeworICAgICAgICAgICAgcHJveHkoKTsKKyAgICAgICAgfSBj
YXRjaChlKSB7CisgICAgICAgICAgICBhc3NlcnQoZSA9PT0gZXJyb3IpOworICAgICAgICAgICAg
dGhyZXcgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGFzc2VydCh0aHJldyk7CisgICAgfQor
fQorCit7CisgICAgbGV0IGNhbGxlZCA9IGZhbHNlOworICAgIGxldCBlcnJvciA9IG51bGw7Cisg
ICAgbGV0IHRhcmdldCA9IG5ldyBQcm94eSgoeCkgPT4geCwge30pOworCisgICAgbGV0IGhhbmRs
ZXIgPSB7CisgICAgICAgIGFwcGx5OiBmdW5jdGlvbih0aGVUYXJnZXQsIHRoaXNBcmcsIGFyZ0Fy
cmF5KSB7CisgICAgICAgICAgICBhc3NlcnQodGhlVGFyZ2V0ID09PSB0YXJnZXQpOworICAgICAg
ICAgICAgY2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiB0aGVUYXJnZXQuYXBwbHko
bnVsbCwgYXJnQXJyYXkpOworICAgICAgICB9CisgICAgfTsKKworICAgIGxldCBwcm94eSA9IG5l
dyBQcm94eSh0YXJnZXQsIGhhbmRsZXIpOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTAwOyBp
KyspIHsKKyAgICAgICAgYXNzZXJ0KHByb3h5KGkpID09PSBpKTsKKyAgICAgICAgYXNzZXJ0KGNh
bGxlZCk7CisgICAgICAgIGNhbGxlZCA9IGZhbHNlOworICAgIH0KK30KKworeworICAgIGxldCB0
YXJnZXQgPSAoeCkgPT4geDsKKyAgICBsZXQgaGFuZGxlciA9IHsKKyAgICAgICAgYXBwbHk6IGZ1
bmN0aW9uKHRoZVRhcmdldCwgdGhpc0FyZywgYXJnQXJyYXkpIHsKKyAgICAgICAgICAgIHJldHVy
biB0aGVUYXJnZXQuYXBwbHkodGhpc0FyZywgYXJnQXJyYXkpOworICAgICAgICB9CisgICAgfTsK
KyAgICBsZXQgcHJveHkgPSBuZXcgUHJveHkodGFyZ2V0LCBoYW5kbGVyKTsKKyAgICBmb3IgKGxl
dCBpID0gMDsgaSA8IDUwMDsgaSsrKSB7CisgICAgICAgIGFzc2VydCh0eXBlb2YgcHJveHkgPT09
ICJmdW5jdGlvbiIpOworICAgIH0KK30KKworeworICAgIGxldCB0YXJnZXQgPSBmdW5jdGlvbigp
IHsgfQorICAgIGxldCBoYW5kbGVyID0geworICAgICAgICBhcHBseTogZnVuY3Rpb24odGhlVGFy
Z2V0LCB0aGlzQXJnLCBhcmdBcnJheSkgeworICAgICAgICAgICAgcmV0dXJuIHRoZVRhcmdldC5h
cHBseSh0aGlzQXJnLCBhcmdBcnJheSk7CisgICAgICAgIH0KKyAgICB9OworICAgIGxldCBwcm94
eSA9IG5ldyBQcm94eSh0YXJnZXQsIGhhbmRsZXIpOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwg
NTAwOyBpKyspIHsKKyAgICAgICAgYXNzZXJ0KHR5cGVvZiBwcm94eSA9PT0gImZ1bmN0aW9uIik7
CisgICAgfQorfQorCit7CisgICAgbGV0IHRhcmdldCA9IEVycm9yOworICAgIGxldCBoYW5kbGVy
ID0geworICAgICAgICBhcHBseTogZnVuY3Rpb24odGhlVGFyZ2V0LCB0aGlzQXJnLCBhcmdBcnJh
eSkgeworICAgICAgICAgICAgcmV0dXJuIHRoZVRhcmdldC5hcHBseSh0aGlzQXJnLCBhcmdBcnJh
eSk7CisgICAgICAgIH0KKyAgICB9OworICAgIGxldCBwcm94eSA9IG5ldyBQcm94eSh0YXJnZXQs
IGhhbmRsZXIpOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTAwOyBpKyspIHsKKyAgICAgICAg
YXNzZXJ0KHR5cGVvZiBwcm94eSA9PT0gImZ1bmN0aW9uIik7CisgICAgfQorfQorCit7CisgICAg
bGV0IHRhcmdldCA9IChmdW5jdGlvbiBmb28oKSB7IH0pLmJpbmQoe30pOworICAgIGxldCBoYW5k
bGVyID0geworICAgICAgICBhcHBseTogZnVuY3Rpb24odGhlVGFyZ2V0LCB0aGlzQXJnLCBhcmdB
cnJheSkgeworICAgICAgICAgICAgcmV0dXJuIHRoZVRhcmdldC5hcHBseSh0aGlzQXJnLCBhcmdB
cnJheSk7CisgICAgICAgIH0KKyAgICB9OworICAgIGxldCBwcm94eSA9IG5ldyBQcm94eSh0YXJn
ZXQsIGhhbmRsZXIpOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTAwOyBpKyspIHsKKyAgICAg
ICAgYXNzZXJ0KHR5cGVvZiBwcm94eSA9PT0gImZ1bmN0aW9uIik7CisgICAgfQorfQorCit7Cisg
ICAgbGV0IHRhcmdldCA9IGZ1bmN0aW9uKCkgeyB9OworICAgIGxldCBoYW5kbGVyID0ge307Cisg
ICAgbGV0IHByb3h5ID0gbmV3IFByb3h5KHRhcmdldCwgaGFuZGxlcik7CisgICAgZm9yIChsZXQg
aSA9IDA7IGkgPCA1MDA7IGkrKykgeworICAgICAgICBhc3NlcnQodHlwZW9mIHByb3h5ID09PSAi
ZnVuY3Rpb24iKTsKKyAgICB9Cit9CisKK3sKKyAgICBsZXQgdGFyZ2V0ID0ge307CisgICAgbGV0
IGhhbmRsZXIgPSB7fTsKKyAgICBsZXQgcHJveHkgPSBuZXcgUHJveHkodGFyZ2V0LCBoYW5kbGVy
KTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDUwMDsgaSsrKSB7CisgICAgICAgIGFzc2VydCh0
eXBlb2YgcHJveHkgPT09ICJvYmplY3QiKTsKKyAgICB9Cit9CisKK3sKKyAgICBsZXQgdGFyZ2V0
ID0gW107CisgICAgbGV0IGhhbmRsZXIgPSB7fTsKKyAgICBsZXQgcHJveHkgPSBuZXcgUHJveHko
dGFyZ2V0LCBoYW5kbGVyKTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDUwMDsgaSsrKSB7Cisg
ICAgICAgIGFzc2VydCh0eXBlb2YgcHJveHkgPT09ICJvYmplY3QiKTsKKyAgICB9Cit9CisKK3sK
KyAgICBsZXQgdGFyZ2V0ID0gbmV3IFN0cmluZygiZm9vIik7CisgICAgbGV0IGhhbmRsZXIgPSB7
fTsKKyAgICBsZXQgcHJveHkgPSBuZXcgUHJveHkodGFyZ2V0LCBoYW5kbGVyKTsKKyAgICBmb3Ig
KGxldCBpID0gMDsgaSA8IDUwMDsgaSsrKSB7CisgICAgICAgIGFzc2VydCh0eXBlb2YgcHJveHkg
PT09ICJvYmplY3QiKTsKKyAgICB9Cit9Cg==
</data>
<flag name="review"
          id="296626"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
      

    </bug>

</bugzilla>