<?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>28018</bug_id>
          
          <creation_ts>2009-08-05 06:11:49 -0700</creation_ts>
          <short_desc>Need to implement Canvas3d/WebGL for 3D rendering</short_desc>
          <delta_ts>2009-11-06 16:54:18 -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>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Marrin">cmarrin</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>dino</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>fishd</cc>
    
    <cc>hyatt</cc>
    
    <cc>kbr</cc>
    
    <cc>krit</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>mario.bensi</cc>
    
    <cc>ml</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>vangelis</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>137300</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-08-05 06:11:49 -0700</bug_when>
    <thetext>This bug is the placeholder for the WebGL patches. WebGL is a Khronos effort to add a 3D rendering context to the Canvas element. The API is compatible with OpenGL ES 2.0. The spec is not yet public, so this implementation is subject to change as the spec evolves. The first implementation will be a fairly complete implementation of ES 2.0, and will support Image and Canvas image sources.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137333</commentid>
    <comment_count>1</comment_count>
      <attachid>34145</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-08-05 10:24:08 -0700</bug_when>
    <thetext>Created attachment 34145
Patch 1 of 4: Add ENABLE_3D_CANVAS flag to the build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137337</commentid>
    <comment_count>2</comment_count>
      <attachid>34146</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-08-05 10:36:53 -0700</bug_when>
    <thetext>Created attachment 34146
Patch 2 of 4: New Canvas 3D files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137344</commentid>
    <comment_count>3</comment_count>
      <attachid>34149</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-08-05 10:51:27 -0700</bug_when>
    <thetext>Created attachment 34149
Patch 3 of 4: Adding new files to the build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137347</commentid>
    <comment_count>4</comment_count>
      <attachid>34151</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-08-05 11:03:43 -0700</bug_when>
    <thetext>Created attachment 34151
Patch 4 of 4: Connect everything up</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137349</commentid>
    <comment_count>5</comment_count>
      <attachid>34145</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-08-05 11:11:13 -0700</bug_when>
    <thetext>Comment on attachment 34145
Patch 1 of 4: Add ENABLE_3D_CANVAS flag to the build

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137368</commentid>
    <comment_count>6</comment_count>
      <attachid>34146</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-08-05 12:11:48 -0700</bug_when>
    <thetext>Comment on attachment 34146
Patch 2 of 4: New Canvas 3D files


&gt; +static inline PassRefPtr&lt;CanvasNumberArray&gt; toCanvasNumberArray(JSC::ExecState* exec, const JSValue&amp; value)
This is fairly inefficient, and will allow non-array types, eg:
toCanvasArray({length:5}) will produce a CanvasFloatArray of 5 NaNs

&gt; +{
&gt; +    if (!value.isObject())
&gt; +        return 0;
&gt; +        
&gt; +    JSObject* array = asObject(value);
&gt; +    int length = array-&gt;get(exec, Identifier(exec, &quot;length&quot;)).toInt32(exec);
&gt; +    RefPtr&lt;CanvasNumberArray&gt; numberArray = CanvasNumberArray::create(length);
&gt; +    for (int i = 0; i &lt; length; ++i) {
&gt; +        float value = array-&gt;get(exec, i).toFloat(exec);
Because this is a generic accessor function (and because toFloat may throw) you need:
JSValue v = array-&gt;get(exec, i);
if (exec-&gt;hadException())
    return 0;
float value = v.toFloat(exec);
if (exec-&gt;hadException())
    return 0;

&gt; +        numberArray-&gt;data()[i] = value;
&gt; +    }
&gt; +    
&gt; +    return numberArray;
&gt; +}

If you disallow non-array types (i&apos;m not sure if you want to do this or not) then you can devirtualise and remove the get

&gt; +
&gt; +JSValue JSCanvasRenderingContext3D::glBufferData(JSC::ExecState* exec, JSC::ArgList const&amp; args)
&gt; +{
&gt; +    unsigned target = args.at(0).toInt32(exec);
&gt; +    unsigned usage = args.at(2).toInt32(exec);
These may throw -- and the values are untrusted (they may not even be present)
&gt; +    RefPtr&lt;CanvasNumberArray&gt; numberArray = toCanvasNumberArray(exec, args.at(1));
numberArray may be null where is this handled?

&gt; +
&gt; +JSValue JSCanvasRenderingContext3D::glBufferSubData(JSC::ExecState* exec, JSC::ArgList const&amp; args)
&gt; +{
&gt; +    unsigned target = args.at(0).toInt32(exec);
&gt; +    unsigned offset = args.at(1).toInt32(exec);
ditto

&gt; +JSValue JSCanvasRenderingContext3D::glVertexAttrib(JSC::ExecState* exec, JSC::ArgList const&amp; args)
&gt; +{
&gt; +    unsigned indx = args.at(0).toInt32(exec);
ditto

&gt; +// void glVertexAttribPointer (in unsigned long indx, in long size, in unsigned long type, in boolean normalized, in unsigned long stride, in CanvasNumberArray array);
&gt; +JSValue JSCanvasRenderingContext3D::glVertexAttribPointer(JSC::ExecState* exec, JSC::ArgList const&amp; args)
&gt; +{
&gt; +    unsigned indx = args.at(0).toInt32(exec);
&gt; +    unsigned size = args.at(1).toInt32(exec);
&gt; +    unsigned type = args.at(2).toInt32(exec);
&gt; +    unsigned normalized = args.at(3).toInt32(exec);
&gt; +    bool stride = args.at(4).toBoolean(exec);
ditto

&gt; +JSValue JSCanvasRenderingContext3D::glUniformMatrix(JSC::ExecState* exec, JSC::ArgList const&amp; args)
&gt; +{
&gt; +    unsigned location = args.at(0).toInt32(exec);
&gt; +    unsigned count = args.at(1).toInt32(exec);
&gt; +    bool transpose = args.at(2).toBoolean(exec);
&gt; +
ditto

&gt; +    if (!args.at(3).isObject())
&gt; +        return jsUndefined();
&gt; +        
&gt; +    WebKitCSSMatrix* matrix = toWebKitCSSMatrix(args.at(3));
&gt; +    if (matrix)
&gt; +        impl()-&gt;glUniformMatrix(location, transpose, matrix);
&gt; +    else {
&gt; +        JSObject* array = asObject(args.at(3));
Same as before are you sure we want to allow non-array arguments?

&gt; +JSValue JSCanvasRenderingContext3D::glUniformf(JSC::ExecState* exec, JSC::ArgList const&amp; args)
&gt; +{
&gt; +    unsigned location = args.at(0).toInt32(exec);
&gt; +    
&gt; +    switch(args.size()) {
&gt; +        case 2:
&gt; +            if (args.at(1).isObject()) {
&gt; +                RefPtr&lt;CanvasNumberArray&gt; numberArray = toCanvasNumberArray(exec, args.at(1));
&gt; +                impl()-&gt;glUniform(location, numberArray.get());
&gt; +            }
&gt; +            else
&gt; +                impl()-&gt;glUniform(location, (float) args.at(1).toNumber(exec));
toNumber may throw, should be using a C++ cast (woo! a style comment! that&apos;ll annoy smfr :D)

&gt; +            break;
&gt; +        case 3: 
&gt; +            impl()-&gt;glUniform(location, (float) args.at(1).toNumber(exec),
&gt; +                                        (float) args.at(2).toNumber(exec)); 
&gt; +            break;
&gt; +        case 4: 
&gt; +            impl()-&gt;glUniform(location, (float) args.at(1).toNumber(exec),
&gt; +                                        (float) args.at(2).toNumber(exec),
&gt; +                                        (float) args.at(3).toNumber(exec)); 
&gt; +            break;
&gt; +        case 5: 
&gt; +            impl()-&gt;glUniform(location, (float) args.at(1).toNumber(exec),
&gt; +                                        (float) args.at(2).toNumber(exec),
&gt; +                                        (float) args.at(3).toNumber(exec),
&gt; +                                        (float) args.at(4).toNumber(exec)); 
&gt; +            break;

You should probably throw an exception if the numbe rof arguments doesn&apos;t match any expected count.

&gt; +JSValue JSCanvasRenderingContext3D::glUniformi(JSC::ExecState* exec, JSC::ArgList const&amp; args)
&gt; +{
Same as before, i really wish we have auto codegen for variadic arguments

&gt; +JSValue JSCanvasRenderingContext3D::glDrawElements(JSC::ExecState* exec, JSC::ArgList const&amp; args)
&gt; +{
&gt; +    unsigned mode = args.at(0).toInt32(exec);
&gt; +    unsigned type = args.at(1).toInt32(exec);
&gt; +    
&gt; +    unsigned int count = 0;
&gt; +    
&gt; +    // If the third param is not an object, it is a number, which is the count.
&gt; +    // In this case if there is a 4th param, it is the offset. If there is no
&gt; +    // 4th param, the offset is 0
&gt; +    if (!args.at(2).isObject()) {
&gt; +        count = args.at(2).toInt32(exec);
&gt; +        unsigned int offset = (args.size() &gt; 3) ? args.at(3).toInt32(exec) : 0;
&gt; +        impl()-&gt;glDrawElements(mode, count, type, (void*) offset);
&gt; +    } else {
&gt; +        void* passedIndices = 0;
passedIndices should just be an OwnFastMallocPtr, and you should use fastMalloc in place of malloc.
It would be better if you used tryFastMalloc, and null check the result so we don&apos;t crash if malloc fails.

&gt; +        JSObject* array = asObject(args.at(2));
&gt; +        count = array-&gt;get(exec, Identifier(exec, &quot;length&quot;)).toInt32(exec);
&gt; +
&gt; +        if (type == GL_UNSIGNED_BYTE) {
&gt; +            unsigned char* indices = (unsigned char*) malloc(count * sizeof(unsigned short));
fastmAlloc should be used instead of malloc, also should use c style cast.

&gt; +        } else if (type == GL_UNSIGNED_SHORT) {
&gt; +            unsigned short* indices = (unsigned short*) malloc(count * sizeof(unsigned short));
ditto
&gt; +        } else
TypeError should be thrown on argument mismatch
&gt; +            return jsUndefined();
&gt; +            
&gt; +        impl()-&gt;glDrawElements(mode, count, type, passedIndices);
&gt; +        free(passedIndices);
OwnFastMallocPtr saves manually calling free
&gt; +    }
&gt; +
&gt; +    return jsUndefined();
&gt; +}
&gt; +
&gt; +// void texImage2DHTML(in unsigned long target, in unsigned long level, in HTMLImageElement image);
&gt; +JSValue JSCanvasRenderingContext3D::texImage2D(ExecState* exec, const ArgList&amp; args)
&gt; +{ 
&gt; +    CanvasRenderingContext3D* context = impl();
&gt; +    unsigned target = args.at(0).toInt32(exec);
&gt; +    unsigned level = args.at(1).toInt32(exec);
exception and untrusted args again
&gt; +    
&gt; +    // The image parameter can be a &lt;img&gt; or &lt;canvas&gt; element.
&gt; +    JSValue value = args.at(2);
&gt; +    if (!value.isObject())
&gt; +        return throwError(exec, TypeError);
&gt; +    JSObject* o = asObject(value);
&gt; +    
&gt; +    ExceptionCode ec = 0;
&gt; +    if (o-&gt;inherits(&amp;JSHTMLImageElement::s_info)) {
&gt; +        HTMLImageElement* imgElt = static_cast&lt;HTMLImageElement*&gt;(static_cast&lt;JSHTMLElement*&gt;(o)-&gt;impl());
&gt; +        context-&gt;texImage2D(target, level, imgElt, ec);
&gt; +    } else if (o-&gt;inherits(&amp;JSHTMLCanvasElement::s_info)) {
&gt; +        HTMLCanvasElement* canvas = static_cast&lt;HTMLCanvasElement*&gt;(static_cast&lt;JSHTMLElement*&gt;(o)-&gt;impl());
&gt; +        context-&gt;texImage2D(target, level, canvas, ec);
&lt;video&gt; should also be allowed here

&gt; +// void texSubImage2DHTML(in unsigned long target, in unsigned long level, in unsigned long xoff, in unsigned long yoff, in unsigned long width, in unsigned long height, in HTMLImageElement image);
&gt; +JSValue JSCanvasRenderingContext3D::texSubImage2D(ExecState* exec, const ArgList&amp; args)
&gt; +{ 
&gt; +    CanvasRenderingContext3D* context = impl();
&gt; +    unsigned target = args.at(0).toInt32(exec);
&gt; +    unsigned level = args.at(1).toInt32(exec);
&gt; +    unsigned xoff = args.at(2).toInt32(exec);
&gt; +    unsigned yoff = args.at(3).toInt32(exec);
&gt; +    unsigned width = args.at(4).toInt32(exec);
&gt; +    unsigned height = args.at(5).toInt32(exec);
ditto
&gt; +    
&gt; +    ExceptionCode ec = 0;
&gt; +    if (o-&gt;inherits(&amp;JSHTMLImageElement::s_info)) {
&gt; +        HTMLImageElement* imgElt = static_cast&lt;HTMLImageElement*&gt;(static_cast&lt;JSHTMLElement*&gt;(o)-&gt;impl());
&gt; +        context-&gt;texSubImage2D(target, level, xoff, yoff, width, height, imgElt, ec);
&gt; +    } else if (o-&gt;inherits(&amp;JSHTMLCanvasElement::s_info)) {
&gt; +        HTMLCanvasElement* canvas = static_cast&lt;HTMLCanvasElement*&gt;(static_cast&lt;JSHTMLElement*&gt;(o)-&gt;impl());
&gt; +        context-&gt;texSubImage2D(target, level, xoff, yoff, width, height, canvas, ec);
ditto


&gt; +JSValue JSHTMLCanvasElement::getContext(JSC::ExecState* exec, JSC::ArgList const&amp; args)
&gt; +{
&gt; +    HTMLCanvasElement* imp = static_cast&lt;HTMLCanvasElement*&gt;(impl());
&gt; +    const UString&amp; contextId = args.at(0).toString(exec);
&gt; +
&gt; +    JSValue result = jsUndefined();
&gt; +    
&gt; +    if (contextId == &quot;2d&quot;)
&gt; +        result = toJS(exec, WTF::getPtr(reinterpret_cast&lt;CanvasRenderingContext2D*&gt;(imp-&gt;getContext(contextId))));
&gt; +#if ENABLE(3D_CANVAS)
&gt; +    else if (contextId == &quot;webkit-3d&quot;)
&gt; +        result = toJS(exec, WTF::getPtr(reinterpret_cast&lt;CanvasRenderingContext3D*&gt;(imp-&gt;getContext(contextId))));
&gt; +#endif
&gt; +    
&gt; +    return result;
&gt; +}
This makes me sad, we should probably make toJS(CanvasRenderingContext*) do the coercion there, rather than making this a custom binding.

&gt; Index: WebCore/html/CanvasByteArray.cpp
&gt; +    String CanvasByteArray::toString() const
&gt; +    {
&gt; +        String s = &quot;[ &quot;;
&gt; +        for (size_t i = 0; i &lt; m_data.size(); ++i) {
&gt; +            if (i != 0)
&gt; +                s += &quot;, &quot;;
&gt; +            s += String::number(m_data[i]);
&gt; +        }
&gt; +        
&gt; +        s += &quot; ]&quot;;
&gt; +        return s;
&gt; +    }

&gt; +        [DontEnum] DOMString toString();
Most other DOM objects do not have toString implementations, so this seems unusual.  Its syntax also does not match the syntax standard array toString, i would suggest removing this.

&gt; +        virtual void _deleteObject(Platform3DObject);
why the _?

&gt; +    String CanvasNumberArray::toString() const
&gt; +    {
&gt; +        String s = &quot;[ &quot;;
&gt; +        for (size_t i = 0; i &lt; m_data.size(); ++i) {
&gt; +            if (i != 0)
&gt; +                s += &quot;, &quot;;
&gt; +            s += String::number(m_data[i]);
&gt; +        }
&gt; +        
&gt; +        s += &quot; ]&quot;;
&gt; +        return s;
&gt; +    }

&gt; +        [DontEnum] DOMString toString();

Same again for CanvasNumberArray.  I have a feeling that these are sufficiently similar that we probably jut want

template &lt;typename T&gt; class CanvasArray {
...
};
class CanvasByteArray : CanvasArray&lt;uint8&gt; { ... }
class CanvasNumberArray : CanvasArray&lt;float&gt; { ... }
&gt; +
&gt; +        /* ClearBufferMask */
&gt; +        const unsigned int GL_DEPTH_BUFFER_BIT               = 0x00000100;
...
&gt; +        const unsigned int GL_MAX_RENDERBUFFER_SIZE          = 0x84E8;
I thought that we had decided that most of these constants would not be present as they are unused and unnecessary?

&gt; +        void         glActiveTexture (in unsigned long texture);
Textures aren&apos;t identified by numeric idents so why is this here? Also why the gl prefixes this doesn&apos;t seem to match the spec

&gt; +}
&gt; +
&gt; +-(void)drawInCGLContext:(CGLContextObj)glContext pixelFormat:(CGLPixelFormatObj)pixelFormat forLayerTime:(CFTimeInterval)timeInterval displayTime:(const CVTimeStamp *)timeStamp
&gt; +{
&gt; +    CGRect frame = [self frame];
&gt; +        
&gt; +    // draw the FBO into the layer
&gt; +    glViewport(0, 0, frame.size.width, frame.size.height);
&gt; +    glMatrixMode(GL_PROJECTION);
&gt; +    glLoadIdentity();
&gt; +    glOrtho(-1, 1, -1, 1, -1, 1);
&gt; +    glMatrixMode(GL_MODELVIEW);
&gt; +    glLoadIdentity();
&gt; +
&gt; +    glEnable(GL_TEXTURE_2D);
&gt; +    glBindTexture(GL_TEXTURE_2D, m_texture);
&gt; +    
&gt; +	glBegin(GL_TRIANGLE_FAN);
&gt; +        glTexCoord2f(0, 0);
&gt; +		glVertex2f(-1, -1);
&gt; +        glTexCoord2f(1, 0);
&gt; +		glVertex2f(1, -1);
&gt; +        glTexCoord2f(1, 1);
&gt; +		glVertex2f(1, 1);
&gt; +        glTexCoord2f(0, 1);
&gt; +		glVertex2f(-1, 1);
&gt; +	glEnd();
&gt; +    
&gt; +    glBindTexture(GL_TEXTURE_2D, 0);
&gt; +    glDisable(GL_TEXTURE_2D);
We draw the fbo with a triangle fan? say what?

&gt; Index: WebCore/platform/graphics/mac/GraphicsContext3DMac.cpp
&gt; ===================================================================
&gt; --- WebCore/platform/graphics/mac/GraphicsContext3DMac.cpp	(revision 0)
&gt; +++ WebCore/platform/graphics/mac/GraphicsContext3DMac.cpp	(revision 0)
&gt; @@ -0,0 +1,1570 @@
&gt; +/*
&gt; + * Copyright (C) 2003, 2004, 2005, 2006, 2007 Apple Inc. All rights reserved.
2009

There are plenty of C-style casts in the remaining code and uses of malloc/free instead of fastMalloc/fastFree</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137370</commentid>
    <comment_count>7</comment_count>
      <attachid>34149</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-08-05 12:16:49 -0700</bug_when>
    <thetext>Comment on attachment 34149
Patch 3 of 4: Adding new files to the build

I&apos;d prefer that we make html/canvas and put all the new files there, and make new groupings in the Xcode project.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137371</commentid>
    <comment_count>8</comment_count>
      <attachid>34151</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-08-05 12:17:42 -0700</bug_when>
    <thetext>Comment on attachment 34151
Patch 4 of 4: Connect everything up

Minusing for the recalcStyle() hack that we need to figure out a better way to do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137375</commentid>
    <comment_count>9</comment_count>
      <attachid>34151</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-08-05 12:26:00 -0700</bug_when>
    <thetext>Comment on attachment 34151
Patch 4 of 4: Connect everything up


&gt; +        [Custom,V8Custom] DOMObject getCSSCanvasContext(in DOMString contextId, in DOMString name, in long width, in long height);

This can be just [Custom]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137379</commentid>
    <comment_count>10</comment_count>
      <attachid>34146</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-08-05 12:38:07 -0700</bug_when>
    <thetext>Comment on attachment 34146
Patch 2 of 4: New Canvas 3D files

Whoa, this is a chunky patch. Can we break it up into smaller pieces perhaps?

&gt; +    /*
&gt; +     ec = 0;
&gt; +     
&gt; +     if (!canvas)
&gt; +     return;
&gt; +     
&gt; +     ensureContext;
&gt; +     ImageBuffer* buffer = canvas-&gt;buffer();
&gt; +     if (!buffer)
&gt; +     return;
&gt; +     
&gt; +     Image* img = buffer-&gt;image();
&gt; +     if (!img)
&gt; +     return;
&gt; +     
&gt; +     ::glTexSubImage2D(target, level, xoff, yoff, width, height, GL_RGBA, GL_UNSIGNED_BYTE, img-&gt;data()-&gt;data());
&gt; +      */
&gt; +}
&gt; +
&gt; +}
&gt; +
&gt; +#endif // ENABLE(3D_CANVAS)

Probably didn&apos;t mean to leave this commented code in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137380</commentid>
    <comment_count>11</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-08-05 12:42:42 -0700</bug_when>
    <thetext>BTW, really exciting stuff!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137410</commentid>
    <comment_count>12</comment_count>
      <attachid>34149</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2009-08-05 13:24:47 -0700</bug_when>
    <thetext>Comment on attachment 34149
Patch 3 of 4: Adding new files to the build

RE: patch 3.  What about the rest of the build systems?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137418</commentid>
    <comment_count>13</comment_count>
      <attachid>34146</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-08-05 13:35:24 -0700</bug_when>
    <thetext>Comment on attachment 34146
Patch 2 of 4: New Canvas 3D files

My feedback:

&gt; Index: WebCore/ChangeLog
&gt; ===================================================================
&gt; --- WebCore/ChangeLog	(revision 46804)
&gt; +++ WebCore/ChangeLog	(working copy)
&gt; @@ -1,3 +1,407 @@
&gt; +2009-08-05  Chris Marrin  &lt;cmarrin@apple.com&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        All of the new Canvas 3D files
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=28018
&gt; +
&gt; +        Patch 2 of 4. This is just the new files. They are not compiled yet

You should edit down the changelog to just show each new file, and add a brief description of what each file does.

You should do an initial patch that moves all existing canvas files to html/canvas, and then add your new files there.

&gt; Index: WebCore/bindings/js/JSCanvasNumberArrayCustom.cpp
&gt; ===================================================================

Wrong license. This should be the 2-clause license with a date of 2009. This also applies to all the other new files.


&gt; Index: WebCore/bindings/js/JSCanvasRenderingContext3DCustom.cpp
&gt; ===================================================================

&gt; +JSValue JSCanvasRenderingContext3D::glBufferData(JSC::ExecState* exec, JSC::ArgList const&amp; args)
&gt; +{
&gt; +    unsigned target = args.at(0).toInt32(exec);
&gt; +    unsigned usage = args.at(2).toInt32(exec);

Should you check the number of args (here and elsewhere)?

&gt; +JSValue JSCanvasRenderingContext3D::glUniformMatrix(JSC::ExecState* exec, JSC::ArgList const&amp; args)
&gt; +{
&gt; +    unsigned location = args.at(0).toInt32(exec);
&gt; +    unsigned count = args.at(1).toInt32(exec);
&gt; +    bool transpose = args.at(2).toBoolean(exec);
&gt; +    
&gt; +    if (!args.at(3).isObject())
&gt; +        return jsUndefined();
&gt; +        
&gt; +    WebKitCSSMatrix* matrix = toWebKitCSSMatrix(args.at(3));
&gt; +    if (matrix)
&gt; +        impl()-&gt;glUniformMatrix(location, transpose, matrix);
&gt; +    else {
&gt; +        JSObject* array = asObject(args.at(3));
&gt; +        int length = array-&gt;get(exec, Identifier(exec, &quot;length&quot;)).toInt32(exec);
&gt; +        if (length) {
&gt; +            // If the first element is a WebKitCSSMatrix, assume all are

Won&apos;t this crash if this assumption is false?

&gt; +JSValue JSCanvasRenderingContext3D::glUniformf(JSC::ExecState* exec, JSC::ArgList const&amp; args)

&gt; +                impl()-&gt;glUniform(location, (float) args.at(1).toNumber(exec));

Use static_cast&lt;&gt;, no space after )

&gt; +JSValue JSCanvasRenderingContext3D::glDrawElements(JSC::ExecState* exec, JSC::ArgList const&amp; args)
&gt; +{
&gt; +    unsigned mode = args.at(0).toInt32(exec);
&gt; +    unsigned type = args.at(1).toInt32(exec);
&gt; +    
&gt; +    unsigned int count = 0;
&gt; +    
&gt; +    // If the third param is not an object, it is a number, which is the count.
&gt; +    // In this case if there is a 4th param, it is the offset. If there is no
&gt; +    // 4th param, the offset is 0

Do these assumptions needs to be checked in the code?

&gt; +    if (!args.at(2).isObject()) {
&gt; +        count = args.at(2).toInt32(exec);
&gt; +        unsigned int offset = (args.size() &gt; 3) ? args.at(3).toInt32(exec) : 0;
&gt; +        impl()-&gt;glDrawElements(mode, count, type, (void*) offset);
&gt; +    } else {
&gt; +        void* passedIndices = 0;
&gt; +        JSObject* array = asObject(args.at(2));
&gt; +        count = array-&gt;get(exec, Identifier(exec, &quot;length&quot;)).toInt32(exec);
&gt; +
&gt; +        if (type == GL_UNSIGNED_BYTE) {
&gt; +            unsigned char* indices = (unsigned char*) malloc(count * sizeof(unsigned short));

Why is this sizeof(unsigned short)?

&gt; Index: WebCore/bindings/js/JSHTMLCanvasElementCustom.cpp

&gt; +    JSValue result = jsUndefined();
&gt; +    
&gt; +    if (contextId == &quot;2d&quot;)
&gt; +        result = toJS(exec, WTF::getPtr(reinterpret_cast&lt;CanvasRenderingContext2D*&gt;(imp-&gt;getContext(contextId))));
&gt; +#if ENABLE(3D_CANVAS)
&gt; +    else if (contextId == &quot;webkit-3d&quot;)
&gt; +        result = toJS(exec, WTF::getPtr(reinterpret_cast&lt;CanvasRenderingContext3D*&gt;(imp-&gt;getContext(contextId))));
&gt; +#endif
&gt; +    
&gt; +    return result;

This would be somewhat cleaner with early returns.

&gt; Index: WebCore/html/CanvasBuffer.cpp
&gt; ===================================================================


&gt; +    CanvasBuffer::CanvasBuffer(GraphicsContext3D* context)
&gt; +    : CanvasObject(context)
&gt; +    {
&gt; +        GLuint o;
&gt; +        glGenBuffers(1, &amp;o);
&gt; +        setObject(o);
&gt; +    }
&gt; +    
&gt; +    void CanvasBuffer::_deleteObject(Platform3DObject object)
&gt; +    {
&gt; +        glDeleteBuffers(1, &amp;object);
&gt; +    }

Should the &apos;1&apos; be a named constant?

&gt; Index: WebCore/html/CanvasByteArray.cpp
&gt; ===================================================================

&gt; +    String CanvasByteArray::toString() const
&gt; +    {
&gt; +        String s = &quot;[ &quot;;
&gt; +        for (size_t i = 0; i &lt; m_data.size(); ++i) {
&gt; +            if (i != 0)
&gt; +                s += &quot;, &quot;;
&gt; +            s += String::number(m_data[i]);
&gt; +        }
&gt; +        
&gt; +        s += &quot; ]&quot;;
&gt; +        return s;

Lots of very inefficient string appends here. Should use append().

&gt; Index: WebCore/html/CanvasByteArray.h
&gt; ===================================================================

&gt; +        Vector&lt;uint8_t&gt;&amp; data() { return m_data; }

Is it ok that this is mutable?

&gt; Index: WebCore/html/CanvasFramebuffer.cpp
&gt; ===================================================================

&gt; +#include &lt;OpenGL/OpenGL.h&gt;

It seems wrong for code outside of platform/ to be including OpenGL.h. This code needs to be platform-neutral.

&gt; Index: WebCore/html/CanvasNumberArray.cpp
&gt; ===================================================================

&gt; +    String CanvasNumberArray::toString() const
&gt; +    {
&gt; +        String s = &quot;[ &quot;;
&gt; +        for (size_t i = 0; i &lt; m_data.size(); ++i) {
&gt; +            if (i != 0)
&gt; +                s += &quot;, &quot;;
&gt; +            s += String::number(m_data[i]);
&gt; +        }
&gt; +        
&gt; +        s += &quot; ]&quot;;

Should use append here too.

&gt; Index: WebCore/html/CanvasNumberArray.h
&gt; ===================================================================

&gt; +    class CanvasNumberArray : public RefCounted&lt;CanvasNumberArray&gt; {
&gt; +    public:
&gt; +        static PassRefPtr&lt;CanvasNumberArray&gt; create(unsigned length);
&gt; +        
&gt; +        Vector&lt;float&gt;&amp; data() { return m_data; }
&gt; +
&gt; +        unsigned length() const { return m_data.size(); }
&gt; +        float item(unsigned index) { return (index &gt;= m_data.size()) ? 0 : m_data[index]; }

Should be const.

&gt; Index: WebCore/html/CanvasObject.cpp
&gt; ===================================================================

&gt; +    void CanvasObject::setObject(Platform3DObject object)
&gt; +    {
&gt; +        deleteObject();
&gt; +        m_object = object;
&gt; +    }

What if m_object == object?

&gt; Index: WebCore/html/CanvasProgram.cpp
&gt; ===================================================================

&gt; +#include &lt;OpenGL/OpenGL.h&gt;

Bad layering.

&gt; Index: WebCore/html/CanvasRenderbuffer.cpp
&gt; ===================================================================

&gt; +#include &lt;OpenGL/OpenGL.h&gt;

Bad layering.


&gt; +    CanvasRenderbuffer::CanvasRenderbuffer(GraphicsContext3D* context)
&gt; +    : CanvasObject(context)
&gt; +    {
&gt; +        GLuint o;
&gt; +        glGenRenderbuffersEXT(1, &amp;o);
&gt; +        setObject(o);
&gt; +    }
&gt; +    
&gt; +    void CanvasRenderbuffer::_deleteObject(Platform3DObject object)
&gt; +    {
&gt; +        glDeleteRenderbuffersEXT(1, &amp;object);
&gt; +    }

Should the &apos;1&apos; be a named constant?

&gt; Index: WebCore/html/CanvasRenderingContext3D.cpp
&gt; ===================================================================

&gt; +void CanvasRenderingContext3D::updateContext()
&gt; +{
&gt; +    if (m_canvas-&gt;renderBox() &amp;&amp; m_canvas-&gt;renderBox()-&gt;hasLayer())
&gt; +        m_canvas-&gt;renderBox()-&gt;layer()-&gt;rendererContentChanged();
&gt; +}

What does &quot;update&quot; really mean?

&gt; +#define leave(update) { m_context.checkError(); if (update) updateContext(); }

Macros should be in uppercase. Use an inline function instead? &apos;leave&apos; is a really bad name.
Also, boolean arguments are evil. Make 2 inline functions.

&gt; +void CanvasRenderingContext3D::glReleaseShaderCompiler ()
&gt; +{
&gt; +    //::glReleaseShaderCompilerEXT();
&gt; +    leave(false);
&gt; +}

Why is this commented out?

&gt; +PassRefPtr&lt;CanvasProgram&gt; CanvasRenderingContext3D::createProgram ()

Extra space after the function name (here and in many other places).

&gt; Index: WebCore/html/CanvasRenderingContext3D.h
&gt; ===================================================================

&gt; +        virtual bool is3d() { return true; }

Should be const.

&gt; +        void glActiveTexture (unsigned long texture);
&gt; +        void glAttachShader (CanvasProgram* program, CanvasShader* shader);

Need to fix the spacing with all of these. In some cases the parameter names can be removed

&gt; Index: WebCore/html/CanvasRenderingContext3D.idl
&gt; ===================================================================

&gt; +        readonly attribute HTMLCanvasElement canvas;
&gt; +        
&gt; +        void         glActiveTexture (in unsigned long texture);

Need to fix the spacing with all these methods declarations.

&gt; Index: WebCore/html/CanvasRenderingContext.h
&gt; ===================================================================

&gt; +namespace WebCore {
&gt; +
&gt; +    class CanvasObject;
&gt; +    class HTMLCanvasElement;
&gt; +
&gt; +    class CanvasRenderingContext : Noncopyable {
&gt; +    public:
&gt; +        CanvasRenderingContext(HTMLCanvasElement*);
&gt; +        virtual ~CanvasRenderingContext() { }
&gt; +        
&gt; +        void ref();
&gt; +        void deref();
&gt; +        
&gt; +        HTMLCanvasElement* canvas() const { return m_canvas; }
&gt; +        
&gt; +        virtual bool is2d() { return false; }
&gt; +        virtual bool is3d() { return false; }
&gt; +        virtual bool is3d_1_1() { return false; }
&gt; +        virtual bool is3d_fixed() { return false; }

These should all be const.

&gt; Index: WebCore/html/CanvasShader.cpp
&gt; ===================================================================

&gt; +#include &lt;OpenGL/OpenGL.h&gt;

Layering violation.

&gt; Index: WebCore/html/CanvasTexture.cpp
&gt; ===================================================================

&gt; +#include &lt;OpenGL/OpenGL.h&gt;
Ditto.

&gt; +    CanvasTexture::CanvasTexture(GraphicsContext3D* context)
&gt; +    : CanvasObject(context)
&gt; +    {
&gt; +        GLuint o;
&gt; +        glGenTextures(1, &amp;o);
&gt; +        setObject(o);
&gt; +    }
&gt; +    
&gt; +    void CanvasTexture::_deleteObject(Platform3DObject object)
&gt; +    {
&gt; +        glDeleteTextures(1, &amp;object);
&gt; +    }

Should the &apos;1&apos; be a named constant?

&gt; Index: WebCore/platform/graphics/GraphicsContext3D.cpp
&gt; ===================================================================

&gt; +void  GraphicsContext3D::removeObject(CanvasObject* object)

Extra space after the void.

&gt; +{
&gt; +    for (size_t i = 0; i &lt; m_canvasObjects.size(); ++i)
&gt; +        if (m_canvasObjects[i] == object) {
&gt; +            m_canvasObjects.remove(i);
&gt; +            return;

Is this linear search going to be a performance problem?
Is there a guarantee that the object will only be in the list once? Maybe use a HashSet?

&gt; Index: WebCore/platform/graphics/GraphicsContext3D.h
&gt; ===================================================================

&gt; +    class GraphicsContext3D : Noncopyable {
&gt; +    public:
&gt; +        GraphicsContext3D();
&gt; +        virtual ~GraphicsContext3D();
&gt; +       
&gt; +        PlatformGraphicsContext3D platformGraphicsContext3D() const;
&gt; +        
&gt; +        void checkError() const;
&gt; +        
&gt; +        void glActiveTexture (unsigned long texture);
&gt; +        void glAttachShader (CanvasProgram* program, CanvasShader* shader);

Spacing and parameter names need fixing here too.

&gt; Index: WebCore/platform/graphics/mac/Canvas3DLayer.h
&gt; ===================================================================

&gt; +-(id) initWithContext:(CGLContextObj) context texture:(GLuint) texture;

No spaces after the ) here.

&gt; Index: WebCore/platform/graphics/mac/Canvas3DLayer.mm
&gt; ===================================================================


&gt; +@implementation Canvas3DLayer
&gt; +
&gt; +-(id) initWithContext:(CGLContextObj) context texture:(GLuint) texture

No spaces after )

&gt; +{
&gt; +    m_contextObj = context;
&gt; +    m_texture = texture;
&gt; +    [super init];
&gt; +    return self;
&gt; +}

The canonical form is:

if ((self = [super init])) {
  // do own init here
}
return self;

&gt; +-(void)drawInCGLContext:(CGLContextObj)glContext pixelFormat:(CGLPixelFormatObj)pixelFormat forLayerTime:(CFTimeInterval)timeInterval displayTime:(const CVTimeStamp *)timeStamp
&gt; +{
&gt; +    CGRect frame = [self frame];
&gt; +        
&gt; +    // draw the FBO into the layer
&gt; +    glViewport(0, 0, frame.size.width, frame.size.height);
&gt; +    glMatrixMode(GL_PROJECTION);
&gt; +    glLoadIdentity();
&gt; +    glOrtho(-1, 1, -1, 1, -1, 1);
&gt; +    glMatrixMode(GL_MODELVIEW);
&gt; +    glLoadIdentity();
&gt; +
&gt; +    glEnable(GL_TEXTURE_2D);
&gt; +    glBindTexture(GL_TEXTURE_2D, m_texture);
&gt; +    
&gt; +	glBegin(GL_TRIANGLE_FAN);
&gt; +        glTexCoord2f(0, 0);
&gt; +		glVertex2f(-1, -1);
&gt; +        glTexCoord2f(1, 0);
&gt; +		glVertex2f(1, -1);
&gt; +        glTexCoord2f(1, 1);
&gt; +		glVertex2f(1, 1);
&gt; +        glTexCoord2f(0, 1);
&gt; +		glVertex2f(-1, 1);
&gt; +	glEnd();

You have tabs here.

&gt; +    glBindTexture(GL_TEXTURE_2D, 0);
&gt; +    glDisable(GL_TEXTURE_2D);
&gt; +
&gt; +	// Call super to finalize the drawing. By default all it does is call glFlush().
&gt; +	[super drawInCGLContext:glContext pixelFormat:pixelFormat forLayerTime:timeInterval displayTime:timeStamp];

More tabs.

&gt; Index: WebCore/platform/graphics/mac/GraphicsContext3DMac.cpp
&gt; ===================================================================


&gt; +void GraphicsContext3D::checkError() const
&gt; +{
&gt; +    GLenum error = ::glGetError();
&gt; +    if (error != GL_NO_ERROR)
&gt; +        fprintf(stderr, &quot;*** GL error %d\n&quot;, error);
&gt; +}

Shouldn&apos;t these propagate back to Console?

&gt; +#define ensureContext _ensureContext(m_contextObj)

Make the macro uppercase, or, preferably, just use an inline method.
WebKit macros are normally written to look like functions, i.e. with parens.

&gt; +void  GraphicsContext3D::glAttachShader (CanvasProgram* program, CanvasShader* shader)

Spacing needs cleanup.

&gt; +void  GraphicsContext3D::glClearColor(double r, double g, double b, double a)
&gt; +{
&gt; +    ensureContext;
&gt; +    if (isnan(r))
&gt; +        r = 0;
&gt; +    if (isnan(g))
&gt; +        g = 0;
&gt; +    if (isnan(b))
&gt; +        b = 0;
&gt; +    if (isnan(a))
&gt; +        a = 1;

It seems like NANs should never get down to GraphicsContext3D; the upper layers should do this conversion.

&gt; +    ::glClearColor((float) r, (float) g, (float) b, (float) a);

static_cast please.

&gt; +void  GraphicsContext3D::glFinish ()
&gt; +{
&gt; +    ensureContext;
&gt; +    ::glFinish();
&gt; +}
&gt; +
&gt; +

Extra blank line.

&gt; +void  GraphicsContext3D::glReleaseShaderCompiler ()
&gt; +{
&gt; +    ensureContext;
&gt; +    //::glReleaseShaderCompilerEXT();

Why is this commented out? If it&apos;s a feature that is not yet implemented, then maybe use an #ifdef?


&gt; +void  GraphicsContext3D::glUniformMatrix(long location, long count, bool transpose, CanvasNumberArray*array)

Space after the *

&gt; +    int n = array-&gt;data().size() / count;
&gt; +    if (n &lt; 2)
&gt; +        return;
&gt; +    
&gt; +    if (n &gt; 4)
&gt; +        n = 4;

Should these be asserting?

&gt; +void  GraphicsContext3D::glUniformMatrix(long location, bool transpose, const Vector&lt;WebKitCSSMatrix*&gt;&amp; array)
&gt; +{
&gt; +    int count = array.size();
&gt; +    float* floats = (float*) malloc(count * 16 * sizeof(float));
&gt; +    
&gt; +    for (int i = 0; i &lt; count; ++i) {
&gt; +        floats[i*16+ 0] = (float) array[i]-&gt;m11();

static_cast

&gt; +void  GraphicsContext3D::glUniformMatrix(long location, bool transpose, const WebKitCSSMatrix* matrix)
&gt; +{

&gt; +    floats[ 0] = (float) matrix-&gt;m11();

Ditto

&gt; +void  GraphicsContext3D::glViewport(long x, long y, unsigned long width, unsigned long height)
&gt; +{
&gt; +    ensureContext;
&gt; +    if (isnan(x))
&gt; +        x = 0;
&gt; +    if (isnan(y))
&gt; +        y = 0;
&gt; +    if (isnan(width))
&gt; +        width = 100;
&gt; +    if (isnan(height))
&gt; +        height = 100;

Again, seems like NANs should be filtered out higher up. Arbitrary values (like 100) should not live in platform code.


&gt; +// Assumes the texture you want to go into is bound
&gt; +static void imageToTexture(Image* image, unsigned target, unsigned level)
&gt; +{
&gt; +    if (!image)
&gt; +        return;
&gt; +    
&gt; +    CGImageRef textureImage = image-&gt;getCGImageRef();
&gt; +    if (!textureImage)
&gt; +        return;
&gt; +    
&gt; +    size_t textureWidth = CGImageGetWidth(textureImage);
&gt; +    size_t textureHeight = CGImageGetHeight(textureImage);
&gt; +    
&gt; +    GLubyte* textureData = (GLubyte*) malloc(textureWidth*textureHeight*4);
&gt; +    CGContextRef textureContext = CGBitmapContextCreate(textureData, textureWidth, textureHeight, 8, textureWidth*4, 
&gt; +                                                        CGImageGetColorSpace(textureImage), kCGImageAlphaPremultipliedLast);
&gt; +    

Spaces around the * please.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137428</commentid>
    <comment_count>14</comment_count>
      <attachid>34151</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-08-05 14:05:00 -0700</bug_when>
    <thetext>Comment on attachment 34151
Patch 4 of 4: Connect everything up

&gt; Index: WebCore/ChangeLog
&gt; ===================================================================

&gt; +        Connect everything up
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=28018
&gt; +
&gt; +        Changes to CanvasElement, GraphicsLayer, the style logic and
&gt; +        rendering logic for Canvas 3D.

I&apos;d like to see more detail here. At least annotate the change list to describe
the substantive changes to each file.

&gt; Index: WebCore/bindings/js/JSDocumentCustom.cpp
&gt; ===================================================================

&gt; +JSValue JSDocument::getCSSCanvasContext(JSC::ExecState* exec, JSC::ArgList const&amp; args)

Why did you have to add this function?

&gt; +{
&gt; +    const UString&amp; contextId = args.at(0).toString(exec);
&gt; +    const UString&amp; name = args.at(1).toString(exec);
&gt; +    int width = args.at(2).toInt32(exec);
&gt; +    int height = args.at(3).toInt32(exec);

Check the argument count?

&gt; +    if (contextId == &quot;2d&quot;)
&gt; +        result = toJS(exec, WTF::getPtr(reinterpret_cast&lt;CanvasRenderingContext2D*&gt;(impl()-&gt;getCSSCanvasContext(contextId, name, width, height))));
&gt; +#if ENABLE(3D_CANVAS)
&gt; +    else if (contextId == &quot;webkit-3d&quot;)
&gt; +        result = toJS(exec, WTF::getPtr(reinterpret_cast&lt;CanvasRenderingContext3D*&gt;(impl()-&gt;getCSSCanvasContext(contextId, name, width, height))));
&gt; +#endif
&gt; +    
&gt; +    return result;

Early returns would be clearer.

&gt; Index: WebCore/bindings/js/JSHTMLCanvasElementCustom.cpp
&gt; ===================================================================

&gt; + * Copyright (C) 2007 Apple Inc. All rights reserved.

Date needs fixing.

&gt; +JSValue JSHTMLCanvasElement::getContext(JSC::ExecState* exec, JSC::ArgList const&amp; args)
&gt; +{
&gt; +    HTMLCanvasElement* imp = static_cast&lt;HTMLCanvasElement*&gt;(impl());
&gt; +    const UString&amp; contextId = args.at(0).toString(exec);
&gt; +
&gt; +    JSValue result = jsUndefined();
&gt; +    
&gt; +    if (contextId == &quot;2d&quot;)
&gt; +        result = toJS(exec, WTF::getPtr(reinterpret_cast&lt;CanvasRenderingContext2D*&gt;(imp-&gt;getContext(contextId))));
&gt; +#if ENABLE(3D_CANVAS)
&gt; +    else if (contextId == &quot;webkit-3d&quot;)
&gt; +        result = toJS(exec, WTF::getPtr(reinterpret_cast&lt;CanvasRenderingContext3D*&gt;(imp-&gt;getContext(contextId))));
&gt; +#endif
&gt; +    
&gt; +    return result;

Again, prefer early returns.

&gt; Index: WebCore/dom/Document.h
&gt; ===================================================================

&gt; +    CanvasRenderingContext* getCSSCanvasContext(const String&amp; type, const String&amp; name, int width, int height);

Wow, so, after your changes, can I reference a canvas3D in CSS as background image?

&gt; Index: WebCore/dom/Element.cpp
&gt; ===================================================================
&gt; --- WebCore/dom/Element.cpp	(revision 46800)
&gt; +++ WebCore/dom/Element.cpp	(working copy)
&gt; @@ -821,6 +821,11 @@ void Element::recalcStyle(StyleChange ch
&gt;      if (hasParentStyle &amp;&amp; (change &gt;= Inherit || needsStyleRecalc())) {
&gt;          RefPtr&lt;RenderStyle&gt; newStyle = document()-&gt;styleSelector()-&gt;styleForElement(this);
&gt;          StyleChange ch = diff(currentStyle, newStyle.get());
&gt; +
&gt; +        // We need to force a set style if we have a 3D canvas without a compositing layer
&gt; +        if (renderer() &amp;&amp; renderer()-&gt;isCanvas3D() &amp;&amp; !renderer()-&gt;hasLayer())
&gt; +            ch = Force;
&gt; +

We need to do this differently. There&apos;s no guarantee that recalcStyle will happen after you
request a canvas-3d context.

We should talk to hyatt about how best to make a layer for a canvas as soon as the 3d context is requested.

&gt; Index: WebCore/html/CanvasRenderingContext2D.h
&gt; ===================================================================

&gt; +        virtual bool is2d() { return true; }

Should be const

&gt; Index: WebCore/html/HTMLCanvasElement.cpp
&gt; ===================================================================

&gt;  CanvasRenderingContext* HTMLCanvasElement::getContext(const String&amp; type)
&gt;  {
&gt;      if (type == &quot;2d&quot;) {
&gt; -        if (!m_2DContext)
&gt; -            m_2DContext.set(new CanvasRenderingContext2D(this));
&gt; -        return m_2DContext.get();
&gt; +        if (m_context &amp;&amp; !m_context-&gt;is2d())
&gt; +            m_context.clear();
&gt; +        if (!m_context)
&gt; +            m_context.set(new CanvasRenderingContext2D(this));
&gt;      }
&gt; -    return 0;
&gt; +#if ENABLE(3D_CANVAS)    
&gt; +    else if (type == &quot;webkit-3d&quot;) {
&gt; +        if (m_context &amp;&amp; !m_context-&gt;is3d())
&gt; +            m_context.clear();
&gt; +        if (!m_context) {
&gt; +            m_context.set(new CanvasRenderingContext3D(this));
&gt; +            setNeedsStyleRecalc();
&gt; +        }
&gt; +    }
&gt; +#endif
&gt; +    else if (m_context.get())
&gt; +        m_context.clear();
&gt; +    
&gt; +    return m_context.get();

I think this needs some comments explaining the behavior when the author requests
both 2d and 3d rendering contexts on the same canvas.

&gt; +bool HTMLCanvasElement::is3D() const
&gt; +{
&gt; +    CanvasRenderingContext* ctx = m_context.get();
&gt; +    return ctx &amp;&amp; !ctx-&gt;is2d();
&gt; +}

Is the entire canvas really in 3d mode, or can I mix and match?

&gt; +PlatformGraphicsContext3D HTMLCanvasElement::context3D() const
&gt; +{
&gt; +    if (m_context &amp;&amp; m_context-&gt;is3d())
&gt; +        return static_cast&lt;CanvasRenderingContext3D*&gt;(m_context.get())-&gt;context3D();
&gt; +    else
&gt; +        return 0;

No &apos;else&apos; after &apos;return&apos;.

&gt; +Platform3DObject HTMLCanvasElement::texture3D() const
&gt; +{
&gt; +    if (m_context &amp;&amp; m_context-&gt;is3d())
&gt; +        return static_cast&lt;CanvasRenderingContext3D*&gt;(m_context.get())-&gt;texture3D();
&gt; +    else
&gt; +        return 0;

Ditto.

&gt; Index: WebCore/page/DOMWindow.idl
&gt; ===================================================================
&gt; --- WebCore/page/DOMWindow.idl	(revision 46800)
&gt; +++ WebCore/page/DOMWindow.idl	(working copy)
&gt; @@ -406,6 +406,7 @@ module window {
&gt;          attribute [CustomGetter] HTMLOptionElementConstructor Option; // Usable with new operator
&gt;  
&gt;          attribute CanvasRenderingContext2DConstructor CanvasRenderingContext2D;
&gt; +        attribute [Conditional=3D_CANVAS] CanvasRenderingContext3DConstructor CanvasRenderingContext3D;
&gt;          attribute TextMetricsConstructor TextMetrics;

This change is going to affect layout tests I think.

&gt; Index: WebCore/platform/graphics/GraphicsLayer.h
&gt; ===================================================================

&gt; +#if PLATFORM(MAC)
&gt; +//#include &lt;OpenGL/OpenGL.h&gt;
&gt; +#endif

Do you need this?

&gt; +#if ENABLE(3D_CANVAS)
&gt; +    virtual void setContentsToCanvas3D(PlatformLayer*) { }
&gt; +    virtual void redrawCanvas3D() { }

Do you really mean redraw, or is it something else?

&gt; +#if ENABLE(3D_CANVAS)
&gt; +    void setHas3DLayer(bool has3DLayer, PlatformGraphicsContext3D context, Platform3DObject texture);
&gt; +#endif

I&apos;m not sure why you need both this and setContentsToCanvas3D()? Also, I think the last two params
should have default arguments so you can call setHas3DLayer(false).

&gt; +#if ENABLE(3D_CANVAS)
&gt; +    bool m_3d : 1;

I don&apos;t like the name of this member variable; it&apos;s really not clear what it means.

Also, does it belong in the base class? Using GraphicsLayer for a canvas-3d might be a Mac-specific thing.

&gt; Index: WebCore/platform/graphics/mac/GraphicsLayerCA.mm
&gt; ===================================================================

&gt; +#if ENABLE(3D_CANVAS)
&gt; +void GraphicsLayerCA::setContentsToCanvas3D(PlatformLayer* layer)
&gt; +{
&gt; +
&gt; +    
&gt; +    

Lots of whitespace there.

&gt; +#if ENABLE(3D_CANVAS)
&gt; +void GraphicsLayer::setHas3DLayer(bool has3DLayer, PlatformGraphicsContext3D context, Platform3DObject texture)
&gt; +{
&gt; +    BEGIN_BLOCK_OBJC_EXCEPTIONS
&gt; +
&gt; +    if (has3DLayer &amp;&amp; !m_3d) {
&gt; +        // create the inner 3d layer
&gt; +        PlatformLayer* layer = [[Canvas3DLayer alloc] initWithContext:(CGLContextObj) context texture: (GLuint) texture];

No spaces after the )

&gt; +        [layer setName:@&quot;3D Layer&quot;];

Names should only be set in debug.

&gt; +void GraphicsLayerCA::redrawCanvas3D()
&gt; +{
&gt; +    if (m_3d)
&gt; +        [m_contentsLayer.get() setNeedsDisplay];
&gt; +}

This needs to go through the batching mechanism.

&gt; Index: WebCore/rendering/RenderBoxModelObject.h
&gt; ===================================================================
&gt; --- WebCore/rendering/RenderBoxModelObject.h	(revision 46800)
&gt; +++ WebCore/rendering/RenderBoxModelObject.h	(working copy)
&gt; @@ -59,7 +59,14 @@ public:
&gt;  
&gt;      bool hasSelfPaintingLayer() const;
&gt;      RenderLayer* layer() const { return m_layer; }
&gt; -    virtual bool requiresLayer() const { return isRoot() || isPositioned() || isRelPositioned() || isTransparent() || hasOverflowClip() || hasTransform() || hasMask() || hasReflection(); }
&gt; +    virtual bool requiresLayer() const
&gt; +    {
&gt; +        return isRoot() || isPositioned() || isRelPositioned() || isTransparent() || hasOverflowClip() || hasTransform() || hasMask() || hasReflection()
&gt; +#if USE(ACCELERATED_COMPOSITING)
&gt; +                || isCanvas3D()
&gt; +#endif

FYI, you&apos;ve added a virtual method call to this somewhat hot method; all the other tests are inlined.

&gt; Index: WebCore/rendering/RenderLayerBacking.cpp
&gt; ===================================================================

&gt; +        else if (renderer()-&gt;isCanvas3D()) {
&gt; +            m_hasDirectlyCompositedContent = true;
&gt; +            HTMLCanvasElement* canvas = reinterpret_cast&lt;HTMLCanvasElement*&gt;(renderer()-&gt;node());
&gt; +            if (canvas &amp;&amp; canvas-&gt;context3D()) {
&gt; +                m_graphicsLayer-&gt;setHas3DLayer(true, canvas-&gt;context3D(), canvas-&gt;texture3D());
&gt; +                m_graphicsLayer-&gt;setDrawsContent(true);

I&apos;m not sure you need the setDrawsContent(true) since you don&apos;t want normal backing store for the layer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137442</commentid>
    <comment_count>15</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2009-08-05 14:32:16 -0700</bug_when>
    <thetext>Glad to see this work landing.

The current WebGL spec uses CanvasRenderingContextGL as the JavaScript interface name. To avoid future file renamings, which are problematic with SVN, should CanvasRenderingContext3D and GraphicsContext3D be renamed to CanvasRenderingContextGL and GraphicsContextGL before initial checkin?

Also, the UUIDs for many of the new IDL files are duplicates of those from CanvasRenderingContext2D. I don&apos;t know whether the COM bindings are still used, but these bogus UUIDs should either be removed or replaced with real ones generated by a tool like http://www.famkruithof.net/uuid/uuidgen .</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137467</commentid>
    <comment_count>16</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2009-08-05 16:02:41 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; Glad to see this work landing.
&gt; 
&gt; The current WebGL spec uses CanvasRenderingContextGL as the JavaScript
&gt; interface name. To avoid future file renamings, which are problematic with SVN,
&gt; should CanvasRenderingContext3D and GraphicsContext3D be renamed to
&gt; CanvasRenderingContextGL and GraphicsContextGL before initial checkin?

File renaming isn&apos;t a problem in SVN.  We do it relatively frequently.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137478</commentid>
    <comment_count>17</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2009-08-05 16:24:36 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #15)
&gt; &gt; Glad to see this work landing.
&gt; &gt; 
&gt; &gt; The current WebGL spec uses CanvasRenderingContextGL as the JavaScript
&gt; &gt; interface name. To avoid future file renamings, which are problematic with SVN,
&gt; &gt; should CanvasRenderingContext3D and GraphicsContext3D be renamed to
&gt; &gt; CanvasRenderingContextGL and GraphicsContextGL before initial checkin?
&gt; 
&gt; File renaming isn&apos;t a problem in SVN.  We do it relatively frequently.

Doesn&apos;t it require an intermediate checkin of the renamed file before changing the contents under the new name? That was my experience with Java sources and it was a real pain because the build would be broken for a period of time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137574</commentid>
    <comment_count>18</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-08-06 08:13:24 -0700</bug_when>
    <thetext>Landed the first patch (Add ENABLE_3D_CANVAS flag to the build)

Sending        WebCore/ChangeLog
Sending        WebCore/Configurations/FeatureDefines.xcconfig
Sending        WebKit/mac/ChangeLog
Sending        WebKit/mac/Configurations/FeatureDefines.xcconfig
Sending        WebKitTools/ChangeLog
Sending        WebKitTools/Scripts/build-webkit
Transmitting file data ......
Committed revision 46844.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141933</commentid>
    <comment_count>19</comment_count>
      <attachid>38385</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-08-21 12:11:48 -0700</bug_when>
    <thetext>Created attachment 38385
Patch for new Canvas3D files

This patch incorporates comments from Simon and Oliver. Note that this is not all the new files. I&apos;ve left a few of the JS binding files out since they will require more rework, and this gives a more manageable set of files to review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141934</commentid>
    <comment_count>20</comment_count>
      <attachid>38385</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-08-21 12:16:22 -0700</bug_when>
    <thetext>Comment on attachment 38385
Patch for new Canvas3D files

The new files should be in html/canvas.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141937</commentid>
    <comment_count>21</comment_count>
      <attachid>38385</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-08-21 12:20:20 -0700</bug_when>
    <thetext>Comment on attachment 38385
Patch for new Canvas3D files

New files should use the 2-clause license, e.g. like WebKitCSSKeyframeRule</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142018</commentid>
    <comment_count>22</comment_count>
      <attachid>38385</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-08-21 15:18:55 -0700</bug_when>
    <thetext>Comment on attachment 38385
Patch for new Canvas3D files

Files are in the wrong directory :D

Minor style gripe: CanvasObject::CanvasObject -&gt; the member constructors should be indented

GraphicsContext3D::checkError -&gt; I&apos;d prefer notImplemented() in place of what&apos;s currently there

GraphicsContext3D::reshape -&gt; ASSERT(0) should be ASSERT_NOT_REACHED() or notImplemented()

GraphicsContext3D::texSubImage2D -&gt; We don&apos;t check in commented out code

Other than these gripes, r=me -- when landed file a bug on updating to current API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142027</commentid>
    <comment_count>23</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-08-21 15:45:38 -0700</bug_when>
    <thetext>Sending        WebCore/ChangeLog
Adding         WebCore/bindings/js/JSCanvasNumberArrayCustom.cpp
Adding         WebCore/html/canvas/CanvasObject.cpp
Adding         WebCore/html/canvas/CanvasObject.h
Adding         WebCore/html/canvas/CanvasRenderingContext.cpp
Adding         WebCore/html/canvas/CanvasRenderingContext.h
Adding         WebCore/html/canvas/CanvasRenderingContext.idl
Adding         WebCore/html/canvas/CanvasRenderingContext3D.cpp
Adding         WebCore/html/canvas/CanvasRenderingContext3D.h
Adding         WebCore/html/canvas/CanvasRenderingContext3D.idl
Adding         WebCore/platform/graphics/GraphicsContext3D.cpp
Adding         WebCore/platform/graphics/GraphicsContext3D.h
Adding         WebCore/platform/graphics/mac/Canvas3DLayer.h
Adding         WebCore/platform/graphics/mac/Canvas3DLayer.mm
Adding         WebCore/platform/graphics/mac/GraphicsContext3DMac.cpp
Transmitting file data ...............
Committed revision 47645.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142028</commentid>
    <comment_count>24</comment_count>
      <attachid>34145</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-08-21 15:46:32 -0700</bug_when>
    <thetext>Comment on attachment 34145
Patch 1 of 4: Add ENABLE_3D_CANVAS flag to the build

Landed this patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142029</commentid>
    <comment_count>25</comment_count>
      <attachid>38385</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-08-21 15:47:12 -0700</bug_when>
    <thetext>Comment on attachment 38385
Patch for new Canvas3D files

Landed this patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142081</commentid>
    <comment_count>26</comment_count>
      <attachid>38426</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-08-21 17:52:18 -0700</bug_when>
    <thetext>Created attachment 38426
Patch with new GL Object files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142087</commentid>
    <comment_count>27</comment_count>
      <attachid>38426</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-08-21 18:06:23 -0700</bug_when>
    <thetext>Comment on attachment 38426
Patch with new GL Object files


&gt; diff --git a/WebCore/html/canvas/CanvasObject.h b/WebCore/html/canvas/CanvasObject.h
&gt; index 55cc525..d89264a 100644
&gt; --- a/WebCore/html/canvas/CanvasObject.h
&gt; +++ b/WebCore/html/canvas/CanvasObject.h
&gt; @@ -52,6 +52,8 @@ namespace WebCore {
&gt;      protected:
&gt;          CanvasObject(GraphicsContext3D*);
&gt;          virtual void _deleteObject(Platform3DObject) = 0;
&gt; +        
&gt; +        GraphicsContext3D* context() { return m_context; }

Should be |const|

The rest looks good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142114</commentid>
    <comment_count>28</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-08-22 06:12:09 -0700</bug_when>
    <thetext>Sending        WebCore/ChangeLog
Adding         WebCore/html/canvas/CanvasBuffer.cpp
Adding         WebCore/html/canvas/CanvasBuffer.h
Adding         WebCore/html/canvas/CanvasBuffer.idl
Adding         WebCore/html/canvas/CanvasFramebuffer.cpp
Adding         WebCore/html/canvas/CanvasFramebuffer.h
Adding         WebCore/html/canvas/CanvasFramebuffer.idl
Sending        WebCore/html/canvas/CanvasObject.h
Adding         WebCore/html/canvas/CanvasProgram.cpp
Adding         WebCore/html/canvas/CanvasProgram.h
Adding         WebCore/html/canvas/CanvasProgram.idl
Adding         WebCore/html/canvas/CanvasRenderbuffer.cpp
Adding         WebCore/html/canvas/CanvasRenderbuffer.h
Adding         WebCore/html/canvas/CanvasRenderbuffer.idl
Sending        WebCore/html/canvas/CanvasRenderingContext3D.cpp
Sending        WebCore/html/canvas/CanvasRenderingContext3D.h
Adding         WebCore/html/canvas/CanvasShader.cpp
Adding         WebCore/html/canvas/CanvasShader.h
Adding         WebCore/html/canvas/CanvasShader.idl
Adding         WebCore/html/canvas/CanvasTexture.cpp
Adding         WebCore/html/canvas/CanvasTexture.h
Adding         WebCore/html/canvas/CanvasTexture.idl
Deleting       WebCore/platform/graphics/GraphicsContext3D.cpp
Sending        WebCore/platform/graphics/GraphicsContext3D.h
Sending        WebCore/platform/graphics/mac/GraphicsContext3DMac.cpp
Transmitting file data ........................
Committed revision 47670.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142115</commentid>
    <comment_count>29</comment_count>
      <attachid>38426</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-08-22 06:12:42 -0700</bug_when>
    <thetext>Comment on attachment 38426
Patch with new GL Object files

Patch was landed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142117</commentid>
    <comment_count>30</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-08-22 08:19:11 -0700</bug_when>
    <thetext>Build fix landed as http://trac.webkit.org/changeset/47671. http://trac.webkit.org/changeset/47669 started using CanvasRenderingContext and it wasn&apos;t yet hooked up to build. It didn&apos;t fix everything, because CanvasRenderingContext is also typedef&apos;d to CanvasRenderingContext2D in HTMLCanvasElement.h. Fixing more ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142122</commentid>
    <comment_count>31</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2009-08-22 08:59:31 -0700</bug_when>
    <thetext>Any reason the new files aren&apos;t in any of the project files?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142123</commentid>
    <comment_count>32</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-08-22 08:59:31 -0700</bug_when>
    <thetext>Ack! Sorry. I was trying to commit using git svn and I obviously botched it. Those files should never have been committed. I will fix them right now</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142256</commentid>
    <comment_count>33</comment_count>
      <attachid>38460</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-08-23 16:32:56 -0700</bug_when>
    <thetext>Created attachment 38460
Patch with remaining new files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142268</commentid>
    <comment_count>34</comment_count>
      <attachid>38460</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-08-23 21:36:26 -0700</bug_when>
    <thetext>Comment on attachment 38460
Patch with remaining new files

&gt; Index: WebCore/ChangeLog
&gt; ===================================================================

&gt; +        * bindings/js/JSHTMLCanvasElementCustom.cpp: Added Canvas3D method behind an ifdef
&gt; +        * html/CanvasByteArray.cpp: Added. Efficient array of bytes for passing to GL functions
&gt; +        * html/CanvasByteArray.h: Added.
&gt; +        * html/CanvasByteArray.idl: Added.
&gt; +        * html/CanvasNumberArray.cpp: Added. Efficient array of 32 bit floats for passing to GL functions
&gt; +        * html/CanvasNumberArray.h: Added.
&gt; +        * html/CanvasNumberArray.idl: Added.

New files are going to go in html/canvas, right?

&gt; Index: WebCore/bindings/js/JSHTMLCanvasElementCustom.cpp
&gt; ===================================================================

&gt; +#if ENABLE(3D_CANVAS)
&gt; +JSValue JSHTMLCanvasElement::getContext(JSC::ExecState* exec, JSC::ArgList const&amp; args)
&gt; +{
&gt; +    HTMLCanvasElement* imp = static_cast&lt;HTMLCanvasElement*&gt;(impl());
&gt; +    const UString&amp; contextId = args.at(0).toString(exec);
&gt; +
&gt; +    if (contextId == &quot;2d&quot;)
&gt; +        return toJS(exec, WTF::getPtr(reinterpret_cast&lt;CanvasRenderingContext2D*&gt;(imp-&gt;getContext(contextId))));
&gt; +    else if (contextId == &quot;webkit-3d&quot;)
&gt; +        return toJS(exec, WTF::getPtr(reinterpret_cast&lt;CanvasRenderingContext3D*&gt;(imp-&gt;getContext(contextId))));

No &apos;else&apos; after &apos;return&apos;.

&gt; Index: WebCore/html/CanvasByteArray.cpp
&gt; ===================================================================

&gt; + * Copyright (C) 2008, 2009 Apple Inc. All rights reserved.
&gt; + *
&gt; + * Redistribution and use in source and binary forms, with or without
&gt; + * modification, are permitted provided that the following conditions
&gt; + * are met:
&gt; + *
&gt; + * 1.  Redistributions of source code must retain the above copyright
&gt; + *     notice, this list of conditions and the following disclaimer.
&gt; + * 2.  Redistributions in binary form must reproduce the above copyright
&gt; + *     notice, this list of conditions and the following disclaimer in the
&gt; + *     documentation and/or other materials provided with the distribution.
&gt; + * 3.  Neither the name of Apple Computer, Inc. (&quot;Apple&quot;) nor the names of
&gt; + *     its contributors may be used to endorse or promote products derived
&gt; + *     from this software without specific prior written permission.

Should be 2-clause license. Are the dates right? Same for other files.

&gt; Index: WebCore/html/CanvasNumberArray.h
&gt; ===================================================================

&gt; +namespace WebCore {
&gt; +
&gt; +    class String;
&gt; +    
&gt; +    class CanvasNumberArray : public RefCounted&lt;CanvasNumberArray&gt; {
&gt; +    public:
&gt; +        static PassRefPtr&lt;CanvasNumberArray&gt; create(unsigned length);
&gt; +        
&gt; +        Vector&lt;float&gt;&amp; data() { return m_data; }
&gt; +
&gt; +        unsigned length() const { return m_data.size(); }
&gt; +        float item(unsigned index) { return (index &gt;= m_data.size()) ? 0 : m_data[index]; }

This should be &apos;const&apos;. Do you want a const data() accessor too?

Fix the above, and r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142304</commentid>
    <comment_count>35</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-08-24 06:39:44 -0700</bug_when>
    <thetext>Sending        WebCore/ChangeLog
Sending        WebCore/bindings/js/JSHTMLCanvasElementCustom.cpp
Adding         WebCore/html/canvas/CanvasByteArray.cpp
Adding         WebCore/html/canvas/CanvasByteArray.h
Adding         WebCore/html/canvas/CanvasByteArray.idl
Adding         WebCore/html/canvas/CanvasNumberArray.cpp
Adding         WebCore/html/canvas/CanvasNumberArray.h
Adding         WebCore/html/canvas/CanvasNumberArray.idl
Transmitting file data ........
Committed revision 47708.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142305</commentid>
    <comment_count>36</comment_count>
      <attachid>38460</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-08-24 06:40:25 -0700</bug_when>
    <thetext>Comment on attachment 38460
Patch with remaining new files

Landed this patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142319</commentid>
    <comment_count>37</comment_count>
      <attachid>38483</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-08-24 09:47:43 -0700</bug_when>
    <thetext>Created attachment 38483
Patch to add Canvas3D files to build

Note that the 3D-Canvas flag is off by default, so most of this code is not yet used. But the addition of CanvasRenderingContext as the base class for CanvasRenderingContext2D is in all builds</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142341</commentid>
    <comment_count>38</comment_count>
      <attachid>38483</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-08-24 11:20:19 -0700</bug_when>
    <thetext>Comment on attachment 38483
Patch to add Canvas3D files to build

&gt; Index: WebCore/bindings/js/JSDocumentCustom.cpp
&gt; ===================================================================

&gt; +    if (contextId == &quot;2d&quot;)
&gt; +        result = toJS(exec, WTF::getPtr(reinterpret_cast&lt;CanvasRenderingContext2D*&gt;(impl()-&gt;getCSSCanvasContext(contextId, name, width, height))));
&gt; +#if ENABLE(3D_CANVAS)
&gt; +    else if (contextId == &quot;webkit-3d&quot;)
&gt; +        result = toJS(exec, WTF::getPtr(reinterpret_cast&lt;CanvasRenderingContext3D*&gt;(impl()-&gt;getCSSCanvasContext(contextId, name, width, height))));
&gt; +#endif
&gt; +    
&gt; +    return result;

No &apos;else&apos; after &apos;return&apos;.

&gt; Index: WebCore/html/HTMLCanvasElement.cpp
&gt; ===================================================================

&gt; +#if ENABLE(3D_CANVAS)    
&gt; +bool HTMLCanvasElement::is3D() const
&gt; +{
&gt; +    CanvasRenderingContext* ctx = m_context.get();
&gt; +    return ctx &amp;&amp; !ctx-&gt;is2d();

Why not ctx &amp;&amp; ctx-&gt;is3d() ?

&gt; +PlatformGraphicsContext3D HTMLCanvasElement::context3D() const
&gt; +{
&gt; +    if (m_context &amp;&amp; m_context-&gt;is3d())
&gt; +        return static_cast&lt;CanvasRenderingContext3D*&gt;(m_context.get())-&gt;context3D();
&gt; +    else
&gt; +        return 0;

No &apos;else&apos; after &apos;return&apos;.

&gt; +Platform3DObject HTMLCanvasElement::texture3D() const
&gt; +{
&gt; +    if (m_context &amp;&amp; m_context-&gt;is3d())
&gt; +        return static_cast&lt;CanvasRenderingContext3D*&gt;(m_context.get())-&gt;texture3D();
&gt; +    else
&gt; +        return 0;

No &apos;else&apos; after &apos;return&apos;.

&gt; Index: WebCore/html/HTMLCanvasElement.h
&gt; ===================================================================

&gt; -    CanvasRenderingContext2D* renderingContext2D() { return m_2DContext.get(); }
&gt; +    CanvasRenderingContext* renderingContext() { return m_context.get(); }

Method should be &apos;const&apos;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142356</commentid>
    <comment_count>39</comment_count>
      <attachid>38483</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-08-24 11:47:21 -0700</bug_when>
    <thetext>Comment on attachment 38483
Patch to add Canvas3D files to build


&gt; +JSValue JSDocument::getCSSCanvasContext(JSC::ExecState* exec, JSC::ArgList const&amp; args)
&gt; +{
&gt; +    const UString&amp; contextId = args.at(0).toString(exec);
&gt; +    const UString&amp; name = args.at(1).toString(exec);
&gt; +    int width = args.at(2).toInt32(exec);
&gt; +    int height = args.at(3).toInt32(exec);
&gt; +
&gt; +    JSValue result = jsUndefined();
&gt; +    
&gt; +    if (contextId == &quot;2d&quot;)
&gt; +        result = toJS(exec, WTF::getPtr(reinterpret_cast&lt;CanvasRenderingContext2D*&gt;(impl()-&gt;getCSSCanvasContext(contextId, name, width, height))));
&gt; +#if ENABLE(3D_CANVAS)
&gt; +    else if (contextId == &quot;webkit-3d&quot;)
&gt; +        result = toJS(exec, WTF::getPtr(reinterpret_cast&lt;CanvasRenderingContext3D*&gt;(impl()-&gt;getCSSCanvasContext(contextId, name, width, height))));
&gt; +#endif
&gt; +    
&gt; +    return result;
&gt; +}
rather than result =...

i&apos;d prefer return toJS ... return toJS ... return jsUndefined();

&gt;  CanvasRenderingContext* HTMLCanvasElement::getContext(const String&amp; type)
&gt;  {
&gt;      if (type == &quot;2d&quot;) {
&gt; -        if (!m_2DContext)
&gt; -            m_2DContext.set(new CanvasRenderingContext2D(this));
&gt; -        return m_2DContext.get();
&gt; +        if (m_context &amp;&amp; !m_context-&gt;is2d())
&gt; +            m_context.clear();
&gt; +            if (!m_context)
&gt; +                m_context.set(new CanvasRenderingContext2D(this));
&gt;      }
&gt; -    return 0;
&gt; +#if ENABLE(3D_CANVAS)    
&gt; +    else if (type == &quot;webkit-3d&quot;) {
&gt; +        if (m_context &amp;&amp; !m_context-&gt;is3d())
&gt; +            m_context.clear();
&gt; +        if (!m_context) {
&gt; +            m_context.set(new CanvasRenderingContext3D(this));
&gt; +            setNeedsStyleRecalc();
&gt; +        }
&gt; +    }
&gt; +#endif
&gt; +    else if (m_context.get())
&gt; +        m_context.clear();
&gt; +    
&gt; +    return m_context.get();

What happens when you ask for an invalid context type (before this patch) is you get undefined back, but the context remains live.  After this patch the context is destroyed.  My reading of the spec says that this is incorrect.  A minor fix is to change 
&gt; +    else if (m_context.get())
&gt; +        m_context.clear();
to
&gt; +    else
&gt; +        return 0;

I feel better way would be to make the if (2d) and if (3d) paths return directly, then you can just drop all the else blocks, and return 0 at the end

&gt; +PlatformGraphicsContext3D HTMLCanvasElement::context3D() const
&gt; +{
&gt; +    if (m_context &amp;&amp; m_context-&gt;is3d())
&gt; +        return static_cast&lt;CanvasRenderingContext3D*&gt;(m_context.get())-&gt;context3D();
&gt; +    else
&gt; +        return 0;
drop the else and return 0 directly.

&gt; +}
&gt; +
&gt; +Platform3DObject HTMLCanvasElement::texture3D() const
&gt; +{
&gt; +    if (m_context &amp;&amp; m_context-&gt;is3d())
&gt; +        return static_cast&lt;CanvasRenderingContext3D*&gt;(m_context.get())-&gt;texture3D();
&gt; +    else
&gt; +        return 0;
&gt; +}
ditto

I think simon had a few comments so if you address those as well, r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142594</commentid>
    <comment_count>40</comment_count>
      <attachid>38551</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-08-25 09:29:45 -0700</bug_when>
    <thetext>Created attachment 38551
Replacement patch to add Canvas3D files to build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142611</commentid>
    <comment_count>41</comment_count>
      <attachid>38555</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-08-25 10:15:03 -0700</bug_when>
    <thetext>Created attachment 38555
One more replacement patch to add Canvas3D files to build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142612</commentid>
    <comment_count>42</comment_count>
      <attachid>38555</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-08-25 10:16:08 -0700</bug_when>
    <thetext>Comment on attachment 38555
One more replacement patch to add Canvas3D files to build

This file adds project files for all the builds, to add CanvasRenderingContext</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142622</commentid>
    <comment_count>43</comment_count>
      <attachid>38555</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-08-25 10:30:03 -0700</bug_when>
    <thetext>Comment on attachment 38555
One more replacement patch to add Canvas3D files to build

&gt;  CanvasRenderingContext* HTMLCanvasElement::getContext(const String&amp; type)
&gt;  {
&gt; +    // A Canvas can either be &quot;2D&quot; or &quot;3D&quot; never both. If you request a 2D canvas and the existing
&gt; +    // context is already 2D, just return that. If the existing context is 3D, then destroy it
&gt; +    // before creating a new 2D context. Vice versa when requesting a 3D canvas. Requesting a
&gt; +    // context with any other type string will destroy any existing context.
&gt;      if (type == &quot;2d&quot;) {
&gt; -        if (!m_2DContext)
&gt; -            m_2DContext.set(new CanvasRenderingContext2D(this));
&gt; -        return m_2DContext.get();
&gt; +        if (m_context &amp;&amp; !m_context-&gt;is2d())
&gt; +            m_context.clear();
&gt; +            if (!m_context)
&gt; +                m_context.set(new CanvasRenderingContext2D(this));
&gt;      }
&gt; -    return 0;
&gt; +#if ENABLE(3D_CANVAS)    
&gt; +    else if (type == &quot;webkit-3d&quot;) {
&gt; +        if (m_context &amp;&amp; !m_context-&gt;is3d())
&gt; +            m_context.clear();
&gt; +        if (!m_context) {
&gt; +            m_context.set(new CanvasRenderingContext3D(this));
&gt; +            setNeedsStyleRecalc();
&gt; +        }
&gt; +    }
&gt; +#endif

This logic seems wrong. I don&apos;t grok the if (!m_context) tests.

&gt; @@ -192,8 +212,8 @@ void HTMLCanvasElement::reset()
&gt;      bool hadImageBuffer = m_createdImageBuffer;
&gt;      m_createdImageBuffer = false;
&gt;      m_imageBuffer.clear();
&gt; -    if (m_2DContext)
&gt; -        m_2DContext-&gt;reset();
&gt; +    if (m_context &amp;&amp; m_context-&gt;is2d())
&gt; +        static_cast&lt;CanvasRenderingContext2D*&gt;(m_context.get())-&gt;reset();

What about the 3d context? Is there a notion of &apos;reset&apos; for 3d?


&gt; -    CanvasRenderingContext2D* renderingContext2D() { return m_2DContext.get(); }
&gt; +    CanvasRenderingContext* renderingContext() { return m_context.get(); }

Still missing the &apos;const&apos;.

&gt; Index: WebCore/html/canvas/CanvasRenderingContext.idl
&gt; ===================================================================
&gt; --- WebCore/html/canvas/CanvasRenderingContext.idl	(revision 47748)
&gt; +++ WebCore/html/canvas/CanvasRenderingContext.idl	(working copy)
&gt; @@ -27,12 +27,12 @@ module html {
&gt;  
&gt;      interface [
&gt;          GenerateConstructor,
&gt; +        CustomToJS,
&gt;          InterfaceUUID=98fb48ae-7216-489c-862b-8e1217fc4443,
&gt;          ImplementationUUID=ab4f0781-152f-450e-9546-5b3987491a54
&gt;      ] CanvasRenderingContext {
&gt;  
&gt;          readonly attribute HTMLCanvasElement canvas;
&gt; -        readonly attribute DOMString type;

Why did this go away?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142656</commentid>
    <comment_count>44</comment_count>
      <attachid>38555</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-08-25 11:41:50 -0700</bug_when>
    <thetext>Comment on attachment 38555
One more replacement patch to add Canvas3D files to build

r=me with comments addressed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142658</commentid>
    <comment_count>45</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-08-25 11:46:34 -0700</bug_when>
    <thetext>Sending        JavaScriptCore/ChangeLog
Sending        JavaScriptCore/JavaScriptCore.exp
Sending        LayoutTests/ChangeLog
Sending        LayoutTests/fast/dom/prototype-inheritance-2-expected.txt
Sending        WebCore/ChangeLog
Sending        WebCore/DerivedSources.cpp
Sending        WebCore/DerivedSources.make
Sending        WebCore/GNUmakefile.am
Sending        WebCore/WebCore.gypi
Sending        WebCore/WebCore.pro
Sending        WebCore/WebCore.vcproj/WebCore.vcproj
Sending        WebCore/WebCore.xcodeproj/project.pbxproj
Sending        WebCore/WebCoreSources.bkl
Sending        WebCore/bindings/js/JSCanvasRenderingContext2DCustom.cpp
Sending        WebCore/bindings/js/JSDOMBinding.cpp
Sending        WebCore/bindings/js/JSDocumentCustom.cpp
Sending        WebCore/bindings/js/JSHTMLCanvasElementCustom.cpp
Sending        WebCore/dom/Document.cpp
Sending        WebCore/dom/Document.h
Sending        WebCore/html/HTMLCanvasElement.cpp
Sending        WebCore/html/HTMLCanvasElement.h
Sending        WebCore/html/canvas/CanvasObject.cpp
Sending        WebCore/html/canvas/CanvasRenderingContext.idl
Sending        WebCore/html/canvas/CanvasRenderingContext2D.cpp
Sending        WebCore/html/canvas/CanvasRenderingContext2D.h
Sending        WebCore/html/canvas/CanvasRenderingContext2D.idl
Sending        WebCore/html/canvas/CanvasRenderingContext3D.idl
Transmitting file data ...........................
Committed revision 47752.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142659</commentid>
    <comment_count>46</comment_count>
      <attachid>38555</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-08-25 11:47:01 -0700</bug_when>
    <thetext>Comment on attachment 38555
One more replacement patch to add Canvas3D files to build

Landed this patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142737</commentid>
    <comment_count>47</comment_count>
      <attachid>38576</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-08-25 16:49:46 -0700</bug_when>
    <thetext>Created attachment 38576
Patch with Platform specific rendering changes for Canvas3D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143101</commentid>
    <comment_count>48</comment_count>
      <attachid>38667</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-08-27 06:39:39 -0700</bug_when>
    <thetext>Created attachment 38667
Final patch for Canvas3D work</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143122</commentid>
    <comment_count>49</comment_count>
      <attachid>38667</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-08-27 08:43:56 -0700</bug_when>
    <thetext>Comment on attachment 38667
Final patch for Canvas3D work

&gt; Index: WebCore/ChangeLog
&gt; ===================================================================

&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Final patch for Canvas 3D support
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=28018
&gt; +
&gt; +        This hooks everything up and provides a working implementation of
&gt; +        Canvas 3D.

You need to explain a few things here, like the style recalc hack, the fact that a
3d canvas needs a RenderLayer and a compositing layer, and why.

The whole point of changelogs (and the commit message) is to explain why the
changes were made so that someone can come back later and figure out why you
made the changes you did. Often that person is the committer!

&gt; Index: WebCore/bindings/js/JSCanvasRenderingContext3DCustom.cpp
&gt; ===================================================================

&gt; -        count = args.at(2).toInt32(exec);
&gt; +        unsigned int count = args.at(2).toInt32(exec);

You are shadowing a variable at function scope here. A different name is probably better.

&gt; Index: WebCore/html/HTMLCanvasElement.cpp
&gt; ===================================================================

&gt;          if (!m_context) {
&gt;              m_context.set(new CanvasRenderingContext3D(this));
&gt; -            setNeedsStyleRecalc();
&gt; +            setNeedsStyleRecalc(SyntheticStyleChange);

You need a comment here explaining why you call setNeedsStyleRecalc().

&gt; Index: WebCore/platform/graphics/GraphicsContext3D.h
&gt; ===================================================================
&gt;  
&gt;  typedef void* PlatformGraphicsContext3D;
&gt; +#define NO_PLATFORM_GRAPHICS_CONTEXT_3D 0
&gt;  typedef GLuint Platform3DObject;
&gt; +#define NO_PLATFORM_3D_OBJECT 0
&gt;  #else
&gt;  typedef void* PlatformGraphicsContext3D;
&gt; +#define NO_PLATFORM_GRAPHICS_CONTEXT_3D 0
&gt;  typedef int Platform3DObject;
&gt; +#define NO_PLATFORM_3D_OBJECT 0
&gt;  #endif

It seems that NO_PLATFORM_GRAPHICS_CONTEXT_3D and NO_PLATFORM_3D_OBJECT should
be constants, rather than #defines, like:

typedef void* PlatformGraphicsContext3D;
const PlatformGraphicsContext3D NullPlatformGraphicsContext3D = 0; 

typedef GLuint Platform3DObject;
const Platform3DObject NullPlatform3DObject = 0; 

&gt; Index: WebCore/platform/graphics/GraphicsLayer.h
&gt; ===================================================================
&gt;  typedef void* PlatformLayer;
&gt; -typedef void* NativeLayer;
&gt; +typedef int NativeLayer;

Why this change? It&apos;s not 64-bit friendly.

&gt; +#if ENABLE(3D_CANVAS)
&gt; +    virtual void setContentsTo3DCanvas(PlatformGraphicsContext3D, Platform3DObject) { }

For setContentsTo3DCanvas(), the method names needs to match the arguments. You&apos;re not passing
in a canvas 3d, so perhaps it should be setContentsToTexture() or something. Can the argument
just be a GraphicsContext3D?

&gt; +    virtual void redraw3DCanvas() { }

I don&apos;t like &quot;redraw&quot;. What does it really mean? &quot;recomposite&quot;? Can setNeedsDisplay() do
the same job?

&gt; +#if ENABLE(3D_CANVAS)
&gt; +    void setHas3DLayer(bool has3DLayer, PlatformGraphicsContext3D context = NO_PLATFORM_GRAPHICS_CONTEXT_3D, Platform3DObject texture = NO_PLATFORM_3D_OBJECT);
&gt; +#endif

Why do you need both this and the above method?

&gt; Index: WebCore/platform/graphics/mac/GraphicsLayerCA.h
&gt; ===================================================================

&gt; +#if ENABLE(3D_CANVAS)
&gt; +    void updateContents3DCanvas();
&gt; +#endif

Maybe updateContentsTexture()?

&gt; +#if ENABLE(3D_CANVAS)
&gt; +    PlatformGraphicsContext3D m_3DContext;
&gt; +    Platform3DObject m_3DTexture;
&gt; +#endif

What&apos;s the ownership model for these members? Who is responsible for freeing the
associated resources?

&gt; Index: WebCore/platform/graphics/mac/GraphicsLayerCA.mm
&gt; ===================================================================

&gt; +#if ENABLE(3D_CANVAS)
&gt; +void GraphicsLayerCA::setContentsTo3DCanvas(PlatformGraphicsContext3D context, Platform3DObject texture)
&gt; +{
&gt; +    if (context == m_3DContext &amp;&amp; texture == m_3DTexture)
&gt; +        return;
&gt; +        
&gt; +    m_3DContext = context;
&gt; +    m_3DTexture = texture;
&gt; +    
&gt; +    noteLayerPropertyChanged(ChildrenChanged);
&gt; +    
&gt; +    BEGIN_BLOCK_OBJC_EXCEPTIONS
&gt; +
&gt; +    if (context != NO_PLATFORM_GRAPHICS_CONTEXT_3D &amp;&amp; texture != NO_PLATFORM_3D_OBJECT) {
&gt; +        // create the inner 3d layer
&gt; +        m_contentsLayer = [[Canvas3DLayer alloc] initWithContext:(CGLContextObj) context texture: (GLuint) texture];

This is leaking the Canvas3DLayer. you need to use AdoptNS.

No spaces after the, and use static_cast&lt;&gt;.

&gt; +#if ENABLE(3D_CANVAS)
&gt; +void GraphicsLayerCA::redraw3DCanvas()
&gt; +{
&gt; +    if (m_contentsLayerPurpose == ContentsLayerFor3DCanvas)
&gt; +        [m_contentsLayer.get() setNeedsDisplay];
&gt; +}
&gt; +#endif

Aha, it is just setNeedsDisplay!

&gt; Index: WebCore/rendering/RenderHTMLCanvas.cpp
&gt; ===================================================================

&gt; +bool RenderHTMLCanvas::requiresLayer() const
&gt; +{
&gt; +    if (RenderReplaced::requiresLayer())
&gt; +        return true;
&gt; +    
&gt; +#if ENABLE(3D_CANVAS)
&gt; +    HTMLCanvasElement* canvas = reinterpret_cast&lt;HTMLCanvasElement*&gt;(node());

I think a static_cast&lt;&gt; should work there

&gt; Index: WebCore/rendering/RenderLayerBacking.cpp
&gt; ===================================================================

&gt; +#if ENABLE(3D_CANVAS)    
&gt; +        else if (renderer()-&gt;isCanvas()) {
&gt; +            HTMLCanvasElement* canvas = reinterpret_cast&lt;HTMLCanvasElement*&gt;(renderer()-&gt;node());

static_cast&lt;&gt;

&gt; +                if (canvas-&gt;context3D()) {
&gt; +                    m_graphicsLayer-&gt;setContentsTo3DCanvas(canvas-&gt;context3D(), canvas-&gt;texture3D());
&gt; +                    m_graphicsLayer-&gt;setDrawsContent(true);

Why setDrawsContent(true)? That means we&apos;ll create backing store for the primary layer,
which you don&apos;t want.

Have you tested borders, outlines etc. on a 3d canvas? You should include some layout tests
with pixel results that verify the rendering of these.

&gt; +#if ENABLE(3D_CANVAS)    
&gt; +    bool is3DCanvas = false;
&gt; +    if (renderer()-&gt;isCanvas()) {
&gt; +        HTMLCanvasElement* canvas = reinterpret_cast&lt;HTMLCanvasElement*&gt;(renderer()-&gt;node());
&gt; +        is3DCanvas = canvas-&gt;is3D();
&gt; +    }
&gt; +    if (is3DCanvas)
&gt; +        return true;

Seems like you could eliminate is3DCanvas and just do an earlier return here. In fact,
if you know it&apos;s a canvas, you can always return.

&gt;  void RenderLayerBacking::rendererContentChanged()
&gt;  {
&gt; -    if (canUseDirectCompositing() &amp;&amp; renderer()-&gt;isImage())
&gt; -        updateImageContents();
&gt; +    if (canUseDirectCompositing()) {
&gt; +        if (renderer()-&gt;isImage())
&gt; +            updateImageContents();
&gt; +        else {
&gt; +#if ENABLE(3D_CANVAS)    
&gt; +            if (renderer()-&gt;isCanvas()) {
&gt; +                HTMLCanvasElement* canvas = reinterpret_cast&lt;HTMLCanvasElement*&gt;(renderer()-&gt;node());

static_cast&lt;&gt;

&gt; Index: WebCore/rendering/RenderLayerCompositor.cpp
&gt; ===================================================================

&gt;  bool RenderLayerCompositor::requiresCompositingLayer(const RenderLayer* layer) const
&gt;  {
&gt; +#if ENABLE(3D_CANVAS)    
&gt; +    bool is3DCanvas = false;
&gt; +    if (layer-&gt;renderer()-&gt;isCanvas()) {
&gt; +        HTMLCanvasElement* canvas = reinterpret_cast&lt;HTMLCanvasElement*&gt;(layer-&gt;renderer()-&gt;node());
&gt; +        is3DCanvas = canvas-&gt;is3D();
&gt; +    }
&gt; +#endif

I&apos;d prefer this be wrapped up in its own method, requiresCompositingForCanvs().

&gt; Index: LayoutTests/fast/dom/Window/window-properties.html
&gt; ===================================================================
&gt; --- LayoutTests/fast/dom/Window/window-properties.html	(revision 47753)
&gt; +++ LayoutTests/fast/dom/Window/window-properties.html	(working copy)
&gt; @@ -60,7 +60,9 @@ var __skip__ = {
&gt;      &quot;window.objCPlugin&quot; : 1,
&gt;      &quot;window.objCPluginFunction&quot; : 1,
&gt;      &quot;window.plainText&quot; : 1,
&gt; -    &quot;window.textInputController&quot; : 1
&gt; +    &quot;window.textInputController&quot; : 1,
&gt; +    
&gt; +    &quot;window.CanvasRenderingContext3D&quot; : 1 // We ignore CanvasRenderingContext3D and test it elsewhere, since it is not in all builds

Any reason for the blank line?

r- for lack of some basic tests and the few quibbles noted above. It&apos;s mostly good though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143244</commentid>
    <comment_count>50</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-08-27 16:56:18 -0700</bug_when>
    <thetext>Sending        LayoutTests/ChangeLog
Adding         LayoutTests/fast/canvas/change-context-expected.txt
Adding         LayoutTests/fast/canvas/change-context.html
Sending        LayoutTests/fast/dom/Window/window-properties.html
Sending        LayoutTests/fast/dom/resources/prototype-inheritance-2.js
Sending        LayoutTests/fast/dom/resources/prototype-inheritance.js
Sending        WebCore/ChangeLog
Sending        WebCore/WebCore.xcodeproj/project.pbxproj
Sending        WebCore/bindings/js/JSCanvasRenderingContext3DCustom.cpp
Sending        WebCore/bindings/js/JSCanvasRenderingContextCustom.cpp
Sending        WebCore/dom/Element.cpp
Sending        WebCore/dom/Node.cpp
Sending        WebCore/dom/Node.h
Sending        WebCore/html/HTMLCanvasElement.cpp
Sending        WebCore/html/HTMLCanvasElement.h
Sending        WebCore/html/canvas/CanvasBuffer.cpp
Sending        WebCore/html/canvas/CanvasBuffer.h
Sending        WebCore/html/canvas/CanvasFramebuffer.cpp
Sending        WebCore/html/canvas/CanvasFramebuffer.h
Sending        WebCore/html/canvas/CanvasObject.cpp
Sending        WebCore/html/canvas/CanvasObject.h
Sending        WebCore/html/canvas/CanvasProgram.cpp
Sending        WebCore/html/canvas/CanvasProgram.h
Sending        WebCore/html/canvas/CanvasRenderbuffer.cpp
Sending        WebCore/html/canvas/CanvasRenderbuffer.h
Sending        WebCore/html/canvas/CanvasRenderingContext3D.cpp
Sending        WebCore/html/canvas/CanvasRenderingContext3D.h
Sending        WebCore/html/canvas/CanvasShader.cpp
Sending        WebCore/html/canvas/CanvasShader.h
Sending        WebCore/html/canvas/CanvasTexture.cpp
Sending        WebCore/html/canvas/CanvasTexture.h
Sending        WebCore/page/DOMWindow.idl
Sending        WebCore/page/animation/AnimationBase.cpp
Sending        WebCore/page/animation/AnimationController.cpp
Sending        WebCore/platform/graphics/GraphicsContext3D.h
Sending        WebCore/platform/graphics/GraphicsLayer.h
Sending        WebCore/platform/graphics/mac/GraphicsContext3DMac.cpp
Sending        WebCore/platform/graphics/mac/GraphicsLayerCA.h
Sending        WebCore/platform/graphics/mac/GraphicsLayerCA.mm
Sending        WebCore/rendering/RenderHTMLCanvas.cpp
Sending        WebCore/rendering/RenderHTMLCanvas.h
Sending        WebCore/rendering/RenderLayerBacking.cpp
Sending        WebCore/rendering/RenderLayerCompositor.cpp
Sending        WebCore/rendering/RenderLayerCompositor.h
Sending        WebCore/rendering/RenderObject.h
Transmitting file data .............................................
Committed revision 47843.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143245</commentid>
    <comment_count>51</comment_count>
      <attachid>38667</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-08-27 16:56:48 -0700</bug_when>
    <thetext>Comment on attachment 38667
Final patch for Canvas3D work

Simon hand reviewed this and it is now landed</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34145</attachid>
            <date>2009-08-05 10:24:08 -0700</date>
            <delta_ts>2009-08-21 15:46:32 -0700</delta_ts>
            <desc>Patch 1 of 4: Add ENABLE_3D_CANVAS flag to the build</desc>
            <filename>webgl-1.patch</filename>
            <type>text/plain</type>
            <size>6672</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NjgwNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDA3IEBACisyMDA5LTA4LTA1ICBDaHJpcyBNYXJyaW4gIDxjbWFycmluQGFwcGxl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgc3VwcG9ydCBmb3IgbmV3IEVOQUJMRV8zRF9DQU5WQVMgZmxhZworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgwMTgKKworICAgICAgICBUaGlzIGlz
IHRoZSBmaXJzdCBvZiA0IHBhdGNoZXMuIFRoZSBmbGFnIGRlZmF1bHRzIHRvIDAKKworICAgICAg
ICAqIENvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnOgorCiAyMDA5LTA4LTA1
ICBBbmRyYXMgQmVjc2kgIDxiZWNzaS5hbmRyYXNAc3R1ZC51LXN6ZWdlZC5odT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBTaW1vbiBIYXVzbWFubi4KSW5kZXg6IFdlYkNvcmUvQ29uZmlndXJhdGlv
bnMvRmVhdHVyZURlZmluZXMueGNjb25maWcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9Db25maWd1
cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZwkocmV2aXNpb24gNDY4MDApCisrKyBXZWJD
b3JlL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw2ICsyOCw4IEBACiAKIC8vIFNldCBhbnkgRU5BQkxFX0ZFQVRVUkVfTkFNRSBtYWNy
byB0byBhbiBlbXB0eSBzdHJpbmcgdG8gZGlzYWJsZSB0aGF0IGZlYXR1cmUuCiAKK0VOQUJMRV8z
RF9DQU5WQVMgPSBFTkFCTEVfM0RfQ0FOVkFTOworCiBFTkFCTEVfM0RfUkVOREVSSU5HID0gJChF
TkFCTEVfM0RfUkVOREVSSU5HXyQoTUFDX09TX1hfVkVSU0lPTl9NQUpPUikpOwogRU5BQkxFXzNE
X1JFTkRFUklOR18xMDUwID0gRU5BQkxFXzNEX1JFTkRFUklORzsKIEVOQUJMRV8zRF9SRU5ERVJJ
TkdfMTA2MCA9IEVOQUJMRV8zRF9SRU5ERVJJTkc7CkBAIC01Nyw0ICs1OSw0IEBAIEVOQUJMRV9X
T1JLRVJTID0gRU5BQkxFX1dPUktFUlM7CiBFTkFCTEVfWFBBVEggPSBFTkFCTEVfWFBBVEg7CiBF
TkFCTEVfWFNMVCA9IEVOQUJMRV9YU0xUOwogCi1GRUFUVVJFX0RFRklORVMgPSAkKEVOQUJMRV8z
RF9SRU5ERVJJTkcpICQoRU5BQkxFX0NIQU5ORUxfTUVTU0FHSU5HKSAkKEVOQUJMRV9EQVRBQkFT
RSkgJChFTkFCTEVfREFUQUdSSUQpICQoRU5BQkxFX0RPTV9TVE9SQUdFKSAkKEVOQUJMRV9GSUxU
RVJTKSAkKEVOQUJMRV9HRU9MT0NBVElPTikgJChFTkFCTEVfSUNPTkRBVEFCQVNFKSAkKEVOQUJM
RV9KQVZBU0NSSVBUX0RFQlVHR0VSKSAkKEVOQUJMRV9PRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMp
ICQoRU5BQkxFX1JVQlkpICQoRU5BQkxFX1NIQVJFRF9XT1JLRVJTKSAkKEVOQUJMRV9TVkcpICQo
RU5BQkxFX1NWR19BTklNQVRJT04pICQoRU5BQkxFX1NWR19BU19JTUFHRSkgJChFTkFCTEVfU1ZH
X0RPTV9PQkpDX0JJTkRJTkdTKSAkKEVOQUJMRV9TVkdfRk9OVFMpICQoRU5BQkxFX1NWR19GT1JF
SUdOX09CSkVDVCkgJChFTkFCTEVfU1ZHX1VTRSkgJChFTkFCTEVfVklERU8pICQoRU5BQkxFX1dF
Ql9TT0NLRVRTKSAkKEVOQUJMRV9XTUwpICQoRU5BQkxFX1dPUktFUlMpICQoRU5BQkxFX1hQQVRI
KSAkKEVOQUJMRV9YU0xUKTsKK0ZFQVRVUkVfREVGSU5FUyA9ICQoRU5BQkxFXzNEX0NBTlZBUykg
JChFTkFCTEVfM0RfUkVOREVSSU5HKSAkKEVOQUJMRV9DSEFOTkVMX01FU1NBR0lORykgJChFTkFC
TEVfREFUQUJBU0UpICQoRU5BQkxFX0RBVEFHUklEKSAkKEVOQUJMRV9ET01fU1RPUkFHRSkgJChF
TkFCTEVfRklMVEVSUykgJChFTkFCTEVfR0VPTE9DQVRJT04pICQoRU5BQkxFX0lDT05EQVRBQkFT
RSkgJChFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUikgJChFTkFCTEVfT0ZGTElORV9XRUJfQVBQ
TElDQVRJT05TKSAkKEVOQUJMRV9SVUJZKSAkKEVOQUJMRV9TSEFSRURfV09SS0VSUykgJChFTkFC
TEVfU1ZHKSAkKEVOQUJMRV9TVkdfQU5JTUFUSU9OKSAkKEVOQUJMRV9TVkdfQVNfSU1BR0UpICQo
RU5BQkxFX1NWR19ET01fT0JKQ19CSU5ESU5HUykgJChFTkFCTEVfU1ZHX0ZPTlRTKSAkKEVOQUJM
RV9TVkdfRk9SRUlHTl9PQkpFQ1QpICQoRU5BQkxFX1NWR19VU0UpICQoRU5BQkxFX1ZJREVPKSAk
KEVOQUJMRV9XRUJfU09DS0VUUykgJChFTkFCTEVfV01MKSAkKEVOQUJMRV9XT1JLRVJTKSAkKEVO
QUJMRV9YUEFUSCkgJChFTkFCTEVfWFNMVCk7CkluZGV4OiBXZWJLaXQvbWFjL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gNDY4MDQpCisrKyBX
ZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExIEBACisyMDA5
LTA4LTA1ICBDaHJpcyBNYXJyaW4gIDxjbWFycmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAuLi4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MDE4CisKKyAgICAgICAgLi4uCisKKyAg
ICAgICAgKiBDb25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZzoKKwogMjAwOS0w
OC0wNCAgTWljaGFlbCBOb3JkbWFuICA8bWljaGFlbG5AZ29vZ2xlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBBbGV4ZXkgUHJvc2t1cnlha292LgpJbmRleDogV2ViS2l0L21hYy9Db25maWd1
cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFj
L0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCShyZXZpc2lvbiA0NjgwMCkK
KysrIFdlYktpdC9tYWMvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDggQEAKIAogLy8gU2V0IGFueSBFTkFCTEVfRkVBVFVS
RV9OQU1FIG1hY3JvIHRvIGFuIGVtcHR5IHN0cmluZyB0byBkaXNhYmxlIHRoYXQgZmVhdHVyZS4K
IAorRU5BQkxFXzNEX0NBTlZBUyA9IEVOQUJMRV8zRF9DQU5WQVM7CisKIEVOQUJMRV8zRF9SRU5E
RVJJTkcgPSAkKEVOQUJMRV8zRF9SRU5ERVJJTkdfJChNQUNfT1NfWF9WRVJTSU9OX01BSk9SKSk7
CiBFTkFCTEVfM0RfUkVOREVSSU5HXzEwNTAgPSBFTkFCTEVfM0RfUkVOREVSSU5HOwogRU5BQkxF
XzNEX1JFTkRFUklOR18xMDYwID0gRU5BQkxFXzNEX1JFTkRFUklORzsKQEAgLTU3LDQgKzU5LDQg
QEAgRU5BQkxFX1dPUktFUlMgPSBFTkFCTEVfV09SS0VSUzsKIEVOQUJMRV9YUEFUSCA9IEVOQUJM
RV9YUEFUSDsKIEVOQUJMRV9YU0xUID0gRU5BQkxFX1hTTFQ7CiAKLUZFQVRVUkVfREVGSU5FUyA9
ICQoRU5BQkxFXzNEX1JFTkRFUklORykgJChFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkcpICQoRU5B
QkxFX0RBVEFCQVNFKSAkKEVOQUJMRV9EQVRBR1JJRCkgJChFTkFCTEVfRE9NX1NUT1JBR0UpICQo
RU5BQkxFX0ZJTFRFUlMpICQoRU5BQkxFX0dFT0xPQ0FUSU9OKSAkKEVOQUJMRV9JQ09OREFUQUJB
U0UpICQoRU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHRVIpICQoRU5BQkxFX09GRkxJTkVfV0VCX0FQ
UExJQ0FUSU9OUykgJChFTkFCTEVfUlVCWSkgJChFTkFCTEVfU0hBUkVEX1dPUktFUlMpICQoRU5B
QkxFX1NWRykgJChFTkFCTEVfU1ZHX0FOSU1BVElPTikgJChFTkFCTEVfU1ZHX0FTX0lNQUdFKSAk
KEVOQUJMRV9TVkdfRE9NX09CSkNfQklORElOR1MpICQoRU5BQkxFX1NWR19GT05UUykgJChFTkFC
TEVfU1ZHX0ZPUkVJR05fT0JKRUNUKSAkKEVOQUJMRV9TVkdfVVNFKSAkKEVOQUJMRV9WSURFTykg
JChFTkFCTEVfV0VCX1NPQ0tFVFMpICQoRU5BQkxFX1dNTCkgJChFTkFCTEVfV09SS0VSUykgJChF
TkFCTEVfWFBBVEgpICQoRU5BQkxFX1hTTFQpOworRkVBVFVSRV9ERUZJTkVTID0gJChFTkFCTEVf
M0RfQ0FOVkFTKSAkKEVOQUJMRV8zRF9SRU5ERVJJTkcpICQoRU5BQkxFX0NIQU5ORUxfTUVTU0FH
SU5HKSAkKEVOQUJMRV9EQVRBQkFTRSkgJChFTkFCTEVfREFUQUdSSUQpICQoRU5BQkxFX0RPTV9T
VE9SQUdFKSAkKEVOQUJMRV9GSUxURVJTKSAkKEVOQUJMRV9HRU9MT0NBVElPTikgJChFTkFCTEVf
SUNPTkRBVEFCQVNFKSAkKEVOQUJMRV9KQVZBU0NSSVBUX0RFQlVHR0VSKSAkKEVOQUJMRV9PRkZM
SU5FX1dFQl9BUFBMSUNBVElPTlMpICQoRU5BQkxFX1JVQlkpICQoRU5BQkxFX1NIQVJFRF9XT1JL
RVJTKSAkKEVOQUJMRV9TVkcpICQoRU5BQkxFX1NWR19BTklNQVRJT04pICQoRU5BQkxFX1NWR19B
U19JTUFHRSkgJChFTkFCTEVfU1ZHX0RPTV9PQkpDX0JJTkRJTkdTKSAkKEVOQUJMRV9TVkdfRk9O
VFMpICQoRU5BQkxFX1NWR19GT1JFSUdOX09CSkVDVCkgJChFTkFCTEVfU1ZHX1VTRSkgJChFTkFC
TEVfVklERU8pICQoRU5BQkxFX1dFQl9TT0NLRVRTKSAkKEVOQUJMRV9XTUwpICQoRU5BQkxFX1dP
UktFUlMpICQoRU5BQkxFX1hQQVRIKSAkKEVOQUJMRV9YU0xUKTsKSW5kZXg6IFdlYktpdFRvb2xz
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9u
IDQ2ODA0KQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTEgQEAKKzIwMDktMDgtMDUgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzdXBw
b3J0IGZvciBuZXcgRU5BQkxFXzNEX0NBTlZBUyBmbGFnCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODAxOAorCisgICAgICAgIFRoaXMgaXMgdGhlIGZp
cnN0IG9mIDQgcGF0Y2hlcy4gVGhlIGZsYWcgZGVmYXVsdHMgdG8gMAorCisgICAgICAgICogU2Ny
aXB0cy9idWlsZC13ZWJraXQ6CisKIDIwMDktMDgtMDUgIEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFu
c2VuICA8a2VubmV0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEhh
dXNtYW5uLgpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQJKHJldmlzaW9uIDQ2ODAwKQor
KysgV2ViS2l0VG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQJKHdvcmtpbmcgY29weSkKQEAgLTQ1
LDcgKzQ1LDcgQEAgbXkgJGNsZWFuID0gMDsKIG15ICRtaW5pbWFsID0gMDsKIG15ICRtYWtlQXJn
czsKIAotbXkgKCR0aHJlZURSZW5kZXJpbmdTdXBwb3J0LCAkY2hhbm5lbE1lc3NhZ2luZ1N1cHBv
cnQsICRkYXRhYmFzZVN1cHBvcnQsICRkYXRhZ3JpZFN1cHBvcnQsICRkb21TdG9yYWdlU3VwcG9y
dCwKK215ICgkdGhyZWVEQ2FudmFzU3VwcG9ydCwgJHRocmVlRFJlbmRlcmluZ1N1cHBvcnQsICRj
aGFubmVsTWVzc2FnaW5nU3VwcG9ydCwgJGRhdGFiYXNlU3VwcG9ydCwgJGRhdGFncmlkU3VwcG9y
dCwgJGRvbVN0b3JhZ2VTdXBwb3J0LAogICAgICRmaWx0ZXJzU3VwcG9ydCwgJGdlb2xvY2F0aW9u
U3VwcG9ydCwgJGdub21lS2V5cmluZ1N1cHBvcnQsICRpY29uRGF0YWJhc2VTdXBwb3J0LAogICAg
ICRqYXZhU2NyaXB0RGVidWdnZXJTdXBwb3J0LCAkb2ZmbGluZVdlYkFwcGxpY2F0aW9uU3VwcG9y
dCwgJHJ1YnlTdXBwb3J0LCAkc2hhcmVkV29ya2Vyc1N1cHBvcnQsIAogICAgICRzdmdTdXBwb3J0
LCAkc3ZnQW5pbWF0aW9uU3VwcG9ydCwgJHN2Z0FzSW1hZ2VTdXBwb3J0LCAkc3ZnRE9NT2JqQ0Jp
bmRpbmdzU3VwcG9ydCwgJHN2Z0ZvbnRzU3VwcG9ydCwKQEAgLTUzLDYgKzUzLDkgQEAgbXkgKCR0
aHJlZURSZW5kZXJpbmdTdXBwb3J0LCAkY2hhbm5lbE1lcwogICAgICR4cGF0aFN1cHBvcnQsICR4
c2x0U3VwcG9ydCwgJGNvdmVyYWdlU3VwcG9ydCk7CiAKIG15IEBmZWF0dXJlcyA9ICgKKyAgICB7
IG9wdGlvbiA9PiAiM2QtY2FudmFzIiwgZGVzYyA9PiAiVG9nZ2xlIDNEIGNhbnZhcyBzdXBwb3J0
IiwKKyAgICAgIGRlZmluZSA9PiAiRU5BQkxFXzNEX0NBTlZBUyIsIGRlZmF1bHQgPT4gMCwgdmFs
dWUgPT4gXCR0aHJlZURDYW52YXNTdXBwb3J0IH0sCisKICAgICB7IG9wdGlvbiA9PiAiM2QtcmVu
ZGVyaW5nIiwgZGVzYyA9PiAiVG9nZ2xlIDNEIHJlbmRlcmluZyBzdXBwb3J0IiwKICAgICAgIGRl
ZmluZSA9PiAiRU5BQkxFXzNEX1JFTkRFUklORyIsIGRlZmF1bHQgPT4gKGlzQXBwbGVNYWNXZWJL
aXQoKSAmJiAhaXNUaWdlcigpKSwgdmFsdWUgPT4gXCR0aHJlZURSZW5kZXJpbmdTdXBwb3J0IH0s
CiAK
</data>
<flag name="review"
          id="18307"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34146</attachid>
            <date>2009-08-05 10:36:53 -0700</date>
            <delta_ts>2009-08-21 12:11:48 -0700</delta_ts>
            <desc>Patch 2 of 4: New Canvas 3D files</desc>
            <filename>webgl-2.patch</filename>
            <type>text/plain</type>
            <size>250594</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NjgwNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDA3IEBACisyMDA5LTA4LTA1ICBDaHJpcyBNYXJyaW4gIDxjbWFycmluQGFwcGxl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
bGwgb2YgdGhlIG5ldyBDYW52YXMgM0QgZmlsZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MDE4CisKKyAgICAgICAgUGF0Y2ggMiBvZiA0LiBUaGlz
IGlzIGp1c3QgdGhlIG5ldyBmaWxlcy4gVGhleSBhcmUgbm90IGNvbXBpbGVkIHlldC4KKworICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTQ2FudmFzTnVtYmVyQXJyYXlDdXN0b20uY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkpTQ2FudmFzTnVtYmVyQXJyYXk6OmdldEJ5SW5kZXgpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEQ3VzdG9tLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjp0b0NhbnZhc051bWJlckFycmF5KToKKyAgICAgICAg
KFdlYkNvcmU6OkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbEJ1ZmZlckRhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsQnVmZmVyU3ViRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2xWZXJ0
ZXhBdHRyaWIpOgorICAgICAgICAoV2ViQ29yZTo6SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6
OmdsVmVydGV4QXR0cmliUG9pbnRlcik6CisgICAgICAgIChXZWJDb3JlOjpKU0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQzRDo6Z2xVbmlmb3JtTWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbFVuaWZvcm1mKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbFVuaWZvcm1pKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbFRleFBhcmFtZXRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2xEcmF3RWxlbWVudHMpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnRleEltYWdlMkQpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnRleFN1YkltYWdl
MkQpOgorICAgICAgICAqIGh0bWwvQ2FudmFzQnVmZmVyLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDYW52YXNCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNC
dWZmZXI6OkNhbnZhc0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNCdWZmZXI6Ol9k
ZWxldGVPYmplY3QpOgorICAgICAgICAqIGh0bWwvQ2FudmFzQnVmZmVyLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q2FudmFzQnVmZmVyOjp+Q2FudmFzQnVmZmVyKToKKyAgICAgICAgKiBo
dG1sL0NhbnZhc0J1ZmZlci5pZGw6IEFkZGVkLgorICAgICAgICAqIGh0bWwvQ2FudmFzQnl0ZUFy
cmF5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDYW52YXNCeXRlQXJyYXk6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNCeXRlQXJyYXk6OkNhbnZhc0J5dGVBcnJheSk6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNCeXRlQXJyYXk6OnRvU3RyaW5nKToKKyAgICAgICAg
KiBodG1sL0NhbnZhc0J5dGVBcnJheS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
c0J5dGVBcnJheTo6ZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNCeXRlQXJyYXk6Omxl
bmd0aCk6CisgICAgICAgICogaHRtbC9DYW52YXNCeXRlQXJyYXkuaWRsOiBBZGRlZC4KKyAgICAg
ICAgKiBodG1sL0NhbnZhc0ZyYW1lYnVmZmVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNGcmFtZWJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0Zy
YW1lYnVmZmVyOjpDYW52YXNGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNG
cmFtZWJ1ZmZlcjo6X2RlbGV0ZU9iamVjdCk6CisgICAgICAgICogaHRtbC9DYW52YXNGcmFtZWJ1
ZmZlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0ZyYW1lYnVmZmVyOjp+Q2Fu
dmFzRnJhbWVidWZmZXIpOgorICAgICAgICAqIGh0bWwvQ2FudmFzRnJhbWVidWZmZXIuaWRsOiBB
ZGRlZC4KKyAgICAgICAgKiBodG1sL0NhbnZhc051bWJlckFycmF5LmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpDYW52YXNOdW1iZXJBcnJheTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNhbnZhc051bWJlckFycmF5OjpDYW52YXNOdW1iZXJBcnJheSk6CisgICAgICAgIChXZWJD
b3JlOjpDYW52YXNOdW1iZXJBcnJheTo6dG9TdHJpbmcpOgorICAgICAgICAqIGh0bWwvQ2FudmFz
TnVtYmVyQXJyYXkuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDYW52YXNOdW1iZXJBcnJh
eTo6ZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNOdW1iZXJBcnJheTo6bGVuZ3RoKToK
KyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc051bWJlckFycmF5OjppdGVtKToKKyAgICAgICAgKiBo
dG1sL0NhbnZhc051bWJlckFycmF5LmlkbDogQWRkZWQuCisgICAgICAgICogaHRtbC9DYW52YXNP
YmplY3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc09iamVjdDo6Q2FudmFz
T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc09iamVjdDo6fkNhbnZhc09iamVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNPYmplY3Q6OnNldE9iamVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDYW52YXNPYmplY3Q6OmRlbGV0ZU9iamVjdCk6CisgICAgICAgICogaHRtbC9DYW52
YXNPYmplY3QuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDYW52YXNPYmplY3Q6Om9iamVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNPYmplY3Q6OmRldGFjaENvbnRleHQpOgorICAg
ICAgICAqIGh0bWwvQ2FudmFzUHJvZ3JhbS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzUHJvZ3JhbTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1Byb2dyYW06
OkNhbnZhc1Byb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUHJvZ3JhbTo6X2RlbGV0
ZU9iamVjdCk6CisgICAgICAgICogaHRtbC9DYW52YXNQcm9ncmFtLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6Q2FudmFzUHJvZ3JhbTo6fkNhbnZhc1Byb2dyYW0pOgorICAgICAgICAqIGh0
bWwvQ2FudmFzUHJvZ3JhbS5pZGw6IEFkZGVkLgorICAgICAgICAqIGh0bWwvQ2FudmFzUmVuZGVy
YnVmZmVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJidWZmZXI6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJidWZmZXI6OkNhbnZhc1Jl
bmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJidWZmZXI6Ol9kZWxl
dGVPYmplY3QpOgorICAgICAgICAqIGh0bWwvQ2FudmFzUmVuZGVyYnVmZmVyLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyYnVmZmVyOjp+Q2FudmFzUmVuZGVyYnVmZmVy
KToKKyAgICAgICAgKiBodG1sL0NhbnZhc1JlbmRlcmJ1ZmZlci5pZGw6IEFkZGVkLgorICAgICAg
ICAqIGh0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0OjpyZWYpOgorICAgICAgICAo
V2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDo6ZGVyZWYpOgorICAgICAgICAqIGh0bWwv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQ6On5DYW52YXNSZW5kZXJpbmdDb250ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQ6OmNhbnZhcyk6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNSZW5kZXJpbmdDb250ZXh0OjppczJkKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQ6OmlzM2QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVy
aW5nQ29udGV4dDo6aXMzZF8xXzEpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDo6aXMzZF9maXhlZCk6CisgICAgICAgICogaHRtbC9DYW52YXNSZW5kZXJpbmdDb250
ZXh0LmlkbDogQWRkZWQuCisgICAgICAgICogaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0M0Qu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQzRDo6fkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCk6CisgICAgICAgIChXZWJD
b3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVwZGF0ZUNvbnRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpyZXNoYXBlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2xBY3RpdmVUZXh0dXJlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2xBdHRhY2hTaGFkZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbEJpbmRBdHRyaWJM
b2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6Omds
QmluZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6
OmdsQmluZEZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRDo6Z2xCaW5kUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRDo6Z2xCaW5kVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsQmxlbmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpD
YW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsQmxlbmRFcXVhdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsQmxlbmRFcXVhdGlvblNlcGFyYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2xCbGVuZEZ1bmMp
OgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbEJsZW5kRnVu
Y1NlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6
Z2xCdWZmZXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RDo6Z2xCdWZmZXJTdWJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRDo6Z2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2xDbGVhckNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2xDbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpD
YW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsQ2xlYXJEZXB0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsQ2xlYXJTdGVuY2lsKToKKyAgICAgICAgKFdl
YkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2xDb2xvck1hc2spOgorICAgICAgICAo
V2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbENvbXBpbGVTaGFkZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbENvcHlUZXhJbWFnZTJE
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2xDb3B5VGV4
U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6
OmdsQ3VsbEZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
OjpnbERlcHRoRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0
M0Q6OmdsRGVwdGhNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRDo6Z2xEZXB0aFJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRDo6Z2xEZXRhY2hTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVy
aW5nQ29udGV4dDNEOjpnbERpc2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVy
aW5nQ29udGV4dDNEOjpnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSk6CisgICAgICAgIChXZWJD
b3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsRHJhd0FycmF5cyk6CisgICAgICAgIChX
ZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsRHJhd0VsZW1lbnRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2xFbmFibGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbEVuYWJsZVZlcnRleEF0dHJp
YkFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2xG
aW5pc2gpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbEZs
dXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2xGcmFt
ZWJ1ZmZlclJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdD
b250ZXh0M0Q6OmdsRnJhbWVidWZmZXJUZXh0dXJlMkQpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbEZyb250RmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpD
YW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsR2VuZXJhdGVNaXBtYXApOgorICAgICAgICAoV2Vi
Q29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbEdldEF0dHJpYkxvY2F0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2xHZXRFcnJvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsR2V0U3RyaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2xIaW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2xJc0J1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsSXNFbmFibGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2xJc0ZyYW1lYnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2xJc1By
b2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbElz
UmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RDo6Z2xJc1NoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0
M0Q6OmdsSXNUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRDo6Z2xMaW5lV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDNEOjpnbExpbmtQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmlu
Z0NvbnRleHQzRDo6Z2xQaXhlbFN0b3JlaSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0Q6OmdsUG9seWdvbk9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsUmVsZWFzZVNoYWRlckNvbXBpbGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2xTYW1wbGVD
b3ZlcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6Omds
U2Npc3Nvcik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6Omds
U2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RDo6Z2xTdGVuY2lsRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0Q6OmdsU3RlbmNpbEZ1bmNTZXBhcmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0Q6OmdsU3RlbmNpbE1hc2spOgorICAgICAgICAoV2ViQ29yZTo6Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbFN0ZW5jaWxNYXNrU2VwYXJhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbFN0ZW5jaWxPcCk6CisgICAgICAg
IChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsU3RlbmNpbE9wU2VwYXJhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbFRleFBhcmFt
ZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsVW5p
Zm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsVW5p
Zm9ybU1hdHJpeCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6
OmdsVXNlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0
M0Q6OmdsVmFsaWRhdGVQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmlu
Z0NvbnRleHQzRDo6Z2xWZXJ0ZXhBdHRyaWIpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDNEOjpnbFZlcnRleEF0dHJpYlBvaW50ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbFZpZXdwb3J0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Y3JlYXRlQnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Y3JlYXRlRnJhbWVidWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpjcmVhdGVUZXh0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Y3JlYXRlUHJvZ3Jh
bSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmNyZWF0ZVJl
bmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6
OmNyZWF0ZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0
M0Q6OmRlbGV0ZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0Q6OmRlbGV0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQzRDo6ZGVsZXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0Q6OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmRlbGV0ZVNoYWRlcik6CisgICAgICAgIChXZWJD
b3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmRlbGV0ZVRleHR1cmUpOgorICAgICAgICAo
V2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRCdWZmZXJQYXJhbWV0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRGcmFtZWJ1ZmZlckF0dGFj
aG1lbnRQYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEOjpnZXRQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRDo6Z2xHZXRQcm9ncmFtSW5mb0xvZyk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0Q6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcik6CisgICAgICAgIChXZWJD
b3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldFNoYWRlcik6CisgICAgICAgIChXZWJD
b3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsR2V0U2hhZGVySW5mb0xvZyk6CisgICAg
ICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsR2V0U2hhZGVyU291cmNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0VGV4UGFy
YW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0
VW5pZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6Omdl
dFVuaWZvcm1Mb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0Q6OmdldFZlcnRleEF0dHJpYik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJp
bmdDb250ZXh0M0Q6OnRleEltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVy
aW5nQ29udGV4dDNEOjp0ZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKiBodG1sL0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQzRC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmlu
Z0NvbnRleHQzRDo6aXMzZCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0Q6OmNvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0Q6OnRleHR1cmUzRCk6CisgICAgICAgICogaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0
M0QuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBodG1sL0NhbnZhc1NoYWRlci5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q2FudmFzU2hhZGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FudmFzU2hhZGVyOjpDYW52YXNTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
U2hhZGVyOjpfZGVsZXRlT2JqZWN0KToKKyAgICAgICAgKiBodG1sL0NhbnZhc1NoYWRlci5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1NoYWRlcjo6fkNhbnZhc1NoYWRlcik6Cisg
ICAgICAgICogaHRtbC9DYW52YXNTaGFkZXIuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBodG1sL0Nh
bnZhc1RleHR1cmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1RleHR1cmU6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNUZXh0dXJlOjpDYW52YXNUZXh0dXJl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1RleHR1cmU6Ol9kZWxldGVPYmplY3QpOgorICAg
ICAgICAqIGh0bWwvQ2FudmFzVGV4dHVyZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNh
bnZhc1RleHR1cmU6On5DYW52YXNUZXh0dXJlKToKKyAgICAgICAgKiBodG1sL0NhbnZhc1RleHR1
cmUuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQzRC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJl
bW92ZU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YWRkT2Jq
ZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjb250ZXh0M0QpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleHR1cmUzRCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NhbnZhczNETGF5ZXIuaDogQWRkZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NhbnZhczNETGF5ZXIubW06IEFkZGVkLgorICAgICAg
ICAoLVtDYW52YXMzRExheWVyIGNvcHlDR0xQaXhlbEZvcm1hdEZvckRpc3BsYXlNYXNrOl0pOgor
ICAgICAgICAoLVtDYW52YXMzRExheWVyIGNvcHlDR0xDb250ZXh0Rm9yUGl4ZWxGb3JtYXQ6XSk6
CisgICAgICAgICgtW0NhbnZhczNETGF5ZXIgZHJhd0luQ0dMQ29udGV4dDpwaXhlbEZvcm1hdDpm
b3JMYXllclRpbWU6ZGlzcGxheVRpbWU6XSk6CisgICAgICAgICgtW0NhbnZhczNETGF5ZXIgc2V0
TGF5ZXJPd25lcjpdKToKKyAgICAgICAgKC1bQ2FudmFzM0RMYXllciBsYXllck93bmVyXSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250
ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0Nv
bnRleHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1H
cmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
Y2hlY2tFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6bWFrZUNv
bnRleHRDdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZXNo
YXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ol9lbnN1cmVDb250ZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnbEFjdGl2ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdsQXR0YWNoU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpnbEJpbmRBdHRyaWJMb2NhdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2xCaW5kQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpnbEJpbmRGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6Z2xCaW5kUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnbEJpbmRUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpnbEJsZW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OmdsQmxlbmRFcXVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6Z2xCbGVuZEVxdWF0aW9uU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdsQmxlbmRGdW5jKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpnbEJsZW5kRnVuY1NlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpnbEJ1ZmZlckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OmdsQnVmZmVyU3ViRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6Z2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnbENsZWFyQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmdsQ2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmdsQ2xlYXJEZXB0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6Z2xDbGVhclN0ZW5jaWwpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmdsQ29sb3JNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpn
bENvbXBpbGVTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6Omds
Q29weVRleEltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6Omds
Q29weVRleFN1YkltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OmdsQ3VsbEZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdsRGVw
dGhGdW5jKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnbERlcHRoTWFz
ayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2xEZXB0aFJhbmdlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnbERldGFjaFNoYWRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2xEaXNhYmxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2xEcmF3QXJyYXlzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnbERyYXdFbGVtZW50cyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2xFbmFibGUpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdsRmluaXNoKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnbEZsdXNoKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnbEZyb250RmFjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2xHZW5lcmF0ZU1pcG1hcCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2xHZXRBdHRyaWJMb2NhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2xHZXRFcnJvcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2xHZXRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmdsSGludCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6Z2xJc0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6Z2xJc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6Omds
SXNGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2xJ
c1Byb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdsSXNSZW5k
ZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdsSXNTaGFk
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdsSXNUZXh0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnbExpbmVXaWR0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2xMaW5rUHJvZ3JhbSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2xQaXhlbFN0b3JlaSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2xQb2x5Z29uT2Zmc2V0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnbFJlbGVhc2VTaGFkZXJDb21waWxlcik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnbFNhbXBsZUNvdmVyYWdlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnbFNjaXNzb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdsU2hhZGVyU291cmNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnbFN0ZW5jaWxGdW5jKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnbFN0ZW5jaWxGdW5jU2VwYXJhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdsU3RlbmNpbE1hc2spOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdsU3RlbmNpbE1hc2tTZXBhcmF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2xTdGVuY2lsT3ApOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdsU3RlbmNpbE9wU2VwYXJhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdsVGV4UGFyYW1ldGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnbFVuaWZvcm0pOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdsVW5pZm9ybU1hdHJpeCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6Z2xVc2VQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpnbFZhbGlkYXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6Z2xWZXJ0ZXhBdHRyaWIpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OmdsVmVydGV4QXR0cmliUG9pbnRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6Z2xWaWV3cG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6Y3JlYXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpjcmVhdGVGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6Y3JlYXRlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6Y3JlYXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6Y3JlYXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpjcmVhdGVTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmRlbGV0ZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
ZGVsZXRlRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OmRlbGV0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRl
bGV0ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
ZGVsZXRlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZWxl
dGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OnNpemVGb3JHZXRQYXJhbSk6CisgICAgICAg
IChXZWJDb3JlOjp0eXBlRm9yR2V0UGFyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0
QnVmZmVyUGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OmdldFByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmdsR2V0UHJvZ3JhbUluZm9Mb2cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpnbEdldFNoYWRlckluZm9Mb2cpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OmdsR2V0U2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmdldFVuaWZvcm1Mb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpzaXplRm9y
R2V0VmVydGV4QXR0cmliUGFyYW0pOgorICAgICAgICAoV2ViQ29yZTo6dHlwZUZvckdldFZlcnRl
eEF0dHJpYlBhcmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRW
ZXJ0ZXhBdHRyaWIpOgorICAgICAgICAoV2ViQ29yZTo6aW1hZ2VUb1RleHR1cmUpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleFN1YkltYWdlMkQpOgogMjAwOS0wOC0wNSAgQW5k
cmFzIEJlY3NpICA8YmVjc2kuYW5kcmFzQHN0dWQudS1zemVnZWQuaHU+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgU2ltb24gSGF1c21hbm4uCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2Fu
dmFzTnVtYmVyQXJyYXlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNDYW52YXNOdW1iZXJBcnJheUN1c3RvbS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQ2FudmFzTnVtYmVyQXJyYXlDdXN0b20uY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxF
KDNEX0NBTlZBUykKKworI2luY2x1ZGUgIkpTQ2FudmFzTnVtYmVyQXJyYXkuaCIKKworI2luY2x1
ZGUgIkNhbnZhc051bWJlckFycmF5LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworSlNWYWx1ZSBKU0NhbnZhc051bWJlckFycmF5OjpnZXRCeUluZGV4
KEpTQzo6RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbnQgaW5kZXgpCit7CisgICAgSlNDOjpK
U1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGV4ZWMsIGltcGwoKS0+aXRlbShpbmRleCkpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRSgzRF9DQU5WQVMpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDNEQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEQ3VzdG9tLmNwcAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RDdXN0b20uY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisKKyNpbmNsdWRlICJKU0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQzRC5oIgorCisjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmgiCisj
aW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50Lmgi
CisjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgorI2luY2x1ZGUgIkpTSFRNTENhbnZhc0Vs
ZW1lbnQuaCIKKyNpbmNsdWRlICJKU0hUTUxJbWFnZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJKU1dl
YktpdENTU01hdHJpeC5oIgorCit1c2luZyBuYW1lc3BhY2UgSlNDOworCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3N0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxDYW52YXNOdW1iZXJBcnJheT4gdG9D
YW52YXNOdW1iZXJBcnJheShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNWYWx1ZSYgdmFs
dWUpCit7CisgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgCisgICAgSlNPYmplY3QqIGFycmF5ID0gYXNPYmplY3QodmFsdWUpOworICAgIGludCBs
ZW5ndGggPSBhcnJheS0+Z2V0KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgImxlbmd0aCIpKS50b0lu
dDMyKGV4ZWMpOworICAgIFJlZlB0cjxDYW52YXNOdW1iZXJBcnJheT4gbnVtYmVyQXJyYXkgPSBD
YW52YXNOdW1iZXJBcnJheTo6Y3JlYXRlKGxlbmd0aCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBsZW5ndGg7ICsraSkgeworICAgICAgICBmbG9hdCB2YWx1ZSA9IGFycmF5LT5nZXQoZXhlYywg
aSkudG9GbG9hdChleGVjKTsKKyAgICAgICAgbnVtYmVyQXJyYXktPmRhdGEoKVtpXSA9IHZhbHVl
OworICAgIH0KKyAgICAKKyAgICByZXR1cm4gbnVtYmVyQXJyYXk7Cit9CisKK0pTVmFsdWUgSlND
YW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsQnVmZmVyRGF0YShKU0M6OkV4ZWNTdGF0ZSogZXhl
YywgSlNDOjpBcmdMaXN0IGNvbnN0JiBhcmdzKQoreworICAgIHVuc2lnbmVkIHRhcmdldCA9IGFy
Z3MuYXQoMCkudG9JbnQzMihleGVjKTsKKyAgICB1bnNpZ25lZCB1c2FnZSA9IGFyZ3MuYXQoMiku
dG9JbnQzMihleGVjKTsKKyAgICAKKyAgICBSZWZQdHI8Q2FudmFzTnVtYmVyQXJyYXk+IG51bWJl
ckFycmF5ID0gdG9DYW52YXNOdW1iZXJBcnJheShleGVjLCBhcmdzLmF0KDEpKTsKKyAgICAKKyAg
ICBpbXBsKCktPmdsQnVmZmVyRGF0YSh0YXJnZXQsIG51bWJlckFycmF5LmdldCgpLCB1c2FnZSk7
CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cit9CisKK0pTVmFsdWUgSlNDYW52YXNSZW5kZXJp
bmdDb250ZXh0M0Q6OmdsQnVmZmVyU3ViRGF0YShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpB
cmdMaXN0IGNvbnN0JiBhcmdzKQoreworICAgIHVuc2lnbmVkIHRhcmdldCA9IGFyZ3MuYXQoMCku
dG9JbnQzMihleGVjKTsKKyAgICB1bnNpZ25lZCBvZmZzZXQgPSBhcmdzLmF0KDEpLnRvSW50MzIo
ZXhlYyk7CisgICAgCisgICAgUmVmUHRyPENhbnZhc051bWJlckFycmF5PiBudW1iZXJBcnJheSA9
IHRvQ2FudmFzTnVtYmVyQXJyYXkoZXhlYywgYXJncy5hdCgyKSk7CisgICAgCisgICAgaW1wbCgp
LT5nbEJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBvZmZzZXQsIG51bWJlckFycmF5LmdldCgpKTsKKyAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKK30KKworSlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRDo6Z2xWZXJ0ZXhBdHRyaWIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6QXJnTGlz
dCBjb25zdCYgYXJncykKK3sKKyAgICB1bnNpZ25lZCBpbmR4ID0gYXJncy5hdCgwKS50b0ludDMy
KGV4ZWMpOworICAgIAorICAgIFJlZlB0cjxDYW52YXNOdW1iZXJBcnJheT4gbnVtYmVyQXJyYXkg
PSB0b0NhbnZhc051bWJlckFycmF5KGV4ZWMsIGFyZ3MuYXQoMSkpOworICAgIAorICAgIGltcGwo
KS0+Z2xWZXJ0ZXhBdHRyaWIoaW5keCwgbnVtYmVyQXJyYXkuZ2V0KCkpOworICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOworfQorCisvLyB2b2lkIGdsVmVydGV4QXR0cmliUG9pbnRlciAoaW4gdW5z
aWduZWQgbG9uZyBpbmR4LCBpbiBsb25nIHNpemUsIGluIHVuc2lnbmVkIGxvbmcgdHlwZSwgaW4g
Ym9vbGVhbiBub3JtYWxpemVkLCBpbiB1bnNpZ25lZCBsb25nIHN0cmlkZSwgaW4gQ2FudmFzTnVt
YmVyQXJyYXkgYXJyYXkpOworSlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2xW
ZXJ0ZXhBdHRyaWJQb2ludGVyKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkFyZ0xpc3QgY29u
c3QmIGFyZ3MpCit7CisgICAgdW5zaWduZWQgaW5keCA9IGFyZ3MuYXQoMCkudG9JbnQzMihleGVj
KTsKKyAgICB1bnNpZ25lZCBzaXplID0gYXJncy5hdCgxKS50b0ludDMyKGV4ZWMpOworICAgIHVu
c2lnbmVkIHR5cGUgPSBhcmdzLmF0KDIpLnRvSW50MzIoZXhlYyk7CisgICAgdW5zaWduZWQgbm9y
bWFsaXplZCA9IGFyZ3MuYXQoMykudG9JbnQzMihleGVjKTsKKyAgICBib29sIHN0cmlkZSA9IGFy
Z3MuYXQoNCkudG9Cb29sZWFuKGV4ZWMpOworICAgIAorICAgIFJlZlB0cjxDYW52YXNOdW1iZXJB
cnJheT4gbnVtYmVyQXJyYXkgPSB0b0NhbnZhc051bWJlckFycmF5KGV4ZWMsIGFyZ3MuYXQoNSkp
OworICAgIAorICAgIGltcGwoKS0+Z2xWZXJ0ZXhBdHRyaWJQb2ludGVyKGluZHgsIHNpemUsIHR5
cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgbnVtYmVyQXJyYXkuZ2V0KCkpOworICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOworfQorCitKU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpn
bFVuaWZvcm1NYXRyaXgoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6QXJnTGlzdCBjb25zdCYg
YXJncykKK3sKKyAgICB1bnNpZ25lZCBsb2NhdGlvbiA9IGFyZ3MuYXQoMCkudG9JbnQzMihleGVj
KTsKKyAgICB1bnNpZ25lZCBjb3VudCA9IGFyZ3MuYXQoMSkudG9JbnQzMihleGVjKTsKKyAgICBi
b29sIHRyYW5zcG9zZSA9IGFyZ3MuYXQoMikudG9Cb29sZWFuKGV4ZWMpOworICAgIAorICAgIGlm
ICghYXJncy5hdCgzKS5pc09iamVjdCgpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
KyAgICAgICAgCisgICAgV2ViS2l0Q1NTTWF0cml4KiBtYXRyaXggPSB0b1dlYktpdENTU01hdHJp
eChhcmdzLmF0KDMpKTsKKyAgICBpZiAobWF0cml4KQorICAgICAgICBpbXBsKCktPmdsVW5pZm9y
bU1hdHJpeChsb2NhdGlvbiwgdHJhbnNwb3NlLCBtYXRyaXgpOworICAgIGVsc2UgeworICAgICAg
ICBKU09iamVjdCogYXJyYXkgPSBhc09iamVjdChhcmdzLmF0KDMpKTsKKyAgICAgICAgaW50IGxl
bmd0aCA9IGFycmF5LT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAibGVuZ3RoIikpLnRvSW50
MzIoZXhlYyk7CisgICAgICAgIGlmIChsZW5ndGgpIHsKKyAgICAgICAgICAgIC8vIElmIHRoZSBm
aXJzdCBlbGVtZW50IGlzIGEgV2ViS2l0Q1NTTWF0cml4LCBhc3N1bWUgYWxsIGFyZQorICAgICAg
ICAgICAgV2ViS2l0Q1NTTWF0cml4KiBtYXRyaXggPSB0b1dlYktpdENTU01hdHJpeChhcnJheS0+
Z2V0KGV4ZWMsIDApKTsKKyAgICAgICAgICAgIGlmIChtYXRyaXgpIHsKKyAgICAgICAgICAgICAg
ICBWZWN0b3I8V2ViS2l0Q1NTTWF0cml4Kj4gbWF0cml4QXJyYXkobGVuZ3RoKTsKKyAgICAgICAg
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAg
ICAgICAgIFdlYktpdENTU01hdHJpeCogbWF0cml4ID0gdG9XZWJLaXRDU1NNYXRyaXgoYXJyYXkt
PmdldChleGVjLCBpKSk7CisgICAgICAgICAgICAgICAgICAgIG1hdHJpeEFycmF5W2ldID0gbWF0
cml4OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpbXBsKCktPmdsVW5pZm9y
bU1hdHJpeChsb2NhdGlvbiwgdHJhbnNwb3NlLCBtYXRyaXhBcnJheSk7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIFJlZlB0cjxDYW52YXNOdW1iZXJBcnJheT4gbnVtYmVy
QXJyYXkgPSBDYW52YXNOdW1iZXJBcnJheTo6Y3JlYXRlKGxlbmd0aCk7CisgICAgICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgICAg
ICBmbG9hdCB2YWx1ZSA9IGFycmF5LT5nZXQoZXhlYywgaSkudG9GbG9hdChleGVjKTsKKyAgICAg
ICAgICAgICAgICAgICAgbnVtYmVyQXJyYXktPmRhdGEoKVtpXSA9IHZhbHVlOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBpbXBsKCktPmdsVW5pZm9ybU1hdHJpeChsb2NhdGlv
biwgY291bnQsIHRyYW5zcG9zZSwgbnVtYmVyQXJyYXkuZ2V0KCkpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cit9CisKK0pTVmFs
dWUgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsVW5pZm9ybWYoSlNDOjpFeGVjU3RhdGUq
IGV4ZWMsIEpTQzo6QXJnTGlzdCBjb25zdCYgYXJncykKK3sKKyAgICB1bnNpZ25lZCBsb2NhdGlv
biA9IGFyZ3MuYXQoMCkudG9JbnQzMihleGVjKTsKKyAgICAKKyAgICBzd2l0Y2goYXJncy5zaXpl
KCkpIHsKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgaWYgKGFyZ3MuYXQoMSkuaXNPYmpl
Y3QoKSkgeworICAgICAgICAgICAgICAgIFJlZlB0cjxDYW52YXNOdW1iZXJBcnJheT4gbnVtYmVy
QXJyYXkgPSB0b0NhbnZhc051bWJlckFycmF5KGV4ZWMsIGFyZ3MuYXQoMSkpOworICAgICAgICAg
ICAgICAgIGltcGwoKS0+Z2xVbmlmb3JtKGxvY2F0aW9uLCBudW1iZXJBcnJheS5nZXQoKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaW1wbCgpLT5n
bFVuaWZvcm0obG9jYXRpb24sIChmbG9hdCkgYXJncy5hdCgxKS50b051bWJlcihleGVjKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAzOiAKKyAgICAgICAgICAgIGltcGwoKS0+
Z2xVbmlmb3JtKGxvY2F0aW9uLCAoZmxvYXQpIGFyZ3MuYXQoMSkudG9OdW1iZXIoZXhlYyksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsb2F0KSBhcmdzLmF0KDIp
LnRvTnVtYmVyKGV4ZWMpKTsgCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA0OiAK
KyAgICAgICAgICAgIGltcGwoKS0+Z2xVbmlmb3JtKGxvY2F0aW9uLCAoZmxvYXQpIGFyZ3MuYXQo
MSkudG9OdW1iZXIoZXhlYyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKGZsb2F0KSBhcmdzLmF0KDIpLnRvTnVtYmVyKGV4ZWMpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChmbG9hdCkgYXJncy5hdCgzKS50b051bWJlcihleGVjKSk7
IAorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgNTogCisgICAgICAgICAgICBpbXBs
KCktPmdsVW5pZm9ybShsb2NhdGlvbiwgKGZsb2F0KSBhcmdzLmF0KDEpLnRvTnVtYmVyKGV4ZWMp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmbG9hdCkgYXJncy5h
dCgyKS50b051bWJlcihleGVjKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoZmxvYXQpIGFyZ3MuYXQoMykudG9OdW1iZXIoZXhlYyksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKGZsb2F0KSBhcmdzLmF0KDQpLnRvTnVtYmVyKGV4ZWMp
KTsgCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7Cit9CisKK0pTVmFsdWUgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsVW5pZm9y
bWkoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6QXJnTGlzdCBjb25zdCYgYXJncykKK3sKKyAg
ICB1bnNpZ25lZCBsb2NhdGlvbiA9IGFyZ3MuYXQoMCkudG9JbnQzMihleGVjKTsKKyAgICAKKyAg
ICBzd2l0Y2goYXJncy5zaXplKCkpIHsKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgaW1w
bCgpLT5nbFVuaWZvcm0obG9jYXRpb24sIGFyZ3MuYXQoMSkudG9JbnQzMihleGVjKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAzOiAKKyAgICAgICAgICAgIGltcGwoKS0+Z2xV
bmlmb3JtKGxvY2F0aW9uLCBhcmdzLmF0KDEpLnRvSW50MzIoZXhlYyksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5hdCgyKS50b0ludDMyKGV4ZWMpKTsgCisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA0OiAKKyAgICAgICAgICAgIGltcGwoKS0+
Z2xVbmlmb3JtKGxvY2F0aW9uLCBhcmdzLmF0KDEpLnRvSW50MzIoZXhlYyksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5hdCgyKS50b0ludDMyKGV4ZWMpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MuYXQoMykudG9JbnQz
MihleGVjKSk7IAorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgNTogCisgICAgICAg
ICAgICBpbXBsKCktPmdsVW5pZm9ybShsb2NhdGlvbiwgYXJncy5hdCgxKS50b0ludDMyKGV4ZWMp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MuYXQoMikudG9J
bnQzMihleGVjKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdz
LmF0KDMpLnRvSW50MzIoZXhlYyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYXJncy5hdCg0KS50b0ludDMyKGV4ZWMpKTsgCisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGlmIChhcmdzLmF0KDEpLmlzT2JqZWN0KCkpIHsK
KyAgICAgICAgICAgICAgICBSZWZQdHI8Q2FudmFzTnVtYmVyQXJyYXk+IG51bWJlckFycmF5ID0g
dG9DYW52YXNOdW1iZXJBcnJheShleGVjLCBhcmdzLmF0KDEpKTsKKyAgICAgICAgICAgICAgICBp
bXBsKCktPmdsVW5pZm9ybShsb2NhdGlvbiwgbnVtYmVyQXJyYXkuZ2V0KCkpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOworfQorCitKU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbFRleFBh
cmFtZXRlcihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpBcmdMaXN0IGNvbnN0JiBhcmdzKQor
eworICAgIHVuc2lnbmVkIHRhcmdldCA9IGFyZ3MuYXQoMCkudG9JbnQzMihleGVjKTsKKyAgICB1
bnNpZ25lZCBwbmFtZSA9IGFyZ3MuYXQoMSkudG9JbnQzMihleGVjKTsKKyAgICAKKyAgICBpZiAo
YXJncy5hdCgyKS5pc09iamVjdCgpKSB7CisgICAgICAgIFJlZlB0cjxDYW52YXNOdW1iZXJBcnJh
eT4gbnVtYmVyQXJyYXkgPSB0b0NhbnZhc051bWJlckFycmF5KGV4ZWMsIGFyZ3MuYXQoMikpOwor
ICAgICAgICBpbXBsKCktPmdsVGV4UGFyYW1ldGVyKHRhcmdldCwgcG5hbWUsIG51bWJlckFycmF5
LmdldCgpKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGRvdWJsZSB2YWx1ZSA9IGFyZ3Mu
YXQoMikudG9OdW1iZXIoZXhlYyk7CisgICAgICAgIGltcGwoKS0+Z2xUZXhQYXJhbWV0ZXIodGFy
Z2V0LCBwbmFtZSwgdmFsdWUpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKK30KKworSlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2xEcmF3RWxlbWVu
dHMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6QXJnTGlzdCBjb25zdCYgYXJncykKK3sKKyAg
ICB1bnNpZ25lZCBtb2RlID0gYXJncy5hdCgwKS50b0ludDMyKGV4ZWMpOworICAgIHVuc2lnbmVk
IHR5cGUgPSBhcmdzLmF0KDEpLnRvSW50MzIoZXhlYyk7CisgICAgCisgICAgdW5zaWduZWQgaW50
IGNvdW50ID0gMDsKKyAgICAKKyAgICAvLyBJZiB0aGUgdGhpcmQgcGFyYW0gaXMgbm90IGFuIG9i
amVjdCwgaXQgaXMgYSBudW1iZXIsIHdoaWNoIGlzIHRoZSBjb3VudC4KKyAgICAvLyBJbiB0aGlz
IGNhc2UgaWYgdGhlcmUgaXMgYSA0dGggcGFyYW0sIGl0IGlzIHRoZSBvZmZzZXQuIElmIHRoZXJl
IGlzIG5vCisgICAgLy8gNHRoIHBhcmFtLCB0aGUgb2Zmc2V0IGlzIDAKKyAgICBpZiAoIWFyZ3Mu
YXQoMikuaXNPYmplY3QoKSkgeworICAgICAgICBjb3VudCA9IGFyZ3MuYXQoMikudG9JbnQzMihl
eGVjKTsKKyAgICAgICAgdW5zaWduZWQgaW50IG9mZnNldCA9IChhcmdzLnNpemUoKSA+IDMpID8g
YXJncy5hdCgzKS50b0ludDMyKGV4ZWMpIDogMDsKKyAgICAgICAgaW1wbCgpLT5nbERyYXdFbGVt
ZW50cyhtb2RlLCBjb3VudCwgdHlwZSwgKHZvaWQqKSBvZmZzZXQpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIHZvaWQqIHBhc3NlZEluZGljZXMgPSAwOworICAgICAgICBKU09iamVjdCogYXJyYXkg
PSBhc09iamVjdChhcmdzLmF0KDIpKTsKKyAgICAgICAgY291bnQgPSBhcnJheS0+Z2V0KGV4ZWMs
IElkZW50aWZpZXIoZXhlYywgImxlbmd0aCIpKS50b0ludDMyKGV4ZWMpOworCisgICAgICAgIGlm
ICh0eXBlID09IEdMX1VOU0lHTkVEX0JZVEUpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIq
IGluZGljZXMgPSAodW5zaWduZWQgY2hhciopIG1hbGxvYyhjb3VudCAqIHNpemVvZih1bnNpZ25l
ZCBzaG9ydCkpOworICAgICAgICAgICAgcGFzc2VkSW5kaWNlcyA9IGluZGljZXM7CisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBzaG9ydCB2YWx1ZSA9ICh1bnNpZ25lZCBjaGFyKSBhcnJheS0+Z2V0
KGV4ZWMsIGkpLnRvVUludDMyKGV4ZWMpOworICAgICAgICAgICAgICAgIGluZGljZXNbaV0gPSB2
YWx1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IEdMX1VOU0lH
TkVEX1NIT1JUKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCogaW5kaWNlcyA9ICh1bnNp
Z25lZCBzaG9ydCopIG1hbGxvYyhjb3VudCAqIHNpemVvZih1bnNpZ25lZCBzaG9ydCkpOworICAg
ICAgICAgICAgcGFzc2VkSW5kaWNlcyA9IGluZGljZXM7CisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBzaG9ydCB2YWx1ZSA9ICh1bnNpZ25lZCBzaG9ydCkgYXJyYXktPmdldChleGVjLCBpKS50b1VJ
bnQzMihleGVjKTsKKyAgICAgICAgICAgICAgICBpbmRpY2VzW2ldID0gdmFsdWU7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CisgICAgICAgICAgICAKKyAgICAgICAgaW1wbCgpLT5nbERyYXdFbGVtZW50cyhtb2RlLCBjb3Vu
dCwgdHlwZSwgcGFzc2VkSW5kaWNlcyk7CisgICAgICAgIGZyZWUocGFzc2VkSW5kaWNlcyk7Cisg
ICAgfQorCisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cit9CisKKy8vIHZvaWQgdGV4SW1hZ2Uy
REhUTUwoaW4gdW5zaWduZWQgbG9uZyB0YXJnZXQsIGluIHVuc2lnbmVkIGxvbmcgbGV2ZWwsIGlu
IEhUTUxJbWFnZUVsZW1lbnQgaW1hZ2UpOworSlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRDo6dGV4SW1hZ2UyRChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7
IAorICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCogY29udGV4dCA9IGltcGwoKTsKKyAgICB1
bnNpZ25lZCB0YXJnZXQgPSBhcmdzLmF0KDApLnRvSW50MzIoZXhlYyk7CisgICAgdW5zaWduZWQg
bGV2ZWwgPSBhcmdzLmF0KDEpLnRvSW50MzIoZXhlYyk7CisgICAgCisgICAgLy8gVGhlIGltYWdl
IHBhcmFtZXRlciBjYW4gYmUgYSA8aW1nPiBvciA8Y2FudmFzPiBlbGVtZW50LgorICAgIEpTVmFs
dWUgdmFsdWUgPSBhcmdzLmF0KDIpOworICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkKKyAgICAg
ICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKKyAgICBKU09iamVjdCogbyA9
IGFzT2JqZWN0KHZhbHVlKTsKKyAgICAKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBp
ZiAoby0+aW5oZXJpdHMoJkpTSFRNTEltYWdlRWxlbWVudDo6c19pbmZvKSkgeworICAgICAgICBI
VE1MSW1hZ2VFbGVtZW50KiBpbWdFbHQgPSBzdGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50Kj4o
c3RhdGljX2Nhc3Q8SlNIVE1MRWxlbWVudCo+KG8pLT5pbXBsKCkpOworICAgICAgICBjb250ZXh0
LT50ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGltZ0VsdCwgZWMpOworICAgIH0gZWxzZSBpZiAo
by0+aW5oZXJpdHMoJkpTSFRNTENhbnZhc0VsZW1lbnQ6OnNfaW5mbykpIHsKKyAgICAgICAgSFRN
TENhbnZhc0VsZW1lbnQqIGNhbnZhcyA9IHN0YXRpY19jYXN0PEhUTUxDYW52YXNFbGVtZW50Kj4o
c3RhdGljX2Nhc3Q8SlNIVE1MRWxlbWVudCo+KG8pLT5pbXBsKCkpOworICAgICAgICBjb250ZXh0
LT50ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGNhbnZhcywgZWMpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENIX0VSUik7CisgICAgfQor
ICAgIAorICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOyAgICAKK30KKworLy8gdm9pZCB0ZXhTdWJJ
bWFnZTJESFRNTChpbiB1bnNpZ25lZCBsb25nIHRhcmdldCwgaW4gdW5zaWduZWQgbG9uZyBsZXZl
bCwgaW4gdW5zaWduZWQgbG9uZyB4b2ZmLCBpbiB1bnNpZ25lZCBsb25nIHlvZmYsIGluIHVuc2ln
bmVkIGxvbmcgd2lkdGgsIGluIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCBpbiBIVE1MSW1hZ2VFbGVt
ZW50IGltYWdlKTsKK0pTVmFsdWUgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnRleFN1Yklt
YWdlMkQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQoreyAKKyAgICBDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0QqIGNvbnRleHQgPSBpbXBsKCk7CisgICAgdW5zaWduZWQgdGFy
Z2V0ID0gYXJncy5hdCgwKS50b0ludDMyKGV4ZWMpOworICAgIHVuc2lnbmVkIGxldmVsID0gYXJn
cy5hdCgxKS50b0ludDMyKGV4ZWMpOworICAgIHVuc2lnbmVkIHhvZmYgPSBhcmdzLmF0KDIpLnRv
SW50MzIoZXhlYyk7CisgICAgdW5zaWduZWQgeW9mZiA9IGFyZ3MuYXQoMykudG9JbnQzMihleGVj
KTsKKyAgICB1bnNpZ25lZCB3aWR0aCA9IGFyZ3MuYXQoNCkudG9JbnQzMihleGVjKTsKKyAgICB1
bnNpZ25lZCBoZWlnaHQgPSBhcmdzLmF0KDUpLnRvSW50MzIoZXhlYyk7CisgICAgCisgICAgLy8g
VGhlIGltYWdlIHBhcmFtZXRlciBjYW4gYmUgYSA8aW1nPiBvciA8Y2FudmFzPiBlbGVtZW50Lgor
ICAgIEpTVmFsdWUgdmFsdWUgPSBhcmdzLmF0KDYpOworICAgIGlmICghdmFsdWUuaXNPYmplY3Qo
KSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKKyAgICBKU09i
amVjdCogbyA9IGFzT2JqZWN0KHZhbHVlKTsKKyAgICAKKyAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKKyAgICBpZiAoby0+aW5oZXJpdHMoJkpTSFRNTEltYWdlRWxlbWVudDo6c19pbmZvKSkgewor
ICAgICAgICBIVE1MSW1hZ2VFbGVtZW50KiBpbWdFbHQgPSBzdGF0aWNfY2FzdDxIVE1MSW1hZ2VF
bGVtZW50Kj4oc3RhdGljX2Nhc3Q8SlNIVE1MRWxlbWVudCo+KG8pLT5pbXBsKCkpOworICAgICAg
ICBjb250ZXh0LT50ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmYsIHlvZmYsIHdpZHRo
LCBoZWlnaHQsIGltZ0VsdCwgZWMpOworICAgIH0gZWxzZSBpZiAoby0+aW5oZXJpdHMoJkpTSFRN
TENhbnZhc0VsZW1lbnQ6OnNfaW5mbykpIHsKKyAgICAgICAgSFRNTENhbnZhc0VsZW1lbnQqIGNh
bnZhcyA9IHN0YXRpY19jYXN0PEhUTUxDYW52YXNFbGVtZW50Kj4oc3RhdGljX2Nhc3Q8SlNIVE1M
RWxlbWVudCo+KG8pLT5pbXBsKCkpOworICAgICAgICBjb250ZXh0LT50ZXhTdWJJbWFnZTJEKHRh
cmdldCwgbGV2ZWwsIHhvZmYsIHlvZmYsIHdpZHRoLCBoZWlnaHQsIGNhbnZhcywgZWMpOworICAg
IH0gZWxzZSB7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENIX0VS
Uik7CisgICAgfQorICAgIAorICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOyAgICAKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNw
cAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVu
dEN1c3RvbS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKKyNpbmNsdWRl
ICJKU0hUTUxDYW52YXNFbGVtZW50LmgiCisjaW5jbHVkZSAiSlNDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQuaCIKKyNpbmNsdWRlICJKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5oIgorCisjaW5j
bHVkZSA8d3RmL0dldFB0ci5oPgorCit1c2luZyBuYW1lc3BhY2UgSlNDOworCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK0pTVmFsdWUgSlNIVE1MQ2FudmFzRWxlbWVudDo6Z2V0Q29udGV4dChKU0M6
OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpBcmdMaXN0IGNvbnN0JiBhcmdzKQoreworICAgIEhUTUxD
YW52YXNFbGVtZW50KiBpbXAgPSBzdGF0aWNfY2FzdDxIVE1MQ2FudmFzRWxlbWVudCo+KGltcGwo
KSk7CisgICAgY29uc3QgVVN0cmluZyYgY29udGV4dElkID0gYXJncy5hdCgwKS50b1N0cmluZyhl
eGVjKTsKKworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNVbmRlZmluZWQoKTsKKyAgICAKKyAgICBp
ZiAoY29udGV4dElkID09ICIyZCIpCisgICAgICAgIHJlc3VsdCA9IHRvSlMoZXhlYywgV1RGOjpn
ZXRQdHIocmVpbnRlcnByZXRfY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqPihpbXAtPmdl
dENvbnRleHQoY29udGV4dElkKSkpKTsKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorICAgIGVsc2Ug
aWYgKGNvbnRleHRJZCA9PSAid2Via2l0LTNkIikKKyAgICAgICAgcmVzdWx0ID0gdG9KUyhleGVj
LCBXVEY6OmdldFB0cihyZWludGVycHJldF9jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCo+
KGltcC0+Z2V0Q29udGV4dChjb250ZXh0SWQpKSkpOworI2VuZGlmCisgICAgCisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9odG1s
L0NhbnZhc0J1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0NhbnZhc0J1ZmZl
ci5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2h0bWwvQ2FudmFzQnVmZmVyLmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAw
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAz
LiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9y
IHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aWYgRU5BQkxFKDNEX0NBTlZBUykKKworI2luY2x1ZGUgIkNhbnZhc0J1ZmZlci5oIgorCisjaW5j
bHVkZSA8T3BlbkdML09wZW5HTC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCisgICAg
UGFzc1JlZlB0cjxDYW52YXNCdWZmZXI+IENhbnZhc0J1ZmZlcjo6Y3JlYXRlKEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDYW52
YXNCdWZmZXIoY29udGV4dCkpOworICAgIH0KKyAgICAKKyAgICBDYW52YXNCdWZmZXI6OkNhbnZh
c0J1ZmZlcihHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKKyAgICA6IENhbnZhc09iamVjdChj
b250ZXh0KQorICAgIHsKKyAgICAgICAgR0x1aW50IG87CisgICAgICAgIGdsR2VuQnVmZmVycygx
LCAmbyk7CisgICAgICAgIHNldE9iamVjdChvKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBDYW52
YXNCdWZmZXI6Ol9kZWxldGVPYmplY3QoUGxhdGZvcm0zRE9iamVjdCBvYmplY3QpCisgICAgewor
ICAgICAgICBnbERlbGV0ZUJ1ZmZlcnMoMSwgJm9iamVjdCk7CisgICAgfQorfQorCisjZW5kaWYg
Ly8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvaHRtbC9DYW52YXNCdWZmZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvQ2FudmFzQnVmZmVyLmgJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL2h0bWwvQ2FudmFzQnVmZmVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBp
dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgQ2FudmFzQnVmZmVyX2gKKyNkZWZpbmUgQ2FudmFzQnVmZmVyX2gK
KworI2luY2x1ZGUgIkNhbnZhc09iamVjdC5oIgorCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7Cisg
ICAgCisgICAgY2xhc3MgQ2FudmFzQnVmZmVyIDogcHVibGljIENhbnZhc09iamVjdCB7CisgICAg
cHVibGljOgorICAgICAgICB2aXJ0dWFsIH5DYW52YXNCdWZmZXIoKSB7IGRlbGV0ZU9iamVjdCgp
OyB9CisgICAgICAgIAorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNCdWZmZXI+IGNy
ZWF0ZShHcmFwaGljc0NvbnRleHQzRCopOworICAgICAgICAKKyAgICBwcm90ZWN0ZWQ6CisgICAg
ICAgIENhbnZhc0J1ZmZlcihHcmFwaGljc0NvbnRleHQzRCopOworICAgICAgICAKKyAgICAgICAg
dmlydHVhbCB2b2lkIF9kZWxldGVPYmplY3QoUGxhdGZvcm0zRE9iamVjdCBvKTsKKyAgICB9Owor
ICAgIAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQ2FudmFzQnVmZmVyX2gK
SW5kZXg6IFdlYkNvcmUvaHRtbC9DYW52YXNCdWZmZXIuaWRsCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9DYW52YXNCdWZmZXIuaWRsCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9odG1sL0Nh
bnZhc0J1ZmZlci5pZGwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK21vZHVs
ZSBodG1sIHsKKyAgICBpbnRlcmZhY2UgW0NvbmRpdGlvbmFsPTNEX0NBTlZBU10gQ2FudmFzQnVm
ZmVyIHsKKyAgICB9OworfQpJbmRleDogV2ViQ29yZS9odG1sL0NhbnZhc0J5dGVBcnJheS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0NhbnZhc0J5dGVBcnJheS5jcHAJKHJldmlzaW9u
IDApCisrKyBXZWJDb3JlL2h0bWwvQ2FudmFzQnl0ZUFycmF5LmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0
aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBv
ZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhbnZh
c0J5dGVBcnJheS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKyAgICAKKyAgICBQYXNzUmVmUHRyPENhbnZhc0J5dGVBcnJheT4gQ2FudmFzQnl0
ZUFycmF5OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBDYW52YXNCeXRlQXJyYXkobGVuZ3RoKSk7CisgICAgfQorICAgIAorICAgIENh
bnZhc0J5dGVBcnJheTo6Q2FudmFzQnl0ZUFycmF5KHVuc2lnbmVkIGxlbmd0aCkKKyAgICAgICAg
OiBtX2RhdGEobGVuZ3RoKQorICAgIHsKKyAgICB9CisKKyAgICBTdHJpbmcgQ2FudmFzQnl0ZUFy
cmF5Ojp0b1N0cmluZygpIGNvbnN0CisgICAgeworICAgICAgICBTdHJpbmcgcyA9ICJbICI7Cisg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9kYXRhLnNpemUoKTsgKytpKSB7CisgICAg
ICAgICAgICBpZiAoaSAhPSAwKQorICAgICAgICAgICAgICAgIHMgKz0gIiwgIjsKKyAgICAgICAg
ICAgIHMgKz0gU3RyaW5nOjpudW1iZXIobV9kYXRhW2ldKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgcyArPSAiIF0iOworICAgICAgICByZXR1cm4gczsKKyAgICB9CisKK30KSW5kZXg6
IFdlYkNvcmUvaHRtbC9DYW52YXNCeXRlQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0
bWwvQ2FudmFzQnl0ZUFycmF5LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2h0bWwvQ2FudmFz
Qnl0ZUFycmF5LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
Q2FudmFzQnl0ZUFycmF5X2gKKyNkZWZpbmUgQ2FudmFzQnl0ZUFycmF5X2gKKworI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8bGltaXRzPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKKyAgICBjbGFzcyBTdHJpbmc7CisgICAgCisgICAgY2xhc3MgQ2FudmFzQnl0ZUFycmF5IDog
cHVibGljIFJlZkNvdW50ZWQ8Q2FudmFzQnl0ZUFycmF5PiB7CisgICAgcHVibGljOgorICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNCeXRlQXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBsZW5n
dGgpOworICAgICAgICAKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKCkgeyByZXR1cm4g
bV9kYXRhOyB9CisKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9k
YXRhLnNpemUoKTsgfQorCisgICAgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7CisKKyAgICBwcml2
YXRlOgorICAgICAgICBDYW52YXNCeXRlQXJyYXkodW5zaWduZWQgbGVuZ3RoKTsKKyAgICAgICAg
VmVjdG9yPHVpbnQ4X3Q+IG1fZGF0YTsKKyAgICB9OworICAgIAorfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gQ2FudmFzTnVtYmVyQXJyYXlfaApJbmRleDogV2ViQ29yZS9odG1s
L0NhbnZhc0J5dGVBcnJheS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0NhbnZhc0J5
dGVBcnJheS5pZGwJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2h0bWwvQ2FudmFzQnl0ZUFycmF5
LmlkbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFw
cGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworbW9kdWxlIGh0bWwgewor
ICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPTNEX0NBTlZBUywKKyAgICAgICAg
R2VuZXJhdGVDb25zdHJ1Y3RvcgorICAgIF0gQ2FudmFzQnl0ZUFycmF5IHsKKyAgICAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbGVuZ3RoOworCisgICAgICAgIFtEb250RW51
bV0gRE9NU3RyaW5nIHRvU3RyaW5nKCk7CisgICAgfTsKK30KSW5kZXg6IFdlYkNvcmUvaHRtbC9D
YW52YXNGcmFtZWJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0NhbnZhc0Zy
YW1lYnVmZmVyLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvaHRtbC9DYW52YXNGcmFtZWJ1
ZmZlci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
KCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisKKyNpbmNsdWRlICJDYW52YXNGcmFt
ZWJ1ZmZlci5oIgorCisjaW5jbHVkZSA8T3BlbkdML09wZW5HTC5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisgICAgCisgICAgUGFzc1JlZlB0cjxDYW52YXNGcmFtZWJ1ZmZlcj4gQ2FudmFzRnJh
bWVidWZmZXI6OmNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2FudmFzRnJhbWVidWZmZXIoY29udGV4dCkpOworICAg
IH0KKyAgICAKKyAgICBDYW52YXNGcmFtZWJ1ZmZlcjo6Q2FudmFzRnJhbWVidWZmZXIoR3JhcGhp
Y3NDb250ZXh0M0QqIGNvbnRleHQpCisgICAgOiBDYW52YXNPYmplY3QoY29udGV4dCkKKyAgICB7
CisgICAgICAgIEdMdWludCBvOworICAgICAgICBnbEdlbkZyYW1lYnVmZmVyc0VYVCgxLCAmbyk7
CisgICAgICAgIHNldE9iamVjdChvKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBDYW52YXNGcmFt
ZWJ1ZmZlcjo6X2RlbGV0ZU9iamVjdChQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKKyAgICB7Cisg
ICAgICAgIGdsRGVsZXRlRnJhbWVidWZmZXJzRVhUKDEsICZvYmplY3QpOworICAgIH0KK30KKwor
I2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCkluZGV4OiBXZWJDb3JlL2h0bWwvQ2FudmFzRnJh
bWVidWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvQ2FudmFzRnJhbWVidWZmZXIu
aAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvaHRtbC9DYW52YXNGcmFtZWJ1ZmZlci5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMu
ICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3Ig
dGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENhbnZhc0ZyYW1lYnVmZmVy
X2gKKyNkZWZpbmUgQ2FudmFzRnJhbWVidWZmZXJfaAorCisjaW5jbHVkZSAiQ2FudmFzT2JqZWN0
LmgiCisKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKKyAgICBjbGFzcyBDYW52YXNGcmFt
ZWJ1ZmZlciA6IHB1YmxpYyBDYW52YXNPYmplY3QgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmly
dHVhbCB+Q2FudmFzRnJhbWVidWZmZXIoKSB7IGRlbGV0ZU9iamVjdCgpOyB9CisgICAgICAgIAor
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNGcmFtZWJ1ZmZlcj4gY3JlYXRlKEdyYXBo
aWNzQ29udGV4dDNEKik7CisgICAgICAgIAorICAgIHByb3RlY3RlZDoKKyAgICAgICAgQ2FudmFz
RnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0QqKTsKKyAgICAgICAgCisgICAgICAgIHZpcnR1
YWwgdm9pZCBfZGVsZXRlT2JqZWN0KFBsYXRmb3JtM0RPYmplY3QpOworICAgIH07CisgICAgCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBDYW52YXNGcmFtZWJ1ZmZlcl9oCklu
ZGV4OiBXZWJDb3JlL2h0bWwvQ2FudmFzRnJhbWVidWZmZXIuaWRsCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9DYW52YXNGcmFtZWJ1ZmZlci5pZGwJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L2h0bWwvQ2FudmFzRnJhbWVidWZmZXIuaWRsCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFw
cGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCittb2R1bGUgaHRtbCB7CisgICAgaW50ZXJmYWNlIFtDb25kaXRpb25hbD0zRF9DQU5W
QVNdIENhbnZhc0ZyYW1lYnVmZmVyIHsKKyAgICB9OworfQpJbmRleDogV2ViQ29yZS9odG1sL0Nh
bnZhc051bWJlckFycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvQ2FudmFzTnVt
YmVyQXJyYXkuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9odG1sL0NhbnZhc051bWJlckFy
cmF5LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAo
IkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkNhbnZhc051bWJlckFycmF5LmgiCisjaW5jbHVkZSAiUGxhdGZv
cm1TdHJpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorICAgIFBhc3NSZWZQdHI8
Q2FudmFzTnVtYmVyQXJyYXk+IENhbnZhc051bWJlckFycmF5OjpjcmVhdGUodW5zaWduZWQgbGVu
Z3RoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDYW52YXNOdW1iZXJBcnJh
eShsZW5ndGgpKTsKKyAgICB9CisgICAgCisgICAgQ2FudmFzTnVtYmVyQXJyYXk6OkNhbnZhc051
bWJlckFycmF5KHVuc2lnbmVkIGxlbmd0aCkKKyAgICAgICAgOiBtX2RhdGEobGVuZ3RoKQorICAg
IHsKKyAgICB9CisKKyAgICBTdHJpbmcgQ2FudmFzTnVtYmVyQXJyYXk6OnRvU3RyaW5nKCkgY29u
c3QKKyAgICB7CisgICAgICAgIFN0cmluZyBzID0gIlsgIjsKKyAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX2RhdGEuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChpICE9IDAp
CisgICAgICAgICAgICAgICAgcyArPSAiLCAiOworICAgICAgICAgICAgcyArPSBTdHJpbmc6Om51
bWJlcihtX2RhdGFbaV0pOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzICs9ICIgXSI7
CisgICAgICAgIHJldHVybiBzOworICAgIH0KKworfQpJbmRleDogV2ViQ29yZS9odG1sL0NhbnZh
c051bWJlckFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0NhbnZhc051bWJlckFy
cmF5LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2h0bWwvQ2FudmFzTnVtYmVyQXJyYXkuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwg
MjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikg
bm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDYW52YXNOdW1iZXJB
cnJheV9oCisjZGVmaW5lIENhbnZhc051bWJlckFycmF5X2gKKworI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisjaW5jbHVkZSA8bGltaXRzPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBj
bGFzcyBTdHJpbmc7CisgICAgCisgICAgY2xhc3MgQ2FudmFzTnVtYmVyQXJyYXkgOiBwdWJsaWMg
UmVmQ291bnRlZDxDYW52YXNOdW1iZXJBcnJheT4geworICAgIHB1YmxpYzoKKyAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8Q2FudmFzTnVtYmVyQXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgp
OworICAgICAgICAKKyAgICAgICAgVmVjdG9yPGZsb2F0PiYgZGF0YSgpIHsgcmV0dXJuIG1fZGF0
YTsgfQorCisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5z
aXplKCk7IH0KKyAgICAgICAgZmxvYXQgaXRlbSh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gKGlu
ZGV4ID49IG1fZGF0YS5zaXplKCkpID8gMCA6IG1fZGF0YVtpbmRleF07IH0KKworICAgIFN0cmlu
ZyB0b1N0cmluZygpIGNvbnN0OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgQ2FudmFzTnVtYmVy
QXJyYXkodW5zaWduZWQgbGVuZ3RoKTsKKyAgICAgICAgVmVjdG9yPGZsb2F0PiBtX2RhdGE7Cisg
ICAgfTsKKyAgICAKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIENhbnZhc051
bWJlckFycmF5X2gKSW5kZXg6IFdlYkNvcmUvaHRtbC9DYW52YXNOdW1iZXJBcnJheS5pZGwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0NhbnZhc051bWJlckFycmF5LmlkbAkocmV2aXNpb24g
MCkKKysrIFdlYkNvcmUvaHRtbC9DYW52YXNOdW1iZXJBcnJheS5pZGwJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIg
dGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMg
b2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKK21vZHVsZSBodG1sIHsKKyAgICBpbnRlcmZhY2UgWworICAg
ICAgICBDb25kaXRpb25hbD0zRF9DQU5WQVMsCisgICAgICAgIEdlbmVyYXRlQ29uc3RydWN0b3Is
CisgICAgICAgIEhhc0N1c3RvbUluZGV4R2V0dGVyCisgICAgXSBDYW52YXNOdW1iZXJBcnJheSB7
CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxlbmd0aDsKKworICAg
ICAgICBbRG9udEVudW1dIERPTVN0cmluZyB0b1N0cmluZygpOworICAgIH07Cit9CkluZGV4OiBX
ZWJDb3JlL2h0bWwvQ2FudmFzT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
Q2FudmFzT2JqZWN0LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvaHRtbC9DYW52YXNPYmpl
Y3QuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgi
QXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorCisjaW5jbHVkZSAiQ2FudmFzT2JqZWN0
LmgiCisjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisgICAgCisgICAgQ2FudmFzT2JqZWN0OjpDYW52YXNPYmplY3QoR3JhcGhpY3NDb250
ZXh0M0QqIGNvbnRleHQpCisgICAgOiBtX29iamVjdCgwKQorICAgICwgbV9jb250ZXh0KGNvbnRl
eHQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBDYW52YXNPYmplY3Q6On5DYW52YXNPYmplY3Qo
KQorICAgIHsKKyAgICAgICAgaWYgKG1fY29udGV4dCkKKyAgICAgICAgICAgIG1fY29udGV4dC0+
cmVtb3ZlT2JqZWN0KHRoaXMpOworICAgIH0KKworICAgIHZvaWQgQ2FudmFzT2JqZWN0OjpzZXRP
YmplY3QoUGxhdGZvcm0zRE9iamVjdCBvYmplY3QpCisgICAgeworICAgICAgICBkZWxldGVPYmpl
Y3QoKTsKKyAgICAgICAgbV9vYmplY3QgPSBvYmplY3Q7CisgICAgfQorCisgICAgdm9pZCBDYW52
YXNPYmplY3Q6OmRlbGV0ZU9iamVjdCgpCisgICAgeworICAgICAgICBpZiAobV9vYmplY3QpIHsK
KyAgICAgICAgICAgIGlmIChtX2NvbnRleHQpIHsKKyAgICAgICAgICAgICAgICBtX2NvbnRleHQt
Pm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgICAgICAgICAgICAgIF9kZWxldGVPYmplY3QobV9v
YmplY3QpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9vYmplY3QgPSAwOworICAgICAg
ICB9CisgICAgfQorfQorCisjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYkNv
cmUvaHRtbC9DYW52YXNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvQ2FudmFz
T2JqZWN0LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2h0bWwvQ2FudmFzT2JqZWN0LmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIw
MDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5v
ciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ2FudmFzT2JqZWN0X2gK
KyNkZWZpbmUgQ2FudmFzT2JqZWN0X2gKKworI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNE
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNE
OworICAgIAorICAgIGNsYXNzIENhbnZhc09iamVjdCA6IHB1YmxpYyBSZWZDb3VudGVkPENhbnZh
c09iamVjdD4geworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB+Q2FudmFzT2JqZWN0KCk7
CisgICAgICAgIAorICAgICAgICBQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCgpIGNvbnN0IHsgcmV0
dXJuIG1fb2JqZWN0OyB9CisgICAgICAgIHZvaWQgc2V0T2JqZWN0KFBsYXRmb3JtM0RPYmplY3Qp
OworICAgICAgICB2b2lkIGRlbGV0ZU9iamVjdCgpOworICAgICAgICAKKyAgICAgICAgdm9pZCBk
ZXRhY2hDb250ZXh0KCkKKyAgICAgICAgeworICAgICAgICAgICAgZGVsZXRlT2JqZWN0KCk7Cisg
ICAgICAgICAgICBtX2NvbnRleHQgPSAwOworICAgICAgICB9CisgICAgICAgIAorICAgIHByb3Rl
Y3RlZDoKKyAgICAgICAgQ2FudmFzT2JqZWN0KEdyYXBoaWNzQ29udGV4dDNEKik7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBfZGVsZXRlT2JqZWN0KFBsYXRmb3JtM0RPYmplY3QpID0gMDsKKyAgICAK
KyAgICBwcml2YXRlOgorICAgICAgICBQbGF0Zm9ybTNET2JqZWN0IG1fb2JqZWN0OworICAgICAg
ICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0OworICAgIH07CisgICAgCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBDYW52YXNPYmplY3RfaApJbmRleDogV2ViQ29yZS9o
dG1sL0NhbnZhc1Byb2dyYW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9DYW52YXNQ
cm9ncmFtLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvaHRtbC9DYW52YXNQcm9ncmFtLmNw
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxl
Iikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaWYgRU5BQkxFKDNEX0NBTlZBUykKKworI2luY2x1ZGUgIkNhbnZhc1Byb2dyYW0uaCIK
KworI2luY2x1ZGUgPE9wZW5HTC9PcGVuR0wuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAg
IAorICAgIFBhc3NSZWZQdHI8Q2FudmFzUHJvZ3JhbT4gQ2FudmFzUHJvZ3JhbTo6Y3JlYXRlKEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBDYW52YXNQcm9ncmFtKGNvbnRleHQpKTsKKyAgICB9CisgICAgCisgICAgQ2FudmFzUHJv
Z3JhbTo6Q2FudmFzUHJvZ3JhbShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKKyAgICA6IENh
bnZhc09iamVjdChjb250ZXh0KQorICAgIHsKKyAgICAgICAgR0x1aW50IG8gPSBnbENyZWF0ZVBy
b2dyYW0oKTsKKyAgICAgICAgc2V0T2JqZWN0KG8pOworICAgIH0KKyAgICAKKyAgICB2b2lkIENh
bnZhc1Byb2dyYW06Ol9kZWxldGVPYmplY3QoUGxhdGZvcm0zRE9iamVjdCBvYmplY3QpCisgICAg
eworICAgICAgICBnbERlbGV0ZVByb2dyYW0ob2JqZWN0KTsKKyAgICB9Cit9CisKKyNlbmRpZiAv
LyBFTkFCTEUoM0RfQ0FOVkFTKQpJbmRleDogV2ViQ29yZS9odG1sL0NhbnZhc1Byb2dyYW0uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvQ2FudmFzUHJvZ3JhbS5oCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9odG1sL0NhbnZhc1Byb2dyYW0uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBv
ZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAg
IGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBDYW52YXNQcm9ncmFtX2gKKyNkZWZpbmUgQ2FudmFzUHJvZ3Jh
bV9oCisKKyNpbmNsdWRlICJDYW52YXNPYmplY3QuaCIKKworI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworICAgIAorICAgIGNsYXNzIENhbnZhc1Byb2dyYW0gOiBwdWJsaWMgQ2FudmFzT2JqZWN0IHsK
KyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgfkNhbnZhc1Byb2dyYW0oKSB7IGRlbGV0ZU9i
amVjdCgpOyB9CisgICAgICAgIAorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNQcm9n
cmFtPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqKTsKKyAgICAgICAgCisgICAgcHJvdGVjdGVk
OgorICAgICAgICBDYW52YXNQcm9ncmFtKEdyYXBoaWNzQ29udGV4dDNEKik7CisgICAgICAgIAor
ICAgICAgICB2aXJ0dWFsIHZvaWQgX2RlbGV0ZU9iamVjdChQbGF0Zm9ybTNET2JqZWN0KTsKKyAg
ICB9OworICAgIAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQ2FudmFzUHJv
Z3JhbV9oCkluZGV4OiBXZWJDb3JlL2h0bWwvQ2FudmFzUHJvZ3JhbS5pZGwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL0NhbnZhc1Byb2dyYW0uaWRsCShyZXZpc2lvbiAwKQorKysgV2ViQ29y
ZS9odG1sL0NhbnZhc1Byb2dyYW0uaWRsCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxl
IENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCittb2R1bGUgaHRtbCB7CisgICAgaW50ZXJmYWNlIFtDb25kaXRpb25hbD0zRF9DQU5WQVNd
IENhbnZhc1Byb2dyYW0geworICAgIH07Cit9CkluZGV4OiBXZWJDb3JlL2h0bWwvQ2FudmFzUmVu
ZGVyYnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyYnVm
ZmVyLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJidWZmZXIu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBw
bGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorCisjaW5jbHVkZSAiQ2FudmFzUmVuZGVyYnVm
ZmVyLmgiCisKKyNpbmNsdWRlIDxPcGVuR0wvT3BlbkdMLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKyAgICAKKyAgICBQYXNzUmVmUHRyPENhbnZhc1JlbmRlcmJ1ZmZlcj4gQ2FudmFzUmVuZGVy
YnVmZmVyOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IENhbnZhc1JlbmRlcmJ1ZmZlcihjb250ZXh0KSk7CisgICAg
fQorICAgIAorICAgIENhbnZhc1JlbmRlcmJ1ZmZlcjo6Q2FudmFzUmVuZGVyYnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEKiBjb250ZXh0KQorICAgIDogQ2FudmFzT2JqZWN0KGNvbnRleHQpCisgICAg
eworICAgICAgICBHTHVpbnQgbzsKKyAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzRVhUKDEsICZv
KTsKKyAgICAgICAgc2V0T2JqZWN0KG8pOworICAgIH0KKyAgICAKKyAgICB2b2lkIENhbnZhc1Jl
bmRlcmJ1ZmZlcjo6X2RlbGV0ZU9iamVjdChQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKKyAgICB7
CisgICAgICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmb2JqZWN0KTsKKyAgICB9Cit9
CisKKyNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpJbmRleDogV2ViQ29yZS9odG1sL0NhbnZh
c1JlbmRlcmJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJi
dWZmZXIuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJidWZmZXIu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxl
Iikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDYW52YXNSZW5k
ZXJidWZmZXJfaAorI2RlZmluZSBDYW52YXNSZW5kZXJidWZmZXJfaAorCisjaW5jbHVkZSAiQ2Fu
dmFzT2JqZWN0LmgiCisKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKKyAgICBjbGFzcyBD
YW52YXNSZW5kZXJidWZmZXIgOiBwdWJsaWMgQ2FudmFzT2JqZWN0IHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIHZpcnR1YWwgfkNhbnZhc1JlbmRlcmJ1ZmZlcigpIHsgZGVsZXRlT2JqZWN0KCk7IH0K
KyAgICAgICAgCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc1JlbmRlcmJ1ZmZlcj4g
Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKik7CisgICAgICAgIAorICAgIHByb3RlY3RlZDoKKyAg
ICAgICAgQ2FudmFzUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEKik7CisgICAgICAgIAor
ICAgICAgICB2aXJ0dWFsIHZvaWQgX2RlbGV0ZU9iamVjdChQbGF0Zm9ybTNET2JqZWN0KTsKKyAg
ICB9OworICAgIAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQ2FudmFzUmVu
ZGVyYnVmZmVyX2gKSW5kZXg6IFdlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJidWZmZXIuaWRsCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJidWZmZXIuaWRsCShyZXZpc2lv
biAwKQorKysgV2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmJ1ZmZlci5pZGwJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRo
ZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFt
ZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKK21vZHVsZSBodG1sIHsKKyAgICBpbnRlcmZhY2UgW0Nv
bmRpdGlvbmFsPTNEX0NBTlZBU10gQ2FudmFzUmVuZGVyYnVmZmVyIHsKKyAgICB9OworfQpJbmRl
eDogV2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5jcHAJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw4MTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKDNEX0NBTlZBUykK
KworI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkNhbnZh
c0J1ZmZlci5oIgorI2luY2x1ZGUgIkNhbnZhc0ZyYW1lYnVmZmVyLmgiCisjaW5jbHVkZSAiQ2Fu
dmFzUHJvZ3JhbS5oIgorI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmJ1ZmZlci5oIgorI2luY2x1ZGUg
IkNhbnZhc1RleHR1cmUuaCIKKyNpbmNsdWRlICJDYW52YXNTaGFkZXIuaCIKKyNpbmNsdWRlICJI
VE1MQ2FudmFzRWxlbWVudC5oIgorI2luY2x1ZGUgIlJlbmRlckJveC5oIgorI2luY2x1ZGUgIlJl
bmRlckxheWVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDNEOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QoSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZh
cykKKyAgICA6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQoY2FudmFzKQorICAgICwgbV9uZWVkc1Vw
ZGF0ZSh0cnVlKQoreworICAgIG1fY29udGV4dC5yZXNoYXBlKG1fY2FudmFzLT53aWR0aCgpLCBt
X2NhbnZhcy0+aGVpZ2h0KCkpOworfQorCitDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6On5DYW52
YXNSZW5kZXJpbmdDb250ZXh0M0QoKQoreworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRDo6dXBkYXRlQ29udGV4dCgpCit7CisgICAgaWYgKG1fY2FudmFzLT5yZW5kZXJCb3goKSAm
JiBtX2NhbnZhcy0+cmVuZGVyQm94KCktPmhhc0xheWVyKCkpCisgICAgICAgIG1fY2FudmFzLT5y
ZW5kZXJCb3goKS0+bGF5ZXIoKS0+cmVuZGVyZXJDb250ZW50Q2hhbmdlZCgpOworfQorCit2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQp
Cit7CisgICAgaWYgKG1fbmVlZHNVcGRhdGUpIHsKKyAgICAgICAgaWYgKG1fY2FudmFzLT5yZW5k
ZXJCb3goKSAmJiBtX2NhbnZhcy0+cmVuZGVyQm94KCktPmhhc0xheWVyKCkpCisgICAgICAgICAg
ICBtX2NhbnZhcy0+cmVuZGVyQm94KCktPmxheWVyKCktPnJlbmRlcmVyQ29udGVudENoYW5nZWQo
KTsKKyAgICAgICAgbV9uZWVkc1VwZGF0ZSA9IGZhbHNlOworICAgIH0KKyAgICAKKyAgICBtX2Nv
bnRleHQucmVzaGFwZSh3aWR0aCwgaGVpZ2h0KTsKK30KKworI2RlZmluZSBsZWF2ZSh1cGRhdGUp
IHsgbV9jb250ZXh0LmNoZWNrRXJyb3IoKTsgaWYgKHVwZGF0ZSkgdXBkYXRlQ29udGV4dCgpOyB9
CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbEFjdGl2ZVRleHR1cmUgKHVuc2ln
bmVkIGxvbmcgdGV4dHVyZSkKK3sKKyAgICBtX2NvbnRleHQuZ2xBY3RpdmVUZXh0dXJlKHRleHR1
cmUpOworICAgIGxlYXZlKGZhbHNlKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
M0Q6OmdsQXR0YWNoU2hhZGVyIChDYW52YXNQcm9ncmFtKiBwcm9ncmFtLCBDYW52YXNTaGFkZXIq
IHNoYWRlcikKK3sKKyAgICBpZiAoIXByb2dyYW0gfHwgIXNoYWRlcikKKyAgICAgICAgcmV0dXJu
OworICAgIG1fY29udGV4dC5nbEF0dGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIpOworICAgIGxl
YXZlKGZhbHNlKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsQmluZEF0
dHJpYkxvY2F0aW9uIChDYW52YXNQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4
LCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgaWYgKCFwcm9ncmFtKQorICAgICAgICByZXR1
cm47CisgICAgbV9jb250ZXh0LmdsQmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIGluZGV4LCBu
YW1lKTsKKyAgICBsZWF2ZShmYWxzZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEOjpnbEJpbmRCdWZmZXIgKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBDYW52YXNCdWZmZXIqIGJ1
ZmZlcikKK3sKKyAgICBtX2NvbnRleHQuZ2xCaW5kQnVmZmVyKHRhcmdldCwgYnVmZmVyKTsKKyAg
ICBsZWF2ZShmYWxzZSk7Cit9CisKKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6Omds
QmluZEZyYW1lYnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBDYW52YXNGcmFtZWJ1ZmZlciog
YnVmZmVyKQoreworICAgIG1fY29udGV4dC5nbEJpbmRGcmFtZWJ1ZmZlcih0YXJnZXQsIGJ1ZmZl
cik7CisgICAgbGVhdmUoZmFsc2UpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RDo6Z2xCaW5kUmVuZGVyYnVmZmVyICh1bnNpZ25lZCBsb25nIHRhcmdldCwgQ2FudmFzUmVuZGVy
YnVmZmVyKiByZW5kZXJidWZmZXIpCit7CisgICAgbV9jb250ZXh0LmdsQmluZFJlbmRlcmJ1ZmZl
cih0YXJnZXQsIHJlbmRlcmJ1ZmZlcik7CisgICAgbGVhdmUoZmFsc2UpOworfQorCisKK3ZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbEJpbmRUZXh0dXJlKHVuc2lnbmVkIHRhcmdldCwg
Q2FudmFzVGV4dHVyZSogdGV4dHVyZSkKK3sKKyAgICBtX2NvbnRleHQuZ2xCaW5kVGV4dHVyZSh0
YXJnZXQsIHRleHR1cmUpOworICAgIGxlYXZlKGZhbHNlKTsKK30KKwordm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0Q6OmdsQmxlbmRDb2xvciAoZG91YmxlIHJlZCwgZG91YmxlIGdyZWVuLCBk
b3VibGUgYmx1ZSwgZG91YmxlIGFscGhhKQoreworICAgIG1fY29udGV4dC5nbEJsZW5kQ29sb3Io
cmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworICAgIGxlYXZlKGZhbHNlKTsKK30KKwordm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsQmxlbmRFcXVhdGlvbiAoIHVuc2lnbmVkIGxvbmcg
bW9kZSApCit7CisgICAgbV9jb250ZXh0LmdsQmxlbmRFcXVhdGlvbihtb2RlKTsKKyAgICBsZWF2
ZShmYWxzZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbEJsZW5kRXF1
YXRpb25TZXBhcmF0ZSAodW5zaWduZWQgbG9uZyBtb2RlUkdCLCB1bnNpZ25lZCBsb25nIG1vZGVB
bHBoYSkKK3sKKyAgICBtX2NvbnRleHQuZ2xCbGVuZEVxdWF0aW9uU2VwYXJhdGUobW9kZVJHQiwg
bW9kZUFscGhhKTsKKyAgICBsZWF2ZShmYWxzZSk7Cit9CisKKwordm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0M0Q6OmdsQmxlbmRGdW5jKHVuc2lnbmVkIGxvbmcgc2ZhY3RvciwgdW5zaWduZWQg
bG9uZyBkZmFjdG9yKQoreworICAgIG1fY29udGV4dC5nbEJsZW5kRnVuYyhzZmFjdG9yLCBkZmFj
dG9yKTsKKyAgICBsZWF2ZShmYWxzZSk7Cit9ICAgICAgIAorCit2b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQzRDo6Z2xCbGVuZEZ1bmNTZXBhcmF0ZSAodW5zaWduZWQgbG9uZyBzcmNSR0IsIHVu
c2lnbmVkIGxvbmcgZHN0UkdCLCB1bnNpZ25lZCBsb25nIHNyY0FscGhhLCB1bnNpZ25lZCBsb25n
IGRzdEFscGhhKQoreworICAgIG1fY29udGV4dC5nbEJsZW5kRnVuY1NlcGFyYXRlKHNyY1JHQiwg
ZHN0UkdCLCBzcmNBbHBoYSwgZHN0QWxwaGEpOworICAgIGxlYXZlKGZhbHNlKTsKK30KKwordm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsQnVmZmVyRGF0YSAodW5zaWduZWQgbG9uZyB0
YXJnZXQsIENhbnZhc051bWJlckFycmF5KiBhcnJheSwgdW5zaWduZWQgbG9uZyB1c2FnZSkKK3sK
KyAgICBtX2NvbnRleHQuZ2xCdWZmZXJEYXRhKHRhcmdldCwgYXJyYXksIHVzYWdlKTsKKyAgICBs
ZWF2ZShmYWxzZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbEJ1ZmZl
clN1YkRhdGEgKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIG9mZnNldCwgQ2FudmFzTnVtYmVy
QXJyYXkqIGFycmF5KQoreworICAgIGlmICghYXJyYXkgfHwgIWFycmF5LT5kYXRhKCkuc2l6ZSgp
KQorICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIG1fY29udGV4dC5nbEJ1ZmZlclN1YkRh
dGEodGFyZ2V0LCBvZmZzZXQsIGFycmF5KTsKKyAgICBsZWF2ZShmYWxzZSk7Cit9CisKK3Vuc2ln
bmVkIGxvbmcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbENoZWNrRnJhbWVidWZmZXJTdGF0
dXMgKENhbnZhc0ZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZlcikKK3sKKyAgICByZXR1cm4gbV9jb250
ZXh0LmdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhmcmFtZWJ1ZmZlcik7Cit9CisKK3ZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbENsZWFyQ29sb3IoZG91YmxlIHIsIGRvdWJsZSBnLCBk
b3VibGUgYiwgZG91YmxlIGEpCit7CisgICAgbV9jb250ZXh0LmdsQ2xlYXJDb2xvcihyLCBnLCBi
LCBhKTsKKyAgICBsZWF2ZShmYWxzZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEOjpnbENsZWFyKHVuc2lnbmVkIGxvbmcgbWFzaykKK3sKKyAgICBtX2NvbnRleHQuZ2xDbGVh
cihtYXNrKTsKKyAgICBsZWF2ZSh0cnVlKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0Q6OmdsQ2xlYXJEZXB0aCAoZG91YmxlIGRlcHRoKQoreworICAgIG1fY29udGV4dC5nbENs
ZWFyRGVwdGgoZGVwdGgpOworICAgIGxlYXZlKGZhbHNlKTsKK30KKwordm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0Q6OmdsQ2xlYXJTdGVuY2lsIChsb25nIHMpCit7CisgICAgbV9jb250ZXh0
LmdsQ2xlYXJTdGVuY2lsKHMpOworICAgIGxlYXZlKGZhbHNlKTsKK30KKwordm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0Q6OmdsQ29sb3JNYXNrIChib29sIHJlZCwgYm9vbCBncmVlbiwgYm9v
bCBibHVlLCBib29sIGFscGhhKQoreworICAgIG1fY29udGV4dC5nbENvbG9yTWFzayhyZWQsIGdy
ZWVuLCBibHVlLCBhbHBoYSk7CisgICAgbGVhdmUoZmFsc2UpOworfQorCit2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRDo6Z2xDb21waWxlU2hhZGVyIChDYW52YXNTaGFkZXIqIHNoYWRlcikK
K3sKKyAgICBtX2NvbnRleHQuZ2xDb21waWxlU2hhZGVyKHNoYWRlcik7CisgICAgbGVhdmUoZmFs
c2UpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2xDb3B5VGV4SW1hZ2Uy
RCAodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgbGV2ZWwsIHVuc2lnbmVkIGxvbmcgaW50ZXJu
YWxmb3JtYXQsIGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBs
b25nIGhlaWdodCwgbG9uZyBib3JkZXIpCit7CisgICAgbV9jb250ZXh0LmdsQ29weVRleEltYWdl
MkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJv
cmRlcik7CisgICAgbGVhdmUoZmFsc2UpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRDo6Z2xDb3B5VGV4U3ViSW1hZ2UyRCAodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgbGV2
ZWwsIGxvbmcgeG9mZnNldCwgbG9uZyB5b2Zmc2V0LCBsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQg
bG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpCit7CisgICAgbV9jb250ZXh0LmdsQ29w
eVRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lk
dGgsIGhlaWdodCk7CisgICAgbGVhdmUoZmFsc2UpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQzRDo6Z2xDdWxsRmFjZSAodW5zaWduZWQgbG9uZyBtb2RlKQoreworICAgIG1fY29u
dGV4dC5nbEN1bGxGYWNlKG1vZGUpOworICAgIGxlYXZlKGZhbHNlKTsKK30KKwordm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsRGVwdGhGdW5jICh1bnNpZ25lZCBsb25nIGZ1bmMpCit7
CisgICAgbV9jb250ZXh0LmdsRGVwdGhGdW5jKGZ1bmMpOworICAgIGxlYXZlKGZhbHNlKTsKK30K
Kwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsRGVwdGhNYXNrIChib29sIGZsYWcp
Cit7CisgICAgbV9jb250ZXh0LmdsRGVwdGhNYXNrKGZsYWcpOworICAgIGxlYXZlKGZhbHNlKTsK
K30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsRGVwdGhSYW5nZSAoZG91Ymxl
IHpOZWFyLCBkb3VibGUgekZhcikKK3sKKyAgICBtX2NvbnRleHQuZ2xEZXB0aFJhbmdlKHpOZWFy
LCB6RmFyKTsKKyAgICBsZWF2ZShmYWxzZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDNEOjpnbERldGFjaFNoYWRlciAoQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSwgQ2FudmFzU2hh
ZGVyKiBzaGFkZXIpCit7CisgICAgaWYgKCFwcm9ncmFtIHx8ICFzaGFkZXIpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fY29udGV4dC5nbERldGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIpOwor
ICAgIGxlYXZlKGZhbHNlKTsKK30KKworCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6
Z2xEaXNhYmxlKHVuc2lnbmVkIGxvbmcgY2FwKQoreworICAgIG1fY29udGV4dC5nbERpc2FibGUo
Y2FwKTsKKyAgICBsZWF2ZShmYWxzZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEOjpnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSAodW5zaWduZWQgbG9uZyBpbmRleCkKK3sK
KyAgICBtX2NvbnRleHQuZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOworICAgIGxl
YXZlKGZhbHNlKTsKK30KKworCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2xEcmF3
QXJyYXlzKHVuc2lnbmVkIGxvbmcgbW9kZSwgbG9uZyBmaXJzdCwgdW5zaWduZWQgbG9uZyBjb3Vu
dCkKK3sKKyAgICBtX2NvbnRleHQuZ2xEcmF3QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCk7Cisg
ICAgbGVhdmUodHJ1ZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbERy
YXdFbGVtZW50cyh1bnNpZ25lZCBsb25nIG1vZGUsIHVuc2lnbmVkIGxvbmcgY291bnQsIHVuc2ln
bmVkIGxvbmcgdHlwZSwgdm9pZCogYXJyYXkpCit7CisgICAgbV9jb250ZXh0LmdsRHJhd0VsZW1l
bnRzKG1vZGUsIGNvdW50LCB0eXBlLCBhcnJheSk7CisgICAgbGVhdmUodHJ1ZSk7Cit9CisKK3Zv
aWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbEVuYWJsZSh1bnNpZ25lZCBsb25nIGNhcCkK
K3sKKyAgICBtX2NvbnRleHQuZ2xFbmFibGUoY2FwKTsKKyAgICBsZWF2ZShmYWxzZSk7Cit9CisK
K3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5
ICh1bnNpZ25lZCBsb25nIGluZGV4KQoreworICAgIG1fY29udGV4dC5nbEVuYWJsZVZlcnRleEF0
dHJpYkFycmF5KGluZGV4KTsKKyAgICBsZWF2ZShmYWxzZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDNEOjpnbEZpbmlzaCAoKQoreworICAgIG1fY29udGV4dC5nbEZpbmlzaCgp
OworICAgIGxlYXZlKHRydWUpOworfQorCisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
OjpnbEZsdXNoKCkKK3sKKyAgICBtX2NvbnRleHQuZ2xGbHVzaCgpOworICAgIGxlYXZlKHRydWUp
OworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2xGcmFtZWJ1ZmZlclJlbmRl
cmJ1ZmZlciAodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwg
dW5zaWduZWQgbG9uZyByZW5kZXJidWZmZXJ0YXJnZXQsIENhbnZhc1JlbmRlcmJ1ZmZlciogYnVm
ZmVyKQoreworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm47CisgICAgICAgIAorICAg
IG1fY29udGV4dC5nbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRhcmdldCwgYXR0YWNobWVudCwg
cmVuZGVyYnVmZmVydGFyZ2V0LCBidWZmZXIpOworICAgIGxlYXZlKGZhbHNlKTsKK30KKwordm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsRnJhbWVidWZmZXJUZXh0dXJlMkQgKHVuc2ln
bmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVkIGxvbmcg
dGV4dGFyZ2V0LCBDYW52YXNUZXh0dXJlKiB0ZXh0dXJlLCBsb25nIGxldmVsKQoreworICAgIGlm
ICghdGV4dHVyZSkKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBtX2NvbnRleHQuZ2xG
cmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVy
ZSwgbGV2ZWwpOworICAgIGxlYXZlKGZhbHNlKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0M0Q6OmdsRnJvbnRGYWNlICh1bnNpZ25lZCBsb25nIG1vZGUpCit7CisgICAgbV9jb250
ZXh0LmdsRnJvbnRGYWNlKG1vZGUpOworICAgIGxlYXZlKGZhbHNlKTsKK30KKwordm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsR2VuZXJhdGVNaXBtYXAgKHVuc2lnbmVkIGxvbmcgdGFy
Z2V0KQoreworICAgIG1fY29udGV4dC5nbEdlbmVyYXRlTWlwbWFwKHRhcmdldCk7CisgICAgbGVh
dmUoZmFsc2UpOworfQorCitpbnQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbEdldEF0dHJp
YkxvY2F0aW9uIChDYW52YXNQcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7
CisgICAgcmV0dXJuIG1fY29udGV4dC5nbEdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIG5hbWUp
OworfQorCit1bnNpZ25lZCBsb25nIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2xHZXRFcnJv
ciAoKQoreworICAgIHJldHVybiBtX2NvbnRleHQuZ2xHZXRFcnJvcigpOworfQorCitTdHJpbmcg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbEdldFN0cmluZyAodW5zaWduZWQgbG9uZyBuYW1l
KQoreworICAgIHJldHVybiBtX2NvbnRleHQuZ2xHZXRTdHJpbmcobmFtZSk7Cit9CisKK3ZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbEhpbnQgKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1
bnNpZ25lZCBsb25nIG1vZGUpCit7CisgICAgbV9jb250ZXh0LmdsSGludCh0YXJnZXQsIG1vZGUp
OworICAgIGxlYXZlKGZhbHNlKTsKK30KKworYm9vbCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6
OmdsSXNCdWZmZXIgKENhbnZhc0J1ZmZlciogYnVmZmVyKQoreworICAgIGlmICghYnVmZmVyKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgIHJldHVybiBtX2NvbnRleHQuZ2xJ
c0J1ZmZlcihidWZmZXIpOworfQorCitib29sIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2xJ
c0VuYWJsZWQgKHVuc2lnbmVkIGxvbmcgY2FwKQoreworICAgIHJldHVybiBtX2NvbnRleHQuZ2xJ
c0VuYWJsZWQoY2FwKTsKK30KKworYm9vbCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsSXNG
cmFtZWJ1ZmZlciAoQ2FudmFzRnJhbWVidWZmZXIqIGZyYW1lYnVmZmVyKQoreworICAgIHJldHVy
biBtX2NvbnRleHQuZ2xJc0ZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKTsKK30KKworYm9vbCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsSXNQcm9ncmFtIChDYW52YXNQcm9ncmFtKiBwcm9ncmFt
KQoreworICAgIHJldHVybiBtX2NvbnRleHQuZ2xJc1Byb2dyYW0ocHJvZ3JhbSk7Cit9CisKK2Jv
b2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbElzUmVuZGVyYnVmZmVyIChDYW52YXNSZW5k
ZXJidWZmZXIqIHJlbmRlcmJ1ZmZlcikKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0LmdsSXNSZW5k
ZXJidWZmZXIocmVuZGVyYnVmZmVyKTsKK30KKworYm9vbCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
M0Q6OmdsSXNTaGFkZXIgKENhbnZhc1NoYWRlciogc2hhZGVyKQoreworICAgIHJldHVybiBtX2Nv
bnRleHQuZ2xJc1NoYWRlcihzaGFkZXIpOworfQorCitib29sIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRDo6Z2xJc1RleHR1cmUgKENhbnZhc1RleHR1cmUqIHRleHR1cmUpCit7CisgICAgcmV0dXJu
IG1fY29udGV4dC5nbElzVGV4dHVyZSh0ZXh0dXJlKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0M0Q6OmdsTGluZVdpZHRoIChkb3VibGUgd2lkdGgpCit7CisgICAgbV9jb250ZXh0
LmdsTGluZVdpZHRoKChmbG9hdCkgd2lkdGgpOworICAgIGxlYXZlKGZhbHNlKTsKK30KKwordm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsTGlua1Byb2dyYW0gKENhbnZhc1Byb2dyYW0q
IHByb2dyYW0pCit7CisgICAgaWYgKCFwcm9ncmFtKQorICAgICAgICByZXR1cm47CisgICAgICAg
IAorICAgIG1fY29udGV4dC5nbExpbmtQcm9ncmFtKHByb2dyYW0pOworICAgIGxlYXZlKGZhbHNl
KTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsUGl4ZWxTdG9yZWkgKHVu
c2lnbmVkIGxvbmcgcG5hbWUsIGxvbmcgcGFyYW0pCit7CisgICAgbV9jb250ZXh0LmdsUGl4ZWxT
dG9yZWkocG5hbWUsIHBhcmFtKTsKKyAgICBsZWF2ZShmYWxzZSk7Cit9CisKK3ZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDNEOjpnbFBvbHlnb25PZmZzZXQgKGRvdWJsZSBmYWN0b3IsIGRvdWJs
ZSB1bml0cykKK3sKKyAgICBtX2NvbnRleHQuZ2xQb2x5Z29uT2Zmc2V0KChmbG9hdCkgZmFjdG9y
LCAoZmxvYXQpIHVuaXRzKTsKKyAgICBsZWF2ZShmYWxzZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDNEOjpnbFJlbGVhc2VTaGFkZXJDb21waWxlciAoKQoreworICAgIC8vOjpn
bFJlbGVhc2VTaGFkZXJDb21waWxlckVYVCgpOworICAgIGxlYXZlKGZhbHNlKTsKK30KKwordm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZSAodW5zaWdu
ZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIGxv
bmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KQoreworICAgIG1fY29udGV4dC5nbFJlbmRl
cmJ1ZmZlclN0b3JhZ2UodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Cisg
ICAgbGVhdmUoZmFsc2UpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2xT
YW1wbGVDb3ZlcmFnZSAoZG91YmxlIHZhbHVlLCBib29sIGludmVydCkKK3sKKyAgICBtX2NvbnRl
eHQuZ2xTYW1wbGVDb3ZlcmFnZSgoZmxvYXQpIHZhbHVlLCBpbnZlcnQpOworICAgIGxlYXZlKGZh
bHNlKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsU2Npc3NvciAobG9u
ZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KQor
eworICAgIG1fY29udGV4dC5nbFNjaXNzb3IoeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAgbGVh
dmUoZmFsc2UpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2xTaGFkZXJT
b3VyY2UgKENhbnZhc1NoYWRlciogc2hhZGVyLCBjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAg
ICBtX2NvbnRleHQuZ2xTaGFkZXJTb3VyY2Uoc2hhZGVyLCBzdHJpbmcpOworICAgIGxlYXZlKGZh
bHNlKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsU3RlbmNpbEZ1bmMg
KHVuc2lnbmVkIGxvbmcgZnVuYywgbG9uZyByZWYsIHVuc2lnbmVkIGxvbmcgbWFzaykKK3sKKyAg
ICBtX2NvbnRleHQuZ2xTdGVuY2lsRnVuYyhmdW5jLCByZWYsIG1hc2spOworICAgIGxlYXZlKGZh
bHNlKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsU3RlbmNpbEZ1bmNT
ZXBhcmF0ZSAodW5zaWduZWQgbG9uZyBmYWNlLCB1bnNpZ25lZCBsb25nIGZ1bmMsIGxvbmcgcmVm
LCB1bnNpZ25lZCBsb25nIG1hc2spCit7CisgICAgbV9jb250ZXh0LmdsU3RlbmNpbEZ1bmNTZXBh
cmF0ZShmYWNlLCBmdW5jLCByZWYsIG1hc2spOworICAgIGxlYXZlKGZhbHNlKTsKK30KKwordm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsU3RlbmNpbE1hc2sgKHVuc2lnbmVkIGxvbmcg
bWFzaykKK3sKKyAgICBtX2NvbnRleHQuZ2xTdGVuY2lsTWFzayhtYXNrKTsKKyAgICBsZWF2ZShm
YWxzZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbFN0ZW5jaWxNYXNr
U2VwYXJhdGUgKHVuc2lnbmVkIGxvbmcgZmFjZSwgdW5zaWduZWQgbG9uZyBtYXNrKQoreworICAg
IG1fY29udGV4dC5nbFN0ZW5jaWxNYXNrU2VwYXJhdGUoZmFjZSwgbWFzayk7CisgICAgbGVhdmUo
ZmFsc2UpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2xTdGVuY2lsT3Ag
KHVuc2lnbmVkIGxvbmcgZmFpbCwgdW5zaWduZWQgbG9uZyB6ZmFpbCwgdW5zaWduZWQgbG9uZyB6
cGFzcykKK3sKKyAgICBtX2NvbnRleHQuZ2xTdGVuY2lsT3AoZmFpbCwgemZhaWwsIHpwYXNzKTsK
KyAgICBsZWF2ZShmYWxzZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpn
bFN0ZW5jaWxPcFNlcGFyYXRlICh1bnNpZ25lZCBsb25nIGZhY2UsIHVuc2lnbmVkIGxvbmcgZmFp
bCwgdW5zaWduZWQgbG9uZyB6ZmFpbCwgdW5zaWduZWQgbG9uZyB6cGFzcykKK3sKKyAgICBtX2Nv
bnRleHQuZ2xTdGVuY2lsT3BTZXBhcmF0ZShmYWNlLCBmYWlsLCB6ZmFpbCwgenBhc3MpOworICAg
IGxlYXZlKGZhbHNlKTsKK30KKworCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2xU
ZXhQYXJhbWV0ZXIodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBwbmFtZSwgQ2FudmFzTnVtYmVy
QXJyYXkqIGFycmF5KQoreworICAgIG1fY29udGV4dC5nbFRleFBhcmFtZXRlcih0YXJnZXQsIHBu
YW1lLGFycmF5KTsKKyAgICBsZWF2ZShmYWxzZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEOjpnbFRleFBhcmFtZXRlcih1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIHBuYW1l
LCBkb3VibGUgdmFsdWUpCit7CisgICAgbV9jb250ZXh0LmdsVGV4UGFyYW1ldGVyKHRhcmdldCwg
cG5hbWUsIHZhbHVlKTsKKyAgICBsZWF2ZShmYWxzZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDNEOjpnbFVuaWZvcm0obG9uZyBsb2NhdGlvbiwgQ2FudmFzTnVtYmVyQXJyYXkq
IGFycmF5KQoreworICAgIG1fY29udGV4dC5nbFVuaWZvcm0obG9jYXRpb24sIGFycmF5KTsKKyAg
ICBsZWF2ZShmYWxzZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbFVu
aWZvcm0obG9uZyBsb2NhdGlvbiwgZmxvYXQgdjApCit7CisgICAgbV9jb250ZXh0LmdsVW5pZm9y
bShsb2NhdGlvbiwgdjApOworICAgIGxlYXZlKGZhbHNlKTsKK30KKwordm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0Q6OmdsVW5pZm9ybShsb25nIGxvY2F0aW9uLCBmbG9hdCB2MCwgZmxvYXQg
djEpCit7CisgICAgbV9jb250ZXh0LmdsVW5pZm9ybShsb2NhdGlvbiwgdjAsIHYxKTsKKyAgICBs
ZWF2ZShmYWxzZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbFVuaWZv
cm0obG9uZyBsb2NhdGlvbiwgZmxvYXQgdjAsIGZsb2F0IHYxLCBmbG9hdCB2MikKK3sKKyAgICBt
X2NvbnRleHQuZ2xVbmlmb3JtKGxvY2F0aW9uLCB2MCwgdjEsIHYyKTsKKyAgICBsZWF2ZShmYWxz
ZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbFVuaWZvcm0obG9uZyBs
b2NhdGlvbiwgZmxvYXQgdjAsIGZsb2F0IHYxLCBmbG9hdCB2MiwgZmxvYXQgdjMpCit7CisgICAg
bV9jb250ZXh0LmdsVW5pZm9ybShsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOworICAgIGxlYXZl
KGZhbHNlKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsVW5pZm9ybShs
b25nIGxvY2F0aW9uLCBpbnQgdjApCit7CisgICAgbV9jb250ZXh0LmdsVW5pZm9ybShsb2NhdGlv
biwgdjApOworICAgIGxlYXZlKGZhbHNlKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0Q6OmdsVW5pZm9ybShsb25nIGxvY2F0aW9uLCBpbnQgdjAsIGludCB2MSkKK3sKKyAgICBt
X2NvbnRleHQuZ2xVbmlmb3JtKGxvY2F0aW9uLCB2MCwgdjEpOworICAgIGxlYXZlKGZhbHNlKTsK
K30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsVW5pZm9ybShsb25nIGxvY2F0
aW9uLCBpbnQgdjAsIGludCB2MSwgaW50IHYyKQoreworICAgIG1fY29udGV4dC5nbFVuaWZvcm0o
bG9jYXRpb24sIHYwLCB2MSwgdjIpOworICAgIGxlYXZlKGZhbHNlKTsKK30KKwordm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsVW5pZm9ybShsb25nIGxvY2F0aW9uLCBpbnQgdjAsIGlu
dCB2MSwgaW50IHYyLCBpbnQgdjMpCit7CisgICAgbV9jb250ZXh0LmdsVW5pZm9ybShsb2NhdGlv
biwgdjAsIHYxLCB2MiwgdjMpOworICAgIGxlYXZlKGZhbHNlKTsKK30KKwordm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0Q6OmdsVW5pZm9ybU1hdHJpeChsb25nIGxvY2F0aW9uLCBsb25nIGNv
dW50LCBib29sIHRyYW5zcG9zZSwgQ2FudmFzTnVtYmVyQXJyYXkqYXJyYXkpCit7CisgICAgbV9j
b250ZXh0LmdsVW5pZm9ybU1hdHJpeChsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgYXJyYXkp
OworICAgIGxlYXZlKGZhbHNlKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6
OmdsVW5pZm9ybU1hdHJpeChsb25nIGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgY29uc3QgVmVj
dG9yPFdlYktpdENTU01hdHJpeCo+JiBhcnJheSkKK3sKKyAgICBtX2NvbnRleHQuZ2xVbmlmb3Jt
TWF0cml4KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIGFycmF5KTsKKyAgICBsZWF2ZShmYWxzZSk7Cit9
CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbFVuaWZvcm1NYXRyaXgobG9uZyBs
b2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIGNvbnN0IFdlYktpdENTU01hdHJpeCogbWF0cml4KQor
eworICAgIG1fY29udGV4dC5nbFVuaWZvcm1NYXRyaXgobG9jYXRpb24sIHRyYW5zcG9zZSwgbWF0
cml4KTsKKyAgICBsZWF2ZShmYWxzZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEOjpnbFVzZVByb2dyYW0gKENhbnZhc1Byb2dyYW0qIHByb2dyYW0pCit7CisgICAgbV9jb250
ZXh0LmdsVXNlUHJvZ3JhbShwcm9ncmFtKTsKKyAgICBsZWF2ZShmYWxzZSk7Cit9CisKK3ZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbFZhbGlkYXRlUHJvZ3JhbSAoQ2FudmFzUHJvZ3Jh
bSogcHJvZ3JhbSkKK3sKKyAgICBtX2NvbnRleHQuZ2xWYWxpZGF0ZVByb2dyYW0ocHJvZ3JhbSk7
CisgICAgbGVhdmUoZmFsc2UpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6
Z2xWZXJ0ZXhBdHRyaWIgKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgdjApCit7CisgICAgbV9j
b250ZXh0LmdsVmVydGV4QXR0cmliKGluZHgsIHYwKTsKKyAgICBsZWF2ZShmYWxzZSk7Cit9CisK
K3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbFZlcnRleEF0dHJpYiAodW5zaWduZWQg
bG9uZyBpbmR4LCBmbG9hdCB2MCwgZmxvYXQgdjEpCit7CisgICAgbV9jb250ZXh0LmdsVmVydGV4
QXR0cmliKGluZHgsIHYwLCB2MSk7CisgICAgbGVhdmUoZmFsc2UpOworfQorCit2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQzRDo6Z2xWZXJ0ZXhBdHRyaWIgKHVuc2lnbmVkIGxvbmcgaW5keCwg
ZmxvYXQgdjAsIGZsb2F0IHYxLCBmbG9hdCB2MikKK3sKKyAgICBtX2NvbnRleHQuZ2xWZXJ0ZXhB
dHRyaWIoaW5keCwgdjAsIHYxLCB2Mik7CisgICAgbGVhdmUoZmFsc2UpOworfQorCit2b2lkIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2xWZXJ0ZXhBdHRyaWIgKHVuc2lnbmVkIGxvbmcgaW5k
eCwgZmxvYXQgdjAsIGZsb2F0IHYxLCBmbG9hdCB2MiwgZmxvYXQgdjMpCit7CisgICAgbV9jb250
ZXh0LmdsVmVydGV4QXR0cmliKGluZHgsIHYwLCB2MSwgdjIsIHYzKTsKKyAgICBsZWF2ZShmYWxz
ZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbFZlcnRleEF0dHJpYiAo
dW5zaWduZWQgbG9uZyBpbmR4LCBDYW52YXNOdW1iZXJBcnJheSogYXJyYXkpCit7CisgICAgbV9j
b250ZXh0LmdsVmVydGV4QXR0cmliKGluZHgsIGFycmF5KTsKKyAgICBsZWF2ZShmYWxzZSk7Cit9
CisKKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsVmVydGV4QXR0cmliUG9pbnRl
cih1bnNpZ25lZCBsb25nIGluZHgsIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyB0eXBlLCBib29s
IG5vcm1hbGl6ZWQsIHVuc2lnbmVkIGxvbmcgc3RyaWRlLCBDYW52YXNOdW1iZXJBcnJheSogYXJy
YXkpCit7CisgICAgbV9jb250ZXh0LmdsVmVydGV4QXR0cmliUG9pbnRlcihpbmR4LCBzaXplLCB0
eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIGFycmF5KTsKKyAgICBsZWF2ZShmYWxzZSk7Cit9CisK
K3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbFZpZXdwb3J0KGxvbmcgeCwgbG9uZyB5
LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkKK3sKKyAgICBtX2Nv
bnRleHQuZ2xWaWV3cG9ydCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBsZWF2ZShmYWxzZSk7
Cit9CisKKy8vIE5vbi1HTCBmdW5jdGlvbnMKK1Bhc3NSZWZQdHI8Q2FudmFzQnVmZmVyPiBDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmNyZWF0ZUJ1ZmZlcigpCit7CisgICAgcmV0dXJuIG1fY29u
dGV4dC5jcmVhdGVCdWZmZXIoKTsKK30KKyAgICAgICAgCitQYXNzUmVmUHRyPENhbnZhc0ZyYW1l
YnVmZmVyPiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKK3sK
KyAgICByZXR1cm4gbV9jb250ZXh0LmNyZWF0ZUZyYW1lYnVmZmVyKCk7Cit9CisKK1Bhc3NSZWZQ
dHI8Q2FudmFzVGV4dHVyZT4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpjcmVhdGVUZXh0dXJl
KCkKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0LmNyZWF0ZVRleHR1cmUoKTsKK30KKworUGFzc1Jl
ZlB0cjxDYW52YXNQcm9ncmFtPiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmNyZWF0ZVByb2dy
YW0gKCkKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0LmNyZWF0ZVByb2dyYW0oKTsKK30KKworUGFz
c1JlZlB0cjxDYW52YXNSZW5kZXJidWZmZXI+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Y3Jl
YXRlUmVuZGVyYnVmZmVyKCkKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0LmNyZWF0ZVJlbmRlcmJ1
ZmZlcigpOworfQorCitQYXNzUmVmUHRyPENhbnZhc1NoYWRlcj4gQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDNEOjpjcmVhdGVTaGFkZXIgKHVuc2lnbmVkIGxvbmcgdHlwZSkKK3sKKyAgICByZXR1cm4g
bV9jb250ZXh0LmNyZWF0ZVNoYWRlcih0eXBlKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0M0Q6OmRlbGV0ZUJ1ZmZlciAoQ2FudmFzQnVmZmVyKiBidWZmZXIpCit7CisgICAgbV9j
b250ZXh0LmRlbGV0ZUJ1ZmZlcihidWZmZXIpOworICAgIGxlYXZlKGZhbHNlKTsKK30KKwordm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmRlbGV0ZUZyYW1lYnVmZmVyIChDYW52YXNGcmFt
ZWJ1ZmZlciogZnJhbWVidWZmZXIpCit7CisgICAgbV9jb250ZXh0LmRlbGV0ZUZyYW1lYnVmZmVy
KGZyYW1lYnVmZmVyKTsKKyAgICBsZWF2ZShmYWxzZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDNEOjpkZWxldGVQcm9ncmFtIChDYW52YXNQcm9ncmFtKiBwcm9ncmFtKQorewor
ICAgIG1fY29udGV4dC5kZWxldGVQcm9ncmFtKHByb2dyYW0pOworICAgIGxlYXZlKGZhbHNlKTsK
K30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmRlbGV0ZVJlbmRlcmJ1ZmZlciAo
Q2FudmFzUmVuZGVyYnVmZmVyKiByZW5kZXJidWZmZXIpCit7CisgICAgbV9jb250ZXh0LmRlbGV0
ZVJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpOworICAgIGxlYXZlKGZhbHNlKTsKK30KKwordm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmRlbGV0ZVNoYWRlciAoQ2FudmFzU2hhZGVyKiBz
aGFkZXIpCit7CisgICAgbV9jb250ZXh0LmRlbGV0ZVNoYWRlcihzaGFkZXIpOworICAgIGxlYXZl
KGZhbHNlKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmRlbGV0ZVRleHR1
cmUgKENhbnZhc1RleHR1cmUqIHRleHR1cmUpCit7CisgICAgbV9jb250ZXh0LmRlbGV0ZVRleHR1
cmUodGV4dHVyZSk7CisgICAgbGVhdmUoZmFsc2UpOworfQorCitQYXNzUmVmUHRyPENhbnZhc051
bWJlckFycmF5PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldCh1bnNpZ25lZCBsb25nIHBu
YW1lKQoreworICAgIFJlZlB0cjxDYW52YXNOdW1iZXJBcnJheT4gYXJyYXkgPSBtX2NvbnRleHQu
Z2V0KHBuYW1lKTsKKyAgICBsZWF2ZShmYWxzZSk7CisgICAgcmV0dXJuIGFycmF5OworfQorCitQ
YXNzUmVmUHRyPENhbnZhc051bWJlckFycmF5PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6Omdl
dEJ1ZmZlclBhcmFtZXRlciAodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5h
bWUpCit7CisgICAgUmVmUHRyPENhbnZhc051bWJlckFycmF5PiBhcnJheSA9IG1fY29udGV4dC5n
ZXRCdWZmZXJQYXJhbWV0ZXIodGFyZ2V0LCBwbmFtZSk7CisgICAgbGVhdmUoZmFsc2UpOworICAg
IHJldHVybiBhcnJheTsKK30KKworUGFzc1JlZlB0cjxDYW52YXNOdW1iZXJBcnJheT4gQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDNEOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIgKHVu
c2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVkIGxv
bmcgcG5hbWUpCit7CisgICAgUmVmUHRyPENhbnZhc051bWJlckFycmF5PiBhcnJheSA9IG1fY29u
dGV4dC5nZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIodGFyZ2V0LCBhdHRhY2htZW50
LCBwbmFtZSk7CisgICAgbGVhdmUoZmFsc2UpOworICAgIHJldHVybiBhcnJheTsKK30KKworUGFz
c1JlZlB0cjxDYW52YXNOdW1iZXJBcnJheT4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRQ
cm9ncmFtIChDYW52YXNQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIHBuYW1lKQorewor
ICAgIFJlZlB0cjxDYW52YXNOdW1iZXJBcnJheT4gYXJyYXkgPSBtX2NvbnRleHQuZ2V0UHJvZ3Jh
bShwcm9ncmFtLCBwbmFtZSk7CisgICAgbGVhdmUoZmFsc2UpOworICAgIHJldHVybiBhcnJheTsK
K30KKworU3RyaW5nIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2xHZXRQcm9ncmFtSW5mb0xv
ZyAoQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSkKK3sKKyAgICBTdHJpbmcgcyA9IG1fY29udGV4dC5n
bEdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pOworICAgIGxlYXZlKGZhbHNlKTsKKyAgICByZXR1
cm4gczsKK30KKworUGFzc1JlZlB0cjxDYW52YXNOdW1iZXJBcnJheT4gQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIgKHVuc2lnbmVkIGxvbmcgdGFyZ2V0
LCB1bnNpZ25lZCBsb25nIHBuYW1lKQoreworICAgIFJlZlB0cjxDYW52YXNOdW1iZXJBcnJheT4g
YXJyYXkgPSBtX2NvbnRleHQuZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKHRhcmdldCwgcG5hbWUp
OworICAgIGxlYXZlKGZhbHNlKTsKKyAgICByZXR1cm4gYXJyYXk7Cit9CisKK1Bhc3NSZWZQdHI8
Q2FudmFzTnVtYmVyQXJyYXk+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0U2hhZGVyIChD
YW52YXNTaGFkZXIqIHNoYWRlciwgdW5zaWduZWQgbG9uZyBwbmFtZSkKK3sKKyAgICBSZWZQdHI8
Q2FudmFzTnVtYmVyQXJyYXk+IGFycmF5ID0gbV9jb250ZXh0LmdldFNoYWRlcihzaGFkZXIsIHBu
YW1lKTsKKyAgICBsZWF2ZShmYWxzZSk7CisgICAgcmV0dXJuIGFycmF5OworfQorCitTdHJpbmcg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbEdldFNoYWRlckluZm9Mb2cgKENhbnZhc1NoYWRl
ciogc2hhZGVyKQoreworICAgIFN0cmluZyBzID0gbV9jb250ZXh0LmdsR2V0U2hhZGVySW5mb0xv
ZyhzaGFkZXIpOworICAgIGxlYXZlKGZhbHNlKTsKKyAgICByZXR1cm4gczsKK30KKworU3RyaW5n
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2xHZXRTaGFkZXJTb3VyY2UgKENhbnZhc1NoYWRl
ciogc2hhZGVyKQoreworICAgIFN0cmluZyBzID0gbV9jb250ZXh0LmdsR2V0U2hhZGVyU291cmNl
KHNoYWRlcik7CisgICAgbGVhdmUoZmFsc2UpOworICAgIHJldHVybiBzOworfQorCisKK1Bhc3NS
ZWZQdHI8Q2FudmFzTnVtYmVyQXJyYXk+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0VGV4
UGFyYW1ldGVyICh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSkKK3sK
KyAgICBSZWZQdHI8Q2FudmFzTnVtYmVyQXJyYXk+IGFycmF5ID0gbV9jb250ZXh0LmdldFRleFBh
cmFtZXRlcih0YXJnZXQsIHBuYW1lKTsKKyAgICBsZWF2ZShmYWxzZSk7CisgICAgcmV0dXJuIGFy
cmF5OworfQorCitQYXNzUmVmUHRyPENhbnZhc051bWJlckFycmF5PiBDYW52YXNSZW5kZXJpbmdD
b250ZXh0M0Q6OmdldFVuaWZvcm0gKENhbnZhc1Byb2dyYW0qIHByb2dyYW0sIGxvbmcgbG9jYXRp
b24sIGxvbmcgc2l6ZSkKK3sKKyAgICBSZWZQdHI8Q2FudmFzTnVtYmVyQXJyYXk+IGFycmF5ID0g
bV9jb250ZXh0LmdldFVuaWZvcm0ocHJvZ3JhbSwgbG9jYXRpb24sIHNpemUpOworICAgIGxlYXZl
KGZhbHNlKTsKKyAgICByZXR1cm4gYXJyYXk7Cit9CisKK2xvbmcgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDNEOjpnZXRVbmlmb3JtTG9jYXRpb24gKENhbnZhc1Byb2dyYW0qIHByb2dyYW0sIGNvbnN0
IFN0cmluZyYgbmFtZSkKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0LmdldFVuaWZvcm1Mb2NhdGlv
bihwcm9ncmFtLCBuYW1lKTsKK30KKworUGFzc1JlZlB0cjxDYW52YXNOdW1iZXJBcnJheT4gQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWIgKHVuc2lnbmVkIGxvbmcgaW5k
ZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUpCit7CisgICAgUmVmUHRyPENhbnZhc051bWJlckFycmF5
PiBhcnJheSA9IG1fY29udGV4dC5nZXRWZXJ0ZXhBdHRyaWIoaW5kZXgsIHBuYW1lKTsKKyAgICBs
ZWF2ZShmYWxzZSk7CisgICAgcmV0dXJuIGFycmF5OworfQorCisKK3ZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDNEOjp0ZXhJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWws
IEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICAvLyBG
SVhNRTogRm9yIG5vdyB3ZSBpZ25vcmUgYW55IGVycm9ycyByZXR1cm5lZAorICAgIGVjID0gMDsK
KyAgICBtX2NvbnRleHQudGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbWFnZSk7CisgICAgbGVh
dmUoZmFsc2UpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dGV4SW1hZ2Uy
RCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCBIVE1MQ2FudmFzRWxlbWVudCogY2Fu
dmFzLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBpZ25v
cmUgYW55IGVycm9ycyByZXR1cm5lZAorICAgIGVjID0gMDsKKyAgICBtX2NvbnRleHQudGV4SW1h
Z2UyRCh0YXJnZXQsIGxldmVsLCBjYW52YXMpOworICAgIGxlYXZlKGZhbHNlKTsKK30KKwordm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnRleFN1YkltYWdlMkQodW5zaWduZWQgdGFyZ2V0
LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgeG9mZiwgdW5zaWduZWQgeW9mZiwgdW5zaWduZWQg
d2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgSFRNTEltYWdlRWxlbWVudCogaW1hZ2UsIEV4Y2VwdGlv
bkNvZGUmIGVjKQoreworICAgIC8vIEZJWE1FOiBGb3Igbm93IHdlIGlnbm9yZSBhbnkgZXJyb3Jz
IHJldHVybmVkCisgICAgZWMgPSAwOworICAgIG1fY29udGV4dC50ZXhTdWJJbWFnZTJEKHRhcmdl
dCwgbGV2ZWwsIHhvZmYsIHlvZmYsIHdpZHRoLCBoZWlnaHQsIGltYWdlKTsKKyAgICBsZWF2ZShm
YWxzZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp0ZXhTdWJJbWFnZTJE
KHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIHhvZmYsIHVuc2lnbmVk
IHlvZmYsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIEhUTUxDYW52YXNFbGVtZW50
KiBjYW52YXMsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIC8vIEZJWE1FOiBGb3Igbm93IHdl
IGlnbm9yZSBhbnkgZXJyb3JzIHJldHVybmVkCisgICAgZWMgPSAwOworICAgIG1fY29udGV4dC50
ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmYsIHlvZmYsIHdpZHRoLCBoZWlnaHQsIGNh
bnZhcyk7CisgICAgbGVhdmUoZmFsc2UpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQorCkluZGV4OiBXZWJDb3JlL2h0bWwvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDNELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9odG1sL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIwMiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRF9oCisjZGVmaW5lIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRF9oCisK
KyNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiRXhjZXB0aW9u
Q29kZS5oIgorI2luY2x1ZGUgIkNhbnZhc051bWJlckFycmF5LmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIENhbnZhc0J1ZmZlcjsKK2NsYXNzIENhbnZhc0ZyYW1lYnVmZmVy
OworY2xhc3MgQ2FudmFzT2JqZWN0OworY2xhc3MgQ2FudmFzUHJvZ3JhbTsKK2NsYXNzIENhbnZh
c1JlbmRlcmJ1ZmZlcjsKK2NsYXNzIENhbnZhc1NoYWRlcjsKK2NsYXNzIENhbnZhc1RleHR1cmU7
CitjbGFzcyBIVE1MSW1hZ2VFbGVtZW50OworY2xhc3MgV2ViS2l0Q1NTTWF0cml4OworCisgICAg
Y2xhc3MgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEIDogcHVibGljIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQgeworICAgIHB1YmxpYzoKKyAgICAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKEhU
TUxDYW52YXNFbGVtZW50Kik7CisgICAgICAgIH5DYW52YXNSZW5kZXJpbmdDb250ZXh0M0QoKTsK
KworICAgICAgICB2aXJ0dWFsIGJvb2wgaXMzZCgpIHsgcmV0dXJuIHRydWU7IH0KKworICAgICAg
ICB2b2lkIGdsQWN0aXZlVGV4dHVyZSAodW5zaWduZWQgbG9uZyB0ZXh0dXJlKTsKKyAgICAgICAg
dm9pZCBnbEF0dGFjaFNoYWRlciAoQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSwgQ2FudmFzU2hhZGVy
KiBzaGFkZXIpOworICAgICAgICB2b2lkIGdsQmluZEF0dHJpYkxvY2F0aW9uIChDYW52YXNQcm9n
cmFtKiwgdW5zaWduZWQgbG9uZyBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICAgICAg
dm9pZCBnbEJpbmRCdWZmZXIgKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBDYW52YXNCdWZmZXIqKTsK
KyAgICAgICAgdm9pZCBnbEJpbmRGcmFtZWJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgQ2Fu
dmFzRnJhbWVidWZmZXIqKTsKKyAgICAgICAgdm9pZCBnbEJpbmRSZW5kZXJidWZmZXIgKHVuc2ln
bmVkIGxvbmcgdGFyZ2V0LCBDYW52YXNSZW5kZXJidWZmZXIqKTsKKyAgICAgICAgdm9pZCBnbEJp
bmRUZXh0dXJlKHVuc2lnbmVkIHRhcmdldCwgQ2FudmFzVGV4dHVyZSogdGV4dHVyZTNEKTsKKyAg
ICAgICAgdm9pZCBnbEJsZW5kQ29sb3IgKGRvdWJsZSByZWQsIGRvdWJsZSBncmVlbiwgZG91Ymxl
IGJsdWUsIGRvdWJsZSBhbHBoYSk7CisgICAgICAgIHZvaWQgZ2xCbGVuZEVxdWF0aW9uICggdW5z
aWduZWQgbG9uZyBtb2RlICk7CisgICAgICAgIHZvaWQgZ2xCbGVuZEVxdWF0aW9uU2VwYXJhdGUg
KHVuc2lnbmVkIGxvbmcgbW9kZVJHQiwgdW5zaWduZWQgbG9uZyBtb2RlQWxwaGEpOworICAgICAg
ICB2b2lkIGdsQmxlbmRGdW5jICh1bnNpZ25lZCBsb25nIHNmYWN0b3IsIHVuc2lnbmVkIGxvbmcg
ZGZhY3Rvcik7CisgICAgICAgIHZvaWQgZ2xCbGVuZEZ1bmNTZXBhcmF0ZSAodW5zaWduZWQgbG9u
ZyBzcmNSR0IsIHVuc2lnbmVkIGxvbmcgZHN0UkdCLCB1bnNpZ25lZCBsb25nIHNyY0FscGhhLCB1
bnNpZ25lZCBsb25nIGRzdEFscGhhKTsKKyAgICAgICAgdm9pZCBnbEJ1ZmZlckRhdGEgKHVuc2ln
bmVkIGxvbmcgdGFyZ2V0LCBDYW52YXNOdW1iZXJBcnJheSosIHVuc2lnbmVkIGxvbmcgdXNhZ2Up
OworICAgICAgICB2b2lkIGdsQnVmZmVyU3ViRGF0YSAodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxv
bmcgb2Zmc2V0LCBDYW52YXNOdW1iZXJBcnJheSopOworICAgICAgICB1bnNpZ25lZCBsb25nIGds
Q2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyAoQ2FudmFzRnJhbWVidWZmZXIqKTsKKyAgICAgICAgdm9p
ZCBnbENsZWFyICh1bnNpZ25lZCBsb25nIG1hc2spOworICAgICAgICB2b2lkIGdsQ2xlYXJDb2xv
ciAoZG91YmxlIHJlZCwgZG91YmxlIGdyZWVuLCBkb3VibGUgYmx1ZSwgZG91YmxlIGFscGhhKTsK
KyAgICAgICAgdm9pZCBnbENsZWFyRGVwdGggKGRvdWJsZSBkZXB0aCk7CisgICAgICAgIHZvaWQg
Z2xDbGVhclN0ZW5jaWwgKGxvbmcgcyk7CisgICAgICAgIHZvaWQgZ2xDb2xvck1hc2sgKGJvb2wg
cmVkLCBib29sIGdyZWVuLCBib29sIGJsdWUsIGJvb2wgYWxwaGEpOworICAgICAgICB2b2lkIGds
Q29tcGlsZVNoYWRlciAoQ2FudmFzU2hhZGVyKik7CisgICAgICAgIAorICAgICAgICAvL3ZvaWQg
Z2xDb21wcmVzc2VkVGV4SW1hZ2UyRCAodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgbGV2ZWws
IHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2ln
bmVkIGxvbmcgaGVpZ2h0LCBsb25nIGJvcmRlciwgdW5zaWduZWQgbG9uZyBpbWFnZVNpemUsIGNv
bnN0IHZvaWQqIGRhdGEpOworICAgICAgICAvL3ZvaWQgZ2xDb21wcmVzc2VkVGV4U3ViSW1hZ2Uy
RCAodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgbGV2ZWwsIGxvbmcgeG9mZnNldCwgbG9uZyB5
b2Zmc2V0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCwgdW5zaWdu
ZWQgbG9uZyBmb3JtYXQsIHVuc2lnbmVkIGxvbmcgaW1hZ2VTaXplLCBjb25zdCB2b2lkKiBkYXRh
KTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgZ2xDb3B5VGV4SW1hZ2UyRCAodW5zaWduZWQgbG9u
ZyB0YXJnZXQsIGxvbmcgbGV2ZWwsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIGxvbmcg
eCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCwgbG9u
ZyBib3JkZXIpOworICAgICAgICB2b2lkIGdsQ29weVRleFN1YkltYWdlMkQgKHVuc2lnbmVkIGxv
bmcgdGFyZ2V0LCBsb25nIGxldmVsLCBsb25nIHhvZmZzZXQsIGxvbmcgeW9mZnNldCwgbG9uZyB4
LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KTsKKyAg
ICAgICAgdm9pZCBnbEN1bGxGYWNlICh1bnNpZ25lZCBsb25nIG1vZGUpOworICAgICAgICB2b2lk
IGdsRGVwdGhGdW5jICh1bnNpZ25lZCBsb25nIGZ1bmMpOworICAgICAgICB2b2lkIGdsRGVwdGhN
YXNrIChib29sIGZsYWcpOworICAgICAgICB2b2lkIGdsRGVwdGhSYW5nZSAoZG91YmxlIHpOZWFy
LCBkb3VibGUgekZhcik7CisgICAgICAgIHZvaWQgZ2xEZXRhY2hTaGFkZXIgKENhbnZhc1Byb2dy
YW0qLCBDYW52YXNTaGFkZXIqKTsKKyAgICAgICAgdm9pZCBnbERpc2FibGUgKHVuc2lnbmVkIGxv
bmcgY2FwKTsKKyAgICAgICAgdm9pZCBnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSAodW5zaWdu
ZWQgbG9uZyBpbmRleCk7CisgICAgICAgIHZvaWQgZ2xEcmF3QXJyYXlzICh1bnNpZ25lZCBsb25n
IG1vZGUsIGxvbmcgZmlyc3QsIHVuc2lnbmVkIGxvbmcgY291bnQpOworICAgICAgICB2b2lkIGds
RHJhd0VsZW1lbnRzKHVuc2lnbmVkIGxvbmcgbW9kZSwgdW5zaWduZWQgbG9uZyBjb3VudCwgdW5z
aWduZWQgbG9uZyB0eXBlLCB2b2lkKiBhcnJheSk7CisgICAgICAgIHZvaWQgZ2xFbmFibGUgKHVu
c2lnbmVkIGxvbmcgY2FwKTsKKyAgICAgICAgdm9pZCBnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5
ICh1bnNpZ25lZCBsb25nIGluZGV4KTsKKyAgICAgICAgdm9pZCBnbEZpbmlzaCAoKTsKKyAgICAg
ICAgdm9pZCBnbEZsdXNoICgpOworICAgICAgICB2b2lkIGdsRnJhbWVidWZmZXJSZW5kZXJidWZm
ZXIgKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2ln
bmVkIGxvbmcgcmVuZGVyYnVmZmVydGFyZ2V0LCBDYW52YXNSZW5kZXJidWZmZXIqKTsKKyAgICAg
ICAgdm9pZCBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEICh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5z
aWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHRleHRhcmdldCwgQ2FudmFzVGV4
dHVyZSosIGxvbmcgbGV2ZWwpOworICAgICAgICB2b2lkIGdsRnJvbnRGYWNlICh1bnNpZ25lZCBs
b25nIG1vZGUpOworICAgICAgICB2b2lkIGdsR2VuZXJhdGVNaXBtYXAgKHVuc2lnbmVkIGxvbmcg
dGFyZ2V0KTsKKyAgICAgICAgCisgICAgICAgIGludCAgZ2xHZXRBdHRyaWJMb2NhdGlvbiAoQ2Fu
dmFzUHJvZ3JhbSosIGNvbnN0IFN0cmluZyYgbmFtZSk7CisgICAgICAgIHVuc2lnbmVkIGxvbmcg
Z2xHZXRFcnJvciAoKTsKKyAgICAgICAgU3RyaW5nIGdsR2V0U3RyaW5nICh1bnNpZ25lZCBsb25n
IG5hbWUpOworICAgICAgICB2b2lkIGdsSGludCAodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2ln
bmVkIGxvbmcgbW9kZSk7CisgICAgICAgIGJvb2wgZ2xJc0J1ZmZlciAoQ2FudmFzQnVmZmVyKik7
CisgICAgICAgIGJvb2wgZ2xJc0VuYWJsZWQgKHVuc2lnbmVkIGxvbmcgY2FwKTsKKyAgICAgICAg
Ym9vbCBnbElzRnJhbWVidWZmZXIgKENhbnZhc0ZyYW1lYnVmZmVyKik7CisgICAgICAgIGJvb2wg
Z2xJc1Byb2dyYW0gKENhbnZhc1Byb2dyYW0qKTsKKyAgICAgICAgYm9vbCBnbElzUmVuZGVyYnVm
ZmVyIChDYW52YXNSZW5kZXJidWZmZXIqKTsKKyAgICAgICAgYm9vbCBnbElzU2hhZGVyIChDYW52
YXNTaGFkZXIqKTsKKyAgICAgICAgYm9vbCBnbElzVGV4dHVyZSAoQ2FudmFzVGV4dHVyZSopOwor
ICAgICAgICB2b2lkIGdsTGluZVdpZHRoIChkb3VibGUgd2lkdGgpOworICAgICAgICB2b2lkIGds
TGlua1Byb2dyYW0gKENhbnZhc1Byb2dyYW0qKTsKKyAgICAgICAgdm9pZCBnbFBpeGVsU3RvcmVp
ICh1bnNpZ25lZCBsb25nIHBuYW1lLCBsb25nIHBhcmFtKTsKKyAgICAgICAgdm9pZCBnbFBvbHln
b25PZmZzZXQgKGRvdWJsZSBmYWN0b3IsIGRvdWJsZSB1bml0cyk7CisgICAgICAgIAorICAgICAg
ICAvL3ZvaWQgZ2xSZWFkUGl4ZWxzIChsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0
aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQsIHVuc2lnbmVkIGxvbmcgZm9ybWF0LCB1bnNpZ25lZCBs
b25nIHR5cGUsIHZvaWQqIHBpeGVscyk7CisgICAgICAgIAorICAgICAgICB2b2lkIGdsUmVsZWFz
ZVNoYWRlckNvbXBpbGVyICgpOworICAgICAgICB2b2lkIGdsUmVuZGVyYnVmZmVyU3RvcmFnZSAo
dW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIHVuc2ln
bmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KTsKKyAgICAgICAgdm9pZCBnbFNh
bXBsZUNvdmVyYWdlIChkb3VibGUgdmFsdWUsIGJvb2wgaW52ZXJ0KTsKKyAgICAgICAgdm9pZCBn
bFNjaXNzb3IgKGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBs
b25nIGhlaWdodCk7CisgICAgICAgIHZvaWQgZ2xTaGFkZXJTb3VyY2UgKENhbnZhc1NoYWRlcios
IGNvbnN0IFN0cmluZyYgc3RyaW5nKTsKKyAgICAgICAgdm9pZCBnbFN0ZW5jaWxGdW5jICh1bnNp
Z25lZCBsb25nIGZ1bmMsIGxvbmcgcmVmLCB1bnNpZ25lZCBsb25nIG1hc2spOworICAgICAgICB2
b2lkIGdsU3RlbmNpbEZ1bmNTZXBhcmF0ZSAodW5zaWduZWQgbG9uZyBmYWNlLCB1bnNpZ25lZCBs
b25nIGZ1bmMsIGxvbmcgcmVmLCB1bnNpZ25lZCBsb25nIG1hc2spOworICAgICAgICB2b2lkIGds
U3RlbmNpbE1hc2sgKHVuc2lnbmVkIGxvbmcgbWFzayk7CisgICAgICAgIHZvaWQgZ2xTdGVuY2ls
TWFza1NlcGFyYXRlICh1bnNpZ25lZCBsb25nIGZhY2UsIHVuc2lnbmVkIGxvbmcgbWFzayk7Cisg
ICAgICAgIHZvaWQgZ2xTdGVuY2lsT3AgKHVuc2lnbmVkIGxvbmcgZmFpbCwgdW5zaWduZWQgbG9u
ZyB6ZmFpbCwgdW5zaWduZWQgbG9uZyB6cGFzcyk7CisgICAgICAgIHZvaWQgZ2xTdGVuY2lsT3BT
ZXBhcmF0ZSAodW5zaWduZWQgbG9uZyBmYWNlLCB1bnNpZ25lZCBsb25nIGZhaWwsIHVuc2lnbmVk
IGxvbmcgemZhaWwsIHVuc2lnbmVkIGxvbmcgenBhc3MpOworICAgICAgICB2b2lkIGdsVGV4UGFy
YW1ldGVyKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgcG5hbWUsIENhbnZhc051bWJlckFycmF5
Kik7CisgICAgICAgIHZvaWQgZ2xUZXhQYXJhbWV0ZXIodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25l
ZCBwbmFtZSwgZG91YmxlIHZhbHVlKTsKKyAgICAgICAgdm9pZCBnbFVuaWZvcm0obG9uZyBsb2Nh
dGlvbiwgZmxvYXQgdjApOworICAgICAgICB2b2lkIGdsVW5pZm9ybShsb25nIGxvY2F0aW9uLCBm
bG9hdCB2MCwgZmxvYXQgdjEpOworICAgICAgICB2b2lkIGdsVW5pZm9ybShsb25nIGxvY2F0aW9u
LCBmbG9hdCB2MCwgZmxvYXQgdjEsIGZsb2F0IHYyKTsKKyAgICAgICAgdm9pZCBnbFVuaWZvcm0o
bG9uZyBsb2NhdGlvbiwgZmxvYXQgdjAsIGZsb2F0IHYxLCBmbG9hdCB2MiwgZmxvYXQgdjMpOwor
ICAgICAgICB2b2lkIGdsVW5pZm9ybShsb25nIGxvY2F0aW9uLCBpbnQgdjApOworICAgICAgICB2
b2lkIGdsVW5pZm9ybShsb25nIGxvY2F0aW9uLCBpbnQgdjAsIGludCB2MSk7CisgICAgICAgIHZv
aWQgZ2xVbmlmb3JtKGxvbmcgbG9jYXRpb24sIGludCB2MCwgaW50IHYxLCBpbnQgdjIpOworICAg
ICAgICB2b2lkIGdsVW5pZm9ybShsb25nIGxvY2F0aW9uLCBpbnQgdjAsIGludCB2MSwgaW50IHYy
LCBpbnQgdjMpOworICAgICAgICB2b2lkIGdsVW5pZm9ybShsb25nIGxvY2F0aW9uLCBDYW52YXNO
dW1iZXJBcnJheSopOworICAgICAgICB2b2lkIGdsVW5pZm9ybU1hdHJpeChsb25nIGxvY2F0aW9u
LCBsb25nIGNvdW50LCBib29sIHRyYW5zcG9zZSwgQ2FudmFzTnVtYmVyQXJyYXkqKTsKKyAgICAg
ICAgdm9pZCBnbFVuaWZvcm1NYXRyaXgobG9uZyBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIGNv
bnN0IFZlY3RvcjxXZWJLaXRDU1NNYXRyaXgqPiYpOworICAgICAgICB2b2lkIGdsVW5pZm9ybU1h
dHJpeChsb25nIGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgY29uc3QgV2ViS2l0Q1NTTWF0cml4
Kik7CisgICAgICAgIHZvaWQgZ2xVc2VQcm9ncmFtIChDYW52YXNQcm9ncmFtKik7CisgICAgICAg
IHZvaWQgZ2xWYWxpZGF0ZVByb2dyYW0gKENhbnZhc1Byb2dyYW0qKTsKKyAgICAgICAgdm9pZCBn
bFZlcnRleEF0dHJpYiAodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCB2MCk7CisgICAgICAgIHZv
aWQgZ2xWZXJ0ZXhBdHRyaWIgKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgdjAsIGZsb2F0IHYx
KTsKKyAgICAgICAgdm9pZCBnbFZlcnRleEF0dHJpYiAodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9h
dCB2MCwgZmxvYXQgdjEsIGZsb2F0IHYyKTsKKyAgICAgICAgdm9pZCBnbFZlcnRleEF0dHJpYiAo
dW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCB2MCwgZmxvYXQgdjEsIGZsb2F0IHYyLCBmbG9hdCB2
Myk7CisgICAgICAgIHZvaWQgZ2xWZXJ0ZXhBdHRyaWIgKHVuc2lnbmVkIGxvbmcgaW5keCwgQ2Fu
dmFzTnVtYmVyQXJyYXkqKTsKKyAgICAgICAgdm9pZCBnbFZlcnRleEF0dHJpYlBvaW50ZXIgKHVu
c2lnbmVkIGxvbmcgaW5keCwgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIHR5cGUsIGJvb2wgbm9y
bWFsaXplZCwgdW5zaWduZWQgbG9uZyBzdHJpZGUsIENhbnZhc051bWJlckFycmF5Kik7CisgICAg
ICAgIHZvaWQgZ2xWaWV3cG9ydCAobG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgs
IHVuc2lnbmVkIGxvbmcgaGVpZ2h0KTsKKworICAgICAgICAvLyBOb24tR0wgZnVuY3Rpb25zCisg
ICAgICAgIFBhc3NSZWZQdHI8Q2FudmFzQnVmZmVyPiBjcmVhdGVCdWZmZXIoKTsKKyAgICAgICAg
UGFzc1JlZlB0cjxDYW52YXNGcmFtZWJ1ZmZlcj4gY3JlYXRlRnJhbWVidWZmZXIoKTsKKyAgICAg
ICAgUGFzc1JlZlB0cjxDYW52YXNQcm9ncmFtPiBjcmVhdGVQcm9ncmFtICgpOyAgICAgICAgICAg
ICAgICAgICAgIC8vIHJlcGxhY2VzIGdsQ3JlYXRlUHJvZ3JhbQorICAgICAgICBQYXNzUmVmUHRy
PENhbnZhc1JlbmRlcmJ1ZmZlcj4gY3JlYXRlUmVuZGVyYnVmZmVyKCk7CisgICAgICAgIFBhc3NS
ZWZQdHI8Q2FudmFzU2hhZGVyPiBjcmVhdGVTaGFkZXIgKHVuc2lnbmVkIGxvbmcgdHlwZSk7ICAv
LyByZXBsYWNlcyBnbENyZWF0ZVNoYWRlcgorICAgICAgICBQYXNzUmVmUHRyPENhbnZhc1RleHR1
cmU+IGNyZWF0ZVRleHR1cmUoKTsKKworICAgICAgICB2b2lkIGRlbGV0ZUJ1ZmZlciAoQ2FudmFz
QnVmZmVyKik7ICAgICAgICAgICAgICAgIC8vIHJlcGxhY2VzIGdsRGVsZXRlQnVmZmVycworICAg
ICAgICB2b2lkIGRlbGV0ZUZyYW1lYnVmZmVyIChDYW52YXNGcmFtZWJ1ZmZlciopOyAgICAgIC8v
IHJlcGxhY2VzIGdsRGVsZXRlRnJhbWVidWZmZXJzCisgICAgICAgIHZvaWQgZGVsZXRlUHJvZ3Jh
bSAoQ2FudmFzUHJvZ3JhbSopOyAgICAgICAgICAgICAgLy8gcmVwbGFjZXMgZ2xEZWxldGVQcm9n
cmFtCisgICAgICAgIHZvaWQgZGVsZXRlUmVuZGVyYnVmZmVyIChDYW52YXNSZW5kZXJidWZmZXIq
KTsgICAgLy8gcmVwbGFjZXMgZ2xEZWxldGVSZW5kZXJidWZmZXJzCisgICAgICAgIHZvaWQgZGVs
ZXRlU2hhZGVyIChDYW52YXNTaGFkZXIqKTsgICAgICAgICAgICAgICAgLy8gcmVwbGFjZXMgZ2xE
ZWxldGVTaGFkZXIKKyAgICAgICAgdm9pZCBkZWxldGVUZXh0dXJlIChDYW52YXNUZXh0dXJlKik7
ICAgICAgICAgICAgICAvLyByZXBsYWNlcyBnbERlbGV0ZVRleHR1cmVzCisgICAgICAgIAorICAg
ICAgICBQYXNzUmVmUHRyPENhbnZhc051bWJlckFycmF5PiBnZXQodW5zaWduZWQgbG9uZyBwbmFt
ZSk7ICAgICAgLy8gcmVwbGFjZXMgZ2xHZXRCb29sZWFudgorICAgICAgICBQYXNzUmVmUHRyPENh
bnZhc051bWJlckFycmF5PiBnZXRCdWZmZXJQYXJhbWV0ZXIgKHVuc2lnbmVkIGxvbmcgdGFyZ2V0
LCB1bnNpZ25lZCBsb25nIHBuYW1lKTsgLy8gcmVwbGFjZXMgZ2xHZXRCdWZmZXJQYXJhbWV0ZXJp
dgorICAgICAgICBQYXNzUmVmUHRyPENhbnZhc051bWJlckFycmF5PiBnZXRGcmFtZWJ1ZmZlckF0
dGFjaG1lbnRQYXJhbWV0ZXIgKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0
dGFjaG1lbnQsIHVuc2lnbmVkIGxvbmcgcG5hbWUpOyAvLyByZXBsYWNlcyBnbEdldEZyYW1lYnVm
ZmVyQXR0YWNobWVudFBhcmFtZXRlcml2CisgICAgICAgIFBhc3NSZWZQdHI8Q2FudmFzTnVtYmVy
QXJyYXk+IGdldFByb2dyYW0gKENhbnZhc1Byb2dyYW0qLCB1bnNpZ25lZCBsb25nIHBuYW1lKTsg
Ly8gcmVwbGFjZXMgZ2xHZXRQcm9ncmFtaXYKKyAgICAgICAgU3RyaW5nIGdsR2V0UHJvZ3JhbUlu
Zm9Mb2cgKENhbnZhc1Byb2dyYW0qKTsgLy8gcmVwbGFjZXMgZ2xHZXRQcm9ncmFtSW5mb0xvZwor
ICAgICAgICBQYXNzUmVmUHRyPENhbnZhc051bWJlckFycmF5PiBnZXRSZW5kZXJidWZmZXJQYXJh
bWV0ZXIgKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lKTsgLy8gcmVw
bGFjZXMgZ2xHZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdgorICAgICAgICBQYXNzUmVmUHRyPENh
bnZhc051bWJlckFycmF5PiBnZXRTaGFkZXIgKENhbnZhc1NoYWRlciosIHVuc2lnbmVkIGxvbmcg
cG5hbWUpOyAvLyByZXBsYWNlcyBnbEdldFNoYWRlcml2CisgICAgICAgIFN0cmluZyBnbEdldFNo
YWRlckluZm9Mb2cgKENhbnZhc1NoYWRlciopOworICAgICAgICBTdHJpbmcgZ2xHZXRTaGFkZXJT
b3VyY2UgKENhbnZhc1NoYWRlciopOworCisgICAgICAgIFBhc3NSZWZQdHI8Q2FudmFzTnVtYmVy
QXJyYXk+IGdldFRleFBhcmFtZXRlciAodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxv
bmcgcG5hbWUpOyAvLyByZXBsYWNlcyBnbEdldFRleFBhcmFtZXRlcmZ2CisgICAgICAgIFBhc3NS
ZWZQdHI8Q2FudmFzTnVtYmVyQXJyYXk+IGdldFVuaWZvcm0gKENhbnZhc1Byb2dyYW0qLCBsb25n
IGxvY2F0aW9uLCBsb25nIHNpemUpOyAvLyByZXBsYWNlcyBnbEdldFVuaWZvcm1mdgorICAgICAg
ICBsb25nIGdldFVuaWZvcm1Mb2NhdGlvbiAoQ2FudmFzUHJvZ3JhbSosIGNvbnN0IFN0cmluZyYg
bmFtZSk7IC8vIHJlcGxhY2VzIGdsR2V0VW5pZm9ybUxvY2F0aW9uCisgICAgICAgIFBhc3NSZWZQ
dHI8Q2FudmFzTnVtYmVyQXJyYXk+IGdldFZlcnRleEF0dHJpYiAodW5zaWduZWQgbG9uZyBpbmRl
eCwgdW5zaWduZWQgbG9uZyBwbmFtZSk7IC8vIHJlcGxhY2VzIGdsR2V0VmVydGV4QXR0cmliZnYK
KyAgICAgICAgCisgICAgICAgIHZvaWQgdGV4SW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2ln
bmVkIGxldmVsLCBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZSwgRXhjZXB0aW9uQ29kZSYpOworICAg
ICAgICB2b2lkIHRleEltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgSFRN
TENhbnZhc0VsZW1lbnQqIGNhbnZhcywgRXhjZXB0aW9uQ29kZSYpOworICAgICAgICB2b2lkIHRl
eFN1YkltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgeG9m
ZiwgdW5zaWduZWQgeW9mZiwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgSFRNTElt
YWdlRWxlbWVudCogaW1hZ2UsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgdm9pZCB0ZXhTdWJJ
bWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIHhvZmYsIHVu
c2lnbmVkIHlvZmYsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIEhUTUxDYW52YXNF
bGVtZW50KiBjYW52YXMsIEV4Y2VwdGlvbkNvZGUmKTsKKworICAgICAgICBQbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dDNEIGNvbnRleHQzRCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dC5jb250ZXh0
M0QoKTsgfQorICAgICAgICBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUzRCgpIGNvbnN0IHsgcmV0
dXJuIG1fY29udGV4dC50ZXh0dXJlM0QoKTsgfQorICAgIAorICAgICAgICB2b2lkIHJlc2hhcGUo
aW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAg
dm9pZCB1cGRhdGVDb250ZXh0KCk7CisgICAgICAgIAorICAgICAgICBHcmFwaGljc0NvbnRleHQz
RCBtX2NvbnRleHQ7CisgICAgICAgIAorICAgICAgICBib29sIG1fbmVlZHNVcGRhdGU7CisgICAg
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvaHRt
bC9DYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRt
bC9DYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuaWRsCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9o
dG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5pZGwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NTk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKK21v
ZHVsZSBodG1sIHsKKworICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPTNEX0NB
TlZBUywKKyAgICAgICAgR2VuZXJhdGVDb25zdHJ1Y3RvciwKKyAgICAgICAgSW50ZXJmYWNlVVVJ
RD05OGZiNDhhZS03MjE2LTQ4OWMtODYyYi04ZTEyMTdmYzQ0NDMsCisgICAgICAgIEltcGxlbWVu
dGF0aW9uVVVJRD1hYjRmMDc4MS0xNTJmLTQ1MGUtOTU0Ni01YjM5ODc0OTFhNTQKKyAgICBdIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQzRCB7CisKKyAgICAgICAgLyogQ2xlYXJCdWZmZXJNYXNrICov
CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9ERVBUSF9CVUZGRVJfQklUICAgICAgICAg
ICAgICAgPSAweDAwMDAwMTAwOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfU1RFTkNJ
TF9CVUZGRVJfQklUICAgICAgICAgICAgID0gMHgwMDAwMDQwMDsKKyAgICAgICAgY29uc3QgdW5z
aWduZWQgaW50IEdMX0NPTE9SX0JVRkZFUl9CSVQgICAgICAgICAgICAgICA9IDB4MDAwMDQwMDA7
CisKKyAgICAgICAgLyogQm9vbGVhbiAqLworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xf
RkFMU0UgICAgICAgICAgICAgICAgICAgICAgICAgID0gMDsKKyAgICAgICAgY29uc3QgdW5zaWdu
ZWQgaW50IEdMX1RSVUUgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDE7CisKKyAgICAgICAg
LyogQmVnaW5Nb2RlICovCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9QT0lOVFMgICAg
ICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDA7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGlu
dCBHTF9MSU5FUyAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDE7CisgICAgICAgIGNv
bnN0IHVuc2lnbmVkIGludCBHTF9MSU5FX0xPT1AgICAgICAgICAgICAgICAgICAgICAgPSAweDAw
MDI7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9MSU5FX1NUUklQICAgICAgICAgICAg
ICAgICAgICAgPSAweDAwMDM7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9UUklBTkdM
RVMgICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDQ7CisgICAgICAgIGNvbnN0IHVuc2lnbmVk
IGludCBHTF9UUklBTkdMRV9TVFJJUCAgICAgICAgICAgICAgICAgPSAweDAwMDU7CisgICAgICAg
IGNvbnN0IHVuc2lnbmVkIGludCBHTF9UUklBTkdMRV9GQU4gICAgICAgICAgICAgICAgICAgPSAw
eDAwMDY7CisKKyAgICAgICAgLyogQWxwaGFGdW5jdGlvbiAobm90IHN1cHBvcnRlZCBpbiBFUzIw
KSAqLworICAgICAgICAvKiAgICAgIEdMX05FVkVSICovCisgICAgICAgIC8qICAgICAgR0xfTEVT
UyAqLworICAgICAgICAvKiAgICAgIEdMX0VRVUFMICovCisgICAgICAgIC8qICAgICAgR0xfTEVR
VUFMICovCisgICAgICAgIC8qICAgICAgR0xfR1JFQVRFUiAqLworICAgICAgICAvKiAgICAgIEdM
X05PVEVRVUFMICovCisgICAgICAgIC8qICAgICAgR0xfR0VRVUFMICovCisgICAgICAgIC8qICAg
ICAgR0xfQUxXQVlTICovCisKKyAgICAgICAgLyogQmxlbmRpbmdGYWN0b3JEZXN0ICovCisgICAg
ICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9aRVJPICAgICAgICAgICAgICAgICAgICAgICAgICAg
PSAwOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfT05FICAgICAgICAgICAgICAgICAg
ICAgICAgICAgID0gMTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX1NSQ19DT0xPUiAg
ICAgICAgICAgICAgICAgICAgICA9IDB4MDMwMDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50
IEdMX09ORV9NSU5VU19TUkNfQ09MT1IgICAgICAgICAgICA9IDB4MDMwMTsKKyAgICAgICAgY29u
c3QgdW5zaWduZWQgaW50IEdMX1NSQ19BTFBIQSAgICAgICAgICAgICAgICAgICAgICA9IDB4MDMw
MjsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX09ORV9NSU5VU19TUkNfQUxQSEEgICAg
ICAgICAgICA9IDB4MDMwMzsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0RTVF9BTFBI
QSAgICAgICAgICAgICAgICAgICAgICA9IDB4MDMwNDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQg
aW50IEdMX09ORV9NSU5VU19EU1RfQUxQSEEgICAgICAgICAgICA9IDB4MDMwNTsKKworICAgICAg
ICAvKiBCbGVuZGluZ0ZhY3RvclNyYyAqLworICAgICAgICAvKiAgICAgIEdMX1pFUk8gKi8KKyAg
ICAgICAgLyogICAgICBHTF9PTkUgKi8KKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0RT
VF9DT0xPUiAgICAgICAgICAgICAgICAgICAgICA9IDB4MDMwNjsKKyAgICAgICAgY29uc3QgdW5z
aWduZWQgaW50IEdMX09ORV9NSU5VU19EU1RfQ09MT1IgICAgICAgICAgICA9IDB4MDMwNzsKKyAg
ICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX1NSQ19BTFBIQV9TQVRVUkFURSAgICAgICAgICAg
ICA9IDB4MDMwODsKKyAgICAgICAgLyogICAgICBHTF9TUkNfQUxQSEEgKi8KKyAgICAgICAgLyog
ICAgICBHTF9PTkVfTUlOVVNfU1JDX0FMUEhBICovCisgICAgICAgIC8qICAgICAgR0xfRFNUX0FM
UEhBICovCisgICAgICAgIC8qICAgICAgR0xfT05FX01JTlVTX0RTVF9BTFBIQSAqLworCisgICAg
ICAgIC8qIEJsZW5kRXF1YXRpb25TZXBhcmF0ZSAqLworICAgICAgICBjb25zdCB1bnNpZ25lZCBp
bnQgR0xfRlVOQ19BREQgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MDA2OworICAgICAgICBj
b25zdCB1bnNpZ25lZCBpbnQgR0xfQkxFTkRfRVFVQVRJT04gICAgICAgICAgICAgICAgID0gMHg4
MDA5OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfQkxFTkRfRVFVQVRJT05fUkdCICAg
ICAgICAgICAgID0gMHg4MDA5OyAgIC8qIHNhbWUgYXMgQkxFTkRfRVFVQVRJT04gKi8KKyAgICAg
ICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0JMRU5EX0VRVUFUSU9OX0FMUEhBICAgICAgICAgICA9
IDB4ODgzRDsKKworICAgICAgICAvKiBCbGVuZFN1YnRyYWN0ICovCisgICAgICAgIGNvbnN0IHVu
c2lnbmVkIGludCBHTF9GVU5DX1NVQlRSQUNUICAgICAgICAgICAgICAgICAgPSAweDgwMEE7Cisg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9GVU5DX1JFVkVSU0VfU1VCVFJBQ1QgICAgICAg
ICAgPSAweDgwMEI7CisKKyAgICAgICAgLyogU2VwYXJhdGUgQmxlbmQgRnVuY3Rpb25zICovCisg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9CTEVORF9EU1RfUkdCICAgICAgICAgICAgICAg
ICAgPSAweDgwQzg7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9CTEVORF9TUkNfUkdC
ICAgICAgICAgICAgICAgICAgPSAweDgwQzk7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBH
TF9CTEVORF9EU1RfQUxQSEEgICAgICAgICAgICAgICAgPSAweDgwQ0E7CisgICAgICAgIGNvbnN0
IHVuc2lnbmVkIGludCBHTF9CTEVORF9TUkNfQUxQSEEgICAgICAgICAgICAgICAgPSAweDgwQ0I7
CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9DT05TVEFOVF9DT0xPUiAgICAgICAgICAg
ICAgICAgPSAweDgwMDE7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9PTkVfTUlOVVNf
Q09OU1RBTlRfQ09MT1IgICAgICAgPSAweDgwMDI7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGlu
dCBHTF9DT05TVEFOVF9BTFBIQSAgICAgICAgICAgICAgICAgPSAweDgwMDM7CisgICAgICAgIGNv
bnN0IHVuc2lnbmVkIGludCBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEgICAgICAgPSAweDgw
MDQ7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9CTEVORF9DT0xPUiAgICAgICAgICAg
ICAgICAgICAgPSAweDgwMDU7CisKKyAgICAgICAgLyogQnVmZmVyIE9iamVjdHMgKi8KKyAgICAg
ICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0FSUkFZX0JVRkZFUiAgICAgICAgICAgICAgICAgICA9
IDB4ODg5MjsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0VMRU1FTlRfQVJSQVlfQlVG
RkVSICAgICAgICAgICA9IDB4ODg5MzsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0FS
UkFZX0JVRkZFUl9CSU5ESU5HICAgICAgICAgICA9IDB4ODg5NDsKKyAgICAgICAgY29uc3QgdW5z
aWduZWQgaW50IEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkcgICA9IDB4ODg5NTsKKwor
ICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfU1RSRUFNX0RSQVcgICAgICAgICAgICAgICAg
ICAgID0gMHg4OEUwOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfU1RBVElDX0RSQVcg
ICAgICAgICAgICAgICAgICAgID0gMHg4OEU0OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQg
R0xfRFlOQU1JQ19EUkFXICAgICAgICAgICAgICAgICAgID0gMHg4OEU4OworCisgICAgICAgIGNv
bnN0IHVuc2lnbmVkIGludCBHTF9CVUZGRVJfU0laRSAgICAgICAgICAgICAgICAgICAgPSAweDg3
NjQ7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9CVUZGRVJfVVNBR0UgICAgICAgICAg
ICAgICAgICAgPSAweDg3NjU7CisKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0NVUlJF
TlRfVkVSVEVYX0FUVFJJQiAgICAgICAgICA9IDB4ODYyNjsKKworICAgICAgICAvKiBDdWxsRmFj
ZU1vZGUgKi8KKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0ZST05UICAgICAgICAgICAg
ICAgICAgICAgICAgICA9IDB4MDQwNDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0JB
Q0sgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDQwNTsKKyAgICAgICAgY29uc3QgdW5z
aWduZWQgaW50IEdMX0ZST05UX0FORF9CQUNLICAgICAgICAgICAgICAgICA9IDB4MDQwODsKKwor
ICAgICAgICAvKiBEZXB0aEZ1bmN0aW9uICovCisgICAgICAgIC8qICAgICAgR0xfTkVWRVIgKi8K
KyAgICAgICAgLyogICAgICBHTF9MRVNTICovCisgICAgICAgIC8qICAgICAgR0xfRVFVQUwgKi8K
KyAgICAgICAgLyogICAgICBHTF9MRVFVQUwgKi8KKyAgICAgICAgLyogICAgICBHTF9HUkVBVEVS
ICovCisgICAgICAgIC8qICAgICAgR0xfTk9URVFVQUwgKi8KKyAgICAgICAgLyogICAgICBHTF9H
RVFVQUwgKi8KKyAgICAgICAgLyogICAgICBHTF9BTFdBWVMgKi8KKworICAgICAgICAvKiBFbmFi
bGVDYXAgKi8KKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX1RFWFRVUkVfMkQgICAgICAg
ICAgICAgICAgICAgICA9IDB4MERFMTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0NV
TExfRkFDRSAgICAgICAgICAgICAgICAgICAgICA9IDB4MEI0NDsKKyAgICAgICAgY29uc3QgdW5z
aWduZWQgaW50IEdMX0JMRU5EICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MEJFMjsKKyAg
ICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0RJVEhFUiAgICAgICAgICAgICAgICAgICAgICAg
ICA9IDB4MEJEMDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX1NURU5DSUxfVEVTVCAg
ICAgICAgICAgICAgICAgICA9IDB4MEI5MDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdM
X0RFUFRIX1RFU1QgICAgICAgICAgICAgICAgICAgICA9IDB4MEI3MTsKKyAgICAgICAgY29uc3Qg
dW5zaWduZWQgaW50IEdMX1NDSVNTT1JfVEVTVCAgICAgICAgICAgICAgICAgICA9IDB4MEMxMTsK
KyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEwgICAgICAg
ICAgICA9IDB4ODAzNzsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX1NBTVBMRV9BTFBI
QV9UT19DT1ZFUkFHRSAgICAgICA9IDB4ODA5RTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50
IEdMX1NBTVBMRV9DT1ZFUkFHRSAgICAgICAgICAgICAgICA9IDB4ODBBMDsKKworICAgICAgICAv
KiBFcnJvckNvZGUgKi8KKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX05PX0VSUk9SICAg
ICAgICAgICAgICAgICAgICAgICA9IDA7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9J
TlZBTElEX0VOVU0gICAgICAgICAgICAgICAgICAgPSAweDA1MDA7CisgICAgICAgIGNvbnN0IHVu
c2lnbmVkIGludCBHTF9JTlZBTElEX1ZBTFVFICAgICAgICAgICAgICAgICAgPSAweDA1MDE7Cisg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9JTlZBTElEX09QRVJBVElPTiAgICAgICAgICAg
ICAgPSAweDA1MDI7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9PVVRfT0ZfTUVNT1JZ
ICAgICAgICAgICAgICAgICAgPSAweDA1MDU7CisKKyAgICAgICAgLyogRnJvbnRGYWNlRGlyZWN0
aW9uICovCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9DVyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPSAweDA5MDA7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9DQ1cg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDA5MDE7CisKKyAgICAgICAgLyogR2V0UE5h
bWUgKi8KKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0xJTkVfV0lEVEggICAgICAgICAg
ICAgICAgICAgICA9IDB4MEIyMTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0FMSUFT
RURfUE9JTlRfU0laRV9SQU5HRSAgICAgICA9IDB4ODQ2RDsKKyAgICAgICAgY29uc3QgdW5zaWdu
ZWQgaW50IEdMX0FMSUFTRURfTElORV9XSURUSF9SQU5HRSAgICAgICA9IDB4ODQ2RTsKKyAgICAg
ICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0NVTExfRkFDRV9NT0RFICAgICAgICAgICAgICAgICA9
IDB4MEI0NTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0ZST05UX0ZBQ0UgICAgICAg
ICAgICAgICAgICAgICA9IDB4MEI0NjsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0RF
UFRIX1JBTkdFICAgICAgICAgICAgICAgICAgICA9IDB4MEI3MDsKKyAgICAgICAgY29uc3QgdW5z
aWduZWQgaW50IEdMX0RFUFRIX1dSSVRFTUFTSyAgICAgICAgICAgICAgICA9IDB4MEI3MjsKKyAg
ICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0RFUFRIX0NMRUFSX1ZBTFVFICAgICAgICAgICAg
ICA9IDB4MEI3MzsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0RFUFRIX0ZVTkMgICAg
ICAgICAgICAgICAgICAgICA9IDB4MEI3NDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdM
X1NURU5DSUxfQ0xFQVJfVkFMVUUgICAgICAgICAgICA9IDB4MEI5MTsKKyAgICAgICAgY29uc3Qg
dW5zaWduZWQgaW50IEdMX1NURU5DSUxfRlVOQyAgICAgICAgICAgICAgICAgICA9IDB4MEI5MjsK
KyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX1NURU5DSUxfRkFJTCAgICAgICAgICAgICAg
ICAgICA9IDB4MEI5NDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX1NURU5DSUxfUEFT
U19ERVBUSF9GQUlMICAgICAgICA9IDB4MEI5NTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50
IEdMX1NURU5DSUxfUEFTU19ERVBUSF9QQVNTICAgICAgICA9IDB4MEI5NjsKKyAgICAgICAgY29u
c3QgdW5zaWduZWQgaW50IEdMX1NURU5DSUxfUkVGICAgICAgICAgICAgICAgICAgICA9IDB4MEI5
NzsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX1NURU5DSUxfVkFMVUVfTUFTSyAgICAg
ICAgICAgICA9IDB4MEI5MzsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX1NURU5DSUxf
V1JJVEVNQVNLICAgICAgICAgICAgICA9IDB4MEI5ODsKKyAgICAgICAgY29uc3QgdW5zaWduZWQg
aW50IEdMX1NURU5DSUxfQkFDS19GVU5DICAgICAgICAgICAgICA9IDB4ODgwMDsKKyAgICAgICAg
Y29uc3QgdW5zaWduZWQgaW50IEdMX1NURU5DSUxfQkFDS19GQUlMICAgICAgICAgICAgICA9IDB4
ODgwMTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX1NURU5DSUxfQkFDS19QQVNTX0RF
UFRIX0ZBSUwgICA9IDB4ODgwMjsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX1NURU5D
SUxfQkFDS19QQVNTX0RFUFRIX1BBU1MgICA9IDB4ODgwMzsKKyAgICAgICAgY29uc3QgdW5zaWdu
ZWQgaW50IEdMX1NURU5DSUxfQkFDS19SRUYgICAgICAgICAgICAgICA9IDB4OENBMzsKKyAgICAg
ICAgY29uc3QgdW5zaWduZWQgaW50IEdMX1NURU5DSUxfQkFDS19WQUxVRV9NQVNLICAgICAgICA9
IDB4OENBNDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX1NURU5DSUxfQkFDS19XUklU
RU1BU0sgICAgICAgICA9IDB4OENBNTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX1ZJ
RVdQT1JUICAgICAgICAgICAgICAgICAgICAgICA9IDB4MEJBMjsKKyAgICAgICAgY29uc3QgdW5z
aWduZWQgaW50IEdMX1NDSVNTT1JfQk9YICAgICAgICAgICAgICAgICAgICA9IDB4MEMxMDsKKyAg
ICAgICAgLyogICAgICBHTF9TQ0lTU09SX1RFU1QgKi8KKyAgICAgICAgY29uc3QgdW5zaWduZWQg
aW50IEdMX0NPTE9SX0NMRUFSX1ZBTFVFICAgICAgICAgICAgICA9IDB4MEMyMjsKKyAgICAgICAg
Y29uc3QgdW5zaWduZWQgaW50IEdMX0NPTE9SX1dSSVRFTUFTSyAgICAgICAgICAgICAgICA9IDB4
MEMyMzsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX1VOUEFDS19BTElHTk1FTlQgICAg
ICAgICAgICAgICA9IDB4MENGNTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX1BBQ0tf
QUxJR05NRU5UICAgICAgICAgICAgICAgICA9IDB4MEQwNTsKKyAgICAgICAgY29uc3QgdW5zaWdu
ZWQgaW50IEdMX01BWF9URVhUVVJFX1NJWkUgICAgICAgICAgICAgICA9IDB4MEQzMzsKKyAgICAg
ICAgY29uc3QgdW5zaWduZWQgaW50IEdMX01BWF9WSUVXUE9SVF9ESU1TICAgICAgICAgICAgICA9
IDB4MEQzQTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX1NVQlBJWEVMX0JJVFMgICAg
ICAgICAgICAgICAgICA9IDB4MEQ1MDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX1JF
RF9CSVRTICAgICAgICAgICAgICAgICAgICAgICA9IDB4MEQ1MjsKKyAgICAgICAgY29uc3QgdW5z
aWduZWQgaW50IEdMX0dSRUVOX0JJVFMgICAgICAgICAgICAgICAgICAgICA9IDB4MEQ1MzsKKyAg
ICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0JMVUVfQklUUyAgICAgICAgICAgICAgICAgICAg
ICA9IDB4MEQ1NDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0FMUEhBX0JJVFMgICAg
ICAgICAgICAgICAgICAgICA9IDB4MEQ1NTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdM
X0RFUFRIX0JJVFMgICAgICAgICAgICAgICAgICAgICA9IDB4MEQ1NjsKKyAgICAgICAgY29uc3Qg
dW5zaWduZWQgaW50IEdMX1NURU5DSUxfQklUUyAgICAgICAgICAgICAgICAgICA9IDB4MEQ1NzsK
KyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX1BPTFlHT05fT0ZGU0VUX1VOSVRTICAgICAg
ICAgICA9IDB4MkEwMDsKKyAgICAgICAgLyogICAgICBHTF9QT0xZR09OX09GRlNFVF9GSUxMICov
CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9QT0xZR09OX09GRlNFVF9GQUNUT1IgICAg
ICAgICAgPSAweDgwMzg7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9URVhUVVJFX0JJ
TkRJTkdfMkQgICAgICAgICAgICAgPSAweDgwNjk7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGlu
dCBHTF9TQU1QTEVfQlVGRkVSUyAgICAgICAgICAgICAgICAgPSAweDgwQTg7CisgICAgICAgIGNv
bnN0IHVuc2lnbmVkIGludCBHTF9TQU1QTEVTICAgICAgICAgICAgICAgICAgICAgICAgPSAweDgw
QTk7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9TQU1QTEVfQ09WRVJBR0VfVkFMVUUg
ICAgICAgICAgPSAweDgwQUE7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9TQU1QTEVf
Q09WRVJBR0VfSU5WRVJUICAgICAgICAgPSAweDgwQUI7CisKKyAgICAgICAgLyogR2V0VGV4dHVy
ZVBhcmFtZXRlciAqLworICAgICAgICAvKiAgICAgIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiAqLwor
ICAgICAgICAvKiAgICAgIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiAqLworICAgICAgICAvKiAgICAg
IEdMX1RFWFRVUkVfV1JBUF9TICovCisgICAgICAgIC8qICAgICAgR0xfVEVYVFVSRV9XUkFQX1Qg
Ki8KKworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfTlVNX0NPTVBSRVNTRURfVEVYVFVS
RV9GT1JNQVRTID0gMHg4NkEyOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfQ09NUFJF
U1NFRF9URVhUVVJFX0ZPUk1BVFMgICAgID0gMHg4NkEzOworCisgICAgICAgIC8qIEhpbnRNb2Rl
ICovCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9ET05UX0NBUkUgICAgICAgICAgICAg
ICAgICAgICAgPSAweDExMDA7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9GQVNURVNU
ICAgICAgICAgICAgICAgICAgICAgICAgPSAweDExMDE7CisgICAgICAgIGNvbnN0IHVuc2lnbmVk
IGludCBHTF9OSUNFU1QgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDExMDI7CisKKyAgICAg
ICAgLyogSGludFRhcmdldCAqLworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfR0VORVJB
VEVfTUlQTUFQX0hJTlQgICAgICAgICAgICA9IDB4ODE5MjsKKworICAgICAgICAvKiBEYXRhVHlw
ZSAqLworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfQllURSAgICAgICAgICAgICAgICAg
ICAgICAgICAgID0gMHgxNDAwOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfVU5TSUdO
RURfQllURSAgICAgICAgICAgICAgICAgID0gMHgxNDAxOworICAgICAgICBjb25zdCB1bnNpZ25l
ZCBpbnQgR0xfU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxNDAyOworICAgICAg
ICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfVU5TSUdORURfU0hPUlQgICAgICAgICAgICAgICAgID0g
MHgxNDAzOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfSU5UICAgICAgICAgICAgICAg
ICAgICAgICAgICAgID0gMHgxNDA0OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfVU5T
SUdORURfSU5UICAgICAgICAgICAgICAgICAgID0gMHgxNDA1OworICAgICAgICBjb25zdCB1bnNp
Z25lZCBpbnQgR0xfRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxNDA2OworICAg
ICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfRklYRUQgICAgICAgICAgICAgICAgICAgICAgICAg
ID0gMHgxNDBDOworCisgICAgICAgIC8qIFBpeGVsRm9ybWF0ICovCisgICAgICAgIGNvbnN0IHVu
c2lnbmVkIGludCBHTF9ERVBUSF9DT01QT05FTlQgICAgICAgICAgICAgICAgPSAweDE5MDI7Cisg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9BTFBIQSAgICAgICAgICAgICAgICAgICAgICAg
ICAgPSAweDE5MDY7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9SR0IgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPSAweDE5MDc7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBH
TF9SR0JBICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE5MDg7CisgICAgICAgIGNvbnN0
IHVuc2lnbmVkIGludCBHTF9MVU1JTkFOQ0UgICAgICAgICAgICAgICAgICAgICAgPSAweDE5MDk7
CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9MVU1JTkFOQ0VfQUxQSEEgICAgICAgICAg
ICAgICAgPSAweDE5MEE7CisKKyAgICAgICAgLyogUGl4ZWxUeXBlICovCisgICAgICAgIC8qICAg
ICAgR0xfVU5TSUdORURfQllURSAqLworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfVU5T
SUdORURfU0hPUlRfNF80XzRfNCAgICAgICAgID0gMHg4MDMzOworICAgICAgICBjb25zdCB1bnNp
Z25lZCBpbnQgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMSAgICAgICAgID0gMHg4MDM0OworICAg
ICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfVU5TSUdORURfU0hPUlRfNV82XzUgICAgICAgICAg
ID0gMHg4MzYzOworCisgICAgICAgIC8qIFNoYWRlcnMgKi8KKyAgICAgICAgY29uc3QgdW5zaWdu
ZWQgaW50IEdMX0ZSQUdNRU5UX1NIQURFUiAgICAgICAgICAgICAgICAgID0gMHg4QjMwOworICAg
ICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfVkVSVEVYX1NIQURFUiAgICAgICAgICAgICAgICAg
ICAgPSAweDhCMzE7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9NQVhfVkVSVEVYX0FU
VFJJQlMgICAgICAgICAgICAgICA9IDB4ODg2OTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50
IEdMX01BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTICAgICAgID0gMHg4REZCOworICAgICAgICBj
b25zdCB1bnNpZ25lZCBpbnQgR0xfTUFYX1ZBUllJTkdfVkVDVE9SUyAgICAgICAgICAgICAgPSAw
eDhERkM7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9NQVhfQ09NQklORURfVEVYVFVS
RV9JTUFHRV9VTklUUyA9IDB4OEI0RDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX01B
WF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUyAgID0gMHg4QjRDOworICAgICAgICBjb25zdCB1
bnNpZ25lZCBpbnQgR0xfTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMgICAgICAgICAgPSAweDg4NzI7
CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9NQVhfRlJBR01FTlRfVU5JRk9STV9WRUNU
T1JTICAgICA9IDB4OERGRDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX1NIQURFUl9U
WVBFICAgICAgICAgICAgICAgICAgICAgID0gMHg4QjRGOworICAgICAgICBjb25zdCB1bnNpZ25l
ZCBpbnQgR0xfREVMRVRFX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgPSAweDhCODA7CisgICAg
ICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9MSU5LX1NUQVRVUyAgICAgICAgICAgICAgICAgICAg
ICA9IDB4OEI4MjsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX1ZBTElEQVRFX1NUQVRV
UyAgICAgICAgICAgICAgICAgID0gMHg4QjgzOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQg
R0xfQVRUQUNIRURfU0hBREVSUyAgICAgICAgICAgICAgICAgPSAweDhCODU7CisgICAgICAgIGNv
bnN0IHVuc2lnbmVkIGludCBHTF9BQ1RJVkVfVU5JRk9STVMgICAgICAgICAgICAgICAgICA9IDB4
OEI4NjsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0FDVElWRV9VTklGT1JNX01BWF9M
RU5HVEggICAgICAgID0gMHg4Qjg3OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfQUNU
SVZFX0FUVFJJQlVURVMgICAgICAgICAgICAgICAgPSAweDhCODk7CisgICAgICAgIGNvbnN0IHVu
c2lnbmVkIGludCBHTF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEggICAgICA9IDB4OEI4QTsK
KyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX1NIQURJTkdfTEFOR1VBR0VfVkVSU0lPTiAg
ICAgICAgID0gMHg4QjhDOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfQ1VSUkVOVF9Q
Uk9HUkFNICAgICAgICAgICAgICAgICAgPSAweDhCOEQ7CisKKyAgICAgICAgLyogU3RlbmNpbEZ1
bmN0aW9uICovCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9ORVZFUiAgICAgICAgICAg
ICAgICAgICAgICAgICAgPSAweDAyMDA7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9M
RVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAyMDE7CisgICAgICAgIGNvbnN0IHVu
c2lnbmVkIGludCBHTF9FUVVBTCAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAyMDI7Cisg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9MRVFVQUwgICAgICAgICAgICAgICAgICAgICAg
ICAgPSAweDAyMDM7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9HUkVBVEVSICAgICAg
ICAgICAgICAgICAgICAgICAgPSAweDAyMDQ7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBH
TF9OT1RFUVVBTCAgICAgICAgICAgICAgICAgICAgICAgPSAweDAyMDU7CisgICAgICAgIGNvbnN0
IHVuc2lnbmVkIGludCBHTF9HRVFVQUwgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAyMDY7
CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9BTFdBWVMgICAgICAgICAgICAgICAgICAg
ICAgICAgPSAweDAyMDc7CisKKyAgICAgICAgLyogU3RlbmNpbE9wICovCisgICAgICAgIC8qICAg
ICAgR0xfWkVSTyAqLworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfS0VFUCAgICAgICAg
ICAgICAgICAgICAgICAgICAgID0gMHgxRTAwOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQg
R0xfUkVQTEFDRSAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxRTAxOworICAgICAgICBjb25z
dCB1bnNpZ25lZCBpbnQgR0xfSU5DUiAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxRTAy
OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfREVDUiAgICAgICAgICAgICAgICAgICAg
ICAgICAgID0gMHgxRTAzOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfSU5WRVJUICAg
ICAgICAgICAgICAgICAgICAgICAgID0gMHgxNTBBOworICAgICAgICBjb25zdCB1bnNpZ25lZCBp
bnQgR0xfSU5DUl9XUkFQICAgICAgICAgICAgICAgICAgICAgID0gMHg4NTA3OworICAgICAgICBj
b25zdCB1bnNpZ25lZCBpbnQgR0xfREVDUl9XUkFQICAgICAgICAgICAgICAgICAgICAgID0gMHg4
NTA4OworCisgICAgICAgIC8qIFN0cmluZ05hbWUgKi8KKyAgICAgICAgY29uc3QgdW5zaWduZWQg
aW50IEdMX1ZFTkRPUiAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MUYwMDsKKyAgICAgICAg
Y29uc3QgdW5zaWduZWQgaW50IEdMX1JFTkRFUkVSICAgICAgICAgICAgICAgICAgICAgICA9IDB4
MUYwMTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX1ZFUlNJT04gICAgICAgICAgICAg
ICAgICAgICAgICA9IDB4MUYwMjsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0VYVEVO
U0lPTlMgICAgICAgICAgICAgICAgICAgICA9IDB4MUYwMzsKKworICAgICAgICAvKiBUZXh0dXJl
TWFnRmlsdGVyICovCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9ORUFSRVNUICAgICAg
ICAgICAgICAgICAgICAgICAgPSAweDI2MDA7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBH
TF9MSU5FQVIgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDI2MDE7CisKKyAgICAgICAgLyog
VGV4dHVyZU1pbkZpbHRlciAqLworICAgICAgICAvKiAgICAgIEdMX05FQVJFU1QgKi8KKyAgICAg
ICAgLyogICAgICBHTF9MSU5FQVIgKi8KKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX05F
QVJFU1RfTUlQTUFQX05FQVJFU1QgICAgICAgICA9IDB4MjcwMDsKKyAgICAgICAgY29uc3QgdW5z
aWduZWQgaW50IEdMX0xJTkVBUl9NSVBNQVBfTkVBUkVTVCAgICAgICAgICA9IDB4MjcwMTsKKyAg
ICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUiAgICAgICAg
ICA9IDB4MjcwMjsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0xJTkVBUl9NSVBNQVBf
TElORUFSICAgICAgICAgICA9IDB4MjcwMzsKKworICAgICAgICAvKiBUZXh0dXJlUGFyYW1ldGVy
TmFtZSAqLworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfVEVYVFVSRV9NQUdfRklMVEVS
ICAgICAgICAgICAgID0gMHgyODAwOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfVEVY
VFVSRV9NSU5fRklMVEVSICAgICAgICAgICAgID0gMHgyODAxOworICAgICAgICBjb25zdCB1bnNp
Z25lZCBpbnQgR0xfVEVYVFVSRV9XUkFQX1MgICAgICAgICAgICAgICAgID0gMHgyODAyOworICAg
ICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfVEVYVFVSRV9XUkFQX1QgICAgICAgICAgICAgICAg
ID0gMHgyODAzOworCisgICAgICAgIC8qIFRleHR1cmVUYXJnZXQgKi8KKyAgICAgICAgLyogICAg
ICBHTF9URVhUVVJFXzJEICovCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9URVhUVVJF
ICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE3MDI7CisKKyAgICAgICAgY29uc3QgdW5zaWdu
ZWQgaW50IEdMX1RFWFRVUkVfQ1VCRV9NQVAgICAgICAgICAgICAgICA9IDB4ODUxMzsKKyAgICAg
ICAgY29uc3QgdW5zaWduZWQgaW50IEdMX1RFWFRVUkVfQklORElOR19DVUJFX01BUCAgICAgICA9
IDB4ODUxNDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX1RFWFRVUkVfQ1VCRV9NQVBf
UE9TSVRJVkVfWCAgICA9IDB4ODUxNTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX1RF
WFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWCAgICA9IDB4ODUxNjsKKyAgICAgICAgY29uc3QgdW5z
aWduZWQgaW50IEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWSAgICA9IDB4ODUxNzsKKyAg
ICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWSAg
ICA9IDB4ODUxODsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX1RFWFRVUkVfQ1VCRV9N
QVBfUE9TSVRJVkVfWiAgICA9IDB4ODUxOTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdM
X1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWiAgICA9IDB4ODUxQTsKKyAgICAgICAgY29uc3Qg
dW5zaWduZWQgaW50IEdMX01BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUgICAgICA9IDB4ODUxQzsK
KworICAgICAgICAvKiBUZXh0dXJlVW5pdCAqLworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQg
R0xfVEVYVFVSRTAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEMwOworICAgICAgICBjb25z
dCB1bnNpZ25lZCBpbnQgR0xfVEVYVFVSRTEgICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEMx
OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfVEVYVFVSRTIgICAgICAgICAgICAgICAg
ICAgICAgID0gMHg4NEMyOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfVEVYVFVSRTMg
ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEMzOworICAgICAgICBjb25zdCB1bnNpZ25lZCBp
bnQgR0xfVEVYVFVSRTQgICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEM0OworICAgICAgICBj
b25zdCB1bnNpZ25lZCBpbnQgR0xfVEVYVFVSRTUgICAgICAgICAgICAgICAgICAgICAgID0gMHg4
NEM1OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfVEVYVFVSRTYgICAgICAgICAgICAg
ICAgICAgICAgID0gMHg4NEM2OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfVEVYVFVS
RTcgICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEM3OworICAgICAgICBjb25zdCB1bnNpZ25l
ZCBpbnQgR0xfVEVYVFVSRTggICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEM4OworICAgICAg
ICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfVEVYVFVSRTkgICAgICAgICAgICAgICAgICAgICAgID0g
MHg4NEM5OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfVEVYVFVSRTEwICAgICAgICAg
ICAgICAgICAgICAgID0gMHg4NENBOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfVEVY
VFVSRTExICAgICAgICAgICAgICAgICAgICAgID0gMHg4NENCOworICAgICAgICBjb25zdCB1bnNp
Z25lZCBpbnQgR0xfVEVYVFVSRTEyICAgICAgICAgICAgICAgICAgICAgID0gMHg4NENDOworICAg
ICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfVEVYVFVSRTEzICAgICAgICAgICAgICAgICAgICAg
ID0gMHg4NENEOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfVEVYVFVSRTE0ICAgICAg
ICAgICAgICAgICAgICAgID0gMHg4NENFOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xf
VEVYVFVSRTE1ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NENGOworICAgICAgICBjb25zdCB1
bnNpZ25lZCBpbnQgR0xfVEVYVFVSRTE2ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEQwOwor
ICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfVEVYVFVSRTE3ICAgICAgICAgICAgICAgICAg
ICAgID0gMHg4NEQxOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfVEVYVFVSRTE4ICAg
ICAgICAgICAgICAgICAgICAgID0gMHg4NEQyOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQg
R0xfVEVYVFVSRTE5ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEQzOworICAgICAgICBjb25z
dCB1bnNpZ25lZCBpbnQgR0xfVEVYVFVSRTIwICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEQ0
OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfVEVYVFVSRTIxICAgICAgICAgICAgICAg
ICAgICAgID0gMHg4NEQ1OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfVEVYVFVSRTIy
ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEQ2OworICAgICAgICBjb25zdCB1bnNpZ25lZCBp
bnQgR0xfVEVYVFVSRTIzICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEQ3OworICAgICAgICBj
b25zdCB1bnNpZ25lZCBpbnQgR0xfVEVYVFVSRTI0ICAgICAgICAgICAgICAgICAgICAgID0gMHg4
NEQ4OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfVEVYVFVSRTI1ICAgICAgICAgICAg
ICAgICAgICAgID0gMHg4NEQ5OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfVEVYVFVS
RTI2ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NERBOworICAgICAgICBjb25zdCB1bnNpZ25l
ZCBpbnQgR0xfVEVYVFVSRTI3ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NERCOworICAgICAg
ICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfVEVYVFVSRTI4ICAgICAgICAgICAgICAgICAgICAgID0g
MHg4NERDOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfVEVYVFVSRTI5ICAgICAgICAg
ICAgICAgICAgICAgID0gMHg4NEREOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfVEVY
VFVSRTMwICAgICAgICAgICAgICAgICAgICAgID0gMHg4NERFOworICAgICAgICBjb25zdCB1bnNp
Z25lZCBpbnQgR0xfVEVYVFVSRTMxICAgICAgICAgICAgICAgICAgICAgID0gMHg4NERGOworICAg
ICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfQUNUSVZFX1RFWFRVUkUgICAgICAgICAgICAgICAg
ID0gMHg4NEUwOworCisgICAgICAgIC8qIFRleHR1cmVXcmFwTW9kZSAqLworICAgICAgICBjb25z
dCB1bnNpZ25lZCBpbnQgR0xfUkVQRUFUICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgyOTAx
OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfQ0xBTVBfVE9fRURHRSAgICAgICAgICAg
ICAgICAgID0gMHg4MTJGOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfTUlSUk9SRURf
UkVQRUFUICAgICAgICAgICAgICAgID0gMHg4MzcwOworCisgICAgICAgIC8qIFVuaWZvcm0gVHlw
ZXMgKi8KKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0ZMT0FUX1ZFQzIgICAgICAgICAg
ICAgICAgICAgICA9IDB4OEI1MDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0ZMT0FU
X1ZFQzMgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1MTsKKyAgICAgICAgY29uc3QgdW5zaWdu
ZWQgaW50IEdMX0ZMT0FUX1ZFQzQgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1MjsKKyAgICAg
ICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0lOVF9WRUMyICAgICAgICAgICAgICAgICAgICAgICA9
IDB4OEI1MzsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0lOVF9WRUMzICAgICAgICAg
ICAgICAgICAgICAgICA9IDB4OEI1NDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0lO
VF9WRUM0ICAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1NTsKKyAgICAgICAgY29uc3QgdW5z
aWduZWQgaW50IEdMX0JPT0wgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1NjsKKyAg
ICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0JPT0xfVkVDMiAgICAgICAgICAgICAgICAgICAg
ICA9IDB4OEI1NzsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0JPT0xfVkVDMyAgICAg
ICAgICAgICAgICAgICAgICA9IDB4OEI1ODsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdM
X0JPT0xfVkVDNCAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1OTsKKyAgICAgICAgY29uc3Qg
dW5zaWduZWQgaW50IEdMX0ZMT0FUX01BVDIgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1QTsK
KyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0ZMT0FUX01BVDMgICAgICAgICAgICAgICAg
ICAgICA9IDB4OEI1QjsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0ZMT0FUX01BVDQg
ICAgICAgICAgICAgICAgICAgICA9IDB4OEI1QzsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50
IEdMX1NBTVBMRVJfMkQgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1RTsKKyAgICAgICAgY29u
c3QgdW5zaWduZWQgaW50IEdMX1NBTVBMRVJfQ1VCRSAgICAgICAgICAgICAgICAgICA9IDB4OEI2
MDsKKworICAgICAgICAvKiBWZXJ0ZXggQXJyYXlzICovCisgICAgICAgIGNvbnN0IHVuc2lnbmVk
IGludCBHTF9WRVJURVhfQVRUUklCX0FSUkFZX0VOQUJMRUQgICAgICAgID0gMHg4NjIyOworICAg
ICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpFICAgICAg
ICAgICA9IDB4ODYyMzsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX1ZFUlRFWF9BVFRS
SUJfQVJSQVlfU1RSSURFICAgICAgICAgPSAweDg2MjQ7CisgICAgICAgIGNvbnN0IHVuc2lnbmVk
IGludCBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1RZUEUgICAgICAgICAgID0gMHg4NjI1OworICAg
ICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVE
ICAgICA9IDB4ODg2QTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX1ZFUlRFWF9BVFRS
SUJfQVJSQVlfUE9JTlRFUiAgICAgICAgPSAweDg2NDU7CisgICAgICAgIGNvbnN0IHVuc2lnbmVk
IGludCBHTF9WRVJURVhfQVRUUklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HID0gMHg4ODlGOworCisg
ICAgICAgIC8qIFJlYWQgRm9ybWF0ICovCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9J
TVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX1RZUEUgICA9IDB4OEI5QTsKKyAgICAgICAgY29uc3Qg
dW5zaWduZWQgaW50IEdMX0lNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFUID0gMHg4QjlC
OworCisgICAgICAgIC8qIFNoYWRlciBTb3VyY2UgKi8KKyAgICAgICAgY29uc3QgdW5zaWduZWQg
aW50IEdMX0NPTVBJTEVfU1RBVFVTICAgICAgICAgICAgICAgICA9IDB4OEI4MTsKKyAgICAgICAg
Y29uc3QgdW5zaWduZWQgaW50IEdMX0lORk9fTE9HX0xFTkdUSCAgICAgICAgICAgICAgICA9IDB4
OEI4NDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX1NIQURFUl9TT1VSQ0VfTEVOR1RI
ICAgICAgICAgICA9IDB4OEI4ODsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX1NIQURF
Ul9DT01QSUxFUiAgICAgICAgICAgICAgICA9IDB4OERGQTsKKworICAgICAgICAvKiBTaGFkZXIg
QmluYXJ5ICovCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9TSEFERVJfQklOQVJZX0ZP
Uk1BVFMgICAgICAgICAgPSAweDhERjg7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9O
VU1fU0hBREVSX0JJTkFSWV9GT1JNQVRTICAgICAgPSAweDhERjk7CisKKyAgICAgICAgLyogU2hh
ZGVyIFByZWNpc2lvbi1TcGVjaWZpZWQgVHlwZXMgKi8KKyAgICAgICAgY29uc3QgdW5zaWduZWQg
aW50IEdMX0xPV19GTE9BVCAgICAgICAgICAgICAgICAgICAgICA9IDB4OERGMDsKKyAgICAgICAg
Y29uc3QgdW5zaWduZWQgaW50IEdMX01FRElVTV9GTE9BVCAgICAgICAgICAgICAgICAgICA9IDB4
OERGMTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0hJR0hfRkxPQVQgICAgICAgICAg
ICAgICAgICAgICA9IDB4OERGMjsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0xPV19J
TlQgICAgICAgICAgICAgICAgICAgICAgICA9IDB4OERGMzsKKyAgICAgICAgY29uc3QgdW5zaWdu
ZWQgaW50IEdMX01FRElVTV9JTlQgICAgICAgICAgICAgICAgICAgICA9IDB4OERGNDsKKyAgICAg
ICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0hJR0hfSU5UICAgICAgICAgICAgICAgICAgICAgICA9
IDB4OERGNTsKKworICAgICAgICAvKiBGcmFtZWJ1ZmZlciBPYmplY3QuICovCisgICAgICAgIGNv
bnN0IHVuc2lnbmVkIGludCBHTF9GUkFNRUJVRkZFUiAgICAgICAgICAgICAgICAgICAgPSAweDhE
NDA7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9SRU5ERVJCVUZGRVIgICAgICAgICAg
ICAgICAgICAgPSAweDhENDE7CisKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX1JHQkE0
ICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODA1NjsKKyAgICAgICAgY29uc3QgdW5zaWdu
ZWQgaW50IEdMX1JHQjVfQTEgICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODA1NzsKKyAgICAg
ICAgY29uc3QgdW5zaWduZWQgaW50IEdMX1JHQjU2NSAgICAgICAgICAgICAgICAgICAgICAgICA9
IDB4OEQ2MjsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0RFUFRIX0NPTVBPTkVOVDE2
ICAgICAgICAgICAgICA9IDB4ODFBNTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX1NU
RU5DSUxfSU5ERVggICAgICAgICAgICAgICAgICA9IDB4MTkwMTsKKyAgICAgICAgY29uc3QgdW5z
aWduZWQgaW50IEdMX1NURU5DSUxfSU5ERVg4ICAgICAgICAgICAgICAgICA9IDB4OEQ0ODsKKwor
ICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfUkVOREVSQlVGRkVSX1dJRFRIICAgICAgICAg
ICAgID0gMHg4RDQyOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfUkVOREVSQlVGRkVS
X0hFSUdIVCAgICAgICAgICAgID0gMHg4RDQzOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQg
R0xfUkVOREVSQlVGRkVSX0lOVEVSTkFMX0ZPUk1BVCAgID0gMHg4RDQ0OworICAgICAgICBjb25z
dCB1bnNpZ25lZCBpbnQgR0xfUkVOREVSQlVGRkVSX1JFRF9TSVpFICAgICAgICAgID0gMHg4RDUw
OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfUkVOREVSQlVGRkVSX0dSRUVOX1NJWkUg
ICAgICAgID0gMHg4RDUxOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfUkVOREVSQlVG
RkVSX0JMVUVfU0laRSAgICAgICAgID0gMHg4RDUyOworICAgICAgICBjb25zdCB1bnNpZ25lZCBp
bnQgR0xfUkVOREVSQlVGRkVSX0FMUEhBX1NJWkUgICAgICAgID0gMHg4RDUzOworICAgICAgICBj
b25zdCB1bnNpZ25lZCBpbnQgR0xfUkVOREVSQlVGRkVSX0RFUFRIX1NJWkUgICAgICAgID0gMHg4
RDU0OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfUkVOREVSQlVGRkVSX1NURU5DSUxf
U0laRSAgICAgID0gMHg4RDU1OworCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9GUkFN
RUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFICAgICAgICAgICA9IDB4OENEMDsKKyAgICAg
ICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05B
TUUgICAgICAgICAgID0gMHg4Q0QxOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfRlJB
TUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xFVkVMICAgICAgICAgPSAweDhDRDI7CisgICAg
ICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVf
Q1VCRV9NQVBfRkFDRSA9IDB4OENEMzsKKworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xf
Q09MT1JfQVRUQUNITUVOVDAgICAgICAgICAgICAgID0gMHg4Q0UwOworICAgICAgICBjb25zdCB1
bnNpZ25lZCBpbnQgR0xfREVQVEhfQVRUQUNITUVOVCAgICAgICAgICAgICAgID0gMHg4RDAwOwor
ICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UICAgICAgICAg
ICAgID0gMHg4RDIwOworCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9OT05FICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPSAwOworCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBH
TF9GUkFNRUJVRkZFUl9DT01QTEVURSAgICAgICAgICAgICAgICAgICAgICA9IDB4OENENTsKKyAg
ICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNI
TUVOVCAgICAgICAgID0gMHg4Q0Q2OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfRlJB
TUVCVUZGRVJfSU5DT01QTEVURV9NSVNTSU5HX0FUVEFDSE1FTlQgPSAweDhDRDc7CisgICAgICAg
IGNvbnN0IHVuc2lnbmVkIGludCBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlMg
ICAgICAgICA9IDB4OENEOTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0ZSQU1FQlVG
RkVSX1VOU1VQUE9SVEVEICAgICAgICAgICAgICAgICAgID0gMHg4Q0REOworCisgICAgICAgIGNv
bnN0IHVuc2lnbmVkIGludCBHTF9GUkFNRUJVRkZFUl9CSU5ESU5HICAgICAgICAgICAgPSAweDhD
QTY7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9SRU5ERVJCVUZGRVJfQklORElORyAg
ICAgICAgICAgPSAweDhDQTc7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9NQVhfUkVO
REVSQlVGRkVSX1NJWkUgICAgICAgICAgPSAweDg0RTg7CisKKyAgICAgICAgY29uc3QgdW5zaWdu
ZWQgaW50IEdMX0lOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OICA9IDB4MDUwNjsKKworICAg
ICAgICByZWFkb25seSBhdHRyaWJ1dGUgSFRNTENhbnZhc0VsZW1lbnQgY2FudmFzOworICAgICAg
ICAKKyAgICAgICAgdm9pZCAgICAgICAgIGdsQWN0aXZlVGV4dHVyZSAoaW4gdW5zaWduZWQgbG9u
ZyB0ZXh0dXJlKTsKKyAgICAgICAgdm9pZCAgICAgICAgIGdsQXR0YWNoU2hhZGVyIChpbiBDYW52
YXNQcm9ncmFtIHByb2dyYW0sIGluIENhbnZhc1NoYWRlciBzaGFkZXIpOworICAgICAgICB2b2lk
ICAgICAgICAgZ2xCaW5kQXR0cmliTG9jYXRpb24gKGluIENhbnZhc1Byb2dyYW0gcHJvZ3JhbSwg
aW4gdW5zaWduZWQgbG9uZyBpbmRleCwgaW4gRE9NU3RyaW5nIG5hbWUpOworICAgICAgICB2b2lk
ICAgICAgICAgZ2xCaW5kQnVmZmVyIChpbiB1bnNpZ25lZCBsb25nIHRhcmdldCwgaW4gQ2FudmFz
QnVmZmVyIGJ1ZmZlcik7CisgICAgICAgIHZvaWQgICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlciAo
aW4gdW5zaWduZWQgbG9uZyB0YXJnZXQsIGluIENhbnZhc0ZyYW1lYnVmZmVyIGZyYW1lYnVmZmVy
KTsKKyAgICAgICAgdm9pZCAgICAgICAgIGdsQmluZFJlbmRlcmJ1ZmZlciAoaW4gdW5zaWduZWQg
bG9uZyB0YXJnZXQsIGluIENhbnZhc1JlbmRlcmJ1ZmZlciByZW5kZXJidWZmZXIpOworICAgICAg
ICB2b2lkICAgICAgICAgZ2xCaW5kVGV4dHVyZSAoaW4gdW5zaWduZWQgbG9uZyB0YXJnZXQsIGlu
IENhbnZhc1RleHR1cmUgdGV4dHVyZSk7CisgICAgICAgIHZvaWQgICAgICAgICBnbEJsZW5kQ29s
b3IgKGluIGRvdWJsZSByZWQsIGluIGRvdWJsZSBncmVlbiwgaW4gZG91YmxlIGJsdWUsIGluIGRv
dWJsZSBhbHBoYSk7CisgICAgICAgIHZvaWQgICAgICAgICBnbEJsZW5kRXF1YXRpb24gKCBpbiB1
bnNpZ25lZCBsb25nIG1vZGUgKTsKKyAgICAgICAgdm9pZCAgICAgICAgIGdsQmxlbmRFcXVhdGlv
blNlcGFyYXRlIChpbiB1bnNpZ25lZCBsb25nIG1vZGVSR0IsIGluIHVuc2lnbmVkIGxvbmcgbW9k
ZUFscGhhKTsKKyAgICAgICAgdm9pZCAgICAgICAgIGdsQmxlbmRGdW5jIChpbiB1bnNpZ25lZCBs
b25nIHNmYWN0b3IsIGluIHVuc2lnbmVkIGxvbmcgZGZhY3Rvcik7CisgICAgICAgIHZvaWQgICAg
ICAgICBnbEJsZW5kRnVuY1NlcGFyYXRlIChpbiB1bnNpZ25lZCBsb25nIHNyY1JHQiwgaW4gdW5z
aWduZWQgbG9uZyBkc3RSR0IsIGluIHVuc2lnbmVkIGxvbmcgc3JjQWxwaGEsIGluIHVuc2lnbmVk
IGxvbmcgZHN0QWxwaGEpOworICAgICAgICBbQ3VzdG9tXSB2b2lkIGdsQnVmZmVyRGF0YSAoaW4g
dW5zaWduZWQgbG9uZyB0YXJnZXQsIGluIENhbnZhc0J5dGVBcnJheSBkYXRhLCBpbiB1bnNpZ25l
ZCBsb25nIHVzYWdlKTsKKyAgICAgICAgW0N1c3RvbV0gdm9pZCBnbEJ1ZmZlclN1YkRhdGEgKGlu
IHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbiBsb25nIG9mZnNldCwgaW4gQ2FudmFzQnl0ZUFycmF5
IGRhdGEpOworICAgICAgICB1bnNpZ25lZCBsb25nIGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyAo
aW4gQ2FudmFzRnJhbWVidWZmZXIgZnJhbWVidWZmZXIpOworICAgICAgICB2b2lkICAgICAgICAg
Z2xDbGVhciAoaW4gdW5zaWduZWQgbG9uZyBtYXNrKTsKKyAgICAgICAgdm9pZCAgICAgICAgIGds
Q2xlYXJDb2xvciAoaW4gZG91YmxlIHJlZCwgaW4gZG91YmxlIGdyZWVuLCBpbiBkb3VibGUgYmx1
ZSwgaW4gZG91YmxlIGFscGhhKTsKKyAgICAgICAgdm9pZCAgICAgICAgIGdsQ2xlYXJEZXB0aCAo
aW4gZG91YmxlIGRlcHRoKTsKKyAgICAgICAgdm9pZCAgICAgICAgIGdsQ2xlYXJTdGVuY2lsIChp
biBsb25nIHMpOworICAgICAgICB2b2lkICAgICAgICAgZ2xDb2xvck1hc2sgKGluIGJvb2xlYW4g
cmVkLCBpbiBib29sZWFuIGdyZWVuLCBpbiBib29sZWFuIGJsdWUsIGluIGJvb2xlYW4gYWxwaGEp
OworICAgICAgICB2b2lkICAgICAgICAgZ2xDb21waWxlU2hhZGVyIChpbiBDYW52YXNTaGFkZXIg
c2hhZGVyKTsKKyAgICAgICAgCisgICAgICAgIC8vdm9pZCAgICAgICAgIGdsQ29tcHJlc3NlZFRl
eEltYWdlMkQgKGluIHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbiBsb25nIGxldmVsLCBpbiB1bnNp
Z25lZCBsb25nIGludGVybmFsZm9ybWF0LCBpbiB1bnNpZ25lZCBsb25nIHdpZHRoLCBpbiB1bnNp
Z25lZCBsb25nIGhlaWdodCwgaW4gbG9uZyBib3JkZXIsIGluIHVuc2lnbmVkIGxvbmcgaW1hZ2VT
aXplLCBjb25zdCB2b2lkKiBkYXRhKTsKKyAgICAgICAgLy92b2lkICAgICAgICAgZ2xDb21wcmVz
c2VkVGV4U3ViSW1hZ2UyRCAoaW4gdW5zaWduZWQgbG9uZyB0YXJnZXQsIGluIGxvbmcgbGV2ZWws
IGluIGxvbmcgeG9mZnNldCwgaW4gbG9uZyB5b2Zmc2V0LCBpbiB1bnNpZ25lZCBsb25nIHdpZHRo
LCBpbiB1bnNpZ25lZCBsb25nIGhlaWdodCwgaW4gdW5zaWduZWQgbG9uZyBmb3JtYXQsIGluIHVu
c2lnbmVkIGxvbmcgaW1hZ2VTaXplLCBjb25zdCB2b2lkKiBkYXRhKTsKKyAgICAgICAgCisgICAg
ICAgIHZvaWQgICAgICAgICBnbENvcHlUZXhJbWFnZTJEIChpbiB1bnNpZ25lZCBsb25nIHRhcmdl
dCwgaW4gbG9uZyBsZXZlbCwgaW4gdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgaW4gbG9u
ZyB4LCBpbiBsb25nIHksIGluIHVuc2lnbmVkIGxvbmcgd2lkdGgsIGluIHVuc2lnbmVkIGxvbmcg
aGVpZ2h0LCBpbiBsb25nIGJvcmRlcik7CisgICAgICAgIHZvaWQgICAgICAgICBnbENvcHlUZXhT
dWJJbWFnZTJEIChpbiB1bnNpZ25lZCBsb25nIHRhcmdldCwgaW4gbG9uZyBsZXZlbCwgaW4gbG9u
ZyB4b2Zmc2V0LCBpbiBsb25nIHlvZmZzZXQsIGluIGxvbmcgeCwgaW4gbG9uZyB5LCBpbiB1bnNp
Z25lZCBsb25nIHdpZHRoLCBpbiB1bnNpZ25lZCBsb25nIGhlaWdodCk7CisgICAgICAgIHZvaWQg
ICAgICAgICBnbEN1bGxGYWNlIChpbiB1bnNpZ25lZCBsb25nIG1vZGUpOworICAgICAgICB2b2lk
ICAgICAgICAgZ2xEZXB0aEZ1bmMgKGluIHVuc2lnbmVkIGxvbmcgZnVuYyk7CisgICAgICAgIHZv
aWQgICAgICAgICBnbERlcHRoTWFzayAoaW4gYm9vbGVhbiBmbGFnKTsKKyAgICAgICAgdm9pZCAg
ICAgICAgIGdsRGVwdGhSYW5nZSAoaW4gZG91YmxlIHpOZWFyLCBpbiBkb3VibGUgekZhcik7Cisg
ICAgICAgIHZvaWQgICAgICAgICBnbERldGFjaFNoYWRlciAoaW4gQ2FudmFzUHJvZ3JhbSBwcm9n
cmFtLCBpbiBDYW52YXNTaGFkZXIgc2hhZGVyKTsKKyAgICAgICAgdm9pZCAgICAgICAgIGdsRGlz
YWJsZSAoaW4gdW5zaWduZWQgbG9uZyBjYXApOworICAgICAgICB2b2lkICAgICAgICAgZ2xEaXNh
YmxlVmVydGV4QXR0cmliQXJyYXkgKGluIHVuc2lnbmVkIGxvbmcgaW5kZXgpOworICAgICAgICB2
b2lkICAgICAgICAgZ2xEcmF3QXJyYXlzIChpbiB1bnNpZ25lZCBsb25nIG1vZGUsIGluIGxvbmcg
Zmlyc3QsIGluIHVuc2lnbmVkIGxvbmcgY291bnQpOworICAgICAgICBbQ3VzdG9tXSB2b2lkIGds
RHJhd0VsZW1lbnRzIChpbiB1bnNpZ25lZCBsb25nIG1vZGUsIGluIHVuc2lnbmVkIGxvbmcgdHlw
ZSwgQ2FudmFzQnl0ZUFycmF5KTsKKyAgICAgICAgdm9pZCAgICAgICAgIGdsRW5hYmxlIChpbiB1
bnNpZ25lZCBsb25nIGNhcCk7CisgICAgICAgIHZvaWQgICAgICAgICBnbEVuYWJsZVZlcnRleEF0
dHJpYkFycmF5IChpbiB1bnNpZ25lZCBsb25nIGluZGV4KTsKKyAgICAgICAgdm9pZCAgICAgICAg
IGdsRmluaXNoICgpOworICAgICAgICB2b2lkICAgICAgICAgZ2xGbHVzaCAoKTsKKyAgICAgICAg
dm9pZCAgICAgICAgIGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIgKGluIHVuc2lnbmVkIGxvbmcg
dGFyZ2V0LCBpbiB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIGluIHVuc2lnbmVkIGxvbmcgcmVu
ZGVyYnVmZmVydGFyZ2V0LCBpbiBDYW52YXNSZW5kZXJidWZmZXIgcmVuZGVyYnVmZmVyKTsKKyAg
ICAgICAgdm9pZCAgICAgICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQgKGluIHVuc2lnbmVkIGxv
bmcgdGFyZ2V0LCBpbiB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIGluIHVuc2lnbmVkIGxvbmcg
dGV4dGFyZ2V0LCBpbiBDYW52YXNUZXh0dXJlIHRleHR1cmUsIGluIGxvbmcgbGV2ZWwpOworICAg
ICAgICB2b2lkICAgICAgICAgZ2xGcm9udEZhY2UgKGluIHVuc2lnbmVkIGxvbmcgbW9kZSk7Cisg
ICAgICAgIHZvaWQgICAgICAgICBnbEdlbmVyYXRlTWlwbWFwIChpbiB1bnNpZ25lZCBsb25nIHRh
cmdldCk7CisgICAgICAgIAorICAgICAgICAvL3ZvaWQgICAgICAgICBnbEdldEF0dGFjaGVkU2hh
ZGVycyAoaW4gQ2FudmFzUHJvZ3JhbSBwcm9ncmFtLCBpbiB1bnNpZ25lZCBsb25nIG1heGNvdW50
LCBpbiB1bnNpZ25lZCBsb25nKiBjb3VudCwgaW4gdW5zaWduZWQgbG9uZyogc2hhZGVycyk7Cisg
ICAgICAgIAorICAgICAgICBpbnQgICAgICAgICAgZ2xHZXRBdHRyaWJMb2NhdGlvbiAoaW4gQ2Fu
dmFzUHJvZ3JhbSBwcm9ncmFtLCBpbiBET01TdHJpbmcgbmFtZSk7CisgICAgICAgIHVuc2lnbmVk
IGxvbmcgZ2xHZXRFcnJvciAoKTsKKyAgICAgICAgRE9NU3RyaW5nICAgIGdsR2V0U2hhZGVyU291
cmNlIChpbiBDYW52YXNTaGFkZXIgc2hhZGVyKTsKKyAgICAgICAgRE9NU3RyaW5nICAgIGdsR2V0
U3RyaW5nIChpbiB1bnNpZ25lZCBsb25nIG5hbWUpOworICAgICAgICB2b2lkICAgICAgICAgZ2xI
aW50IChpbiB1bnNpZ25lZCBsb25nIHRhcmdldCwgaW4gdW5zaWduZWQgbG9uZyBtb2RlKTsKKyAg
ICAgICAgYm9vbGVhbiAgICAgIGdsSXNCdWZmZXIgKGluIENhbnZhc0J1ZmZlciBidWZmZXIpOwor
ICAgICAgICBib29sZWFuICAgICAgZ2xJc0VuYWJsZWQgKGluIHVuc2lnbmVkIGxvbmcgY2FwKTsK
KyAgICAgICAgYm9vbGVhbiAgICAgIGdsSXNGcmFtZWJ1ZmZlciAoaW4gQ2FudmFzRnJhbWVidWZm
ZXIgZnJhbWVidWZmZXIpOworICAgICAgICBib29sZWFuICAgICAgZ2xJc1Byb2dyYW0gKGluIENh
bnZhc1Byb2dyYW0gcHJvZ3JhbSk7CisgICAgICAgIGJvb2xlYW4gICAgICBnbElzUmVuZGVyYnVm
ZmVyIChpbiBDYW52YXNSZW5kZXJidWZmZXIgcmVuZGVyYnVmZmVyKTsKKyAgICAgICAgYm9vbGVh
biAgICAgIGdsSXNTaGFkZXIgKGluIENhbnZhc1NoYWRlciBzaGFkZXIpOworICAgICAgICBib29s
ZWFuICAgICAgZ2xJc1RleHR1cmUgKGluIENhbnZhc1RleHR1cmUgdGV4dHVyZSk7CisgICAgICAg
IHZvaWQgICAgICAgICBnbExpbmVXaWR0aCAoaW4gZG91YmxlIHdpZHRoKTsKKyAgICAgICAgdm9p
ZCAgICAgICAgIGdsTGlua1Byb2dyYW0gKGluIENhbnZhc1Byb2dyYW0gcHJvZ3JhbSk7CisgICAg
ICAgIHZvaWQgICAgICAgICBnbFBpeGVsU3RvcmVpIChpbiB1bnNpZ25lZCBsb25nIHBuYW1lLCBp
biBsb25nIHBhcmFtKTsKKyAgICAgICAgdm9pZCAgICAgICAgIGdsUG9seWdvbk9mZnNldCAoaW4g
ZG91YmxlIGZhY3RvciwgaW4gZG91YmxlIHVuaXRzKTsKKyAgICAgICAgCisgICAgICAgIC8vdm9p
ZCAgICAgICAgIGdsUmVhZFBpeGVscyAoaW4gbG9uZyB4LCBpbiBsb25nIHksIGluIHVuc2lnbmVk
IGxvbmcgd2lkdGgsIGluIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCBpbiB1bnNpZ25lZCBsb25nIGZv
cm1hdCwgaW4gdW5zaWduZWQgbG9uZyB0eXBlLCB2b2lkKiBwaXhlbHMpOworICAgICAgICAKKyAg
ICAgICAgdm9pZCAgICAgICAgIGdsUmVsZWFzZVNoYWRlckNvbXBpbGVyICgpOworICAgICAgICB2
b2lkICAgICAgICAgZ2xSZW5kZXJidWZmZXJTdG9yYWdlIChpbiB1bnNpZ25lZCBsb25nIHRhcmdl
dCwgaW4gdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgaW4gdW5zaWduZWQgbG9uZyB3aWR0
aCwgaW4gdW5zaWduZWQgbG9uZyBoZWlnaHQpOworICAgICAgICB2b2lkICAgICAgICAgZ2xTYW1w
bGVDb3ZlcmFnZSAoaW4gZG91YmxlIHZhbHVlLCBpbiBib29sZWFuIGludmVydCk7CisgICAgICAg
IHZvaWQgICAgICAgICBnbFNjaXNzb3IgKGluIGxvbmcgeCwgaW4gbG9uZyB5LCBpbiB1bnNpZ25l
ZCBsb25nIHdpZHRoLCBpbiB1bnNpZ25lZCBsb25nIGhlaWdodCk7CisgICAgICAgIHZvaWQgICAg
ICAgICBnbFNoYWRlclNvdXJjZSAoaW4gQ2FudmFzU2hhZGVyIHNoYWRlciwgaW4gRE9NU3RyaW5n
IHN0cmluZyk7CisgICAgICAgIHZvaWQgICAgICAgICBnbFN0ZW5jaWxGdW5jIChpbiB1bnNpZ25l
ZCBsb25nIGZ1bmMsIGluIGxvbmcgcmVmLCBpbiB1bnNpZ25lZCBsb25nIG1hc2spOworICAgICAg
ICB2b2lkICAgICAgICAgZ2xTdGVuY2lsRnVuY1NlcGFyYXRlIChpbiB1bnNpZ25lZCBsb25nIGZh
Y2UsIGluIHVuc2lnbmVkIGxvbmcgZnVuYywgaW4gbG9uZyByZWYsIGluIHVuc2lnbmVkIGxvbmcg
bWFzayk7CisgICAgICAgIHZvaWQgICAgICAgICBnbFN0ZW5jaWxNYXNrIChpbiB1bnNpZ25lZCBs
b25nIG1hc2spOworICAgICAgICB2b2lkICAgICAgICAgZ2xTdGVuY2lsTWFza1NlcGFyYXRlIChp
biB1bnNpZ25lZCBsb25nIGZhY2UsIGluIHVuc2lnbmVkIGxvbmcgbWFzayk7CisgICAgICAgIHZv
aWQgICAgICAgICBnbFN0ZW5jaWxPcCAoaW4gdW5zaWduZWQgbG9uZyBmYWlsLCBpbiB1bnNpZ25l
ZCBsb25nIHpmYWlsLCBpbiB1bnNpZ25lZCBsb25nIHpwYXNzKTsKKyAgICAgICAgdm9pZCAgICAg
ICAgIGdsU3RlbmNpbE9wU2VwYXJhdGUgKGluIHVuc2lnbmVkIGxvbmcgZmFjZSwgaW4gdW5zaWdu
ZWQgbG9uZyBmYWlsLCBpbiB1bnNpZ25lZCBsb25nIHpmYWlsLCBpbiB1bnNpZ25lZCBsb25nIHpw
YXNzKTsKKyAgICAgICAgW0N1c3RvbV0gdm9pZCBnbFRleFBhcmFtZXRlcihpbiB1bnNpZ25lZCBs
b25nIHRhcmdldCwgaW4gdW5zaWduZWQgbG9uZyBwbmFtZSwgaW4gQ2FudmFzTnVtYmVyQXJyYXkg
cGFyYW1zKTsKKyAgICAgICAgW0N1c3RvbV0gdm9pZCBnbFVuaWZvcm1pKGluIGxvbmcgbG9jYXRp
b24sIGluIENhbnZhc051bWJlckFycmF5IHBhcmFtcyk7CisgICAgICAgIFtDdXN0b21dIHZvaWQg
Z2xVbmlmb3JtZihpbiBsb25nIGxvY2F0aW9uLCBpbiBDYW52YXNOdW1iZXJBcnJheSBwYXJhbXMp
OworICAgICAgICBbQ3VzdG9tXSB2b2lkIGdsVW5pZm9ybU1hdHJpeChpbiBsb25nIGxvY2F0aW9u
LCBpbiBsb25nIGNvdW50LCBpbiBib29sZWFuIHRyYW5zcG9zZSwgaW4gQ2FudmFzTnVtYmVyQXJy
YXkgcGFyYW1zKTsKKyAgICAgICAgdm9pZCAgICAgICAgIGdsVXNlUHJvZ3JhbSAoaW4gQ2FudmFz
UHJvZ3JhbSBwcm9ncmFtKTsKKyAgICAgICAgdm9pZCAgICAgICAgIGdsVmFsaWRhdGVQcm9ncmFt
IChpbiBDYW52YXNQcm9ncmFtIHByb2dyYW0pOworICAgICAgICBbQ3VzdG9tXSB2b2lkIGdsVmVy
dGV4QXR0cmliIChpbiB1bnNpZ25lZCBsb25nIGluZHgsIGluIENhbnZhc051bWJlckFycmF5KTsK
KyAgICAgICAgW0N1c3RvbV0gdm9pZCBnbFZlcnRleEF0dHJpYlBvaW50ZXIgKGluIHVuc2lnbmVk
IGxvbmcgaW5keCwgaW4gbG9uZyBzaXplLCBpbiB1bnNpZ25lZCBsb25nIHR5cGUsIGluIGJvb2xl
YW4gbm9ybWFsaXplZCwgaW4gdW5zaWduZWQgbG9uZyBzdHJpZGUsIGluIENhbnZhc0J5dGVBcnJh
eSBhcnJheSk7CisgICAgICAgIHZvaWQgICAgICAgICBnbFZpZXdwb3J0IChpbiBsb25nIHgsIGlu
IGxvbmcgeSwgaW4gdW5zaWduZWQgbG9uZyB3aWR0aCwgaW4gdW5zaWduZWQgbG9uZyBoZWlnaHQp
OworCisgICAgICAgIC8vIE5vbi1HTCBmdW5jdGlvbnMKKyAgICAgICAgQ2FudmFzQnVmZmVyIGNy
ZWF0ZUJ1ZmZlcigpOyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlcGxhY2VzIGdsR2VuQnVm
ZmVycworICAgICAgICBDYW52YXNGcmFtZWJ1ZmZlciBjcmVhdGVGcmFtZWJ1ZmZlcigpOyAgICAg
ICAgICAgICAgLy8gcmVwbGFjZXMgZ2xHZW5GcmFtZWJ1ZmZlcnMKKyAgICAgICAgQ2FudmFzUHJv
Z3JhbSBjcmVhdGVQcm9ncmFtICgpOyAgICAgICAgICAgICAgICAgICAgIC8vIHJlcGxhY2VzIGds
Q3JlYXRlUHJvZ3JhbQorICAgICAgICBDYW52YXNTaGFkZXIgY3JlYXRlU2hhZGVyIChpbiB1bnNp
Z25lZCBsb25nIHR5cGUpOyAgLy8gcmVwbGFjZXMgZ2xDcmVhdGVTaGFkZXIKKyAgICAgICAgQ2Fu
dmFzVGV4dHVyZSBjcmVhdGVUZXh0dXJlKCk7ICAgICAgICAgICAgICAgICAgICAgIC8vIHJlcGxh
Y2VzIGdsR2VuVGV4dHVyZXMKKworICAgICAgICB2b2lkIGRlbGV0ZUJ1ZmZlciAoaW4gQ2FudmFz
QnVmZmVyIGJ1ZmZlcik7ICAgICAgICAgICAgICAgIC8vIHJlcGxhY2VzIGdsRGVsZXRlQnVmZmVy
cworICAgICAgICB2b2lkIGRlbGV0ZUZyYW1lYnVmZmVyIChpbiBDYW52YXNGcmFtZWJ1ZmZlciBm
cmFtZWJ1ZmZlcik7ICAgICAgLy8gcmVwbGFjZXMgZ2xEZWxldGVGcmFtZWJ1ZmZlcnMKKyAgICAg
ICAgdm9pZCBkZWxldGVQcm9ncmFtIChpbiBDYW52YXNQcm9ncmFtIHByb2dyYW0pOyAgICAgICAg
ICAgICAgLy8gcmVwbGFjZXMgZ2xEZWxldGVQcm9ncmFtCisgICAgICAgIHZvaWQgZGVsZXRlUmVu
ZGVyYnVmZmVyIChpbiBDYW52YXNSZW5kZXJidWZmZXIgcmVuZGVyYnVmZmVyKTsgICAgLy8gcmVw
bGFjZXMgZ2xEZWxldGVSZW5kZXJidWZmZXJzCisgICAgICAgIHZvaWQgZGVsZXRlU2hhZGVyIChp
biBDYW52YXNTaGFkZXIgc2hhZGVyKTsgICAgICAgICAgICAgICAgLy8gcmVwbGFjZXMgZ2xEZWxl
dGVTaGFkZXIKKyAgICAgICAgdm9pZCBkZWxldGVUZXh0dXJlIChpbiBDYW52YXNUZXh0dXJlIHRl
eHR1cmUpOyAgICAgICAgICAgICAgLy8gcmVwbGFjZXMgZ2xEZWxldGVUZXh0dXJlcworICAgICAg
ICAKKyAgICAgICAgQ2FudmFzTnVtYmVyQXJyYXkgZ2V0KGluIHVuc2lnbmVkIGxvbmcgcG5hbWUp
OyAgICAgIC8vIHJlcGxhY2VzIGdsR2V0Qm9vbGVhbnYsIGdsR2V0RmxvYXR2IGFuZCBnbEdldElu
dGVnZXJ2CisgICAgICAgIENhbnZhc051bWJlckFycmF5IGdldEJ1ZmZlclBhcmFtZXRlciAoaW4g
dW5zaWduZWQgbG9uZyB0YXJnZXQsIGluIHVuc2lnbmVkIGxvbmcgcG5hbWUpOyAvLyByZXBsYWNl
cyBnbEdldEJ1ZmZlclBhcmFtZXRlcml2CisgICAgICAgIENhbnZhc051bWJlckFycmF5IGdldEZy
YW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlciAoaW4gdW5zaWduZWQgbG9uZyB0YXJnZXQsIGlu
IHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwgaW4gdW5zaWduZWQgbG9uZyBwbmFtZSk7IC8vIHJl
cGxhY2VzIGdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYKKyAgICAgICAgQ2Fu
dmFzTnVtYmVyQXJyYXkgZ2V0UHJvZ3JhbSAoaW4gQ2FudmFzUHJvZ3JhbSBwcm9ncmFtLCBpbiB1
bnNpZ25lZCBsb25nIHBuYW1lKTsgLy8gcmVwbGFjZXMgZ2xHZXRQcm9ncmFtaXYKKyAgICAgICAg
RE9NU3RyaW5nIGdsR2V0UHJvZ3JhbUluZm9Mb2cgKGluIENhbnZhc1Byb2dyYW0gcHJvZ3JhbSk7
IC8vIHJlcGxhY2VzIGdsR2V0UHJvZ3JhbUluZm9Mb2cKKyAgICAgICAgQ2FudmFzTnVtYmVyQXJy
YXkgZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyIChpbiB1bnNpZ25lZCBsb25nIHRhcmdldCwgaW4g
dW5zaWduZWQgbG9uZyBwbmFtZSk7IC8vIHJlcGxhY2VzIGdsR2V0UmVuZGVyYnVmZmVyUGFyYW1l
dGVyaXYKKyAgICAgICAgQ2FudmFzTnVtYmVyQXJyYXkgZ2V0U2hhZGVyIChpbiBDYW52YXNTaGFk
ZXIgc2hhZGVyLCBpbiB1bnNpZ25lZCBsb25nIHBuYW1lKTsgLy8gcmVwbGFjZXMgZ2xHZXRTaGFk
ZXJpdgorICAgICAgICBET01TdHJpbmcgZ2xHZXRTaGFkZXJJbmZvTG9nIChpbiBDYW52YXNTaGFk
ZXIgc2hhZGVyKTsKKworICAgICAgICBDYW52YXNOdW1iZXJBcnJheSBnZXRUZXhQYXJhbWV0ZXIg
KGluIHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbiB1bnNpZ25lZCBsb25nIHBuYW1lKTsgLy8gcmVw
bGFjZXMgZ2xHZXRUZXhQYXJhbWV0ZXJmdgorICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IEkg
ZG9uJ3QgbGlrZSB0aGUgaWRlYSBvZiBwYXNzaW5nIGEgc2l6ZSB0byB0aGlzIGZ1bmN0aW9uLiBX
ZSBzaG91bGQgYmUgYWJsZSB0byBmaWd1cmUgaXQgb3V0LgorICAgICAgICAvLyBCdXQgdGhlIG9u
bHkgd2F5IHRvIGRvIHRoYXQgaXMgdG8gc2VhcmNoIHRocm91Z2ggYWxsIGFjdGl2ZSB1bmlmb3Jt
cyBhbmQgZGV0ZXJtaW5lIHRoZSB0eXBlLgorICAgICAgICBDYW52YXNOdW1iZXJBcnJheSBnZXRV
bmlmb3JtIChpbiBDYW52YXNQcm9ncmFtIHByb2dyYW0sIGluIGxvbmcgbG9jYXRpb24sIGluIGxv
bmcgc2l6ZSk7IC8vIHJlcGxhY2VzIGdsR2V0VW5pZm9ybWZ2CisgICAgICAgIAorICAgICAgICBs
b25nIGdldFVuaWZvcm1Mb2NhdGlvbiAoaW4gQ2FudmFzUHJvZ3JhbSBwcm9ncmFtLCBpbiBET01T
dHJpbmcgbmFtZSk7IC8vIHJlcGxhY2VzIGdsR2V0VW5pZm9ybUxvY2F0aW9uCisgICAgICAgIENh
bnZhc051bWJlckFycmF5IGdldFZlcnRleEF0dHJpYiAoaW4gdW5zaWduZWQgbG9uZyBpbmRleCwg
aW4gdW5zaWduZWQgbG9uZyBwbmFtZSk7IC8vIHJlcGxhY2VzIGdsR2V0VmVydGV4QXR0cmliZnYK
KyAgICAgICAgCisgICAgICAgIFtDdXN0b21dIHZvaWQgdGV4SW1hZ2UyRChpbiB1bnNpZ25lZCBs
b25nIHRhcmdldCwgaW4gdW5zaWduZWQgbG9uZyBsZXZlbCwgaW4gSFRNTEltYWdlRWxlbWVudCBp
bWFnZSk7IC8vIHJlcGxhY2VzIGdsVGV4SW1hZ2UyRAorICAgICAgICBbQ3VzdG9tXSB2b2lkIHRl
eFN1YkltYWdlMkQoaW4gdW5zaWduZWQgbG9uZyB0YXJnZXQsIGluIHVuc2lnbmVkIGxvbmcgbGV2
ZWwsIGluIHVuc2lnbmVkIGxvbmcgeG9mZiwgaW4gdW5zaWduZWQgbG9uZyB5b2ZmLCBpbiB1bnNp
Z25lZCBsb25nIHdpZHRoLCBpbiB1bnNpZ25lZCBsb25nIGhlaWdodCwgaW4gSFRNTEltYWdlRWxl
bWVudCBpbWFnZSk7IC8vIHJlcGxhY2VzIGdsVGV4U3ViSW1hZ2UyRAorCisgICAgICAgIC8vIEZJ
WE1FOiBUaGlzIGlzIHRyaWNreS4gV2Ugb2J2aW91c2x5IGNhbid0IHJldHVybiBhIHBvaW50ZXIu
IEJ1dCBzb21ldGltZXMgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIG9mZnNldC4KKyAgICAgICAg
Ly8gQWxzbywgZG8gd2Ugd2FudCB0byB1c2UgdGhpcyB0byBnaXZlIGEgcmVmZXJlbmNlIHRvIGEg
Q2FudmFzTnVtYmVyQXJyYXk/IElmIHNvLCB3b3VsZCB0aGlzIG1lcmVseSBiZSBhIGNvcHkKKyAg
ICAgICAgLy8gb3IgdGhlIGFjdHVhbCBtdXRhYmxlIGFycmF5PworICAgICAgICAvL3ZvaWQgICAg
ICAgICBnbEdldFZlcnRleEF0dHJpYlBvaW50ZXJ2IChpbiB1bnNpZ25lZCBsb25nIGluZGV4LCBp
biB1bnNpZ25lZCBsb25nIHBuYW1lLCB2b2lkKiogcG9pbnRlcik7CisKKyAgICAgICAgLy8gRklY
TUU6IFRoZXNlIHdpbGwgaGF2ZSB0byBiZSBkb25lIGJ5IHJldHVybmluZyBhIGRhdGEgdHlwZSB3
aGljaCBoYXMgdGhlIHJldHVybmVkIGF0dHJpYnV0ZXMKKyAgICAgICAgLy92b2lkIGdsR2V0QWN0
aXZlQXR0cmliIChpbiBDYW52YXNQcm9ncmFtIHByb2dyYW0sIGluIHVuc2lnbmVkIGxvbmcgaW5k
ZXgsIG91dCBsb25nIHNpemUsIG91dCB1bnNpZ25lZCBsb25nIHR5cGUsIG91dCBET01TdHJpbmcg
bmFtZSk7CisgICAgICAgIC8vdm9pZCBnbEdldEFjdGl2ZVVuaWZvcm0gKGluIENhbnZhc1Byb2dy
YW0gcHJvZ3JhbSwgaW4gdW5zaWduZWQgbG9uZyBpbmRleCwgb3V0IGxvbmcgc2l6ZSwgb3V0IHVu
c2lnbmVkIGxvbmcgdHlwZSwgb3V0IERPTVN0cmluZyBuYW1lKTsKKyAgICAgICAgLy92b2lkIGds
R2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0IChpbiB1bnNpZ25lZCBsb25nIHNoYWRlcnR5cGUsIGlu
IHVuc2lnbmVkIGxvbmcgcHJlY2lzaW9udHlwZSwgb3V0IGxvbmcgcmFuZ2VNaW4sIG91dCBsb25n
IHJhbmdlTWF4LCBvdXQgbG9uZyBwcmVjaXNpb24pOworICAgIH07Cit9CisKSW5kZXg6IFdlYkNv
cmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCIKKwor
I2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dChIVE1MQ2FudmFz
RWxlbWVudCogY2FudmFzKQorICAgIDogbV9jYW52YXMoY2FudmFzKQoreworfQorCit2b2lkIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQ6OnJlZigpCit7CisgICAgbV9jYW52YXMtPnJlZigpOworfQor
Cit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQ6OmRlcmVmKCkKK3sKKyAgICBtX2NhbnZhcy0+
ZGVyZWYoKTsgCit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRt
bC9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvaHRtbC9DYW52
YXNSZW5kZXJpbmdDb250ZXh0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0X2gKKyNkZWZpbmUgQ2FudmFzUmVuZGVyaW5nQ29udGV4dF9oCisKKyNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAg
Y2xhc3MgQ2FudmFzT2JqZWN0OworICAgIGNsYXNzIEhUTUxDYW52YXNFbGVtZW50OworCisgICAg
Y2xhc3MgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCA6IE5vbmNvcHlhYmxlIHsKKyAgICBwdWJsaWM6
CisgICAgICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQoSFRNTENhbnZhc0VsZW1lbnQqKTsKKyAg
ICAgICAgdmlydHVhbCB+Q2FudmFzUmVuZGVyaW5nQ29udGV4dCgpIHsgfQorICAgICAgICAKKyAg
ICAgICAgdm9pZCByZWYoKTsKKyAgICAgICAgdm9pZCBkZXJlZigpOworICAgICAgICAKKyAgICAg
ICAgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcygpIGNvbnN0IHsgcmV0dXJuIG1fY2FudmFzOyB9
CisgICAgICAgIAorICAgICAgICB2aXJ0dWFsIGJvb2wgaXMyZCgpIHsgcmV0dXJuIGZhbHNlOyB9
CisgICAgICAgIHZpcnR1YWwgYm9vbCBpczNkKCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAgICAg
dmlydHVhbCBib29sIGlzM2RfMV8xKCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAgICAgdmlydHVh
bCBib29sIGlzM2RfZml4ZWQoKSB7IHJldHVybiBmYWxzZTsgfQorCisgICAgcHJvdGVjdGVkOgor
ICAgICAgICBIVE1MQ2FudmFzRWxlbWVudCogbV9jYW52YXM7CisgICAgfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJp
bmdDb250ZXh0LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dC5pZGwJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dC5pZGwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworbW9kdWxlIGh0bWwgeworCisgICAgaW50
ZXJmYWNlIFsKKyAgICAgICAgR2VuZXJhdGVDb25zdHJ1Y3RvciwKKyAgICAgICAgSW50ZXJmYWNl
VVVJRD05OGZiNDhhZS03MjE2LTQ4OWMtODYyYi04ZTEyMTdmYzQ0NDMsCisgICAgICAgIEltcGxl
bWVudGF0aW9uVVVJRD1hYjRmMDc4MS0xNTJmLTQ1MGUtOTU0Ni01YjM5ODc0OTFhNTQKKyAgICBd
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQgeworCisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBI
VE1MQ2FudmFzRWxlbWVudCBjYW52YXM7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01T
dHJpbmcgdHlwZTsKKyAgICB9OworCit9CisKSW5kZXg6IFdlYkNvcmUvaHRtbC9DYW52YXNTaGFk
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9DYW52YXNTaGFkZXIuY3BwCShyZXZp
c2lvbiAwKQorKysgV2ViQ29yZS9odG1sL0NhbnZhc1NoYWRlci5jcHAJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIg
dGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMg
b2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRSgz
RF9DQU5WQVMpCisKKyNpbmNsdWRlICJDYW52YXNTaGFkZXIuaCIKKworI2luY2x1ZGUgPE9wZW5H
TC9PcGVuR0wuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorICAgIFBhc3NSZWZQdHI8
Q2FudmFzU2hhZGVyPiBDYW52YXNTaGFkZXI6OmNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dCwgdW5zaWduZWQgdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
Q2FudmFzU2hhZGVyKGNvbnRleHQsIHR5cGUpKTsKKyAgICB9CisgICAgCisgICAgQ2FudmFzU2hh
ZGVyOjpDYW52YXNTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIHVuc2lnbmVkIHR5
cGUpCisgICAgOiBDYW52YXNPYmplY3QoY29udGV4dCkKKyAgICB7CisgICAgICAgIEdMdWludCBv
ID0gZ2xDcmVhdGVTaGFkZXIodHlwZSk7CisgICAgICAgIHNldE9iamVjdChvKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBDYW52YXNTaGFkZXI6Ol9kZWxldGVPYmplY3QoUGxhdGZvcm0zRE9iamVj
dCBvYmplY3QpCisgICAgeworICAgICAgICBnbERlbGV0ZVNoYWRlcihvYmplY3QpOworICAgIH0K
K30KKworI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCkluZGV4OiBXZWJDb3JlL2h0bWwvQ2Fu
dmFzU2hhZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0NhbnZhc1NoYWRlci5oCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9odG1sL0NhbnZhc1NoYWRlci5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVz
IG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENhbnZhc1NoYWRlcl9oCisjZGVmaW5lIENh
bnZhc1NoYWRlcl9oCisKKyNpbmNsdWRlICJDYW52YXNPYmplY3QuaCIKKworI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworICAgIAorICAgIGNsYXNzIENhbnZhc1NoYWRlciA6IHB1YmxpYyBDYW52YXNP
YmplY3QgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB+Q2FudmFzU2hhZGVyKCkgeyBk
ZWxldGVPYmplY3QoKTsgfQorICAgICAgICAKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2Fu
dmFzU2hhZGVyPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqLCB1bnNpZ25lZCB0eXBlKTsKKyAg
ICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgQ2FudmFzU2hhZGVyKEdyYXBoaWNzQ29udGV4
dDNEKiwgdW5zaWduZWQgdHlwZSk7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIF9kZWxldGVPYmpl
Y3QoUGxhdGZvcm0zRE9iamVjdCk7CisgICAgfTsKKyAgICAKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIENhbnZhc1NoYWRlcl9oCkluZGV4OiBXZWJDb3JlL2h0bWwvQ2FudmFz
U2hhZGVyLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvQ2FudmFzU2hhZGVyLmlkbAko
cmV2aXNpb24gMCkKKysrIFdlYkNvcmUvaHRtbC9DYW52YXNTaGFkZXIuaWRsCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0
aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5h
bWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCittb2R1bGUgaHRtbCB7CisgICAgaW50ZXJmYWNlIFtD
b25kaXRpb25hbD0zRF9DQU5WQVNdIENhbnZhc1NoYWRlciB7CisgICAgfTsKK30KSW5kZXg6IFdl
YkNvcmUvaHRtbC9DYW52YXNUZXh0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
Q2FudmFzVGV4dHVyZS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2h0bWwvQ2FudmFzVGV4
dHVyZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
KCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisKKyNpbmNsdWRlICJDYW52YXNUZXh0
dXJlLmgiCisKKyNpbmNsdWRlIDxPcGVuR0wvT3BlbkdMLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKyAgICAKKyAgICBQYXNzUmVmUHRyPENhbnZhc1RleHR1cmU+IENhbnZhc1RleHR1cmU6OmNy
ZWF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgQ2FudmFzVGV4dHVyZShjb250ZXh0KSk7CisgICAgfQorICAgIAorICAgIENh
bnZhc1RleHR1cmU6OkNhbnZhc1RleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCisg
ICAgOiBDYW52YXNPYmplY3QoY29udGV4dCkKKyAgICB7CisgICAgICAgIEdMdWludCBvOworICAg
ICAgICBnbEdlblRleHR1cmVzKDEsICZvKTsKKyAgICAgICAgc2V0T2JqZWN0KG8pOworICAgIH0K
KyAgICAKKyAgICB2b2lkIENhbnZhc1RleHR1cmU6Ol9kZWxldGVPYmplY3QoUGxhdGZvcm0zRE9i
amVjdCBvYmplY3QpCisgICAgeworICAgICAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZvYmplY3Qp
OworICAgIH0KK30KKworI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCkluZGV4OiBXZWJDb3Jl
L2h0bWwvQ2FudmFzVGV4dHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9DYW52YXNU
ZXh0dXJlLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2h0bWwvQ2FudmFzVGV4dHVyZS5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAy
MDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
IDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBu
b3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENhbnZhc1RleHR1cmVf
aAorI2RlZmluZSBDYW52YXNUZXh0dXJlX2gKKworI2luY2x1ZGUgIkNhbnZhc09iamVjdC5oIgor
CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCisgICAgY2xhc3MgQ2FudmFzVGV4dHVyZSA6
IHB1YmxpYyBDYW52YXNPYmplY3QgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB+Q2Fu
dmFzVGV4dHVyZSgpIHsgZGVsZXRlT2JqZWN0KCk7IH0KKyAgICAgICAgCisgICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPENhbnZhc1RleHR1cmU+IGNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCopOwor
ICAgIAorICAgIHByb3RlY3RlZDoKKyAgICAgICAgQ2FudmFzVGV4dHVyZShHcmFwaGljc0NvbnRl
eHQzRCopOworCisgICAgICAgIHZpcnR1YWwgdm9pZCBfZGVsZXRlT2JqZWN0KFBsYXRmb3JtM0RP
YmplY3QpOworICAgIH07CisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBDYW52YXNUZXh0dXJlX2gKSW5kZXg6IFdlYkNvcmUvaHRtbC9DYW52YXNUZXh0dXJlLmlkbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvQ2FudmFzVGV4dHVyZS5pZGwJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL2h0bWwvQ2FudmFzVGV4dHVyZS5pZGwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5h
bWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAq
ICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKK21vZHVsZSBodG1sIHsKKyAgICBpbnRlcmZhY2UgW0NvbmRpdGlvbmFs
PTNEX0NBTlZBU10gQ2FudmFzVGV4dHVyZSB7CisgICAgfTsKK30KSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQs
IDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCit2b2lkICBHcmFwaGljc0NvbnRleHQzRDo6cmVtb3Zl
T2JqZWN0KENhbnZhc09iamVjdCogb2JqZWN0KQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9jYW52YXNPYmplY3RzLnNpemUoKTsgKytpKQorICAgICAgICBpZiAobV9jYW52YXNPYmpl
Y3RzW2ldID09IG9iamVjdCkgeworICAgICAgICAgICAgbV9jYW52YXNPYmplY3RzLnJlbW92ZShp
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorfQorCit2b2lkICBHcmFwaGljc0Nv
bnRleHQzRDo6YWRkT2JqZWN0KENhbnZhc09iamVjdCogb2JqZWN0KQoreworICAgIHJlbW92ZU9i
amVjdChvYmplY3QpOworICAgIG1fY2FudmFzT2JqZWN0cy5hcHBlbmQob2JqZWN0KTsKK30KKyAg
ICAKKyAgICAKK30KKworI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDIyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiwg
MjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEdy
YXBoaWNzQ29udGV4dDNEX2gKKyNkZWZpbmUgR3JhcGhpY3NDb250ZXh0M0RfaAorCisjaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKKworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCisj
aWYgUExBVEZPUk0oTUFDKQorI2luY2x1ZGUgPE9wZW5HTC9PcGVuR0wuaD4KKwordHlwZWRlZiB2
b2lkKiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEOwordHlwZWRlZiBHTHVpbnQgUGxhdGZvcm0z
RE9iamVjdDsKKyNlbHNlCit0eXBlZGVmIHZvaWQqIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0Q7
Cit0eXBlZGVmIGludCBQbGF0Zm9ybTNET2JqZWN0OworI2VuZGlmCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKyAgICBjbGFzcyBDYW52YXNCdWZmZXI7CisgICAgY2xhc3MgQ2FudmFzRnJhbWVidWZm
ZXI7CisgICAgY2xhc3MgQ2FudmFzTnVtYmVyQXJyYXk7CisgICAgY2xhc3MgQ2FudmFzT2JqZWN0
OworICAgIGNsYXNzIENhbnZhc1Byb2dyYW07CisgICAgY2xhc3MgQ2FudmFzUmVuZGVyYnVmZmVy
OworICAgIGNsYXNzIENhbnZhc1NoYWRlcjsKKyAgICBjbGFzcyBDYW52YXNUZXh0dXJlOworICAg
IGNsYXNzIEhUTUxDYW52YXNFbGVtZW50OworICAgIGNsYXNzIEhUTUxJbWFnZUVsZW1lbnQ7Cisg
ICAgY2xhc3MgV2ViS2l0Q1NTTWF0cml4OworICAgIAorICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4
dDNEIDogTm9uY29weWFibGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0
M0QoKTsKKyAgICAgICAgdmlydHVhbCB+R3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICAgICAKKyAg
ICAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNE
KCkgY29uc3Q7CisgICAgICAgIAorICAgICAgICB2b2lkIGNoZWNrRXJyb3IoKSBjb25zdDsKKyAg
ICAgICAgCisgICAgICAgIHZpcnR1YWwgdm9pZCBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIHJlbW92ZU9iamVjdChDYW52YXNPYmplY3QqKTsKKyAgICAgICAgCisg
ICAgICAgIHZvaWQgZ2xBY3RpdmVUZXh0dXJlICh1bnNpZ25lZCBsb25nIHRleHR1cmUpOworICAg
ICAgICB2b2lkIGdsQXR0YWNoU2hhZGVyIChDYW52YXNQcm9ncmFtKiBwcm9ncmFtLCBDYW52YXNT
aGFkZXIqIHNoYWRlcik7CisgICAgICAgIHZvaWQgZ2xCaW5kQXR0cmliTG9jYXRpb24gKENhbnZh
c1Byb2dyYW0qLCB1bnNpZ25lZCBsb25nIGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpOworICAg
ICAgICB2b2lkIGdsQmluZEJ1ZmZlciAodW5zaWduZWQgbG9uZyB0YXJnZXQsIENhbnZhc0J1ZmZl
ciopOworICAgICAgICB2b2lkIGdsQmluZEZyYW1lYnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0
LCBDYW52YXNGcmFtZWJ1ZmZlciopOworICAgICAgICB2b2lkIGdsQmluZFJlbmRlcmJ1ZmZlciAo
dW5zaWduZWQgbG9uZyB0YXJnZXQsIENhbnZhc1JlbmRlcmJ1ZmZlciopOworICAgICAgICB2b2lk
IGdsQmluZFRleHR1cmUodW5zaWduZWQgdGFyZ2V0LCBDYW52YXNUZXh0dXJlKiB0ZXh0dXJlM0Qp
OworICAgICAgICB2b2lkIGdsQmxlbmRDb2xvciAoZG91YmxlIHJlZCwgZG91YmxlIGdyZWVuLCBk
b3VibGUgYmx1ZSwgZG91YmxlIGFscGhhKTsKKyAgICAgICAgdm9pZCBnbEJsZW5kRXF1YXRpb24g
KCB1bnNpZ25lZCBsb25nIG1vZGUgKTsKKyAgICAgICAgdm9pZCBnbEJsZW5kRXF1YXRpb25TZXBh
cmF0ZSAodW5zaWduZWQgbG9uZyBtb2RlUkdCLCB1bnNpZ25lZCBsb25nIG1vZGVBbHBoYSk7Cisg
ICAgICAgIHZvaWQgZ2xCbGVuZEZ1bmMgKHVuc2lnbmVkIGxvbmcgc2ZhY3RvciwgdW5zaWduZWQg
bG9uZyBkZmFjdG9yKTsKKyAgICAgICAgdm9pZCBnbEJsZW5kRnVuY1NlcGFyYXRlICh1bnNpZ25l
ZCBsb25nIHNyY1JHQiwgdW5zaWduZWQgbG9uZyBkc3RSR0IsIHVuc2lnbmVkIGxvbmcgc3JjQWxw
aGEsIHVuc2lnbmVkIGxvbmcgZHN0QWxwaGEpOworICAgICAgICB2b2lkIGdsQnVmZmVyRGF0YSAo
dW5zaWduZWQgbG9uZyB0YXJnZXQsIENhbnZhc051bWJlckFycmF5KiwgdW5zaWduZWQgbG9uZyB1
c2FnZSk7CisgICAgICAgIHZvaWQgZ2xCdWZmZXJTdWJEYXRhICh1bnNpZ25lZCBsb25nIHRhcmdl
dCwgbG9uZyBvZmZzZXQsIENhbnZhc051bWJlckFycmF5Kik7CisgICAgICAgIHVuc2lnbmVkIGxv
bmcgZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzIChDYW52YXNGcmFtZWJ1ZmZlciopOworICAgICAg
ICB2b2lkIGdsQ2xlYXIgKHVuc2lnbmVkIGxvbmcgbWFzayk7CisgICAgICAgIHZvaWQgZ2xDbGVh
ckNvbG9yIChkb3VibGUgcmVkLCBkb3VibGUgZ3JlZW4sIGRvdWJsZSBibHVlLCBkb3VibGUgYWxw
aGEpOworICAgICAgICB2b2lkIGdsQ2xlYXJEZXB0aCAoZG91YmxlIGRlcHRoKTsKKyAgICAgICAg
dm9pZCBnbENsZWFyU3RlbmNpbCAobG9uZyBzKTsKKyAgICAgICAgdm9pZCBnbENvbG9yTWFzayAo
Ym9vbCByZWQsIGJvb2wgZ3JlZW4sIGJvb2wgYmx1ZSwgYm9vbCBhbHBoYSk7CisgICAgICAgIHZv
aWQgZ2xDb21waWxlU2hhZGVyIChDYW52YXNTaGFkZXIqKTsKKyAgICAgICAgCisgICAgICAgIC8v
dm9pZCBnbENvbXByZXNzZWRUZXhJbWFnZTJEICh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBs
ZXZlbCwgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgbG9uZyB3aWR0aCwg
dW5zaWduZWQgbG9uZyBoZWlnaHQsIGxvbmcgYm9yZGVyLCB1bnNpZ25lZCBsb25nIGltYWdlU2l6
ZSwgY29uc3Qgdm9pZCogZGF0YSk7CisgICAgICAgIC8vdm9pZCBnbENvbXByZXNzZWRUZXhTdWJJ
bWFnZTJEICh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBsZXZlbCwgbG9uZyB4b2Zmc2V0LCBs
b25nIHlvZmZzZXQsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCB1
bnNpZ25lZCBsb25nIGZvcm1hdCwgdW5zaWduZWQgbG9uZyBpbWFnZVNpemUsIGNvbnN0IHZvaWQq
IGRhdGEpOworICAgICAgICAKKyAgICAgICAgdm9pZCBnbENvcHlUZXhJbWFnZTJEICh1bnNpZ25l
ZCBsb25nIHRhcmdldCwgbG9uZyBsZXZlbCwgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwg
bG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0
LCBsb25nIGJvcmRlcik7CisgICAgICAgIHZvaWQgZ2xDb3B5VGV4U3ViSW1hZ2UyRCAodW5zaWdu
ZWQgbG9uZyB0YXJnZXQsIGxvbmcgbGV2ZWwsIGxvbmcgeG9mZnNldCwgbG9uZyB5b2Zmc2V0LCBs
b25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQp
OworICAgICAgICB2b2lkIGdsQ3VsbEZhY2UgKHVuc2lnbmVkIGxvbmcgbW9kZSk7CisgICAgICAg
IHZvaWQgZ2xEZXB0aEZ1bmMgKHVuc2lnbmVkIGxvbmcgZnVuYyk7CisgICAgICAgIHZvaWQgZ2xE
ZXB0aE1hc2sgKGJvb2wgZmxhZyk7CisgICAgICAgIHZvaWQgZ2xEZXB0aFJhbmdlIChkb3VibGUg
ek5lYXIsIGRvdWJsZSB6RmFyKTsKKyAgICAgICAgdm9pZCBnbERldGFjaFNoYWRlciAoQ2FudmFz
UHJvZ3JhbSosIENhbnZhc1NoYWRlciopOworICAgICAgICB2b2lkIGdsRGlzYWJsZSAodW5zaWdu
ZWQgbG9uZyBjYXApOworICAgICAgICB2b2lkIGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5ICh1
bnNpZ25lZCBsb25nIGluZGV4KTsKKyAgICAgICAgdm9pZCBnbERyYXdBcnJheXMgKHVuc2lnbmVk
IGxvbmcgbW9kZSwgbG9uZyBmaXJzdCwgdW5zaWduZWQgbG9uZyBjb3VudCk7CisgICAgICAgIHZv
aWQgZ2xEcmF3RWxlbWVudHModW5zaWduZWQgbG9uZyBtb2RlLCB1bnNpZ25lZCBsb25nIGNvdW50
LCB1bnNpZ25lZCBsb25nIHR5cGUsIHZvaWQqIGFycmF5KTsKKyAgICAgICAgdm9pZCBnbEVuYWJs
ZSAodW5zaWduZWQgbG9uZyBjYXApOworICAgICAgICB2b2lkIGdsRW5hYmxlVmVydGV4QXR0cmli
QXJyYXkgKHVuc2lnbmVkIGxvbmcgaW5kZXgpOworICAgICAgICB2b2lkIGdsRmluaXNoICgpOwor
ICAgICAgICB2b2lkIGdsRmx1c2ggKCk7CisgICAgICAgIHZvaWQgZ2xGcmFtZWJ1ZmZlclJlbmRl
cmJ1ZmZlciAodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwg
dW5zaWduZWQgbG9uZyByZW5kZXJidWZmZXJ0YXJnZXQsIENhbnZhc1JlbmRlcmJ1ZmZlciopOwor
ICAgICAgICB2b2lkIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQgKHVuc2lnbmVkIGxvbmcgdGFyZ2V0
LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVkIGxvbmcgdGV4dGFyZ2V0LCBDYW52
YXNUZXh0dXJlKiwgbG9uZyBsZXZlbCk7CisgICAgICAgIHZvaWQgZ2xGcm9udEZhY2UgKHVuc2ln
bmVkIGxvbmcgbW9kZSk7CisgICAgICAgIHZvaWQgZ2xHZW5lcmF0ZU1pcG1hcCAodW5zaWduZWQg
bG9uZyB0YXJnZXQpOworICAgICAgICAKKyAgICAgICAgaW50ICBnbEdldEF0dHJpYkxvY2F0aW9u
IChDYW52YXNQcm9ncmFtKiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICAgICAgdW5zaWduZWQg
bG9uZyBnbEdldEVycm9yICgpOworICAgICAgICBTdHJpbmcgZ2xHZXRTdHJpbmcgKHVuc2lnbmVk
IGxvbmcgbmFtZSk7CisgICAgICAgIHZvaWQgZ2xIaW50ICh1bnNpZ25lZCBsb25nIHRhcmdldCwg
dW5zaWduZWQgbG9uZyBtb2RlKTsKKyAgICAgICAgYm9vbCBnbElzQnVmZmVyIChDYW52YXNCdWZm
ZXIqKTsKKyAgICAgICAgYm9vbCBnbElzRW5hYmxlZCAodW5zaWduZWQgbG9uZyBjYXApOworICAg
ICAgICBib29sIGdsSXNGcmFtZWJ1ZmZlciAoQ2FudmFzRnJhbWVidWZmZXIqKTsKKyAgICAgICAg
Ym9vbCBnbElzUHJvZ3JhbSAoQ2FudmFzUHJvZ3JhbSopOworICAgICAgICBib29sIGdsSXNSZW5k
ZXJidWZmZXIgKENhbnZhc1JlbmRlcmJ1ZmZlciopOworICAgICAgICBib29sIGdsSXNTaGFkZXIg
KENhbnZhc1NoYWRlciopOworICAgICAgICBib29sIGdsSXNUZXh0dXJlIChDYW52YXNUZXh0dXJl
Kik7CisgICAgICAgIHZvaWQgZ2xMaW5lV2lkdGggKGRvdWJsZSB3aWR0aCk7CisgICAgICAgIHZv
aWQgZ2xMaW5rUHJvZ3JhbSAoQ2FudmFzUHJvZ3JhbSopOworICAgICAgICB2b2lkIGdsUGl4ZWxT
dG9yZWkgKHVuc2lnbmVkIGxvbmcgcG5hbWUsIGxvbmcgcGFyYW0pOworICAgICAgICB2b2lkIGds
UG9seWdvbk9mZnNldCAoZG91YmxlIGZhY3RvciwgZG91YmxlIHVuaXRzKTsKKyAgICAgICAgCisg
ICAgICAgIC8vdm9pZCBnbFJlYWRQaXhlbHMgKGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25n
IHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCwgdW5zaWduZWQgbG9uZyBmb3JtYXQsIHVuc2ln
bmVkIGxvbmcgdHlwZSwgdm9pZCogcGl4ZWxzKTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgZ2xS
ZWxlYXNlU2hhZGVyQ29tcGlsZXIgKCk7CisgICAgICAgIHZvaWQgZ2xSZW5kZXJidWZmZXJTdG9y
YWdlICh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwg
dW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpOworICAgICAgICB2b2lk
IGdsU2FtcGxlQ292ZXJhZ2UgKGRvdWJsZSB2YWx1ZSwgYm9vbCBpbnZlcnQpOworICAgICAgICB2
b2lkIGdsU2Npc3NvciAobG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2ln
bmVkIGxvbmcgaGVpZ2h0KTsKKyAgICAgICAgdm9pZCBnbFNoYWRlclNvdXJjZSAoQ2FudmFzU2hh
ZGVyKiwgY29uc3QgU3RyaW5nJiBzdHJpbmcpOworICAgICAgICB2b2lkIGdsU3RlbmNpbEZ1bmMg
KHVuc2lnbmVkIGxvbmcgZnVuYywgbG9uZyByZWYsIHVuc2lnbmVkIGxvbmcgbWFzayk7CisgICAg
ICAgIHZvaWQgZ2xTdGVuY2lsRnVuY1NlcGFyYXRlICh1bnNpZ25lZCBsb25nIGZhY2UsIHVuc2ln
bmVkIGxvbmcgZnVuYywgbG9uZyByZWYsIHVuc2lnbmVkIGxvbmcgbWFzayk7CisgICAgICAgIHZv
aWQgZ2xTdGVuY2lsTWFzayAodW5zaWduZWQgbG9uZyBtYXNrKTsKKyAgICAgICAgdm9pZCBnbFN0
ZW5jaWxNYXNrU2VwYXJhdGUgKHVuc2lnbmVkIGxvbmcgZmFjZSwgdW5zaWduZWQgbG9uZyBtYXNr
KTsKKyAgICAgICAgdm9pZCBnbFN0ZW5jaWxPcCAodW5zaWduZWQgbG9uZyBmYWlsLCB1bnNpZ25l
ZCBsb25nIHpmYWlsLCB1bnNpZ25lZCBsb25nIHpwYXNzKTsKKyAgICAgICAgdm9pZCBnbFN0ZW5j
aWxPcFNlcGFyYXRlICh1bnNpZ25lZCBsb25nIGZhY2UsIHVuc2lnbmVkIGxvbmcgZmFpbCwgdW5z
aWduZWQgbG9uZyB6ZmFpbCwgdW5zaWduZWQgbG9uZyB6cGFzcyk7CisgICAgICAgIHZvaWQgZ2xU
ZXhQYXJhbWV0ZXIodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBwbmFtZSwgQ2FudmFzTnVtYmVy
QXJyYXkqKTsKKyAgICAgICAgdm9pZCBnbFRleFBhcmFtZXRlcih1bnNpZ25lZCB0YXJnZXQsIHVu
c2lnbmVkIHBuYW1lLCBkb3VibGUgdmFsdWUpOworICAgICAgICB2b2lkIGdsVW5pZm9ybShsb25n
IGxvY2F0aW9uLCBmbG9hdCB2MCk7CisgICAgICAgIHZvaWQgZ2xVbmlmb3JtKGxvbmcgbG9jYXRp
b24sIGZsb2F0IHYwLCBmbG9hdCB2MSk7CisgICAgICAgIHZvaWQgZ2xVbmlmb3JtKGxvbmcgbG9j
YXRpb24sIGZsb2F0IHYwLCBmbG9hdCB2MSwgZmxvYXQgdjIpOworICAgICAgICB2b2lkIGdsVW5p
Zm9ybShsb25nIGxvY2F0aW9uLCBmbG9hdCB2MCwgZmxvYXQgdjEsIGZsb2F0IHYyLCBmbG9hdCB2
Myk7CisgICAgICAgIHZvaWQgZ2xVbmlmb3JtKGxvbmcgbG9jYXRpb24sIGludCB2MCk7CisgICAg
ICAgIHZvaWQgZ2xVbmlmb3JtKGxvbmcgbG9jYXRpb24sIGludCB2MCwgaW50IHYxKTsKKyAgICAg
ICAgdm9pZCBnbFVuaWZvcm0obG9uZyBsb2NhdGlvbiwgaW50IHYwLCBpbnQgdjEsIGludCB2Mik7
CisgICAgICAgIHZvaWQgZ2xVbmlmb3JtKGxvbmcgbG9jYXRpb24sIGludCB2MCwgaW50IHYxLCBp
bnQgdjIsIGludCB2Myk7CisgICAgICAgIHZvaWQgZ2xVbmlmb3JtKGxvbmcgbG9jYXRpb24sIENh
bnZhc051bWJlckFycmF5Kik7CisgICAgICAgIHZvaWQgZ2xVbmlmb3JtTWF0cml4KGxvbmcgbG9j
YXRpb24sIGxvbmcgY291bnQsIGJvb2wgdHJhbnNwb3NlLCBDYW52YXNOdW1iZXJBcnJheSopOwor
ICAgICAgICB2b2lkIGdsVW5pZm9ybU1hdHJpeChsb25nIGxvY2F0aW9uLCBib29sIHRyYW5zcG9z
ZSwgY29uc3QgVmVjdG9yPFdlYktpdENTU01hdHJpeCo+Jik7CisgICAgICAgIHZvaWQgZ2xVbmlm
b3JtTWF0cml4KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBjb25zdCBXZWJLaXRDU1NN
YXRyaXgqKTsKKyAgICAgICAgdm9pZCBnbFVzZVByb2dyYW0gKENhbnZhc1Byb2dyYW0qKTsKKyAg
ICAgICAgdm9pZCBnbFZhbGlkYXRlUHJvZ3JhbSAoQ2FudmFzUHJvZ3JhbSopOworICAgICAgICB2
b2lkIGdsVmVydGV4QXR0cmliICh1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHYwKTsKKyAgICAg
ICAgdm9pZCBnbFZlcnRleEF0dHJpYiAodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCB2MCwgZmxv
YXQgdjEpOworICAgICAgICB2b2lkIGdsVmVydGV4QXR0cmliICh1bnNpZ25lZCBsb25nIGluZHgs
IGZsb2F0IHYwLCBmbG9hdCB2MSwgZmxvYXQgdjIpOworICAgICAgICB2b2lkIGdsVmVydGV4QXR0
cmliICh1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHYwLCBmbG9hdCB2MSwgZmxvYXQgdjIsIGZs
b2F0IHYzKTsKKyAgICAgICAgdm9pZCBnbFZlcnRleEF0dHJpYiAodW5zaWduZWQgbG9uZyBpbmR4
LCBDYW52YXNOdW1iZXJBcnJheSopOworICAgICAgICB2b2lkIGdsVmVydGV4QXR0cmliUG9pbnRl
ciAodW5zaWduZWQgbG9uZyBpbmR4LCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgdHlwZSwgYm9v
bCBub3JtYWxpemVkLCB1bnNpZ25lZCBsb25nIHN0cmlkZSwgQ2FudmFzTnVtYmVyQXJyYXkqKTsK
KyAgICAgICAgdm9pZCBnbFZpZXdwb3J0IChsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3
aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpOworICAgICAgICAKKyAgICAgICAgLy8gTm9uLUdM
IGZ1bmN0aW9ucworICAgICAgICBQYXNzUmVmUHRyPENhbnZhc0J1ZmZlcj4gY3JlYXRlQnVmZmVy
KCk7CisgICAgICAgIFBhc3NSZWZQdHI8Q2FudmFzRnJhbWVidWZmZXI+IGNyZWF0ZUZyYW1lYnVm
ZmVyKCk7CisgICAgICAgIFBhc3NSZWZQdHI8Q2FudmFzUHJvZ3JhbT4gY3JlYXRlUHJvZ3JhbSAo
KTsgICAgICAgICAgICAgICAgICAgICAvLyByZXBsYWNlcyBnbENyZWF0ZVByb2dyYW0KKyAgICAg
ICAgUGFzc1JlZlB0cjxDYW52YXNSZW5kZXJidWZmZXI+IGNyZWF0ZVJlbmRlcmJ1ZmZlcigpOwor
ICAgICAgICBQYXNzUmVmUHRyPENhbnZhc1NoYWRlcj4gY3JlYXRlU2hhZGVyICh1bnNpZ25lZCBs
b25nIHR5cGUpOyAgLy8gcmVwbGFjZXMgZ2xDcmVhdGVTaGFkZXIKKyAgICAgICAgUGFzc1JlZlB0
cjxDYW52YXNUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKCk7CisgICAgICAgIAorICAgICAgICB2b2lk
IGRlbGV0ZUJ1ZmZlciAoQ2FudmFzQnVmZmVyKik7ICAgICAgICAgICAgICAgIC8vIHJlcGxhY2Vz
IGdsRGVsZXRlQnVmZmVycworICAgICAgICB2b2lkIGRlbGV0ZUZyYW1lYnVmZmVyIChDYW52YXNG
cmFtZWJ1ZmZlciopOyAgICAgIC8vIHJlcGxhY2VzIGdsRGVsZXRlRnJhbWVidWZmZXJzCisgICAg
ICAgIHZvaWQgZGVsZXRlUHJvZ3JhbSAoQ2FudmFzUHJvZ3JhbSopOyAgICAgICAgICAgICAgLy8g
cmVwbGFjZXMgZ2xEZWxldGVQcm9ncmFtCisgICAgICAgIHZvaWQgZGVsZXRlUmVuZGVyYnVmZmVy
IChDYW52YXNSZW5kZXJidWZmZXIqKTsgICAgLy8gcmVwbGFjZXMgZ2xEZWxldGVSZW5kZXJidWZm
ZXJzCisgICAgICAgIHZvaWQgZGVsZXRlU2hhZGVyIChDYW52YXNTaGFkZXIqKTsgICAgICAgICAg
ICAgICAgLy8gcmVwbGFjZXMgZ2xEZWxldGVTaGFkZXIKKyAgICAgICAgdm9pZCBkZWxldGVUZXh0
dXJlIChDYW52YXNUZXh0dXJlKik7ICAgICAgICAgICAgICAvLyByZXBsYWNlcyBnbERlbGV0ZVRl
eHR1cmVzCisgICAgICAgIAorICAgICAgICBQYXNzUmVmUHRyPENhbnZhc051bWJlckFycmF5PiBn
ZXQodW5zaWduZWQgbG9uZyBwbmFtZSk7ICAgICAgLy8gcmVwbGFjZXMgZ2xHZXRCb29sZWFudgor
ICAgICAgICBQYXNzUmVmUHRyPENhbnZhc051bWJlckFycmF5PiBnZXRCdWZmZXJQYXJhbWV0ZXIg
KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lKTsgLy8gcmVwbGFjZXMg
Z2xHZXRCdWZmZXJQYXJhbWV0ZXJpdgorICAgICAgICBQYXNzUmVmUHRyPENhbnZhc051bWJlckFy
cmF5PiBnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIgKHVuc2lnbmVkIGxvbmcgdGFy
Z2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVkIGxvbmcgcG5hbWUpOyAvLyBy
ZXBsYWNlcyBnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2CisgICAgICAgIFBh
c3NSZWZQdHI8Q2FudmFzTnVtYmVyQXJyYXk+IGdldFByb2dyYW0gKENhbnZhc1Byb2dyYW0qLCB1
bnNpZ25lZCBsb25nIHBuYW1lKTsgLy8gcmVwbGFjZXMgZ2xHZXRQcm9ncmFtaXYKKyAgICAgICAg
U3RyaW5nIGdsR2V0UHJvZ3JhbUluZm9Mb2cgKENhbnZhc1Byb2dyYW0qKTsgLy8gcmVwbGFjZXMg
Z2xHZXRQcm9ncmFtSW5mb0xvZworICAgICAgICBQYXNzUmVmUHRyPENhbnZhc051bWJlckFycmF5
PiBnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIgKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25l
ZCBsb25nIHBuYW1lKTsgLy8gcmVwbGFjZXMgZ2xHZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdgor
ICAgICAgICBQYXNzUmVmUHRyPENhbnZhc051bWJlckFycmF5PiBnZXRTaGFkZXIgKENhbnZhc1No
YWRlciosIHVuc2lnbmVkIGxvbmcgcG5hbWUpOyAvLyByZXBsYWNlcyBnbEdldFNoYWRlcml2Cisg
ICAgICAgIFN0cmluZyBnbEdldFNoYWRlckluZm9Mb2cgKENhbnZhc1NoYWRlciopOworICAgICAg
ICBTdHJpbmcgZ2xHZXRTaGFkZXJTb3VyY2UgKENhbnZhc1NoYWRlciopOworICAgICAgICAKKyAg
ICAgICAgUGFzc1JlZlB0cjxDYW52YXNOdW1iZXJBcnJheT4gZ2V0VGV4UGFyYW1ldGVyICh1bnNp
Z25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSk7IC8vIHJlcGxhY2VzIGdsR2V0
VGV4UGFyYW1ldGVyZnYKKyAgICAgICAgUGFzc1JlZlB0cjxDYW52YXNOdW1iZXJBcnJheT4gZ2V0
VW5pZm9ybSAoQ2FudmFzUHJvZ3JhbSosIGxvbmcgbG9jYXRpb24sIGxvbmcgc2l6ZSk7IC8vIHJl
cGxhY2VzIGdsR2V0VW5pZm9ybWZ2CisgICAgICAgIGxvbmcgZ2V0VW5pZm9ybUxvY2F0aW9uIChD
YW52YXNQcm9ncmFtKiwgY29uc3QgU3RyaW5nJiBuYW1lKTsgLy8gcmVwbGFjZXMgZ2xHZXRVbmlm
b3JtTG9jYXRpb24KKyAgICAgICAgUGFzc1JlZlB0cjxDYW52YXNOdW1iZXJBcnJheT4gZ2V0VmVy
dGV4QXR0cmliICh1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIHBuYW1lKTsgLy8g
cmVwbGFjZXMgZ2xHZXRWZXJ0ZXhBdHRyaWJmdgorICAgICAgICAKKyAgICAgICAgLy8gVGhlc2Ug
bmV4dCA0IGZ1bmN0aW9ucyByZXR1cm4gYW4gZXJyb3IgY29kZSAoMCBpZiBubyBlcnJvcnMpIHJh
dGhlciB0aGFuIHVzaW5nIGFuIEV4Y2VwdGlvbkNvZGUuCisgICAgICAgIC8vIEN1cnJlbnRseSB0
aGV5IHJldHVybiAtMSBvbiBhbnkgZXJyb3IuCisgICAgICAgIGludCB0ZXhJbWFnZTJEKHVuc2ln
bmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlKTsKKyAg
ICAgICAgaW50IHRleEltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgSFRN
TENhbnZhc0VsZW1lbnQqIGNhbnZhcyk7CisgICAgICAgIGludCB0ZXhTdWJJbWFnZTJEKHVuc2ln
bmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIHhvZmYsIHVuc2lnbmVkIHlvZmYs
IHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdl
KTsKKyAgICAgICAgaW50IHRleFN1YkltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBs
ZXZlbCwgdW5zaWduZWQgeG9mZiwgdW5zaWduZWQgeW9mZiwgdW5zaWduZWQgd2lkdGgsIHVuc2ln
bmVkIGhlaWdodCwgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcyk7CisgICAgICAgIAorICAgICAg
ICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIGNvbnRleHQzRCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y29udGV4dE9iajsgfQorICAgICAgICBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUzRCgpIGNvbnN0
IHsgcmV0dXJuIChQbGF0Zm9ybTNET2JqZWN0KSBtX3RleHR1cmU7IH0KKyAgICAgICAgCisgICAg
ICAgIHZvaWQgcmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpOworICAgICAgICAKKyAgICBw
cml2YXRlOgorICAgICAgICB2b2lkIGFkZE9iamVjdChDYW52YXNPYmplY3QqKTsKKyAgICAgICAg
CisgICAgICAgIGludCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0OworICAgICAgICAK
KyAgICAgICAgVmVjdG9yPFZlY3RvcjxmbG9hdD4gPiBtX3ZlcnRleEFycmF5OworICAgICAgICBW
ZWN0b3I8Q2FudmFzT2JqZWN0Kj4gbV9jYW52YXNPYmplY3RzOworICAgICAgICAKKyNpZiBQTEFU
Rk9STShNQUMpCisgICAgICAgIENHTENvbnRleHRPYmogbV9jb250ZXh0T2JqOworICAgICAgICBH
THVpbnQgbV90ZXh0dXJlOworICAgICAgICBHTHVpbnQgbV9mYm87CisgICAgICAgIEdMdWludCBt
X2RlcHRoQnVmZmVyOworI2VuZGlmICAgICAgICAKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBHcmFwaGljc0NvbnRleHQzRF9oCisKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NhbnZhczNETGF5ZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9DYW52YXMzRExheWVyLmgJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9DYW52YXMzRExheWVyLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQ2FudmFzM0RMYXllcl9oCisjZGVmaW5lIENh
bnZhczNETGF5ZXJfaAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW1w
b3J0ICJXZWJMYXllci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgR3JhcGhp
Y3NMYXllcjsKK30KKworQGludGVyZmFjZSBDYW52YXMzRExheWVyIDogQ0FPcGVuR0xMYXllciAK
K3sKKyAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBtX2xheWVyT3duZXI7CisgICAgQ0dMQ29u
dGV4dE9iaiBtX2NvbnRleHRPYmo7CisgICAgR0x1aW50IG1fdGV4dHVyZTsKK30KKworLShpZCkg
aW5pdFdpdGhDb250ZXh0OihDR0xDb250ZXh0T2JqKSBjb250ZXh0IHRleHR1cmU6KEdMdWludCkg
dGV4dHVyZTsKKworQGVuZAorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQorCisjZW5kaWYgLy8gQ2FudmFzM0RMYXllcl9oCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9DYW52YXMzRExheWVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL0NhbnZhczNETGF5ZXIubW0JKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9DYW52YXMzRExheWVyLm1tCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDEyMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQorI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisKKyNpbXBvcnQgIkNhbnZhczNE
TGF5ZXIuaCIKKworI2ltcG9ydCAiR3JhcGhpY3NMYXllci5oIgorI2ltcG9ydCA8UXVhcnR6Q29y
ZS9RdWFydHpDb3JlLmg+CisjaW1wb3J0IDxPcGVuR0wvT3BlbkdMLmg+CisKK3VzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOworCitAaW1wbGVtZW50YXRpb24gQ2FudmFzM0RMYXllcgorCistKGlkKSBp
bml0V2l0aENvbnRleHQ6KENHTENvbnRleHRPYmopIGNvbnRleHQgdGV4dHVyZTooR0x1aW50KSB0
ZXh0dXJlCit7CisgICAgbV9jb250ZXh0T2JqID0gY29udGV4dDsKKyAgICBtX3RleHR1cmUgPSB0
ZXh0dXJlOworICAgIFtzdXBlciBpbml0XTsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLShDR0xQ
aXhlbEZvcm1hdE9iailjb3B5Q0dMUGl4ZWxGb3JtYXRGb3JEaXNwbGF5TWFzazoodWludDMyX3Qp
bWFzaworeworICAgIENHTFBpeGVsRm9ybWF0QXR0cmlidXRlIGF0dHJpYnNbXSA9CisgICAgewor
ICAgICAgICAoQ0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGUpIGtDR0xQRkFBY2NlbGVyYXRlZCwKKyAg
ICAgICAgKENHTFBpeGVsRm9ybWF0QXR0cmlidXRlKSBrQ0dMUEZBQ29sb3JTaXplLCAoQ0dMUGl4
ZWxGb3JtYXRBdHRyaWJ1dGUpIDMyLAorICAgICAgICAoQ0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGUp
IGtDR0xQRkFEaXNwbGF5TWFzaywgKENHTFBpeGVsRm9ybWF0QXR0cmlidXRlKSBtYXNrLAorICAg
ICAgICAoQ0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGUpIDAKKyAgICB9OworICAgIAorICAgIENHTFBp
eGVsRm9ybWF0T2JqIHBpeGVsRm9ybWF0T2JqOworICAgIEdMaW50IG51bVBpeGVsRm9ybWF0czsK
KyAKKyAgICBDR0xDaG9vc2VQaXhlbEZvcm1hdChhdHRyaWJzLCAmcGl4ZWxGb3JtYXRPYmosICZu
dW1QaXhlbEZvcm1hdHMpOworICAgIHJldHVybiBwaXhlbEZvcm1hdE9iajsKK30KKworLShDR0xD
b250ZXh0T2JqKWNvcHlDR0xDb250ZXh0Rm9yUGl4ZWxGb3JtYXQ6KENHTFBpeGVsRm9ybWF0T2Jq
KXBpeGVsRm9ybWF0Cit7CisgICAgQ0dMQ29udGV4dE9iaiBjb250ZXh0T2JqOworICAgIENHTENy
ZWF0ZUNvbnRleHQocGl4ZWxGb3JtYXQsIG1fY29udGV4dE9iaiwgJmNvbnRleHRPYmopOworICAg
IHJldHVybiBjb250ZXh0T2JqOworfQorCistKHZvaWQpZHJhd0luQ0dMQ29udGV4dDooQ0dMQ29u
dGV4dE9iailnbENvbnRleHQgcGl4ZWxGb3JtYXQ6KENHTFBpeGVsRm9ybWF0T2JqKXBpeGVsRm9y
bWF0IGZvckxheWVyVGltZTooQ0ZUaW1lSW50ZXJ2YWwpdGltZUludGVydmFsIGRpc3BsYXlUaW1l
Oihjb25zdCBDVlRpbWVTdGFtcCAqKXRpbWVTdGFtcAoreworICAgIENHUmVjdCBmcmFtZSA9IFtz
ZWxmIGZyYW1lXTsKKyAgICAgICAgCisgICAgLy8gZHJhdyB0aGUgRkJPIGludG8gdGhlIGxheWVy
CisgICAgZ2xWaWV3cG9ydCgwLCAwLCBmcmFtZS5zaXplLndpZHRoLCBmcmFtZS5zaXplLmhlaWdo
dCk7CisgICAgZ2xNYXRyaXhNb2RlKEdMX1BST0pFQ1RJT04pOworICAgIGdsTG9hZElkZW50aXR5
KCk7CisgICAgZ2xPcnRobygtMSwgMSwgLTEsIDEsIC0xLCAxKTsKKyAgICBnbE1hdHJpeE1vZGUo
R0xfTU9ERUxWSUVXKTsKKyAgICBnbExvYWRJZGVudGl0eSgpOworCisgICAgZ2xFbmFibGUoR0xf
VEVYVFVSRV8yRCk7CisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUp
OworICAgIAorCWdsQmVnaW4oR0xfVFJJQU5HTEVfRkFOKTsKKyAgICAgICAgZ2xUZXhDb29yZDJm
KDAsIDApOworCQlnbFZlcnRleDJmKC0xLCAtMSk7CisgICAgICAgIGdsVGV4Q29vcmQyZigxLCAw
KTsKKwkJZ2xWZXJ0ZXgyZigxLCAtMSk7CisgICAgICAgIGdsVGV4Q29vcmQyZigxLCAxKTsKKwkJ
Z2xWZXJ0ZXgyZigxLCAxKTsKKyAgICAgICAgZ2xUZXhDb29yZDJmKDAsIDEpOworCQlnbFZlcnRl
eDJmKC0xLCAxKTsKKwlnbEVuZCgpOworICAgIAorICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVS
RV8yRCwgMCk7CisgICAgZ2xEaXNhYmxlKEdMX1RFWFRVUkVfMkQpOworCisJLy8gQ2FsbCBzdXBl
ciB0byBmaW5hbGl6ZSB0aGUgZHJhd2luZy4gQnkgZGVmYXVsdCBhbGwgaXQgZG9lcyBpcyBjYWxs
IGdsRmx1c2goKS4KKwlbc3VwZXIgZHJhd0luQ0dMQ29udGV4dDpnbENvbnRleHQgcGl4ZWxGb3Jt
YXQ6cGl4ZWxGb3JtYXQgZm9yTGF5ZXJUaW1lOnRpbWVJbnRlcnZhbCBkaXNwbGF5VGltZTp0aW1l
U3RhbXBdOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBDYW52YXMzRExheWVyKFdlYkxh
eWVyQWRkaXRpb25zKQorCistICh2b2lkKXNldExheWVyT3duZXI6KEdyYXBoaWNzTGF5ZXIqKWFM
YXllcgoreworICAgIG1fbGF5ZXJPd25lciA9IGFMYXllcjsKK30KKworLSAoR3JhcGhpY3NMYXll
ciopbGF5ZXJPd25lcgoreworICAgIHJldHVybiBtX2xheWVyT3duZXI7Cit9CisKK0BlbmQKKwor
I2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3ND
b250ZXh0M0RNYWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxNTcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1
LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0M0QuaCIKKworI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiQ2Fu
dmFzQnVmZmVyLmgiCisjaW5jbHVkZSAiQ2FudmFzRnJhbWVidWZmZXIuaCIKKyNpbmNsdWRlICJD
YW52YXNOdW1iZXJBcnJheS5oIgorI2luY2x1ZGUgIkNhbnZhc09iamVjdC5oIgorI2luY2x1ZGUg
IkNhbnZhc1Byb2dyYW0uaCIKKyNpbmNsdWRlICJDYW52YXNSZW5kZXJidWZmZXIuaCIKKyNpbmNs
dWRlICJDYW52YXNTaGFkZXIuaCIKKyNpbmNsdWRlICJDYW52YXNUZXh0dXJlLmgiCisjaW5jbHVk
ZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCisjaW5jbHVkZSAi
SFRNTEltYWdlRWxlbWVudC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAi
V2ViS2l0Q1NTTWF0cml4LmgiCisKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dCaXRtYXBDb250
ZXh0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBo
aWNzQ29udGV4dDNEKCkKK3sKKyAgICBDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZSBhdHRyaWJzW10g
PQorICAgIHsKKyAgICAgICAgKENHTFBpeGVsRm9ybWF0QXR0cmlidXRlKSBrQ0dMUEZBQWNjZWxl
cmF0ZWQsCisgICAgICAgIChDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZSkga0NHTFBGQUNvbG9yU2l6
ZSwgKENHTFBpeGVsRm9ybWF0QXR0cmlidXRlKSAzMiwKKyAgICAgICAgKENHTFBpeGVsRm9ybWF0
QXR0cmlidXRlKSBrQ0dMUEZBRGVwdGhTaXplLCAoQ0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGUpIDMy
LAorICAgICAgICAoQ0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGUpIGtDR0xQRkFTdXBlcnNhbXBsZSwK
KyAgICAgICAgKENHTFBpeGVsRm9ybWF0QXR0cmlidXRlKSAwCisgICAgfTsKKyAgICAKKyAgICBD
R0xQaXhlbEZvcm1hdE9iaiBwaXhlbEZvcm1hdE9iajsKKyAgICBHTGludCBudW1QaXhlbEZvcm1h
dHM7CisgICAgCisgICAgQ0dMQ2hvb3NlUGl4ZWxGb3JtYXQoYXR0cmlicywgJnBpeGVsRm9ybWF0
T2JqLCAmbnVtUGl4ZWxGb3JtYXRzKTsKKyAgICAKKyAgICBDR0xDcmVhdGVDb250ZXh0KHBpeGVs
Rm9ybWF0T2JqLCAwLCAmbV9jb250ZXh0T2JqKTsKKyAgICAKKyAgICBDR0xEZXN0cm95UGl4ZWxG
b3JtYXQocGl4ZWxGb3JtYXRPYmopOworICAgIAorICAgIC8vIFNldCB0aGUgY3VycmVudCBjb250
ZXh0IHRvIHRoZSBvbmUgZ2l2ZW4gdG8gdXMuCisgICAgQ0dMU2V0Q3VycmVudENvbnRleHQobV9j
b250ZXh0T2JqKTsKKyAgICAKKyAgICAvLyBjcmVhdGUgYSB0ZXh0dXJlIHRvIHJlbmRlciBpbnRv
CisgICAgOjpnbEdlblRleHR1cmVzKDEsICZtX3RleHR1cmUpOworICAgIDo6Z2xCaW5kVGV4dHVy
ZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RF
WFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICA6OmdsVGV4
UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVB
Uik7CisgICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQ
X1MsIEdMX0NMQU1QKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9U
RVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVApOworICAgIDo6Z2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVf
MkQsIDAsIEdMX1JHQkE4LCAxLCAxLCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsK
KyAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7CisgICAgCisgICAgLy8gY3Jl
YXRlIGFuIEZCTworICAgIDo6Z2xHZW5GcmFtZWJ1ZmZlcnNFWFQoMSwgJm1fZmJvKTsKKyAgICA6
OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworICAgIAor
ICAgIDo6Z2xHZW5SZW5kZXJidWZmZXJzRVhUKDEsICZtX2RlcHRoQnVmZmVyKTsKKyAgICA6Omds
QmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBtX2RlcHRoQnVmZmVyKTsK
KyAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBHTF9E
RVBUSF9DT01QT05FTlQsIDEsIDEpOworICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JF
TkRFUkJVRkZFUl9FWFQsIDApOworICAgIAorICAgIDo6Z2xGcmFtZWJ1ZmZlclRleHR1cmUyREVY
VChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCwgR0xfVEVYVFVS
RV8yRCwgbV90ZXh0dXJlLCAwKTsKKyAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQo
R0xfRlJBTUVCVUZGRVJfRVhULCBHTF9ERVBUSF9BVFRBQ0hNRU5UX0VYVCwgR0xfUkVOREVSQlVG
RkVSX0VYVCwgbV9kZXB0aEJ1ZmZlcik7CisgICAgCisgICAgOjpnbENsZWFyQ29sb3IoMCwgMCwg
MCwgMCk7Cit9CisKKyBHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKCkKK3sK
KyAgICAvLyB0ZWxsIGFsbCB0aGUgb2JqZWN0cyB3ZSdyZSBnb2luZyBhd2F5CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX2NhbnZhc09iamVjdHMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1f
Y2FudmFzT2JqZWN0c1tpXS0+ZGV0YWNoQ29udGV4dCgpOworICAgIAorICAgIENHTFNldEN1cnJl
bnRDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQo
MSwgJiBtX2RlcHRoQnVmZmVyKTsKKyAgICA6OmdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVy
ZSk7CisgICAgOjpnbERlbGV0ZUZyYW1lYnVmZmVyc0VYVCgxLCAmbV9mYm8pOworICAgIENHTFNl
dEN1cnJlbnRDb250ZXh0KDApOworICAgIENHTERlc3Ryb3lDb250ZXh0KG1fY29udGV4dE9iaik7
Cit9CisKK1BsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgR3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRm
b3JtR3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbnRleHRPYmo7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNoZWNrRXJyb3IoKSBjb25zdAoreworICAg
IEdMZW51bSBlcnJvciA9IDo6Z2xHZXRFcnJvcigpOworICAgIGlmIChlcnJvciAhPSBHTF9OT19F
UlJPUikKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIqKiogR0wgZXJyb3IgJWRcbiIsIGVycm9y
KTsKK30KKyAgICAKKyAgICAKKwordm9pZCAgR3JhcGhpY3NDb250ZXh0M0Q6Om1ha2VDb250ZXh0
Q3VycmVudCgpCit7CisgICAgQ0dMU2V0Q3VycmVudENvbnRleHQobV9jb250ZXh0T2JqKTsKK30K
Kwordm9pZCAgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0
KQoreworICAgIGlmICh3aWR0aCA9PSBtX2N1cnJlbnRXaWR0aCAmJiBoZWlnaHQgPT0gbV9jdXJy
ZW50SGVpZ2h0KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9jdXJyZW50V2lkdGggPSB3
aWR0aDsKKyAgICBtX2N1cnJlbnRIZWlnaHQgPSBoZWlnaHQ7CisgICAgCisgICAgQ0dMU2V0Q3Vy
cmVudENvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICAKKyAgICA6OmdsQmluZFRleHR1cmUoR0xf
VEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsKKyAgICA6OmdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJE
LCAwLCBHTF9SR0JBOCwgd2lkdGgsIGhlaWdodCwgMCwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllU
RSwgMCk7CisgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOworICAgIAorICAg
IDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CisgICAg
OjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0aEJ1ZmZl
cik7CisgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwg
R0xfREVQVEhfQ09NUE9ORU5ULCB3aWR0aCwgaGVpZ2h0KTsKKyAgICA6OmdsQmluZFJlbmRlcmJ1
ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCAwKTsKKyAgICAKKyAgICA6OmdsRnJhbWVidWZm
ZXJUZXh0dXJlMkRFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9F
WFQsIEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSwgMCk7CisgICAgOjpnbEZyYW1lYnVmZmVyUmVu
ZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfREVQVEhfQVRUQUNITUVOVF9FWFQs
IEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fZGVwdGhCdWZmZXIpOworICAgIEdMZW51bSBzdGF0dXMg
PSA6OmdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1c0VYVChHTF9GUkFNRUJVRkZFUl9FWFQpOworICAg
IGlmIChzdGF0dXMgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEVfRVhUKSB7CisgICAgICAgIC8v
IEZJWE1FOiBjbGVhbnVwCisgICAgICAgIEFTU0VSVCgwKTsKKyAgICB9CisKKyAgICA6OmdsQ2xl
YXIoR0xfQ09MT1JfQlVGRkVSX0JJVCk7Cit9CisKKyNkZWZpbmUgZW5zdXJlQ29udGV4dCBfZW5z
dXJlQ29udGV4dChtX2NvbnRleHRPYmopCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZW5zdXJlQ29u
dGV4dChDR0xDb250ZXh0T2JqIGNvbnRleHQpCit7CisgICAgQ0dMQ29udGV4dE9iaiBjdXJyZW50
Q29udGV4dCA9IENHTEdldEN1cnJlbnRDb250ZXh0KCk7CisgICAgaWYgKGN1cnJlbnRDb250ZXh0
ICE9IGNvbnRleHQpCisgICAgICAgIENHTFNldEN1cnJlbnRDb250ZXh0KGNvbnRleHQpOworfQor
Cit2b2lkICBHcmFwaGljc0NvbnRleHQzRDo6Z2xBY3RpdmVUZXh0dXJlICh1bnNpZ25lZCBsb25n
IHRleHR1cmUpCit7CisgICAgZW5zdXJlQ29udGV4dDsKKyAgICA6OmdsQWN0aXZlVGV4dHVyZSh0
ZXh0dXJlKTsKK30KKwordm9pZCAgR3JhcGhpY3NDb250ZXh0M0Q6OmdsQXR0YWNoU2hhZGVyIChD
YW52YXNQcm9ncmFtKiBwcm9ncmFtLCBDYW52YXNTaGFkZXIqIHNoYWRlcikKK3sKKyAgICBpZiAo
IXByb2dyYW0gfHwgIXNoYWRlcikKKyAgICAgICAgcmV0dXJuOworICAgIGVuc3VyZUNvbnRleHQ7
CisgICAgOjpnbEF0dGFjaFNoYWRlcigoR0x1aW50KSBwcm9ncmFtLT5vYmplY3QoKSwgKEdMdWlu
dCkgc2hhZGVyLT5vYmplY3QoKSk7Cit9CisKK3ZvaWQgIEdyYXBoaWNzQ29udGV4dDNEOjpnbEJp
bmRBdHRyaWJMb2NhdGlvbiAoQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBp
bmRleCwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmICghcHJvZ3JhbSkKKyAgICAgICAg
cmV0dXJuOworICAgIGVuc3VyZUNvbnRleHQ7CisgICAgOjpnbEJpbmRBdHRyaWJMb2NhdGlvbigo
R0x1aW50KSBwcm9ncmFtLT5vYmplY3QoKSwgaW5kZXgsIG5hbWUudXRmOCgpLmRhdGEoKSk7Cit9
CisKK3ZvaWQgIEdyYXBoaWNzQ29udGV4dDNEOjpnbEJpbmRCdWZmZXIgKHVuc2lnbmVkIGxvbmcg
dGFyZ2V0LCBDYW52YXNCdWZmZXIqIGJ1ZmZlcikKK3sKKyAgICBlbnN1cmVDb250ZXh0OworICAg
IDo6Z2xCaW5kQnVmZmVyKHRhcmdldCwgYnVmZmVyID8gKEdMdWludCkgYnVmZmVyLT5vYmplY3Qo
KSA6IDApOworfQorCisKK3ZvaWQgIEdyYXBoaWNzQ29udGV4dDNEOjpnbEJpbmRGcmFtZWJ1ZmZl
cih1bnNpZ25lZCBsb25nIHRhcmdldCwgQ2FudmFzRnJhbWVidWZmZXIqIGJ1ZmZlcikKK3sKKyAg
ICBlbnN1cmVDb250ZXh0OworICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQodGFyZ2V0LCBidWZm
ZXIgPyAoR0x1aW50KSBidWZmZXItPm9iamVjdCgpIDogbV9mYm8pOworfQorCit2b2lkICBHcmFw
aGljc0NvbnRleHQzRDo6Z2xCaW5kUmVuZGVyYnVmZmVyICh1bnNpZ25lZCBsb25nIHRhcmdldCwg
Q2FudmFzUmVuZGVyYnVmZmVyKiByZW5kZXJidWZmZXIpCit7CisgICAgZW5zdXJlQ29udGV4dDsK
KyAgICA6OmdsQmluZEJ1ZmZlcih0YXJnZXQsIHJlbmRlcmJ1ZmZlciA/IChHTHVpbnQpIHJlbmRl
cmJ1ZmZlci0+b2JqZWN0KCkgOiAwKTsKK30KKworCit2b2lkICBHcmFwaGljc0NvbnRleHQzRDo6
Z2xCaW5kVGV4dHVyZSh1bnNpZ25lZCB0YXJnZXQsIENhbnZhc1RleHR1cmUqIHRleHR1cmUpCit7
CisgICAgZW5zdXJlQ29udGV4dDsKKyAgICA6OmdsQmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJl
ID8gKEdMdWludCkgdGV4dHVyZS0+b2JqZWN0KCkgOiAwKTsKK30KKwordm9pZCAgR3JhcGhpY3ND
b250ZXh0M0Q6OmdsQmxlbmRDb2xvciAoZG91YmxlIHJlZCwgZG91YmxlIGdyZWVuLCBkb3VibGUg
Ymx1ZSwgZG91YmxlIGFscGhhKQoreworICAgIGVuc3VyZUNvbnRleHQ7CisgICAgOjpnbEJsZW5k
Q29sb3IoKGZsb2F0KSByZWQsIChmbG9hdCkgZ3JlZW4sIChmbG9hdCkgYmx1ZSwgKGZsb2F0KSBh
bHBoYSk7Cit9CisKK3ZvaWQgIEdyYXBoaWNzQ29udGV4dDNEOjpnbEJsZW5kRXF1YXRpb24gKCB1
bnNpZ25lZCBsb25nIG1vZGUgKQoreworICAgIGVuc3VyZUNvbnRleHQ7CisgICAgOjpnbEJsZW5k
RXF1YXRpb24obW9kZSk7Cit9CisKK3ZvaWQgIEdyYXBoaWNzQ29udGV4dDNEOjpnbEJsZW5kRXF1
YXRpb25TZXBhcmF0ZSAodW5zaWduZWQgbG9uZyBtb2RlUkdCLCB1bnNpZ25lZCBsb25nIG1vZGVB
bHBoYSkKK3sKKyAgICBlbnN1cmVDb250ZXh0OworICAgIDo6Z2xCbGVuZEVxdWF0aW9uU2VwYXJh
dGUobW9kZVJHQiwgbW9kZUFscGhhKTsKK30KKworCit2b2lkICBHcmFwaGljc0NvbnRleHQzRDo6
Z2xCbGVuZEZ1bmModW5zaWduZWQgbG9uZyBzZmFjdG9yLCB1bnNpZ25lZCBsb25nIGRmYWN0b3Ip
Cit7CisgICAgZW5zdXJlQ29udGV4dDsKKyAgICA6OmdsQmxlbmRGdW5jKHNmYWN0b3IsIGRmYWN0
b3IpOworfSAgICAgICAKKwordm9pZCAgR3JhcGhpY3NDb250ZXh0M0Q6OmdsQmxlbmRGdW5jU2Vw
YXJhdGUgKHVuc2lnbmVkIGxvbmcgc3JjUkdCLCB1bnNpZ25lZCBsb25nIGRzdFJHQiwgdW5zaWdu
ZWQgbG9uZyBzcmNBbHBoYSwgdW5zaWduZWQgbG9uZyBkc3RBbHBoYSkKK3sKKyAgICBlbnN1cmVD
b250ZXh0OworICAgIDo6Z2xCbGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0IsIGRzdFJHQiwgc3JjQWxw
aGEsIGRzdEFscGhhKTsKK30KKwordm9pZCAgR3JhcGhpY3NDb250ZXh0M0Q6OmdsQnVmZmVyRGF0
YSAodW5zaWduZWQgbG9uZyB0YXJnZXQsIENhbnZhc051bWJlckFycmF5KiBhcnJheSwgdW5zaWdu
ZWQgbG9uZyB1c2FnZSkKK3sKKyAgICBpZiAoIWFycmF5IHx8ICFhcnJheS0+ZGF0YSgpLnNpemUo
KSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGVuc3VyZUNvbnRleHQ7CisgICAgCisgICAg
Ly8gRklYTUU6IFRoaXMgaXMgYSBjb21wbGV0ZSBoYWNrLiBJZiB0aGUgdGFyZ2V0IGlzIEdMX0VM
RU1FTlRfQVJSQVlfQlVGRkVSIHRoZW4gdGhlCisgICAgLy8gcGFzc2VkIGRhdGEgbmVlZHMgdG8g
YmUgYnl0ZXMgb3Igc2hvcnRzIGJlY2F1c2UgdGhvc2UgYXJlIHRoZSBvbmx5IHR5cGVzIHN1cHBv
cnRlZAorICAgIC8vIGJ5IEdMIEVTIDIuMC4gU28gZm9yIG5vdyB3ZSBqdXN0IGNvbnZlcnQgdG8g
YSBzaG9ydCBidWZmZXIKKyAgICBpZiAodGFyZ2V0ID09IEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVS
KSB7CisgICAgICAgIHVpbnQxNl90KiBidWYgPSAodWludDE2X3QqKSBtYWxsb2MoYXJyYXktPmRh
dGEoKS5zaXplKCkgKiBzaXplb2YodWludDE2X3QpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBhcnJheS0+ZGF0YSgpLnNpemUoKTsgKytpKQorICAgICAgICAgICAgYnVmW2ldID0g
KHVpbnQxNl90KSBhcnJheS0+ZGF0YSgpW2ldOworICAgICAgICAKKyAgICAgICAgOjpnbEJ1ZmZl
ckRhdGEodGFyZ2V0LCBhcnJheS0+ZGF0YSgpLnNpemUoKSAqIHNpemVvZih1aW50MTZfdCksIGJ1
ZiwgdXNhZ2UpOworICAgICAgICBmcmVlKGJ1Zik7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAg
OjpnbEJ1ZmZlckRhdGEodGFyZ2V0LCBhcnJheS0+ZGF0YSgpLnNpemUoKSAqIHNpemVvZihmbG9h
dCksICYoYXJyYXktPmRhdGEoKVswXSksIHVzYWdlKTsKKyAgICAKK30KKwordm9pZCAgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdsQnVmZmVyU3ViRGF0YSAodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcg
b2Zmc2V0LCBDYW52YXNOdW1iZXJBcnJheSogYXJyYXkpCit7CisgICAgaWYgKCFhcnJheSB8fCAh
YXJyYXktPmRhdGEoKS5zaXplKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBlbnN1cmVD
b250ZXh0OworICAgIDo6Z2xCdWZmZXJTdWJEYXRhKHRhcmdldCwgb2Zmc2V0LCBhcnJheS0+ZGF0
YSgpLnNpemUoKSAqIHNpemVvZihmbG9hdCksICYoYXJyYXktPmRhdGEoKVswXSkpOworfQorCit1
bnNpZ25lZCBsb25nICBHcmFwaGljc0NvbnRleHQzRDo6Z2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVz
IChDYW52YXNGcmFtZWJ1ZmZlciogZnJhbWVidWZmZXIpCit7CisgICAgaWYgKCFmcmFtZWJ1ZmZl
cikKKyAgICAgICAgcmV0dXJuIC0xOworICAgIAorICAgIGVuc3VyZUNvbnRleHQ7CisgICAgcmV0
dXJuIDo6Z2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzRVhUKChHTHVpbnQpIGZyYW1lYnVmZmVyLT5v
YmplY3QoKSk7Cit9CisKK3ZvaWQgIEdyYXBoaWNzQ29udGV4dDNEOjpnbENsZWFyQ29sb3IoZG91
YmxlIHIsIGRvdWJsZSBnLCBkb3VibGUgYiwgZG91YmxlIGEpCit7CisgICAgZW5zdXJlQ29udGV4
dDsKKyAgICBpZiAoaXNuYW4ocikpCisgICAgICAgIHIgPSAwOworICAgIGlmIChpc25hbihnKSkK
KyAgICAgICAgZyA9IDA7CisgICAgaWYgKGlzbmFuKGIpKQorICAgICAgICBiID0gMDsKKyAgICBp
ZiAoaXNuYW4oYSkpCisgICAgICAgIGEgPSAxOworICAgIDo6Z2xDbGVhckNvbG9yKChmbG9hdCkg
ciwgKGZsb2F0KSBnLCAoZmxvYXQpIGIsIChmbG9hdCkgYSk7Cit9CisKK3ZvaWQgIEdyYXBoaWNz
Q29udGV4dDNEOjpnbENsZWFyKHVuc2lnbmVkIGxvbmcgbWFzaykKK3sKKyAgICBlbnN1cmVDb250
ZXh0OworICAgIDo6Z2xDbGVhcihtYXNrKTsKK30KKwordm9pZCAgR3JhcGhpY3NDb250ZXh0M0Q6
OmdsQ2xlYXJEZXB0aCAoZG91YmxlIGRlcHRoKQoreworICAgIGVuc3VyZUNvbnRleHQ7CisgICAg
OjpnbENsZWFyRGVwdGgoZGVwdGgpOworfQorCit2b2lkICBHcmFwaGljc0NvbnRleHQzRDo6Z2xD
bGVhclN0ZW5jaWwgKGxvbmcgcykKK3sKKyAgICBlbnN1cmVDb250ZXh0OworICAgIDo6Z2xDbGVh
clN0ZW5jaWwocyk7Cit9CisKK3ZvaWQgIEdyYXBoaWNzQ29udGV4dDNEOjpnbENvbG9yTWFzayAo
Ym9vbCByZWQsIGJvb2wgZ3JlZW4sIGJvb2wgYmx1ZSwgYm9vbCBhbHBoYSkKK3sKKyAgICBlbnN1
cmVDb250ZXh0OworICAgIDo6Z2xDb2xvck1hc2socmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwor
fQorCit2b2lkICBHcmFwaGljc0NvbnRleHQzRDo6Z2xDb21waWxlU2hhZGVyIChDYW52YXNTaGFk
ZXIqIHNoYWRlcikKK3sKKyAgICBpZiAoIXNoYWRlcikKKyAgICAgICAgcmV0dXJuOworICAgIAor
ICAgIGVuc3VyZUNvbnRleHQ7CisgICAgOjpnbENvbXBpbGVTaGFkZXIoKEdMdWludCkgc2hhZGVy
LT5vYmplY3QoKSk7Cit9CisKK3ZvaWQgIEdyYXBoaWNzQ29udGV4dDNEOjpnbENvcHlUZXhJbWFn
ZTJEICh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBsZXZlbCwgdW5zaWduZWQgbG9uZyBpbnRl
cm5hbGZvcm1hdCwgbG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVk
IGxvbmcgaGVpZ2h0LCBsb25nIGJvcmRlcikKK3sKKyAgICBlbnN1cmVDb250ZXh0OworICAgIDo6
Z2xDb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lk
dGgsIGhlaWdodCwgYm9yZGVyKTsKK30KKwordm9pZCAgR3JhcGhpY3NDb250ZXh0M0Q6OmdsQ29w
eVRleFN1YkltYWdlMkQgKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIGxldmVsLCBsb25nIHhv
ZmZzZXQsIGxvbmcgeW9mZnNldCwgbG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgs
IHVuc2lnbmVkIGxvbmcgaGVpZ2h0KQoreworICAgIGVuc3VyZUNvbnRleHQ7CisgICAgOjpnbENv
cHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdp
ZHRoLCBoZWlnaHQpOworfQorCit2b2lkICBHcmFwaGljc0NvbnRleHQzRDo6Z2xDdWxsRmFjZSAo
dW5zaWduZWQgbG9uZyBtb2RlKQoreworICAgIGVuc3VyZUNvbnRleHQ7CisgICAgOjpnbEN1bGxG
YWNlKG1vZGUpOworfQorCit2b2lkICBHcmFwaGljc0NvbnRleHQzRDo6Z2xEZXB0aEZ1bmMgKHVu
c2lnbmVkIGxvbmcgZnVuYykKK3sKKyAgICBlbnN1cmVDb250ZXh0OworICAgIDo6Z2xEZXB0aEZ1
bmMoZnVuYyk7Cit9CisKK3ZvaWQgIEdyYXBoaWNzQ29udGV4dDNEOjpnbERlcHRoTWFzayAoYm9v
bCBmbGFnKQoreworICAgIGVuc3VyZUNvbnRleHQ7CisgICAgOjpnbERlcHRoTWFzayhmbGFnKTsK
K30KKwordm9pZCAgR3JhcGhpY3NDb250ZXh0M0Q6OmdsRGVwdGhSYW5nZSAoZG91YmxlIHpOZWFy
LCBkb3VibGUgekZhcikKK3sKKyAgICBlbnN1cmVDb250ZXh0OworICAgIDo6Z2xEZXB0aFJhbmdl
KHpOZWFyLCB6RmFyKTsKK30KKwordm9pZCAgR3JhcGhpY3NDb250ZXh0M0Q6OmdsRGV0YWNoU2hh
ZGVyIChDYW52YXNQcm9ncmFtKiBwcm9ncmFtLCBDYW52YXNTaGFkZXIqIHNoYWRlcikKK3sKKyAg
ICBpZiAoIXByb2dyYW0gfHwgIXNoYWRlcikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGVu
c3VyZUNvbnRleHQ7CisgICAgOjpnbERldGFjaFNoYWRlcigoR0x1aW50KSBwcm9ncmFtLT5vYmpl
Y3QoKSwgKEdMdWludCkgc2hhZGVyLT5vYmplY3QoKSk7Cit9CisKKwordm9pZCAgR3JhcGhpY3ND
b250ZXh0M0Q6OmdsRGlzYWJsZSh1bnNpZ25lZCBsb25nIGNhcCkKK3sKKyAgICBlbnN1cmVDb250
ZXh0OworICAgIDo6Z2xEaXNhYmxlKGNhcCk7Cit9CisKK3ZvaWQgIEdyYXBoaWNzQ29udGV4dDNE
OjpnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSAodW5zaWduZWQgbG9uZyBpbmRleCkKK3sKKyAg
ICBlbnN1cmVDb250ZXh0OworICAgIDo6Z2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgp
OworfQorCisKK3ZvaWQgIEdyYXBoaWNzQ29udGV4dDNEOjpnbERyYXdBcnJheXModW5zaWduZWQg
bG9uZyBtb2RlLCBsb25nIGZpcnN0LCB1bnNpZ25lZCBsb25nIGNvdW50KQoreworICAgIGVuc3Vy
ZUNvbnRleHQ7CisgICAgOjpnbERyYXdBcnJheXMobW9kZSwgZmlyc3QsIGNvdW50KTsKK30KKwor
dm9pZCAgR3JhcGhpY3NDb250ZXh0M0Q6OmdsRHJhd0VsZW1lbnRzKHVuc2lnbmVkIGxvbmcgbW9k
ZSwgdW5zaWduZWQgbG9uZyBjb3VudCwgdW5zaWduZWQgbG9uZyB0eXBlLCB2b2lkKiBhcnJheSkK
K3sKKyAgICBlbnN1cmVDb250ZXh0OworICAgIDo6Z2xEcmF3RWxlbWVudHMobW9kZSwgY291bnQs
IHR5cGUsIGFycmF5KTsKK30KKwordm9pZCAgR3JhcGhpY3NDb250ZXh0M0Q6OmdsRW5hYmxlKHVu
c2lnbmVkIGxvbmcgY2FwKQoreworICAgIGVuc3VyZUNvbnRleHQ7CisgICAgOjpnbEVuYWJsZShj
YXApOworfQorCit2b2lkICBHcmFwaGljc0NvbnRleHQzRDo6Z2xFbmFibGVWZXJ0ZXhBdHRyaWJB
cnJheSAodW5zaWduZWQgbG9uZyBpbmRleCkKK3sKKyAgICBlbnN1cmVDb250ZXh0OworICAgIDo6
Z2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Cit9CisKK3ZvaWQgIEdyYXBoaWNzQ29u
dGV4dDNEOjpnbEZpbmlzaCAoKQoreworICAgIGVuc3VyZUNvbnRleHQ7CisgICAgOjpnbEZpbmlz
aCgpOworfQorCisKK3ZvaWQgIEdyYXBoaWNzQ29udGV4dDNEOjpnbEZsdXNoKCkKK3sKKyAgICBl
bnN1cmVDb250ZXh0OworICAgIDo6Z2xGbHVzaCgpOworfQorCit2b2lkICBHcmFwaGljc0NvbnRl
eHQzRDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciAodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVu
c2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyByZW5kZXJidWZmZXJ0YXJnZXQs
IENhbnZhc1JlbmRlcmJ1ZmZlciogYnVmZmVyKQoreworICAgIGlmICghYnVmZmVyKQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgZW5zdXJlQ29udGV4dDsKKyAgICA6OmdsRnJhbWVidWZmZXJS
ZW5kZXJidWZmZXJFWFQodGFyZ2V0LCBhdHRhY2htZW50LCByZW5kZXJidWZmZXJ0YXJnZXQsIChH
THVpbnQpIGJ1ZmZlci0+b2JqZWN0KCkpOworfQorCit2b2lkICBHcmFwaGljc0NvbnRleHQzRDo6
Z2xGcmFtZWJ1ZmZlclRleHR1cmUyRCAodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxv
bmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyB0ZXh0YXJnZXQsIENhbnZhc1RleHR1cmUqIHRl
eHR1cmUsIGxvbmcgbGV2ZWwpCit7CisgICAgaWYgKCF0ZXh0dXJlKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgZW5zdXJlQ29udGV4dDsKKyAgICA6OmdsRnJhbWVidWZmZXJUZXh0dXJlMkRF
WFQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIChHTHVpbnQpIHRleHR1cmUtPm9iamVj
dCgpLCBsZXZlbCk7Cit9CisKK3ZvaWQgIEdyYXBoaWNzQ29udGV4dDNEOjpnbEZyb250RmFjZSAo
dW5zaWduZWQgbG9uZyBtb2RlKQoreworICAgIGVuc3VyZUNvbnRleHQ7CisgICAgOjpnbEZyb250
RmFjZShtb2RlKTsKK30KKwordm9pZCAgR3JhcGhpY3NDb250ZXh0M0Q6OmdsR2VuZXJhdGVNaXBt
YXAgKHVuc2lnbmVkIGxvbmcgdGFyZ2V0KQoreworICAgIGVuc3VyZUNvbnRleHQ7CisgICAgOjpn
bEdlbmVyYXRlTWlwbWFwRVhUKHRhcmdldCk7Cit9CisKK2ludCAgR3JhcGhpY3NDb250ZXh0M0Q6
OmdsR2V0QXR0cmliTG9jYXRpb24gKENhbnZhc1Byb2dyYW0qIHByb2dyYW0sIGNvbnN0IFN0cmlu
ZyYgbmFtZSkKK3sKKyAgICBpZiAoIXByb2dyYW0pCisgICAgICAgIHJldHVybiAtMTsKKyAgICAK
KyAgICBlbnN1cmVDb250ZXh0OworICAgIHJldHVybiA6OmdsR2V0QXR0cmliTG9jYXRpb24oKEdM
dWludCkgcHJvZ3JhbS0+b2JqZWN0KCksIG5hbWUudXRmOCgpLmRhdGEoKSk7Cit9CisKK3Vuc2ln
bmVkIGxvbmcgIEdyYXBoaWNzQ29udGV4dDNEOjpnbEdldEVycm9yICgpCit7CisgICAgZW5zdXJl
Q29udGV4dDsKKyAgICByZXR1cm4gOjpnbEdldEVycm9yKCk7Cit9CisKK1N0cmluZyAgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdsR2V0U3RyaW5nICh1bnNpZ25lZCBsb25nIG5hbWUpCit7CisgICAgZW5z
dXJlQ29udGV4dDsKKyAgICByZXR1cm4gU3RyaW5nKChjb25zdCBjaGFyKikgOjpnbEdldFN0cmlu
ZyhuYW1lKSk7Cit9CisKK3ZvaWQgIEdyYXBoaWNzQ29udGV4dDNEOjpnbEhpbnQgKHVuc2lnbmVk
IGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIG1vZGUpCit7CisgICAgZW5zdXJlQ29udGV4dDsK
KyAgICA6OmdsSGludCh0YXJnZXQsIG1vZGUpOworfQorCitib29sICBHcmFwaGljc0NvbnRleHQz
RDo6Z2xJc0J1ZmZlciAoQ2FudmFzQnVmZmVyKiBidWZmZXIpCit7CisgICAgaWYgKCFidWZmZXIp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBlbnN1cmVDb250ZXh0OworICAgIHJl
dHVybiA6OmdsSXNCdWZmZXIoKEdMdWludCkgYnVmZmVyLT5vYmplY3QoKSk7Cit9CisKK2Jvb2wg
IEdyYXBoaWNzQ29udGV4dDNEOjpnbElzRW5hYmxlZCAodW5zaWduZWQgbG9uZyBjYXApCit7Cisg
ICAgZW5zdXJlQ29udGV4dDsKKyAgICByZXR1cm4gOjpnbElzRW5hYmxlZChjYXApOworfQorCiti
b29sICBHcmFwaGljc0NvbnRleHQzRDo6Z2xJc0ZyYW1lYnVmZmVyIChDYW52YXNGcmFtZWJ1ZmZl
ciogZnJhbWVidWZmZXIpCit7CisgICAgaWYgKCFmcmFtZWJ1ZmZlcikKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIAorICAgIGVuc3VyZUNvbnRleHQ7CisgICAgcmV0dXJuIDo6Z2xJc0ZyYW1l
YnVmZmVyRVhUKChHTHVpbnQpIGZyYW1lYnVmZmVyLT5vYmplY3QoKSk7Cit9CisKK2Jvb2wgIEdy
YXBoaWNzQ29udGV4dDNEOjpnbElzUHJvZ3JhbSAoQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSkKK3sK
KyAgICBpZiAoIXByb2dyYW0pCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBlbnN1
cmVDb250ZXh0OworICAgIHJldHVybiA6OmdsSXNQcm9ncmFtKChHTHVpbnQpIHByb2dyYW0tPm9i
amVjdCgpKTsKK30KKworYm9vbCAgR3JhcGhpY3NDb250ZXh0M0Q6OmdsSXNSZW5kZXJidWZmZXIg
KENhbnZhc1JlbmRlcmJ1ZmZlciogcmVuZGVyYnVmZmVyKQoreworICAgIGlmICghcmVuZGVyYnVm
ZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgZW5zdXJlQ29udGV4dDsKKyAg
ICByZXR1cm4gOjpnbElzUmVuZGVyYnVmZmVyRVhUKChHTHVpbnQpIHJlbmRlcmJ1ZmZlci0+b2Jq
ZWN0KCkpOworfQorCitib29sICBHcmFwaGljc0NvbnRleHQzRDo6Z2xJc1NoYWRlciAoQ2FudmFz
U2hhZGVyKiBzaGFkZXIpCit7CisgICAgaWYgKCFzaGFkZXIpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAKKyAgICBlbnN1cmVDb250ZXh0OworICAgIHJldHVybiA6OmdsSXNTaGFkZXIoKEdM
dWludCkgc2hhZGVyLT5vYmplY3QoKSk7Cit9CisKK2Jvb2wgIEdyYXBoaWNzQ29udGV4dDNEOjpn
bElzVGV4dHVyZSAoQ2FudmFzVGV4dHVyZSogdGV4dHVyZSkKK3sKKyAgICBpZiAoIXRleHR1cmUp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBlbnN1cmVDb250ZXh0OworICAgIHJl
dHVybiA6OmdsSXNUZXh0dXJlKChHTHVpbnQpIHRleHR1cmUtPm9iamVjdCgpKTsKK30KKwordm9p
ZCAgR3JhcGhpY3NDb250ZXh0M0Q6OmdsTGluZVdpZHRoIChkb3VibGUgd2lkdGgpCit7CisgICAg
ZW5zdXJlQ29udGV4dDsKKyAgICA6OmdsTGluZVdpZHRoKChmbG9hdCkgd2lkdGgpOworfQorCit2
b2lkICBHcmFwaGljc0NvbnRleHQzRDo6Z2xMaW5rUHJvZ3JhbSAoQ2FudmFzUHJvZ3JhbSogcHJv
Z3JhbSkKK3sKKyAgICBpZiAoIXByb2dyYW0pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBl
bnN1cmVDb250ZXh0OworICAgIDo6Z2xMaW5rUHJvZ3JhbSgoR0x1aW50KSBwcm9ncmFtLT5vYmpl
Y3QoKSk7Cit9CisKK3ZvaWQgIEdyYXBoaWNzQ29udGV4dDNEOjpnbFBpeGVsU3RvcmVpICh1bnNp
Z25lZCBsb25nIHBuYW1lLCBsb25nIHBhcmFtKQoreworICAgIGVuc3VyZUNvbnRleHQ7CisgICAg
OjpnbFBpeGVsU3RvcmVpKHBuYW1lLCBwYXJhbSk7Cit9CisKK3ZvaWQgIEdyYXBoaWNzQ29udGV4
dDNEOjpnbFBvbHlnb25PZmZzZXQgKGRvdWJsZSBmYWN0b3IsIGRvdWJsZSB1bml0cykKK3sKKyAg
ICBlbnN1cmVDb250ZXh0OworICAgIDo6Z2xQb2x5Z29uT2Zmc2V0KChmbG9hdCkgZmFjdG9yLCAo
ZmxvYXQpIHVuaXRzKTsKK30KKwordm9pZCAgR3JhcGhpY3NDb250ZXh0M0Q6OmdsUmVsZWFzZVNo
YWRlckNvbXBpbGVyICgpCit7CisgICAgZW5zdXJlQ29udGV4dDsKKyAgICAvLzo6Z2xSZWxlYXNl
U2hhZGVyQ29tcGlsZXJFWFQoKTsKK30KKwordm9pZCAgR3JhcGhpY3NDb250ZXh0M0Q6OmdsUmVu
ZGVyYnVmZmVyU3RvcmFnZSAodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgaW50
ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KQor
eworICAgIGVuc3VyZUNvbnRleHQ7CisgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VFWFQodGFy
Z2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Cit9CisKK3ZvaWQgIEdyYXBoaWNz
Q29udGV4dDNEOjpnbFNhbXBsZUNvdmVyYWdlIChkb3VibGUgdmFsdWUsIGJvb2wgaW52ZXJ0KQor
eworICAgIGVuc3VyZUNvbnRleHQ7CisgICAgOjpnbFNhbXBsZUNvdmVyYWdlKChmbG9hdCkgdmFs
dWUsIGludmVydCk7Cit9CisKK3ZvaWQgIEdyYXBoaWNzQ29udGV4dDNEOjpnbFNjaXNzb3IgKGxv
bmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkK
K3sKKyAgICBlbnN1cmVDb250ZXh0OworICAgIDo6Z2xTY2lzc29yKHgsIHksIHdpZHRoLCBoZWln
aHQpOworfQorCit2b2lkICBHcmFwaGljc0NvbnRleHQzRDo6Z2xTaGFkZXJTb3VyY2UgKENhbnZh
c1NoYWRlciogc2hhZGVyLCBjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBpZiAoIXNoYWRl
cikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGVuc3VyZUNvbnRleHQ7CisgICAgY29uc3Qg
Q1N0cmluZyYgY3MgPSBzdHJpbmcudXRmOCgpOworICAgIGNvbnN0IGNoYXIqIHMgPSBjcy5kYXRh
KCk7CisgICAgCisgICAgaW50IGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKKyAgICA6OmdsU2hh
ZGVyU291cmNlKChHTHVpbnQpIHNoYWRlci0+b2JqZWN0KCksIDEsICZzLCAmbGVuZ3RoKTsKK30K
Kwordm9pZCAgR3JhcGhpY3NDb250ZXh0M0Q6OmdsU3RlbmNpbEZ1bmMgKHVuc2lnbmVkIGxvbmcg
ZnVuYywgbG9uZyByZWYsIHVuc2lnbmVkIGxvbmcgbWFzaykKK3sKKyAgICBlbnN1cmVDb250ZXh0
OworICAgIDo6Z2xTdGVuY2lsRnVuYyhmdW5jLCByZWYsIG1hc2spOworfQorCit2b2lkICBHcmFw
aGljc0NvbnRleHQzRDo6Z2xTdGVuY2lsRnVuY1NlcGFyYXRlICh1bnNpZ25lZCBsb25nIGZhY2Us
IHVuc2lnbmVkIGxvbmcgZnVuYywgbG9uZyByZWYsIHVuc2lnbmVkIGxvbmcgbWFzaykKK3sKKyAg
ICBlbnN1cmVDb250ZXh0OworICAgIDo6Z2xTdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMs
IHJlZiwgbWFzayk7Cit9CisKK3ZvaWQgIEdyYXBoaWNzQ29udGV4dDNEOjpnbFN0ZW5jaWxNYXNr
ICh1bnNpZ25lZCBsb25nIG1hc2spCit7CisgICAgZW5zdXJlQ29udGV4dDsKKyAgICA6OmdsU3Rl
bmNpbE1hc2sobWFzayk7Cit9CisKK3ZvaWQgIEdyYXBoaWNzQ29udGV4dDNEOjpnbFN0ZW5jaWxN
YXNrU2VwYXJhdGUgKHVuc2lnbmVkIGxvbmcgZmFjZSwgdW5zaWduZWQgbG9uZyBtYXNrKQorewor
ICAgIGVuc3VyZUNvbnRleHQ7CisgICAgOjpnbFN0ZW5jaWxNYXNrU2VwYXJhdGUoZmFjZSwgbWFz
ayk7Cit9CisKK3ZvaWQgIEdyYXBoaWNzQ29udGV4dDNEOjpnbFN0ZW5jaWxPcCAodW5zaWduZWQg
bG9uZyBmYWlsLCB1bnNpZ25lZCBsb25nIHpmYWlsLCB1bnNpZ25lZCBsb25nIHpwYXNzKQorewor
ICAgIGVuc3VyZUNvbnRleHQ7CisgICAgOjpnbFN0ZW5jaWxPcChmYWlsLCB6ZmFpbCwgenBhc3Mp
OworfQorCit2b2lkICBHcmFwaGljc0NvbnRleHQzRDo6Z2xTdGVuY2lsT3BTZXBhcmF0ZSAodW5z
aWduZWQgbG9uZyBmYWNlLCB1bnNpZ25lZCBsb25nIGZhaWwsIHVuc2lnbmVkIGxvbmcgemZhaWws
IHVuc2lnbmVkIGxvbmcgenBhc3MpCit7CisgICAgZW5zdXJlQ29udGV4dDsKKyAgICA6OmdsU3Rl
bmNpbE9wU2VwYXJhdGUoZmFjZSwgZmFpbCwgemZhaWwsIHpwYXNzKTsKK30KKworCit2b2lkICBH
cmFwaGljc0NvbnRleHQzRDo6Z2xUZXhQYXJhbWV0ZXIodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25l
ZCBwbmFtZSwgQ2FudmFzTnVtYmVyQXJyYXkqIGFycmF5KQoreworICAgIGlmICghYXJyYXkgfHwg
IWFycmF5LT5kYXRhKCkuc2l6ZSgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgZW5zdXJl
Q29udGV4dDsKKyAgICA6OmdsVGV4UGFyYW1ldGVyZnYodGFyZ2V0LCBwbmFtZSwgJihhcnJheS0+
ZGF0YSgpWzBdKSk7Cit9CisKK3ZvaWQgIEdyYXBoaWNzQ29udGV4dDNEOjpnbFRleFBhcmFtZXRl
cih1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIHBuYW1lLCBkb3VibGUgdmFsdWUpCit7CisgICAg
ZW5zdXJlQ29udGV4dDsKKyAgICA6OmdsVGV4UGFyYW1ldGVyZih0YXJnZXQsIHBuYW1lLCAoZmxv
YXQpIHZhbHVlKTsKK30KKwordm9pZCAgR3JhcGhpY3NDb250ZXh0M0Q6OmdsVW5pZm9ybShsb25n
IGxvY2F0aW9uLCBDYW52YXNOdW1iZXJBcnJheSogYXJyYXkpCit7CisgICAgaWYgKCFhcnJheSB8
fCAhYXJyYXktPmRhdGEoKS5zaXplKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBlbnN1
cmVDb250ZXh0OworICAgIDo6Z2xVbmlmb3JtMWZ2KGxvY2F0aW9uLCBhcnJheS0+ZGF0YSgpLnNp
emUoKSwgJihhcnJheS0+ZGF0YSgpWzBdKSk7Cit9CisKK3ZvaWQgIEdyYXBoaWNzQ29udGV4dDNE
OjpnbFVuaWZvcm0obG9uZyBsb2NhdGlvbiwgZmxvYXQgdjApCit7CisgICAgZW5zdXJlQ29udGV4
dDsKKyAgICA6OmdsVW5pZm9ybTFmKGxvY2F0aW9uLCB2MCk7Cit9CisKK3ZvaWQgIEdyYXBoaWNz
Q29udGV4dDNEOjpnbFVuaWZvcm0obG9uZyBsb2NhdGlvbiwgZmxvYXQgdjAsIGZsb2F0IHYxKQor
eworICAgIGVuc3VyZUNvbnRleHQ7CisgICAgOjpnbFVuaWZvcm0yZihsb2NhdGlvbiwgdjAsIHYx
KTsKK30KKwordm9pZCAgR3JhcGhpY3NDb250ZXh0M0Q6OmdsVW5pZm9ybShsb25nIGxvY2F0aW9u
LCBmbG9hdCB2MCwgZmxvYXQgdjEsIGZsb2F0IHYyKQoreworICAgIGVuc3VyZUNvbnRleHQ7Cisg
ICAgOjpnbFVuaWZvcm0zZihsb2NhdGlvbiwgdjAsIHYxLCB2Mik7Cit9CisKK3ZvaWQgIEdyYXBo
aWNzQ29udGV4dDNEOjpnbFVuaWZvcm0obG9uZyBsb2NhdGlvbiwgZmxvYXQgdjAsIGZsb2F0IHYx
LCBmbG9hdCB2MiwgZmxvYXQgdjMpCit7CisgICAgZW5zdXJlQ29udGV4dDsKKyAgICA6OmdsVW5p
Zm9ybTRmKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7Cit9CisKK3ZvaWQgIEdyYXBoaWNzQ29u
dGV4dDNEOjpnbFVuaWZvcm0obG9uZyBsb2NhdGlvbiwgaW50IHYwKQoreworICAgIGVuc3VyZUNv
bnRleHQ7CisgICAgOjpnbFVuaWZvcm0xaShsb2NhdGlvbiwgdjApOworfQorCit2b2lkICBHcmFw
aGljc0NvbnRleHQzRDo6Z2xVbmlmb3JtKGxvbmcgbG9jYXRpb24sIGludCB2MCwgaW50IHYxKQor
eworICAgIGVuc3VyZUNvbnRleHQ7CisgICAgOjpnbFVuaWZvcm0yaShsb2NhdGlvbiwgdjAsIHYx
KTsKK30KKwordm9pZCAgR3JhcGhpY3NDb250ZXh0M0Q6OmdsVW5pZm9ybShsb25nIGxvY2F0aW9u
LCBpbnQgdjAsIGludCB2MSwgaW50IHYyKQoreworICAgIGVuc3VyZUNvbnRleHQ7CisgICAgOjpn
bFVuaWZvcm0zaShsb2NhdGlvbiwgdjAsIHYxLCB2Mik7Cit9CisKK3ZvaWQgIEdyYXBoaWNzQ29u
dGV4dDNEOjpnbFVuaWZvcm0obG9uZyBsb2NhdGlvbiwgaW50IHYwLCBpbnQgdjEsIGludCB2Miwg
aW50IHYzKQoreworICAgIGVuc3VyZUNvbnRleHQ7CisgICAgOjpnbFVuaWZvcm00aShsb2NhdGlv
biwgdjAsIHYxLCB2MiwgdjMpOworfQorCit2b2lkICBHcmFwaGljc0NvbnRleHQzRDo6Z2xVbmlm
b3JtTWF0cml4KGxvbmcgbG9jYXRpb24sIGxvbmcgY291bnQsIGJvb2wgdHJhbnNwb3NlLCBDYW52
YXNOdW1iZXJBcnJheSphcnJheSkKK3sKKyAgICBpZiAoIWFycmF5IHx8ICFhcnJheS0+ZGF0YSgp
LnNpemUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGludCBuID0gYXJyYXktPmRhdGEo
KS5zaXplKCkgLyBjb3VudDsKKyAgICBpZiAobiA8IDIpCisgICAgICAgIHJldHVybjsKKyAgICAK
KyAgICBpZiAobiA+IDQpCisgICAgICAgIG4gPSA0OworICAgIAorICAgIGVuc3VyZUNvbnRleHQ7
CisgICAgCisgICAgc3dpdGNoKG4pIHsKKyAgICAgICAgY2FzZSAyOiA6OmdsVW5pZm9ybU1hdHJp
eDJmdihsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgJihhcnJheS0+ZGF0YSgpWzBdKSk7IGJy
ZWFrOworICAgICAgICBjYXNlIDM6IDo6Z2xVbmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBjb3Vu
dCwgdHJhbnNwb3NlLCAmKGFycmF5LT5kYXRhKClbMF0pKTsgYnJlYWs7CisgICAgICAgIGNhc2Ug
NDogOjpnbFVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsICYoYXJy
YXktPmRhdGEoKVswXSkpOyBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgIEdyYXBoaWNzQ29udGV4
dDNEOjpnbFVuaWZvcm1NYXRyaXgobG9uZyBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIGNvbnN0
IFZlY3RvcjxXZWJLaXRDU1NNYXRyaXgqPiYgYXJyYXkpCit7CisgICAgaW50IGNvdW50ID0gYXJy
YXkuc2l6ZSgpOworICAgIGZsb2F0KiBmbG9hdHMgPSAoZmxvYXQqKSBtYWxsb2MoY291bnQgKiAx
NiAqIHNpemVvZihmbG9hdCkpOworICAgIAorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7
ICsraSkgeworICAgICAgICBmbG9hdHNbaSoxNisgMF0gPSAoZmxvYXQpIGFycmF5W2ldLT5tMTEo
KTsKKyAgICAgICAgZmxvYXRzW2kqMTYrIDFdID0gKGZsb2F0KSBhcnJheVtpXS0+bTEyKCk7Cisg
ICAgICAgIGZsb2F0c1tpKjE2KyAyXSA9IChmbG9hdCkgYXJyYXlbaV0tPm0xMygpOworICAgICAg
ICBmbG9hdHNbaSoxNisgM10gPSAoZmxvYXQpIGFycmF5W2ldLT5tMTQoKTsKKyAgICAgICAgZmxv
YXRzW2kqMTYrIDRdID0gKGZsb2F0KSBhcnJheVtpXS0+bTIxKCk7CisgICAgICAgIGZsb2F0c1tp
KjE2KyA1XSA9IChmbG9hdCkgYXJyYXlbaV0tPm0yMigpOworICAgICAgICBmbG9hdHNbaSoxNisg
Nl0gPSAoZmxvYXQpIGFycmF5W2ldLT5tMjMoKTsKKyAgICAgICAgZmxvYXRzW2kqMTYrIDddID0g
KGZsb2F0KSBhcnJheVtpXS0+bTI0KCk7CisgICAgICAgIGZsb2F0c1tpKjE2KyA4XSA9IChmbG9h
dCkgYXJyYXlbaV0tPm0zMSgpOworICAgICAgICBmbG9hdHNbaSoxNisgOV0gPSAoZmxvYXQpIGFy
cmF5W2ldLT5tMzIoKTsKKyAgICAgICAgZmxvYXRzW2kqMTYrMTBdID0gKGZsb2F0KSBhcnJheVtp
XS0+bTMzKCk7CisgICAgICAgIGZsb2F0c1tpKjE2KzExXSA9IChmbG9hdCkgYXJyYXlbaV0tPm0z
NCgpOworICAgICAgICBmbG9hdHNbaSoxNisxMl0gPSAoZmxvYXQpIGFycmF5W2ldLT5tNDEoKTsK
KyAgICAgICAgZmxvYXRzW2kqMTYrMTNdID0gKGZsb2F0KSBhcnJheVtpXS0+bTQyKCk7CisgICAg
ICAgIGZsb2F0c1tpKjE2KzE0XSA9IChmbG9hdCkgYXJyYXlbaV0tPm00MygpOworICAgICAgICBm
bG9hdHNbaSoxNisxNV0gPSAoZmxvYXQpIGFycmF5W2ldLT5tNDQoKTsKKyAgICB9CisgICAgCisg
ICAgOjpnbFVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIGZsb2F0
cyk7CisgICAgZnJlZShmbG9hdHMpOworfQorCit2b2lkICBHcmFwaGljc0NvbnRleHQzRDo6Z2xV
bmlmb3JtTWF0cml4KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBjb25zdCBXZWJLaXRD
U1NNYXRyaXgqIG1hdHJpeCkKK3sKKyAgICBmbG9hdCogZmxvYXRzID0gKGZsb2F0KikgbWFsbG9j
KDE2ICogc2l6ZW9mKGZsb2F0KSk7CisgICAgCisgICAgZmxvYXRzWyAwXSA9IChmbG9hdCkgbWF0
cml4LT5tMTEoKTsKKyAgICBmbG9hdHNbIDFdID0gKGZsb2F0KSBtYXRyaXgtPm0xMigpOworICAg
IGZsb2F0c1sgMl0gPSAoZmxvYXQpIG1hdHJpeC0+bTEzKCk7CisgICAgZmxvYXRzWyAzXSA9IChm
bG9hdCkgbWF0cml4LT5tMTQoKTsKKyAgICBmbG9hdHNbIDRdID0gKGZsb2F0KSBtYXRyaXgtPm0y
MSgpOworICAgIGZsb2F0c1sgNV0gPSAoZmxvYXQpIG1hdHJpeC0+bTIyKCk7CisgICAgZmxvYXRz
WyA2XSA9IChmbG9hdCkgbWF0cml4LT5tMjMoKTsKKyAgICBmbG9hdHNbIDddID0gKGZsb2F0KSBt
YXRyaXgtPm0yNCgpOworICAgIGZsb2F0c1sgOF0gPSAoZmxvYXQpIG1hdHJpeC0+bTMxKCk7Cisg
ICAgZmxvYXRzWyA5XSA9IChmbG9hdCkgbWF0cml4LT5tMzIoKTsKKyAgICBmbG9hdHNbMTBdID0g
KGZsb2F0KSBtYXRyaXgtPm0zMygpOworICAgIGZsb2F0c1sxMV0gPSAoZmxvYXQpIG1hdHJpeC0+
bTM0KCk7CisgICAgZmxvYXRzWzEyXSA9IChmbG9hdCkgbWF0cml4LT5tNDEoKTsKKyAgICBmbG9h
dHNbMTNdID0gKGZsb2F0KSBtYXRyaXgtPm00MigpOworICAgIGZsb2F0c1sxNF0gPSAoZmxvYXQp
IG1hdHJpeC0+bTQzKCk7CisgICAgZmxvYXRzWzE1XSA9IChmbG9hdCkgbWF0cml4LT5tNDQoKTsK
KyAgICAKKyAgICA6OmdsVW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgMSwgdHJhbnNwb3NlLCBm
bG9hdHMpOworICAgIGZyZWUoZmxvYXRzKTsKK30KKwordm9pZCAgR3JhcGhpY3NDb250ZXh0M0Q6
OmdsVXNlUHJvZ3JhbSAoQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSkKK3sKKyAgICBpZiAoIXByb2dy
YW0pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBlbnN1cmVDb250ZXh0OworICAgIDo6Z2xV
c2VQcm9ncmFtKChHTHVpbnQpIHByb2dyYW0tPm9iamVjdCgpKTsKK30KKwordm9pZCAgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdsVmFsaWRhdGVQcm9ncmFtIChDYW52YXNQcm9ncmFtKiBwcm9ncmFtKQor
eworICAgIGlmICghcHJvZ3JhbSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGVuc3VyZUNv
bnRleHQ7CisgICAgOjpnbFZhbGlkYXRlUHJvZ3JhbSgoR0x1aW50KSBwcm9ncmFtLT5vYmplY3Qo
KSk7Cit9CisKK3ZvaWQgIEdyYXBoaWNzQ29udGV4dDNEOjpnbFZlcnRleEF0dHJpYiAodW5zaWdu
ZWQgbG9uZyBpbmR4LCBmbG9hdCB2MCkKK3sKKyAgICBlbnN1cmVDb250ZXh0OworICAgIDo6Z2xW
ZXJ0ZXhBdHRyaWIxZihpbmR4LCB2MCk7Cit9CisKK3ZvaWQgIEdyYXBoaWNzQ29udGV4dDNEOjpn
bFZlcnRleEF0dHJpYiAodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCB2MCwgZmxvYXQgdjEpCit7
CisgICAgZW5zdXJlQ29udGV4dDsKKyAgICA6OmdsVmVydGV4QXR0cmliMmYoaW5keCwgdjAsIHYx
KTsKK30KKwordm9pZCAgR3JhcGhpY3NDb250ZXh0M0Q6OmdsVmVydGV4QXR0cmliICh1bnNpZ25l
ZCBsb25nIGluZHgsIGZsb2F0IHYwLCBmbG9hdCB2MSwgZmxvYXQgdjIpCit7CisgICAgZW5zdXJl
Q29udGV4dDsKKyAgICA6OmdsVmVydGV4QXR0cmliM2YoaW5keCwgdjAsIHYxLCB2Mik7Cit9CisK
K3ZvaWQgIEdyYXBoaWNzQ29udGV4dDNEOjpnbFZlcnRleEF0dHJpYiAodW5zaWduZWQgbG9uZyBp
bmR4LCBmbG9hdCB2MCwgZmxvYXQgdjEsIGZsb2F0IHYyLCBmbG9hdCB2MykKK3sKKyAgICBlbnN1
cmVDb250ZXh0OworICAgIDo6Z2xWZXJ0ZXhBdHRyaWI0ZihpbmR4LCB2MCwgdjEsIHYyLCB2Myk7
Cit9CisKK3ZvaWQgIEdyYXBoaWNzQ29udGV4dDNEOjpnbFZlcnRleEF0dHJpYiAodW5zaWduZWQg
bG9uZyBpbmR4LCBDYW52YXNOdW1iZXJBcnJheSogYXJyYXkpCit7CisgICAgaWYgKCFhcnJheSB8
fCAhYXJyYXktPmRhdGEoKS5zaXplKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBG
SVhNRTogSG93IGRvIHdlIGRlY2lkZSBiZXR3ZWVuIDFmdiAuLiA0ZnY/CisgICAgZW5zdXJlQ29u
dGV4dDsKKyAgICA6OmdsVmVydGV4QXR0cmliMWZ2KGluZHgsICYoYXJyYXktPmRhdGEoKVswXSkp
OworfQorCisKK3ZvaWQgIEdyYXBoaWNzQ29udGV4dDNEOjpnbFZlcnRleEF0dHJpYlBvaW50ZXIo
dW5zaWduZWQgbG9uZyBpbmR4LCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgdHlwZSwgYm9vbCBu
b3JtYWxpemVkLCB1bnNpZ25lZCBsb25nIHN0cmlkZSwgQ2FudmFzTnVtYmVyQXJyYXkqIGFycmF5
KQoreworICAgIGVuc3VyZUNvbnRleHQ7CisgICAgCisgICAgaWYgKGFycmF5KSB7CisgICAgICAg
IGlmIChtX3ZlcnRleEFycmF5LnNpemUoKSA8PSBpbmR4KQorICAgICAgICAgICAgbV92ZXJ0ZXhB
cnJheS5yZXNpemUoaW5keCsxKTsKKyAgICAgICAgCisgICAgICAgIG1fdmVydGV4QXJyYXlbaW5k
eF0gPSBhcnJheS0+ZGF0YSgpOworICAgIH0KKyAgICBlbHNlIGlmIChtX3ZlcnRleEFycmF5LnNp
emUoKSA+IGluZHgpCisgICAgICAgIG1fdmVydGV4QXJyYXlbaW5keF0uY2xlYXIoKTsKKyAgICAK
KyAgICA6OmdsVmVydGV4QXR0cmliUG9pbnRlcihpbmR4LCBzaXplLCB0eXBlLCBub3JtYWxpemVk
LCBzdHJpZGUsIGFycmF5ID8gJihtX3ZlcnRleEFycmF5W2luZHhdWzBdKSA6IDApOworfQorCit2
b2lkICBHcmFwaGljc0NvbnRleHQzRDo6Z2xWaWV3cG9ydChsb25nIHgsIGxvbmcgeSwgdW5zaWdu
ZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpCit7CisgICAgZW5zdXJlQ29udGV4
dDsKKyAgICBpZiAoaXNuYW4oeCkpCisgICAgICAgIHggPSAwOworICAgIGlmIChpc25hbih5KSkK
KyAgICAgICAgeSA9IDA7CisgICAgaWYgKGlzbmFuKHdpZHRoKSkKKyAgICAgICAgd2lkdGggPSAx
MDA7CisgICAgaWYgKGlzbmFuKGhlaWdodCkpCisgICAgICAgIGhlaWdodCA9IDEwMDsKKyAgICA6
OmdsVmlld3BvcnQoKEdMaW50KSB4LCAoR0xpbnQpIHksIChHTHNpemVpKSB3aWR0aCwgKEdMc2l6
ZWkpIGhlaWdodCk7Cit9CisKKy8vIE5vbi1HTCBmdW5jdGlvbnMKK1Bhc3NSZWZQdHI8Q2FudmFz
QnVmZmVyPiAgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUJ1ZmZlcigpCit7CisgICAgZW5zdXJl
Q29udGV4dDsKKyAgICBSZWZQdHI8Q2FudmFzQnVmZmVyPiBvID0gQ2FudmFzQnVmZmVyOjpjcmVh
dGUodGhpcyk7CisgICAgYWRkT2JqZWN0KG8uZ2V0KCkpOworICAgIHJldHVybiBvOworfQorCitQ
YXNzUmVmUHRyPENhbnZhc0ZyYW1lYnVmZmVyPiAgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUZy
YW1lYnVmZmVyKCkKK3sKKyAgICBlbnN1cmVDb250ZXh0OworICAgIFJlZlB0cjxDYW52YXNGcmFt
ZWJ1ZmZlcj4gbyA9IENhbnZhc0ZyYW1lYnVmZmVyOjpjcmVhdGUodGhpcyk7CisgICAgYWRkT2Jq
ZWN0KG8uZ2V0KCkpOworICAgIHJldHVybiBvOworfQorCitQYXNzUmVmUHRyPENhbnZhc1RleHR1
cmU+ICBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlVGV4dHVyZSgpCit7CisgICAgZW5zdXJlQ29u
dGV4dDsKKyAgICBSZWZQdHI8Q2FudmFzVGV4dHVyZT4gbyA9IENhbnZhc1RleHR1cmU6OmNyZWF0
ZSh0aGlzKTsKKyAgICBhZGRPYmplY3Qoby5nZXQoKSk7CisgICAgcmV0dXJuIG87Cit9CisKK1Bh
c3NSZWZQdHI8Q2FudmFzUHJvZ3JhbT4gIEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVQcm9ncmFt
ICgpCit7CisgICAgZW5zdXJlQ29udGV4dDsKKyAgICBSZWZQdHI8Q2FudmFzUHJvZ3JhbT4gbyA9
IENhbnZhc1Byb2dyYW06OmNyZWF0ZSh0aGlzKTsKKyAgICBhZGRPYmplY3Qoby5nZXQoKSk7Cisg
ICAgcmV0dXJuIG87Cit9CisKK1Bhc3NSZWZQdHI8Q2FudmFzUmVuZGVyYnVmZmVyPiAgR3JhcGhp
Y3NDb250ZXh0M0Q6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCit7CisgICAgZW5zdXJlQ29udGV4dDsK
KyAgICBSZWZQdHI8Q2FudmFzUmVuZGVyYnVmZmVyPiBvID0gQ2FudmFzUmVuZGVyYnVmZmVyOjpj
cmVhdGUodGhpcyk7CisgICAgYWRkT2JqZWN0KG8uZ2V0KCkpOworICAgIHJldHVybiBvOworfQor
CitQYXNzUmVmUHRyPENhbnZhc1NoYWRlcj4gIEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVTaGFk
ZXIgKHVuc2lnbmVkIGxvbmcgdHlwZSkKK3sKKyAgICBlbnN1cmVDb250ZXh0OworICAgIFJlZlB0
cjxDYW52YXNTaGFkZXI+IG8gPSBDYW52YXNTaGFkZXI6OmNyZWF0ZSh0aGlzLCB0eXBlKTsKKyAg
ICBhZGRPYmplY3Qoby5nZXQoKSk7CisgICAgcmV0dXJuIG87Cit9CisKK3ZvaWQgIEdyYXBoaWNz
Q29udGV4dDNEOjpkZWxldGVCdWZmZXIgKENhbnZhc0J1ZmZlciogYnVmZmVyKQoreworICAgIGlm
ICghYnVmZmVyKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgZW5zdXJlQ29udGV4dDsKKyAg
ICBidWZmZXItPmRlbGV0ZU9iamVjdCgpOworfQorCit2b2lkICBHcmFwaGljc0NvbnRleHQzRDo6
ZGVsZXRlRnJhbWVidWZmZXIgKENhbnZhc0ZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZlcikKK3sKKyAg
ICBpZiAoIWZyYW1lYnVmZmVyKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgZW5zdXJlQ29u
dGV4dDsKKyAgICBmcmFtZWJ1ZmZlci0+ZGVsZXRlT2JqZWN0KCk7Cit9CisKK3ZvaWQgIEdyYXBo
aWNzQ29udGV4dDNEOjpkZWxldGVQcm9ncmFtIChDYW52YXNQcm9ncmFtKiBwcm9ncmFtKQorewor
ICAgIGlmICghcHJvZ3JhbSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGVuc3VyZUNvbnRl
eHQ7CisgICAgcHJvZ3JhbS0+ZGVsZXRlT2JqZWN0KCk7Cit9CisKK3ZvaWQgIEdyYXBoaWNzQ29u
dGV4dDNEOjpkZWxldGVSZW5kZXJidWZmZXIgKENhbnZhc1JlbmRlcmJ1ZmZlciogcmVuZGVyYnVm
ZmVyKQoreworICAgIGlmICghcmVuZGVyYnVmZmVyKQorICAgICAgICByZXR1cm47CisgICAgCisg
ICAgZW5zdXJlQ29udGV4dDsKKyAgICByZW5kZXJidWZmZXItPmRlbGV0ZU9iamVjdCgpOworfQor
Cit2b2lkICBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlU2hhZGVyIChDYW52YXNTaGFkZXIqIHNo
YWRlcikKK3sKKyAgICBpZiAoIXNoYWRlcikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGVu
c3VyZUNvbnRleHQ7CisgICAgc2hhZGVyLT5kZWxldGVPYmplY3QoKTsKK30KKwordm9pZCAgR3Jh
cGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVRleHR1cmUgKENhbnZhc1RleHR1cmUqIHRleHR1cmUpCit7
CisgICAgaWYgKCF0ZXh0dXJlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgZW5zdXJlQ29u
dGV4dDsKKyAgICB0ZXh0dXJlLT5kZWxldGVPYmplY3QoKTsKK30KKworc3RhdGljIGludCBzaXpl
Rm9yR2V0UGFyYW0odW5zaWduZWQgbG9uZyBwbmFtZSkKK3sKKyAgICBzd2l0Y2gocG5hbWUpIHsK
KyAgICAgICAgY2FzZSBHTF9BQ1RJVkVfVEVYVFVSRTogICAgICAgICAgICAgICAgICByZXR1cm4g
MTsKKyAgICAgICAgY2FzZSBHTF9BTElBU0VEX0xJTkVfV0lEVEhfUkFOR0U6ICAgICAgICByZXR1
cm4gMjsKKyAgICAgICAgY2FzZSBHTF9BTElBU0VEX1BPSU5UX1NJWkVfUkFOR0U6ICAgICAgICBy
ZXR1cm4gMjsKKyAgICAgICAgY2FzZSBHTF9BTFBIQV9CSVRTOiAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSBHTF9BUlJBWV9CVUZGRVJfQklORElORzogICAgICAg
ICAgICByZXR1cm4gMTsgLy8gKCogYWN0dWFsbHkgYSBDYW52YXNCdWZmZXIqKQorICAgICAgICBj
YXNlIEdMX0JMRU5EOiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAg
ICBjYXNlIEdMX0JMRU5EX0NPTE9SOiAgICAgICAgICAgICAgICAgICAgIHJldHVybiA0OworICAg
ICAgICBjYXNlIEdMX0JMRU5EX0RTVF9BTFBIQTogICAgICAgICAgICAgICAgIHJldHVybiAxOwor
ICAgICAgICBjYXNlIEdMX0JMRU5EX0RTVF9SR0I6ICAgICAgICAgICAgICAgICAgIHJldHVybiAx
OworICAgICAgICBjYXNlIEdMX0JMRU5EX0VRVUFUSU9OX0FMUEhBOiAgICAgICAgICAgIHJldHVy
biAxOworICAgICAgICBjYXNlIEdMX0JMRU5EX0VRVUFUSU9OX1JHQjogICAgICAgICAgICAgIHJl
dHVybiAxOworICAgICAgICBjYXNlIEdMX0JMRU5EX1NSQ19BTFBIQTogICAgICAgICAgICAgICAg
IHJldHVybiAxOworICAgICAgICBjYXNlIEdMX0JMRU5EX1NSQ19SR0I6ICAgICAgICAgICAgICAg
ICAgIHJldHVybiAxOworICAgICAgICBjYXNlIEdMX0JMVUVfQklUUzogICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiAxOworICAgICAgICBjYXNlIEdMX0NPTE9SX0NMRUFSX1ZBTFVFOiAgICAg
ICAgICAgICAgIHJldHVybiA0OworICAgICAgICBjYXNlIEdMX0NPTE9SX1dSSVRFTUFTSzogICAg
ICAgICAgICAgICAgIHJldHVybiA0OworICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfVEVYVFVS
RV9GT1JNQVRTOiAgICAgIHJldHVybiBHTF9OVU1fQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFM7
CisgICAgICAgIGNhc2UgR0xfQ1VMTF9GQUNFOiAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IDE7CisgICAgICAgIGNhc2UgR0xfQ1VMTF9GQUNFX01PREU6ICAgICAgICAgICAgICAgICAgcmV0
dXJuIDE7CisgICAgICAgIGNhc2UgR0xfQ1VSUkVOVF9QUk9HUkFNOiAgICAgICAgICAgICAgICAg
cmV0dXJuIDE7IC8vICgqIGFjdHVhbGx5IGEgQ2FudmFzUHJvZ3JhbSopCisgICAgICAgIGNhc2Ug
R0xfREVQVEhfQklUUzogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGNh
c2UgR0xfREVQVEhfQ0xFQVJfVkFMVUU6ICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAg
IGNhc2UgR0xfREVQVEhfRlVOQzogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAg
ICAgIGNhc2UgR0xfREVQVEhfUkFOR0U6ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDI7Cisg
ICAgICAgIGNhc2UgR0xfREVQVEhfVEVTVDogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7
CisgICAgICAgIGNhc2UgR0xfREVQVEhfV1JJVEVNQVNLOiAgICAgICAgICAgICAgICAgcmV0dXJu
IDE7CisgICAgICAgIGNhc2UgR0xfRElUSEVSOiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIDE7CisgICAgICAgIGNhc2UgR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORzogICAg
cmV0dXJuIDE7IC8vICgqIGFjdHVhbGx5IGEgQ2FudmFzQnVmZmVyKikKKyAgICAgICAgY2FzZSBH
TF9GUkFNRUJVRkZFUl9CSU5ESU5HX0VYVDogICAgICAgICByZXR1cm4gMTsgLy8gKCogYWN0dWFs
bHkgYSBDYW52YXNGcmFtZWJ1ZmZlciopCisgICAgICAgIGNhc2UgR0xfRlJPTlRfRkFDRTogICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGNhc2UgR0xfR0VORVJBVEVfTUlQ
TUFQX0hJTlQ6ICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGNhc2UgR0xfR1JFRU5fQklU
UzogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICAvL2Nhc2UgR0xf
SU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVQ6cmV0dXJuIDE7CisgICAgICAgICAgICAv
L2Nhc2UgR0xfSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFOiAgcmV0dXJuIDE7CisgICAg
ICAgIGNhc2UgR0xfTElORV9XSURUSDogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7Cisg
ICAgICAgIGNhc2UgR0xfTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFM6cmV0dXJuIDE7
CisgICAgICAgIGNhc2UgR0xfTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRTogICAgICAgcmV0dXJu
IDE7CisgICAgICAgICAgICAvL2Nhc2UgR0xfTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUzog
ICAgcmV0dXJuIDE7CisgICAgICAgIGNhc2UgR0xfTUFYX1JFTkRFUkJVRkZFUl9TSVpFX0VYVDog
ICAgICAgcmV0dXJuIDE7CisgICAgICAgIGNhc2UgR0xfTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM6
ICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGNhc2UgR0xfTUFYX1RFWFRVUkVfU0laRTogICAg
ICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICAvL2Nhc2UgR0xfTUFYX1ZBUllJTkdf
VkVDVE9SUzogICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGNhc2UgR0xfTUFYX1ZFUlRF
WF9BVFRSSUJTOiAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGNhc2UgR0xfTUFYX1ZF
UlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTOiAgcmV0dXJuIDE7CisgICAgICAgICAgICAvL2Nhc2Ug
R0xfTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlM6ICAgICAgcmV0dXJuIDE7CisgICAgICAgIGNh
c2UgR0xfTUFYX1ZJRVdQT1JUX0RJTVM6ICAgICAgICAgICAgICAgcmV0dXJuIDI7CisgICAgICAg
IGNhc2UgR0xfTlVNX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTOiAgcmV0dXJuIDE7CisgICAg
ICAgICAgICAvL2Nhc2UgR0xfTlVNX1NIQURFUl9CSU5BUllfRk9STUFUUzogICAgICAgcmV0dXJu
IDE7CisgICAgICAgIGNhc2UgR0xfUEFDS19BTElHTk1FTlQ6ICAgICAgICAgICAgICAgICAgcmV0
dXJuIDE7CisgICAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfRkFDVE9SOiAgICAgICAgICAg
cmV0dXJuIDE7CisgICAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfRklMTDogICAgICAgICAg
ICAgcmV0dXJuIDE7CisgICAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfVU5JVFM6ICAgICAg
ICAgICAgcmV0dXJuIDE7CisgICAgICAgIGNhc2UgR0xfUkVEX0JJVFM6ICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGNhc2UgR0xfUkVOREVSQlVGRkVSX0JJTkRJTkdf
RVhUOiAgICAgICAgcmV0dXJuIDE7IC8vICgqIGFjdHVhbGx5IGEgQ2FudmFzUmVuZGVyYnVmZmVy
KikKKyAgICAgICAgY2FzZSBHTF9TQU1QTEVfQlVGRkVSUzogICAgICAgICAgICAgICAgICByZXR1
cm4gMTsKKyAgICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0VfSU5WRVJUOiAgICAgICAgICBy
ZXR1cm4gMTsKKyAgICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0VfVkFMVUU6ICAgICAgICAg
ICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSBHTF9TQU1QTEVTOiAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSBHTF9TQ0lTU09SX0JPWDogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gNDsKKyAgICAgICAgY2FzZSBHTF9TQ0lTU09SX1RFU1Q6ICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIC8vY2FzZSBHTF9TSEFERVJfQklOQVJZ
X0ZPUk1BVFM6ICAgICAgICAgICByZXR1cm4gR0xfTlVNX1NIQURFUl9CSU5BUllfRk9STUFUUzsK
KyAgICAgICAgICAgIC8vY2FzZSBHTF9TSEFERVJfQ09NUElMRVI6ICAgICAgICAgICAgICAgICBy
ZXR1cm4gMTsKKyAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfRkFJTDogICAgICAgICAgICAg
ICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfRlVOQzogICAgICAgICAg
ICAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9G
QUlMOiAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfUEFTU19ERVBU
SF9QQVNTOiAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfUkVGOiAg
ICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfVkFM
VUVfTUFTSzogICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tf
V1JJVEVNQVNLOiAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JJ
VFM6ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSBHTF9TVEVOQ0lM
X0NMRUFSX1ZBTFVFOiAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSBHTF9TVEVO
Q0lMX0ZBSUw6ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSBHTF9T
VEVOQ0lMX0ZVTkM6ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSBH
TF9TVEVOQ0lMX1BBU1NfREVQVEhfRkFJTDogICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2Fz
ZSBHTF9TVEVOQ0lMX1BBU1NfREVQVEhfUEFTUzogICAgICAgICByZXR1cm4gMTsKKyAgICAgICAg
Y2FzZSBHTF9TVEVOQ0lMX1JFRjogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAg
ICAgY2FzZSBHTF9TVEVOQ0lMX1RFU1Q6ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAg
ICAgICAgY2FzZSBHTF9TVEVOQ0lMX1ZBTFVFX01BU0s6ICAgICAgICAgICAgICByZXR1cm4gMTsK
KyAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX1dSSVRFTUFTSzogICAgICAgICAgICAgICByZXR1cm4g
MTsKKyAgICAgICAgY2FzZSBHTF9TVUJQSVhFTF9CSVRTOiAgICAgICAgICAgICAgICAgICByZXR1
cm4gMTsKKyAgICAgICAgY2FzZSBHTF9URVhUVVJFX0JJTkRJTkdfMkQ6ICAgICAgICAgICAgICBy
ZXR1cm4gMTsgLy8gKCogYWN0dWFsbHkgYSBDYW52YXNUZXh0dXJlKikKKyAgICAgICAgY2FzZSBH
TF9URVhUVVJFX0JJTkRJTkdfQ1VCRV9NQVA6ICAgICAgICByZXR1cm4gMTsgLy8gKCogYWN0dWFs
bHkgYSBDYW52YXNUZXh0dXJlKikKKyAgICAgICAgY2FzZSBHTF9VTlBBQ0tfQUxJR05NRU5UOiAg
ICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSBHTF9WSUVXUE9SVDogICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gNDsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIC0xOwor
fQorCitzdGF0aWMgaW50IHR5cGVGb3JHZXRQYXJhbSh1bnNpZ25lZCBsb25nIHBuYW1lKQorewor
ICAgIHN3aXRjaChwbmFtZSkgeworICAgICAgICBjYXNlIEdMX0FDVElWRV9URVhUVVJFOiAgICAg
ICAgICAgICAgICAgIHJldHVybiBHTF9JTlQ7CisgICAgICAgIGNhc2UgR0xfQUxJQVNFRF9MSU5F
X1dJRFRIX1JBTkdFOiAgICAgICAgcmV0dXJuIEdMX0ZMT0FUOworICAgICAgICBjYXNlIEdMX0FM
SUFTRURfUE9JTlRfU0laRV9SQU5HRTogICAgICAgIHJldHVybiBHTF9GTE9BVDsKKyAgICAgICAg
Y2FzZSBHTF9BTFBIQV9CSVRTOiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfSU5UOwor
ICAgICAgICBjYXNlIEdMX0FSUkFZX0JVRkZFUl9CSU5ESU5HOiAgICAgICAgICAgIHJldHVybiBH
TF9JTlQ7IC8vICgqIGFjdHVhbGx5IGEgQ2FudmFzQnVmZmVyKikKKyAgICAgICAgY2FzZSBHTF9C
TEVORDogICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfQllURTsKKyAgICAgICAg
Y2FzZSBHTF9CTEVORF9DT0xPUjogICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfRkxPQVQ7
CisgICAgICAgIGNhc2UgR0xfQkxFTkRfRFNUX0FMUEhBOiAgICAgICAgICAgICAgICAgcmV0dXJu
IEdMX0lOVDsKKyAgICAgICAgY2FzZSBHTF9CTEVORF9EU1RfUkdCOiAgICAgICAgICAgICAgICAg
ICByZXR1cm4gR0xfSU5UOworICAgICAgICBjYXNlIEdMX0JMRU5EX0VRVUFUSU9OX0FMUEhBOiAg
ICAgICAgICAgIHJldHVybiBHTF9JTlQ7CisgICAgICAgIGNhc2UgR0xfQkxFTkRfRVFVQVRJT05f
UkdCOiAgICAgICAgICAgICAgcmV0dXJuIEdMX0lOVDsKKyAgICAgICAgY2FzZSBHTF9CTEVORF9T
UkNfQUxQSEE6ICAgICAgICAgICAgICAgICByZXR1cm4gR0xfSU5UOworICAgICAgICBjYXNlIEdM
X0JMRU5EX1NSQ19SR0I6ICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9JTlQ7CisgICAgICAg
IGNhc2UgR0xfQkxVRV9CSVRTOiAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0lOVDsK
KyAgICAgICAgY2FzZSBHTF9DT0xPUl9DTEVBUl9WQUxVRTogICAgICAgICAgICAgICByZXR1cm4g
R0xfRkxPQVQ7CisgICAgICAgIGNhc2UgR0xfQ09MT1JfV1JJVEVNQVNLOiAgICAgICAgICAgICAg
ICAgcmV0dXJuIEdMX0JZVEU7CisgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9URVhUVVJFX0ZP
Uk1BVFM6ICAgICByZXR1cm4gR0xfSU5UOworICAgICAgICBjYXNlIEdMX0NVTExfRkFDRTogICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9CWVRFOworICAgICAgICBjYXNlIEdMX0NVTExf
RkFDRV9NT0RFOiAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9JTlQ7CisgICAgICAgIGNhc2Ug
R0xfQ1VSUkVOVF9QUk9HUkFNOiAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0lOVDsgLy8gKCog
YWN0dWFsbHkgYSBDYW52YXNQcm9ncmFtKikKKyAgICAgICAgY2FzZSBHTF9ERVBUSF9CSVRTOiAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfSU5UOworICAgICAgICBjYXNlIEdMX0RFUFRI
X0NMRUFSX1ZBTFVFOiAgICAgICAgICAgICAgIHJldHVybiBHTF9GTE9BVDsKKyAgICAgICAgY2Fz
ZSBHTF9ERVBUSF9GVU5DOiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfSU5UOworICAg
ICAgICBjYXNlIEdMX0RFUFRIX1JBTkdFOiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9G
TE9BVDsKKyAgICAgICAgY2FzZSBHTF9ERVBUSF9URVNUOiAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gR0xfQllURTsKKyAgICAgICAgY2FzZSBHTF9ERVBUSF9XUklURU1BU0s6ICAgICAgICAg
ICAgICAgICByZXR1cm4gR0xfQllURTsKKyAgICAgICAgY2FzZSBHTF9ESVRIRVI6ICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gR0xfQllURTsKKyAgICAgICAgY2FzZSBHTF9FTEVNRU5U
X0FSUkFZX0JVRkZFUl9CSU5ESU5HOiAgICByZXR1cm4gR0xfSU5UOyAvLyAoKiBhY3R1YWxseSBh
IENhbnZhc0J1ZmZlciopCisgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQklORElOR19FWFQ6
ICAgICAgICAgcmV0dXJuIEdMX0lOVDsgLy8gKCogYWN0dWFsbHkgYSBDYW52YXNGcmFtZWJ1ZmZl
ciopCisgICAgICAgIGNhc2UgR0xfRlJPTlRfRkFDRTogICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIEdMX0lOVDsKKyAgICAgICAgY2FzZSBHTF9HRU5FUkFURV9NSVBNQVBfSElOVDogICAgICAg
ICAgICByZXR1cm4gR0xfSU5UOworICAgICAgICBjYXNlIEdMX0dSRUVOX0JJVFM6ICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBHTF9JTlQ7CisgICAgICAgICAgICAvL2Nhc2UgR0xfSU1QTEVN
RU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVQ6cmV0dXJuIEdMX0lOVDsKKyAgICAgICAgICAgIC8v
Y2FzZSBHTF9JTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX1RZUEU6ICByZXR1cm4gR0xfSU5UOwor
ICAgICAgICBjYXNlIEdMX0xJTkVfV0lEVEg6ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBH
TF9GTE9BVDsKKyAgICAgICAgY2FzZSBHTF9NQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklU
UzpyZXR1cm4gR0xfSU5UOworICAgICAgICBjYXNlIEdMX01BWF9DVUJFX01BUF9URVhUVVJFX1NJ
WkU6ICAgICAgIHJldHVybiBHTF9JTlQ7CisgICAgICAgICAgICAvL2Nhc2UgR0xfTUFYX0ZSQUdN
RU5UX1VOSUZPUk1fVkVDVE9SUzogICAgcmV0dXJuIEdMX0lOVDsKKyAgICAgICAgY2FzZSBHTF9N
QVhfUkVOREVSQlVGRkVSX1NJWkVfRVhUOiAgICAgICByZXR1cm4gR0xfSU5UOworICAgICAgICBj
YXNlIEdMX01BWF9URVhUVVJFX0lNQUdFX1VOSVRTOiAgICAgICAgIHJldHVybiBHTF9JTlQ7Cisg
ICAgICAgIGNhc2UgR0xfTUFYX1RFWFRVUkVfU0laRTogICAgICAgICAgICAgICAgcmV0dXJuIEdM
X0lOVDsKKyAgICAgICAgICAgIC8vY2FzZSBHTF9NQVhfVkFSWUlOR19WRUNUT1JTOiAgICAgICAg
ICAgICByZXR1cm4gR0xfSU5UOworICAgICAgICBjYXNlIEdMX01BWF9WRVJURVhfQVRUUklCUzog
ICAgICAgICAgICAgIHJldHVybiBHTF9JTlQ7CisgICAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9U
RVhUVVJFX0lNQUdFX1VOSVRTOiAgcmV0dXJuIEdMX0lOVDsKKyAgICAgICAgICAgIC8vY2FzZSBH
TF9NQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUzogICAgICByZXR1cm4gR0xfSU5UOworICAgICAg
ICBjYXNlIEdMX01BWF9WSUVXUE9SVF9ESU1TOiAgICAgICAgICAgICAgIHJldHVybiBHTF9JTlQ7
CisgICAgICAgIGNhc2UgR0xfTlVNX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTOiAgcmV0dXJu
IEdMX0lOVDsKKyAgICAgICAgICAgIC8vY2FzZSBHTF9OVU1fU0hBREVSX0JJTkFSWV9GT1JNQVRT
OiAgICAgICByZXR1cm4gR0xfSU5UOworICAgICAgICBjYXNlIEdMX1BBQ0tfQUxJR05NRU5UOiAg
ICAgICAgICAgICAgICAgIHJldHVybiBHTF9JTlQ7CisgICAgICAgIGNhc2UgR0xfUE9MWUdPTl9P
RkZTRVRfRkFDVE9SOiAgICAgICAgICAgcmV0dXJuIEdMX0ZMT0FUOworICAgICAgICBjYXNlIEdM
X1BPTFlHT05fT0ZGU0VUX0ZJTEw6ICAgICAgICAgICAgIHJldHVybiBHTF9CWVRFOworICAgICAg
ICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX1VOSVRTOiAgICAgICAgICAgIHJldHVybiBHTF9GTE9B
VDsKKyAgICAgICAgY2FzZSBHTF9SRURfQklUUzogICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gR0xfSU5UOworICAgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9CSU5ESU5HX0VYVDogICAg
ICAgIHJldHVybiBHTF9JTlQ7IC8vICgqIGFjdHVhbGx5IGEgQ2FudmFzUmVuZGVyYnVmZmVyKikK
KyAgICAgICAgY2FzZSBHTF9TQU1QTEVfQlVGRkVSUzogICAgICAgICAgICAgICAgICByZXR1cm4g
R0xfSU5UOworICAgICAgICBjYXNlIEdMX1NBTVBMRV9DT1ZFUkFHRV9JTlZFUlQ6ICAgICAgICAg
IHJldHVybiBHTF9CWVRFOworICAgICAgICBjYXNlIEdMX1NBTVBMRV9DT1ZFUkFHRV9WQUxVRTog
ICAgICAgICAgIHJldHVybiBHTF9GTE9BVDsKKyAgICAgICAgY2FzZSBHTF9TQU1QTEVTOiAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfSU5UOworICAgICAgICBjYXNlIEdMX1NDSVNT
T1JfQk9YOiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9JTlQ7CisgICAgICAgIGNhc2Ug
R0xfU0NJU1NPUl9URVNUOiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0JZVEU7CisgICAg
ICAgICAgICAvL2Nhc2UgR0xfU0hBREVSX0JJTkFSWV9GT1JNQVRTOiAgICAgICAgICAgcmV0dXJu
IEdMX0lOVDsKKyAgICAgICAgICAgIC8vY2FzZSBHTF9TSEFERVJfQ09NUElMRVI6ICAgICAgICAg
ICAgICAgICByZXR1cm4gR0xfQllURTsKKyAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfRkFJ
TDogICAgICAgICAgICAgICByZXR1cm4gR0xfSU5UOworICAgICAgICBjYXNlIEdMX1NURU5DSUxf
QkFDS19GVU5DOiAgICAgICAgICAgICAgIHJldHVybiBHTF9JTlQ7CisgICAgICAgIGNhc2UgR0xf
U1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTDogICAgcmV0dXJuIEdMX0lOVDsKKyAgICAgICAg
Y2FzZSBHTF9TVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9QQVNTOiAgICByZXR1cm4gR0xfSU5UOwor
ICAgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19SRUY6ICAgICAgICAgICAgICAgIHJldHVybiBH
TF9JTlQ7CisgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1ZBTFVFX01BU0s6ICAgICAgICAg
cmV0dXJuIEdMX0lOVDsKKyAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfV1JJVEVNQVNLOiAg
ICAgICAgICByZXR1cm4gR0xfSU5UOworICAgICAgICBjYXNlIEdMX1NURU5DSUxfQklUUzogICAg
ICAgICAgICAgICAgICAgIHJldHVybiBHTF9JTlQ7CisgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9D
TEVBUl9WQUxVRTogICAgICAgICAgICAgcmV0dXJuIEdMX0lOVDsKKyAgICAgICAgY2FzZSBHTF9T
VEVOQ0lMX0ZBSUw6ICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfSU5UOworICAgICAgICBj
YXNlIEdMX1NURU5DSUxfRlVOQzogICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9JTlQ7Cisg
ICAgICAgIGNhc2UgR0xfU1RFTkNJTF9QQVNTX0RFUFRIX0ZBSUw6ICAgICAgICAgcmV0dXJuIEdM
X0lOVDsKKyAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX1BBU1NfREVQVEhfUEFTUzogICAgICAgICBy
ZXR1cm4gR0xfSU5UOworICAgICAgICBjYXNlIEdMX1NURU5DSUxfUkVGOiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBHTF9JTlQ7CisgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9URVNUOiAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEdMX0JZVEU7CisgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9W
QUxVRV9NQVNLOiAgICAgICAgICAgICAgcmV0dXJuIEdMX0lOVDsKKyAgICAgICAgY2FzZSBHTF9T
VEVOQ0lMX1dSSVRFTUFTSzogICAgICAgICAgICAgICByZXR1cm4gR0xfSU5UOworICAgICAgICBj
YXNlIEdMX1NVQlBJWEVMX0JJVFM6ICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9JTlQ7Cisg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV9CSU5ESU5HXzJEOiAgICAgICAgICAgICAgcmV0dXJuIEdM
X0lOVDsgLy8gKCogYWN0dWFsbHkgYSBDYW52YXNUZXh0dXJlKikKKyAgICAgICAgY2FzZSBHTF9U
RVhUVVJFX0JJTkRJTkdfQ1VCRV9NQVA6ICAgICAgICByZXR1cm4gR0xfSU5UOyAvLyAoKiBhY3R1
YWxseSBhIENhbnZhc1RleHR1cmUqKQorICAgICAgICBjYXNlIEdMX1VOUEFDS19BTElHTk1FTlQ6
ICAgICAgICAgICAgICAgIHJldHVybiBHTF9JTlQ7CisgICAgICAgIGNhc2UgR0xfVklFV1BPUlQ6
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0lOVDsKKyAgICB9CisgICAgCisgICAg
cmV0dXJuIC0xOworfQorCitQYXNzUmVmUHRyPENhbnZhc051bWJlckFycmF5PiAgR3JhcGhpY3ND
b250ZXh0M0Q6OmdldCh1bnNpZ25lZCBsb25nIHBuYW1lKQoreworICAgIGludCBzaXplID0gc2l6
ZUZvckdldFBhcmFtKHBuYW1lKTsKKyAgICBpZiAoc2l6ZSA8IDEpIAorICAgICAgICByZXR1cm4g
MDsKKyAgICAKKyAgICBlbnN1cmVDb250ZXh0OworICAgIAorICAgIFJlZlB0cjxDYW52YXNOdW1i
ZXJBcnJheT4gYXJyYXkgPSBDYW52YXNOdW1iZXJBcnJheTo6Y3JlYXRlKHNpemUpOworICAgIGJv
b2wgaXNBbGxvY2VkID0gZmFsc2U7CisgICAgCisgICAgc3dpdGNoKHR5cGVGb3JHZXRQYXJhbShw
bmFtZSkpIHsKKyAgICAgICAgY2FzZSBHTF9JTlQ6IHsKKyAgICAgICAgICAgIEdMaW50IGJ1Zls0
XTsKKyAgICAgICAgICAgIEdMaW50KiBwYnVmID0gYnVmOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBpZiAoc2l6ZSA+IDQpIHsKKyAgICAgICAgICAgICAgICBwYnVmID0gKEdMaW50KikgbWFs
bG9jKHNpemUgKiBzaXplb2YoR0xpbnQpKTsKKyAgICAgICAgICAgICAgICBpc0FsbG9jZWQgPSB0
cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICA6OmdsR2V0SW50
ZWdlcnYocG5hbWUsIHBidWYpOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgICAgICAgICBhcnJheS0+ZGF0YSgpW2ldID0g
KGZsb2F0KSBwYnVmW2ldOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoaXNBbGxvY2Vk
KQorICAgICAgICAgICAgICAgIGZyZWUocGJ1Zik7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgR0xfRkxPQVQ6IHsKKyAgICAgICAgICAg
IEdMZmxvYXQgYnVmWzRdOworICAgICAgICAgICAgR0xmbG9hdCogcGJ1ZiA9IGJ1ZjsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgaWYgKHNpemUgPiA0KSB7CisgICAgICAgICAgICAgICAgcGJ1
ZiA9IChHTGZsb2F0KikgbWFsbG9jKHNpemUgKiBzaXplb2YoR0xmbG9hdCkpOworICAgICAgICAg
ICAgICAgIGlzQWxsb2NlZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIDo6Z2xHZXRGbG9hdHYocG5hbWUsIHBidWYpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgICAgICAgICBh
cnJheS0+ZGF0YSgpW2ldID0gKGZsb2F0KSBwYnVmW2ldOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBpZiAoaXNBbGxvY2VkKQorICAgICAgICAgICAgICAgIGZyZWUocGJ1Zik7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgR0xfQllU
RTogeworICAgICAgICAgICAgR0xib29sZWFuIGJ1Zls0XTsKKyAgICAgICAgICAgIEdMYm9vbGVh
biogcGJ1ZiA9IGJ1ZjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHNpemUgPiA0KSB7
CisgICAgICAgICAgICAgICAgcGJ1ZiA9IChHTGJvb2xlYW4qKSBtYWxsb2Moc2l6ZSAqIHNpemVv
ZihHTGJvb2xlYW4pKTsKKyAgICAgICAgICAgICAgICBpc0FsbG9jZWQgPSB0cnVlOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICA6OmdsR2V0Qm9vbGVhbnYocG5hbWUs
IHBidWYpOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNp
emU7ICsraSkKKyAgICAgICAgICAgICAgICBhcnJheS0+ZGF0YSgpW2ldID0gKGZsb2F0KSBwYnVm
W2ldOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoaXNBbGxvY2VkKQorICAgICAgICAg
ICAgICAgIGZyZWUocGJ1Zik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVybiBhcnJheTsKK30KKworUGFzc1JlZlB0cjxD
YW52YXNOdW1iZXJBcnJheT4gIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRCdWZmZXJQYXJhbWV0ZXIg
KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lKQoreworICAgIGVuc3Vy
ZUNvbnRleHQ7CisgICAgUmVmUHRyPENhbnZhc051bWJlckFycmF5PiBhcnJheSA9IENhbnZhc051
bWJlckFycmF5OjpjcmVhdGUoMSk7CisgICAgR0xpbnQgZGF0YTsKKyAgICA6OmdsR2V0QnVmZmVy
UGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgJmRhdGEpOworICAgIGFycmF5LT5kYXRhKClbMF0g
PSAoZmxvYXQpIGRhdGE7CisgICAgCisgICAgcmV0dXJuIGFycmF5OworfQorCitQYXNzUmVmUHRy
PENhbnZhc051bWJlckFycmF5PiAgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEZyYW1lYnVmZmVyQXR0
YWNobWVudFBhcmFtZXRlciAodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0
YWNobWVudCwgdW5zaWduZWQgbG9uZyBwbmFtZSkKK3sKKyAgICBlbnN1cmVDb250ZXh0OworICAg
IFJlZlB0cjxDYW52YXNOdW1iZXJBcnJheT4gYXJyYXkgPSBDYW52YXNOdW1iZXJBcnJheTo6Y3Jl
YXRlKDEpOworICAgIEdMaW50IGRhdGE7CisgICAgOjpnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVu
dFBhcmFtZXRlcml2RVhUKHRhcmdldCwgYXR0YWNobWVudCwgcG5hbWUsICZkYXRhKTsKKyAgICBh
cnJheS0+ZGF0YSgpWzBdID0gKGZsb2F0KSBkYXRhOworICAgIAorICAgIHJldHVybiBhcnJheTsK
K30KKworUGFzc1JlZlB0cjxDYW52YXNOdW1iZXJBcnJheT4gIEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRQcm9ncmFtIChDYW52YXNQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIHBuYW1lKQor
eworICAgIGlmICghcHJvZ3JhbSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgZW5zdXJl
Q29udGV4dDsKKyAgICBSZWZQdHI8Q2FudmFzTnVtYmVyQXJyYXk+IGFycmF5ID0gQ2FudmFzTnVt
YmVyQXJyYXk6OmNyZWF0ZSgxKTsKKyAgICBHTGludCBkYXRhOworICAgIDo6Z2xHZXRQcm9ncmFt
aXYoKEdMdWludCkgcHJvZ3JhbS0+b2JqZWN0KCksIHBuYW1lLCAmZGF0YSk7CisgICAgYXJyYXkt
PmRhdGEoKVswXSA9IChmbG9hdCkgZGF0YTsKKyAgICAKKyAgICByZXR1cm4gYXJyYXk7Cit9CisK
K1N0cmluZyAgR3JhcGhpY3NDb250ZXh0M0Q6OmdsR2V0UHJvZ3JhbUluZm9Mb2cgKENhbnZhc1By
b2dyYW0qIHByb2dyYW0pCit7CisgICAgaWYgKCFwcm9ncmFtKQorICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7CisgICAgCisgICAgZW5zdXJlQ29udGV4dDsKKyAgICBHTGludCBsZW5ndGg7CisgICAg
OjpnbEdldFByb2dyYW1pdigoR0x1aW50KSBwcm9ncmFtLT5vYmplY3QoKSwgR0xfSU5GT19MT0df
TEVOR1RILCAmbGVuZ3RoKTsKKyAgICAKKyAgICBHTHNpemVpIHNpemU7CisgICAgR0xjaGFyKiBp
bmZvID0gKEdMY2hhciopIG1hbGxvYyhsZW5ndGgpOworICAgIDo6Z2xHZXRQcm9ncmFtSW5mb0xv
ZygoR0x1aW50KSBwcm9ncmFtLT5vYmplY3QoKSwgbGVuZ3RoLCAmc2l6ZSwgaW5mbyk7CisgICAg
U3RyaW5nIHMoaW5mbyk7CisgICAgZnJlZShpbmZvKTsKKyAgICByZXR1cm4gczsKK30KKworUGFz
c1JlZlB0cjxDYW52YXNOdW1iZXJBcnJheT4gIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRSZW5kZXJi
dWZmZXJQYXJhbWV0ZXIgKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1l
KQoreworICAgIGVuc3VyZUNvbnRleHQ7CisgICAgUmVmUHRyPENhbnZhc051bWJlckFycmF5PiBh
cnJheSA9IENhbnZhc051bWJlckFycmF5OjpjcmVhdGUoMSk7CisgICAgR0xpbnQgZGF0YTsKKyAg
ICA6OmdsR2V0QnVmZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgJmRhdGEpOworICAgIGFy
cmF5LT5kYXRhKClbMF0gPSAoZmxvYXQpIGRhdGE7CisgICAgCisgICAgcmV0dXJuIGFycmF5Owor
fQorCitQYXNzUmVmUHRyPENhbnZhc051bWJlckFycmF5PiAgR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dFNoYWRlciAoQ2FudmFzU2hhZGVyKiBzaGFkZXIsIHVuc2lnbmVkIGxvbmcgcG5hbWUpCit7Cisg
ICAgaWYgKCFzaGFkZXIpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIGVuc3VyZUNvbnRl
eHQ7CisgICAgUmVmUHRyPENhbnZhc051bWJlckFycmF5PiBhcnJheSA9IENhbnZhc051bWJlckFy
cmF5OjpjcmVhdGUoMSk7CisgICAgR0xpbnQgZGF0YTsKKyAgICA6OmdsR2V0U2hhZGVyaXYoKEdM
dWludCkgc2hhZGVyLT5vYmplY3QoKSwgcG5hbWUsICZkYXRhKTsKKyAgICBhcnJheS0+ZGF0YSgp
WzBdID0gKGZsb2F0KSBkYXRhOworICAgIAorICAgIHJldHVybiBhcnJheTsKK30KKworU3RyaW5n
ICBHcmFwaGljc0NvbnRleHQzRDo6Z2xHZXRTaGFkZXJJbmZvTG9nIChDYW52YXNTaGFkZXIqIHNo
YWRlcikKK3sKKyAgICBpZiAoIXNoYWRlcikKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAg
IAorICAgIGVuc3VyZUNvbnRleHQ7CisgICAgR0xpbnQgbGVuZ3RoOworICAgIDo6Z2xHZXRTaGFk
ZXJpdigoR0x1aW50KSBzaGFkZXItPm9iamVjdCgpLCBHTF9JTkZPX0xPR19MRU5HVEgsICZsZW5n
dGgpOworICAgIAorICAgIEdMc2l6ZWkgc2l6ZTsKKyAgICBHTGNoYXIqIGluZm8gPSAoR0xjaGFy
KikgbWFsbG9jKGxlbmd0aCk7CisgICAgOjpnbEdldFNoYWRlckluZm9Mb2coKEdMdWludCkgc2hh
ZGVyLT5vYmplY3QoKSwgbGVuZ3RoLCAmc2l6ZSwgaW5mbyk7CisgICAgU3RyaW5nIHMoaW5mbyk7
CisgICAgZnJlZShpbmZvKTsKKyAgICByZXR1cm4gczsKK30KKworU3RyaW5nICBHcmFwaGljc0Nv
bnRleHQzRDo6Z2xHZXRTaGFkZXJTb3VyY2UgKENhbnZhc1NoYWRlciogc2hhZGVyKQoreworICAg
IGlmICghc2hhZGVyKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgCisgICAgZW5zdXJl
Q29udGV4dDsKKyAgICBHTGludCBsZW5ndGg7CisgICAgOjpnbEdldFNoYWRlcml2KChHTHVpbnQp
IHNoYWRlci0+b2JqZWN0KCksIEdMX1NIQURFUl9TT1VSQ0VfTEVOR1RILCAmbGVuZ3RoKTsKKyAg
ICAKKyAgICBHTHNpemVpIHNpemU7CisgICAgR0xjaGFyKiBpbmZvID0gKEdMY2hhciopIG1hbGxv
YyhsZW5ndGgpOworICAgIDo6Z2xHZXRTaGFkZXJTb3VyY2UoKEdMdWludCkgc2hhZGVyLT5vYmpl
Y3QoKSwgbGVuZ3RoLCAmc2l6ZSwgaW5mbyk7CisgICAgU3RyaW5nIHMoaW5mbyk7CisgICAgZnJl
ZShpbmZvKTsKKyAgICByZXR1cm4gczsKK30KKworCitQYXNzUmVmUHRyPENhbnZhc051bWJlckFy
cmF5PiAgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlciAodW5zaWduZWQgbG9uZyB0
YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUpCit7CisgICAgZW5zdXJlQ29udGV4dDsKKyAgICBS
ZWZQdHI8Q2FudmFzTnVtYmVyQXJyYXk+IGFycmF5ID0gQ2FudmFzTnVtYmVyQXJyYXk6OmNyZWF0
ZSgxKTsKKyAgICBHTGZsb2F0IGRhdGE7CisgICAgOjpnbEdldFRleFBhcmFtZXRlcmZ2KHRhcmdl
dCwgcG5hbWUsICZkYXRhKTsKKyAgICBhcnJheS0+ZGF0YSgpWzBdID0gKGZsb2F0KSBkYXRhOwor
ICAgIAorICAgIHJldHVybiBhcnJheTsKK30KKworUGFzc1JlZlB0cjxDYW52YXNOdW1iZXJBcnJh
eT4gIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtIChDYW52YXNQcm9ncmFtKiBwcm9ncmFt
LCBsb25nIGxvY2F0aW9uLCBsb25nIHNpemUpCit7CisgICAgaWYgKCFwcm9ncmFtKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICAKKyAgICBlbnN1cmVDb250ZXh0OworICAgIFJlZlB0cjxDYW52YXNO
dW1iZXJBcnJheT4gYXJyYXkgPSBDYW52YXNOdW1iZXJBcnJheTo6Y3JlYXRlKHNpemUpOworICAg
IAorICAgIC8vIHRvIGF2b2lkIGNyYXNoZXMsIGxldCdzIGdldCBpbnRvIGEgYnVmZmVyIHRoYXQg
d2lsbCBhbHdheXMgYmUgYmlnIGVub3VnaAorICAgIEdMZmxvYXQgZGF0YVsxNl07CisgICAgOjpn
bEdldFVuaWZvcm1mdigoR0x1aW50KSBwcm9ncmFtLT5vYmplY3QoKSwgbG9jYXRpb24sIGRhdGEp
OworICAgIAorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICBhcnJh
eS0+ZGF0YSgpW2ldID0gKGZsb2F0KSBkYXRhW2ldOworICAgIAorICAgIAorICAgIHJldHVybiBh
cnJheTsKK30KKworbG9uZyAgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1Mb2NhdGlvbiAo
Q2FudmFzUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmICgh
cHJvZ3JhbSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIAorICAgIGVuc3VyZUNvbnRleHQ7Cisg
ICAgcmV0dXJuIDo6Z2xHZXRVbmlmb3JtTG9jYXRpb24oKEdMdWludCkgcHJvZ3JhbS0+b2JqZWN0
KCksIG5hbWUudXRmOCgpLmRhdGEoKSk7Cit9CisKK3N0YXRpYyBpbnQgc2l6ZUZvckdldFZlcnRl
eEF0dHJpYlBhcmFtKHVuc2lnbmVkIGxvbmcgcG5hbWUpCit7CisgICAgc3dpdGNoKHBuYW1lKSB7
CisgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9CVUZGRVJfQklORElORzogICAg
IHJldHVybiAxOyAvLyAoKiBhY3R1YWxseSBhIENhbnZhc0J1ZmZlciopCisgICAgICAgIGNhc2Ug
R0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9FTkFCTEVEOiAgICAgICAgICAgIHJldHVybiAxOworICAg
ICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfU0laRTogICAgICAgICAgICAgICByZXR1
cm4gMTsKKyAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1NUUklERTogICAgICAg
ICAgICAgcmV0dXJuIDE7CisgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9UWVBF
OiAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJf
QVJSQVlfTk9STUFMSVpFRDogICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSBHTF9DVVJS
RU5UX1ZFUlRFWF9BVFRSSUI6ICAgICAgICAgICAgICAgICAgcmV0dXJuIDQ7CisgICAgfQorICAg
IAorICAgIHJldHVybiAtMTsKK30KKworc3RhdGljIGludCB0eXBlRm9yR2V0VmVydGV4QXR0cmli
UGFyYW0odW5zaWduZWQgbG9uZyBwbmFtZSkKK3sKKyAgICBzd2l0Y2gocG5hbWUpIHsKKyAgICAg
ICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HOiAgICAgcmV0dXJu
IEdMX0lOVDsgLy8gKCogYWN0dWFsbHkgYSBDYW52YXNCdWZmZXIqKQorICAgICAgICBjYXNlIEdM
X1ZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRDogICAgICAgICAgICByZXR1cm4gR0xfSU5UOwor
ICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfU0laRTogICAgICAgICAgICAgICBy
ZXR1cm4gR0xfSU5UOworICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURF
OiAgICAgICAgICAgICByZXR1cm4gR0xfSU5UOworICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRS
SUJfQVJSQVlfVFlQRTogICAgICAgICAgICAgICByZXR1cm4gR0xfSU5UOworICAgICAgICBjYXNl
IEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfTk9STUFMSVpFRDogICAgICAgICByZXR1cm4gR0xfSU5U
OworICAgICAgICBjYXNlIEdMX0NVUlJFTlRfVkVSVEVYX0FUVFJJQjogICAgICAgICAgICAgICAg
ICByZXR1cm4gR0xfRkxPQVQ7CisgICAgfQorICAgIAorICAgIHJldHVybiAtMTsKK30KKworUGFz
c1JlZlB0cjxDYW52YXNOdW1iZXJBcnJheT4gIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRWZXJ0ZXhB
dHRyaWIgKHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUpCit7CisgICAg
aW50IHNpemUgPSBzaXplRm9yR2V0VmVydGV4QXR0cmliUGFyYW0ocG5hbWUpOworICAgIGlmIChz
aXplIDwgMSkgCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIGVuc3VyZUNvbnRleHQ7Cisg
ICAgCisgICAgUmVmUHRyPENhbnZhc051bWJlckFycmF5PiBhcnJheSA9IENhbnZhc051bWJlckFy
cmF5OjpjcmVhdGUoc2l6ZSk7CisgICAgCisgICAgc3dpdGNoKHR5cGVGb3JHZXRWZXJ0ZXhBdHRy
aWJQYXJhbShwbmFtZSkpIHsKKyAgICAgICAgY2FzZSBHTF9JTlQ6IHsKKyAgICAgICAgICAgIEdM
aW50IGJ1Zls0XTsKKyAgICAgICAgICAgIDo6Z2xHZXRWZXJ0ZXhBdHRyaWJpdihpbmRleCwgcG5h
bWUsIGJ1Zik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
c2l6ZTsgKytpKQorICAgICAgICAgICAgICAgIGFycmF5LT5kYXRhKClbaV0gPSAoZmxvYXQpIGJ1
ZltpXTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEdMX0ZMT0FUOiB7CisgICAgICAgICAgICBH
TGZsb2F0IGJ1Zls0XTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgOjpnbEdldFZlcnRleEF0
dHJpYmZ2KGluZGV4LCBwbmFtZSwgYnVmKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgICAgICAgICAgYXJyYXktPmRhdGEo
KVtpXSA9IChmbG9hdCkgYnVmW2ldOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVy
biBhcnJheTsKK30KKworLy8gQXNzdW1lcyB0aGUgdGV4dHVyZSB5b3Ugd2FudCB0byBnbyBpbnRv
IGlzIGJvdW5kCitzdGF0aWMgdm9pZCBpbWFnZVRvVGV4dHVyZShJbWFnZSogaW1hZ2UsIHVuc2ln
bmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwpCit7CisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIENHSW1hZ2VSZWYgdGV4dHVyZUltYWdlID0gaW1hZ2UtPmdldENH
SW1hZ2VSZWYoKTsKKyAgICBpZiAoIXRleHR1cmVJbWFnZSkKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIHNpemVfdCB0ZXh0dXJlV2lkdGggPSBDR0ltYWdlR2V0V2lkdGgodGV4dHVyZUltYWdl
KTsKKyAgICBzaXplX3QgdGV4dHVyZUhlaWdodCA9IENHSW1hZ2VHZXRIZWlnaHQodGV4dHVyZUlt
YWdlKTsKKyAgICAKKyAgICBHTHVieXRlKiB0ZXh0dXJlRGF0YSA9IChHTHVieXRlKikgbWFsbG9j
KHRleHR1cmVXaWR0aCp0ZXh0dXJlSGVpZ2h0KjQpOworICAgIENHQ29udGV4dFJlZiB0ZXh0dXJl
Q29udGV4dCA9IENHQml0bWFwQ29udGV4dENyZWF0ZSh0ZXh0dXJlRGF0YSwgdGV4dHVyZVdpZHRo
LCB0ZXh0dXJlSGVpZ2h0LCA4LCB0ZXh0dXJlV2lkdGgqNCwgCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENHSW1hZ2VHZXRDb2xvclNwYWNl
KHRleHR1cmVJbWFnZSksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCk7CisgICAgCisg
ICAgQ0dDb250ZXh0RHJhd0ltYWdlKHRleHR1cmVDb250ZXh0LCBDR1JlY3RNYWtlKDAsIDAsIChD
R0Zsb2F0KXRleHR1cmVXaWR0aCwgKENHRmxvYXQpdGV4dHVyZUhlaWdodCksIHRleHR1cmVJbWFn
ZSk7CisgICAgQ0dDb250ZXh0UmVsZWFzZSh0ZXh0dXJlQ29udGV4dCk7CisgICAgCisgICAgOjpn
bFRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgR0xfUkdCQSwgdGV4dHVyZVdpZHRoLCB0ZXh0dXJl
SGVpZ2h0LCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCB0ZXh0dXJlRGF0YSk7CisgICAg
ZnJlZSh0ZXh0dXJlRGF0YSk7Cit9CisKK2ludCBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2Uy
RCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCBIVE1MSW1hZ2VFbGVtZW50KiBpbWFn
ZSkKK3sKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm4gLTE7CisgICAgCisgICAgZW5z
dXJlQ29udGV4dDsKKyAgICBDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UgPSBpbWFnZS0+Y2FjaGVk
SW1hZ2UoKTsKKyAgICBpZiAoIWNhY2hlZEltYWdlKQorICAgICAgICByZXR1cm4gLTE7CisgICAg
CisgICAgaW1hZ2VUb1RleHR1cmUoY2FjaGVkSW1hZ2UtPmltYWdlKCksIHRhcmdldCwgbGV2ZWwp
OworICAgIHJldHVybiAwOworfQorCitpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQo
dW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZh
cykKK3sKKyAgICBpZiAoIWNhbnZhcykKKyAgICAgICAgcmV0dXJuIC0xOworICAgIAorICAgIGVu
c3VyZUNvbnRleHQ7CisgICAgSW1hZ2VCdWZmZXIqIGJ1ZmZlciA9IGNhbnZhcy0+YnVmZmVyKCk7
CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybiAtMTsKKyAgICAKKyAgICBpbWFnZVRv
VGV4dHVyZShidWZmZXItPmltYWdlKCksIHRhcmdldCwgbGV2ZWwpOworICAgIHJldHVybiAwOwor
fQorCitpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleFN1YkltYWdlMkQodW5zaWduZWQgdGFyZ2V0
LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgeG9mZiwgdW5zaWduZWQgeW9mZiwgdW5zaWduZWQg
d2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgSFRNTEltYWdlRWxlbWVudCogaW1hZ2UpCit7CisgICAg
Ly8gRklYTUU6IHdlIHdpbGwgbmVlZCB0byBkZWFsIHdpdGggUGl4ZWxTdG9yZSBwYXJhbXMgd2hl
biBkZWFsaW5nIHdpdGggaW1hZ2UgYnVmZmVycyB0aGF0IGRpZmZlciBmcm9tIHRoZSBzdWJpbWFn
ZSBzaXplCisgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGxldmVs
KTsKKyAgICBVTlVTRURfUEFSQU0oeG9mZik7CisgICAgVU5VU0VEX1BBUkFNKHlvZmYpOworICAg
IFVOVVNFRF9QQVJBTSh3aWR0aCk7CisgICAgVU5VU0VEX1BBUkFNKGhlaWdodCk7CisgICAgVU5V
U0VEX1BBUkFNKGltYWdlKTsKKyAgICByZXR1cm4gLTE7CisgICAgLyoKKyAgICAgZWMgPSAwOwor
ICAgICAKKyAgICAgaWYgKCFpbWFnZSkKKyAgICAgcmV0dXJuOworICAgICAKKyAgICAgZW5zdXJl
Q29udGV4dDsKKyAgICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlID0gaW1hZ2UtPmNhY2hlZElt
YWdlKCk7CisgICAgIGlmICghY2FjaGVkSW1hZ2UpCisgICAgIHJldHVybjsKKyAgICAgCisgICAg
IEltYWdlKiBpbWcgPSBjYWNoZWRJbWFnZS0+aW1hZ2UoKTsKKyAgICAgaWYgKCFpbWcpCisgICAg
IHJldHVybjsKKyAgICAgCisgICAgIDo6Z2xUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhv
ZmYsIHlvZmYsIHdpZHRoLCBoZWlnaHQsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIGltZy0+
ZGF0YSgpLT5kYXRhKCkpOworICAgICAgKi8KK30KKworaW50IEdyYXBoaWNzQ29udGV4dDNEOjp0
ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIHhv
ZmYsIHVuc2lnbmVkIHlvZmYsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIEhUTUxD
YW52YXNFbGVtZW50KiBjYW52YXMpCit7CisgICAgLy8gRklYTUU6IHdlIHdpbGwgbmVlZCB0byBk
ZWFsIHdpdGggUGl4ZWxTdG9yZSBwYXJhbXMgd2hlbiBkZWFsaW5nIHdpdGggaW1hZ2UgYnVmZmVy
cyB0aGF0IGRpZmZlciBmcm9tIHRoZSBzdWJpbWFnZSBzaXplCisgICAgVU5VU0VEX1BBUkFNKHRh
cmdldCk7CisgICAgVU5VU0VEX1BBUkFNKGxldmVsKTsKKyAgICBVTlVTRURfUEFSQU0oeG9mZik7
CisgICAgVU5VU0VEX1BBUkFNKHlvZmYpOworICAgIFVOVVNFRF9QQVJBTSh3aWR0aCk7CisgICAg
VU5VU0VEX1BBUkFNKGhlaWdodCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbnZhcyk7CisgICAgcmV0
dXJuIC0xOworICAgIC8qCisgICAgIGVjID0gMDsKKyAgICAgCisgICAgIGlmICghY2FudmFzKQor
ICAgICByZXR1cm47CisgICAgIAorICAgICBlbnN1cmVDb250ZXh0OworICAgICBJbWFnZUJ1ZmZl
ciogYnVmZmVyID0gY2FudmFzLT5idWZmZXIoKTsKKyAgICAgaWYgKCFidWZmZXIpCisgICAgIHJl
dHVybjsKKyAgICAgCisgICAgIEltYWdlKiBpbWcgPSBidWZmZXItPmltYWdlKCk7CisgICAgIGlm
ICghaW1nKQorICAgICByZXR1cm47CisgICAgIAorICAgICA6OmdsVGV4U3ViSW1hZ2UyRCh0YXJn
ZXQsIGxldmVsLCB4b2ZmLCB5b2ZmLCB3aWR0aCwgaGVpZ2h0LCBHTF9SR0JBLCBHTF9VTlNJR05F
RF9CWVRFLCBpbWctPmRhdGEoKS0+ZGF0YSgpKTsKKyAgICAgICovCit9CisKK30KKworI2VuZGlm
IC8vIEVOQUJMRSgzRF9DQU5WQVMpCg==
</data>
<flag name="review"
          id="18308"
          type_id="1"
          status="-"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34149</attachid>
            <date>2009-08-05 10:51:27 -0700</date>
            <delta_ts>2009-08-24 09:47:43 -0700</delta_ts>
            <desc>Patch 3 of 4: Adding new files to the build</desc>
            <filename>webgl-3.patch</filename>
            <type>text/plain</type>
            <size>39101</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NjgwNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDA3IEBACisyMDA5LTA4LTA1ICBDaHJpcyBNYXJyaW4gIDxjbWFycmluQGFwcGxl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGRpbmcgbmV3IGZpbGVzIHRvIHRoZSBidWlsZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgwMTgKKworICAgICAgICBQYXRjaCAzIG9mIDQ6IEFkZGlu
ZyBmaWxlcyB0byBidWlsZAorCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAg
ICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMDktMDgtMDUgIEFu
ZHJhcyBCZWNzaSAgPGJlY3NpLmFuZHJhc0BzdHVkLnUtc3plZ2VkLmh1PgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IFNpbW9uIEhhdXNtYW5uLgpJbmRleDogV2ViQ29yZS9EZXJpdmVkU291cmNlcy5t
YWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkocmV2aXNpb24g
NDY4MDApCisrKyBXZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHdvcmtpbmcgY29weSkKQEAg
LTY1LDkgKzY1LDE4IEBAIERPTV9DTEFTU0VTID0gXAogICAgIENTU1ZhbHVlTGlzdCBcCiAgICAg
Q1NTVmFyaWFibGVzUnVsZSBcCiAgICAgQ1NTVmFyaWFibGVzRGVjbGFyYXRpb24gXAorICAgIENh
bnZhc0J1ZmZlciBcCisgICAgQ2FudmFzQnl0ZUFycmF5IFwKKyAgICBDYW52YXNGcmFtZWJ1ZmZl
ciBcCiAgICAgQ2FudmFzR3JhZGllbnQgXAorICAgIENhbnZhc051bWJlckFycmF5IFwKICAgICBD
YW52YXNQYXR0ZXJuIFwKKyAgICBDYW52YXNQcm9ncmFtIFwKKyAgICBDYW52YXNSZW5kZXJidWZm
ZXIgXAogICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCBcCisgICAgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEIFwKKyAgICBDYW52YXNTaGFkZXIgXAorICAgIENhbnZhc1RleHR1cmUgXAogICAg
IENoYXJhY3RlckRhdGEgXAogICAgIENsaWVudFJlY3QgXAogICAgIENsaWVudFJlY3RMaXN0IFwK
SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biA0NjgwMCkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC03MzAsNiArNzMwLDYwIEBACiAJCTQ2RjlENUREMEIwRDYwMTcwMDI4
RUUzNiAvKiBhbGlhc0N1cnNvci5wbmcgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQ2RjlENURBMEIwRDYwMTcwMDI4RUUzNiAvKiBhbGlhc0N1cnNvci5w
bmcgKi87IH07CiAJCTQ2RjlENURFMEIwRDYwMTcwMDI4RUUzNiAvKiBub0Ryb3BDdXJzb3IucG5n
IGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NkY5RDVE
QjBCMEQ2MDE3MDAyOEVFMzYgLyogbm9Ecm9wQ3Vyc29yLnBuZyAqLzsgfTsKIAkJNDZGOUQ1REYw
QjBENjAxNzAwMjhFRTM2IC8qIHByb2dyZXNzQ3Vyc29yLnBuZyBpbiBSZXNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDZGOUQ1REMwQjBENjAxNzAwMjhFRTM2IC8q
IHByb2dyZXNzQ3Vyc29yLnBuZyAqLzsgfTsKKwkJNDk0QjczQ0MwRkY1MkZDRTAwNDBFNjZCIC8q
IEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5NEI3M0NCMEZGNTJGQ0UwMDQwRTY2QiAvKiBK
U0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzREN1c3RvbS5jcHAgKi87IH07CisJCTQ5NEI3M0VEMEZG
NTJGRkYwMDQwRTY2QiAvKiBDYW52YXNCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDk0QjczQ0QwRkY1MkZGRjAwNDBFNjZCIC8qIENhbnZh
c0J1ZmZlci5jcHAgKi87IH07CisJCTQ5NEI3M0VFMEZGNTJGRkYwMDQwRTY2QiAvKiBDYW52YXNC
dWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5
NEI3M0NFMEZGNTJGRkYwMDQwRTY2QiAvKiBDYW52YXNCdWZmZXIuaCAqLzsgfTsKKwkJNDk0Qjcz
RUYwRkY1MkZGRjAwNDBFNjZCIC8qIENhbnZhc0J1ZmZlci5pZGwgaW4gUmVzb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5NEI3M0NGMEZGNTJGRkYwMDQwRTY2QiAv
KiBDYW52YXNCdWZmZXIuaWRsICovOyB9OworCQk0OTRCNzNGMDBGRjUyRkZGMDA0MEU2NkIgLyog
Q2FudmFzQnl0ZUFycmF5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ5NEI3M0QwMEZGNTJGRkYwMDQwRTY2QiAvKiBDYW52YXNCeXRlQXJyYXkuY3Bw
ICovOyB9OworCQk0OTRCNzNGMTBGRjUyRkZGMDA0MEU2NkIgLyogQ2FudmFzQnl0ZUFycmF5Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OTRCNzNEMTBG
RjUyRkZGMDA0MEU2NkIgLyogQ2FudmFzQnl0ZUFycmF5LmggKi87IH07CisJCTQ5NEI3M0YyMEZG
NTJGRkYwMDQwRTY2QiAvKiBDYW52YXNCeXRlQXJyYXkuaWRsIGluIFJlc291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OTRCNzNEMjBGRjUyRkZGMDA0MEU2NkIgLyog
Q2FudmFzQnl0ZUFycmF5LmlkbCAqLzsgfTsKKwkJNDk0QjczRjMwRkY1MkZGRjAwNDBFNjZCIC8q
IENhbnZhc0ZyYW1lYnVmZmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQ5NEI3M0QzMEZGNTJGRkYwMDQwRTY2QiAvKiBDYW52YXNGcmFtZWJ1ZmZl
ci5jcHAgKi87IH07CisJCTQ5NEI3M0Y0MEZGNTJGRkYwMDQwRTY2QiAvKiBDYW52YXNGcmFtZWJ1
ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDk0
QjczRDQwRkY1MkZGRjAwNDBFNjZCIC8qIENhbnZhc0ZyYW1lYnVmZmVyLmggKi87IH07CisJCTQ5
NEI3M0Y1MEZGNTJGRkYwMDQwRTY2QiAvKiBDYW52YXNGcmFtZWJ1ZmZlci5pZGwgaW4gUmVzb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5NEI3M0Q1MEZGNTJGRkYw
MDQwRTY2QiAvKiBDYW52YXNGcmFtZWJ1ZmZlci5pZGwgKi87IH07CisJCTQ5NEI3M0Y2MEZGNTJG
RkYwMDQwRTY2QiAvKiBDYW52YXNOdW1iZXJBcnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OTRCNzNENjBGRjUyRkZGMDA0MEU2NkIgLyogQ2Fu
dmFzTnVtYmVyQXJyYXkuY3BwICovOyB9OworCQk0OTRCNzNGNzBGRjUyRkZGMDA0MEU2NkIgLyog
Q2FudmFzTnVtYmVyQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ5NEI3M0Q3MEZGNTJGRkYwMDQwRTY2QiAvKiBDYW52YXNOdW1iZXJBcnJheS5o
ICovOyB9OworCQk0OTRCNzNGODBGRjUyRkZGMDA0MEU2NkIgLyogQ2FudmFzTnVtYmVyQXJyYXku
aWRsIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OTRC
NzNEODBGRjUyRkZGMDA0MEU2NkIgLyogQ2FudmFzTnVtYmVyQXJyYXkuaWRsICovOyB9OworCQk0
OTRCNzNGOTBGRjUyRkZGMDA0MEU2NkIgLyogQ2FudmFzT2JqZWN0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5NEI3M0Q5MEZGNTJGRkYwMDQwRTY2
QiAvKiBDYW52YXNPYmplY3QuY3BwICovOyB9OworCQk0OTRCNzNGQTBGRjUyRkZGMDA0MEU2NkIg
LyogQ2FudmFzT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0OTRCNzNEQTBGRjUyRkZGMDA0MEU2NkIgLyogQ2FudmFzT2JqZWN0LmggKi87IH07
CisJCTQ5NEI3M0ZCMEZGNTJGRkYwMDQwRTY2QiAvKiBDYW52YXNQcm9ncmFtLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5NEI3M0RCMEZGNTJGRkYw
MDQwRTY2QiAvKiBDYW52YXNQcm9ncmFtLmNwcCAqLzsgfTsKKwkJNDk0QjczRkMwRkY1MkZGRjAw
NDBFNjZCIC8qIENhbnZhc1Byb2dyYW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQ5NEI3M0RDMEZGNTJGRkYwMDQwRTY2QiAvKiBDYW52YXNQcm9ncmFt
LmggKi87IH07CisJCTQ5NEI3M0ZEMEZGNTJGRkYwMDQwRTY2QiAvKiBDYW52YXNQcm9ncmFtLmlk
bCBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDk0Qjcz
REQwRkY1MkZGRjAwNDBFNjZCIC8qIENhbnZhc1Byb2dyYW0uaWRsICovOyB9OworCQk0OTRCNzNG
RTBGRjUyRkZGMDA0MEU2NkIgLyogQ2FudmFzUmVuZGVyYnVmZmVyLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5NEI3M0RFMEZGNTJGRkYwMDQwRTY2
QiAvKiBDYW52YXNSZW5kZXJidWZmZXIuY3BwICovOyB9OworCQk0OTRCNzNGRjBGRjUyRkZGMDA0
MEU2NkIgLyogQ2FudmFzUmVuZGVyYnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0OTRCNzNERjBGRjUyRkZGMDA0MEU2NkIgLyogQ2FudmFzUmVu
ZGVyYnVmZmVyLmggKi87IH07CisJCTQ5NEI3NDAwMEZGNTJGRkYwMDQwRTY2QiAvKiBDYW52YXNS
ZW5kZXJidWZmZXIuaWRsIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0OTRCNzNFMDBGRjUyRkZGMDA0MEU2NkIgLyogQ2FudmFzUmVuZGVyYnVmZmVyLmlk
bCAqLzsgfTsKKwkJNDk0Qjc0MDEwRkY1MkZGRjAwNDBFNjZCIC8qIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDk0QjczRTEwRkY1MkZGRjAwNDBFNjZCIC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQuY3BwICov
OyB9OworCQk0OTRCNzQwMjBGRjUyRkZGMDA0MEU2NkIgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDk0Qjcz
RTIwRkY1MkZGRjAwNDBFNjZCIC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCAqLzsgfTsKKwkJ
NDk0Qjc0MDMwRkY1MkZGRjAwNDBFNjZCIC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQuaWRsIGlu
IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OTRCNzNFMzBG
RjUyRkZGMDA0MEU2NkIgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5pZGwgKi87IH07CisJCTQ5
NEI3NDA0MEZGNTJGRkYwMDQwRTY2QiAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDk0QjczRTQwRkY1
MkZGRjAwNDBFNjZCIC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5jcHAgKi87IH07CisJCTQ5
NEI3NDA1MEZGNTJGRkYwMDQwRTY2QiAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5NEI3M0U1MEZGNTJG
RkYwMDQwRTY2QiAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuaCAqLzsgfTsKKwkJNDk0Qjc0
MDYwRkY1MkZGRjAwNDBFNjZCIC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5pZGwgaW4gUmVz
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5NEI3M0U2MEZGNTJG
RkYwMDQwRTY2QiAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuaWRsICovOyB9OworCQk0OTRC
NzQwNzBGRjUyRkZGMDA0MEU2NkIgLyogQ2FudmFzU2hhZGVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5NEI3M0U3MEZGNTJGRkYwMDQwRTY2QiAv
KiBDYW52YXNTaGFkZXIuY3BwICovOyB9OworCQk0OTRCNzQwODBGRjUyRkZGMDA0MEU2NkIgLyog
Q2FudmFzU2hhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0OTRCNzNFODBGRjUyRkZGMDA0MEU2NkIgLyogQ2FudmFzU2hhZGVyLmggKi87IH07CisJ
CTQ5NEI3NDA5MEZGNTJGRkYwMDQwRTY2QiAvKiBDYW52YXNTaGFkZXIuaWRsIGluIFJlc291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OTRCNzNFOTBGRjUyRkZGMDA0
MEU2NkIgLyogQ2FudmFzU2hhZGVyLmlkbCAqLzsgfTsKKwkJNDk0Qjc0MEEwRkY1MkZGRjAwNDBF
NjZCIC8qIENhbnZhc1RleHR1cmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDk0QjczRUEwRkY1MkZGRjAwNDBFNjZCIC8qIENhbnZhc1RleHR1cmUu
Y3BwICovOyB9OworCQk0OTRCNzQwQjBGRjUyRkZGMDA0MEU2NkIgLyogQ2FudmFzVGV4dHVyZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDk0QjczRUIw
RkY1MkZGRjAwNDBFNjZCIC8qIENhbnZhc1RleHR1cmUuaCAqLzsgfTsKKwkJNDk0Qjc0MEMwRkY1
MkZGRjAwNDBFNjZCIC8qIENhbnZhc1RleHR1cmUuaWRsIGluIFJlc291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OTRCNzNFQzBGRjUyRkZGMDA0MEU2NkIgLyogQ2Fu
dmFzVGV4dHVyZS5pZGwgKi87IH07CisJCTQ5NEI3NDJCMEZGNTMyMjcwMDQwRTY2QiAvKiBKU0Nh
bnZhc0J1ZmZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0OTRCNzQxOTBGRjUzMjI3MDA0MEU2NkIgLyogSlNDYW52YXNCdWZmZXIuY3BwICovOyB9
OworCQk0OTRCNzQyQzBGRjUzMjI3MDA0MEU2NkIgLyogSlNDYW52YXNCdWZmZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5NEI3NDFBMEZGNTMyMjcw
MDQwRTY2QiAvKiBKU0NhbnZhc0J1ZmZlci5oICovOyB9OworCQk0OTRCNzQyRDBGRjUzMjI3MDA0
MEU2NkIgLyogSlNDYW52YXNCeXRlQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDk0Qjc0MUIwRkY1MzIyNzAwNDBFNjZCIC8qIEpTQ2FudmFz
Qnl0ZUFycmF5LmNwcCAqLzsgfTsKKwkJNDk0Qjc0MkUwRkY1MzIyNzAwNDBFNjZCIC8qIEpTQ2Fu
dmFzQnl0ZUFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0OTRCNzQxQzBGRjUzMjI3MDA0MEU2NkIgLyogSlNDYW52YXNCeXRlQXJyYXkuaCAqLzsg
fTsKKwkJNDk0Qjc0MkYwRkY1MzIyNzAwNDBFNjZCIC8qIEpTQ2FudmFzRnJhbWVidWZmZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDk0Qjc0MUQw
RkY1MzIyNzAwNDBFNjZCIC8qIEpTQ2FudmFzRnJhbWVidWZmZXIuY3BwICovOyB9OworCQk0OTRC
NzQzMDBGRjUzMjI3MDA0MEU2NkIgLyogSlNDYW52YXNGcmFtZWJ1ZmZlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDk0Qjc0MUUwRkY1MzIyNzAwNDBF
NjZCIC8qIEpTQ2FudmFzRnJhbWVidWZmZXIuaCAqLzsgfTsKKwkJNDk0Qjc0MzEwRkY1MzIyNzAw
NDBFNjZCIC8qIEpTQ2FudmFzTnVtYmVyQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDk0Qjc0MUYwRkY1MzIyNzAwNDBFNjZCIC8qIEpTQ2Fu
dmFzTnVtYmVyQXJyYXkuY3BwICovOyB9OworCQk0OTRCNzQzMjBGRjUzMjI3MDA0MEU2NkIgLyog
SlNDYW52YXNOdW1iZXJBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDk0Qjc0MjAwRkY1MzIyNzAwNDBFNjZCIC8qIEpTQ2FudmFzTnVtYmVyQXJy
YXkuaCAqLzsgfTsKKwkJNDk0Qjc0MzMwRkY1MzIyNzAwNDBFNjZCIC8qIEpTQ2FudmFzUHJvZ3Jh
bS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OTRC
NzQyMTBGRjUzMjI3MDA0MEU2NkIgLyogSlNDYW52YXNQcm9ncmFtLmNwcCAqLzsgfTsKKwkJNDk0
Qjc0MzQwRkY1MzIyNzAwNDBFNjZCIC8qIEpTQ2FudmFzUHJvZ3JhbS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDk0Qjc0MjIwRkY1MzIyNzAwNDBFNjZC
IC8qIEpTQ2FudmFzUHJvZ3JhbS5oICovOyB9OworCQk0OTRCNzQzNTBGRjUzMjI3MDA0MEU2NkIg
LyogSlNDYW52YXNSZW5kZXJidWZmZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDk0Qjc0MjMwRkY1MzIyNzAwNDBFNjZCIC8qIEpTQ2FudmFzUmVu
ZGVyYnVmZmVyLmNwcCAqLzsgfTsKKwkJNDk0Qjc0MzYwRkY1MzIyNzAwNDBFNjZCIC8qIEpTQ2Fu
dmFzUmVuZGVyYnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0OTRCNzQyNDBGRjUzMjI3MDA0MEU2NkIgLyogSlNDYW52YXNSZW5kZXJidWZmZXIu
aCAqLzsgfTsKKwkJNDk0Qjc0MzcwRkY1MzIyNzAwNDBFNjZCIC8qIEpTQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDNELmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQ5NEI3NDI1MEZGNTMyMjcwMDQwRTY2QiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RC5jcHAgKi87IH07CisJCTQ5NEI3NDM4MEZGNTMyMjcwMDQwRTY2QiAvKiBKU0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQzRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNDk0Qjc0MjYwRkY1MzIyNzAwNDBFNjZCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNELmggKi87IH07CisJCTQ5NEI3NDM5MEZGNTMyMjcwMDQwRTY2QiAvKiBKU0NhbnZhc1NoYWRl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OTRC
NzQyNzBGRjUzMjI3MDA0MEU2NkIgLyogSlNDYW52YXNTaGFkZXIuY3BwICovOyB9OworCQk0OTRC
NzQzQTBGRjUzMjI3MDA0MEU2NkIgLyogSlNDYW52YXNTaGFkZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5NEI3NDI4MEZGNTMyMjcwMDQwRTY2QiAv
KiBKU0NhbnZhc1NoYWRlci5oICovOyB9OworCQk0OTRCNzQzQjBGRjUzMjI3MDA0MEU2NkIgLyog
SlNDYW52YXNUZXh0dXJlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ5NEI3NDI5MEZGNTMyMjcwMDQwRTY2QiAvKiBKU0NhbnZhc1RleHR1cmUuY3Bw
ICovOyB9OworCQk0OTRCNzQzQzBGRjUzMjI3MDA0MEU2NkIgLyogSlNDYW52YXNUZXh0dXJlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OTRCNzQyQTBG
RjUzMjI3MDA0MEU2NkIgLyogSlNDYW52YXNUZXh0dXJlLmggKi87IH07CisJCTQ5NEI3NDQ3MEZG
NTMyQzkwMDQwRTY2QiAvKiBKU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5NEI3NDQ2MEZGNTMyQzkwMDQw
RTY2QiAvKiBKU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcCAqLzsgfTsKKwkJNDk0Qjc0Nzgw
RkY1NDc5NDAwNDBFNjZCIC8qIENhbnZhczNETGF5ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5NEI3NDc2MEZGNTQ3OTQwMDQwRTY2QiAvKiBDYW52
YXMzRExheWVyLmggKi87IH07CisJCTQ5NEI3NDc5MEZGNTQ3OTQwMDQwRTY2QiAvKiBDYW52YXMz
RExheWVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDk0Qjc0NzcwRkY1NDc5NDAwNDBFNjZCIC8qIENhbnZhczNETGF5ZXIubW0gKi87IH07CiAJCTQ5
NEJENzk1MEY1NUM4RUUwMDc0NzgyOCAvKiBXZWJLaXRQb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDk0QkQ3OTMwRjU1QzhFRTAwNzQ3ODI4IC8q
IFdlYktpdFBvaW50LmggKi87IH07CiAJCTQ5NEJENzk5MEY1NUM5MEUwMDc0NzgyOCAvKiBKU1dl
YktpdFBvaW50Q29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDk0QkQ3OTcwRjU1QzkwRTAwNzQ3ODI4IC8qIEpTV2ViS2l0UG9pbnRD
b25zdHJ1Y3Rvci5jcHAgKi87IH07CiAJCTQ5NEJENzlBMEY1NUM5MEUwMDc0NzgyOCAvKiBKU1dl
YktpdFBvaW50Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQ5NEJENzk4MEY1NUM5MEUwMDc0NzgyOCAvKiBKU1dlYktpdFBvaW50Q29u
c3RydWN0b3IuaCAqLzsgfTsKQEAgLTc0NCw2ICs3OTgsMTEgQEAKIAkJNDk4MzkxNTkwRjFFNzc2
OTAwQzIzNzgyIC8qIFdlYktpdENTU01hdHJpeC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDk4MzkxNTYwRjFFNzc2OTAwQzIzNzgyIC8qIFdlYktpdENT
U01hdHJpeC5oICovOyB9OwogCQk0OTgzOTE2MzBGMUU4RUUxMDBDMjM3ODIgLyogSlNXZWJLaXRD
U1NNYXRyaXhDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0OTgzOTE2MTBGMUU4RUUxMDBDMjM3ODIgLyogSlNXZWJLaXRDU1NNYXRy
aXhDb25zdHJ1Y3Rvci5jcHAgKi87IH07CiAJCTQ5ODM5MTY0MEYxRThFRTEwMEMyMzc4MiAvKiBK
U1dlYktpdENTU01hdHJpeENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0OTgzOTE2MjBGMUU4RUUxMDBDMjM3ODIgLyogSlNXZWJLaXRD
U1NNYXRyaXhDb25zdHJ1Y3Rvci5oICovOyB9OworCQk0OUE3MzE4MjBGRjU0QjcyMDBGMDYxMzQg
LyogSlNDYW52YXNOdW1iZXJBcnJheUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUE3MzE4MTBGRjU0QjcyMDBGMDYxMzQgLyogSlNDYW52
YXNOdW1iZXJBcnJheUN1c3RvbS5jcHAgKi87IH07CisJCTQ5QTczMkFBMEZGNTcwOUQwMEYwNjEz
NCAvKiBPcGVuR0wuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDlBNzMyQTkwRkY1NzA5RDAwRjA2MTM0IC8qIE9wZW5HTC5mcmFtZXdv
cmsgKi87IH07CisJCTQ5QjhDNEQ4MTAyODg3OTgwMDA1MkI2MiAvKiBHcmFwaGljc0NvbnRleHQz
RC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUI4
QzRENjEwMjg4Nzk4MDAwNTJCNjIgLyogR3JhcGhpY3NDb250ZXh0M0QuY3BwICovOyB9OworCQk0
OUI4QzREOTEwMjg4Nzk4MDAwNTJCNjIgLyogR3JhcGhpY3NDb250ZXh0M0QuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QjhDNEQ3MTAyODg3OTgwMDA1
MkI2MiAvKiBHcmFwaGljc0NvbnRleHQzRC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTQ5QjhDNEUxMTAyODhCOTAwMDA1MkI2MiAvKiBHcmFwaGlj
c0NvbnRleHQzRE1hYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0OUI4QzRFMDEwMjg4QjkwMDAwNTJCNjIgLyogR3JhcGhpY3NDb250ZXh0M0RNYWMu
Y3BwICovOyB9OwogCQk0OUQ1REMyQjBGNDIzQTczMDA4RjIwRkQgLyogTWF0cml4M0RUcmFuc2Zv
cm1PcGVyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNDlENURDMjcwRjQyM0E3MzAwOEYyMEZEIC8qIE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0
aW9uLmNwcCAqLzsgfTsKIAkJNDlENURDMkMwRjQyM0E3MzAwOEYyMEZEIC8qIE1hdHJpeDNEVHJh
bnNmb3JtT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0OUQ1REMyODBGNDIzQTczMDA4RjIwRkQgLyogTWF0cml4M0RUcmFuc2Zvcm1PcGVy
YXRpb24uaCAqLzsgfTsKIAkJNDlENURDMkQwRjQyM0E3MzAwOEYyMEZEIC8qIFBlcnNwZWN0aXZl
VHJhbnNmb3JtT3BlcmF0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQ5RDVEQzI5MEY0MjNBNzMwMDhGMjBGRCAvKiBQZXJzcGVjdGl2ZVRyYW5z
Zm9ybU9wZXJhdGlvbi5jcHAgKi87IH07CkBAIC01NzIxLDYgKzU3ODAsNjAgQEAKIAkJNDZGOUQ1
REEwQjBENjAxNzAwMjhFRTM2IC8qIGFsaWFzQ3Vyc29yLnBuZyAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGltYWdlLnBuZzsgcGF0aCA9IGFsaWFzQ3Vy
c29yLnBuZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDZGOUQ1REIwQjBENjAxNzAw
MjhFRTM2IC8qIG5vRHJvcEN1cnNvci5wbmcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBpbWFnZS5wbmc7IHBhdGggPSBub0Ryb3BDdXJzb3IucG5nOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NkY5RDVEQzBCMEQ2MDE3MDAyOEVFMzYgLyog
cHJvZ3Jlc3NDdXJzb3IucG5nICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gaW1hZ2UucG5nOyBwYXRoID0gcHJvZ3Jlc3NDdXJzb3IucG5nOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk0OTRCNzNDQjBGRjUyRkNFMDA0MEU2NkIgLyogSlNDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0RDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RDdXN0b20uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk0OTRCNzNDRDBGRjUyRkZGMDA0MEU2NkIgLyogQ2FudmFz
QnVmZmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhbnZhc0J1
ZmZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5NEI3M0NFMEZGNTJGRkYw
MDQwRTY2QiAvKiBDYW52YXNCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ2FudmFzQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5NEI3M0NG
MEZGNTJGRkYwMDQwRTY2QiAvKiBDYW52YXNCdWZmZXIuaWRsICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0
aCA9IENhbnZhc0J1ZmZlci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5NEI3
M0QwMEZGNTJGRkYwMDQwRTY2QiAvKiBDYW52YXNCeXRlQXJyYXkuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FudmFzQnl0ZUFycmF5LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNDk0QjczRDEwRkY1MkZGRjAwNDBFNjZCIC8qIENhbnZhc0J5dGVB
cnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYW52YXNCeXRlQXJyYXku
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDk0QjczRDIwRkY1MkZGRjAwNDBFNjZC
IC8qIENhbnZhc0J5dGVBcnJheS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gQ2FudmFzQnl0
ZUFycmF5LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDk0QjczRDMwRkY1MkZG
RjAwNDBFNjZCIC8qIENhbnZhc0ZyYW1lYnVmZmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IENhbnZhc0ZyYW1lYnVmZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNDk0QjczRDQwRkY1MkZGRjAwNDBFNjZCIC8qIENhbnZhc0ZyYW1lYnVmZmVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbnZhc0ZyYW1lYnVmZmVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5NEI3M0Q1MEZGNTJGRkYwMDQwRTY2QiAv
KiBDYW52YXNGcmFtZWJ1ZmZlci5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gQ2FudmFzRnJh
bWVidWZmZXIuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OTRCNzNENjBGRjUy
RkZGMDA0MEU2NkIgLyogQ2FudmFzTnVtYmVyQXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gQ2FudmFzTnVtYmVyQXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk0OTRCNzNENzBGRjUyRkZGMDA0MEU2NkIgLyogQ2FudmFzTnVtYmVyQXJy
YXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FudmFzTnVtYmVyQXJyYXku
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDk0QjczRDgwRkY1MkZGRjAwNDBFNjZC
IC8qIENhbnZhc051bWJlckFycmF5LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBDYW52YXNO
dW1iZXJBcnJheS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5NEI3M0Q5MEZG
NTJGRkYwMDQwRTY2QiAvKiBDYW52YXNPYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ2FudmFzT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNDk0QjczREEwRkY1MkZGRjAwNDBFNjZCIC8qIENhbnZhc09iamVjdC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYW52YXNPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNDk0QjczREIwRkY1MkZGRjAwNDBFNjZCIC8qIENhbnZhc1Byb2dyYW0u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FudmFzUHJvZ3JhbS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5NEI3M0RDMEZGNTJGRkYwMDQwRTY2
QiAvKiBDYW52YXNQcm9ncmFtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENh
bnZhc1Byb2dyYW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDk0QjczREQwRkY1
MkZGRjAwNDBFNjZCIC8qIENhbnZhc1Byb2dyYW0uaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
IENhbnZhc1Byb2dyYW0uaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OTRCNzNE
RTBGRjUyRkZGMDA0MEU2NkIgLyogQ2FudmFzUmVuZGVyYnVmZmVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhbnZhc1JlbmRlcmJ1ZmZlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5NEI3M0RGMEZGNTJGRkYwMDQwRTY2QiAvKiBDYW52YXNS
ZW5kZXJidWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FudmFzUmVu
ZGVyYnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5NEI3M0UwMEZGNTJG
RkYwMDQwRTY2QiAvKiBDYW52YXNSZW5kZXJidWZmZXIuaWRsICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0
aCA9IENhbnZhc1JlbmRlcmJ1ZmZlci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTQ5NEI3M0UxMEZGNTJGRkYwMDQwRTY2QiAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OTRCNzNFMjBGRjUyRkZGMDA0
MEU2NkIgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDYW52YXNSZW5kZXJpbmdDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTQ5NEI3M0UzMEZGNTJGRkYwMDQwRTY2QiAvKiBDYW52YXNSZW5kZXJpbmdDb250
ZXh0LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBDYW52YXNSZW5kZXJpbmdDb250ZXh0Lmlk
bDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDk0QjczRTQwRkY1MkZGRjAwNDBFNjZC
IC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk0OTRCNzNFNTBGRjUyRkZGMDA0MEU2NkIgLyogQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDNELmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OTRCNzNF
NjBGRjUyRkZGMDA0MEU2NkIgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmlkbCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IHBhdGggPSBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuaWRsOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk0OTRCNzNFNzBGRjUyRkZGMDA0MEU2NkIgLyogQ2FudmFzU2hh
ZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhbnZhc1NoYWRl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5NEI3M0U4MEZGNTJGRkYwMDQw
RTY2QiAvKiBDYW52YXNTaGFkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q2FudmFzU2hhZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5NEI3M0U5MEZG
NTJGRkYwMDQwRTY2QiAvKiBDYW52YXNTaGFkZXIuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
IENhbnZhc1NoYWRlci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5NEI3M0VB
MEZGNTJGRkYwMDQwRTY2QiAvKiBDYW52YXNUZXh0dXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENhbnZhc1RleHR1cmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk0OTRCNzNFQjBGRjUyRkZGMDA0MEU2NkIgLyogQ2FudmFzVGV4dHVyZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYW52YXNUZXh0dXJlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5NEI3M0VDMEZGNTJGRkYwMDQwRTY2QiAvKiBDYW52YXNU
ZXh0dXJlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBDYW52YXNUZXh0dXJlLmlkbDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDk0Qjc0MTkwRkY1MzIyNzAwNDBFNjZCIC8qIEpT
Q2FudmFzQnVmZmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
Q2FudmFzQnVmZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDk0Qjc0MUEw
RkY1MzIyNzAwNDBFNjZCIC8qIEpTQ2FudmFzQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTQ2FudmFzQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTQ5NEI3NDFCMEZGNTMyMjcwMDQwRTY2QiAvKiBKU0NhbnZhc0J5dGVBcnJheS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NhbnZhc0J5dGVBcnJheS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5NEI3NDFDMEZGNTMyMjcwMDQwRTY2QiAv
KiBKU0NhbnZhc0J5dGVBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U0NhbnZhc0J5dGVBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OTRCNzQx
RDBGRjUzMjI3MDA0MEU2NkIgLyogSlNDYW52YXNGcmFtZWJ1ZmZlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NhbnZhc0ZyYW1lYnVmZmVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDk0Qjc0MUUwRkY1MzIyNzAwNDBFNjZCIC8qIEpTQ2Fu
dmFzRnJhbWVidWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDYW52
YXNGcmFtZWJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OTRCNzQxRjBG
RjUzMjI3MDA0MEU2NkIgLyogSlNDYW52YXNOdW1iZXJBcnJheS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NhbnZhc051bWJlckFycmF5LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDk0Qjc0MjAwRkY1MzIyNzAwNDBFNjZCIC8qIEpTQ2FudmFz
TnVtYmVyQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDYW52YXNO
dW1iZXJBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OTRCNzQyMTBGRjUz
MjI3MDA0MEU2NkIgLyogSlNDYW52YXNQcm9ncmFtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTQ2FudmFzUHJvZ3JhbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTQ5NEI3NDIyMEZGNTMyMjcwMDQwRTY2QiAvKiBKU0NhbnZhc1Byb2dyYW0uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDYW52YXNQcm9ncmFtLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5NEI3NDIzMEZGNTMyMjcwMDQwRTY2QiAvKiBKU0Nh
bnZhc1JlbmRlcmJ1ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU0NhbnZhc1JlbmRlcmJ1ZmZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTQ5NEI3NDI0MEZGNTMyMjcwMDQwRTY2QiAvKiBKU0NhbnZhc1JlbmRlcmJ1ZmZlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NhbnZhc1JlbmRlcmJ1ZmZlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OTRCNzQyNTBGRjUzMjI3MDA0MEU2NkIgLyogSlND
YW52YXNSZW5kZXJpbmdDb250ZXh0M0QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk0OTRCNzQyNjBGRjUzMjI3MDA0MEU2NkIgLyogSlNDYW52YXNSZW5kZXJp
bmdDb250ZXh0M0QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDk0Qjc0
MjcwRkY1MzIyNzAwNDBFNjZCIC8qIEpTQ2FudmFzU2hhZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ2FudmFzU2hhZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNDk0Qjc0MjgwRkY1MzIyNzAwNDBFNjZCIC8qIEpTQ2FudmFzU2hhZGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ2FudmFzU2hhZGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5NEI3NDI5MEZGNTMyMjcwMDQwRTY2QiAvKiBK
U0NhbnZhc1RleHR1cmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNDYW52YXNUZXh0dXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDk0Qjc0
MkEwRkY1MzIyNzAwNDBFNjZCIC8qIEpTQ2FudmFzVGV4dHVyZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU0NhbnZhc1RleHR1cmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNDk0Qjc0NDYwRkY1MzJDOTAwNDBFNjZCIC8qIEpTSFRNTENhbnZhc0VsZW1lbnRD
dXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNIVE1MQ2Fu
dmFzRWxlbWVudEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5NEI3
NDc2MEZGNTQ3OTQwMDQwRTY2QiAvKiBDYW52YXMzRExheWVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENhbnZhczNETGF5ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNDk0Qjc0NzcwRkY1NDc5NDAwNDBFNjZCIC8qIENhbnZhczNETGF5ZXIubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDYW52YXMzRExheWVyLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OTRCRDc5MzBGNTVDOEVFMDA3NDc4MjggLyogV2Vi
S2l0UG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViS2l0UG9pbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDk0QkQ3OTQwRjU1QzhFRTAwNzQ3ODI4
IC8qIFdlYktpdFBvaW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJLaXRQb2ludC5p
ZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5NEJENzk3MEY1NUM5MEUwMDc0Nzgy
OCAvKiBKU1dlYktpdFBvaW50Q29uc3RydWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSlNXZWJLaXRQb2ludENvbnN0cnVjdG9yLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTU3MzcsNiArNTg1MCwxMSBAQAogCQk0OTgzOTE1NzBGMUU3NzY5
MDBDMjM3ODIgLyogV2ViS2l0Q1NTTWF0cml4LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBX
ZWJLaXRDU1NNYXRyaXguaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OTgzOTE2
MTBGMUU4RUUxMDBDMjM3ODIgLyogSlNXZWJLaXRDU1NNYXRyaXhDb25zdHJ1Y3Rvci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYktpdENTU01hdHJpeENvbnN0
cnVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDk4MzkxNjIwRjFFOEVF
MTAwQzIzNzgyIC8qIEpTV2ViS2l0Q1NTTWF0cml4Q29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXZWJLaXRDU1NNYXRyaXhDb25zdHJ1Y3Rvci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUE3MzE4MTBGRjU0QjcyMDBGMDYxMzQgLyogSlND
YW52YXNOdW1iZXJBcnJheUN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU0NhbnZhc051bWJlckFycmF5Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNDlBNzMyQTkwRkY1NzA5RDAwRjA2MTM0IC8qIE9wZW5HTC5mcmFtZXdvcmsg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVy
LmZyYW1ld29yazsgbmFtZSA9IE9wZW5HTC5mcmFtZXdvcms7IHBhdGggPSAvU3lzdGVtL0xpYnJh
cnkvRnJhbWV3b3Jrcy9PcGVuR0wuZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gIjxhYnNvbHV0ZT4i
OyB9OworCQk0OUI4QzRENjEwMjg4Nzk4MDAwNTJCNjIgLyogR3JhcGhpY3NDb250ZXh0M0QuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0M0Qu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUI4QzRENzEwMjg4Nzk4MDAwNTJC
NjIgLyogR3JhcGhpY3NDb250ZXh0M0QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gR3JhcGhpY3NDb250ZXh0M0QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlC
OEM0RTAxMDI4OEI5MDAwMDUyQjYyIC8qIEdyYXBoaWNzQ29udGV4dDNETWFjLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dDNETWFjLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlENURDMjcwRjQyM0E3MzAwOEYyMEZEIC8q
IE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmNwcDsgcGF0aCA9IHRyYW5z
Zm9ybXMvTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0OUQ1REMyODBGNDIzQTczMDA4RjIwRkQgLyogTWF0cml4M0RUcmFuc2Zvcm1P
cGVyYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTWF0cml4M0RUcmFu
c2Zvcm1PcGVyYXRpb24uaDsgcGF0aCA9IHRyYW5zZm9ybXMvTWF0cml4M0RUcmFuc2Zvcm1PcGVy
YXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlENURDMjkwRjQyM0E3MzAw
OEYyMEZEIC8qIFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uLmNw
cDsgcGF0aCA9IHRyYW5zZm9ybXMvUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTQ4Miw2ICs5NjAwLDcgQEAKIAkJCQlERDc2
M0JCMjA5OTJDMkM5MDA3NDBCOEUgLyogbGlieG1sMi5keWxpYiBpbiBGcmFtZXdvcmtzICovLAog
CQkJCUE4OEFENTJGMDk1MjRCOTIwMDFERDE5NiAvKiBRdWFydHpDb3JlLmZyYW1ld29yayBpbiBG
cmFtZXdvcmtzICovLAogCQkJCTFBN0ZBN0NDMEREQTRCNzcwMDI4RjhBNSAvKiBTeXN0ZW1Db25m
aWd1cmF0aW9uLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovLAorCQkJCTQ5QTczMkFBMEZGNTcw
OUQwMEYwNjEzNCAvKiBPcGVuR0wuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8sCiAJCQkpOwog
CQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC05NTQ2
LDYgKzk2NjUsNyBAQAogCQkJCURENzYzQkIxMDk5MkMyQzkwMDc0MEI4RSAvKiBsaWJ4bWwyLmR5
bGliICovLAogCQkJCUE4NUQ3QTJGMDg3OUVCQTkwMDZBOTE3MiAvKiBRdWFydHpDb3JlLmZyYW1l
d29yayAqLywKIAkJCQkxQTdGQTdDQjBEREE0Qjc3MDAyOEY4QTUgLyogU3lzdGVtQ29uZmlndXJh
dGlvbi5mcmFtZXdvcmsgKi8sCisJCQkJNDlBNzMyQTkwRkY1NzA5RDAwRjA2MTM0IC8qIE9wZW5H
TC5mcmFtZXdvcmsgKi8sCiAJCQkpOwogCQkJbmFtZSA9IEZyYW1ld29ya3M7CiAJCQlzb3VyY2VU
cmVlID0gIjxncm91cD4iOwpAQCAtMTE3NDEsMjAgKzExODYxLDUyIEBACiAJCTkzRUVDMUVDMDlD
Mjg3NzcwMEM1MTVEMSAvKiBodG1sICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGls
ZHJlbiA9ICgKKwkJCQk0OTRCNzNDRDBGRjUyRkZGMDA0MEU2NkIgLyogQ2FudmFzQnVmZmVyLmNw
cCAqLywKKwkJCQk0OTRCNzNDRTBGRjUyRkZGMDA0MEU2NkIgLyogQ2FudmFzQnVmZmVyLmggKi8s
CisJCQkJNDk0QjczQ0YwRkY1MkZGRjAwNDBFNjZCIC8qIENhbnZhc0J1ZmZlci5pZGwgKi8sCisJ
CQkJNDk0QjczRDAwRkY1MkZGRjAwNDBFNjZCIC8qIENhbnZhc0J5dGVBcnJheS5jcHAgKi8sCisJ
CQkJNDk0QjczRDEwRkY1MkZGRjAwNDBFNjZCIC8qIENhbnZhc0J5dGVBcnJheS5oICovLAorCQkJ
CTQ5NEI3M0QyMEZGNTJGRkYwMDQwRTY2QiAvKiBDYW52YXNCeXRlQXJyYXkuaWRsICovLAorCQkJ
CTQ5NEI3M0QzMEZGNTJGRkYwMDQwRTY2QiAvKiBDYW52YXNGcmFtZWJ1ZmZlci5jcHAgKi8sCisJ
CQkJNDk0QjczRDQwRkY1MkZGRjAwNDBFNjZCIC8qIENhbnZhc0ZyYW1lYnVmZmVyLmggKi8sCisJ
CQkJNDk0QjczRDUwRkY1MkZGRjAwNDBFNjZCIC8qIENhbnZhc0ZyYW1lYnVmZmVyLmlkbCAqLywK
IAkJCQk5M0VFQzFGMDA5QzI4Nzc3MDBDNTE1RDEgLyogQ2FudmFzR3JhZGllbnQuY3BwICovLAog
CQkJCTkzRUVDMUYxMDlDMjg3NzcwMEM1MTVEMSAvKiBDYW52YXNHcmFkaWVudC5oICovLAogCQkJ
CTkzMENBQjg4MDlDNDlFRkEwMDIyOUMwNCAvKiBDYW52YXNHcmFkaWVudC5pZGwgKi8sCisJCQkJ
NDk0QjczRDYwRkY1MkZGRjAwNDBFNjZCIC8qIENhbnZhc051bWJlckFycmF5LmNwcCAqLywKKwkJ
CQk0OTRCNzNENzBGRjUyRkZGMDA0MEU2NkIgLyogQ2FudmFzTnVtYmVyQXJyYXkuaCAqLywKKwkJ
CQk0OTRCNzNEODBGRjUyRkZGMDA0MEU2NkIgLyogQ2FudmFzTnVtYmVyQXJyYXkuaWRsICovLAor
CQkJCTQ5NEI3M0Q5MEZGNTJGRkYwMDQwRTY2QiAvKiBDYW52YXNPYmplY3QuY3BwICovLAorCQkJ
CTQ5NEI3M0RBMEZGNTJGRkYwMDQwRTY2QiAvKiBDYW52YXNPYmplY3QuaCAqLywKIAkJCQk5M0VF
QzI2RTA5QzMyMTgwMDBDNTE1RDEgLyogQ2FudmFzUGF0dGVybi5jcHAgKi8sCiAJCQkJOTNFRUMx
RjIwOUMyODc3NzAwQzUxNUQxIC8qIENhbnZhc1BhdHRlcm4uaCAqLywKIAkJCQk5MzBDQUI4RjA5
QzQ5RjFCMDAyMjlDMDQgLyogQ2FudmFzUGF0dGVybi5pZGwgKi8sCiAJCQkJQTcwOTRBRjkwRjI3
QUU2MDAwNTk2Q0VDIC8qIENhbnZhc1BpeGVsQXJyYXkuY3BwICovLAogCQkJCTg5OEQxRkIyMEYy
NzkzNEIwMDRCQkFDNyAvKiBDYW52YXNQaXhlbEFycmF5LmggKi8sCiAJCQkJQTcwOTRBRkIwRjI3
QUVFMzAwNTk2Q0VDIC8qIENhbnZhc1BpeGVsQXJyYXkuaWRsICovLAorCQkJCTQ5NEI3M0RCMEZG
NTJGRkYwMDQwRTY2QiAvKiBDYW52YXNQcm9ncmFtLmNwcCAqLywKKwkJCQk0OTRCNzNEQzBGRjUy
RkZGMDA0MEU2NkIgLyogQ2FudmFzUHJvZ3JhbS5oICovLAorCQkJCTQ5NEI3M0REMEZGNTJGRkYw
MDQwRTY2QiAvKiBDYW52YXNQcm9ncmFtLmlkbCAqLywKKwkJCQk0OTRCNzNERTBGRjUyRkZGMDA0
MEU2NkIgLyogQ2FudmFzUmVuZGVyYnVmZmVyLmNwcCAqLywKKwkJCQk0OTRCNzNERjBGRjUyRkZG
MDA0MEU2NkIgLyogQ2FudmFzUmVuZGVyYnVmZmVyLmggKi8sCisJCQkJNDk0QjczRTAwRkY1MkZG
RjAwNDBFNjZCIC8qIENhbnZhc1JlbmRlcmJ1ZmZlci5pZGwgKi8sCisJCQkJNDk0QjczRTEwRkY1
MkZGRjAwNDBFNjZCIC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQuY3BwICovLAorCQkJCTQ5NEI3
M0UyMEZGNTJGRkYwMDQwRTY2QiAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0LmggKi8sCisJCQkJ
NDk0QjczRTMwRkY1MkZGRjAwNDBFNjZCIC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQuaWRsICov
LAogCQkJCTkzRUVDMUVEMDlDMjg3NzcwMEM1MTVEMSAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQuY3BwICovLAogCQkJCTkzRUVDMUVFMDlDMjg3NzcwMEM1MTVEMSAvKiBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQuaCAqLywKIAkJCQk5MzBDQUFENjA5QzQ5NUI2MDAyMjlDMDQgLyogQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJELmlkbCAqLywKKwkJCQk0OTRCNzNFNDBGRjUyRkZGMDA0MEU2NkIg
LyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmNwcCAqLywKKwkJCQk0OTRCNzNFNTBGRjUyRkZG
MDA0MEU2NkIgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmggKi8sCisJCQkJNDk0QjczRTYw
RkY1MkZGRjAwNDBFNjZCIC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5pZGwgKi8sCisJCQkJ
NDk0QjczRTcwRkY1MkZGRjAwNDBFNjZCIC8qIENhbnZhc1NoYWRlci5jcHAgKi8sCisJCQkJNDk0
QjczRTgwRkY1MkZGRjAwNDBFNjZCIC8qIENhbnZhc1NoYWRlci5oICovLAorCQkJCTQ5NEI3M0U5
MEZGNTJGRkYwMDQwRTY2QiAvKiBDYW52YXNTaGFkZXIuaWRsICovLAogCQkJCTkzRUVDMjcwMDlD
MzIxODgwMEM1MTVEMSAvKiBDYW52YXNTdHlsZS5jcHAgKi8sCiAJCQkJOTNFRUMxRUYwOUMyODc3
NzAwQzUxNUQxIC8qIENhbnZhc1N0eWxlLmggKi8sCisJCQkJNDk0QjczRUEwRkY1MkZGRjAwNDBF
NjZCIC8qIENhbnZhc1RleHR1cmUuY3BwICovLAorCQkJCTQ5NEI3M0VCMEZGNTJGRkYwMDQwRTY2
QiAvKiBDYW52YXNUZXh0dXJlLmggKi8sCisJCQkJNDk0QjczRUMwRkY1MkZGRjAwNDBFNjZCIC8q
IENhbnZhc1RleHR1cmUuaWRsICovLAogCQkJCTkzQzQ0MUVEMEY4MTNBMUEwMEMxQTYzNCAvKiBD
b2xsZWN0aW9uQ2FjaGUuY3BwICovLAogCQkJCTkzQzQ0MUVFMEY4MTNBMUEwMEMxQTYzNCAvKiBD
b2xsZWN0aW9uQ2FjaGUuaCAqLywKIAkJCQk5M0M0NDFGRjBGODEzQUUxMDBDMUE2MzQgLyogQ29s
bGVjdGlvblR5cGUuaCAqLywKQEAgLTEyMDYwLDEyICsxMjIxMiwzMCBAQAogCQlBODNCNzkwODBD
Q0FGRjJCMDAwQjA4MjUgLyogSFRNTCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hp
bGRyZW4gPSAoCisJCQkJNDk0Qjc0MTkwRkY1MzIyNzAwNDBFNjZCIC8qIEpTQ2FudmFzQnVmZmVy
LmNwcCAqLywKKwkJCQk0OTRCNzQxQTBGRjUzMjI3MDA0MEU2NkIgLyogSlNDYW52YXNCdWZmZXIu
aCAqLywKKwkJCQk0OTRCNzQxQjBGRjUzMjI3MDA0MEU2NkIgLyogSlNDYW52YXNCeXRlQXJyYXku
Y3BwICovLAorCQkJCTQ5NEI3NDFDMEZGNTMyMjcwMDQwRTY2QiAvKiBKU0NhbnZhc0J5dGVBcnJh
eS5oICovLAorCQkJCTQ5NEI3NDFEMEZGNTMyMjcwMDQwRTY2QiAvKiBKU0NhbnZhc0ZyYW1lYnVm
ZmVyLmNwcCAqLywKKwkJCQk0OTRCNzQxRTBGRjUzMjI3MDA0MEU2NkIgLyogSlNDYW52YXNGcmFt
ZWJ1ZmZlci5oICovLAogCQkJCTY1REYzMjMzMDlEMURFNjUwMDBCRTMyNSAvKiBKU0NhbnZhc0dy
YWRpZW50LmNwcCAqLywKIAkJCQk2NURGMzIzNDA5RDFERTY1MDAwQkUzMjUgLyogSlNDYW52YXNH
cmFkaWVudC5oICovLAorCQkJCTQ5NEI3NDFGMEZGNTMyMjcwMDQwRTY2QiAvKiBKU0NhbnZhc051
bWJlckFycmF5LmNwcCAqLywKKwkJCQk0OTRCNzQyMDBGRjUzMjI3MDA0MEU2NkIgLyogSlNDYW52
YXNOdW1iZXJBcnJheS5oICovLAogCQkJCTY1REYzMjM1MDlEMURFNjUwMDBCRTMyNSAvKiBKU0Nh
bnZhc1BhdHRlcm4uY3BwICovLAogCQkJCTY1REYzMjM2MDlEMURFNjUwMDBCRTMyNSAvKiBKU0Nh
bnZhc1BhdHRlcm4uaCAqLywKKwkJCQk0OTRCNzQyMTBGRjUzMjI3MDA0MEU2NkIgLyogSlNDYW52
YXNQcm9ncmFtLmNwcCAqLywKKwkJCQk0OTRCNzQyMjBGRjUzMjI3MDA0MEU2NkIgLyogSlNDYW52
YXNQcm9ncmFtLmggKi8sCisJCQkJNDk0Qjc0MjMwRkY1MzIyNzAwNDBFNjZCIC8qIEpTQ2FudmFz
UmVuZGVyYnVmZmVyLmNwcCAqLywKKwkJCQk0OTRCNzQyNDBGRjUzMjI3MDA0MEU2NkIgLyogSlND
YW52YXNSZW5kZXJidWZmZXIuaCAqLywKIAkJCQk2NURGMzIzNzA5RDFERTY1MDAwQkUzMjUgLyog
SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwICovLAogCQkJCTY1REYzMjM4MDlEMURFNjUw
MDBCRTMyNSAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oICovLAorCQkJCTQ5NEI3NDI1
MEZGNTMyMjcwMDQwRTY2QiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5jcHAgKi8sCisJ
CQkJNDk0Qjc0MjYwRkY1MzIyNzAwNDBFNjZCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
LmggKi8sCisJCQkJNDk0Qjc0MjcwRkY1MzIyNzAwNDBFNjZCIC8qIEpTQ2FudmFzU2hhZGVyLmNw
cCAqLywKKwkJCQk0OTRCNzQyODBGRjUzMjI3MDA0MEU2NkIgLyogSlNDYW52YXNTaGFkZXIuaCAq
LywKKwkJCQk0OTRCNzQyOTBGRjUzMjI3MDA0MEU2NkIgLyogSlNDYW52YXNUZXh0dXJlLmNwcCAq
LywKKwkJCQk0OTRCNzQyQTBGRjUzMjI3MDA0MEU2NkIgLyogSlNDYW52YXNUZXh0dXJlLmggKi8s
CiAJCQkJQkM3N0QxNjUwRkYxOUY1NTAwNzA4ODdCIC8qIEpTRGF0YUdyaWRDb2x1bW4uY3BwICov
LAogCQkJCUJDNzdEMTY2MEZGMTlGNTUwMDcwODg3QiAvKiBKU0RhdGFHcmlkQ29sdW1uLmggKi8s
CiAJCQkJQkM3N0QxNjcwRkYxOUY1NTAwNzA4ODdCIC8qIEpTRGF0YUdyaWRDb2x1bW5MaXN0LmNw
cCAqLywKQEAgLTEzMjYwLDYgKzEzNDMwLDggQEAKIAkJQjI3NTM1NDkwQjA1MzgxNDAwMkNFNjRG
IC8qIG1hYyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJ
NDk0Qjc0NzYwRkY1NDc5NDAwNDBFNjZCIC8qIENhbnZhczNETGF5ZXIuaCAqLywKKwkJCQk0OTRC
NzQ3NzBGRjU0Nzk0MDA0MEU2NkIgLyogQ2FudmFzM0RMYXllci5tbSAqLywKIAkJCQlFREUzQTRG
RjBDN0E0MzA2MDA5NTZBMzcgLyogQ29sb3JNYWMuaCAqLywKIAkJCQlCMjc1MzU0QTBCMDUzODE0
MDAyQ0U2NEYgLyogQ29sb3JNYWMubW0gKi8sCiAJCQkJMzcyNENBNTUwRTY4QTdFNDAwREI0Mzg0
IC8qIENvcmVUZXh0Q29udHJvbGxlci5jcHAgKi8sCkBAIC0xMzI3Nyw2ICsxMzQ0OSw3IEBACiAJ
CQkJQjJBRkZDN0EwRDAwQTVDMTAwMzAwNzREIC8qIEZvbnRQbGF0Zm9ybURhdGFNYWMubW0gKi8s
CiAJCQkJQjJBRkZDN0IwRDAwQTVDMTAwMzAwNzREIC8qIEdseXBoUGFnZVRyZWVOb2RlTWFjLmNw
cCAqLywKIAkJCQlCMjc3QjQwMzBCMjJGMzdDMDAwNEJFQzYgLyogR3JhcGhpY3NDb250ZXh0TWFj
Lm1tICovLAorCQkJCTQ5QjhDNEUwMTAyODhCOTAwMDA1MkI2MiAvKiBHcmFwaGljc0NvbnRleHQz
RE1hYy5jcHAgKi8sCiAJCQkJMEY1ODBCMDQwRjEyQTI1NTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5
ZXJDQS5oICovLAogCQkJCTBGNTgwQjAzMEYxMkEyNTQwMDUxRDY4OSAvKiBHcmFwaGljc0xheWVy
Q0EubW0gKi8sCiAJCQkJQjI3NTM1OEQwQjA1M0E2NjAwMkNFNjRGIC8qIEljb25NYWMubW0gKi8s
CkBAIC0xMzM0Nyw2ICsxMzUyMCw4IEBACiAJCQkJQjJBMDE1OTIwQUY2Q0Q1MzAwNkJDRTBFIC8q
IEdyYXBoaWNzQ29udGV4dC5jcHAgKi8sCiAJCQkJQjJBMDE1OTMwQUY2Q0Q1MzAwNkJDRTBFIC8q
IEdyYXBoaWNzQ29udGV4dC5oICovLAogCQkJCUE4OEZFMzMzMEU1RUVFODcwMDhEOEMwRiAvKiBH
cmFwaGljc0NvbnRleHRQcml2YXRlLmggKi8sCisJCQkJNDlCOEM0RDYxMDI4ODc5ODAwMDUyQjYy
IC8qIEdyYXBoaWNzQ29udGV4dDNELmNwcCAqLywKKwkJCQk0OUI4QzRENzEwMjg4Nzk4MDAwNTJC
NjIgLyogR3JhcGhpY3NDb250ZXh0M0QuaCAqLywKIAkJCQkwRjU4MEIwOTBGMTJBMjY5MDA1MUQ2
ODkgLyogR3JhcGhpY3NMYXllci5jcHAgKi8sCiAJCQkJMEY1ODBCMEEwRjEyQTI2OTAwNTFENjg5
IC8qIEdyYXBoaWNzTGF5ZXIuaCAqLywKIAkJCQkwRjU4MEIwQjBGMTJBMjY5MDA1MUQ2ODkgLyog
R3JhcGhpY3NMYXllckNsaWVudC5oICovLApAQCAtMTM2NTIsNiArMTM4MjcsOCBAQAogCQkJY2hp
bGRyZW4gPSAoCiAJCQkJNDE2MkE0NTMxMDExNDVFMzAwREZGM0VEIC8qIEpTRGVkaWNhdGVkV29y
a2VyQ29udGV4dEN1c3RvbS5jcHAgKi8sCiAJCQkJQkMyRUQ2QkIwQzZCRDJGMDAwOTIwQkZGIC8q
IEpTQXR0ckN1c3RvbS5jcHAgKi8sCisJCQkJNDlBNzMxODEwRkY1NEI3MjAwRjA2MTM0IC8qIEpT
Q2FudmFzTnVtYmVyQXJyYXlDdXN0b20uY3BwICovLAorCQkJCTQ5NEI3M0NCMEZGNTJGQ0UwMDQw
RTY2QiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzREN1c3RvbS5jcHAgKi8sCiAJCQkJMUE5
RUY0NTYwQTFCOTU3RDAwMzMyQjYzIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9t
LmNwcCAqLywKIAkJCQk5M0JBNTlCMTBGMkFBNUZFMDA4RThFOTkgLyogSlNDREFUQVNlY3Rpb25D
dXN0b20uY3BwICovLAogCQkJCUJDQTgzRTUxMEQ3Q0UyMDUwMDM0MjFBOCAvKiBKU0NsaXBib2Fy
ZEN1c3RvbS5jcHAgKi8sCkBAIC0xMzY4OSw2ICsxMzg2Niw3IEBACiAJCQkJRkU4MEQ3QTYwRTlD
MUVEMjAwMEQ2Rjc1IC8qIEpTR2VvbG9jYXRpb25DdXN0b20uY3BwICovLAogCQkJCUJDRTdCMTky
MEQ0RTg2OTYwMDc1QTUzOSAvKiBKU0hpc3RvcnlDdXN0b20uY3BwICovLAogCQkJCUJDNEVERUYz
MEMwOEYzRkIwMDdFREQ0OSAvKiBKU0hUTUxBcHBsZXRFbGVtZW50Q3VzdG9tLmNwcCAqLywKKwkJ
CQk0OTRCNzQ0NjBGRjUzMkM5MDA0MEU2NkIgLyogSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5j
cHAgKi8sCiAJCQkJQkNDQkFEM0EwQzE4QkZGODAwQ0U4OTBGIC8qIEpTSFRNTENvbGxlY3Rpb25D
dXN0b20uY3BwICovLAogCQkJCUJDQkNBRTUzMEZGMUEyOUUwMDA3NjJBRSAvKiBKU0hUTUxEYXRh
R3JpZEVsZW1lbnRDdXN0b20uY3BwICovLAogCQkJCUJDNTE1ODBBMEMwM0Q0MDQwMDhCQjBFRSAv
KiBKU0hUTUxEb2N1bWVudEN1c3RvbS5jcHAgKi8sCkBAIC0xNzA4NCw2ICsxNzI2MiwyOCBAQAog
CQkJCTQxQTNENThGMTAxQzE1MkQwMDMxNkQwNyAvKiBEZWRpY2F0ZWRXb3JrZXJUaHJlYWQuaCBp
biBIZWFkZXJzICovLAogCQkJCTdBMjQ1ODdDMTAyMUVBRjQwMDBBMDBBQSAvKiBJbnNwZWN0b3JE
T01BZ2VudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDcwOUZDNEUxMDI1REVFMzAwNTlDREJBIC8q
IEFjY2Vzc2liaWxpdHlTbGlkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ5NEI3M0VFMEZGNTJG
RkYwMDQwRTY2QiAvKiBDYW52YXNCdWZmZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ5NEI3M0Yx
MEZGNTJGRkYwMDQwRTY2QiAvKiBDYW52YXNCeXRlQXJyYXkuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTQ5NEI3M0Y0MEZGNTJGRkYwMDQwRTY2QiAvKiBDYW52YXNGcmFtZWJ1ZmZlci5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNDk0QjczRjcwRkY1MkZGRjAwNDBFNjZCIC8qIENhbnZhc051bWJlckFycmF5
LmggaW4gSGVhZGVycyAqLywKKwkJCQk0OTRCNzNGQTBGRjUyRkZGMDA0MEU2NkIgLyogQ2FudmFz
T2JqZWN0LmggaW4gSGVhZGVycyAqLywKKwkJCQk0OTRCNzNGQzBGRjUyRkZGMDA0MEU2NkIgLyog
Q2FudmFzUHJvZ3JhbS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDk0QjczRkYwRkY1MkZGRjAwNDBF
NjZCIC8qIENhbnZhc1JlbmRlcmJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDk0Qjc0MDIw
RkY1MkZGRjAwNDBFNjZCIC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICov
LAorCQkJCTQ5NEI3NDA1MEZGNTJGRkYwMDQwRTY2QiAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0
M0QuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ5NEI3NDA4MEZGNTJGRkYwMDQwRTY2QiAvKiBDYW52
YXNTaGFkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ5NEI3NDBCMEZGNTJGRkYwMDQwRTY2QiAv
KiBDYW52YXNUZXh0dXJlLmggaW4gSGVhZGVycyAqLywKKwkJCQk0OTRCNzQyQzBGRjUzMjI3MDA0
MEU2NkIgLyogSlNDYW52YXNCdWZmZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ5NEI3NDJFMEZG
NTMyMjcwMDQwRTY2QiAvKiBKU0NhbnZhc0J5dGVBcnJheS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NDk0Qjc0MzAwRkY1MzIyNzAwNDBFNjZCIC8qIEpTQ2FudmFzRnJhbWVidWZmZXIuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTQ5NEI3NDMyMEZGNTMyMjcwMDQwRTY2QiAvKiBKU0NhbnZhc051bWJlckFy
cmF5LmggaW4gSGVhZGVycyAqLywKKwkJCQk0OTRCNzQzNDBGRjUzMjI3MDA0MEU2NkIgLyogSlND
YW52YXNQcm9ncmFtLmggaW4gSGVhZGVycyAqLywKKwkJCQk0OTRCNzQzNjBGRjUzMjI3MDA0MEU2
NkIgLyogSlNDYW52YXNSZW5kZXJidWZmZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ5NEI3NDM4
MEZGNTMyMjcwMDQwRTY2QiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNDk0Qjc0M0EwRkY1MzIyNzAwNDBFNjZCIC8qIEpTQ2FudmFzU2hhZGVyLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk0OTRCNzQzQzBGRjUzMjI3MDA0MEU2NkIgLyogSlNDYW52YXNU
ZXh0dXJlLmggaW4gSGVhZGVycyAqLywKKwkJCQk0OTRCNzQ3ODBGRjU0Nzk0MDA0MEU2NkIgLyog
Q2FudmFzM0RMYXllci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDlCOEM0RDkxMDI4ODc5ODAwMDUy
QjYyIC8qIEdyYXBoaWNzQ29udGV4dDNELmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5P
bmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE3MTk4LDYgKzE3
Mzk4LDE2IEBACiAJCQkJNDE2MkE0NTIxMDExNDVBRTAwREZGM0VEIC8qIERlZGljYXRlZFdvcmtl
ckNvbnRleHQuaWRsIGluIFJlc291cmNlcyAqLywKIAkJCQkyRUNGN0FFMzEwMTYyQjU4MDA0MjdE
RTcgLyogRXJyb3JFdmVudC5pZGwgaW4gUmVzb3VyY2VzICovLAogCQkJCTdBNzRFQ0I3MTAxODM5
OUEwMEJGOTM5RSAvKiBJbnNwZWN0b3JCYWNrZW5kLmlkbCBpbiBSZXNvdXJjZXMgKi8sCisJCQkJ
NDk0QjczRUYwRkY1MkZGRjAwNDBFNjZCIC8qIENhbnZhc0J1ZmZlci5pZGwgaW4gUmVzb3VyY2Vz
ICovLAorCQkJCTQ5NEI3M0YyMEZGNTJGRkYwMDQwRTY2QiAvKiBDYW52YXNCeXRlQXJyYXkuaWRs
IGluIFJlc291cmNlcyAqLywKKwkJCQk0OTRCNzNGNTBGRjUyRkZGMDA0MEU2NkIgLyogQ2FudmFz
RnJhbWVidWZmZXIuaWRsIGluIFJlc291cmNlcyAqLywKKwkJCQk0OTRCNzNGODBGRjUyRkZGMDA0
MEU2NkIgLyogQ2FudmFzTnVtYmVyQXJyYXkuaWRsIGluIFJlc291cmNlcyAqLywKKwkJCQk0OTRC
NzNGRDBGRjUyRkZGMDA0MEU2NkIgLyogQ2FudmFzUHJvZ3JhbS5pZGwgaW4gUmVzb3VyY2VzICov
LAorCQkJCTQ5NEI3NDAwMEZGNTJGRkYwMDQwRTY2QiAvKiBDYW52YXNSZW5kZXJidWZmZXIuaWRs
IGluIFJlc291cmNlcyAqLywKKwkJCQk0OTRCNzQwMzBGRjUyRkZGMDA0MEU2NkIgLyogQ2FudmFz
UmVuZGVyaW5nQ29udGV4dC5pZGwgaW4gUmVzb3VyY2VzICovLAorCQkJCTQ5NEI3NDA2MEZGNTJG
RkYwMDQwRTY2QiAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuaWRsIGluIFJlc291cmNlcyAq
LywKKwkJCQk0OTRCNzQwOTBGRjUyRkZGMDA0MEU2NkIgLyogQ2FudmFzU2hhZGVyLmlkbCBpbiBS
ZXNvdXJjZXMgKi8sCisJCQkJNDk0Qjc0MEMwRkY1MkZGRjAwNDBFNjZCIC8qIENhbnZhc1RleHR1
cmUuaWRsIGluIFJlc291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBv
c3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE5MTI5LDYgKzE5MzM5LDMyIEBACiAJCQkJNDFB
M0Q1OEUxMDFDMTUyRDAwMzE2RDA3IC8qIERlZGljYXRlZFdvcmtlclRocmVhZC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk3QTI0NTg3QjEwMjFFQUY0MDAwQTAwQUEgLyogSW5zcGVjdG9yRE9NQWdl
bnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDcwOUZDNEMxMDI1REVEODAwNTlDREJBIC8qIEFj
Y2Vzc2liaWxpdHlTbGlkZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDk0QjczQ0MwRkY1MkZD
RTAwNDBFNjZCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEQ3VzdG9tLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTQ5NEI3M0VEMEZGNTJGRkYwMDQwRTY2QiAvKiBDYW52YXNCdWZmZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJNDk0QjczRjAwRkY1MkZGRjAwNDBFNjZCIC8qIENhbnZhc0J5
dGVBcnJheS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0OTRCNzNGMzBGRjUyRkZGMDA0MEU2NkIg
LyogQ2FudmFzRnJhbWVidWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDk0QjczRjYwRkY1
MkZGRjAwNDBFNjZCIC8qIENhbnZhc051bWJlckFycmF5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTQ5NEI3M0Y5MEZGNTJGRkYwMDQwRTY2QiAvKiBDYW52YXNPYmplY3QuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJNDk0QjczRkIwRkY1MkZGRjAwNDBFNjZCIC8qIENhbnZhc1Byb2dyYW0uY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJNDk0QjczRkUwRkY1MkZGRjAwNDBFNjZCIC8qIENhbnZhc1JlbmRl
cmJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0OTRCNzQwMTBGRjUyRkZGMDA0MEU2NkIg
LyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0OTRCNzQw
NDBGRjUyRkZGMDA0MEU2NkIgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTQ5NEI3NDA3MEZGNTJGRkYwMDQwRTY2QiAvKiBDYW52YXNTaGFkZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJNDk0Qjc0MEEwRkY1MkZGRjAwNDBFNjZCIC8qIENhbnZhc1Rl
eHR1cmUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDk0Qjc0MkIwRkY1MzIyNzAwNDBFNjZCIC8q
IEpTQ2FudmFzQnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQ5NEI3NDJEMEZGNTMyMjcw
MDQwRTY2QiAvKiBKU0NhbnZhc0J5dGVBcnJheS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0OTRC
NzQyRjBGRjUzMjI3MDA0MEU2NkIgLyogSlNDYW52YXNGcmFtZWJ1ZmZlci5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQk0OTRCNzQzMTBGRjUzMjI3MDA0MEU2NkIgLyogSlNDYW52YXNOdW1iZXJBcnJh
eS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0OTRCNzQzMzBGRjUzMjI3MDA0MEU2NkIgLyogSlND
YW52YXNQcm9ncmFtLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQ5NEI3NDM1MEZGNTMyMjcwMDQw
RTY2QiAvKiBKU0NhbnZhc1JlbmRlcmJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0OTRC
NzQzNzBGRjUzMjI3MDA0MEU2NkIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJNDk0Qjc0MzkwRkY1MzIyNzAwNDBFNjZCIC8qIEpTQ2FudmFzU2hh
ZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQ5NEI3NDNCMEZGNTMyMjcwMDQwRTY2QiAvKiBK
U0NhbnZhc1RleHR1cmUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDk0Qjc0NDcwRkY1MzJDOTAw
NDBFNjZCIC8qIEpTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJNDk0Qjc0NzkwRkY1NDc5NDAwNDBFNjZCIC8qIENhbnZhczNETGF5ZXIubW0gaW4gU291cmNl
cyAqLywKKwkJCQk0OUE3MzE4MjBGRjU0QjcyMDBGMDYxMzQgLyogSlNDYW52YXNOdW1iZXJBcnJh
eUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0OUI4QzREODEwMjg4Nzk4MDAwNTJCNjIg
LyogR3JhcGhpY3NDb250ZXh0M0QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDlCOEM0RTExMDI4
OEI5MDAwMDUyQjYyIC8qIEdyYXBoaWNzQ29udGV4dDNETWFjLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9Owo=
</data>
<flag name="review"
          id="18309"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34151</attachid>
            <date>2009-08-05 11:03:43 -0700</date>
            <delta_ts>2009-08-27 06:39:39 -0700</delta_ts>
            <desc>Patch 4 of 4: Connect everything up</desc>
            <filename>webgl-4.patch</filename>
            <type>text/plain</type>
            <size>31650</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NjgwNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDA3IEBACisyMDA5LTA4LTA1ICBDaHJpcyBNYXJyaW4gIDxjbWFycmluQGFwcGxl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBD
b25uZWN0IGV2ZXJ5dGhpbmcgdXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTI4MDE4CisKKyAgICAgICAgQ2hhbmdlcyB0byBDYW52YXNFbGVtZW50LCBH
cmFwaGljc0xheWVyLCB0aGUgc3R5bGUgbG9naWMgYW5kCisgICAgICAgIHJlbmRlcmluZyBsb2dp
YyBmb3IgQ2FudmFzIDNELgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3Rv
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RvY3VtZW50OjpnZXRDU1NDYW52YXNDb250ZXh0
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxDYW52YXNFbGVtZW50OjpnZXRDb250ZXh0
KToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnQ6OmdldENTU0NhbnZhc0NvbnRleHQpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAg
ICAgICAqIGRvbS9Eb2N1bWVudC5pZGw6CisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RWxlbWVudDo6cmVjYWxjU3R5bGUpOgorICAgICAgICAqIGh0bWwvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKToKKyAgICAgICAgKiBodG1s
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjppczJkKToKKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpnZXRDb250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50Ojp3aWxsRHJhdyk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTENhbnZhc0VsZW1lbnQ6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNF
bGVtZW50OjppczNEKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50Ojpjb250
ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnRleHR1cmUzRCk6
CisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRN
TENhbnZhc0VsZW1lbnQuaWRsOgorICAgICAgICAqIHBhZ2UvRE9NV2luZG93LmlkbDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXI6OkdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllcjo6ZHVtcFByb3BlcnRpZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzTGF5ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OnNldENv
bnRlbnRzVG9DYW52YXMzRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpyZWRy
YXdDYW52YXMzRCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzTGF5
ZXJDQS5oOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjopOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0xheWVyQ0EubW06CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0xheWVyQ0E6OmNvbW1pdExheWVyQ2hhbmdlcyk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUNvbnRlbnRzQ2FudmFzM0QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjpzZXRDb250ZW50c1RvQ2FudmFzM0QpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6c2V0SGFzM0RMYXllcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0xheWVyQ0E6OnJlZHJhd0NhbnZhczNEKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1v
ZGVsT2JqZWN0OjpyZXF1aXJlc0xheWVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySFRN
TENhbnZhcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJIVE1MQ2FudmFzOjppc0NhbnZh
czNEKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySFRNTENhbnZhcy5oOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHcmFwaGljc0xheWVyQ29uZmlndXJhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OmNhblVzZURpcmVjdENvbXBvc2l0aW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6cmVuZGVyZXJDb250ZW50
Q2hhbmdlZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5oOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nTGF5ZXIpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlck9iamVjdDo6aXNDYW52YXMzRCk6CisKIDIwMDktMDgtMDUgIEFuZHJhcyBCZWNzaSAgPGJl
Y3NpLmFuZHJhc0BzdHVkLnUtc3plZ2VkLmh1PgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9u
IEhhdXNtYW5uLgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3Bw
CShyZXZpc2lvbiA0NjgwMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDEwIEBACiAjaW5jbHVkZSAiRnJhbWUu
aCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgor
I2luY2x1ZGUgIkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgiCisjaWYgRU5BQkxFKDNEX0NB
TlZBUykKKyNpbmNsdWRlICJKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5oIgorI2VuZGlmCiAj
aW5jbHVkZSAiSlNET01XaW5kb3dDdXN0b20uaCIKICNpbmNsdWRlICJKU0hUTUxEb2N1bWVudC5o
IgogI2luY2x1ZGUgIkpTTG9jYXRpb24uaCIKQEAgLTM3LDYgKzQxLDggQEAKIAogdXNpbmcgbmFt
ZXNwYWNlIEpTQzsKIAorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKwogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiB2b2lkIEpTRG9jdW1lbnQ6Om1hcmsoKQpAQCAtMTEwLDQgKzExNiwyMyBAQCBKU1Zh
bHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhCiAgICAgcmV0dXJuIHdyYXBwZXI7
CiB9CiAKK0pTVmFsdWUgSlNEb2N1bWVudDo6Z2V0Q1NTQ2FudmFzQ29udGV4dChKU0M6OkV4ZWNT
dGF0ZSogZXhlYywgSlNDOjpBcmdMaXN0IGNvbnN0JiBhcmdzKQoreworICAgIGNvbnN0IFVTdHJp
bmcmIGNvbnRleHRJZCA9IGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyk7CisgICAgY29uc3QgVVN0
cmluZyYgbmFtZSA9IGFyZ3MuYXQoMSkudG9TdHJpbmcoZXhlYyk7CisgICAgaW50IHdpZHRoID0g
YXJncy5hdCgyKS50b0ludDMyKGV4ZWMpOworICAgIGludCBoZWlnaHQgPSBhcmdzLmF0KDMpLnRv
SW50MzIoZXhlYyk7CisKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7CisgICAg
CisgICAgaWYgKGNvbnRleHRJZCA9PSAiMmQiKQorICAgICAgICByZXN1bHQgPSB0b0pTKGV4ZWMs
IFdURjo6Z2V0UHRyKHJlaW50ZXJwcmV0X2Nhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKj4o
aW1wbCgpLT5nZXRDU1NDYW52YXNDb250ZXh0KGNvbnRleHRJZCwgbmFtZSwgd2lkdGgsIGhlaWdo
dCkpKSk7CisjaWYgRU5BQkxFKDNEX0NBTlZBUykKKyAgICBlbHNlIGlmIChjb250ZXh0SWQgPT0g
IndlYmtpdC0zZCIpCisgICAgICAgIHJlc3VsdCA9IHRvSlMoZXhlYywgV1RGOjpnZXRQdHIocmVp
bnRlcnByZXRfY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QqPihpbXBsKCktPmdldENTU0Nh
bnZhc0NvbnRleHQoY29udGV4dElkLCBuYW1lLCB3aWR0aCwgaGVpZ2h0KSkpKTsKKyNlbmRpZgor
ICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9t
LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxl
bWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKKyNpbmNs
dWRlICJKU0hUTUxDYW52YXNFbGVtZW50LmgiCisjaW5jbHVkZSAiSlNDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQuaCIKKyNpbmNsdWRlICJKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5oIgorCisj
aW5jbHVkZSA8d3RmL0dldFB0ci5oPgorCit1c2luZyBuYW1lc3BhY2UgSlNDOworCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK0pTVmFsdWUgSlNIVE1MQ2FudmFzRWxlbWVudDo6Z2V0Q29udGV4dChK
U0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpBcmdMaXN0IGNvbnN0JiBhcmdzKQoreworICAgIEhU
TUxDYW52YXNFbGVtZW50KiBpbXAgPSBzdGF0aWNfY2FzdDxIVE1MQ2FudmFzRWxlbWVudCo+KGlt
cGwoKSk7CisgICAgY29uc3QgVVN0cmluZyYgY29udGV4dElkID0gYXJncy5hdCgwKS50b1N0cmlu
ZyhleGVjKTsKKworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNVbmRlZmluZWQoKTsKKyAgICAKKyAg
ICBpZiAoY29udGV4dElkID09ICIyZCIpCisgICAgICAgIHJlc3VsdCA9IHRvSlMoZXhlYywgV1RG
OjpnZXRQdHIocmVpbnRlcnByZXRfY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqPihpbXAt
PmdldENvbnRleHQoY29udGV4dElkKSkpKTsKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorICAgIGVs
c2UgaWYgKGNvbnRleHRJZCA9PSAid2Via2l0LTNkIikKKyAgICAgICAgcmVzdWx0ID0gdG9KUyhl
eGVjLCBXVEY6OmdldFB0cihyZWludGVycHJldF9jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RCo+KGltcC0+Z2V0Q29udGV4dChjb250ZXh0SWQpKSkpOworI2VuZGlmCisgICAgCisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9k
b20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAko
cmV2aXNpb24gNDY4MDApCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQzMjYsNyArNDMyNiw3IEBAIHZvaWQgRG9jdW1lbnQ6OmRldGFjaFJhbmdlKFJhbmdl
KiByYW5nZSkKICAgICBtX3Jhbmdlcy5yZW1vdmUocmFuZ2UpOwogfQogCi1DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQqIERvY3VtZW50OjpnZXRDU1NDYW52YXNDb250ZXh0KGNvbnN0IFN0cmluZyYg
dHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCitDYW52YXNS
ZW5kZXJpbmdDb250ZXh0KiBEb2N1bWVudDo6Z2V0Q1NTQ2FudmFzQ29udGV4dChjb25zdCBTdHJp
bmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogewog
ICAgIEhUTUxDYW52YXNFbGVtZW50KiByZXN1bHQgPSBnZXRDU1NDYW52YXNFbGVtZW50KG5hbWUp
OwogICAgIGlmICghcmVzdWx0KQpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiA0NjgwMCkKKysrIFdlYkNv
cmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgIGNsYXNzIENEQVRBU2VjdGlvbjsKICAgICBjbGFzcyBDYWNoZWRD
U1NTdHlsZVNoZWV0OwogICAgIGNsYXNzIENhY2hlZFNjcmlwdDsKLSAgICBjbGFzcyBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ7CisgICAgY2xhc3MgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDsKICAg
ICBjbGFzcyBDaGFyYWN0ZXJEYXRhOwogICAgIGNsYXNzIENTU1N0eWxlRGVjbGFyYXRpb247CiAg
ICAgY2xhc3MgQ1NTU3R5bGVTZWxlY3RvcjsKQEAgLTc4Miw3ICs3ODIsNyBAQCBwdWJsaWM6CiAg
ICAgRE9NU2VsZWN0aW9uKiBnZXRTZWxlY3Rpb24oKSBjb25zdDsKICAgICAKICAgICAvLyBFeHRl
bnNpb24gZm9yIG1hbmlwdWxhdGluZyBjYW52YXMgZHJhd2luZyBjb250ZXh0cyBmb3IgdXNlIGlu
IENTUwotICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogZ2V0Q1NTQ2FudmFzQ29udGV4dChj
b25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSwgaW50IHdpZHRoLCBpbnQgaGVp
Z2h0KTsKKyAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBnZXRDU1NDYW52YXNDb250ZXh0KGNv
bnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBpbnQgd2lkdGgsIGludCBoZWln
aHQpOwogICAgIEhUTUxDYW52YXNFbGVtZW50KiBnZXRDU1NDYW52YXNFbGVtZW50KGNvbnN0IFN0
cmluZyYgbmFtZSk7CiAKICAgICBib29sIGlzRE5TUHJlZmV0Y2hFbmFibGVkKCkgY29uc3QgeyBy
ZXR1cm4gbV9pc0ROU1ByZWZldGNoRW5hYmxlZDsgfQpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1l
bnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmlkbAkocmV2aXNpb24g
NDY4MDApCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTIy
Niw3ICsyMjYsNyBAQCBtb2R1bGUgY29yZSB7CiAKICNpZiAhZGVmaW5lZChMQU5HVUFHRV9DT00p
IHx8ICFMQU5HVUFHRV9DT00KICNpZiAhZGVmaW5lZChMQU5HVUFHRV9PQkpFQ1RJVkVfQykgfHwg
IUxBTkdVQUdFX09CSkVDVElWRV9DCi0gICAgICAgIFtWOEN1c3RvbV0gRE9NT2JqZWN0IGdldENT
U0NhbnZhc0NvbnRleHQoaW4gRE9NU3RyaW5nIGNvbnRleHRJZCwgaW4gRE9NU3RyaW5nIG5hbWUs
IGluIGxvbmcgd2lkdGgsIGluIGxvbmcgaGVpZ2h0KTsKKyAgICAgICAgW0N1c3RvbSxWOEN1c3Rv
bV0gRE9NT2JqZWN0IGdldENTU0NhbnZhc0NvbnRleHQoaW4gRE9NU3RyaW5nIGNvbnRleHRJZCwg
aW4gRE9NU3RyaW5nIG5hbWUsIGluIGxvbmcgd2lkdGgsIGluIGxvbmcgaGVpZ2h0KTsKICNlbmRp
ZgogI2VuZGlmCiAKSW5kZXg6IFdlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lvbiA0NjgwMCkKKysrIFdlYkNvcmUvZG9t
L0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MjEsNiArODIxLDExIEBAIHZvaWQgRWxl
bWVudDo6cmVjYWxjU3R5bGUoU3R5bGVDaGFuZ2UgY2gKICAgICBpZiAoaGFzUGFyZW50U3R5bGUg
JiYgKGNoYW5nZSA+PSBJbmhlcml0IHx8IG5lZWRzU3R5bGVSZWNhbGMoKSkpIHsKICAgICAgICAg
UmVmUHRyPFJlbmRlclN0eWxlPiBuZXdTdHlsZSA9IGRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3Io
KS0+c3R5bGVGb3JFbGVtZW50KHRoaXMpOwogICAgICAgICBTdHlsZUNoYW5nZSBjaCA9IGRpZmYo
Y3VycmVudFN0eWxlLCBuZXdTdHlsZS5nZXQoKSk7CisKKyAgICAgICAgLy8gV2UgbmVlZCB0byBm
b3JjZSBhIHNldCBzdHlsZSBpZiB3ZSBoYXZlIGEgM0QgY2FudmFzIHdpdGhvdXQgYSBjb21wb3Np
dGluZyBsYXllcgorICAgICAgICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5pc0NhbnZh
czNEKCkgJiYgIXJlbmRlcmVyKCktPmhhc0xheWVyKCkpCisgICAgICAgICAgICBjaCA9IEZvcmNl
OworCiAgICAgICAgIGlmIChjaCA9PSBEZXRhY2ggfHwgIWN1cnJlbnRTdHlsZSkgewogICAgICAg
ICAgICAgaWYgKGF0dGFjaGVkKCkpCiAgICAgICAgICAgICAgICAgZGV0YWNoKCk7CkluZGV4OiBX
ZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkocmV2aXNpb24gNDY4MDAp
CisrKyBXZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTQsNyArOTQsNyBAQCBwcml2YXRlOgogCiAKIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMp
Ci0gICAgOiBtX2NhbnZhcyhjYW52YXMpCisgICAgOiBDYW52YXNSZW5kZXJpbmdDb250ZXh0KGNh
bnZhcykKICAgICAsIG1fc3RhdGVTdGFjaygxKQogewogICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGV2
ZW4gaWYgdGhlIGRyYXdpbmdDb250ZXh0KCkgaGFzIGEgZGlmZmVyZW50IGRlZmF1bHQKQEAgLTEw
MiwxNiArMTAyLDYgQEAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpDYW52YXNSZW5kZXJpbgog
ICAgIHNldExpbmVXaWR0aChsaW5lV2lkdGgoKSk7CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjpyZWYoKQotewotICAgIG1fY2FudmFzLT5yZWYoKTsKLX0KLQotdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRlcmVmKCkKLXsKLSAgICBtX2NhbnZhcy0+ZGVyZWYoKTsg
Ci19Ci0KIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpyZXNldCgpCiB7CiAgICAgbV9z
dGF0ZVN0YWNrLnJlc2l6ZSgxKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmgJKHJldmlzaW9uIDQ2ODAwKQorKysgV2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRF9oCiAjZGVmaW5lIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RF9oCiAKKyNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiVHJh
bnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlICJGbG9hdFNpemUuaCIKICNpbmNsdWRlICJG
b250LmgiCkBAIC01NCwxNCArNTUsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgdHlw
ZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIAotICAgIGNsYXNzIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRCA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CisgICAgY2xhc3MgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEIDogcHVibGljIENhbnZhc1JlbmRlcmluZ0NvbnRleHQgewogICAgIHB1YmxpYzoKICAg
ICAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKEhUTUxDYW52YXNFbGVtZW50Kik7CiAgICAg
ICAgIAotICAgICAgICB2b2lkIHJlZigpOwotICAgICAgICB2b2lkIGRlcmVmKCk7Ci0gICAgICAg
IAotICAgICAgICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzKCkgY29uc3QgeyByZXR1cm4gbV9j
YW52YXM7IH0KKyAgICAgICAgdmlydHVhbCBib29sIGlzMmQoKSB7IHJldHVybiB0cnVlOyB9CiAK
ICAgICAgICAgQ2FudmFzU3R5bGUqIHN0cm9rZVN0eWxlKCkgY29uc3Q7CiAgICAgICAgIHZvaWQg
c2V0U3Ryb2tlU3R5bGUoUGFzc1JlZlB0cjxDYW52YXNTdHlsZT4pOwpAQCAtMjYyLDcgKzI2MCw2
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBjaGVja09yaWdpbihjb25zdCBL
VVJMJik7CiAgICAgICAgIHZvaWQgY2hlY2tPcmlnaW4oY29uc3QgU3RyaW5nJik7CiAKLSAgICAg
ICAgSFRNTENhbnZhc0VsZW1lbnQqIG1fY2FudmFzOwogICAgICAgICBWZWN0b3I8U3RhdGUsIDE+
IG1fc3RhdGVTdGFjazsKICAgICB9OwogCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTENhbnZhc0Vs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5j
cHAJKHJldmlzaW9uIDQ2ODAwKQorKysgV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkNhbnZhc0dyYWRp
ZW50LmgiCiAjaW5jbHVkZSAiQ2FudmFzUGF0dGVybi5oIgogI2luY2x1ZGUgIkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRC5oIgorI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5oIgog
I2luY2x1ZGUgIkNhbnZhc1N0eWxlLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKQEAgLTE0NywxNiArMTQ4LDMxIEBAIFN0cmluZyBIVE1MQ2FudmFzRWxlbWVu
dDo6dG9EYXRhVVJMKGNvbnMKIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIEhUTUxDYW52YXNFbGVt
ZW50OjpnZXRDb250ZXh0KGNvbnN0IFN0cmluZyYgdHlwZSkKIHsKICAgICBpZiAodHlwZSA9PSAi
MmQiKSB7Ci0gICAgICAgIGlmICghbV8yRENvbnRleHQpCi0gICAgICAgICAgICBtXzJEQ29udGV4
dC5zZXQobmV3IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCh0aGlzKSk7Ci0gICAgICAgIHJldHVy
biBtXzJEQ29udGV4dC5nZXQoKTsKKyAgICAgICAgaWYgKG1fY29udGV4dCAmJiAhbV9jb250ZXh0
LT5pczJkKCkpCisgICAgICAgICAgICBtX2NvbnRleHQuY2xlYXIoKTsKKyAgICAgICAgaWYgKCFt
X2NvbnRleHQpCisgICAgICAgICAgICBtX2NvbnRleHQuc2V0KG5ldyBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQodGhpcykpOwogICAgIH0KLSAgICByZXR1cm4gMDsKKyNpZiBFTkFCTEUoM0RfQ0FO
VkFTKSAgICAKKyAgICBlbHNlIGlmICh0eXBlID09ICJ3ZWJraXQtM2QiKSB7CisgICAgICAgIGlm
IChtX2NvbnRleHQgJiYgIW1fY29udGV4dC0+aXMzZCgpKQorICAgICAgICAgICAgbV9jb250ZXh0
LmNsZWFyKCk7CisgICAgICAgIGlmICghbV9jb250ZXh0KSB7CisgICAgICAgICAgICBtX2NvbnRl
eHQuc2V0KG5ldyBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QodGhpcykpOworICAgICAgICAgICAg
c2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisgICAgZWxz
ZSBpZiAobV9jb250ZXh0LmdldCgpKQorICAgICAgICBtX2NvbnRleHQuY2xlYXIoKTsKKyAgICAK
KyAgICByZXR1cm4gbV9jb250ZXh0LmdldCgpOwogfQogCiB2b2lkIEhUTUxDYW52YXNFbGVtZW50
Ojp3aWxsRHJhdyhjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgbV9pbWFnZUJ1ZmZlci0+
Y2xlYXJJbWFnZSgpOworICAgIGlmIChtX2ltYWdlQnVmZmVyKQorICAgICAgICBtX2ltYWdlQnVm
ZmVyLT5jbGVhckltYWdlKCk7CiAgICAgCiAgICAgaWYgKFJlbmRlckJveCogcm8gPSByZW5kZXJC
b3goKSkgewogICAgICAgICBGbG9hdFJlY3QgZGVzdFJlY3QgPSByby0+Y29udGVudEJveFJlY3Qo
KTsKQEAgLTE5Miw4ICsyMDgsOCBAQCB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpyZXNldCgpCiAg
ICAgYm9vbCBoYWRJbWFnZUJ1ZmZlciA9IG1fY3JlYXRlZEltYWdlQnVmZmVyOwogICAgIG1fY3Jl
YXRlZEltYWdlQnVmZmVyID0gZmFsc2U7CiAgICAgbV9pbWFnZUJ1ZmZlci5jbGVhcigpOwotICAg
IGlmIChtXzJEQ29udGV4dCkKLSAgICAgICAgbV8yRENvbnRleHQtPnJlc2V0KCk7CisgICAgaWYg
KG1fY29udGV4dCAmJiBtX2NvbnRleHQtPmlzMmQoKSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEKj4obV9jb250ZXh0LmdldCgpKS0+cmVzZXQoKTsKIAogICAg
IGlmIChSZW5kZXJPYmplY3QqIHJvID0gcmVuZGVyZXIoKSkKICAgICAgICAgaWYgKG1fcmVuZGVy
ZXJJc0NhbnZhcykgewpAQCAtMjIwLDYgKzIzNiwxMSBAQCB2b2lkIEhUTUxDYW52YXNFbGVtZW50
OjpwYWludChHcmFwaGljc0NvCiAgICAgICAgIGlmIChpbWFnZSkKICAgICAgICAgICAgIGNvbnRl
eHQtPmRyYXdJbWFnZShpbWFnZSwgcik7CiAgICAgfQorICAgIAorI2lmIEVOQUJMRSgzRF9DQU5W
QVMpICAgIAorICAgIGlmIChtX2NvbnRleHQgJiYgbV9jb250ZXh0LT5pczNkKCkpCisgICAgICAg
IHN0YXRpY19jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCo+KG1fY29udGV4dC5nZXQoKSkt
PnJlc2hhcGUoci53aWR0aCgpLCByLmhlaWdodCgpKTsKKyNlbmRpZgogfQogCiBJbnRSZWN0IEhU
TUxDYW52YXNFbGVtZW50Ojpjb252ZXJ0TG9naWNhbFRvRGV2aWNlKGNvbnN0IEZsb2F0UmVjdCYg
bG9naWNhbFJlY3QpIGNvbnN0CkBAIC0yOTIsNCArMzEzLDI2IEBAIFRyYW5zZm9ybWF0aW9uTWF0
cml4IEhUTUxDYW52YXNFbGVtZW50OjoKICAgICByZXR1cm4gdHJhbnNmb3JtOwogfQogCitib29s
IEhUTUxDYW52YXNFbGVtZW50OjppczNEKCkgY29uc3QKK3sKKyAgICBDYW52YXNSZW5kZXJpbmdD
b250ZXh0KiBjdHggPSBtX2NvbnRleHQuZ2V0KCk7CisgICAgcmV0dXJuIGN0eCAmJiAhY3R4LT5p
czJkKCk7Cit9CisKK1BsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgSFRNTENhbnZhc0VsZW1lbnQ6
OmNvbnRleHQzRCgpIGNvbnN0Cit7CisgICAgaWYgKG1fY29udGV4dCAmJiBtX2NvbnRleHQtPmlz
M2QoKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RCo+KG1fY29udGV4dC5nZXQoKSktPmNvbnRleHQzRCgpOworICAgIGVsc2UKKyAgICAgICAgcmV0
dXJuIDA7Cit9CisKK1BsYXRmb3JtM0RPYmplY3QgSFRNTENhbnZhc0VsZW1lbnQ6OnRleHR1cmUz
RCgpIGNvbnN0Cit7CisgICAgaWYgKG1fY29udGV4dCAmJiBtX2NvbnRleHQtPmlzM2QoKSkKKyAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCo+KG1fY29u
dGV4dC5nZXQoKSktPnRleHR1cmUzRCgpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIDA7Cit9
CisKIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCShyZXZpc2lvbiA0NjgwMCkKKysr
IFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwx
MSArMzEsMTEgQEAKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVu
dC5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOwot
dHlwZWRlZiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDsK
K2NsYXNzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQ7CiBjbGFzcyBGbG9hdFBvaW50OwogY2xhc3Mg
RmxvYXRSZWN0OwogY2xhc3MgRmxvYXRTaXplOwpAQCAtMTA4LDEzICsxMDgsMTggQEAgcHVibGlj
OgogICAgIHZvaWQgc2V0T2JzZXJ2ZXIoQ2FudmFzT2JzZXJ2ZXIqIG8pIHsgbV9vYnNlcnZlciA9
IG87IH0KIAogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGJhc2VUcmFuc2Zvcm0oKSBjb25zdDsK
KyAgICAKKyAgICBib29sIGlzM0QoKSBjb25zdDsKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dDNEIGNvbnRleHQzRCgpIGNvbnN0OworICAgIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZTNEKCkg
Y29uc3Q7CisgICAgCiBwcml2YXRlOgogICAgIHZvaWQgY3JlYXRlSW1hZ2VCdWZmZXIoKSBjb25z
dDsKICAgICB2b2lkIHJlc2V0KCk7CiAKICAgICBib29sIG1fcmVuZGVyZXJJc0NhbnZhczsKIAot
ICAgIE93blB0cjxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+IG1fMkRDb250ZXh0OworICAgIE93
blB0cjxDYW52YXNSZW5kZXJpbmdDb250ZXh0PiBtX2NvbnRleHQ7CiAgICAgSW50U2l6ZSBtX3Np
emU7ICAgIAogICAgIENhbnZhc09ic2VydmVyKiBtX29ic2VydmVyOwogCkluZGV4OiBXZWJDb3Jl
L2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9I
VE1MQ2FudmFzRWxlbWVudC5pZGwJKHJldmlzaW9uIDQ2ODAwKQorKysgV2ViQ29yZS9odG1sL0hU
TUxDYW52YXNFbGVtZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBtb2R1
bGUgaHRtbCB7CiAgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKIAogI2lmICFkZWZp
bmVkKExBTkdVQUdFX09CSkVDVElWRV9DKSB8fCAhTEFOR1VBR0VfT0JKRUNUSVZFX0MKLSAgICAg
ICAgW1Y4Q3VzdG9tXSBET01PYmplY3QgZ2V0Q29udGV4dChpbiBET01TdHJpbmcgY29udGV4dElk
KTsKKyAgICAgICAgW0N1c3RvbSxWOEN1c3RvbV0gRE9NT2JqZWN0IGdldENvbnRleHQoaW4gRE9N
U3RyaW5nIGNvbnRleHRJZCk7CiAjZW5kaWYKIAogICAgIH07CkluZGV4OiBXZWJDb3JlL3BhZ2Uv
RE9NV2luZG93LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAko
cmV2aXNpb24gNDY4MDApCisrKyBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAkod29ya2luZyBj
b3B5KQpAQCAtNDA2LDYgKzQwNiw3IEBAIG1vZHVsZSB3aW5kb3cgewogICAgICAgICBhdHRyaWJ1
dGUgW0N1c3RvbUdldHRlcl0gSFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3RvciBPcHRpb247IC8v
IFVzYWJsZSB3aXRoIG5ldyBvcGVyYXRvcgogCiAgICAgICAgIGF0dHJpYnV0ZSBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRDb25zdHJ1Y3RvciBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7CisgICAg
ICAgIGF0dHJpYnV0ZSBbQ29uZGl0aW9uYWw9M0RfQ0FOVkFTXSBDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0RDb25zdHJ1Y3RvciBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q7CiAgICAgICAgIGF0dHJp
YnV0ZSBUZXh0TWV0cmljc0NvbnN0cnVjdG9yIFRleHRNZXRyaWNzOwogCiAgICAgICAgIGF0dHJp
YnV0ZSBFdmVudENvbnN0cnVjdG9yIEV2ZW50OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0xheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCShyZXZpc2lvbiA0NjgwMCkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDYg
KzY5LDcgQEAgR3JhcGhpY3NMYXllcjo6R3JhcGhpY3NMYXllcihHcmFwaGljc0xheQogICAgICwg
bV91c2luZ1RpbGVkTGF5ZXIoZmFsc2UpCiAgICAgLCBtX21hc2tzVG9Cb3VuZHMoZmFsc2UpCiAg
ICAgLCBtX2RyYXdzQ29udGVudChmYWxzZSkKKyAgICAsIG1fM2QoZmFsc2UpCiAgICAgLCBtX3Bh
aW50aW5nUGhhc2UoR3JhcGhpY3NMYXllclBhaW50QWxsTWFzaykKICAgICAsIG1fZ2VvbWV0cnlP
cmllbnRhdGlvbihDb21wb3NpdGluZ0Nvb3JkaW5hdGVzVG9wRG93bikKICAgICAsIG1fY29udGVu
dHNPcmllbnRhdGlvbihDb21wb3NpdGluZ0Nvb3JkaW5hdGVzVG9wRG93bikKQEAgLTM5Miw2ICsz
OTMsOSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXI6OmR1bXBQcm9wZXJ0aWVzKFRleHRTCiAgICAgdHMg
PDwgIihkcmF3c0NvbnRlbnQgIiA8PCBtX2RyYXdzQ29udGVudCA8PCAiKVxuIjsKIAogICAgIHdy
aXRlSW5kZW50KHRzLCBpbmRlbnQgKyAxKTsKKyAgICB0cyA8PCAiKDNkICIgPDwgbV8zZCA8PCAi
KVxuIjsKKworICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQgKyAxKTsKICAgICB0cyA8PCAiKG1f
YmFja2ZhY2VWaXNpYmlsaXR5ICIgPDwgKG1fYmFja2ZhY2VWaXNpYmlsaXR5ID8gInZpc2libGUi
IDogImhpZGRlbiIpIDw8ICIpXG4iOwogCiAgICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCArIDEp
OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmgJKHJldmlz
aW9uIDQ2ODAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDEyICszMywyNSBAQAogI2luY2x1ZGUgIkZsb2F0UG9pbnQu
aCIKICNpbmNsdWRlICJGbG9hdFBvaW50M0QuaCIKICNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNp
ZiBFTkFCTEUoM0RfQ0FOVkFTKQorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjZW5k
aWYKICNpbmNsdWRlICJHcmFwaGljc0xheWVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5o
IgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSAiVHJhbnNmb3Jt
T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KIAorI2lmIGRlZmluZWQoV0lO
MzIpIHx8IGRlZmluZWQoX1dJTjMyKQorI2VuZGlmCisKKyNpZiBQTEFURk9STShNQUMpCisvLyNp
bmNsdWRlIDxPcGVuR0wvT3BlbkdMLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoV0lOMzIpIHx8
IGRlZmluZWQoX1dJTjMyKQorI2VuZGlmCisKICNpZiBQTEFURk9STShNQUMpCiAjaWZkZWYgX19P
QkpDX18KIEBjbGFzcyBXZWJMYXllcjsKQEAgLTQ3LDcgKzYwLDcgQEAgdHlwZWRlZiBDQUxheWVy
IFBsYXRmb3JtTGF5ZXI7CiB0eXBlZGVmIENBTGF5ZXIqIE5hdGl2ZUxheWVyOwogI2Vsc2UKIHR5
cGVkZWYgdm9pZCogUGxhdGZvcm1MYXllcjsKLXR5cGVkZWYgdm9pZCogTmF0aXZlTGF5ZXI7Cit0
eXBlZGVmIGludCBOYXRpdmVMYXllcjsKICNlbmRpZgogI2Vsc2UKIHR5cGVkZWYgdm9pZCogUGxh
dGZvcm1MYXllcjsKQEAgLTI1NCw2ICsyNjcsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29u
dGVudHNUb1ZpZGVvKFBsYXRmb3JtTGF5ZXIqKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29u
dGVudHNCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImKSB7IH0KKyNpZiBFTkFCTEUoM0RfQ0FO
VkFTKQorICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvQ2FudmFzM0QoUGxhdGZvcm1MYXll
ciopIHsgfQorICAgIHZpcnR1YWwgdm9pZCByZWRyYXdDYW52YXMzRCgpIHsgfQorI2VuZGlmCiAg
ICAgCiAgICAgLy8gQ2FsbGJhY2sgZnJvbSB0aGUgdW5kZXJseWluZyBncmFwaGljcyBzeXN0ZW0g
dG8gZHJhdyBsYXllciBjb250ZW50cy4KICAgICB2b2lkIHBhaW50R3JhcGhpY3NMYXllckNvbnRl
bnRzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmIGNsaXApOwpAQCAtMzAwLDYgKzMx
NywxMCBAQCBwdWJsaWM6CiAgICAgLy8gd2l0aCB1cGRhdGVzIGRyYXduIGludG8gdGhlIHdpbmRv
dy4gVGhpcyBpcyBhIHNpZ25hbCB0byBmbHVzaCBhbnkgaW50ZXJuYWwgYmF0Y2hlZCBzdGF0ZS4K
ICAgICB2aXJ0dWFsIHZvaWQgc3luY0NvbXBvc2l0aW5nU3RhdGUoKSB7IH0KIAorI2lmIEVOQUJM
RSgzRF9DQU5WQVMpCisgICAgdm9pZCBzZXRIYXMzRExheWVyKGJvb2wgaGFzM0RMYXllciwgUGxh
dGZvcm1HcmFwaGljc0NvbnRleHQzRCBjb250ZXh0LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUp
OworI2VuZGlmCisKIHByb3RlY3RlZDoKIAogICAgIHR5cGVkZWYgVmVjdG9yPFRyYW5zZm9ybU9w
ZXJhdGlvbjo6T3BlcmF0aW9uVHlwZT4gVHJhbnNmb3JtT3BlcmF0aW9uTGlzdDsKQEAgLTMzOSw2
ICszNjAsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBtX3VzaW5nVGlsZWRMYXllciA6IDE7CiAg
ICAgYm9vbCBtX21hc2tzVG9Cb3VuZHMgOiAxOwogICAgIGJvb2wgbV9kcmF3c0NvbnRlbnQgOiAx
OworI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisgICAgYm9vbCBtXzNkIDogMTsKKyNlbmRpZiAKIAog
ICAgIEdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlIG1fcGFpbnRpbmdQaGFzZTsKICAgICBDb21w
b3NpdGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRpb24gbV9nZW9tZXRyeU9yaWVudGF0aW9uOyAgICAv
LyBhZmZlY3RzIGdlb21ldHJ5IG9mIGxheWVyIHBvc2l0aW9ucwpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NMYXllckNBLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NMYXllckNBLmgJKHJldmlzaW9uIDQ2ODAw
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NMYXllckNBLmgJKHdv
cmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDEwIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9p
ZCBzZXROZWVkc0Rpc3BsYXkoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5S
ZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwotCisjaWYgRU5BQkxFKDNEX0NBTlZBUykKKyAgICB2aXJ0
dWFsIHZvaWQgcmVkcmF3Q2FudmFzM0QoKTsKKyNlbmRpZgorICAgIAogICAgIHZpcnR1YWwgdm9p
ZCBzZXRDb250ZW50c1JlY3QoY29uc3QgSW50UmVjdCYpOwogICAgIAogICAgIHZpcnR1YWwgdm9p
ZCBzdXNwZW5kQW5pbWF0aW9ucyhkb3VibGUgdGltZSk7CkBAIC05OCw2ICsxMDEsOSBAQCBwdWJs
aWM6CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9JbWFnZShJbWFnZSopOwog
ICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvVmlkZW8oUGxhdGZvcm1MYXllciopOworI2lm
IEVOQUJMRSgzRF9DQU5WQVMpCisgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9DYW52YXMz
RChQbGF0Zm9ybUxheWVyKik7CisjZW5kaWYKICAgICAKICAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5
ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKIApAQCAtMTcwLDYgKzE3Niw5IEBAIHByaXZhdGU6
CiAKICAgICB2b2lkIHVwZGF0ZUNvbnRlbnRzSW1hZ2UoKTsKICAgICB2b2lkIHVwZGF0ZUNvbnRl
bnRzVmlkZW8oKTsKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorICAgIHZvaWQgdXBkYXRlQ29udGVu
dHNDYW52YXMzRCgpOworI2VuZGlmCiAgICAgdm9pZCB1cGRhdGVDb250ZW50c1JlY3QoKTsKICAg
ICB2b2lkIHVwZGF0ZUdlb21ldHJ5T3JpZW50YXRpb24oKTsKIApAQCAtMTk5LDggKzIwOCwxMSBA
QCBwcml2YXRlOgogICAgICAgICBEaXJ0eVJlY3RzQ2hhbmdlZCA9IDEgPDwgMTYsCiAgICAgICAg
IENvbnRlbnRzSW1hZ2VDaGFuZ2VkID0gMSA8PCAxNywKICAgICAgICAgQ29udGVudHNWaWRlb0No
YW5nZWQgPSAxIDw8IDE4LAotICAgICAgICBDb250ZW50c1JlY3RDaGFuZ2VkID0gMSA8PCAxOSwK
LSAgICAgICAgR2VvbWV0cnlPcmllbnRhdGlvbkNoYW5nZWQgPSAxIDw8IDIwCisjaWYgRU5BQkxF
KDNEX0NBTlZBUykKKyAgICAgICAgQ29udGVudHNDYW52YXMzRENoYW5nZWQgPSAxIDw8IDE5LAor
I2VuZGlmCisgICAgICAgIENvbnRlbnRzUmVjdENoYW5nZWQgPSAxIDw8IDIwLAorICAgICAgICBH
ZW9tZXRyeU9yaWVudGF0aW9uQ2hhbmdlZCA9IDEgPDwgMjEKICAgICB9OwogICAgIHR5cGVkZWYg
dW5zaWduZWQgTGF5ZXJDaGFuZ2VGbGFnczsKICAgICB2b2lkIG5vdGVMYXllclByb3BlcnR5Q2hh
bmdlZChMYXllckNoYW5nZUZsYWdzIGZsYWdzKTsKQEAgLTIxNSw2ICsyMjcsOSBAQCBwcml2YXRl
OgogICAgICAgICBOb0NvbnRlbnRzTGF5ZXIgPSAwLAogICAgICAgICBDb250ZW50c0xheWVyRm9y
SW1hZ2UsCiAgICAgICAgIENvbnRlbnRzTGF5ZXJGb3JWaWRlbworI2lmIEVOQUJMRSgzRF9DQU5W
QVMpCisgICAgICAgICxDb250ZW50c0xheWVyRm9yQ2FudmFzM0QKKyNlbmRpZgogICAgIH07CiAg
ICAgCiAgICAgQ29udGVudHNMYXllclB1cnBvc2UgbV9jb250ZW50c0xheWVyUHVycG9zZTsKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzTGF5ZXJDQS5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0xheWVyQ0Eu
bW0JKHJldmlzaW9uIDQ2ODAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3Jh
cGhpY3NMYXllckNBLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAKICNpbXBv
cnQgIkFuaW1hdGlvbi5oIgogI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgiCisjaW1wb3J0ICJD
YW52YXMzRExheWVyLmgiCiAjaW1wb3J0ICJDU3RyaW5nLmgiCiAjaW1wb3J0ICJGbG9hdENvbnZl
cnNpb24uaCIKICNpbXBvcnQgIkZsb2F0UmVjdC5oIgpAQCAtNzYzLDcgKzc2NCwxMiBAQCB2b2lk
IEdyYXBoaWNzTGF5ZXJDQTo6Y29tbWl0TGF5ZXJDaGFuZ2VzCiAgICAgICAgIAogICAgIGlmICht
X3VuY29tbWl0dGVkQ2hhbmdlcyAmIENvbnRlbnRzVmlkZW9DaGFuZ2VkKSAvLyBOZWVkcyB0byBo
YXBwZW4gYmVmb3JlIENoaWxkcmVuQ2hhbmdlZAogICAgICAgICB1cGRhdGVDb250ZW50c1ZpZGVv
KCk7Ci0KKyAgICAKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorICAgIGlmIChtX3VuY29tbWl0dGVk
Q2hhbmdlcyAmIENvbnRlbnRzQ2FudmFzM0RDaGFuZ2VkKSAvLyBOZWVkcyB0byBoYXBwZW4gYmVm
b3JlIENoaWxkcmVuQ2hhbmdlZAorICAgICAgICB1cGRhdGVDb250ZW50c0NhbnZhczNEKCk7Cisj
ZW5kaWYKKyAgICAKICAgICBpZiAobV91bmNvbW1pdHRlZENoYW5nZXMgJiBCYWNrZ3JvdW5kQ29s
b3JDaGFuZ2VkKSAgLy8gTmVlZHMgdG8gaGFwcGVuIGJlZm9yZSBDaGlsZHJlbkNoYW5nZWQsIGFu
ZCBhZnRlciB1cGRhdGluZyBpbWFnZSBvciB2aWRlbwogICAgICAgICB1cGRhdGVMYXllckJhY2tn
cm91bmRDb2xvcigpOwogCkBAIC0xMDYxLDYgKzEwNjcsMTggQEAgdm9pZCBHcmFwaGljc0xheWVy
Q0E6OnVwZGF0ZUNvbnRlbnRzVmlkZQogICAgIH0KIH0KIAorI2lmIEVOQUJMRSgzRF9DQU5WQVMp
Cit2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlQ29udGVudHNDYW52YXMzRCgpCit7CisgICAg
Ly8gQ2FudmFzM0QgbGF5ZXIgd2FzIHNldCBhcyBtX2NvbnRlbnRzTGF5ZXIsIGFuZCB3aWxsIGdl
dCBwYXJlbnRlZCBpbiB1cGRhdGVTdWJsYXllckxpc3QoKS4KKyAgICBpZiAobV9jb250ZW50c0xh
eWVyKSB7CisgICAgICAgIHNldHVwQ29udGVudHNMYXllcihtX2NvbnRlbnRzTGF5ZXIuZ2V0KCkp
OworICAgICAgICB1cGRhdGVDb250ZW50c1JlY3QoKTsKKyAgICB9Cit9CisgICAgCisjZW5kaWYK
KyAgICAKIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50c1JlY3QoKQogewogICAg
IGlmICghbV9jb250ZW50c0xheWVyKQpAQCAtMTI0Nyw2ICsxMjY1LDIyIEBAIHZvaWQgR3JhcGhp
Y3NMYXllckNBOjpwYXVzZUFuaW1hdGlvbk9uTGEKICAgICBbbGF5ZXIgYWRkQW5pbWF0aW9uOnBh
dXNlZEFuaW0gZm9yS2V5OmFuaW1hdGlvbk5hbWVdOyAgLy8gVGhpcyB3aWxsIHJlcGxhY2UgdGhl
IHJ1bm5pbmcgYW5pbWF0aW9uLgogfQogCisjaWYgRU5BQkxFKDNEX0NBTlZBUykKK3ZvaWQgR3Jh
cGhpY3NMYXllckNBOjpzZXRDb250ZW50c1RvQ2FudmFzM0QoUGxhdGZvcm1MYXllciogbGF5ZXIp
Cit7CisKKyAgICAKKyAgICAKKyAgICBpZiAobGF5ZXIgIT0gbV9jb250ZW50c0xheWVyLmdldCgp
KQorICAgICAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoQ2hpbGRyZW5DaGFuZ2VkKTsKKyAg
ICAKKyAgICBtX2NvbnRlbnRzTGF5ZXIgPSBsYXllcjsKKyAgICBub3RlTGF5ZXJQcm9wZXJ0eUNo
YW5nZWQoQ29udGVudHNDYW52YXMzRENoYW5nZWQpOworICAgIAorICAgIG1fY29udGVudHNMYXll
clB1cnBvc2UgPSBsYXllciA/IENvbnRlbnRzTGF5ZXJGb3JDYW52YXMzRCA6IE5vQ29udGVudHNM
YXllcjsKK30KKyNlbmRpZgorICAgIAogdm9pZCBHcmFwaGljc0xheWVyQ0E6OnJlcGFpbnRMYXll
ckRpcnR5UmVjdHMoKQogewogICAgIGlmICghbV9kaXJ0eVJlY3RzLnNpemUoKSkKQEAgLTE3NjUs
NiArMTc5OSwzNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6bm90ZUxheWVyUHJvcGVydHlDCiAg
ICAgbV91bmNvbW1pdHRlZENoYW5nZXMgfD0gZmxhZ3M7CiB9CiAKKyNpZiBFTkFCTEUoM0RfQ0FO
VkFTKQordm9pZCBHcmFwaGljc0xheWVyOjpzZXRIYXMzRExheWVyKGJvb2wgaGFzM0RMYXllciwg
UGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBjb250ZXh0LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1
cmUpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCisKKyAgICBpZiAoaGFzM0RM
YXllciAmJiAhbV8zZCkgeworICAgICAgICAvLyBjcmVhdGUgdGhlIGlubmVyIDNkIGxheWVyCisg
ICAgICAgIFBsYXRmb3JtTGF5ZXIqIGxheWVyID0gW1tDYW52YXMzRExheWVyIGFsbG9jXSBpbml0
V2l0aENvbnRleHQ6KENHTENvbnRleHRPYmopIGNvbnRleHQgdGV4dHVyZTogKEdMdWludCkgdGV4
dHVyZV07CisgICAgICAgIFtsYXllciBzZXROYW1lOkAiM0QgTGF5ZXIiXTsKKyAgICAgICAgCisg
ICAgICAgIHNldENvbnRlbnRzVG9DYW52YXMzRChsYXllcik7CisgICAgICAgIFtsYXllciBzZXRO
ZWVkc0Rpc3BsYXldOworICAgICAgICAKKyAgICAgICAgbV8zZCA9IHRydWU7CisgICAgICAgIAor
ICAgIH0gZWxzZSBpZiAoIWhhczNETGF5ZXIpIHsKKyAgICAgICAgLy8gcmVtb3ZlIHRoZSBpbm5l
ciBsYXllcgorICAgICAgICBzZXRDb250ZW50c1RvQ2FudmFzM0QoMCk7CisgICAgICAgIG1fM2Qg
PSBmYWxzZTsKKyAgICB9CisgICAgCisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUworfSAg
CisKK3ZvaWQgR3JhcGhpY3NMYXllckNBOjpyZWRyYXdDYW52YXMzRCgpCit7CisgICAgaWYgKG1f
M2QpCisgICAgICAgIFttX2NvbnRlbnRzTGF5ZXIuZ2V0KCkgc2V0TmVlZHNEaXNwbGF5XTsKK30K
KyNlbmRpZgorICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
TW9kZWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hN
b2RlbE9iamVjdC5oCShyZXZpc2lvbiA0NjgwMCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveE1vZGVsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDE0IEBAIHB1Ymxp
YzoKIAogICAgIGJvb2wgaGFzU2VsZlBhaW50aW5nTGF5ZXIoKSBjb25zdDsKICAgICBSZW5kZXJM
YXllciogbGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2xheWVyOyB9Ci0gICAgdmlydHVhbCBib29s
IHJlcXVpcmVzTGF5ZXIoKSBjb25zdCB7IHJldHVybiBpc1Jvb3QoKSB8fCBpc1Bvc2l0aW9uZWQo
KSB8fCBpc1JlbFBvc2l0aW9uZWQoKSB8fCBpc1RyYW5zcGFyZW50KCkgfHwgaGFzT3ZlcmZsb3dD
bGlwKCkgfHwgaGFzVHJhbnNmb3JtKCkgfHwgaGFzTWFzaygpIHx8IGhhc1JlZmxlY3Rpb24oKTsg
fQorICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0xheWVyKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBpc1Jvb3QoKSB8fCBpc1Bvc2l0aW9uZWQoKSB8fCBpc1JlbFBvc2l0aW9uZWQoKSB8
fCBpc1RyYW5zcGFyZW50KCkgfHwgaGFzT3ZlcmZsb3dDbGlwKCkgfHwgaGFzVHJhbnNmb3JtKCkg
fHwgaGFzTWFzaygpIHx8IGhhc1JlZmxlY3Rpb24oKQorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKKyAgICAgICAgICAgICAgICB8fCBpc0NhbnZhczNEKCkKKyNlbmRpZgorICAgICAg
ICA7CisgICAgfQogCiAgICAgLy8gVGhpcyB3aWxsIHdvcmsgb24gaW5saW5lcyB0byByZXR1cm4g
dGhlIGJvdW5kaW5nIGJveCBvZiBhbGwgb2YgdGhlIGxpbmVzJyBib3JkZXIgYm94ZXMuCiAgICAg
dmlydHVhbCBJbnRSZWN0IGJvcmRlckJvdW5kaW5nQm94KCkgY29uc3QgPSAwOwpJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVySFRNTENhbnZhcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVySFRNTENhbnZhcy5jcHAJKHJldmlzaW9uIDQ2ODAwKQorKysgV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVySFRNTENhbnZhcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcz
LDQgKzczLDEwIEBAIHZvaWQgUmVuZGVySFRNTENhbnZhczo6Y2FudmFzU2l6ZUNoYW5nZWQKICAg
ICAgICAgc2V0TmVlZHNMYXlvdXQodHJ1ZSk7CiB9CiAKK2Jvb2wgUmVuZGVySFRNTENhbnZhczo6
aXNDYW52YXMzRCgpIGNvbnN0Cit7CisgICAgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcyA9IHJl
aW50ZXJwcmV0X2Nhc3Q8SFRNTENhbnZhc0VsZW1lbnQqPihub2RlKCkpOworICAgIHJldHVybiBj
YW52YXMgJiYgY2FudmFzLT5pczNEKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJIVE1MQ2FudmFzLmgJKHJldmlzaW9uIDQ2ODAwKQorKysg
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySFRNTENhbnZhcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Niw2ICszNiw4IEBAIGNsYXNzIFJlbmRlckhUTUxDYW52YXMgOiBwdWJsaWMgUmVuZGVyUmUKIHB1
YmxpYzoKICAgICBSZW5kZXJIVE1MQ2FudmFzKEhUTUxDYW52YXNFbGVtZW50Kik7CiAKKyAgICB2
aXJ0dWFsIGJvb2wgaXNDYW52YXMzRCgpIGNvbnN0OworCiAgICAgdmlydHVhbCBjb25zdCBjaGFy
KiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlckhUTUxDYW52YXMiOyB9CiAKICAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnRSZXBsYWNlZChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4
LCBpbnQgdHkpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3Bw
CShyZXZpc2lvbiA0NjgwMCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2lu
Zy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJGcmFtZVZp
ZXcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJHcmFwaGljc0xh
eWVyLmgiCisjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRWxl
bWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIlJlbmRlckJveC5oIgpA
QCAtMTY1LDYgKzE2NiwxNCBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR3JhcGhp
Y3NMCiAgICAgICAgICAgICBtX2hhc0RpcmVjdGx5Q29tcG9zaXRlZENvbnRlbnQgPSB0cnVlOwog
ICAgICAgICAgICAgbV9ncmFwaGljc0xheWVyLT5zZXREcmF3c0NvbnRlbnQoZmFsc2UpOwogICAg
ICAgICB9CisgICAgICAgIGVsc2UgaWYgKHJlbmRlcmVyKCktPmlzQ2FudmFzM0QoKSkgeworICAg
ICAgICAgICAgbV9oYXNEaXJlY3RseUNvbXBvc2l0ZWRDb250ZW50ID0gdHJ1ZTsKKyAgICAgICAg
ICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSByZWludGVycHJldF9jYXN0PEhUTUxDYW52
YXNFbGVtZW50Kj4ocmVuZGVyZXIoKS0+bm9kZSgpKTsKKyAgICAgICAgICAgIGlmIChjYW52YXMg
JiYgY2FudmFzLT5jb250ZXh0M0QoKSkgeworICAgICAgICAgICAgICAgIG1fZ3JhcGhpY3NMYXll
ci0+c2V0SGFzM0RMYXllcih0cnVlLCBjYW52YXMtPmNvbnRleHQzRCgpLCBjYW52YXMtPnRleHR1
cmUzRCgpKTsKKyAgICAgICAgICAgICAgICBtX2dyYXBoaWNzTGF5ZXItPnNldERyYXdzQ29udGVu
dCh0cnVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogCiAgICAgICAgIGlmIChyZW5kZXJl
ckhhc0JhY2tncm91bmQoKSkKICAgICAgICAgICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0QmFja2dy
b3VuZENvbG9yKHJlbmRlcmVyQmFja2dyb3VuZENvbG9yKCkpOwpAQCAtNTgyLDYgKzU5MSwxMCBA
QCBib29sIFJlbmRlckxheWVyQmFja2luZzo6Y2FuVXNlRGlyZWN0Q29tCiB7CiAgICAgUmVuZGVy
T2JqZWN0KiByZW5kZXJPYmplY3QgPSByZW5kZXJlcigpOwogICAgIAorICAgIC8vIENhbnZhczNE
IGlzIGFsd2F5cyBkaXJlY3QgY29tcG9zaXRlZAorICAgIGlmIChyZW5kZXJPYmplY3QtPmlzQ2Fu
dmFzM0QoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCiAgICAgLy8gUmVqZWN0IGFueXRo
aW5nIHRoYXQgaXNuJ3QgYW4gaW1hZ2UKICAgICBpZiAoIXJlbmRlck9iamVjdC0+aXNJbWFnZSgp
ICYmICFyZW5kZXJPYmplY3QtPmlzVmlkZW8oKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
NjAwLDggKzYxMywxMiBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6Y2FuVXNlRGlyZWN0Q29t
CiAgICAgCiB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6cmVuZGVyZXJDb250ZW50Q2hhbmdlZCgp
CiB7Ci0gICAgaWYgKGNhblVzZURpcmVjdENvbXBvc2l0aW5nKCkgJiYgcmVuZGVyZXIoKS0+aXNJ
bWFnZSgpKQotICAgICAgICB1cGRhdGVJbWFnZUNvbnRlbnRzKCk7CisgICAgaWYgKGNhblVzZURp
cmVjdENvbXBvc2l0aW5nKCkpIHsKKyAgICAgICAgaWYgKHJlbmRlcmVyKCktPmlzSW1hZ2UoKSkK
KyAgICAgICAgICAgIHVwZGF0ZUltYWdlQ29udGVudHMoKTsKKyAgICAgICAgZWxzZSBpZiAocmVu
ZGVyZXIoKS0+aXNDYW52YXMzRCgpKQorICAgICAgICAgICAgbV9ncmFwaGljc0xheWVyLT5yZWRy
YXdDYW52YXMzRCgpOworICAgIH0KIH0KIAogdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0
ZUltYWdlQ29udGVudHMoKQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNr
aW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5n
LmgJKHJldmlzaW9uIDQ2ODAwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNr
aW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcgKzkxLDcgQEAgcHVibGljOgogICAgIC8vIHIg
aXMgaW4gdGhlIGNvb3JkaW5hdGUgc3BhY2Ugb2YgdGhlIGxheWVyJ3MgcmVuZGVyIG9iamVjdAog
ICAgIHZvaWQgc2V0Q29udGVudHNOZWVkRGlzcGxheUluUmVjdChjb25zdCBJbnRSZWN0JiByKTsK
IAotICAgIC8vIE5vdGlmaWNhdGlvbiBmcm9tIHRoZSByZW5kZXJlciB0aGF0IGl0cyBjb250ZW50
IGNoYW5nZWQ7IHVzZWQgYnkgUmVuZGVySW1hZ2UuCisgICAgLy8gTm90aWZpY2F0aW9uIGZyb20g
dGhlIHJlbmRlcmVyIHRoYXQgaXRzIGNvbnRlbnQgY2hhbmdlZDsgdXNlZCBieSBSZW5kZXJJbWFn
ZSBhbmQgQ2FudmFzM0QuCiAgICAgdm9pZCByZW5kZXJlckNvbnRlbnRDaGFuZ2VkKCk7CiAKICAg
ICAvLyBJbnRlcmZhY2UgdG8gc3RhcnQsIGZpbmlzaCwgc3VzcGVuZCBhbmQgcmVzdW1lIGFuaW1h
dGlvbnMgYW5kIHRyYW5zaXRpb25zCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckNvbXBvc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyQ29tcG9zaXRvci5jcHAJKHJldmlzaW9uIDQ2ODAwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODI4LDcgKzgyOCw4
IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXAKICAgICAgICAgICAg
ICByZXF1aXJlc0NvbXBvc2l0aW5nRm9yVmlkZW8obGF5ZXItPnJlbmRlcmVyKCkpIHx8CiAgICAg
ICAgICAgICAgbGF5ZXItPnJlbmRlcmVyKCktPnN0eWxlKCktPmJhY2tmYWNlVmlzaWJpbGl0eSgp
ID09IEJhY2tmYWNlVmlzaWJpbGl0eUhpZGRlbiB8fAogICAgICAgICAgICAgIGNsaXBzQ29tcG9z
aXRpbmdEZXNjZW5kYW50cyhsYXllcikgfHwKLSAgICAgICAgICAgICByZXF1aXJlc0NvbXBvc2l0
aW5nRm9yQW5pbWF0aW9uKGxheWVyLT5yZW5kZXJlcigpKTsKKyAgICAgICAgICAgICByZXF1aXJl
c0NvbXBvc2l0aW5nRm9yQW5pbWF0aW9uKGxheWVyLT5yZW5kZXJlcigpKSB8fAorICAgICAgICAg
ICAgIGxheWVyLT5yZW5kZXJlcigpLT5pc0NhbnZhczNEKCk7CiB9CiAKIC8vIFJldHVybiB0cnVl
IGlmIHRoZSBnaXZlbiBsYXllciBoYXMgc29tZSBhbmNlc3RvciBpbiB0aGUgUmVuZGVyTGF5ZXIg
aGllcmFyY2h5IHRoYXQgY2xpcHMsCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkocmV2
aXNpb24gNDY4MDApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjc4LDYgKzI3OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNU
ZXh0RmllbGQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1Zp
ZGVvKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNXaWRnZXQo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0NhbnZhczNEKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIGJvb2wgaXNSb290KCkgY29uc3QgeyByZXR1
cm4gZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkgPT0gbV9ub2RlOyB9CiAgICAgYm9vbCBp
c0JvZHkoKSBjb25zdDsK
</data>
<flag name="review"
          id="18311"
          type_id="1"
          status="-"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38385</attachid>
            <date>2009-08-21 12:11:48 -0700</date>
            <delta_ts>2009-08-21 15:47:12 -0700</delta_ts>
            <desc>Patch for new Canvas3D files</desc>
            <filename>28018-NewFiles.patch</filename>
            <type>text/plain</type>
            <size>169950</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NzYzNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjkgQEAKKzIwMDktMDgtMjEgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5l
dyBmaWxlcyBmb3IgQ2FudmFzIDNEIGZlYXR1cmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MDE4CisKKyAgICAgICAgVGhpcyBpcyBhbGwgdGhlIG5l
dyBmaWxlcyBmb3IgaW1wbGVtZW50aW5nIENhbnZhcyAzRC4gTm9uZSBvZiB0aGVtIGFyZSBob29r
ZWQgdXAgYW5kCisgICAgICAgIGFyZSBub3QgZXZlbiBpbmNsdWRlZCBpbiB0aGUgYnVpbGQgeWV0
LiBUaGlzIGluY29ycG9yYXRlcyB0aGUgcmV2aWV3cyBmcm9tIFNpbW9uCisgICAgICAgIGFuZCBP
bGxpZSBmb3IgdGhlc2UgZmlsZXMuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NhbnZhc051
bWJlckFycmF5Q3VzdG9tLmNwcDogQWRkZWQuIEN1c3RvbSBKUyBiaW5kaW5nIHRvIGRvIGltcGxp
Y2l0IGNvbnZlcnNpb24gZnJvbSBKUyBBcnJheQorICAgICAgICAqIGh0bWwvQ2FudmFzT2JqZWN0
LmNwcDogQWRkZWQuIEJhc2UgY2xhc3MgZm9yIGFsbCBHTCBvYmplY3QgY29udGFpbmVycworICAg
ICAgICAqIGh0bWwvQ2FudmFzT2JqZWN0Lmg6IEFkZGVkLgorICAgICAgICAqIGh0bWwvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dC5jcHA6IEFkZGVkLiBCYXNlIGNsYXNzIGZvciBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQgYW5kIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRAorICAgICAgICAqIGh0bWwv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dC5oOiBBZGRlZC4KKyAgICAgICAgKiBodG1sL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBodG1sL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQzRC5jcHA6IEFkZGVkLiAzRCBjb250ZXh0IHJldHVybmVkIGZyb20gQ2FudmFzLmdl
dENvbnRleHQoKQorICAgICAgICAqIGh0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmg6IEFk
ZGVkLgorICAgICAgICAqIGh0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmlkbDogQWRkZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwOiBBZGRl
ZC4gUGxhdGZvcm0gaW50ZXJmYWNlIGJldHdlZW4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEIGFu
ZCAzRCBncmFwaGljcyBlbmdpbmUKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQzRC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ2Fu
dmFzM0RMYXllci5oOiBBZGRlZC4gQ0FMYXllciBzdWJjbGFzcyB0byBjb21wb3NpdGUgM0QgY2Fu
dmFzCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NhbnZhczNETGF5ZXIubW06IEFk
ZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1h
Yy5jcHA6IEFkZGVkLiBNYWMgc3BlY2lmaWMgaW50ZXJmYWNlIChPcGVuR0wgYmFzZWQpCisKIDIw
MDktMDgtMjEgIExhc3psbyBHb21ib3MgIDxsYXN6bG8uMS5nb21ib3NAbm9raWEuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0NhbnZhc051bWJlckFycmF5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQ2FudmFzTnVtYmVyQXJyYXlDdXN0b20uY3BwCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc051bWJlckFycmF5Q3VzdG9tLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxF
KDNEX0NBTlZBUykKKworI2luY2x1ZGUgIkpTQ2FudmFzTnVtYmVyQXJyYXkuaCIKKworI2luY2x1
ZGUgIkNhbnZhc051bWJlckFycmF5LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworSlNWYWx1ZSBKU0NhbnZhc051bWJlckFycmF5OjpnZXRCeUluZGV4
KEpTQzo6RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbnQgaW5kZXgpCit7CisgICAgSlNDOjpK
U1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKGV4ZWMsIGltcGwoKS0+aXRlbShpbmRleCkpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRSgzRF9DQU5WQVMpCkluZGV4OiBXZWJDb3JlL2h0bWwvQ2FudmFzT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvQ2FudmFzT2JqZWN0LmNwcAkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUvaHRtbC9DYW52YXNPYmplY3QuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFw
cGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorCisj
aW5jbHVkZSAiQ2FudmFzT2JqZWN0LmgiCisjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4
dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCisgICAgQ2FudmFzT2JqZWN0OjpDYW52
YXNPYmplY3QoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCisgICAgOiBtX29iamVjdCgwKQor
ICAgICwgbV9jb250ZXh0KGNvbnRleHQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBDYW52YXNP
YmplY3Q6On5DYW52YXNPYmplY3QoKQorICAgIHsKKyAgICAgICAgaWYgKG1fY29udGV4dCkKKyAg
ICAgICAgICAgIG1fY29udGV4dC0+cmVtb3ZlT2JqZWN0KHRoaXMpOworICAgIH0KKworICAgIHZv
aWQgQ2FudmFzT2JqZWN0OjpzZXRPYmplY3QoUGxhdGZvcm0zRE9iamVjdCBvYmplY3QpCisgICAg
eworICAgICAgICBpZiAob2JqZWN0ID09IG1fb2JqZWN0KQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgCisgICAgICAgIGRlbGV0ZU9iamVjdCgpOworICAgICAgICBtX29iamVjdCA9
IG9iamVjdDsKKyAgICB9CisKKyAgICB2b2lkIENhbnZhc09iamVjdDo6ZGVsZXRlT2JqZWN0KCkK
KyAgICB7CisgICAgICAgIGlmIChtX29iamVjdCkgeworICAgICAgICAgICAgaWYgKG1fY29udGV4
dCkgeworICAgICAgICAgICAgICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgICAgICAgICAgICAgX2RlbGV0ZU9iamVjdChtX29iamVjdCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBtX29iamVjdCA9IDA7CisgICAgICAgIH0KKyAgICB9Cit9CisKKyNlbmRpZiAv
LyBFTkFCTEUoM0RfQ0FOVkFTKQpJbmRleDogV2ViQ29yZS9odG1sL0NhbnZhc09iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9DYW52YXNPYmplY3QuaAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvaHRtbC9DYW52YXNPYmplY3QuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBD
b21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBDYW52YXNPYmplY3RfaAorI2RlZmluZSBDYW52YXNPYmplY3RfaAorCisjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCisj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisg
ICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CisgICAgCisgICAgY2xhc3MgQ2FudmFzT2JqZWN0
IDogcHVibGljIFJlZkNvdW50ZWQ8Q2FudmFzT2JqZWN0PiB7CisgICAgcHVibGljOgorICAgICAg
ICB2aXJ0dWFsIH5DYW52YXNPYmplY3QoKTsKKyAgICAgICAgCisgICAgICAgIFBsYXRmb3JtM0RP
YmplY3Qgb2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3Q7IH0KKyAgICAgICAgdm9pZCBz
ZXRPYmplY3QoUGxhdGZvcm0zRE9iamVjdCk7CisgICAgICAgIHZvaWQgZGVsZXRlT2JqZWN0KCk7
CisgICAgICAgIAorICAgICAgICB2b2lkIGRldGFjaENvbnRleHQoKQorICAgICAgICB7CisgICAg
ICAgICAgICBkZWxldGVPYmplY3QoKTsKKyAgICAgICAgICAgIG1fY29udGV4dCA9IDA7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgcHJvdGVjdGVkOgorICAgICAgICBDYW52YXNPYmplY3QoR3Jh
cGhpY3NDb250ZXh0M0QqKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIF9kZWxldGVPYmplY3QoUGxh
dGZvcm0zRE9iamVjdCkgPSAwOworICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIFBsYXRmb3Jt
M0RPYmplY3QgbV9vYmplY3Q7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7
CisgICAgfTsKKyAgICAKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIENhbnZh
c09iamVjdF9oCkluZGV4OiBXZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmNw
cAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0M0Qu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDgzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikg
bm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaWYgRU5BQkxFKDNEX0NBTlZBUykKKworI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRC5oIgorI2luY2x1ZGUgIkNhbnZhc0J1ZmZlci5oIgorI2luY2x1ZGUgIkNhbnZhc0ZyYW1l
YnVmZmVyLmgiCisjaW5jbHVkZSAiQ2FudmFzUHJvZ3JhbS5oIgorI2luY2x1ZGUgIkNhbnZhc1Jl
bmRlcmJ1ZmZlci5oIgorI2luY2x1ZGUgIkNhbnZhc1RleHR1cmUuaCIKKyNpbmNsdWRlICJDYW52
YXNTaGFkZXIuaCIKKyNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgorI2luY2x1ZGUgIlJl
bmRlckJveC5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Qo
SFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcykKKyAgICA6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQo
Y2FudmFzKQorICAgICwgbV9uZWVkc1VwZGF0ZSh0cnVlKQoreworICAgIG1fY29udGV4dC5yZXNo
YXBlKG1fY2FudmFzLT53aWR0aCgpLCBtX2NhbnZhcy0+aGVpZ2h0KCkpOworfQorCitDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0Q6On5DYW52YXNSZW5kZXJpbmdDb250ZXh0M0QoKQoreworfQorCit2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6bWFya0NvbnRleHRDaGFuZ2VkKCkKK3sKKyAg
ICBpZiAobV9jYW52YXMtPnJlbmRlckJveCgpICYmIG1fY2FudmFzLT5yZW5kZXJCb3goKS0+aGFz
TGF5ZXIoKSkKKyAgICAgICAgbV9jYW52YXMtPnJlbmRlckJveCgpLT5sYXllcigpLT5yZW5kZXJl
ckNvbnRlbnRDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpy
ZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgICBpZiAobV9uZWVkc1VwZGF0ZSkg
eworICAgICAgICBpZiAobV9jYW52YXMtPnJlbmRlckJveCgpICYmIG1fY2FudmFzLT5yZW5kZXJC
b3goKS0+aGFzTGF5ZXIoKSkKKyAgICAgICAgICAgIG1fY2FudmFzLT5yZW5kZXJCb3goKS0+bGF5
ZXIoKS0+cmVuZGVyZXJDb250ZW50Q2hhbmdlZCgpOworICAgICAgICBtX25lZWRzVXBkYXRlID0g
ZmFsc2U7CisgICAgfQorICAgIAorICAgIG1fY29udGV4dC5yZXNoYXBlKHdpZHRoLCBoZWlnaHQp
OworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2xBY3RpdmVUZXh0dXJlKHVu
c2lnbmVkIGxvbmcgdGV4dHVyZSkKK3sKKyAgICBtX2NvbnRleHQuZ2xBY3RpdmVUZXh0dXJlKHRl
eHR1cmUpOworICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Cit9CisKK3ZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbEF0dGFjaFNoYWRlcihDYW52YXNQcm9ncmFtKiBw
cm9ncmFtLCBDYW52YXNTaGFkZXIqIHNoYWRlcikKK3sKKyAgICBpZiAoIXByb2dyYW0gfHwgIXNo
YWRlcikKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC5nbEF0dGFjaFNoYWRlcihwcm9n
cmFtLCBzaGFkZXIpOworICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Cit9CisK
K3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbEJpbmRBdHRyaWJMb2NhdGlvbihDYW52
YXNQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBjb25zdCBTdHJpbmcmIG5h
bWUpCit7CisgICAgaWYgKCFwcm9ncmFtKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0
LmdsQmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIGluZGV4LCBuYW1lKTsKKyAgICBjbGVhbnVw
QWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRDo6Z2xCaW5kQnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBDYW52YXNCdWZmZXIqIGJ1
ZmZlcikKK3sKKyAgICBtX2NvbnRleHQuZ2xCaW5kQnVmZmVyKHRhcmdldCwgYnVmZmVyKTsKKyAg
ICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworfQorCisKK3ZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDNEOjpnbEJpbmRGcmFtZWJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwg
Q2FudmFzRnJhbWVidWZmZXIqIGJ1ZmZlcikKK3sKKyAgICBtX2NvbnRleHQuZ2xCaW5kRnJhbWVi
dWZmZXIodGFyZ2V0LCBidWZmZXIpOworICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxz
ZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbEJpbmRSZW5kZXJidWZm
ZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIENhbnZhc1JlbmRlcmJ1ZmZlciogcmVuZGVyYnVmZmVy
KQoreworICAgIG1fY29udGV4dC5nbEJpbmRSZW5kZXJidWZmZXIodGFyZ2V0LCByZW5kZXJidWZm
ZXIpOworICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Cit9CisKKwordm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsQmluZFRleHR1cmUodW5zaWduZWQgdGFyZ2V0LCBD
YW52YXNUZXh0dXJlKiB0ZXh0dXJlKQoreworICAgIG1fY29udGV4dC5nbEJpbmRUZXh0dXJlKHRh
cmdldCwgdGV4dHVyZSk7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKK30K
Kwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsQmxlbmRDb2xvcihkb3VibGUgcmVk
LCBkb3VibGUgZ3JlZW4sIGRvdWJsZSBibHVlLCBkb3VibGUgYWxwaGEpCit7CisgICAgbV9jb250
ZXh0LmdsQmxlbmRDb2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CisgICAgY2xlYW51cEFm
dGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
M0Q6OmdsQmxlbmRFcXVhdGlvbiggdW5zaWduZWQgbG9uZyBtb2RlICkKK3sKKyAgICBtX2NvbnRl
eHQuZ2xCbGVuZEVxdWF0aW9uKG1vZGUpOworICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChm
YWxzZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbEJsZW5kRXF1YXRp
b25TZXBhcmF0ZSh1bnNpZ25lZCBsb25nIG1vZGVSR0IsIHVuc2lnbmVkIGxvbmcgbW9kZUFscGhh
KQoreworICAgIG1fY29udGV4dC5nbEJsZW5kRXF1YXRpb25TZXBhcmF0ZShtb2RlUkdCLCBtb2Rl
QWxwaGEpOworICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Cit9CisKKwordm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsQmxlbmRGdW5jKHVuc2lnbmVkIGxvbmcgc2Zh
Y3RvciwgdW5zaWduZWQgbG9uZyBkZmFjdG9yKQoreworICAgIG1fY29udGV4dC5nbEJsZW5kRnVu
YyhzZmFjdG9yLCBkZmFjdG9yKTsKKyAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2Up
OworfSAgICAgICAKKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsQmxlbmRGdW5j
U2VwYXJhdGUodW5zaWduZWQgbG9uZyBzcmNSR0IsIHVuc2lnbmVkIGxvbmcgZHN0UkdCLCB1bnNp
Z25lZCBsb25nIHNyY0FscGhhLCB1bnNpZ25lZCBsb25nIGRzdEFscGhhKQoreworICAgIG1fY29u
dGV4dC5nbEJsZW5kRnVuY1NlcGFyYXRlKHNyY1JHQiwgZHN0UkdCLCBzcmNBbHBoYSwgZHN0QWxw
aGEpOworICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Cit9CisKK3ZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbEJ1ZmZlckRhdGEodW5zaWduZWQgbG9uZyB0YXJnZXQs
IENhbnZhc051bWJlckFycmF5KiBhcnJheSwgdW5zaWduZWQgbG9uZyB1c2FnZSkKK3sKKyAgICBt
X2NvbnRleHQuZ2xCdWZmZXJEYXRhKHRhcmdldCwgYXJyYXksIHVzYWdlKTsKKyAgICBjbGVhbnVw
QWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRDo6Z2xCdWZmZXJTdWJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIG9mZnNldCwg
Q2FudmFzTnVtYmVyQXJyYXkqIGFycmF5KQoreworICAgIGlmICghYXJyYXkgfHwgIWFycmF5LT5k
YXRhKCkuc2l6ZSgpKQorICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIG1fY29udGV4dC5n
bEJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBvZmZzZXQsIGFycmF5KTsKKyAgICBjbGVhbnVwQWZ0ZXJH
cmFwaGljc0NhbGwoZmFsc2UpOworfQorCit1bnNpZ25lZCBsb25nIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRDo6Z2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzKENhbnZhc0ZyYW1lYnVmZmVyKiBmcmFt
ZWJ1ZmZlcikKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0LmdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1
cyhmcmFtZWJ1ZmZlcik7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbENs
ZWFyQ29sb3IoZG91YmxlIHIsIGRvdWJsZSBnLCBkb3VibGUgYiwgZG91YmxlIGEpCit7CisgICAg
aWYgKGlzbmFuKHIpKQorICAgICAgICByID0gMDsKKyAgICBpZiAoaXNuYW4oZykpCisgICAgICAg
IGcgPSAwOworICAgIGlmIChpc25hbihiKSkKKyAgICAgICAgYiA9IDA7CisgICAgaWYgKGlzbmFu
KGEpKQorICAgICAgICBhID0gMTsKKyAgICBtX2NvbnRleHQuZ2xDbGVhckNvbG9yKHIsIGcsIGIs
IGEpOworICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Cit9CisKK3ZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbENsZWFyKHVuc2lnbmVkIGxvbmcgbWFzaykKK3sKKyAg
ICBtX2NvbnRleHQuZ2xDbGVhcihtYXNrKTsKKyAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwo
dHJ1ZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbENsZWFyRGVwdGgo
ZG91YmxlIGRlcHRoKQoreworICAgIG1fY29udGV4dC5nbENsZWFyRGVwdGgoZGVwdGgpOworICAg
IGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDNEOjpnbENsZWFyU3RlbmNpbChsb25nIHMpCit7CisgICAgbV9jb250ZXh0Lmds
Q2xlYXJTdGVuY2lsKHMpOworICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Cit9
CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbENvbG9yTWFzayhib29sIHJlZCwg
Ym9vbCBncmVlbiwgYm9vbCBibHVlLCBib29sIGFscGhhKQoreworICAgIG1fY29udGV4dC5nbENv
bG9yTWFzayhyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CisgICAgY2xlYW51cEFmdGVyR3JhcGhp
Y3NDYWxsKGZhbHNlKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsQ29t
cGlsZVNoYWRlcihDYW52YXNTaGFkZXIqIHNoYWRlcikKK3sKKyAgICBtX2NvbnRleHQuZ2xDb21w
aWxlU2hhZGVyKHNoYWRlcik7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsK
K30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsQ29weVRleEltYWdlMkQodW5z
aWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgbGV2ZWwsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3Jt
YXQsIGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhl
aWdodCwgbG9uZyBib3JkZXIpCit7CisgICAgbV9jb250ZXh0LmdsQ29weVRleEltYWdlMkQodGFy
Z2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7
CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKK30KKwordm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0Q6OmdsQ29weVRleFN1YkltYWdlMkQodW5zaWduZWQgbG9uZyB0YXJn
ZXQsIGxvbmcgbGV2ZWwsIGxvbmcgeG9mZnNldCwgbG9uZyB5b2Zmc2V0LCBsb25nIHgsIGxvbmcg
eSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpCit7CisgICAgbV9j
b250ZXh0LmdsQ29weVRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNl
dCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZh
bHNlKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsQ3VsbEZhY2UodW5z
aWduZWQgbG9uZyBtb2RlKQoreworICAgIG1fY29udGV4dC5nbEN1bGxGYWNlKG1vZGUpOworICAg
IGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDNEOjpnbERlcHRoRnVuYyh1bnNpZ25lZCBsb25nIGZ1bmMpCit7CisgICAgbV9j
b250ZXh0LmdsRGVwdGhGdW5jKGZ1bmMpOworICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChm
YWxzZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbERlcHRoTWFzayhi
b29sIGZsYWcpCit7CisgICAgbV9jb250ZXh0LmdsRGVwdGhNYXNrKGZsYWcpOworICAgIGNsZWFu
dXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDNEOjpnbERlcHRoUmFuZ2UoZG91YmxlIHpOZWFyLCBkb3VibGUgekZhcikKK3sKKyAgICBt
X2NvbnRleHQuZ2xEZXB0aFJhbmdlKHpOZWFyLCB6RmFyKTsKKyAgICBjbGVhbnVwQWZ0ZXJHcmFw
aGljc0NhbGwoZmFsc2UpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2xE
ZXRhY2hTaGFkZXIoQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSwgQ2FudmFzU2hhZGVyKiBzaGFkZXIp
Cit7CisgICAgaWYgKCFwcm9ncmFtIHx8ICFzaGFkZXIpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fY29udGV4dC5nbERldGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIpOworICAgIGNsZWFudXBB
ZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Cit9CisKKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0Q6OmdsRGlzYWJsZSh1bnNpZ25lZCBsb25nIGNhcCkKK3sKKyAgICBtX2NvbnRleHQuZ2xE
aXNhYmxlKGNhcCk7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKK30KKwor
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5
KHVuc2lnbmVkIGxvbmcgaW5kZXgpCit7CisgICAgbV9jb250ZXh0LmdsRGlzYWJsZVZlcnRleEF0
dHJpYkFycmF5KGluZGV4KTsKKyAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwor
fQorCisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbERyYXdBcnJheXModW5zaWdu
ZWQgbG9uZyBtb2RlLCBsb25nIGZpcnN0LCB1bnNpZ25lZCBsb25nIGNvdW50KQoreworICAgIG1f
Y29udGV4dC5nbERyYXdBcnJheXMobW9kZSwgZmlyc3QsIGNvdW50KTsKKyAgICBjbGVhbnVwQWZ0
ZXJHcmFwaGljc0NhbGwodHJ1ZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
OjpnbERyYXdFbGVtZW50cyh1bnNpZ25lZCBsb25nIG1vZGUsIHVuc2lnbmVkIGxvbmcgY291bnQs
IHVuc2lnbmVkIGxvbmcgdHlwZSwgdm9pZCogYXJyYXkpCit7CisgICAgbV9jb250ZXh0LmdsRHJh
d0VsZW1lbnRzKG1vZGUsIGNvdW50LCB0eXBlLCBhcnJheSk7CisgICAgY2xlYW51cEFmdGVyR3Jh
cGhpY3NDYWxsKHRydWUpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2xF
bmFibGUodW5zaWduZWQgbG9uZyBjYXApCit7CisgICAgbV9jb250ZXh0LmdsRW5hYmxlKGNhcCk7
CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKK30KKwordm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0Q6OmdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQgbG9u
ZyBpbmRleCkKK3sKKyAgICBtX2NvbnRleHQuZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRl
eCk7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKK30KKwordm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsRmluaXNoKCkKK3sKKyAgICBtX2NvbnRleHQuZ2xGaW5p
c2goKTsKKyAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwodHJ1ZSk7Cit9CisKKwordm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsRmx1c2goKQoreworICAgIG1fY29udGV4dC5nbEZs
dXNoKCk7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKHRydWUpOworfQorCit2b2lkIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih1bnNpZ25l
ZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHJl
bmRlcmJ1ZmZlcnRhcmdldCwgQ2FudmFzUmVuZGVyYnVmZmVyKiBidWZmZXIpCit7CisgICAgaWYg
KCFidWZmZXIpCisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgbV9jb250ZXh0LmdsRnJh
bWVidWZmZXJSZW5kZXJidWZmZXIodGFyZ2V0LCBhdHRhY2htZW50LCByZW5kZXJidWZmZXJ0YXJn
ZXQsIGJ1ZmZlcik7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKK30KKwor
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsRnJhbWVidWZmZXJUZXh0dXJlMkQodW5z
aWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9u
ZyB0ZXh0YXJnZXQsIENhbnZhc1RleHR1cmUqIHRleHR1cmUsIGxvbmcgbGV2ZWwpCit7CisgICAg
aWYgKCF0ZXh0dXJlKQorICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIG1fY29udGV4dC5n
bEZyYW1lYnVmZmVyVGV4dHVyZTJEKHRhcmdldCwgYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0
dXJlLCBsZXZlbCk7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKK30KKwor
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsRnJvbnRGYWNlKHVuc2lnbmVkIGxvbmcg
bW9kZSkKK3sKKyAgICBtX2NvbnRleHQuZ2xGcm9udEZhY2UobW9kZSk7CisgICAgY2xlYW51cEFm
dGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
M0Q6OmdsR2VuZXJhdGVNaXBtYXAodW5zaWduZWQgbG9uZyB0YXJnZXQpCit7CisgICAgbV9jb250
ZXh0LmdsR2VuZXJhdGVNaXBtYXAodGFyZ2V0KTsKKyAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0Nh
bGwoZmFsc2UpOworfQorCitpbnQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbEdldEF0dHJp
YkxvY2F0aW9uKENhbnZhc1Byb2dyYW0qIHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sK
KyAgICByZXR1cm4gbV9jb250ZXh0LmdsR2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgbmFtZSk7
Cit9CisKK3Vuc2lnbmVkIGxvbmcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbEdldEVycm9y
KCkKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0LmdsR2V0RXJyb3IoKTsKK30KKworU3RyaW5nIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2xHZXRTdHJpbmcodW5zaWduZWQgbG9uZyBuYW1lKQor
eworICAgIHJldHVybiBtX2NvbnRleHQuZ2xHZXRTdHJpbmcobmFtZSk7Cit9CisKK3ZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbEhpbnQodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2ln
bmVkIGxvbmcgbW9kZSkKK3sKKyAgICBtX2NvbnRleHQuZ2xIaW50KHRhcmdldCwgbW9kZSk7Cisg
ICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKK30KKworYm9vbCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0Q6OmdsSXNCdWZmZXIoQ2FudmFzQnVmZmVyKiBidWZmZXIpCit7CisgICAg
aWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgcmV0dXJu
IG1fY29udGV4dC5nbElzQnVmZmVyKGJ1ZmZlcik7Cit9CisKK2Jvb2wgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEOjpnbElzRW5hYmxlZCh1bnNpZ25lZCBsb25nIGNhcCkKK3sKKyAgICByZXR1cm4g
bV9jb250ZXh0LmdsSXNFbmFibGVkKGNhcCk7Cit9CisKK2Jvb2wgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDNEOjpnbElzRnJhbWVidWZmZXIoQ2FudmFzRnJhbWVidWZmZXIqIGZyYW1lYnVmZmVyKQor
eworICAgIHJldHVybiBtX2NvbnRleHQuZ2xJc0ZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKTsKK30K
KworYm9vbCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsSXNQcm9ncmFtKENhbnZhc1Byb2dy
YW0qIHByb2dyYW0pCit7CisgICAgcmV0dXJuIG1fY29udGV4dC5nbElzUHJvZ3JhbShwcm9ncmFt
KTsKK30KKworYm9vbCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsSXNSZW5kZXJidWZmZXIo
Q2FudmFzUmVuZGVyYnVmZmVyKiByZW5kZXJidWZmZXIpCit7CisgICAgcmV0dXJuIG1fY29udGV4
dC5nbElzUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcik7Cit9CisKK2Jvb2wgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDNEOjpnbElzU2hhZGVyKENhbnZhc1NoYWRlciogc2hhZGVyKQoreworICAgIHJl
dHVybiBtX2NvbnRleHQuZ2xJc1NoYWRlcihzaGFkZXIpOworfQorCitib29sIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQzRDo6Z2xJc1RleHR1cmUoQ2FudmFzVGV4dHVyZSogdGV4dHVyZSkKK3sKKyAg
ICByZXR1cm4gbV9jb250ZXh0LmdsSXNUZXh0dXJlKHRleHR1cmUpOworfQorCit2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQzRDo6Z2xMaW5lV2lkdGgoZG91YmxlIHdpZHRoKQoreworICAgIG1f
Y29udGV4dC5nbExpbmVXaWR0aCgoZmxvYXQpIHdpZHRoKTsKKyAgICBjbGVhbnVwQWZ0ZXJHcmFw
aGljc0NhbGwoZmFsc2UpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2xM
aW5rUHJvZ3JhbShDYW52YXNQcm9ncmFtKiBwcm9ncmFtKQoreworICAgIGlmICghcHJvZ3JhbSkK
KyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBtX2NvbnRleHQuZ2xMaW5rUHJvZ3JhbShw
cm9ncmFtKTsKKyAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworfQorCit2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2xQaXhlbFN0b3JlaSh1bnNpZ25lZCBsb25nIHBu
YW1lLCBsb25nIHBhcmFtKQoreworICAgIG1fY29udGV4dC5nbFBpeGVsU3RvcmVpKHBuYW1lLCBw
YXJhbSk7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKK30KKwordm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsUG9seWdvbk9mZnNldChkb3VibGUgZmFjdG9yLCBk
b3VibGUgdW5pdHMpCit7CisgICAgbV9jb250ZXh0LmdsUG9seWdvbk9mZnNldCgoZmxvYXQpIGZh
Y3RvciwgKGZsb2F0KSB1bml0cyk7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNl
KTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsUmVsZWFzZVNoYWRlckNv
bXBpbGVyKCkKK3sKKyAgICBtX2NvbnRleHQuZ2xSZWxlYXNlU2hhZGVyQ29tcGlsZXIoKTsKKyAg
ICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworfQorCit2b2lkIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQzRDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0
LCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNp
Z25lZCBsb25nIGhlaWdodCkKK3sKKyAgICBtX2NvbnRleHQuZ2xSZW5kZXJidWZmZXJTdG9yYWdl
KHRhcmdldCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAgIGNsZWFudXBBZnRl
ckdyYXBoaWNzQ2FsbChmYWxzZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
OjpnbFNhbXBsZUNvdmVyYWdlKGRvdWJsZSB2YWx1ZSwgYm9vbCBpbnZlcnQpCit7CisgICAgbV9j
b250ZXh0LmdsU2FtcGxlQ292ZXJhZ2UoKGZsb2F0KSB2YWx1ZSwgaW52ZXJ0KTsKKyAgICBjbGVh
bnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRDo6Z2xTY2lzc29yKGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1
bnNpZ25lZCBsb25nIGhlaWdodCkKK3sKKyAgICBtX2NvbnRleHQuZ2xTY2lzc29yKHgsIHksIHdp
ZHRoLCBoZWlnaHQpOworICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Cit9CisK
K3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbFNoYWRlclNvdXJjZShDYW52YXNTaGFk
ZXIqIHNoYWRlciwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCit7CisgICAgbV9jb250ZXh0LmdsU2hh
ZGVyU291cmNlKHNoYWRlciwgc3RyaW5nKTsKKyAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwo
ZmFsc2UpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2xTdGVuY2lsRnVu
Yyh1bnNpZ25lZCBsb25nIGZ1bmMsIGxvbmcgcmVmLCB1bnNpZ25lZCBsb25nIG1hc2spCit7Cisg
ICAgbV9jb250ZXh0LmdsU3RlbmNpbEZ1bmMoZnVuYywgcmVmLCBtYXNrKTsKKyAgICBjbGVhbnVw
QWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRDo6Z2xTdGVuY2lsRnVuY1NlcGFyYXRlKHVuc2lnbmVkIGxvbmcgZmFjZSwgdW5zaWduZWQg
bG9uZyBmdW5jLCBsb25nIHJlZiwgdW5zaWduZWQgbG9uZyBtYXNrKQoreworICAgIG1fY29udGV4
dC5nbFN0ZW5jaWxGdW5jU2VwYXJhdGUoZmFjZSwgZnVuYywgcmVmLCBtYXNrKTsKKyAgICBjbGVh
bnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRDo6Z2xTdGVuY2lsTWFzayh1bnNpZ25lZCBsb25nIG1hc2spCit7CisgICAgbV9jb250
ZXh0LmdsU3RlbmNpbE1hc2sobWFzayk7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZh
bHNlKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsU3RlbmNpbE1hc2tT
ZXBhcmF0ZSh1bnNpZ25lZCBsb25nIGZhY2UsIHVuc2lnbmVkIGxvbmcgbWFzaykKK3sKKyAgICBt
X2NvbnRleHQuZ2xTdGVuY2lsTWFza1NlcGFyYXRlKGZhY2UsIG1hc2spOworICAgIGNsZWFudXBB
ZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEOjpnbFN0ZW5jaWxPcCh1bnNpZ25lZCBsb25nIGZhaWwsIHVuc2lnbmVkIGxvbmcgemZhaWws
IHVuc2lnbmVkIGxvbmcgenBhc3MpCit7CisgICAgbV9jb250ZXh0LmdsU3RlbmNpbE9wKGZhaWws
IHpmYWlsLCB6cGFzcyk7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKK30K
Kwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsU3RlbmNpbE9wU2VwYXJhdGUodW5z
aWduZWQgbG9uZyBmYWNlLCB1bnNpZ25lZCBsb25nIGZhaWwsIHVuc2lnbmVkIGxvbmcgemZhaWws
IHVuc2lnbmVkIGxvbmcgenBhc3MpCit7CisgICAgbV9jb250ZXh0LmdsU3RlbmNpbE9wU2VwYXJh
dGUoZmFjZSwgZmFpbCwgemZhaWwsIHpwYXNzKTsKKyAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0Nh
bGwoZmFsc2UpOworfQorCisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbFRleFBh
cmFtZXRlcih1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIHBuYW1lLCBDYW52YXNOdW1iZXJBcnJh
eSogYXJyYXkpCit7CisgICAgbV9jb250ZXh0LmdsVGV4UGFyYW1ldGVyKHRhcmdldCwgcG5hbWUs
YXJyYXkpOworICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Cit9CisKK3ZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbFRleFBhcmFtZXRlcih1bnNpZ25lZCB0YXJnZXQs
IHVuc2lnbmVkIHBuYW1lLCBkb3VibGUgdmFsdWUpCit7CisgICAgbV9jb250ZXh0LmdsVGV4UGFy
YW1ldGVyKHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKKyAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0Nh
bGwoZmFsc2UpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2xVbmlmb3Jt
KGxvbmcgbG9jYXRpb24sIENhbnZhc051bWJlckFycmF5KiBhcnJheSkKK3sKKyAgICBtX2NvbnRl
eHQuZ2xVbmlmb3JtKGxvY2F0aW9uLCBhcnJheSk7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3ND
YWxsKGZhbHNlKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsVW5pZm9y
bShsb25nIGxvY2F0aW9uLCBmbG9hdCB2MCkKK3sKKyAgICBtX2NvbnRleHQuZ2xVbmlmb3JtKGxv
Y2F0aW9uLCB2MCk7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKK30KKwor
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsVW5pZm9ybShsb25nIGxvY2F0aW9uLCBm
bG9hdCB2MCwgZmxvYXQgdjEpCit7CisgICAgbV9jb250ZXh0LmdsVW5pZm9ybShsb2NhdGlvbiwg
djAsIHYxKTsKKyAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworfQorCit2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2xVbmlmb3JtKGxvbmcgbG9jYXRpb24sIGZsb2F0
IHYwLCBmbG9hdCB2MSwgZmxvYXQgdjIpCit7CisgICAgbV9jb250ZXh0LmdsVW5pZm9ybShsb2Nh
dGlvbiwgdjAsIHYxLCB2Mik7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsK
K30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsVW5pZm9ybShsb25nIGxvY2F0
aW9uLCBmbG9hdCB2MCwgZmxvYXQgdjEsIGZsb2F0IHYyLCBmbG9hdCB2MykKK3sKKyAgICBtX2Nv
bnRleHQuZ2xVbmlmb3JtKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7CisgICAgY2xlYW51cEFm
dGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
M0Q6OmdsVW5pZm9ybShsb25nIGxvY2F0aW9uLCBpbnQgdjApCit7CisgICAgbV9jb250ZXh0Lmds
VW5pZm9ybShsb2NhdGlvbiwgdjApOworICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxz
ZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbFVuaWZvcm0obG9uZyBs
b2NhdGlvbiwgaW50IHYwLCBpbnQgdjEpCit7CisgICAgbV9jb250ZXh0LmdsVW5pZm9ybShsb2Nh
dGlvbiwgdjAsIHYxKTsKKyAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworfQor
Cit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2xVbmlmb3JtKGxvbmcgbG9jYXRpb24s
IGludCB2MCwgaW50IHYxLCBpbnQgdjIpCit7CisgICAgbV9jb250ZXh0LmdsVW5pZm9ybShsb2Nh
dGlvbiwgdjAsIHYxLCB2Mik7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsK
K30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsVW5pZm9ybShsb25nIGxvY2F0
aW9uLCBpbnQgdjAsIGludCB2MSwgaW50IHYyLCBpbnQgdjMpCit7CisgICAgbV9jb250ZXh0Lmds
VW5pZm9ybShsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMpOworICAgIGNsZWFudXBBZnRlckdyYXBo
aWNzQ2FsbChmYWxzZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbFVu
aWZvcm1NYXRyaXgobG9uZyBsb2NhdGlvbiwgbG9uZyBjb3VudCwgYm9vbCB0cmFuc3Bvc2UsIENh
bnZhc051bWJlckFycmF5KmFycmF5KQoreworICAgIG1fY29udGV4dC5nbFVuaWZvcm1NYXRyaXgo
bG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIGFycmF5KTsKKyAgICBjbGVhbnVwQWZ0ZXJHcmFw
aGljc0NhbGwoZmFsc2UpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2xV
bmlmb3JtTWF0cml4KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBjb25zdCBWZWN0b3I8
V2ViS2l0Q1NTTWF0cml4Kj4mIGFycmF5KQoreworICAgIG1fY29udGV4dC5nbFVuaWZvcm1NYXRy
aXgobG9jYXRpb24sIHRyYW5zcG9zZSwgYXJyYXkpOworICAgIGNsZWFudXBBZnRlckdyYXBoaWNz
Q2FsbChmYWxzZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbFVuaWZv
cm1NYXRyaXgobG9uZyBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIGNvbnN0IFdlYktpdENTU01h
dHJpeCogbWF0cml4KQoreworICAgIG1fY29udGV4dC5nbFVuaWZvcm1NYXRyaXgobG9jYXRpb24s
IHRyYW5zcG9zZSwgbWF0cml4KTsKKyAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2Up
OworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2xVc2VQcm9ncmFtKENhbnZh
c1Byb2dyYW0qIHByb2dyYW0pCit7CisgICAgbV9jb250ZXh0LmdsVXNlUHJvZ3JhbShwcm9ncmFt
KTsKKyAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworfQorCit2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQzRDo6Z2xWYWxpZGF0ZVByb2dyYW0oQ2FudmFzUHJvZ3JhbSogcHJv
Z3JhbSkKK3sKKyAgICBtX2NvbnRleHQuZ2xWYWxpZGF0ZVByb2dyYW0ocHJvZ3JhbSk7CisgICAg
Y2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0M0Q6OmdsVmVydGV4QXR0cmliKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgdjAp
Cit7CisgICAgbV9jb250ZXh0LmdsVmVydGV4QXR0cmliKGluZHgsIHYwKTsKKyAgICBjbGVhbnVw
QWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRDo6Z2xWZXJ0ZXhBdHRyaWIodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCB2MCwgZmxvYXQg
djEpCit7CisgICAgbV9jb250ZXh0LmdsVmVydGV4QXR0cmliKGluZHgsIHYwLCB2MSk7CisgICAg
Y2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0M0Q6OmdsVmVydGV4QXR0cmliKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgdjAs
IGZsb2F0IHYxLCBmbG9hdCB2MikKK3sKKyAgICBtX2NvbnRleHQuZ2xWZXJ0ZXhBdHRyaWIoaW5k
eCwgdjAsIHYxLCB2Mik7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKK30K
Kwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsVmVydGV4QXR0cmliKHVuc2lnbmVk
IGxvbmcgaW5keCwgZmxvYXQgdjAsIGZsb2F0IHYxLCBmbG9hdCB2MiwgZmxvYXQgdjMpCit7Cisg
ICAgbV9jb250ZXh0LmdsVmVydGV4QXR0cmliKGluZHgsIHYwLCB2MSwgdjIsIHYzKTsKKyAgICBj
bGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQzRDo6Z2xWZXJ0ZXhBdHRyaWIodW5zaWduZWQgbG9uZyBpbmR4LCBDYW52YXNOdW1i
ZXJBcnJheSogYXJyYXkpCit7CisgICAgbV9jb250ZXh0LmdsVmVydGV4QXR0cmliKGluZHgsIGFy
cmF5KTsKKyAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworfQorCisKK3ZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbFZlcnRleEF0dHJpYlBvaW50ZXIodW5zaWduZWQg
bG9uZyBpbmR4LCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgdHlwZSwgYm9vbCBub3JtYWxpemVk
LCB1bnNpZ25lZCBsb25nIHN0cmlkZSwgQ2FudmFzTnVtYmVyQXJyYXkqIGFycmF5KQoreworICAg
IG1fY29udGV4dC5nbFZlcnRleEF0dHJpYlBvaW50ZXIoaW5keCwgc2l6ZSwgdHlwZSwgbm9ybWFs
aXplZCwgc3RyaWRlLCBhcnJheSk7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNl
KTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsVmlld3BvcnQobG9uZyB4
LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KQorewor
ICAgIGlmIChpc25hbih4KSkKKyAgICAgICAgeCA9IDA7CisgICAgaWYgKGlzbmFuKHkpKQorICAg
ICAgICB5ID0gMDsKKyAgICBpZiAoaXNuYW4od2lkdGgpKQorICAgICAgICB3aWR0aCA9IDEwMDsK
KyAgICBpZiAoaXNuYW4oaGVpZ2h0KSkKKyAgICAgICAgaGVpZ2h0ID0gMTAwOworICAgIG1fY29u
dGV4dC5nbFZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgIGNsZWFudXBBZnRlckdy
YXBoaWNzQ2FsbChmYWxzZSk7Cit9CisKKy8vIE5vbi1HTCBmdW5jdGlvbnMKK1Bhc3NSZWZQdHI8
Q2FudmFzQnVmZmVyPiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmNyZWF0ZUJ1ZmZlcigpCit7
CisgICAgcmV0dXJuIG1fY29udGV4dC5jcmVhdGVCdWZmZXIoKTsKK30KKyAgICAgICAgCitQYXNz
UmVmUHRyPENhbnZhc0ZyYW1lYnVmZmVyPiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmNyZWF0
ZUZyYW1lYnVmZmVyKCkKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0LmNyZWF0ZUZyYW1lYnVmZmVy
KCk7Cit9CisKK1Bhc3NSZWZQdHI8Q2FudmFzVGV4dHVyZT4gQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEOjpjcmVhdGVUZXh0dXJlKCkKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0LmNyZWF0ZVRleHR1
cmUoKTsKK30KKworUGFzc1JlZlB0cjxDYW52YXNQcm9ncmFtPiBDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0Q6OmNyZWF0ZVByb2dyYW0oKQoreworICAgIHJldHVybiBtX2NvbnRleHQuY3JlYXRlUHJv
Z3JhbSgpOworfQorCitQYXNzUmVmUHRyPENhbnZhc1JlbmRlcmJ1ZmZlcj4gQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDNEOjpjcmVhdGVSZW5kZXJidWZmZXIoKQoreworICAgIHJldHVybiBtX2NvbnRl
eHQuY3JlYXRlUmVuZGVyYnVmZmVyKCk7Cit9CisKK1Bhc3NSZWZQdHI8Q2FudmFzU2hhZGVyPiBD
YW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmNyZWF0ZVNoYWRlcih1bnNpZ25lZCBsb25nIHR5cGUp
Cit7CisgICAgcmV0dXJuIG1fY29udGV4dC5jcmVhdGVTaGFkZXIodHlwZSk7Cit9CisKK3ZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpkZWxldGVCdWZmZXIoQ2FudmFzQnVmZmVyKiBidWZm
ZXIpCit7CisgICAgbV9jb250ZXh0LmRlbGV0ZUJ1ZmZlcihidWZmZXIpOworICAgIGNsZWFudXBB
ZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEOjpkZWxldGVGcmFtZWJ1ZmZlcihDYW52YXNGcmFtZWJ1ZmZlciogZnJhbWVidWZmZXIpCit7
CisgICAgbV9jb250ZXh0LmRlbGV0ZUZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKTsKKyAgICBjbGVh
bnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRDo6ZGVsZXRlUHJvZ3JhbShDYW52YXNQcm9ncmFtKiBwcm9ncmFtKQoreworICAgIG1f
Y29udGV4dC5kZWxldGVQcm9ncmFtKHByb2dyYW0pOworICAgIGNsZWFudXBBZnRlckdyYXBoaWNz
Q2FsbChmYWxzZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpkZWxldGVS
ZW5kZXJidWZmZXIoQ2FudmFzUmVuZGVyYnVmZmVyKiByZW5kZXJidWZmZXIpCit7CisgICAgbV9j
b250ZXh0LmRlbGV0ZVJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpOworICAgIGNsZWFudXBBZnRl
ckdyYXBoaWNzQ2FsbChmYWxzZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
OjpkZWxldGVTaGFkZXIoQ2FudmFzU2hhZGVyKiBzaGFkZXIpCit7CisgICAgbV9jb250ZXh0LmRl
bGV0ZVNoYWRlcihzaGFkZXIpOworICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7
Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpkZWxldGVUZXh0dXJlKENhbnZh
c1RleHR1cmUqIHRleHR1cmUpCit7CisgICAgbV9jb250ZXh0LmRlbGV0ZVRleHR1cmUodGV4dHVy
ZSk7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKK30KKworUGFzc1JlZlB0
cjxDYW52YXNOdW1iZXJBcnJheT4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXQodW5zaWdu
ZWQgbG9uZyBwbmFtZSkKK3sKKyAgICBSZWZQdHI8Q2FudmFzTnVtYmVyQXJyYXk+IGFycmF5ID0g
bV9jb250ZXh0LmdldChwbmFtZSk7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNl
KTsKKyAgICByZXR1cm4gYXJyYXk7Cit9CisKK1Bhc3NSZWZQdHI8Q2FudmFzTnVtYmVyQXJyYXk+
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0QnVmZmVyUGFyYW1ldGVyKHVuc2lnbmVkIGxv
bmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lKQoreworICAgIFJlZlB0cjxDYW52YXNOdW1i
ZXJBcnJheT4gYXJyYXkgPSBtX2NvbnRleHQuZ2V0QnVmZmVyUGFyYW1ldGVyKHRhcmdldCwgcG5h
bWUpOworICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CisgICAgcmV0dXJuIGFy
cmF5OworfQorCitQYXNzUmVmUHRyPENhbnZhc051bWJlckFycmF5PiBDYW52YXNSZW5kZXJpbmdD
b250ZXh0M0Q6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcih1bnNpZ25lZCBsb25n
IHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHBuYW1lKQor
eworICAgIFJlZlB0cjxDYW52YXNOdW1iZXJBcnJheT4gYXJyYXkgPSBtX2NvbnRleHQuZ2V0RnJh
bWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKHRhcmdldCwgYXR0YWNobWVudCwgcG5hbWUpOwor
ICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CisgICAgcmV0dXJuIGFycmF5Owor
fQorCitQYXNzUmVmUHRyPENhbnZhc051bWJlckFycmF5PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0
M0Q6OmdldFByb2dyYW0oQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBwbmFt
ZSkKK3sKKyAgICBSZWZQdHI8Q2FudmFzTnVtYmVyQXJyYXk+IGFycmF5ID0gbV9jb250ZXh0Lmdl
dFByb2dyYW0ocHJvZ3JhbSwgcG5hbWUpOworICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChm
YWxzZSk7CisgICAgcmV0dXJuIGFycmF5OworfQorCitTdHJpbmcgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDNEOjpnbEdldFByb2dyYW1JbmZvTG9nKENhbnZhc1Byb2dyYW0qIHByb2dyYW0pCit7Cisg
ICAgU3RyaW5nIHMgPSBtX2NvbnRleHQuZ2xHZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKTsKKyAg
ICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworICAgIHJldHVybiBzOworfQorCitQ
YXNzUmVmUHRyPENhbnZhc051bWJlckFycmF5PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6Omdl
dFJlbmRlcmJ1ZmZlclBhcmFtZXRlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9u
ZyBwbmFtZSkKK3sKKyAgICBSZWZQdHI8Q2FudmFzTnVtYmVyQXJyYXk+IGFycmF5ID0gbV9jb250
ZXh0LmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcih0YXJnZXQsIHBuYW1lKTsKKyAgICBjbGVhbnVw
QWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworICAgIHJldHVybiBhcnJheTsKK30KKworUGFzc1Jl
ZlB0cjxDYW52YXNOdW1iZXJBcnJheT4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRTaGFk
ZXIoQ2FudmFzU2hhZGVyKiBzaGFkZXIsIHVuc2lnbmVkIGxvbmcgcG5hbWUpCit7CisgICAgUmVm
UHRyPENhbnZhc051bWJlckFycmF5PiBhcnJheSA9IG1fY29udGV4dC5nZXRTaGFkZXIoc2hhZGVy
LCBwbmFtZSk7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKKyAgICByZXR1
cm4gYXJyYXk7Cit9CisKK1N0cmluZyBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdsR2V0U2hh
ZGVySW5mb0xvZyhDYW52YXNTaGFkZXIqIHNoYWRlcikKK3sKKyAgICBTdHJpbmcgcyA9IG1fY29u
dGV4dC5nbEdldFNoYWRlckluZm9Mb2coc2hhZGVyKTsKKyAgICBjbGVhbnVwQWZ0ZXJHcmFwaGlj
c0NhbGwoZmFsc2UpOworICAgIHJldHVybiBzOworfQorCitTdHJpbmcgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEOjpnbEdldFNoYWRlclNvdXJjZShDYW52YXNTaGFkZXIqIHNoYWRlcikKK3sKKyAg
ICBTdHJpbmcgcyA9IG1fY29udGV4dC5nbEdldFNoYWRlclNvdXJjZShzaGFkZXIpOworICAgIGNs
ZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CisgICAgcmV0dXJuIHM7Cit9CisKKworUGFz
c1JlZlB0cjxDYW52YXNOdW1iZXJBcnJheT4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRU
ZXhQYXJhbWV0ZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUpCit7
CisgICAgUmVmUHRyPENhbnZhc051bWJlckFycmF5PiBhcnJheSA9IG1fY29udGV4dC5nZXRUZXhQ
YXJhbWV0ZXIodGFyZ2V0LCBwbmFtZSk7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZh
bHNlKTsKKyAgICByZXR1cm4gYXJyYXk7Cit9CisKK1Bhc3NSZWZQdHI8Q2FudmFzTnVtYmVyQXJy
YXk+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0VW5pZm9ybShDYW52YXNQcm9ncmFtKiBw
cm9ncmFtLCBsb25nIGxvY2F0aW9uLCBsb25nIHNpemUpCit7CisgICAgUmVmUHRyPENhbnZhc051
bWJlckFycmF5PiBhcnJheSA9IG1fY29udGV4dC5nZXRVbmlmb3JtKHByb2dyYW0sIGxvY2F0aW9u
LCBzaXplKTsKKyAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworICAgIHJldHVy
biBhcnJheTsKK30KKworbG9uZyBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldFVuaWZvcm1M
b2NhdGlvbihDYW52YXNQcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7Cisg
ICAgcmV0dXJuIG1fY29udGV4dC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbmFtZSk7Cit9
CisKK1Bhc3NSZWZQdHI8Q2FudmFzTnVtYmVyQXJyYXk+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RDo6Z2V0VmVydGV4QXR0cmliKHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgcG5h
bWUpCit7CisgICAgUmVmUHRyPENhbnZhc051bWJlckFycmF5PiBhcnJheSA9IG1fY29udGV4dC5n
ZXRWZXJ0ZXhBdHRyaWIoaW5kZXgsIHBuYW1lKTsKKyAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0Nh
bGwoZmFsc2UpOworICAgIHJldHVybiBhcnJheTsKK30KKworCit2b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQzRDo6dGV4SW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCBI
VE1MSW1hZ2VFbGVtZW50KiBpbWFnZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgLy8gRklY
TUU6IEZvciBub3cgd2UgaWdub3JlIGFueSBlcnJvcnMgcmV0dXJuZWQKKyAgICBlYyA9IDA7Cisg
ICAgbV9jb250ZXh0LnRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW1hZ2UpOworICAgIGNsZWFu
dXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDNEOjp0ZXhJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIEhUTUxD
YW52YXNFbGVtZW50KiBjYW52YXMsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIC8vIEZJWE1F
OiBGb3Igbm93IHdlIGlnbm9yZSBhbnkgZXJyb3JzIHJldHVybmVkCisgICAgZWMgPSAwOworICAg
IG1fY29udGV4dC50ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGNhbnZhcyk7CisgICAgY2xlYW51
cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0Q6OnRleFN1YkltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5z
aWduZWQgeG9mZiwgdW5zaWduZWQgeW9mZiwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdo
dCwgSFRNTEltYWdlRWxlbWVudCogaW1hZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIC8v
IEZJWE1FOiBGb3Igbm93IHdlIGlnbm9yZSBhbnkgZXJyb3JzIHJldHVybmVkCisgICAgZWMgPSAw
OworICAgIG1fY29udGV4dC50ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmYsIHlvZmYs
IHdpZHRoLCBoZWlnaHQsIGltYWdlKTsKKyAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFs
c2UpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dGV4U3ViSW1hZ2UyRCh1
bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZCB4b2ZmLCB1bnNpZ25lZCB5
b2ZmLCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCBIVE1MQ2FudmFzRWxlbWVudCog
Y2FudmFzLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBp
Z25vcmUgYW55IGVycm9ycyByZXR1cm5lZAorICAgIGVjID0gMDsKKyAgICBtX2NvbnRleHQudGV4
U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2ZmLCB5b2ZmLCB3aWR0aCwgaGVpZ2h0LCBjYW52
YXMpOworICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCisKSW5kZXg6IFdl
YkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmgJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMjEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9m
IEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRF9oCisjZGVmaW5lIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQzRF9oCisKKyNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250
ZXh0LmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkNhbnZhc051bWJl
ckFycmF5LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJQbGF0
Zm9ybVN0cmluZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENhbnZhc0J1ZmZl
cjsKK2NsYXNzIENhbnZhc0ZyYW1lYnVmZmVyOworY2xhc3MgQ2FudmFzT2JqZWN0OworY2xhc3Mg
Q2FudmFzUHJvZ3JhbTsKK2NsYXNzIENhbnZhc1JlbmRlcmJ1ZmZlcjsKK2NsYXNzIENhbnZhc1No
YWRlcjsKK2NsYXNzIENhbnZhc1RleHR1cmU7CitjbGFzcyBIVE1MSW1hZ2VFbGVtZW50OworY2xh
c3MgV2ViS2l0Q1NTTWF0cml4OworCisgICAgY2xhc3MgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
IDogcHVibGljIENhbnZhc1JlbmRlcmluZ0NvbnRleHQgeworICAgIHB1YmxpYzoKKyAgICAgICAg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKEhUTUxDYW52YXNFbGVtZW50Kik7CisgICAgICAgIH5D
YW52YXNSZW5kZXJpbmdDb250ZXh0M0QoKTsKKworICAgICAgICB2aXJ0dWFsIGJvb2wgaXMzZCgp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgICAgICB2b2lkIGdsQWN0aXZlVGV4dHVyZSh1
bnNpZ25lZCBsb25nIHRleHR1cmUpOworICAgICAgICB2b2lkIGdsQXR0YWNoU2hhZGVyKENhbnZh
c1Byb2dyYW0qLCBDYW52YXNTaGFkZXIqKTsKKyAgICAgICAgdm9pZCBnbEJpbmRBdHRyaWJMb2Nh
dGlvbihDYW52YXNQcm9ncmFtKiwgdW5zaWduZWQgbG9uZyBpbmRleCwgY29uc3QgU3RyaW5nJiBu
YW1lKTsKKyAgICAgICAgdm9pZCBnbEJpbmRCdWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIENh
bnZhc0J1ZmZlciopOworICAgICAgICB2b2lkIGdsQmluZEZyYW1lYnVmZmVyKHVuc2lnbmVkIGxv
bmcgdGFyZ2V0LCBDYW52YXNGcmFtZWJ1ZmZlciopOworICAgICAgICB2b2lkIGdsQmluZFJlbmRl
cmJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgQ2FudmFzUmVuZGVyYnVmZmVyKik7CisgICAg
ICAgIHZvaWQgZ2xCaW5kVGV4dHVyZSh1bnNpZ25lZCB0YXJnZXQsIENhbnZhc1RleHR1cmUqKTsK
KyAgICAgICAgdm9pZCBnbEJsZW5kQ29sb3IoZG91YmxlIHJlZCwgZG91YmxlIGdyZWVuLCBkb3Vi
bGUgYmx1ZSwgZG91YmxlIGFscGhhKTsKKyAgICAgICAgdm9pZCBnbEJsZW5kRXF1YXRpb24oIHVu
c2lnbmVkIGxvbmcgbW9kZSApOworICAgICAgICB2b2lkIGdsQmxlbmRFcXVhdGlvblNlcGFyYXRl
KHVuc2lnbmVkIGxvbmcgbW9kZVJHQiwgdW5zaWduZWQgbG9uZyBtb2RlQWxwaGEpOworICAgICAg
ICB2b2lkIGdsQmxlbmRGdW5jKHVuc2lnbmVkIGxvbmcgc2ZhY3RvciwgdW5zaWduZWQgbG9uZyBk
ZmFjdG9yKTsKKyAgICAgICAgdm9pZCBnbEJsZW5kRnVuY1NlcGFyYXRlKHVuc2lnbmVkIGxvbmcg
c3JjUkdCLCB1bnNpZ25lZCBsb25nIGRzdFJHQiwgdW5zaWduZWQgbG9uZyBzcmNBbHBoYSwgdW5z
aWduZWQgbG9uZyBkc3RBbHBoYSk7CisgICAgICAgIHZvaWQgZ2xCdWZmZXJEYXRhKHVuc2lnbmVk
IGxvbmcgdGFyZ2V0LCBDYW52YXNOdW1iZXJBcnJheSosIHVuc2lnbmVkIGxvbmcgdXNhZ2UpOwor
ICAgICAgICB2b2lkIGdsQnVmZmVyU3ViRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBv
ZmZzZXQsIENhbnZhc051bWJlckFycmF5Kik7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgZ2xDaGVj
a0ZyYW1lYnVmZmVyU3RhdHVzKENhbnZhc0ZyYW1lYnVmZmVyKik7CisgICAgICAgIHZvaWQgZ2xD
bGVhcih1bnNpZ25lZCBsb25nIG1hc2spOworICAgICAgICB2b2lkIGdsQ2xlYXJDb2xvcihkb3Vi
bGUgcmVkLCBkb3VibGUgZ3JlZW4sIGRvdWJsZSBibHVlLCBkb3VibGUgYWxwaGEpOworICAgICAg
ICB2b2lkIGdsQ2xlYXJEZXB0aChkb3VibGUpOworICAgICAgICB2b2lkIGdsQ2xlYXJTdGVuY2ls
KGxvbmcpOworICAgICAgICB2b2lkIGdsQ29sb3JNYXNrKGJvb2wgcmVkLCBib29sIGdyZWVuLCBi
b29sIGJsdWUsIGJvb2wgYWxwaGEpOworICAgICAgICB2b2lkIGdsQ29tcGlsZVNoYWRlcihDYW52
YXNTaGFkZXIqKTsKKyAgICAgICAgCisgICAgICAgIC8vdm9pZCBnbENvbXByZXNzZWRUZXhJbWFn
ZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIGxldmVsLCB1bnNpZ25lZCBsb25nIGludGVy
bmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCwgbG9u
ZyBib3JkZXIsIHVuc2lnbmVkIGxvbmcgaW1hZ2VTaXplLCBjb25zdCB2b2lkKiBkYXRhKTsKKyAg
ICAgICAgLy92b2lkIGdsQ29tcHJlc3NlZFRleFN1YkltYWdlMkQodW5zaWduZWQgbG9uZyB0YXJn
ZXQsIGxvbmcgbGV2ZWwsIGxvbmcgeG9mZnNldCwgbG9uZyB5b2Zmc2V0LCB1bnNpZ25lZCBsb25n
IHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCwgdW5zaWduZWQgbG9uZyBmb3JtYXQsIHVuc2ln
bmVkIGxvbmcgaW1hZ2VTaXplLCBjb25zdCB2b2lkKiBkYXRhKTsKKyAgICAgICAgCisgICAgICAg
IHZvaWQgZ2xDb3B5VGV4SW1hZ2UyRCh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBsZXZlbCwg
dW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgbG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxv
bmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCBsb25nIGJvcmRlcik7CisgICAgICAgIHZv
aWQgZ2xDb3B5VGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBsZXZlbCwg
bG9uZyB4b2Zmc2V0LCBsb25nIHlvZmZzZXQsIGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25n
IHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCk7CisgICAgICAgIHZvaWQgZ2xDdWxsRmFjZSh1
bnNpZ25lZCBsb25nIG1vZGUpOworICAgICAgICB2b2lkIGdsRGVwdGhGdW5jKHVuc2lnbmVkIGxv
bmcpOworICAgICAgICB2b2lkIGdsRGVwdGhNYXNrKGJvb2wpOworICAgICAgICB2b2lkIGdsRGVw
dGhSYW5nZShkb3VibGUgek5lYXIsIGRvdWJsZSB6RmFyKTsKKyAgICAgICAgdm9pZCBnbERldGFj
aFNoYWRlcihDYW52YXNQcm9ncmFtKiwgQ2FudmFzU2hhZGVyKik7CisgICAgICAgIHZvaWQgZ2xE
aXNhYmxlKHVuc2lnbmVkIGxvbmcgY2FwKTsKKyAgICAgICAgdm9pZCBnbERpc2FibGVWZXJ0ZXhB
dHRyaWJBcnJheSh1bnNpZ25lZCBsb25nIGluZGV4KTsKKyAgICAgICAgdm9pZCBnbERyYXdBcnJh
eXModW5zaWduZWQgbG9uZyBtb2RlLCBsb25nIGZpcnN0LCB1bnNpZ25lZCBsb25nIGNvdW50KTsK
KyAgICAgICAgdm9pZCBnbERyYXdFbGVtZW50cyh1bnNpZ25lZCBsb25nIG1vZGUsIHVuc2lnbmVk
IGxvbmcgY291bnQsIHVuc2lnbmVkIGxvbmcgdHlwZSwgdm9pZCogYXJyYXkpOworICAgICAgICB2
b2lkIGdsRW5hYmxlKHVuc2lnbmVkIGxvbmcgY2FwKTsKKyAgICAgICAgdm9pZCBnbEVuYWJsZVZl
cnRleEF0dHJpYkFycmF5KHVuc2lnbmVkIGxvbmcgaW5kZXgpOworICAgICAgICB2b2lkIGdsRmlu
aXNoKCk7CisgICAgICAgIHZvaWQgZ2xGbHVzaCgpOworICAgICAgICB2b2lkIGdsRnJhbWVidWZm
ZXJSZW5kZXJidWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNo
bWVudCwgdW5zaWduZWQgbG9uZyByZW5kZXJidWZmZXJ0YXJnZXQsIENhbnZhc1JlbmRlcmJ1ZmZl
ciopOworICAgICAgICB2b2lkIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQodW5zaWduZWQgbG9uZyB0
YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyB0ZXh0YXJnZXQs
IENhbnZhc1RleHR1cmUqLCBsb25nIGxldmVsKTsKKyAgICAgICAgdm9pZCBnbEZyb250RmFjZSh1
bnNpZ25lZCBsb25nIG1vZGUpOworICAgICAgICB2b2lkIGdsR2VuZXJhdGVNaXBtYXAodW5zaWdu
ZWQgbG9uZyB0YXJnZXQpOworICAgICAgICAKKyAgICAgICAgaW50ICBnbEdldEF0dHJpYkxvY2F0
aW9uKENhbnZhc1Byb2dyYW0qLCBjb25zdCBTdHJpbmcmIG5hbWUpOworICAgICAgICB1bnNpZ25l
ZCBsb25nIGdsR2V0RXJyb3IoKTsKKyAgICAgICAgU3RyaW5nIGdsR2V0U3RyaW5nKHVuc2lnbmVk
IGxvbmcgbmFtZSk7CisgICAgICAgIHZvaWQgZ2xIaW50KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1
bnNpZ25lZCBsb25nIG1vZGUpOworICAgICAgICBib29sIGdsSXNCdWZmZXIoQ2FudmFzQnVmZmVy
Kik7CisgICAgICAgIGJvb2wgZ2xJc0VuYWJsZWQodW5zaWduZWQgbG9uZyBjYXApOworICAgICAg
ICBib29sIGdsSXNGcmFtZWJ1ZmZlcihDYW52YXNGcmFtZWJ1ZmZlciopOworICAgICAgICBib29s
IGdsSXNQcm9ncmFtKENhbnZhc1Byb2dyYW0qKTsKKyAgICAgICAgYm9vbCBnbElzUmVuZGVyYnVm
ZmVyKENhbnZhc1JlbmRlcmJ1ZmZlciopOworICAgICAgICBib29sIGdsSXNTaGFkZXIoQ2FudmFz
U2hhZGVyKik7CisgICAgICAgIGJvb2wgZ2xJc1RleHR1cmUoQ2FudmFzVGV4dHVyZSopOworICAg
ICAgICB2b2lkIGdsTGluZVdpZHRoKGRvdWJsZSk7CisgICAgICAgIHZvaWQgZ2xMaW5rUHJvZ3Jh
bShDYW52YXNQcm9ncmFtKik7CisgICAgICAgIHZvaWQgZ2xQaXhlbFN0b3JlaSh1bnNpZ25lZCBs
b25nIHBuYW1lLCBsb25nIHBhcmFtKTsKKyAgICAgICAgdm9pZCBnbFBvbHlnb25PZmZzZXQoZG91
YmxlIGZhY3RvciwgZG91YmxlIHVuaXRzKTsKKyAgICAgICAgCisgICAgICAgIC8vdm9pZCBnbFJl
YWRQaXhlbHMobG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxv
bmcgaGVpZ2h0LCB1bnNpZ25lZCBsb25nIGZvcm1hdCwgdW5zaWduZWQgbG9uZyB0eXBlLCB2b2lk
KiBwaXhlbHMpOworICAgICAgICAKKyAgICAgICAgdm9pZCBnbFJlbGVhc2VTaGFkZXJDb21waWxl
cigpOworICAgICAgICB2b2lkIGdsUmVuZGVyYnVmZmVyU3RvcmFnZSh1bnNpZ25lZCBsb25nIHRh
cmdldCwgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgbG9uZyB3aWR0aCwg
dW5zaWduZWQgbG9uZyBoZWlnaHQpOworICAgICAgICB2b2lkIGdsU2FtcGxlQ292ZXJhZ2UoZG91
YmxlIHZhbHVlLCBib29sIGludmVydCk7CisgICAgICAgIHZvaWQgZ2xTY2lzc29yKGxvbmcgeCwg
bG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCk7CisgICAg
ICAgIHZvaWQgZ2xTaGFkZXJTb3VyY2UoQ2FudmFzU2hhZGVyKiwgY29uc3QgU3RyaW5nJik7Cisg
ICAgICAgIHZvaWQgZ2xTdGVuY2lsRnVuYyh1bnNpZ25lZCBsb25nIGZ1bmMsIGxvbmcgcmVmLCB1
bnNpZ25lZCBsb25nIG1hc2spOworICAgICAgICB2b2lkIGdsU3RlbmNpbEZ1bmNTZXBhcmF0ZSh1
bnNpZ25lZCBsb25nIGZhY2UsIHVuc2lnbmVkIGxvbmcgZnVuYywgbG9uZyByZWYsIHVuc2lnbmVk
IGxvbmcgbWFzayk7CisgICAgICAgIHZvaWQgZ2xTdGVuY2lsTWFzayh1bnNpZ25lZCBsb25nKTsK
KyAgICAgICAgdm9pZCBnbFN0ZW5jaWxNYXNrU2VwYXJhdGUodW5zaWduZWQgbG9uZyBmYWNlLCB1
bnNpZ25lZCBsb25nIG1hc2spOworICAgICAgICB2b2lkIGdsU3RlbmNpbE9wKHVuc2lnbmVkIGxv
bmcgZmFpbCwgdW5zaWduZWQgbG9uZyB6ZmFpbCwgdW5zaWduZWQgbG9uZyB6cGFzcyk7CisgICAg
ICAgIHZvaWQgZ2xTdGVuY2lsT3BTZXBhcmF0ZSh1bnNpZ25lZCBsb25nIGZhY2UsIHVuc2lnbmVk
IGxvbmcgZmFpbCwgdW5zaWduZWQgbG9uZyB6ZmFpbCwgdW5zaWduZWQgbG9uZyB6cGFzcyk7Cisg
ICAgICAgIHZvaWQgZ2xUZXhQYXJhbWV0ZXIodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBwbmFt
ZSwgQ2FudmFzTnVtYmVyQXJyYXkqKTsKKyAgICAgICAgdm9pZCBnbFRleFBhcmFtZXRlcih1bnNp
Z25lZCB0YXJnZXQsIHVuc2lnbmVkIHBuYW1lLCBkb3VibGUgdmFsdWUpOworICAgICAgICB2b2lk
IGdsVW5pZm9ybShsb25nIGxvY2F0aW9uLCBmbG9hdCB2MCk7CisgICAgICAgIHZvaWQgZ2xVbmlm
b3JtKGxvbmcgbG9jYXRpb24sIGZsb2F0IHYwLCBmbG9hdCB2MSk7CisgICAgICAgIHZvaWQgZ2xV
bmlmb3JtKGxvbmcgbG9jYXRpb24sIGZsb2F0IHYwLCBmbG9hdCB2MSwgZmxvYXQgdjIpOworICAg
ICAgICB2b2lkIGdsVW5pZm9ybShsb25nIGxvY2F0aW9uLCBmbG9hdCB2MCwgZmxvYXQgdjEsIGZs
b2F0IHYyLCBmbG9hdCB2Myk7CisgICAgICAgIHZvaWQgZ2xVbmlmb3JtKGxvbmcgbG9jYXRpb24s
IGludCB2MCk7CisgICAgICAgIHZvaWQgZ2xVbmlmb3JtKGxvbmcgbG9jYXRpb24sIGludCB2MCwg
aW50IHYxKTsKKyAgICAgICAgdm9pZCBnbFVuaWZvcm0obG9uZyBsb2NhdGlvbiwgaW50IHYwLCBp
bnQgdjEsIGludCB2Mik7CisgICAgICAgIHZvaWQgZ2xVbmlmb3JtKGxvbmcgbG9jYXRpb24sIGlu
dCB2MCwgaW50IHYxLCBpbnQgdjIsIGludCB2Myk7CisgICAgICAgIHZvaWQgZ2xVbmlmb3JtKGxv
bmcgbG9jYXRpb24sIENhbnZhc051bWJlckFycmF5Kik7CisgICAgICAgIHZvaWQgZ2xVbmlmb3Jt
TWF0cml4KGxvbmcgbG9jYXRpb24sIGxvbmcgY291bnQsIGJvb2wgdHJhbnNwb3NlLCBDYW52YXNO
dW1iZXJBcnJheSopOworICAgICAgICB2b2lkIGdsVW5pZm9ybU1hdHJpeChsb25nIGxvY2F0aW9u
LCBib29sIHRyYW5zcG9zZSwgY29uc3QgVmVjdG9yPFdlYktpdENTU01hdHJpeCo+Jik7CisgICAg
ICAgIHZvaWQgZ2xVbmlmb3JtTWF0cml4KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBj
b25zdCBXZWJLaXRDU1NNYXRyaXgqKTsKKyAgICAgICAgdm9pZCBnbFVzZVByb2dyYW0oQ2FudmFz
UHJvZ3JhbSopOworICAgICAgICB2b2lkIGdsVmFsaWRhdGVQcm9ncmFtKENhbnZhc1Byb2dyYW0q
KTsKKyAgICAgICAgdm9pZCBnbFZlcnRleEF0dHJpYih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0
IHYwKTsKKyAgICAgICAgdm9pZCBnbFZlcnRleEF0dHJpYih1bnNpZ25lZCBsb25nIGluZHgsIGZs
b2F0IHYwLCBmbG9hdCB2MSk7CisgICAgICAgIHZvaWQgZ2xWZXJ0ZXhBdHRyaWIodW5zaWduZWQg
bG9uZyBpbmR4LCBmbG9hdCB2MCwgZmxvYXQgdjEsIGZsb2F0IHYyKTsKKyAgICAgICAgdm9pZCBn
bFZlcnRleEF0dHJpYih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHYwLCBmbG9hdCB2MSwgZmxv
YXQgdjIsIGZsb2F0IHYzKTsKKyAgICAgICAgdm9pZCBnbFZlcnRleEF0dHJpYih1bnNpZ25lZCBs
b25nIGluZHgsIENhbnZhc051bWJlckFycmF5Kik7CisgICAgICAgIHZvaWQgZ2xWZXJ0ZXhBdHRy
aWJQb2ludGVyKHVuc2lnbmVkIGxvbmcgaW5keCwgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIHR5
cGUsIGJvb2wgbm9ybWFsaXplZCwgdW5zaWduZWQgbG9uZyBzdHJpZGUsIENhbnZhc051bWJlckFy
cmF5Kik7CisgICAgICAgIHZvaWQgZ2xWaWV3cG9ydChsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQg
bG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpOworCisgICAgICAgIC8vIE5vbi1HTCBm
dW5jdGlvbnMKKyAgICAgICAgUGFzc1JlZlB0cjxDYW52YXNCdWZmZXI+IGNyZWF0ZUJ1ZmZlcigp
OworICAgICAgICBQYXNzUmVmUHRyPENhbnZhc0ZyYW1lYnVmZmVyPiBjcmVhdGVGcmFtZWJ1ZmZl
cigpOworICAgICAgICBQYXNzUmVmUHRyPENhbnZhc1Byb2dyYW0+IGNyZWF0ZVByb2dyYW0oKTsg
ICAgICAgICAgICAgICAgICAgICAvLyByZXBsYWNlcyBnbENyZWF0ZVByb2dyYW0KKyAgICAgICAg
UGFzc1JlZlB0cjxDYW52YXNSZW5kZXJidWZmZXI+IGNyZWF0ZVJlbmRlcmJ1ZmZlcigpOworICAg
ICAgICBQYXNzUmVmUHRyPENhbnZhc1NoYWRlcj4gY3JlYXRlU2hhZGVyKHVuc2lnbmVkIGxvbmcg
dHlwZSk7ICAvLyByZXBsYWNlcyBnbENyZWF0ZVNoYWRlcgorICAgICAgICBQYXNzUmVmUHRyPENh
bnZhc1RleHR1cmU+IGNyZWF0ZVRleHR1cmUoKTsKKworICAgICAgICB2b2lkIGRlbGV0ZUJ1ZmZl
cihDYW52YXNCdWZmZXIqKTsgICAgICAgICAgICAgICAgLy8gcmVwbGFjZXMgZ2xEZWxldGVCdWZm
ZXJzCisgICAgICAgIHZvaWQgZGVsZXRlRnJhbWVidWZmZXIoQ2FudmFzRnJhbWVidWZmZXIqKTsg
ICAgICAvLyByZXBsYWNlcyBnbERlbGV0ZUZyYW1lYnVmZmVycworICAgICAgICB2b2lkIGRlbGV0
ZVByb2dyYW0oQ2FudmFzUHJvZ3JhbSopOyAgICAgICAgICAgICAgLy8gcmVwbGFjZXMgZ2xEZWxl
dGVQcm9ncmFtCisgICAgICAgIHZvaWQgZGVsZXRlUmVuZGVyYnVmZmVyKENhbnZhc1JlbmRlcmJ1
ZmZlciopOyAgICAvLyByZXBsYWNlcyBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMKKyAgICAgICAgdm9p
ZCBkZWxldGVTaGFkZXIoQ2FudmFzU2hhZGVyKik7ICAgICAgICAgICAgICAgIC8vIHJlcGxhY2Vz
IGdsRGVsZXRlU2hhZGVyCisgICAgICAgIHZvaWQgZGVsZXRlVGV4dHVyZShDYW52YXNUZXh0dXJl
Kik7ICAgICAgICAgICAgICAvLyByZXBsYWNlcyBnbERlbGV0ZVRleHR1cmVzCisgICAgICAgIAor
ICAgICAgICBQYXNzUmVmUHRyPENhbnZhc051bWJlckFycmF5PiBnZXQodW5zaWduZWQgbG9uZyBw
bmFtZSk7ICAgICAgLy8gcmVwbGFjZXMgZ2xHZXRCb29sZWFudgorICAgICAgICBQYXNzUmVmUHRy
PENhbnZhc051bWJlckFycmF5PiBnZXRCdWZmZXJQYXJhbWV0ZXIodW5zaWduZWQgbG9uZyB0YXJn
ZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUpOyAvLyByZXBsYWNlcyBnbEdldEJ1ZmZlclBhcmFtZXRl
cml2CisgICAgICAgIFBhc3NSZWZQdHI8Q2FudmFzTnVtYmVyQXJyYXk+IGdldEZyYW1lYnVmZmVy
QXR0YWNobWVudFBhcmFtZXRlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBh
dHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHBuYW1lKTsgLy8gcmVwbGFjZXMgZ2xHZXRGcmFtZWJ1
ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdgorICAgICAgICBQYXNzUmVmUHRyPENhbnZhc051bWJl
ckFycmF5PiBnZXRQcm9ncmFtKENhbnZhc1Byb2dyYW0qLCB1bnNpZ25lZCBsb25nIHBuYW1lKTsg
Ly8gcmVwbGFjZXMgZ2xHZXRQcm9ncmFtaXYKKyAgICAgICAgU3RyaW5nIGdsR2V0UHJvZ3JhbUlu
Zm9Mb2coQ2FudmFzUHJvZ3JhbSopOyAvLyByZXBsYWNlcyBnbEdldFByb2dyYW1JbmZvTG9nCisg
ICAgICAgIFBhc3NSZWZQdHI8Q2FudmFzTnVtYmVyQXJyYXk+IGdldFJlbmRlcmJ1ZmZlclBhcmFt
ZXRlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSk7IC8vIHJlcGxh
Y2VzIGdsR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYKKyAgICAgICAgUGFzc1JlZlB0cjxDYW52
YXNOdW1iZXJBcnJheT4gZ2V0U2hhZGVyKENhbnZhc1NoYWRlciosIHVuc2lnbmVkIGxvbmcgcG5h
bWUpOyAvLyByZXBsYWNlcyBnbEdldFNoYWRlcml2CisgICAgICAgIFN0cmluZyBnbEdldFNoYWRl
ckluZm9Mb2coQ2FudmFzU2hhZGVyKik7CisgICAgICAgIFN0cmluZyBnbEdldFNoYWRlclNvdXJj
ZShDYW52YXNTaGFkZXIqKTsKKworICAgICAgICBQYXNzUmVmUHRyPENhbnZhc051bWJlckFycmF5
PiBnZXRUZXhQYXJhbWV0ZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5h
bWUpOyAvLyByZXBsYWNlcyBnbEdldFRleFBhcmFtZXRlcmZ2CisgICAgICAgIFBhc3NSZWZQdHI8
Q2FudmFzTnVtYmVyQXJyYXk+IGdldFVuaWZvcm0oQ2FudmFzUHJvZ3JhbSosIGxvbmcgbG9jYXRp
b24sIGxvbmcgc2l6ZSk7IC8vIHJlcGxhY2VzIGdsR2V0VW5pZm9ybWZ2CisgICAgICAgIGxvbmcg
Z2V0VW5pZm9ybUxvY2F0aW9uKENhbnZhc1Byb2dyYW0qLCBjb25zdCBTdHJpbmcmIG5hbWUpOyAv
LyByZXBsYWNlcyBnbEdldFVuaWZvcm1Mb2NhdGlvbgorICAgICAgICBQYXNzUmVmUHRyPENhbnZh
c051bWJlckFycmF5PiBnZXRWZXJ0ZXhBdHRyaWIodW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWdu
ZWQgbG9uZyBwbmFtZSk7IC8vIHJlcGxhY2VzIGdsR2V0VmVydGV4QXR0cmliZnYKKyAgICAgICAg
CisgICAgICAgIHZvaWQgdGV4SW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVs
LCBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZSwgRXhjZXB0aW9uQ29kZSYpOworICAgICAgICB2b2lk
IHRleEltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgSFRNTENhbnZhc0Vs
ZW1lbnQqIGNhbnZhcywgRXhjZXB0aW9uQ29kZSYpOworICAgICAgICB2b2lkIHRleFN1YkltYWdl
MkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgeG9mZiwgdW5zaWdu
ZWQgeW9mZiwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgSFRNTEltYWdlRWxlbWVu
dCogaW1hZ2UsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgdm9pZCB0ZXhTdWJJbWFnZTJEKHVu
c2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIHhvZmYsIHVuc2lnbmVkIHlv
ZmYsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIEhUTUxDYW52YXNFbGVtZW50KiBj
YW52YXMsIEV4Y2VwdGlvbkNvZGUmKTsKKworICAgICAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dDNEIGNvbnRleHQzRCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dC5jb250ZXh0M0QoKTsgfQor
ICAgICAgICBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUzRCgpIGNvbnN0IHsgcmV0dXJuIG1fY29u
dGV4dC50ZXh0dXJlM0QoKTsgfQorICAgIAorICAgICAgICB2b2lkIHJlc2hhcGUoaW50IHdpZHRo
LCBpbnQgaGVpZ2h0KTsKKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBtYXJr
Q29udGV4dENoYW5nZWQoKTsKKyAgICAgICAgdm9pZCBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwo
Ym9vbCBjaGFuZ2VkKQorICAgICAgICB7CisgICAgICAgICAgICBtX2NvbnRleHQuY2hlY2tFcnJv
cigpOworICAgICAgICAgICAgaWYgKGNoYW5nZWQpCisgICAgICAgICAgICAgICAgbWFya0NvbnRl
eHRDaGFuZ2VkKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEdyYXBoaWNzQ29udGV4
dDNEIG1fY29udGV4dDsKKyAgICAgICAgYm9vbCBtX25lZWRzVXBkYXRlOworICAgIH07CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL2h0bWwvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDNELmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDNELmlkbAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvaHRtbC9DYW52
YXNSZW5kZXJpbmdDb250ZXh0M0QuaWRsCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU5OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21w
dXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
KyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
bW9kdWxlIGh0bWwgeworCisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9M0Rf
Q0FOVkFTLAorICAgICAgICBHZW5lcmF0ZUNvbnN0cnVjdG9yLAorICAgICAgICBJbnRlcmZhY2VV
VUlEPTk4ZmI0OGFlLTcyMTYtNDg5Yy04NjJiLThlMTIxN2ZjNDQ0MywKKyAgICAgICAgSW1wbGVt
ZW50YXRpb25VVUlEPWFiNGYwNzgxLTE1MmYtNDUwZS05NTQ2LTViMzk4NzQ5MWE1NAorICAgIF0g
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEIHsKKworICAgICAgICAvKiBDbGVhckJ1ZmZlck1hc2sg
Ki8KKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0RFUFRIX0JVRkZFUl9CSVQgICAgICAg
ICAgICAgICA9IDB4MDAwMDAxMDA7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9TVEVO
Q0lMX0JVRkZFUl9CSVQgICAgICAgICAgICAgPSAweDAwMDAwNDAwOworICAgICAgICBjb25zdCB1
bnNpZ25lZCBpbnQgR0xfQ09MT1JfQlVGRkVSX0JJVCAgICAgICAgICAgICAgID0gMHgwMDAwNDAw
MDsKKworICAgICAgICAvKiBCb29sZWFuICovCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBH
TF9GQUxTRSAgICAgICAgICAgICAgICAgICAgICAgICAgPSAwOworICAgICAgICBjb25zdCB1bnNp
Z25lZCBpbnQgR0xfVFJVRSAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMTsKKworICAgICAg
ICAvKiBCZWdpbk1vZGUgKi8KKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX1BPSU5UUyAg
ICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQg
aW50IEdMX0xJTkVTICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMTsKKyAgICAgICAg
Y29uc3QgdW5zaWduZWQgaW50IEdMX0xJTkVfTE9PUCAgICAgICAgICAgICAgICAgICAgICA9IDB4
MDAwMjsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0xJTkVfU1RSSVAgICAgICAgICAg
ICAgICAgICAgICA9IDB4MDAwMzsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX1RSSUFO
R0xFUyAgICAgICAgICAgICAgICAgICAgICA9IDB4MDAwNDsKKyAgICAgICAgY29uc3QgdW5zaWdu
ZWQgaW50IEdMX1RSSUFOR0xFX1NUUklQICAgICAgICAgICAgICAgICA9IDB4MDAwNTsKKyAgICAg
ICAgY29uc3QgdW5zaWduZWQgaW50IEdMX1RSSUFOR0xFX0ZBTiAgICAgICAgICAgICAgICAgICA9
IDB4MDAwNjsKKworICAgICAgICAvKiBBbHBoYUZ1bmN0aW9uIChub3Qgc3VwcG9ydGVkIGluIEVT
MjApICovCisgICAgICAgIC8qICAgICAgR0xfTkVWRVIgKi8KKyAgICAgICAgLyogICAgICBHTF9M
RVNTICovCisgICAgICAgIC8qICAgICAgR0xfRVFVQUwgKi8KKyAgICAgICAgLyogICAgICBHTF9M
RVFVQUwgKi8KKyAgICAgICAgLyogICAgICBHTF9HUkVBVEVSICovCisgICAgICAgIC8qICAgICAg
R0xfTk9URVFVQUwgKi8KKyAgICAgICAgLyogICAgICBHTF9HRVFVQUwgKi8KKyAgICAgICAgLyog
ICAgICBHTF9BTFdBWVMgKi8KKworICAgICAgICAvKiBCbGVuZGluZ0ZhY3RvckRlc3QgKi8KKyAg
ICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX1pFUk8gICAgICAgICAgICAgICAgICAgICAgICAg
ICA9IDA7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9PTkUgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPSAxOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfU1JDX0NPTE9S
ICAgICAgICAgICAgICAgICAgICAgID0gMHgwMzAwOworICAgICAgICBjb25zdCB1bnNpZ25lZCBp
bnQgR0xfT05FX01JTlVTX1NSQ19DT0xPUiAgICAgICAgICAgID0gMHgwMzAxOworICAgICAgICBj
b25zdCB1bnNpZ25lZCBpbnQgR0xfU1JDX0FMUEhBICAgICAgICAgICAgICAgICAgICAgID0gMHgw
MzAyOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfT05FX01JTlVTX1NSQ19BTFBIQSAg
ICAgICAgICAgID0gMHgwMzAzOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfRFNUX0FM
UEhBICAgICAgICAgICAgICAgICAgICAgID0gMHgwMzA0OworICAgICAgICBjb25zdCB1bnNpZ25l
ZCBpbnQgR0xfT05FX01JTlVTX0RTVF9BTFBIQSAgICAgICAgICAgID0gMHgwMzA1OworCisgICAg
ICAgIC8qIEJsZW5kaW5nRmFjdG9yU3JjICovCisgICAgICAgIC8qICAgICAgR0xfWkVSTyAqLwor
ICAgICAgICAvKiAgICAgIEdMX09ORSAqLworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xf
RFNUX0NPTE9SICAgICAgICAgICAgICAgICAgICAgID0gMHgwMzA2OworICAgICAgICBjb25zdCB1
bnNpZ25lZCBpbnQgR0xfT05FX01JTlVTX0RTVF9DT0xPUiAgICAgICAgICAgID0gMHgwMzA3Owor
ICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfU1JDX0FMUEhBX1NBVFVSQVRFICAgICAgICAg
ICAgID0gMHgwMzA4OworICAgICAgICAvKiAgICAgIEdMX1NSQ19BTFBIQSAqLworICAgICAgICAv
KiAgICAgIEdMX09ORV9NSU5VU19TUkNfQUxQSEEgKi8KKyAgICAgICAgLyogICAgICBHTF9EU1Rf
QUxQSEEgKi8KKyAgICAgICAgLyogICAgICBHTF9PTkVfTUlOVVNfRFNUX0FMUEhBICovCisKKyAg
ICAgICAgLyogQmxlbmRFcXVhdGlvblNlcGFyYXRlICovCisgICAgICAgIGNvbnN0IHVuc2lnbmVk
IGludCBHTF9GVU5DX0FERCAgICAgICAgICAgICAgICAgICAgICAgPSAweDgwMDY7CisgICAgICAg
IGNvbnN0IHVuc2lnbmVkIGludCBHTF9CTEVORF9FUVVBVElPTiAgICAgICAgICAgICAgICAgPSAw
eDgwMDk7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9CTEVORF9FUVVBVElPTl9SR0Ig
ICAgICAgICAgICAgPSAweDgwMDk7ICAgLyogc2FtZSBhcyBCTEVORF9FUVVBVElPTiAqLworICAg
ICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfQkxFTkRfRVFVQVRJT05fQUxQSEEgICAgICAgICAg
ID0gMHg4ODNEOworCisgICAgICAgIC8qIEJsZW5kU3VidHJhY3QgKi8KKyAgICAgICAgY29uc3Qg
dW5zaWduZWQgaW50IEdMX0ZVTkNfU1VCVFJBQ1QgICAgICAgICAgICAgICAgICA9IDB4ODAwQTsK
KyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0ZVTkNfUkVWRVJTRV9TVUJUUkFDVCAgICAg
ICAgICA9IDB4ODAwQjsKKworICAgICAgICAvKiBTZXBhcmF0ZSBCbGVuZCBGdW5jdGlvbnMgKi8K
KyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0JMRU5EX0RTVF9SR0IgICAgICAgICAgICAg
ICAgICA9IDB4ODBDODsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0JMRU5EX1NSQ19S
R0IgICAgICAgICAgICAgICAgICA9IDB4ODBDOTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50
IEdMX0JMRU5EX0RTVF9BTFBIQSAgICAgICAgICAgICAgICA9IDB4ODBDQTsKKyAgICAgICAgY29u
c3QgdW5zaWduZWQgaW50IEdMX0JMRU5EX1NSQ19BTFBIQSAgICAgICAgICAgICAgICA9IDB4ODBD
QjsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0NPTlNUQU5UX0NPTE9SICAgICAgICAg
ICAgICAgICA9IDB4ODAwMTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX09ORV9NSU5V
U19DT05TVEFOVF9DT0xPUiAgICAgICA9IDB4ODAwMjsKKyAgICAgICAgY29uc3QgdW5zaWduZWQg
aW50IEdMX0NPTlNUQU5UX0FMUEhBICAgICAgICAgICAgICAgICA9IDB4ODAwMzsKKyAgICAgICAg
Y29uc3QgdW5zaWduZWQgaW50IEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQSAgICAgICA9IDB4
ODAwNDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0JMRU5EX0NPTE9SICAgICAgICAg
ICAgICAgICAgICA9IDB4ODAwNTsKKworICAgICAgICAvKiBCdWZmZXIgT2JqZWN0cyAqLworICAg
ICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfQVJSQVlfQlVGRkVSICAgICAgICAgICAgICAgICAg
ID0gMHg4ODkyOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfRUxFTUVOVF9BUlJBWV9C
VUZGRVIgICAgICAgICAgID0gMHg4ODkzOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xf
QVJSQVlfQlVGRkVSX0JJTkRJTkcgICAgICAgICAgID0gMHg4ODk0OworICAgICAgICBjb25zdCB1
bnNpZ25lZCBpbnQgR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORyAgID0gMHg4ODk1Owor
CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9TVFJFQU1fRFJBVyAgICAgICAgICAgICAg
ICAgICAgPSAweDg4RTA7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9TVEFUSUNfRFJB
VyAgICAgICAgICAgICAgICAgICAgPSAweDg4RTQ7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGlu
dCBHTF9EWU5BTUlDX0RSQVcgICAgICAgICAgICAgICAgICAgPSAweDg4RTg7CisKKyAgICAgICAg
Y29uc3QgdW5zaWduZWQgaW50IEdMX0JVRkZFUl9TSVpFICAgICAgICAgICAgICAgICAgICA9IDB4
ODc2NDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0JVRkZFUl9VU0FHRSAgICAgICAg
ICAgICAgICAgICA9IDB4ODc2NTsKKworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfQ1VS
UkVOVF9WRVJURVhfQVRUUklCICAgICAgICAgID0gMHg4NjI2OworCisgICAgICAgIC8qIEN1bGxG
YWNlTW9kZSAqLworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfRlJPTlQgICAgICAgICAg
ICAgICAgICAgICAgICAgID0gMHgwNDA0OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xf
QkFDSyAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwNDA1OworICAgICAgICBjb25zdCB1
bnNpZ25lZCBpbnQgR0xfRlJPTlRfQU5EX0JBQ0sgICAgICAgICAgICAgICAgID0gMHgwNDA4Owor
CisgICAgICAgIC8qIERlcHRoRnVuY3Rpb24gKi8KKyAgICAgICAgLyogICAgICBHTF9ORVZFUiAq
LworICAgICAgICAvKiAgICAgIEdMX0xFU1MgKi8KKyAgICAgICAgLyogICAgICBHTF9FUVVBTCAq
LworICAgICAgICAvKiAgICAgIEdMX0xFUVVBTCAqLworICAgICAgICAvKiAgICAgIEdMX0dSRUFU
RVIgKi8KKyAgICAgICAgLyogICAgICBHTF9OT1RFUVVBTCAqLworICAgICAgICAvKiAgICAgIEdM
X0dFUVVBTCAqLworICAgICAgICAvKiAgICAgIEdMX0FMV0FZUyAqLworCisgICAgICAgIC8qIEVu
YWJsZUNhcCAqLworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfVEVYVFVSRV8yRCAgICAg
ICAgICAgICAgICAgICAgID0gMHgwREUxOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xf
Q1VMTF9GQUNFICAgICAgICAgICAgICAgICAgICAgID0gMHgwQjQ0OworICAgICAgICBjb25zdCB1
bnNpZ25lZCBpbnQgR0xfQkxFTkQgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwQkUyOwor
ICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfRElUSEVSICAgICAgICAgICAgICAgICAgICAg
ICAgID0gMHgwQkQwOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfU1RFTkNJTF9URVNU
ICAgICAgICAgICAgICAgICAgID0gMHgwQjkwOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQg
R0xfREVQVEhfVEVTVCAgICAgICAgICAgICAgICAgICAgID0gMHgwQjcxOworICAgICAgICBjb25z
dCB1bnNpZ25lZCBpbnQgR0xfU0NJU1NPUl9URVNUICAgICAgICAgICAgICAgICAgID0gMHgwQzEx
OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfUE9MWUdPTl9PRkZTRVRfRklMTCAgICAg
ICAgICAgID0gMHg4MDM3OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfU0FNUExFX0FM
UEhBX1RPX0NPVkVSQUdFICAgICAgID0gMHg4MDlFOworICAgICAgICBjb25zdCB1bnNpZ25lZCBp
bnQgR0xfU0FNUExFX0NPVkVSQUdFICAgICAgICAgICAgICAgID0gMHg4MEEwOworCisgICAgICAg
IC8qIEVycm9yQ29kZSAqLworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfTk9fRVJST1Ig
ICAgICAgICAgICAgICAgICAgICAgID0gMDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdM
X0lOVkFMSURfRU5VTSAgICAgICAgICAgICAgICAgICA9IDB4MDUwMDsKKyAgICAgICAgY29uc3Qg
dW5zaWduZWQgaW50IEdMX0lOVkFMSURfVkFMVUUgICAgICAgICAgICAgICAgICA9IDB4MDUwMTsK
KyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0lOVkFMSURfT1BFUkFUSU9OICAgICAgICAg
ICAgICA9IDB4MDUwMjsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX09VVF9PRl9NRU1P
UlkgICAgICAgICAgICAgICAgICA9IDB4MDUwNTsKKworICAgICAgICAvKiBGcm9udEZhY2VEaXJl
Y3Rpb24gKi8KKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0NXICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA9IDB4MDkwMDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0ND
VyAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDkwMTsKKworICAgICAgICAvKiBHZXRQ
TmFtZSAqLworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfTElORV9XSURUSCAgICAgICAg
ICAgICAgICAgICAgID0gMHgwQjIxOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfQUxJ
QVNFRF9QT0lOVF9TSVpFX1JBTkdFICAgICAgID0gMHg4NDZEOworICAgICAgICBjb25zdCB1bnNp
Z25lZCBpbnQgR0xfQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFICAgICAgID0gMHg4NDZFOworICAg
ICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfQ1VMTF9GQUNFX01PREUgICAgICAgICAgICAgICAg
ID0gMHgwQjQ1OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfRlJPTlRfRkFDRSAgICAg
ICAgICAgICAgICAgICAgID0gMHgwQjQ2OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xf
REVQVEhfUkFOR0UgICAgICAgICAgICAgICAgICAgID0gMHgwQjcwOworICAgICAgICBjb25zdCB1
bnNpZ25lZCBpbnQgR0xfREVQVEhfV1JJVEVNQVNLICAgICAgICAgICAgICAgID0gMHgwQjcyOwor
ICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfREVQVEhfQ0xFQVJfVkFMVUUgICAgICAgICAg
ICAgID0gMHgwQjczOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfREVQVEhfRlVOQyAg
ICAgICAgICAgICAgICAgICAgID0gMHgwQjc0OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQg
R0xfU1RFTkNJTF9DTEVBUl9WQUxVRSAgICAgICAgICAgID0gMHgwQjkxOworICAgICAgICBjb25z
dCB1bnNpZ25lZCBpbnQgR0xfU1RFTkNJTF9GVU5DICAgICAgICAgICAgICAgICAgID0gMHgwQjky
OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfU1RFTkNJTF9GQUlMICAgICAgICAgICAg
ICAgICAgID0gMHgwQjk0OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfU1RFTkNJTF9Q
QVNTX0RFUFRIX0ZBSUwgICAgICAgID0gMHgwQjk1OworICAgICAgICBjb25zdCB1bnNpZ25lZCBp
bnQgR0xfU1RFTkNJTF9QQVNTX0RFUFRIX1BBU1MgICAgICAgID0gMHgwQjk2OworICAgICAgICBj
b25zdCB1bnNpZ25lZCBpbnQgR0xfU1RFTkNJTF9SRUYgICAgICAgICAgICAgICAgICAgID0gMHgw
Qjk3OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfU1RFTkNJTF9WQUxVRV9NQVNLICAg
ICAgICAgICAgID0gMHgwQjkzOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfU1RFTkNJ
TF9XUklURU1BU0sgICAgICAgICAgICAgID0gMHgwQjk4OworICAgICAgICBjb25zdCB1bnNpZ25l
ZCBpbnQgR0xfU1RFTkNJTF9CQUNLX0ZVTkMgICAgICAgICAgICAgID0gMHg4ODAwOworICAgICAg
ICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfU1RFTkNJTF9CQUNLX0ZBSUwgICAgICAgICAgICAgID0g
MHg4ODAxOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfU1RFTkNJTF9CQUNLX1BBU1Nf
REVQVEhfRkFJTCAgID0gMHg4ODAyOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfU1RF
TkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUyAgID0gMHg4ODAzOworICAgICAgICBjb25zdCB1bnNp
Z25lZCBpbnQgR0xfU1RFTkNJTF9CQUNLX1JFRiAgICAgICAgICAgICAgID0gMHg4Q0EzOworICAg
ICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfU1RFTkNJTF9CQUNLX1ZBTFVFX01BU0sgICAgICAg
ID0gMHg4Q0E0OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfU1RFTkNJTF9CQUNLX1dS
SVRFTUFTSyAgICAgICAgID0gMHg4Q0E1OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xf
VklFV1BPUlQgICAgICAgICAgICAgICAgICAgICAgID0gMHgwQkEyOworICAgICAgICBjb25zdCB1
bnNpZ25lZCBpbnQgR0xfU0NJU1NPUl9CT1ggICAgICAgICAgICAgICAgICAgID0gMHgwQzEwOwor
ICAgICAgICAvKiAgICAgIEdMX1NDSVNTT1JfVEVTVCAqLworICAgICAgICBjb25zdCB1bnNpZ25l
ZCBpbnQgR0xfQ09MT1JfQ0xFQVJfVkFMVUUgICAgICAgICAgICAgID0gMHgwQzIyOworICAgICAg
ICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfQ09MT1JfV1JJVEVNQVNLICAgICAgICAgICAgICAgID0g
MHgwQzIzOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfVU5QQUNLX0FMSUdOTUVOVCAg
ICAgICAgICAgICAgID0gMHgwQ0Y1OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfUEFD
S19BTElHTk1FTlQgICAgICAgICAgICAgICAgID0gMHgwRDA1OworICAgICAgICBjb25zdCB1bnNp
Z25lZCBpbnQgR0xfTUFYX1RFWFRVUkVfU0laRSAgICAgICAgICAgICAgID0gMHgwRDMzOworICAg
ICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfTUFYX1ZJRVdQT1JUX0RJTVMgICAgICAgICAgICAg
ID0gMHgwRDNBOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfU1VCUElYRUxfQklUUyAg
ICAgICAgICAgICAgICAgID0gMHgwRDUwOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xf
UkVEX0JJVFMgICAgICAgICAgICAgICAgICAgICAgID0gMHgwRDUyOworICAgICAgICBjb25zdCB1
bnNpZ25lZCBpbnQgR0xfR1JFRU5fQklUUyAgICAgICAgICAgICAgICAgICAgID0gMHgwRDUzOwor
ICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfQkxVRV9CSVRTICAgICAgICAgICAgICAgICAg
ICAgID0gMHgwRDU0OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfQUxQSEFfQklUUyAg
ICAgICAgICAgICAgICAgICAgID0gMHgwRDU1OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQg
R0xfREVQVEhfQklUUyAgICAgICAgICAgICAgICAgICAgID0gMHgwRDU2OworICAgICAgICBjb25z
dCB1bnNpZ25lZCBpbnQgR0xfU1RFTkNJTF9CSVRTICAgICAgICAgICAgICAgICAgID0gMHgwRDU3
OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfUE9MWUdPTl9PRkZTRVRfVU5JVFMgICAg
ICAgICAgID0gMHgyQTAwOworICAgICAgICAvKiAgICAgIEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEwg
Ki8KKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX1BPTFlHT05fT0ZGU0VUX0ZBQ1RPUiAg
ICAgICAgICA9IDB4ODAzODsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX1RFWFRVUkVf
QklORElOR18yRCAgICAgICAgICAgICA9IDB4ODA2OTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQg
aW50IEdMX1NBTVBMRV9CVUZGRVJTICAgICAgICAgICAgICAgICA9IDB4ODBBODsKKyAgICAgICAg
Y29uc3QgdW5zaWduZWQgaW50IEdMX1NBTVBMRVMgICAgICAgICAgICAgICAgICAgICAgICA9IDB4
ODBBOTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX1NBTVBMRV9DT1ZFUkFHRV9WQUxV
RSAgICAgICAgICA9IDB4ODBBQTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX1NBTVBM
RV9DT1ZFUkFHRV9JTlZFUlQgICAgICAgICA9IDB4ODBBQjsKKworICAgICAgICAvKiBHZXRUZXh0
dXJlUGFyYW1ldGVyICovCisgICAgICAgIC8qICAgICAgR0xfVEVYVFVSRV9NQUdfRklMVEVSICov
CisgICAgICAgIC8qICAgICAgR0xfVEVYVFVSRV9NSU5fRklMVEVSICovCisgICAgICAgIC8qICAg
ICAgR0xfVEVYVFVSRV9XUkFQX1MgKi8KKyAgICAgICAgLyogICAgICBHTF9URVhUVVJFX1dSQVBf
VCAqLworCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9OVU1fQ09NUFJFU1NFRF9URVhU
VVJFX0ZPUk1BVFMgPSAweDg2QTI7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9DT01Q
UkVTU0VEX1RFWFRVUkVfRk9STUFUUyAgICAgPSAweDg2QTM7CisKKyAgICAgICAgLyogSGludE1v
ZGUgKi8KKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0RPTlRfQ0FSRSAgICAgICAgICAg
ICAgICAgICAgICA9IDB4MTEwMDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0ZBU1RF
U1QgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTEwMTsKKyAgICAgICAgY29uc3QgdW5zaWdu
ZWQgaW50IEdMX05JQ0VTVCAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTEwMjsKKworICAg
ICAgICAvKiBIaW50VGFyZ2V0ICovCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9HRU5F
UkFURV9NSVBNQVBfSElOVCAgICAgICAgICAgID0gMHg4MTkyOworCisgICAgICAgIC8qIERhdGFU
eXBlICovCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9CWVRFICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPSAweDE0MDA7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9VTlNJ
R05FRF9CWVRFICAgICAgICAgICAgICAgICAgPSAweDE0MDE7CisgICAgICAgIGNvbnN0IHVuc2ln
bmVkIGludCBHTF9TSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE0MDI7CisgICAg
ICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9VTlNJR05FRF9TSE9SVCAgICAgICAgICAgICAgICAg
PSAweDE0MDM7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9JTlQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPSAweDE0MDQ7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9V
TlNJR05FRF9JTlQgICAgICAgICAgICAgICAgICAgPSAweDE0MDU7CisgICAgICAgIGNvbnN0IHVu
c2lnbmVkIGludCBHTF9GTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE0MDY7Cisg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9GSVhFRCAgICAgICAgICAgICAgICAgICAgICAg
ICAgPSAweDE0MEM7CisKKyAgICAgICAgLyogUGl4ZWxGb3JtYXQgKi8KKyAgICAgICAgY29uc3Qg
dW5zaWduZWQgaW50IEdMX0RFUFRIX0NPTVBPTkVOVCAgICAgICAgICAgICAgICA9IDB4MTkwMjsK
KyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0FMUEhBICAgICAgICAgICAgICAgICAgICAg
ICAgICA9IDB4MTkwNjsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX1JHQiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA9IDB4MTkwNzsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50
IEdMX1JHQkEgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTkwODsKKyAgICAgICAgY29u
c3QgdW5zaWduZWQgaW50IEdMX0xVTUlOQU5DRSAgICAgICAgICAgICAgICAgICAgICA9IDB4MTkw
OTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0xVTUlOQU5DRV9BTFBIQSAgICAgICAg
ICAgICAgICA9IDB4MTkwQTsKKworICAgICAgICAvKiBQaXhlbFR5cGUgKi8KKyAgICAgICAgLyog
ICAgICBHTF9VTlNJR05FRF9CWVRFICovCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9V
TlNJR05FRF9TSE9SVF80XzRfNF80ICAgICAgICAgPSAweDgwMzM7CisgICAgICAgIGNvbnN0IHVu
c2lnbmVkIGludCBHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xICAgICAgICAgPSAweDgwMzQ7Cisg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9VTlNJR05FRF9TSE9SVF81XzZfNSAgICAgICAg
ICAgPSAweDgzNjM7CisKKyAgICAgICAgLyogU2hhZGVycyAqLworICAgICAgICBjb25zdCB1bnNp
Z25lZCBpbnQgR0xfRlJBR01FTlRfU0hBREVSICAgICAgICAgICAgICAgICAgPSAweDhCMzA7Cisg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9WRVJURVhfU0hBREVSICAgICAgICAgICAgICAg
ICAgICA9IDB4OEIzMTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX01BWF9WRVJURVhf
QVRUUklCUyAgICAgICAgICAgICAgID0gMHg4ODY5OworICAgICAgICBjb25zdCB1bnNpZ25lZCBp
bnQgR0xfTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMgICAgICAgPSAweDhERkI7CisgICAgICAg
IGNvbnN0IHVuc2lnbmVkIGludCBHTF9NQVhfVkFSWUlOR19WRUNUT1JTICAgICAgICAgICAgICA9
IDB4OERGQzsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX01BWF9DT01CSU5FRF9URVhU
VVJFX0lNQUdFX1VOSVRTID0gMHg4QjREOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xf
TUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTICAgPSAweDhCNEM7CisgICAgICAgIGNvbnN0
IHVuc2lnbmVkIGludCBHTF9NQVhfVEVYVFVSRV9JTUFHRV9VTklUUyAgICAgICAgICA9IDB4ODg3
MjsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX01BWF9GUkFHTUVOVF9VTklGT1JNX1ZF
Q1RPUlMgICAgID0gMHg4REZEOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfU0hBREVS
X1RZUEUgICAgICAgICAgICAgICAgICAgICAgPSAweDhCNEY7CisgICAgICAgIGNvbnN0IHVuc2ln
bmVkIGludCBHTF9ERUxFVEVfU1RBVFVTICAgICAgICAgICAgICAgICAgICA9IDB4OEI4MDsKKyAg
ICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0xJTktfU1RBVFVTICAgICAgICAgICAgICAgICAg
ICAgID0gMHg4QjgyOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfVkFMSURBVEVfU1RB
VFVTICAgICAgICAgICAgICAgICAgPSAweDhCODM7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGlu
dCBHTF9BVFRBQ0hFRF9TSEFERVJTICAgICAgICAgICAgICAgICA9IDB4OEI4NTsKKyAgICAgICAg
Y29uc3QgdW5zaWduZWQgaW50IEdMX0FDVElWRV9VTklGT1JNUyAgICAgICAgICAgICAgICAgID0g
MHg4Qjg2OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfQUNUSVZFX1VOSUZPUk1fTUFY
X0xFTkdUSCAgICAgICAgPSAweDhCODc7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9B
Q1RJVkVfQVRUUklCVVRFUyAgICAgICAgICAgICAgICA9IDB4OEI4OTsKKyAgICAgICAgY29uc3Qg
dW5zaWduZWQgaW50IEdMX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCAgICAgID0gMHg4QjhB
OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfU0hBRElOR19MQU5HVUFHRV9WRVJTSU9O
ICAgICAgICAgPSAweDhCOEM7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9DVVJSRU5U
X1BST0dSQU0gICAgICAgICAgICAgICAgICA9IDB4OEI4RDsKKworICAgICAgICAvKiBTdGVuY2ls
RnVuY3Rpb24gKi8KKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX05FVkVSICAgICAgICAg
ICAgICAgICAgICAgICAgICA9IDB4MDIwMDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdM
X0xFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDIwMTsKKyAgICAgICAgY29uc3Qg
dW5zaWduZWQgaW50IEdMX0VRVUFMICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDIwMjsK
KyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0xFUVVBTCAgICAgICAgICAgICAgICAgICAg
ICAgICA9IDB4MDIwMzsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0dSRUFURVIgICAg
ICAgICAgICAgICAgICAgICAgICA9IDB4MDIwNDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50
IEdMX05PVEVRVUFMICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDIwNTsKKyAgICAgICAgY29u
c3QgdW5zaWduZWQgaW50IEdMX0dFUVVBTCAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDIw
NjsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0FMV0FZUyAgICAgICAgICAgICAgICAg
ICAgICAgICA9IDB4MDIwNzsKKworICAgICAgICAvKiBTdGVuY2lsT3AgKi8KKyAgICAgICAgLyog
ICAgICBHTF9aRVJPICovCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9LRUVQICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPSAweDFFMDA7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGlu
dCBHTF9SRVBMQUNFICAgICAgICAgICAgICAgICAgICAgICAgPSAweDFFMDE7CisgICAgICAgIGNv
bnN0IHVuc2lnbmVkIGludCBHTF9JTkNSICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDFF
MDI7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9ERUNSICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPSAweDFFMDM7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9JTlZFUlQg
ICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE1MEE7CisgICAgICAgIGNvbnN0IHVuc2lnbmVk
IGludCBHTF9JTkNSX1dSQVAgICAgICAgICAgICAgICAgICAgICAgPSAweDg1MDc7CisgICAgICAg
IGNvbnN0IHVuc2lnbmVkIGludCBHTF9ERUNSX1dSQVAgICAgICAgICAgICAgICAgICAgICAgPSAw
eDg1MDg7CisKKyAgICAgICAgLyogU3RyaW5nTmFtZSAqLworICAgICAgICBjb25zdCB1bnNpZ25l
ZCBpbnQgR0xfVkVORE9SICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxRjAwOworICAgICAg
ICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfUkVOREVSRVIgICAgICAgICAgICAgICAgICAgICAgID0g
MHgxRjAxOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfVkVSU0lPTiAgICAgICAgICAg
ICAgICAgICAgICAgID0gMHgxRjAyOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfRVhU
RU5TSU9OUyAgICAgICAgICAgICAgICAgICAgID0gMHgxRjAzOworCisgICAgICAgIC8qIFRleHR1
cmVNYWdGaWx0ZXIgKi8KKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX05FQVJFU1QgICAg
ICAgICAgICAgICAgICAgICAgICA9IDB4MjYwMDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50
IEdMX0xJTkVBUiAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MjYwMTsKKworICAgICAgICAv
KiBUZXh0dXJlTWluRmlsdGVyICovCisgICAgICAgIC8qICAgICAgR0xfTkVBUkVTVCAqLworICAg
ICAgICAvKiAgICAgIEdMX0xJTkVBUiAqLworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xf
TkVBUkVTVF9NSVBNQVBfTkVBUkVTVCAgICAgICAgID0gMHgyNzAwOworICAgICAgICBjb25zdCB1
bnNpZ25lZCBpbnQgR0xfTElORUFSX01JUE1BUF9ORUFSRVNUICAgICAgICAgID0gMHgyNzAxOwor
ICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfTkVBUkVTVF9NSVBNQVBfTElORUFSICAgICAg
ICAgID0gMHgyNzAyOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfTElORUFSX01JUE1B
UF9MSU5FQVIgICAgICAgICAgID0gMHgyNzAzOworCisgICAgICAgIC8qIFRleHR1cmVQYXJhbWV0
ZXJOYW1lICovCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9URVhUVVJFX01BR19GSUxU
RVIgICAgICAgICAgICAgPSAweDI4MDA7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9U
RVhUVVJFX01JTl9GSUxURVIgICAgICAgICAgICAgPSAweDI4MDE7CisgICAgICAgIGNvbnN0IHVu
c2lnbmVkIGludCBHTF9URVhUVVJFX1dSQVBfUyAgICAgICAgICAgICAgICAgPSAweDI4MDI7Cisg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9URVhUVVJFX1dSQVBfVCAgICAgICAgICAgICAg
ICAgPSAweDI4MDM7CisKKyAgICAgICAgLyogVGV4dHVyZVRhcmdldCAqLworICAgICAgICAvKiAg
ICAgIEdMX1RFWFRVUkVfMkQgKi8KKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX1RFWFRV
UkUgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTcwMjsKKworICAgICAgICBjb25zdCB1bnNp
Z25lZCBpbnQgR0xfVEVYVFVSRV9DVUJFX01BUCAgICAgICAgICAgICAgID0gMHg4NTEzOworICAg
ICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfVEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQICAgICAg
ID0gMHg4NTE0OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfVEVYVFVSRV9DVUJFX01B
UF9QT1NJVElWRV9YICAgID0gMHg4NTE1OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xf
VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YICAgID0gMHg4NTE2OworICAgICAgICBjb25zdCB1
bnNpZ25lZCBpbnQgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZICAgID0gMHg4NTE3Owor
ICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9Z
ICAgID0gMHg4NTE4OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfVEVYVFVSRV9DVUJF
X01BUF9QT1NJVElWRV9aICAgID0gMHg4NTE5OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQg
R0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aICAgID0gMHg4NTFBOworICAgICAgICBjb25z
dCB1bnNpZ25lZCBpbnQgR0xfTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSAgICAgID0gMHg4NTFD
OworCisgICAgICAgIC8qIFRleHR1cmVVbml0ICovCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGlu
dCBHTF9URVhUVVJFMCAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0QzA7CisgICAgICAgIGNv
bnN0IHVuc2lnbmVkIGludCBHTF9URVhUVVJFMSAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0
QzE7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9URVhUVVJFMiAgICAgICAgICAgICAg
ICAgICAgICAgPSAweDg0QzI7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9URVhUVVJF
MyAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0QzM7CisgICAgICAgIGNvbnN0IHVuc2lnbmVk
IGludCBHTF9URVhUVVJFNCAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0QzQ7CisgICAgICAg
IGNvbnN0IHVuc2lnbmVkIGludCBHTF9URVhUVVJFNSAgICAgICAgICAgICAgICAgICAgICAgPSAw
eDg0QzU7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9URVhUVVJFNiAgICAgICAgICAg
ICAgICAgICAgICAgPSAweDg0QzY7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9URVhU
VVJFNyAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0Qzc7CisgICAgICAgIGNvbnN0IHVuc2ln
bmVkIGludCBHTF9URVhUVVJFOCAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0Qzg7CisgICAg
ICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9URVhUVVJFOSAgICAgICAgICAgICAgICAgICAgICAg
PSAweDg0Qzk7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9URVhUVVJFMTAgICAgICAg
ICAgICAgICAgICAgICAgPSAweDg0Q0E7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9U
RVhUVVJFMTEgICAgICAgICAgICAgICAgICAgICAgPSAweDg0Q0I7CisgICAgICAgIGNvbnN0IHVu
c2lnbmVkIGludCBHTF9URVhUVVJFMTIgICAgICAgICAgICAgICAgICAgICAgPSAweDg0Q0M7Cisg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9URVhUVVJFMTMgICAgICAgICAgICAgICAgICAg
ICAgPSAweDg0Q0Q7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9URVhUVVJFMTQgICAg
ICAgICAgICAgICAgICAgICAgPSAweDg0Q0U7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBH
TF9URVhUVVJFMTUgICAgICAgICAgICAgICAgICAgICAgPSAweDg0Q0Y7CisgICAgICAgIGNvbnN0
IHVuc2lnbmVkIGludCBHTF9URVhUVVJFMTYgICAgICAgICAgICAgICAgICAgICAgPSAweDg0RDA7
CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9URVhUVVJFMTcgICAgICAgICAgICAgICAg
ICAgICAgPSAweDg0RDE7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9URVhUVVJFMTgg
ICAgICAgICAgICAgICAgICAgICAgPSAweDg0RDI7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGlu
dCBHTF9URVhUVVJFMTkgICAgICAgICAgICAgICAgICAgICAgPSAweDg0RDM7CisgICAgICAgIGNv
bnN0IHVuc2lnbmVkIGludCBHTF9URVhUVVJFMjAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0
RDQ7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9URVhUVVJFMjEgICAgICAgICAgICAg
ICAgICAgICAgPSAweDg0RDU7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9URVhUVVJF
MjIgICAgICAgICAgICAgICAgICAgICAgPSAweDg0RDY7CisgICAgICAgIGNvbnN0IHVuc2lnbmVk
IGludCBHTF9URVhUVVJFMjMgICAgICAgICAgICAgICAgICAgICAgPSAweDg0RDc7CisgICAgICAg
IGNvbnN0IHVuc2lnbmVkIGludCBHTF9URVhUVVJFMjQgICAgICAgICAgICAgICAgICAgICAgPSAw
eDg0RDg7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9URVhUVVJFMjUgICAgICAgICAg
ICAgICAgICAgICAgPSAweDg0RDk7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9URVhU
VVJFMjYgICAgICAgICAgICAgICAgICAgICAgPSAweDg0REE7CisgICAgICAgIGNvbnN0IHVuc2ln
bmVkIGludCBHTF9URVhUVVJFMjcgICAgICAgICAgICAgICAgICAgICAgPSAweDg0REI7CisgICAg
ICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9URVhUVVJFMjggICAgICAgICAgICAgICAgICAgICAg
PSAweDg0REM7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9URVhUVVJFMjkgICAgICAg
ICAgICAgICAgICAgICAgPSAweDg0REQ7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9U
RVhUVVJFMzAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0REU7CisgICAgICAgIGNvbnN0IHVu
c2lnbmVkIGludCBHTF9URVhUVVJFMzEgICAgICAgICAgICAgICAgICAgICAgPSAweDg0REY7Cisg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9BQ1RJVkVfVEVYVFVSRSAgICAgICAgICAgICAg
ICAgPSAweDg0RTA7CisKKyAgICAgICAgLyogVGV4dHVyZVdyYXBNb2RlICovCisgICAgICAgIGNv
bnN0IHVuc2lnbmVkIGludCBHTF9SRVBFQVQgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDI5
MDE7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9DTEFNUF9UT19FREdFICAgICAgICAg
ICAgICAgICAgPSAweDgxMkY7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9NSVJST1JF
RF9SRVBFQVQgICAgICAgICAgICAgICAgPSAweDgzNzA7CisKKyAgICAgICAgLyogVW5pZm9ybSBU
eXBlcyAqLworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfRkxPQVRfVkVDMiAgICAgICAg
ICAgICAgICAgICAgID0gMHg4QjUwOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfRkxP
QVRfVkVDMyAgICAgICAgICAgICAgICAgICAgID0gMHg4QjUxOworICAgICAgICBjb25zdCB1bnNp
Z25lZCBpbnQgR0xfRkxPQVRfVkVDNCAgICAgICAgICAgICAgICAgICAgID0gMHg4QjUyOworICAg
ICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfSU5UX1ZFQzIgICAgICAgICAgICAgICAgICAgICAg
ID0gMHg4QjUzOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfSU5UX1ZFQzMgICAgICAg
ICAgICAgICAgICAgICAgID0gMHg4QjU0OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xf
SU5UX1ZFQzQgICAgICAgICAgICAgICAgICAgICAgID0gMHg4QjU1OworICAgICAgICBjb25zdCB1
bnNpZ25lZCBpbnQgR0xfQk9PTCAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4QjU2Owor
ICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfQk9PTF9WRUMyICAgICAgICAgICAgICAgICAg
ICAgID0gMHg4QjU3OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfQk9PTF9WRUMzICAg
ICAgICAgICAgICAgICAgICAgID0gMHg4QjU4OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQg
R0xfQk9PTF9WRUM0ICAgICAgICAgICAgICAgICAgICAgID0gMHg4QjU5OworICAgICAgICBjb25z
dCB1bnNpZ25lZCBpbnQgR0xfRkxPQVRfTUFUMiAgICAgICAgICAgICAgICAgICAgID0gMHg4QjVB
OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfRkxPQVRfTUFUMyAgICAgICAgICAgICAg
ICAgICAgID0gMHg4QjVCOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfRkxPQVRfTUFU
NCAgICAgICAgICAgICAgICAgICAgID0gMHg4QjVDOworICAgICAgICBjb25zdCB1bnNpZ25lZCBp
bnQgR0xfU0FNUExFUl8yRCAgICAgICAgICAgICAgICAgICAgID0gMHg4QjVFOworICAgICAgICBj
b25zdCB1bnNpZ25lZCBpbnQgR0xfU0FNUExFUl9DVUJFICAgICAgICAgICAgICAgICAgID0gMHg4
QjYwOworCisgICAgICAgIC8qIFZlcnRleCBBcnJheXMgKi8KKyAgICAgICAgY29uc3QgdW5zaWdu
ZWQgaW50IEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRCAgICAgICAgPSAweDg2MjI7Cisg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1NJWkUgICAg
ICAgICAgID0gMHg4NjIzOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfVkVSVEVYX0FU
VFJJQl9BUlJBWV9TVFJJREUgICAgICAgICA9IDB4ODYyNDsKKyAgICAgICAgY29uc3QgdW5zaWdu
ZWQgaW50IEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRSAgICAgICAgICAgPSAweDg2MjU7Cisg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9WRVJURVhfQVRUUklCX0FSUkFZX05PUk1BTEla
RUQgICAgID0gMHg4ODZBOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfVkVSVEVYX0FU
VFJJQl9BUlJBWV9QT0lOVEVSICAgICAgICA9IDB4ODY0NTsKKyAgICAgICAgY29uc3QgdW5zaWdu
ZWQgaW50IEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJTkcgPSAweDg4OUY7CisK
KyAgICAgICAgLyogUmVhZCBGb3JtYXQgKi8KKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdM
X0lNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfVFlQRSAgID0gMHg4QjlBOworICAgICAgICBjb25z
dCB1bnNpZ25lZCBpbnQgR0xfSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVQgPSAweDhC
OUI7CisKKyAgICAgICAgLyogU2hhZGVyIFNvdXJjZSAqLworICAgICAgICBjb25zdCB1bnNpZ25l
ZCBpbnQgR0xfQ09NUElMRV9TVEFUVVMgICAgICAgICAgICAgICAgID0gMHg4QjgxOworICAgICAg
ICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfSU5GT19MT0dfTEVOR1RIICAgICAgICAgICAgICAgID0g
MHg4Qjg0OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfU0hBREVSX1NPVVJDRV9MRU5H
VEggICAgICAgICAgID0gMHg4Qjg4OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfU0hB
REVSX0NPTVBJTEVSICAgICAgICAgICAgICAgID0gMHg4REZBOworCisgICAgICAgIC8qIFNoYWRl
ciBCaW5hcnkgKi8KKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX1NIQURFUl9CSU5BUllf
Rk9STUFUUyAgICAgICAgICA9IDB4OERGODsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdM
X05VTV9TSEFERVJfQklOQVJZX0ZPUk1BVFMgICAgICA9IDB4OERGOTsKKworICAgICAgICAvKiBT
aGFkZXIgUHJlY2lzaW9uLVNwZWNpZmllZCBUeXBlcyAqLworICAgICAgICBjb25zdCB1bnNpZ25l
ZCBpbnQgR0xfTE9XX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgID0gMHg4REYwOworICAgICAg
ICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfTUVESVVNX0ZMT0FUICAgICAgICAgICAgICAgICAgID0g
MHg4REYxOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfSElHSF9GTE9BVCAgICAgICAg
ICAgICAgICAgICAgID0gMHg4REYyOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfTE9X
X0lOVCAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4REYzOworICAgICAgICBjb25zdCB1bnNp
Z25lZCBpbnQgR0xfTUVESVVNX0lOVCAgICAgICAgICAgICAgICAgICAgID0gMHg4REY0OworICAg
ICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfSElHSF9JTlQgICAgICAgICAgICAgICAgICAgICAg
ID0gMHg4REY1OworCisgICAgICAgIC8qIEZyYW1lYnVmZmVyIE9iamVjdC4gKi8KKyAgICAgICAg
Y29uc3QgdW5zaWduZWQgaW50IEdMX0ZSQU1FQlVGRkVSICAgICAgICAgICAgICAgICAgICA9IDB4
OEQ0MDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX1JFTkRFUkJVRkZFUiAgICAgICAg
ICAgICAgICAgICA9IDB4OEQ0MTsKKworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfUkdC
QTQgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MDU2OworICAgICAgICBjb25zdCB1bnNp
Z25lZCBpbnQgR0xfUkdCNV9BMSAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MDU3OworICAg
ICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfUkdCNTY1ICAgICAgICAgICAgICAgICAgICAgICAg
ID0gMHg4RDYyOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfREVQVEhfQ09NUE9ORU5U
MTYgICAgICAgICAgICAgID0gMHg4MUE1OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xf
U1RFTkNJTF9JTkRFWCAgICAgICAgICAgICAgICAgID0gMHgxOTAxOworICAgICAgICBjb25zdCB1
bnNpZ25lZCBpbnQgR0xfU1RFTkNJTF9JTkRFWDggICAgICAgICAgICAgICAgID0gMHg4RDQ4Owor
CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9SRU5ERVJCVUZGRVJfV0lEVEggICAgICAg
ICAgICAgPSAweDhENDI7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9SRU5ERVJCVUZG
RVJfSEVJR0hUICAgICAgICAgICAgPSAweDhENDM7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGlu
dCBHTF9SRU5ERVJCVUZGRVJfSU5URVJOQUxfRk9STUFUICAgPSAweDhENDQ7CisgICAgICAgIGNv
bnN0IHVuc2lnbmVkIGludCBHTF9SRU5ERVJCVUZGRVJfUkVEX1NJWkUgICAgICAgICAgPSAweDhE
NTA7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9SRU5ERVJCVUZGRVJfR1JFRU5fU0la
RSAgICAgICAgPSAweDhENTE7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9SRU5ERVJC
VUZGRVJfQkxVRV9TSVpFICAgICAgICAgPSAweDhENTI7CisgICAgICAgIGNvbnN0IHVuc2lnbmVk
IGludCBHTF9SRU5ERVJCVUZGRVJfQUxQSEFfU0laRSAgICAgICAgPSAweDhENTM7CisgICAgICAg
IGNvbnN0IHVuc2lnbmVkIGludCBHTF9SRU5ERVJCVUZGRVJfREVQVEhfU0laRSAgICAgICAgPSAw
eDhENTQ7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9SRU5ERVJCVUZGRVJfU1RFTkNJ
TF9TSVpFICAgICAgPSAweDhENTU7CisKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0ZS
QU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEUgICAgICAgICAgID0gMHg4Q0QwOworICAg
ICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1Rf
TkFNRSAgICAgICAgICAgPSAweDhDRDE7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9G
UkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfTEVWRUwgICAgICAgICA9IDB4OENEMjsKKyAg
ICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVS
RV9DVUJFX01BUF9GQUNFID0gMHg4Q0QzOworCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBH
TF9DT0xPUl9BVFRBQ0hNRU5UMCAgICAgICAgICAgICAgPSAweDhDRTA7CisgICAgICAgIGNvbnN0
IHVuc2lnbmVkIGludCBHTF9ERVBUSF9BVFRBQ0hNRU5UICAgICAgICAgICAgICAgPSAweDhEMDA7
CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQgICAgICAg
ICAgICAgPSAweDhEMjA7CisKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX05PTkUgICAg
ICAgICAgICAgICAgICAgICAgICAgICA9IDA7CisKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50
IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFICAgICAgICAgICAgICAgICAgICAgID0gMHg4Q0Q1Owor
ICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRB
Q0hNRU5UICAgICAgICAgPSAweDhDRDY7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9G
UkFNRUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJTkdfQVRUQUNITUVOVCA9IDB4OENENzsKKyAgICAg
ICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5TSU9O
UyAgICAgICAgID0gMHg4Q0Q5OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfRlJBTUVC
VUZGRVJfVU5TVVBQT1JURUQgICAgICAgICAgICAgICAgICAgPSAweDhDREQ7CisKKyAgICAgICAg
Y29uc3QgdW5zaWduZWQgaW50IEdMX0ZSQU1FQlVGRkVSX0JJTkRJTkcgICAgICAgICAgICA9IDB4
OENBNjsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX1JFTkRFUkJVRkZFUl9CSU5ESU5H
ICAgICAgICAgICA9IDB4OENBNzsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX01BWF9S
RU5ERVJCVUZGRVJfU0laRSAgICAgICAgICA9IDB4ODRFODsKKworICAgICAgICBjb25zdCB1bnNp
Z25lZCBpbnQgR0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gID0gMHgwNTA2OworCisg
ICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBIVE1MQ2FudmFzRWxlbWVudCBjYW52YXM7CisgICAg
ICAgIAorICAgICAgICB2b2lkICAgICAgICAgZ2xBY3RpdmVUZXh0dXJlKGluIHVuc2lnbmVkIGxv
bmcgdGV4dHVyZSk7CisgICAgICAgIHZvaWQgICAgICAgICBnbEF0dGFjaFNoYWRlcihpbiBDYW52
YXNQcm9ncmFtIHByb2dyYW0sIGluIENhbnZhc1NoYWRlciBzaGFkZXIpOworICAgICAgICB2b2lk
ICAgICAgICAgZ2xCaW5kQXR0cmliTG9jYXRpb24oaW4gQ2FudmFzUHJvZ3JhbSBwcm9ncmFtLCBp
biB1bnNpZ25lZCBsb25nIGluZGV4LCBpbiBET01TdHJpbmcgbmFtZSk7CisgICAgICAgIHZvaWQg
ICAgICAgICBnbEJpbmRCdWZmZXIoaW4gdW5zaWduZWQgbG9uZyB0YXJnZXQsIGluIENhbnZhc0J1
ZmZlciBidWZmZXIpOworICAgICAgICB2b2lkICAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXIoaW4g
dW5zaWduZWQgbG9uZyB0YXJnZXQsIGluIENhbnZhc0ZyYW1lYnVmZmVyIGZyYW1lYnVmZmVyKTsK
KyAgICAgICAgdm9pZCAgICAgICAgIGdsQmluZFJlbmRlcmJ1ZmZlcihpbiB1bnNpZ25lZCBsb25n
IHRhcmdldCwgaW4gQ2FudmFzUmVuZGVyYnVmZmVyIHJlbmRlcmJ1ZmZlcik7CisgICAgICAgIHZv
aWQgICAgICAgICBnbEJpbmRUZXh0dXJlKGluIHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbiBDYW52
YXNUZXh0dXJlIHRleHR1cmUpOworICAgICAgICB2b2lkICAgICAgICAgZ2xCbGVuZENvbG9yKGlu
IGRvdWJsZSByZWQsIGluIGRvdWJsZSBncmVlbiwgaW4gZG91YmxlIGJsdWUsIGluIGRvdWJsZSBh
bHBoYSk7CisgICAgICAgIHZvaWQgICAgICAgICBnbEJsZW5kRXF1YXRpb24oIGluIHVuc2lnbmVk
IGxvbmcgbW9kZSApOworICAgICAgICB2b2lkICAgICAgICAgZ2xCbGVuZEVxdWF0aW9uU2VwYXJh
dGUoaW4gdW5zaWduZWQgbG9uZyBtb2RlUkdCLCBpbiB1bnNpZ25lZCBsb25nIG1vZGVBbHBoYSk7
CisgICAgICAgIHZvaWQgICAgICAgICBnbEJsZW5kRnVuYyhpbiB1bnNpZ25lZCBsb25nIHNmYWN0
b3IsIGluIHVuc2lnbmVkIGxvbmcgZGZhY3Rvcik7CisgICAgICAgIHZvaWQgICAgICAgICBnbEJs
ZW5kRnVuY1NlcGFyYXRlKGluIHVuc2lnbmVkIGxvbmcgc3JjUkdCLCBpbiB1bnNpZ25lZCBsb25n
IGRzdFJHQiwgaW4gdW5zaWduZWQgbG9uZyBzcmNBbHBoYSwgaW4gdW5zaWduZWQgbG9uZyBkc3RB
bHBoYSk7CisgICAgICAgIFtDdXN0b21dIHZvaWQgZ2xCdWZmZXJEYXRhKGluIHVuc2lnbmVkIGxv
bmcgdGFyZ2V0LCBpbiBDYW52YXNCeXRlQXJyYXkgZGF0YSwgaW4gdW5zaWduZWQgbG9uZyB1c2Fn
ZSk7CisgICAgICAgIFtDdXN0b21dIHZvaWQgZ2xCdWZmZXJTdWJEYXRhKGluIHVuc2lnbmVkIGxv
bmcgdGFyZ2V0LCBpbiBsb25nIG9mZnNldCwgaW4gQ2FudmFzQnl0ZUFycmF5IGRhdGEpOworICAg
ICAgICB1bnNpZ25lZCBsb25nIGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhpbiBDYW52YXNGcmFt
ZWJ1ZmZlciBmcmFtZWJ1ZmZlcik7CisgICAgICAgIHZvaWQgICAgICAgICBnbENsZWFyKGluIHVu
c2lnbmVkIGxvbmcgbWFzayk7CisgICAgICAgIHZvaWQgICAgICAgICBnbENsZWFyQ29sb3IoaW4g
ZG91YmxlIHJlZCwgaW4gZG91YmxlIGdyZWVuLCBpbiBkb3VibGUgYmx1ZSwgaW4gZG91YmxlIGFs
cGhhKTsKKyAgICAgICAgdm9pZCAgICAgICAgIGdsQ2xlYXJEZXB0aChpbiBkb3VibGUgZGVwdGgp
OworICAgICAgICB2b2lkICAgICAgICAgZ2xDbGVhclN0ZW5jaWwoaW4gbG9uZyBzKTsKKyAgICAg
ICAgdm9pZCAgICAgICAgIGdsQ29sb3JNYXNrKGluIGJvb2xlYW4gcmVkLCBpbiBib29sZWFuIGdy
ZWVuLCBpbiBib29sZWFuIGJsdWUsIGluIGJvb2xlYW4gYWxwaGEpOworICAgICAgICB2b2lkICAg
ICAgICAgZ2xDb21waWxlU2hhZGVyKGluIENhbnZhc1NoYWRlciBzaGFkZXIpOworICAgICAgICAK
KyAgICAgICAgLy92b2lkICAgICAgICAgZ2xDb21wcmVzc2VkVGV4SW1hZ2UyRChpbiB1bnNpZ25l
ZCBsb25nIHRhcmdldCwgaW4gbG9uZyBsZXZlbCwgaW4gdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZv
cm1hdCwgaW4gdW5zaWduZWQgbG9uZyB3aWR0aCwgaW4gdW5zaWduZWQgbG9uZyBoZWlnaHQsIGlu
IGxvbmcgYm9yZGVyLCBpbiB1bnNpZ25lZCBsb25nIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCogZGF0
YSk7CisgICAgICAgIC8vdm9pZCAgICAgICAgIGdsQ29tcHJlc3NlZFRleFN1YkltYWdlMkQoaW4g
dW5zaWduZWQgbG9uZyB0YXJnZXQsIGluIGxvbmcgbGV2ZWwsIGluIGxvbmcgeG9mZnNldCwgaW4g
bG9uZyB5b2Zmc2V0LCBpbiB1bnNpZ25lZCBsb25nIHdpZHRoLCBpbiB1bnNpZ25lZCBsb25nIGhl
aWdodCwgaW4gdW5zaWduZWQgbG9uZyBmb3JtYXQsIGluIHVuc2lnbmVkIGxvbmcgaW1hZ2VTaXpl
LCBjb25zdCB2b2lkKiBkYXRhKTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgICAgICAgICBnbENv
cHlUZXhJbWFnZTJEKGluIHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbiBsb25nIGxldmVsLCBpbiB1
bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCBpbiBsb25nIHgsIGluIGxvbmcgeSwgaW4gdW5z
aWduZWQgbG9uZyB3aWR0aCwgaW4gdW5zaWduZWQgbG9uZyBoZWlnaHQsIGluIGxvbmcgYm9yZGVy
KTsKKyAgICAgICAgdm9pZCAgICAgICAgIGdsQ29weVRleFN1YkltYWdlMkQoaW4gdW5zaWduZWQg
bG9uZyB0YXJnZXQsIGluIGxvbmcgbGV2ZWwsIGluIGxvbmcgeG9mZnNldCwgaW4gbG9uZyB5b2Zm
c2V0LCBpbiBsb25nIHgsIGluIGxvbmcgeSwgaW4gdW5zaWduZWQgbG9uZyB3aWR0aCwgaW4gdW5z
aWduZWQgbG9uZyBoZWlnaHQpOworICAgICAgICB2b2lkICAgICAgICAgZ2xDdWxsRmFjZShpbiB1
bnNpZ25lZCBsb25nIG1vZGUpOworICAgICAgICB2b2lkICAgICAgICAgZ2xEZXB0aEZ1bmMoaW4g
dW5zaWduZWQgbG9uZyBmdW5jKTsKKyAgICAgICAgdm9pZCAgICAgICAgIGdsRGVwdGhNYXNrKGlu
IGJvb2xlYW4gZmxhZyk7CisgICAgICAgIHZvaWQgICAgICAgICBnbERlcHRoUmFuZ2UoaW4gZG91
YmxlIHpOZWFyLCBpbiBkb3VibGUgekZhcik7CisgICAgICAgIHZvaWQgICAgICAgICBnbERldGFj
aFNoYWRlcihpbiBDYW52YXNQcm9ncmFtIHByb2dyYW0sIGluIENhbnZhc1NoYWRlciBzaGFkZXIp
OworICAgICAgICB2b2lkICAgICAgICAgZ2xEaXNhYmxlKGluIHVuc2lnbmVkIGxvbmcgY2FwKTsK
KyAgICAgICAgdm9pZCAgICAgICAgIGdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGluIHVuc2ln
bmVkIGxvbmcgaW5kZXgpOworICAgICAgICB2b2lkICAgICAgICAgZ2xEcmF3QXJyYXlzKGluIHVu
c2lnbmVkIGxvbmcgbW9kZSwgaW4gbG9uZyBmaXJzdCwgaW4gdW5zaWduZWQgbG9uZyBjb3VudCk7
CisgICAgICAgIFtDdXN0b21dIHZvaWQgZ2xEcmF3RWxlbWVudHMoaW4gdW5zaWduZWQgbG9uZyBt
b2RlLCBpbiB1bnNpZ25lZCBsb25nIHR5cGUsIENhbnZhc0J5dGVBcnJheSk7CisgICAgICAgIHZv
aWQgICAgICAgICBnbEVuYWJsZShpbiB1bnNpZ25lZCBsb25nIGNhcCk7CisgICAgICAgIHZvaWQg
ICAgICAgICBnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGluIHVuc2lnbmVkIGxvbmcgaW5kZXgp
OworICAgICAgICB2b2lkICAgICAgICAgZ2xGaW5pc2goKTsKKyAgICAgICAgdm9pZCAgICAgICAg
IGdsRmx1c2goKTsKKyAgICAgICAgdm9pZCAgICAgICAgIGdsRnJhbWVidWZmZXJSZW5kZXJidWZm
ZXIoaW4gdW5zaWduZWQgbG9uZyB0YXJnZXQsIGluIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwg
aW4gdW5zaWduZWQgbG9uZyByZW5kZXJidWZmZXJ0YXJnZXQsIGluIENhbnZhc1JlbmRlcmJ1ZmZl
ciByZW5kZXJidWZmZXIpOworICAgICAgICB2b2lkICAgICAgICAgZ2xGcmFtZWJ1ZmZlclRleHR1
cmUyRChpbiB1bnNpZ25lZCBsb25nIHRhcmdldCwgaW4gdW5zaWduZWQgbG9uZyBhdHRhY2htZW50
LCBpbiB1bnNpZ25lZCBsb25nIHRleHRhcmdldCwgaW4gQ2FudmFzVGV4dHVyZSB0ZXh0dXJlLCBp
biBsb25nIGxldmVsKTsKKyAgICAgICAgdm9pZCAgICAgICAgIGdsRnJvbnRGYWNlKGluIHVuc2ln
bmVkIGxvbmcgbW9kZSk7CisgICAgICAgIHZvaWQgICAgICAgICBnbEdlbmVyYXRlTWlwbWFwKGlu
IHVuc2lnbmVkIGxvbmcgdGFyZ2V0KTsKKyAgICAgICAgCisgICAgICAgIC8vdm9pZCAgICAgICAg
IGdsR2V0QXR0YWNoZWRTaGFkZXJzKGluIENhbnZhc1Byb2dyYW0gcHJvZ3JhbSwgaW4gdW5zaWdu
ZWQgbG9uZyBtYXhjb3VudCwgaW4gdW5zaWduZWQgbG9uZyogY291bnQsIGluIHVuc2lnbmVkIGxv
bmcqIHNoYWRlcnMpOworICAgICAgICAKKyAgICAgICAgaW50ICAgICAgICAgIGdsR2V0QXR0cmli
TG9jYXRpb24oaW4gQ2FudmFzUHJvZ3JhbSBwcm9ncmFtLCBpbiBET01TdHJpbmcgbmFtZSk7Cisg
ICAgICAgIHVuc2lnbmVkIGxvbmcgZ2xHZXRFcnJvcigpOworICAgICAgICBET01TdHJpbmcgICAg
Z2xHZXRTaGFkZXJTb3VyY2UoaW4gQ2FudmFzU2hhZGVyIHNoYWRlcik7CisgICAgICAgIERPTVN0
cmluZyAgICBnbEdldFN0cmluZyhpbiB1bnNpZ25lZCBsb25nIG5hbWUpOworICAgICAgICB2b2lk
ICAgICAgICAgZ2xIaW50KGluIHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbiB1bnNpZ25lZCBsb25n
IG1vZGUpOworICAgICAgICBib29sZWFuICAgICAgZ2xJc0J1ZmZlcihpbiBDYW52YXNCdWZmZXIg
YnVmZmVyKTsKKyAgICAgICAgYm9vbGVhbiAgICAgIGdsSXNFbmFibGVkKGluIHVuc2lnbmVkIGxv
bmcgY2FwKTsKKyAgICAgICAgYm9vbGVhbiAgICAgIGdsSXNGcmFtZWJ1ZmZlcihpbiBDYW52YXNG
cmFtZWJ1ZmZlciBmcmFtZWJ1ZmZlcik7CisgICAgICAgIGJvb2xlYW4gICAgICBnbElzUHJvZ3Jh
bShpbiBDYW52YXNQcm9ncmFtIHByb2dyYW0pOworICAgICAgICBib29sZWFuICAgICAgZ2xJc1Jl
bmRlcmJ1ZmZlcihpbiBDYW52YXNSZW5kZXJidWZmZXIgcmVuZGVyYnVmZmVyKTsKKyAgICAgICAg
Ym9vbGVhbiAgICAgIGdsSXNTaGFkZXIoaW4gQ2FudmFzU2hhZGVyIHNoYWRlcik7CisgICAgICAg
IGJvb2xlYW4gICAgICBnbElzVGV4dHVyZShpbiBDYW52YXNUZXh0dXJlIHRleHR1cmUpOworICAg
ICAgICB2b2lkICAgICAgICAgZ2xMaW5lV2lkdGgoaW4gZG91YmxlIHdpZHRoKTsKKyAgICAgICAg
dm9pZCAgICAgICAgIGdsTGlua1Byb2dyYW0oaW4gQ2FudmFzUHJvZ3JhbSBwcm9ncmFtKTsKKyAg
ICAgICAgdm9pZCAgICAgICAgIGdsUGl4ZWxTdG9yZWkoaW4gdW5zaWduZWQgbG9uZyBwbmFtZSwg
aW4gbG9uZyBwYXJhbSk7CisgICAgICAgIHZvaWQgICAgICAgICBnbFBvbHlnb25PZmZzZXQoaW4g
ZG91YmxlIGZhY3RvciwgaW4gZG91YmxlIHVuaXRzKTsKKyAgICAgICAgCisgICAgICAgIC8vdm9p
ZCAgICAgICAgIGdsUmVhZFBpeGVscyhpbiBsb25nIHgsIGluIGxvbmcgeSwgaW4gdW5zaWduZWQg
bG9uZyB3aWR0aCwgaW4gdW5zaWduZWQgbG9uZyBoZWlnaHQsIGluIHVuc2lnbmVkIGxvbmcgZm9y
bWF0LCBpbiB1bnNpZ25lZCBsb25nIHR5cGUsIHZvaWQqIHBpeGVscyk7CisgICAgICAgIAorICAg
ICAgICB2b2lkICAgICAgICAgZ2xSZWxlYXNlU2hhZGVyQ29tcGlsZXIoKTsKKyAgICAgICAgdm9p
ZCAgICAgICAgIGdsUmVuZGVyYnVmZmVyU3RvcmFnZShpbiB1bnNpZ25lZCBsb25nIHRhcmdldCwg
aW4gdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgaW4gdW5zaWduZWQgbG9uZyB3aWR0aCwg
aW4gdW5zaWduZWQgbG9uZyBoZWlnaHQpOworICAgICAgICB2b2lkICAgICAgICAgZ2xTYW1wbGVD
b3ZlcmFnZShpbiBkb3VibGUgdmFsdWUsIGluIGJvb2xlYW4gaW52ZXJ0KTsKKyAgICAgICAgdm9p
ZCAgICAgICAgIGdsU2Npc3NvcihpbiBsb25nIHgsIGluIGxvbmcgeSwgaW4gdW5zaWduZWQgbG9u
ZyB3aWR0aCwgaW4gdW5zaWduZWQgbG9uZyBoZWlnaHQpOworICAgICAgICB2b2lkICAgICAgICAg
Z2xTaGFkZXJTb3VyY2UoaW4gQ2FudmFzU2hhZGVyIHNoYWRlciwgaW4gRE9NU3RyaW5nIHN0cmlu
Zyk7CisgICAgICAgIHZvaWQgICAgICAgICBnbFN0ZW5jaWxGdW5jKGluIHVuc2lnbmVkIGxvbmcg
ZnVuYywgaW4gbG9uZyByZWYsIGluIHVuc2lnbmVkIGxvbmcgbWFzayk7CisgICAgICAgIHZvaWQg
ICAgICAgICBnbFN0ZW5jaWxGdW5jU2VwYXJhdGUoaW4gdW5zaWduZWQgbG9uZyBmYWNlLCBpbiB1
bnNpZ25lZCBsb25nIGZ1bmMsIGluIGxvbmcgcmVmLCBpbiB1bnNpZ25lZCBsb25nIG1hc2spOwor
ICAgICAgICB2b2lkICAgICAgICAgZ2xTdGVuY2lsTWFzayhpbiB1bnNpZ25lZCBsb25nIG1hc2sp
OworICAgICAgICB2b2lkICAgICAgICAgZ2xTdGVuY2lsTWFza1NlcGFyYXRlKGluIHVuc2lnbmVk
IGxvbmcgZmFjZSwgaW4gdW5zaWduZWQgbG9uZyBtYXNrKTsKKyAgICAgICAgdm9pZCAgICAgICAg
IGdsU3RlbmNpbE9wKGluIHVuc2lnbmVkIGxvbmcgZmFpbCwgaW4gdW5zaWduZWQgbG9uZyB6ZmFp
bCwgaW4gdW5zaWduZWQgbG9uZyB6cGFzcyk7CisgICAgICAgIHZvaWQgICAgICAgICBnbFN0ZW5j
aWxPcFNlcGFyYXRlKGluIHVuc2lnbmVkIGxvbmcgZmFjZSwgaW4gdW5zaWduZWQgbG9uZyBmYWls
LCBpbiB1bnNpZ25lZCBsb25nIHpmYWlsLCBpbiB1bnNpZ25lZCBsb25nIHpwYXNzKTsKKyAgICAg
ICAgW0N1c3RvbV0gdm9pZCBnbFRleFBhcmFtZXRlcihpbiB1bnNpZ25lZCBsb25nIHRhcmdldCwg
aW4gdW5zaWduZWQgbG9uZyBwbmFtZSwgaW4gQ2FudmFzTnVtYmVyQXJyYXkgcGFyYW1zKTsKKyAg
ICAgICAgW0N1c3RvbV0gdm9pZCBnbFVuaWZvcm1pKGluIGxvbmcgbG9jYXRpb24sIGluIENhbnZh
c051bWJlckFycmF5IHBhcmFtcyk7CisgICAgICAgIFtDdXN0b21dIHZvaWQgZ2xVbmlmb3JtZihp
biBsb25nIGxvY2F0aW9uLCBpbiBDYW52YXNOdW1iZXJBcnJheSBwYXJhbXMpOworICAgICAgICBb
Q3VzdG9tXSB2b2lkIGdsVW5pZm9ybU1hdHJpeChpbiBsb25nIGxvY2F0aW9uLCBpbiBsb25nIGNv
dW50LCBpbiBib29sZWFuIHRyYW5zcG9zZSwgaW4gQ2FudmFzTnVtYmVyQXJyYXkgcGFyYW1zKTsK
KyAgICAgICAgdm9pZCAgICAgICAgIGdsVXNlUHJvZ3JhbShpbiBDYW52YXNQcm9ncmFtIHByb2dy
YW0pOworICAgICAgICB2b2lkICAgICAgICAgZ2xWYWxpZGF0ZVByb2dyYW0oaW4gQ2FudmFzUHJv
Z3JhbSBwcm9ncmFtKTsKKyAgICAgICAgW0N1c3RvbV0gdm9pZCBnbFZlcnRleEF0dHJpYihpbiB1
bnNpZ25lZCBsb25nIGluZHgsIGluIENhbnZhc051bWJlckFycmF5KTsKKyAgICAgICAgW0N1c3Rv
bV0gdm9pZCBnbFZlcnRleEF0dHJpYlBvaW50ZXIoaW4gdW5zaWduZWQgbG9uZyBpbmR4LCBpbiBs
b25nIHNpemUsIGluIHVuc2lnbmVkIGxvbmcgdHlwZSwgaW4gYm9vbGVhbiBub3JtYWxpemVkLCBp
biB1bnNpZ25lZCBsb25nIHN0cmlkZSwgaW4gQ2FudmFzQnl0ZUFycmF5IGFycmF5KTsKKyAgICAg
ICAgdm9pZCAgICAgICAgIGdsVmlld3BvcnQoaW4gbG9uZyB4LCBpbiBsb25nIHksIGluIHVuc2ln
bmVkIGxvbmcgd2lkdGgsIGluIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KTsKKworICAgICAgICAvLyBO
b24tR0wgZnVuY3Rpb25zCisgICAgICAgIENhbnZhc0J1ZmZlciBjcmVhdGVCdWZmZXIoKTsgICAg
ICAgICAgICAgICAgICAgICAgICAvLyByZXBsYWNlcyBnbEdlbkJ1ZmZlcnMKKyAgICAgICAgQ2Fu
dmFzRnJhbWVidWZmZXIgY3JlYXRlRnJhbWVidWZmZXIoKTsgICAgICAgICAgICAgIC8vIHJlcGxh
Y2VzIGdsR2VuRnJhbWVidWZmZXJzCisgICAgICAgIENhbnZhc1Byb2dyYW0gY3JlYXRlUHJvZ3Jh
bSgpOyAgICAgICAgICAgICAgICAgICAgIC8vIHJlcGxhY2VzIGdsQ3JlYXRlUHJvZ3JhbQorICAg
ICAgICBDYW52YXNTaGFkZXIgY3JlYXRlU2hhZGVyKGluIHVuc2lnbmVkIGxvbmcgdHlwZSk7ICAv
LyByZXBsYWNlcyBnbENyZWF0ZVNoYWRlcgorICAgICAgICBDYW52YXNUZXh0dXJlIGNyZWF0ZVRl
eHR1cmUoKTsgICAgICAgICAgICAgICAgICAgICAgLy8gcmVwbGFjZXMgZ2xHZW5UZXh0dXJlcwor
CisgICAgICAgIHZvaWQgZGVsZXRlQnVmZmVyKGluIENhbnZhc0J1ZmZlciBidWZmZXIpOyAgICAg
ICAgICAgICAgICAvLyByZXBsYWNlcyBnbERlbGV0ZUJ1ZmZlcnMKKyAgICAgICAgdm9pZCBkZWxl
dGVGcmFtZWJ1ZmZlcihpbiBDYW52YXNGcmFtZWJ1ZmZlciBmcmFtZWJ1ZmZlcik7ICAgICAgLy8g
cmVwbGFjZXMgZ2xEZWxldGVGcmFtZWJ1ZmZlcnMKKyAgICAgICAgdm9pZCBkZWxldGVQcm9ncmFt
KGluIENhbnZhc1Byb2dyYW0gcHJvZ3JhbSk7ICAgICAgICAgICAgICAvLyByZXBsYWNlcyBnbERl
bGV0ZVByb2dyYW0KKyAgICAgICAgdm9pZCBkZWxldGVSZW5kZXJidWZmZXIoaW4gQ2FudmFzUmVu
ZGVyYnVmZmVyIHJlbmRlcmJ1ZmZlcik7ICAgIC8vIHJlcGxhY2VzIGdsRGVsZXRlUmVuZGVyYnVm
ZmVycworICAgICAgICB2b2lkIGRlbGV0ZVNoYWRlcihpbiBDYW52YXNTaGFkZXIgc2hhZGVyKTsg
ICAgICAgICAgICAgICAgLy8gcmVwbGFjZXMgZ2xEZWxldGVTaGFkZXIKKyAgICAgICAgdm9pZCBk
ZWxldGVUZXh0dXJlKGluIENhbnZhc1RleHR1cmUgdGV4dHVyZSk7ICAgICAgICAgICAgICAvLyBy
ZXBsYWNlcyBnbERlbGV0ZVRleHR1cmVzCisgICAgICAgIAorICAgICAgICBDYW52YXNOdW1iZXJB
cnJheSBnZXQoaW4gdW5zaWduZWQgbG9uZyBwbmFtZSk7ICAgICAgLy8gcmVwbGFjZXMgZ2xHZXRC
b29sZWFudiwgZ2xHZXRGbG9hdHYgYW5kIGdsR2V0SW50ZWdlcnYKKyAgICAgICAgQ2FudmFzTnVt
YmVyQXJyYXkgZ2V0QnVmZmVyUGFyYW1ldGVyKGluIHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbiB1
bnNpZ25lZCBsb25nIHBuYW1lKTsgLy8gcmVwbGFjZXMgZ2xHZXRCdWZmZXJQYXJhbWV0ZXJpdgor
ICAgICAgICBDYW52YXNOdW1iZXJBcnJheSBnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0
ZXIoaW4gdW5zaWduZWQgbG9uZyB0YXJnZXQsIGluIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwg
aW4gdW5zaWduZWQgbG9uZyBwbmFtZSk7IC8vIHJlcGxhY2VzIGdsR2V0RnJhbWVidWZmZXJBdHRh
Y2htZW50UGFyYW1ldGVyaXYKKyAgICAgICAgQ2FudmFzTnVtYmVyQXJyYXkgZ2V0UHJvZ3JhbShp
biBDYW52YXNQcm9ncmFtIHByb2dyYW0sIGluIHVuc2lnbmVkIGxvbmcgcG5hbWUpOyAvLyByZXBs
YWNlcyBnbEdldFByb2dyYW1pdgorICAgICAgICBET01TdHJpbmcgZ2xHZXRQcm9ncmFtSW5mb0xv
ZyhpbiBDYW52YXNQcm9ncmFtIHByb2dyYW0pOyAvLyByZXBsYWNlcyBnbEdldFByb2dyYW1JbmZv
TG9nCisgICAgICAgIENhbnZhc051bWJlckFycmF5IGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcihp
biB1bnNpZ25lZCBsb25nIHRhcmdldCwgaW4gdW5zaWduZWQgbG9uZyBwbmFtZSk7IC8vIHJlcGxh
Y2VzIGdsR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYKKyAgICAgICAgQ2FudmFzTnVtYmVyQXJy
YXkgZ2V0U2hhZGVyKGluIENhbnZhc1NoYWRlciBzaGFkZXIsIGluIHVuc2lnbmVkIGxvbmcgcG5h
bWUpOyAvLyByZXBsYWNlcyBnbEdldFNoYWRlcml2CisgICAgICAgIERPTVN0cmluZyBnbEdldFNo
YWRlckluZm9Mb2coaW4gQ2FudmFzU2hhZGVyIHNoYWRlcik7CisKKyAgICAgICAgQ2FudmFzTnVt
YmVyQXJyYXkgZ2V0VGV4UGFyYW1ldGVyKGluIHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbiB1bnNp
Z25lZCBsb25nIHBuYW1lKTsgLy8gcmVwbGFjZXMgZ2xHZXRUZXhQYXJhbWV0ZXJmdgorICAgICAg
ICAKKyAgICAgICAgLy8gRklYTUU6IEkgZG9uJ3QgbGlrZSB0aGUgaWRlYSBvZiBwYXNzaW5nIGEg
c2l6ZSB0byB0aGlzIGZ1bmN0aW9uLiBXZSBzaG91bGQgYmUgYWJsZSB0byBmaWd1cmUgaXQgb3V0
LgorICAgICAgICAvLyBCdXQgdGhlIG9ubHkgd2F5IHRvIGRvIHRoYXQgaXMgdG8gc2VhcmNoIHRo
cm91Z2ggYWxsIGFjdGl2ZSB1bmlmb3JtcyBhbmQgZGV0ZXJtaW5lIHRoZSB0eXBlLgorICAgICAg
ICBDYW52YXNOdW1iZXJBcnJheSBnZXRVbmlmb3JtKGluIENhbnZhc1Byb2dyYW0gcHJvZ3JhbSwg
aW4gbG9uZyBsb2NhdGlvbiwgaW4gbG9uZyBzaXplKTsgLy8gcmVwbGFjZXMgZ2xHZXRVbmlmb3Jt
ZnYKKyAgICAgICAgCisgICAgICAgIGxvbmcgZ2V0VW5pZm9ybUxvY2F0aW9uKGluIENhbnZhc1By
b2dyYW0gcHJvZ3JhbSwgaW4gRE9NU3RyaW5nIG5hbWUpOyAvLyByZXBsYWNlcyBnbEdldFVuaWZv
cm1Mb2NhdGlvbgorICAgICAgICBDYW52YXNOdW1iZXJBcnJheSBnZXRWZXJ0ZXhBdHRyaWIoaW4g
dW5zaWduZWQgbG9uZyBpbmRleCwgaW4gdW5zaWduZWQgbG9uZyBwbmFtZSk7IC8vIHJlcGxhY2Vz
IGdsR2V0VmVydGV4QXR0cmliZnYKKyAgICAgICAgCisgICAgICAgIFtDdXN0b21dIHZvaWQgdGV4
SW1hZ2UyRChpbiB1bnNpZ25lZCBsb25nIHRhcmdldCwgaW4gdW5zaWduZWQgbG9uZyBsZXZlbCwg
aW4gSFRNTEltYWdlRWxlbWVudCBpbWFnZSk7IC8vIHJlcGxhY2VzIGdsVGV4SW1hZ2UyRAorICAg
ICAgICBbQ3VzdG9tXSB2b2lkIHRleFN1YkltYWdlMkQoaW4gdW5zaWduZWQgbG9uZyB0YXJnZXQs
IGluIHVuc2lnbmVkIGxvbmcgbGV2ZWwsIGluIHVuc2lnbmVkIGxvbmcgeG9mZiwgaW4gdW5zaWdu
ZWQgbG9uZyB5b2ZmLCBpbiB1bnNpZ25lZCBsb25nIHdpZHRoLCBpbiB1bnNpZ25lZCBsb25nIGhl
aWdodCwgaW4gSFRNTEltYWdlRWxlbWVudCBpbWFnZSk7IC8vIHJlcGxhY2VzIGdsVGV4U3ViSW1h
Z2UyRAorCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIHRyaWNreS4gV2Ugb2J2aW91c2x5IGNh
bid0IHJldHVybiBhIHBvaW50ZXIuIEJ1dCBzb21ldGltZXMgdGhpcyBmdW5jdGlvbiByZXR1cm5z
IGFuIG9mZnNldC4KKyAgICAgICAgLy8gQWxzbywgZG8gd2Ugd2FudCB0byB1c2UgdGhpcyB0byBn
aXZlIGEgcmVmZXJlbmNlIHRvIGEgQ2FudmFzTnVtYmVyQXJyYXk/IElmIHNvLCB3b3VsZCB0aGlz
IG1lcmVseSBiZSBhIGNvcHkKKyAgICAgICAgLy8gb3IgdGhlIGFjdHVhbCBtdXRhYmxlIGFycmF5
PworICAgICAgICAvL3ZvaWQgICAgICAgICBnbEdldFZlcnRleEF0dHJpYlBvaW50ZXJ2KGluIHVu
c2lnbmVkIGxvbmcgaW5kZXgsIGluIHVuc2lnbmVkIGxvbmcgcG5hbWUsIHZvaWQqKiBwb2ludGVy
KTsKKworICAgICAgICAvLyBGSVhNRTogVGhlc2Ugd2lsbCBoYXZlIHRvIGJlIGRvbmUgYnkgcmV0
dXJuaW5nIGEgZGF0YSB0eXBlIHdoaWNoIGhhcyB0aGUgcmV0dXJuZWQgYXR0cmlidXRlcworICAg
ICAgICAvL3ZvaWQgZ2xHZXRBY3RpdmVBdHRyaWIoaW4gQ2FudmFzUHJvZ3JhbSBwcm9ncmFtLCBp
biB1bnNpZ25lZCBsb25nIGluZGV4LCBvdXQgbG9uZyBzaXplLCBvdXQgdW5zaWduZWQgbG9uZyB0
eXBlLCBvdXQgRE9NU3RyaW5nIG5hbWUpOworICAgICAgICAvL3ZvaWQgZ2xHZXRBY3RpdmVVbmlm
b3JtKGluIENhbnZhc1Byb2dyYW0gcHJvZ3JhbSwgaW4gdW5zaWduZWQgbG9uZyBpbmRleCwgb3V0
IGxvbmcgc2l6ZSwgb3V0IHVuc2lnbmVkIGxvbmcgdHlwZSwgb3V0IERPTVN0cmluZyBuYW1lKTsK
KyAgICAgICAgLy92b2lkIGdsR2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KGluIHVuc2lnbmVkIGxv
bmcgc2hhZGVydHlwZSwgaW4gdW5zaWduZWQgbG9uZyBwcmVjaXNpb250eXBlLCBvdXQgbG9uZyBy
YW5nZU1pbiwgb3V0IGxvbmcgcmFuZ2VNYXgsIG91dCBsb25nIHByZWNpc2lvbik7CisgICAgfTsK
K30KKwpJbmRleDogV2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQuaCIKKworI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50Lmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ2FudmFzUmVuZGVyaW5nQ29udGV4dDo6Q2FudmFz
UmVuZGVyaW5nQ29udGV4dChIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzKQorICAgIDogbV9jYW52
YXMoY2FudmFzKQoreworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQ6OnJlZigpCit7
CisgICAgbV9jYW52YXMtPnJlZigpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQ6
OmRlcmVmKCkKK3sKKyAgICBtX2NhbnZhcy0+ZGVyZWYoKTsgCit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIg
dGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMg
b2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ2FudmFzUmVuZGVyaW5nQ29udGV4dF9oCisj
ZGVmaW5lIENhbnZhc1JlbmRlcmluZ0NvbnRleHRfaAorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlh
YmxlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIENhbnZhc09iamVjdDsK
KyAgICBjbGFzcyBIVE1MQ2FudmFzRWxlbWVudDsKKworICAgIGNsYXNzIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQgOiBwdWJsaWMgTm9uY29weWFibGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dChIVE1MQ2FudmFzRWxlbWVudCopOworICAgICAgICB2aXJ0dWFs
IH5DYW52YXNSZW5kZXJpbmdDb250ZXh0KCkgeyB9CisgICAgICAgIAorICAgICAgICB2b2lkIHJl
ZigpOworICAgICAgICB2b2lkIGRlcmVmKCk7CisgICAgICAgIAorICAgICAgICBIVE1MQ2FudmFz
RWxlbWVudCogY2FudmFzKCkgY29uc3QgeyByZXR1cm4gbV9jYW52YXM7IH0KKyAgICAgICAgCisg
ICAgICAgIHZpcnR1YWwgYm9vbCBpczJkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAg
ICAgdmlydHVhbCBib29sIGlzM2QoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCisgICAgcHJv
dGVjdGVkOgorICAgICAgICBIVE1MQ2FudmFzRWxlbWVudCogbV9jYW52YXM7CisgICAgfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvaHRtbC9DYW52
YXNSZW5kZXJpbmdDb250ZXh0LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dC5pZGwJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2h0bWwvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dC5pZGwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK21vZHVs
ZSBodG1sIHsKKworICAgIGludGVyZmFjZSBbCisgICAgICAgIEdlbmVyYXRlQ29uc3RydWN0b3Is
CisgICAgICAgIEludGVyZmFjZVVVSUQ9OThmYjQ4YWUtNzIxNi00ODljLTg2MmItOGUxMjE3ZmM0
NDQzLAorICAgICAgICBJbXBsZW1lbnRhdGlvblVVSUQ9YWI0ZjA3ODEtMTUyZi00NTBlLTk1NDYt
NWIzOTg3NDkxYTU0CisgICAgXSBDYW52YXNSZW5kZXJpbmdDb250ZXh0IHsKKworICAgICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgSFRNTENhbnZhc0VsZW1lbnQgY2FudmFzOworICAgICAgICByZWFk
b25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHR5cGU7CisgICAgfTsKKworfQorCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMu
ICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3Ig
dGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
ZiBFTkFCTEUoM0RfQ0FOVkFTKQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNp
bmNsdWRlICJDYW52YXNPYmplY3QuaCIKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworICAgIAordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVtb3ZlT2JqZWN0
KENhbnZhc09iamVjdCogb2JqZWN0KQoreworICAgIG1fY2FudmFzT2JqZWN0cy5yZW1vdmUob2Jq
ZWN0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YWRkT2JqZWN0KENhbnZhc09iamVj
dCogb2JqZWN0KQoreworICAgIHJlbW92ZU9iamVjdChvYmplY3QpOworICAgIG1fY2FudmFzT2Jq
ZWN0cy5hZGQob2JqZWN0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGV0YWNoQW5k
UmVtb3ZlQWxsT2JqZWN0cygpCit7CisgICAgSGFzaFNldDxDYW52YXNPYmplY3QqPjo6aXRlcmF0
b3IgcGVuZCA9IG1fY2FudmFzT2JqZWN0cy5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8Q2FudmFz
T2JqZWN0Kj46Oml0ZXJhdG9yIGl0ID0gbV9jYW52YXNPYmplY3RzLmJlZ2luKCk7IGl0ICE9IHBl
bmQ7ICsraXQpCisgICAgICAgICgqaXQpLT5kZXRhY2hDb250ZXh0KCk7CisgICAgICAgIAorICAg
IG1fY2FudmFzT2JqZWN0cy5jbGVhcigpOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoM0Rf
Q0FOVkFTKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQz
RC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0M0QuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0M0QuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMzEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
KCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgR3Jh
cGhpY3NDb250ZXh0M0RfaAorI2RlZmluZSBHcmFwaGljc0NvbnRleHQzRF9oCisKKyNpbmNsdWRl
ICJQbGF0Zm9ybVN0cmluZy5oIgorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKKyNp
ZiBQTEFURk9STShNQUMpCisjaW5jbHVkZSA8T3BlbkdML09wZW5HTC5oPgorCit0eXBlZGVmIHZv
aWQqIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0Q7Cit0eXBlZGVmIEdMdWludCBQbGF0Zm9ybTNE
T2JqZWN0OworI2Vsc2UKK3R5cGVkZWYgdm9pZCogUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRDsK
K3R5cGVkZWYgaW50IFBsYXRmb3JtM0RPYmplY3Q7CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworICAgIGNsYXNzIENhbnZhc0J1ZmZlcjsKKyAgICBjbGFzcyBDYW52YXNGcmFtZWJ1ZmZl
cjsKKyAgICBjbGFzcyBDYW52YXNOdW1iZXJBcnJheTsKKyAgICBjbGFzcyBDYW52YXNPYmplY3Q7
CisgICAgY2xhc3MgQ2FudmFzUHJvZ3JhbTsKKyAgICBjbGFzcyBDYW52YXNSZW5kZXJidWZmZXI7
CisgICAgY2xhc3MgQ2FudmFzU2hhZGVyOworICAgIGNsYXNzIENhbnZhc1RleHR1cmU7CisgICAg
Y2xhc3MgSFRNTENhbnZhc0VsZW1lbnQ7CisgICAgY2xhc3MgSFRNTEltYWdlRWxlbWVudDsKKyAg
ICBjbGFzcyBXZWJLaXRDU1NNYXRyaXg7CisgICAgCisgICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0
M0QgOiBOb25jb3B5YWJsZSB7CisgICAgcHVibGljOgorICAgICAgICBHcmFwaGljc0NvbnRleHQz
RCgpOworICAgICAgICB2aXJ0dWFsIH5HcmFwaGljc0NvbnRleHQzRCgpOworICAgICAgIAorICAg
ICAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIHBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0Qo
KSBjb25zdDsKKyAgICAgICAgCisgICAgICAgIHZvaWQgY2hlY2tFcnJvcigpIGNvbnN0OworICAg
ICAgICAKKyAgICAgICAgdmlydHVhbCB2b2lkIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgcmVtb3ZlT2JqZWN0KENhbnZhc09iamVjdCopOworICAgICAgICAKKyAg
ICAgICAgdm9pZCBnbEFjdGl2ZVRleHR1cmUodW5zaWduZWQgbG9uZyB0ZXh0dXJlKTsKKyAgICAg
ICAgdm9pZCBnbEF0dGFjaFNoYWRlcihDYW52YXNQcm9ncmFtKiBwcm9ncmFtLCBDYW52YXNTaGFk
ZXIqIHNoYWRlcik7CisgICAgICAgIHZvaWQgZ2xCaW5kQXR0cmliTG9jYXRpb24oQ2FudmFzUHJv
Z3JhbSosIHVuc2lnbmVkIGxvbmcgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSk7CisgICAgICAg
IHZvaWQgZ2xCaW5kQnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBDYW52YXNCdWZmZXIqKTsK
KyAgICAgICAgdm9pZCBnbEJpbmRGcmFtZWJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgQ2Fu
dmFzRnJhbWVidWZmZXIqKTsKKyAgICAgICAgdm9pZCBnbEJpbmRSZW5kZXJidWZmZXIodW5zaWdu
ZWQgbG9uZyB0YXJnZXQsIENhbnZhc1JlbmRlcmJ1ZmZlciopOworICAgICAgICB2b2lkIGdsQmlu
ZFRleHR1cmUodW5zaWduZWQgdGFyZ2V0LCBDYW52YXNUZXh0dXJlKiB0ZXh0dXJlM0QpOworICAg
ICAgICB2b2lkIGdsQmxlbmRDb2xvcihkb3VibGUgcmVkLCBkb3VibGUgZ3JlZW4sIGRvdWJsZSBi
bHVlLCBkb3VibGUgYWxwaGEpOworICAgICAgICB2b2lkIGdsQmxlbmRFcXVhdGlvbih1bnNpZ25l
ZCBsb25nIG1vZGUgKTsKKyAgICAgICAgdm9pZCBnbEJsZW5kRXF1YXRpb25TZXBhcmF0ZSh1bnNp
Z25lZCBsb25nIG1vZGVSR0IsIHVuc2lnbmVkIGxvbmcgbW9kZUFscGhhKTsKKyAgICAgICAgdm9p
ZCBnbEJsZW5kRnVuYyh1bnNpZ25lZCBsb25nIHNmYWN0b3IsIHVuc2lnbmVkIGxvbmcgZGZhY3Rv
cik7CisgICAgICAgIHZvaWQgZ2xCbGVuZEZ1bmNTZXBhcmF0ZSh1bnNpZ25lZCBsb25nIHNyY1JH
QiwgdW5zaWduZWQgbG9uZyBkc3RSR0IsIHVuc2lnbmVkIGxvbmcgc3JjQWxwaGEsIHVuc2lnbmVk
IGxvbmcgZHN0QWxwaGEpOworICAgICAgICB2b2lkIGdsQnVmZmVyRGF0YSh1bnNpZ25lZCBsb25n
IHRhcmdldCwgQ2FudmFzTnVtYmVyQXJyYXkqLCB1bnNpZ25lZCBsb25nIHVzYWdlKTsKKyAgICAg
ICAgdm9pZCBnbEJ1ZmZlclN1YkRhdGEodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgb2Zmc2V0
LCBDYW52YXNOdW1iZXJBcnJheSopOworICAgICAgICB1bnNpZ25lZCBsb25nIGdsQ2hlY2tGcmFt
ZWJ1ZmZlclN0YXR1cyhDYW52YXNGcmFtZWJ1ZmZlciopOworICAgICAgICB2b2lkIGdsQ2xlYXIo
dW5zaWduZWQgbG9uZyBtYXNrKTsKKyAgICAgICAgdm9pZCBnbENsZWFyQ29sb3IoZG91YmxlIHJl
ZCwgZG91YmxlIGdyZWVuLCBkb3VibGUgYmx1ZSwgZG91YmxlIGFscGhhKTsKKyAgICAgICAgdm9p
ZCBnbENsZWFyRGVwdGgoZG91YmxlIGRlcHRoKTsKKyAgICAgICAgdm9pZCBnbENsZWFyU3RlbmNp
bChsb25nIHMpOworICAgICAgICB2b2lkIGdsQ29sb3JNYXNrKGJvb2wgcmVkLCBib29sIGdyZWVu
LCBib29sIGJsdWUsIGJvb2wgYWxwaGEpOworICAgICAgICB2b2lkIGdsQ29tcGlsZVNoYWRlcihD
YW52YXNTaGFkZXIqKTsKKyAgICAgICAgCisgICAgICAgIC8vdm9pZCBnbENvbXByZXNzZWRUZXhJ
bWFnZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIGxldmVsLCB1bnNpZ25lZCBsb25nIGlu
dGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCwg
bG9uZyBib3JkZXIsIHVuc2lnbmVkIGxvbmcgaW1hZ2VTaXplLCBjb25zdCB2b2lkKiBkYXRhKTsK
KyAgICAgICAgLy92b2lkIGdsQ29tcHJlc3NlZFRleFN1YkltYWdlMkQodW5zaWduZWQgbG9uZyB0
YXJnZXQsIGxvbmcgbGV2ZWwsIGxvbmcgeG9mZnNldCwgbG9uZyB5b2Zmc2V0LCB1bnNpZ25lZCBs
b25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCwgdW5zaWduZWQgbG9uZyBmb3JtYXQsIHVu
c2lnbmVkIGxvbmcgaW1hZ2VTaXplLCBjb25zdCB2b2lkKiBkYXRhKTsKKyAgICAgICAgCisgICAg
ICAgIHZvaWQgZ2xDb3B5VGV4SW1hZ2UyRCh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBsZXZl
bCwgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgbG9uZyB4LCBsb25nIHksIHVuc2lnbmVk
IGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCBsb25nIGJvcmRlcik7CisgICAgICAg
IHZvaWQgZ2xDb3B5VGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBsZXZl
bCwgbG9uZyB4b2Zmc2V0LCBsb25nIHlvZmZzZXQsIGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBs
b25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCk7CisgICAgICAgIHZvaWQgZ2xDdWxsRmFj
ZSh1bnNpZ25lZCBsb25nIG1vZGUpOworICAgICAgICB2b2lkIGdsRGVwdGhGdW5jKHVuc2lnbmVk
IGxvbmcgZnVuYyk7CisgICAgICAgIHZvaWQgZ2xEZXB0aE1hc2soYm9vbCBmbGFnKTsKKyAgICAg
ICAgdm9pZCBnbERlcHRoUmFuZ2UoZG91YmxlIHpOZWFyLCBkb3VibGUgekZhcik7CisgICAgICAg
IHZvaWQgZ2xEZXRhY2hTaGFkZXIoQ2FudmFzUHJvZ3JhbSosIENhbnZhc1NoYWRlciopOworICAg
ICAgICB2b2lkIGdsRGlzYWJsZSh1bnNpZ25lZCBsb25nIGNhcCk7CisgICAgICAgIHZvaWQgZ2xE
aXNhYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQgbG9uZyBpbmRleCk7CisgICAgICAgIHZv
aWQgZ2xEcmF3QXJyYXlzKHVuc2lnbmVkIGxvbmcgbW9kZSwgbG9uZyBmaXJzdCwgdW5zaWduZWQg
bG9uZyBjb3VudCk7CisgICAgICAgIHZvaWQgZ2xEcmF3RWxlbWVudHModW5zaWduZWQgbG9uZyBt
b2RlLCB1bnNpZ25lZCBsb25nIGNvdW50LCB1bnNpZ25lZCBsb25nIHR5cGUsIHZvaWQqIGFycmF5
KTsKKyAgICAgICAgdm9pZCBnbEVuYWJsZSh1bnNpZ25lZCBsb25nIGNhcCk7CisgICAgICAgIHZv
aWQgZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSh1bnNpZ25lZCBsb25nIGluZGV4KTsKKyAgICAg
ICAgdm9pZCBnbEZpbmlzaCgpOworICAgICAgICB2b2lkIGdsRmx1c2goKTsKKyAgICAgICAgdm9p
ZCBnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25l
ZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVkIGxvbmcgcmVuZGVyYnVmZmVydGFyZ2V0LCBDYW52
YXNSZW5kZXJidWZmZXIqKTsKKyAgICAgICAgdm9pZCBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKHVu
c2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVkIGxv
bmcgdGV4dGFyZ2V0LCBDYW52YXNUZXh0dXJlKiwgbG9uZyBsZXZlbCk7CisgICAgICAgIHZvaWQg
Z2xGcm9udEZhY2UodW5zaWduZWQgbG9uZyBtb2RlKTsKKyAgICAgICAgdm9pZCBnbEdlbmVyYXRl
TWlwbWFwKHVuc2lnbmVkIGxvbmcgdGFyZ2V0KTsKKyAgICAgICAgCisgICAgICAgIGludCAgZ2xH
ZXRBdHRyaWJMb2NhdGlvbihDYW52YXNQcm9ncmFtKiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAg
ICAgICAgdW5zaWduZWQgbG9uZyBnbEdldEVycm9yKCk7CisgICAgICAgIFN0cmluZyBnbEdldFN0
cmluZyh1bnNpZ25lZCBsb25nIG5hbWUpOworICAgICAgICB2b2lkIGdsSGludCh1bnNpZ25lZCBs
b25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBtb2RlKTsKKyAgICAgICAgYm9vbCBnbElzQnVmZmVy
KENhbnZhc0J1ZmZlciopOworICAgICAgICBib29sIGdsSXNFbmFibGVkKHVuc2lnbmVkIGxvbmcg
Y2FwKTsKKyAgICAgICAgYm9vbCBnbElzRnJhbWVidWZmZXIoQ2FudmFzRnJhbWVidWZmZXIqKTsK
KyAgICAgICAgYm9vbCBnbElzUHJvZ3JhbShDYW52YXNQcm9ncmFtKik7CisgICAgICAgIGJvb2wg
Z2xJc1JlbmRlcmJ1ZmZlcihDYW52YXNSZW5kZXJidWZmZXIqKTsKKyAgICAgICAgYm9vbCBnbElz
U2hhZGVyKENhbnZhc1NoYWRlciopOworICAgICAgICBib29sIGdsSXNUZXh0dXJlKENhbnZhc1Rl
eHR1cmUqKTsKKyAgICAgICAgdm9pZCBnbExpbmVXaWR0aChkb3VibGUpOworICAgICAgICB2b2lk
IGdsTGlua1Byb2dyYW0oQ2FudmFzUHJvZ3JhbSopOworICAgICAgICB2b2lkIGdsUGl4ZWxTdG9y
ZWkodW5zaWduZWQgbG9uZyBwbmFtZSwgbG9uZyBwYXJhbSk7CisgICAgICAgIHZvaWQgZ2xQb2x5
Z29uT2Zmc2V0KGRvdWJsZSBmYWN0b3IsIGRvdWJsZSB1bml0cyk7CisgICAgICAgIAorICAgICAg
ICAvL3ZvaWQgZ2xSZWFkUGl4ZWxzbG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgs
IHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCB1bnNpZ25lZCBsb25nIGZvcm1hdCwgdW5zaWduZWQgbG9u
ZyB0eXBlLCB2b2lkKiBwaXhlbHMpOworICAgICAgICAKKyAgICAgICAgdm9pZCBnbFJlbGVhc2VT
aGFkZXJDb21waWxlcigpOworICAgICAgICB2b2lkIGdsUmVuZGVyYnVmZmVyU3RvcmFnZSh1bnNp
Z25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQg
bG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpOworICAgICAgICB2b2lkIGdsU2FtcGxl
Q292ZXJhZ2UoZG91YmxlIHZhbHVlLCBib29sIGludmVydCk7CisgICAgICAgIHZvaWQgZ2xTY2lz
c29yKGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhl
aWdodCk7CisgICAgICAgIHZvaWQgZ2xTaGFkZXJTb3VyY2UoQ2FudmFzU2hhZGVyKiwgY29uc3Qg
U3RyaW5nJiBzdHJpbmcpOworICAgICAgICB2b2lkIGdsU3RlbmNpbEZ1bmModW5zaWduZWQgbG9u
ZyBmdW5jLCBsb25nIHJlZiwgdW5zaWduZWQgbG9uZyBtYXNrKTsKKyAgICAgICAgdm9pZCBnbFN0
ZW5jaWxGdW5jU2VwYXJhdGUodW5zaWduZWQgbG9uZyBmYWNlLCB1bnNpZ25lZCBsb25nIGZ1bmMs
IGxvbmcgcmVmLCB1bnNpZ25lZCBsb25nIG1hc2spOworICAgICAgICB2b2lkIGdsU3RlbmNpbE1h
c2sodW5zaWduZWQgbG9uZyBtYXNrKTsKKyAgICAgICAgdm9pZCBnbFN0ZW5jaWxNYXNrU2VwYXJh
dGUodW5zaWduZWQgbG9uZyBmYWNlLCB1bnNpZ25lZCBsb25nIG1hc2spOworICAgICAgICB2b2lk
IGdsU3RlbmNpbE9wKHVuc2lnbmVkIGxvbmcgZmFpbCwgdW5zaWduZWQgbG9uZyB6ZmFpbCwgdW5z
aWduZWQgbG9uZyB6cGFzcyk7CisgICAgICAgIHZvaWQgZ2xTdGVuY2lsT3BTZXBhcmF0ZSh1bnNp
Z25lZCBsb25nIGZhY2UsIHVuc2lnbmVkIGxvbmcgZmFpbCwgdW5zaWduZWQgbG9uZyB6ZmFpbCwg
dW5zaWduZWQgbG9uZyB6cGFzcyk7CisgICAgICAgIHZvaWQgZ2xUZXhQYXJhbWV0ZXIodW5zaWdu
ZWQgdGFyZ2V0LCB1bnNpZ25lZCBwbmFtZSwgQ2FudmFzTnVtYmVyQXJyYXkqKTsKKyAgICAgICAg
dm9pZCBnbFRleFBhcmFtZXRlcih1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIHBuYW1lLCBkb3Vi
bGUgdmFsdWUpOworICAgICAgICB2b2lkIGdsVW5pZm9ybShsb25nIGxvY2F0aW9uLCBmbG9hdCB2
MCk7CisgICAgICAgIHZvaWQgZ2xVbmlmb3JtKGxvbmcgbG9jYXRpb24sIGZsb2F0IHYwLCBmbG9h
dCB2MSk7CisgICAgICAgIHZvaWQgZ2xVbmlmb3JtKGxvbmcgbG9jYXRpb24sIGZsb2F0IHYwLCBm
bG9hdCB2MSwgZmxvYXQgdjIpOworICAgICAgICB2b2lkIGdsVW5pZm9ybShsb25nIGxvY2F0aW9u
LCBmbG9hdCB2MCwgZmxvYXQgdjEsIGZsb2F0IHYyLCBmbG9hdCB2Myk7CisgICAgICAgIHZvaWQg
Z2xVbmlmb3JtKGxvbmcgbG9jYXRpb24sIGludCB2MCk7CisgICAgICAgIHZvaWQgZ2xVbmlmb3Jt
KGxvbmcgbG9jYXRpb24sIGludCB2MCwgaW50IHYxKTsKKyAgICAgICAgdm9pZCBnbFVuaWZvcm0o
bG9uZyBsb2NhdGlvbiwgaW50IHYwLCBpbnQgdjEsIGludCB2Mik7CisgICAgICAgIHZvaWQgZ2xV
bmlmb3JtKGxvbmcgbG9jYXRpb24sIGludCB2MCwgaW50IHYxLCBpbnQgdjIsIGludCB2Myk7Cisg
ICAgICAgIHZvaWQgZ2xVbmlmb3JtKGxvbmcgbG9jYXRpb24sIENhbnZhc051bWJlckFycmF5Kik7
CisgICAgICAgIHZvaWQgZ2xVbmlmb3JtTWF0cml4KGxvbmcgbG9jYXRpb24sIGxvbmcgY291bnQs
IGJvb2wgdHJhbnNwb3NlLCBDYW52YXNOdW1iZXJBcnJheSopOworICAgICAgICB2b2lkIGdsVW5p
Zm9ybU1hdHJpeChsb25nIGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgY29uc3QgVmVjdG9yPFdl
YktpdENTU01hdHJpeCo+Jik7CisgICAgICAgIHZvaWQgZ2xVbmlmb3JtTWF0cml4KGxvbmcgbG9j
YXRpb24sIGJvb2wgdHJhbnNwb3NlLCBjb25zdCBXZWJLaXRDU1NNYXRyaXgqKTsKKyAgICAgICAg
dm9pZCBnbFVzZVByb2dyYW0oQ2FudmFzUHJvZ3JhbSopOworICAgICAgICB2b2lkIGdsVmFsaWRh
dGVQcm9ncmFtKENhbnZhc1Byb2dyYW0qKTsKKyAgICAgICAgdm9pZCBnbFZlcnRleEF0dHJpYih1
bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHYwKTsKKyAgICAgICAgdm9pZCBnbFZlcnRleEF0dHJp
Yih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHYwLCBmbG9hdCB2MSk7CisgICAgICAgIHZvaWQg
Z2xWZXJ0ZXhBdHRyaWIodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCB2MCwgZmxvYXQgdjEsIGZs
b2F0IHYyKTsKKyAgICAgICAgdm9pZCBnbFZlcnRleEF0dHJpYih1bnNpZ25lZCBsb25nIGluZHgs
IGZsb2F0IHYwLCBmbG9hdCB2MSwgZmxvYXQgdjIsIGZsb2F0IHYzKTsKKyAgICAgICAgdm9pZCBn
bFZlcnRleEF0dHJpYih1bnNpZ25lZCBsb25nIGluZHgsIENhbnZhc051bWJlckFycmF5Kik7Cisg
ICAgICAgIHZvaWQgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKHVuc2lnbmVkIGxvbmcgaW5keCwgbG9u
ZyBzaXplLCB1bnNpZ25lZCBsb25nIHR5cGUsIGJvb2wgbm9ybWFsaXplZCwgdW5zaWduZWQgbG9u
ZyBzdHJpZGUsIENhbnZhc051bWJlckFycmF5Kik7CisgICAgICAgIHZvaWQgZ2xWaWV3cG9ydChs
b25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQp
OworICAgICAgICAKKyAgICAgICAgLy8gTm9uLUdMIGZ1bmN0aW9ucworICAgICAgICBQYXNzUmVm
UHRyPENhbnZhc0J1ZmZlcj4gY3JlYXRlQnVmZmVyKCk7CisgICAgICAgIFBhc3NSZWZQdHI8Q2Fu
dmFzRnJhbWVidWZmZXI+IGNyZWF0ZUZyYW1lYnVmZmVyKCk7CisgICAgICAgIFBhc3NSZWZQdHI8
Q2FudmFzUHJvZ3JhbT4gY3JlYXRlUHJvZ3JhbSgpOyAgICAgICAgICAgICAgICAgICAgIC8vIHJl
cGxhY2VzIGdsQ3JlYXRlUHJvZ3JhbQorICAgICAgICBQYXNzUmVmUHRyPENhbnZhc1JlbmRlcmJ1
ZmZlcj4gY3JlYXRlUmVuZGVyYnVmZmVyKCk7CisgICAgICAgIFBhc3NSZWZQdHI8Q2FudmFzU2hh
ZGVyPiBjcmVhdGVTaGFkZXIodW5zaWduZWQgbG9uZyB0eXBlKTsgIC8vIHJlcGxhY2VzIGdsQ3Jl
YXRlU2hhZGVyCisgICAgICAgIFBhc3NSZWZQdHI8Q2FudmFzVGV4dHVyZT4gY3JlYXRlVGV4dHVy
ZSgpOworICAgICAgICAKKyAgICAgICAgdm9pZCBkZWxldGVCdWZmZXIoQ2FudmFzQnVmZmVyKik7
ICAgICAgICAgICAgICAgIC8vIHJlcGxhY2VzIGdsRGVsZXRlQnVmZmVycworICAgICAgICB2b2lk
IGRlbGV0ZUZyYW1lYnVmZmVyKENhbnZhc0ZyYW1lYnVmZmVyKik7ICAgICAgLy8gcmVwbGFjZXMg
Z2xEZWxldGVGcmFtZWJ1ZmZlcnMKKyAgICAgICAgdm9pZCBkZWxldGVQcm9ncmFtKENhbnZhc1By
b2dyYW0qKTsgICAgICAgICAgICAgIC8vIHJlcGxhY2VzIGdsRGVsZXRlUHJvZ3JhbQorICAgICAg
ICB2b2lkIGRlbGV0ZVJlbmRlcmJ1ZmZlcihDYW52YXNSZW5kZXJidWZmZXIqKTsgICAgLy8gcmVw
bGFjZXMgZ2xEZWxldGVSZW5kZXJidWZmZXJzCisgICAgICAgIHZvaWQgZGVsZXRlU2hhZGVyKENh
bnZhc1NoYWRlciopOyAgICAgICAgICAgICAgICAvLyByZXBsYWNlcyBnbERlbGV0ZVNoYWRlcgor
ICAgICAgICB2b2lkIGRlbGV0ZVRleHR1cmUoQ2FudmFzVGV4dHVyZSopOyAgICAgICAgICAgICAg
Ly8gcmVwbGFjZXMgZ2xEZWxldGVUZXh0dXJlcworICAgICAgICAKKyAgICAgICAgUGFzc1JlZlB0
cjxDYW52YXNOdW1iZXJBcnJheT4gZ2V0KHVuc2lnbmVkIGxvbmcgcG5hbWUpOyAgICAgIC8vIHJl
cGxhY2VzIGdsR2V0Qm9vbGVhbnYKKyAgICAgICAgUGFzc1JlZlB0cjxDYW52YXNOdW1iZXJBcnJh
eT4gZ2V0QnVmZmVyUGFyYW1ldGVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25n
IHBuYW1lKTsgLy8gcmVwbGFjZXMgZ2xHZXRCdWZmZXJQYXJhbWV0ZXJpdgorICAgICAgICBQYXNz
UmVmUHRyPENhbnZhc051bWJlckFycmF5PiBnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0
ZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWdu
ZWQgbG9uZyBwbmFtZSk7IC8vIHJlcGxhY2VzIGdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFy
YW1ldGVyaXYKKyAgICAgICAgUGFzc1JlZlB0cjxDYW52YXNOdW1iZXJBcnJheT4gZ2V0UHJvZ3Jh
bShDYW52YXNQcm9ncmFtKiwgdW5zaWduZWQgbG9uZyBwbmFtZSk7IC8vIHJlcGxhY2VzIGdsR2V0
UHJvZ3JhbWl2CisgICAgICAgIFN0cmluZyBnbEdldFByb2dyYW1JbmZvTG9nKENhbnZhc1Byb2dy
YW0qKTsgLy8gcmVwbGFjZXMgZ2xHZXRQcm9ncmFtSW5mb0xvZworICAgICAgICBQYXNzUmVmUHRy
PENhbnZhc051bWJlckFycmF5PiBnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIodW5zaWduZWQgbG9u
ZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUpOyAvLyByZXBsYWNlcyBnbEdldFJlbmRlcmJ1
ZmZlclBhcmFtZXRlcml2CisgICAgICAgIFBhc3NSZWZQdHI8Q2FudmFzTnVtYmVyQXJyYXk+IGdl
dFNoYWRlcihDYW52YXNTaGFkZXIqLCB1bnNpZ25lZCBsb25nIHBuYW1lKTsgLy8gcmVwbGFjZXMg
Z2xHZXRTaGFkZXJpdgorICAgICAgICBTdHJpbmcgZ2xHZXRTaGFkZXJJbmZvTG9nKENhbnZhc1No
YWRlciopOworICAgICAgICBTdHJpbmcgZ2xHZXRTaGFkZXJTb3VyY2UoQ2FudmFzU2hhZGVyKik7
CisgICAgICAgIAorICAgICAgICBQYXNzUmVmUHRyPENhbnZhc051bWJlckFycmF5PiBnZXRUZXhQ
YXJhbWV0ZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUpOyAvLyBy
ZXBsYWNlcyBnbEdldFRleFBhcmFtZXRlcmZ2CisgICAgICAgIFBhc3NSZWZQdHI8Q2FudmFzTnVt
YmVyQXJyYXk+IGdldFVuaWZvcm0oQ2FudmFzUHJvZ3JhbSosIGxvbmcgbG9jYXRpb24sIGxvbmcg
c2l6ZSk7IC8vIHJlcGxhY2VzIGdsR2V0VW5pZm9ybWZ2CisgICAgICAgIGxvbmcgZ2V0VW5pZm9y
bUxvY2F0aW9uKENhbnZhc1Byb2dyYW0qLCBjb25zdCBTdHJpbmcmIG5hbWUpOyAvLyByZXBsYWNl
cyBnbEdldFVuaWZvcm1Mb2NhdGlvbgorICAgICAgICBQYXNzUmVmUHRyPENhbnZhc051bWJlckFy
cmF5PiBnZXRWZXJ0ZXhBdHRyaWIodW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBw
bmFtZSk7IC8vIHJlcGxhY2VzIGdsR2V0VmVydGV4QXR0cmliZnYKKyAgICAgICAgCisgICAgICAg
IC8vIFRoZXNlIG5leHQgNCBmdW5jdGlvbnMgcmV0dXJuIGFuIGVycm9yIGNvZGUwIGlmIG5vIGVy
cm9ycykgcmF0aGVyIHRoYW4gdXNpbmcgYW4gRXhjZXB0aW9uQ29kZS4KKyAgICAgICAgLy8gQ3Vy
cmVudGx5IHRoZXkgcmV0dXJuIC0xIG9uIGFueSBlcnJvci4KKyAgICAgICAgaW50IHRleEltYWdl
MkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgSFRNTEltYWdlRWxlbWVudCogaW1h
Z2UpOworICAgICAgICBpbnQgdGV4SW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxl
dmVsLCBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzKTsKKyAgICAgICAgaW50IHRleFN1YkltYWdl
MkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgeG9mZiwgdW5zaWdu
ZWQgeW9mZiwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgSFRNTEltYWdlRWxlbWVu
dCogaW1hZ2UpOworICAgICAgICBpbnQgdGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVu
c2lnbmVkIGxldmVsLCB1bnNpZ25lZCB4b2ZmLCB1bnNpZ25lZCB5b2ZmLCB1bnNpZ25lZCB3aWR0
aCwgdW5zaWduZWQgaGVpZ2h0LCBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzKTsKKyAgICAgICAg
CisgICAgICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgY29udGV4dDNEKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb250ZXh0T2JqOyB9CisgICAgICAgIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZTNE
KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UGxhdGZvcm0zRE9iamVjdD4obV90ZXh0dXJl
KTsgfQorICAgICAgICAKKyAgICAgICAgdm9pZCByZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdo
dCk7CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgYWRkT2JqZWN0KENhbnZh
c09iamVjdCopOworICAgICAgICB2b2lkIGRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMoKTsKKyAg
ICAgICAgCisgICAgICAgIGludCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0OworICAg
ICAgICAKKyAgICAgICAgVmVjdG9yPFZlY3RvcjxmbG9hdD4gPiBtX3ZlcnRleEFycmF5OworICAg
ICAgICBIYXNoU2V0PENhbnZhc09iamVjdCo+IG1fY2FudmFzT2JqZWN0czsKKyAgICAgICAgCisj
aWYgUExBVEZPUk0oTUFDKQorICAgICAgICBDR0xDb250ZXh0T2JqIG1fY29udGV4dE9iajsKKyAg
ICAgICAgR0x1aW50IG1fdGV4dHVyZTsKKyAgICAgICAgR0x1aW50IG1fZmJvOworICAgICAgICBH
THVpbnQgbV9kZXB0aEJ1ZmZlcjsKKyNlbmRpZiAgICAgICAgCisgICAgfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gR3JhcGhpY3NDb250ZXh0M0RfaAorCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9DYW52YXMzRExheWVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ2FudmFzM0RMYXllci5oCShyZXZpc2lv
biAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ2FudmFzM0RMYXllci5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhl
IG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENhbnZhczNETGF5ZXJfaAorI2Rl
ZmluZSBDYW52YXMzRExheWVyX2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
KworI2ltcG9ydCAiV2ViTGF5ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIGNsYXNz
IEdyYXBoaWNzTGF5ZXI7Cit9CisKK0BpbnRlcmZhY2UgQ2FudmFzM0RMYXllciA6IENBT3BlbkdM
TGF5ZXIgCit7CisgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogbV9sYXllck93bmVyOworICAg
IENHTENvbnRleHRPYmogbV9jb250ZXh0T2JqOworICAgIEdMdWludCBtX3RleHR1cmU7Cit9CisK
Ky0oaWQpaW5pdFdpdGhDb250ZXh0OihDR0xDb250ZXh0T2JqKWNvbnRleHQgdGV4dHVyZTooR0x1
aW50KXRleHR1cmU7CisKK0BlbmQKKworI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKKworI2VuZGlmIC8vIENhbnZhczNETGF5ZXJfaApJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9tYWMvQ2FudmFzM0RMYXllci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9DYW52YXMzRExheWVyLm1tCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ2FudmFzM0RMYXllci5tbQkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YK
KyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorCisjaW1wb3J0ICJDYW52
YXMzRExheWVyLmgiCisKKyNpbXBvcnQgIkdyYXBoaWNzTGF5ZXIuaCIKKyNpbXBvcnQgPFF1YXJ0
ekNvcmUvUXVhcnR6Q29yZS5oPgorI2ltcG9ydCA8T3BlbkdML09wZW5HTC5oPgorCit1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKKworQGltcGxlbWVudGF0aW9uIENhbnZhczNETGF5ZXIKKworLShp
ZClpbml0V2l0aENvbnRleHQ6KENHTENvbnRleHRPYmopY29udGV4dCB0ZXh0dXJlOihHTHVpbnQp
dGV4dHVyZQoreworICAgIG1fY29udGV4dE9iaiA9IGNvbnRleHQ7CisgICAgbV90ZXh0dXJlID0g
dGV4dHVyZTsKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIHJldHVybiBzZWxmOworfQor
CistKENHTFBpeGVsRm9ybWF0T2JqKWNvcHlDR0xQaXhlbEZvcm1hdEZvckRpc3BsYXlNYXNrOih1
aW50MzJfdCltYXNrCit7CisgICAgQ0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGUgYXR0cmlic1tdID0K
KyAgICB7CisgICAgICAgIChDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZSkga0NHTFBGQUFjY2VsZXJh
dGVkLAorICAgICAgICAoQ0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGUpIGtDR0xQRkFDb2xvclNpemUs
IChDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZSkgMzIsCisgICAgICAgIChDR0xQaXhlbEZvcm1hdEF0
dHJpYnV0ZSkga0NHTFBGQURpc3BsYXlNYXNrLCAoQ0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGUpIG1h
c2ssCisgICAgICAgIChDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZSkgMAorICAgIH07CisgICAgCisg
ICAgQ0dMUGl4ZWxGb3JtYXRPYmogcGl4ZWxGb3JtYXRPYmo7CisgICAgR0xpbnQgbnVtUGl4ZWxG
b3JtYXRzOworIAorICAgIENHTENob29zZVBpeGVsRm9ybWF0KGF0dHJpYnMsICZwaXhlbEZvcm1h
dE9iaiwgJm51bVBpeGVsRm9ybWF0cyk7CisgICAgcmV0dXJuIHBpeGVsRm9ybWF0T2JqOworfQor
CistKENHTENvbnRleHRPYmopY29weUNHTENvbnRleHRGb3JQaXhlbEZvcm1hdDooQ0dMUGl4ZWxG
b3JtYXRPYmopcGl4ZWxGb3JtYXQKK3sKKyAgICBDR0xDb250ZXh0T2JqIGNvbnRleHRPYmo7Cisg
ICAgQ0dMQ3JlYXRlQ29udGV4dChwaXhlbEZvcm1hdCwgbV9jb250ZXh0T2JqLCAmY29udGV4dE9i
aik7CisgICAgcmV0dXJuIGNvbnRleHRPYmo7Cit9CisKKy0odm9pZClkcmF3SW5DR0xDb250ZXh0
OihDR0xDb250ZXh0T2JqKWdsQ29udGV4dCBwaXhlbEZvcm1hdDooQ0dMUGl4ZWxGb3JtYXRPYmop
cGl4ZWxGb3JtYXQgZm9yTGF5ZXJUaW1lOihDRlRpbWVJbnRlcnZhbCl0aW1lSW50ZXJ2YWwgZGlz
cGxheVRpbWU6KGNvbnN0IENWVGltZVN0YW1wICopdGltZVN0YW1wCit7CisgICAgQ0dSZWN0IGZy
YW1lID0gW3NlbGYgZnJhbWVdOworICAgICAgICAKKyAgICAvLyBkcmF3IHRoZSBGQk8gaW50byB0
aGUgbGF5ZXIKKyAgICBnbFZpZXdwb3J0KDAsIDAsIGZyYW1lLnNpemUud2lkdGgsIGZyYW1lLnNp
emUuaGVpZ2h0KTsKKyAgICBnbE1hdHJpeE1vZGUoR0xfUFJPSkVDVElPTik7CisgICAgZ2xMb2Fk
SWRlbnRpdHkoKTsKKyAgICBnbE9ydGhvKC0xLCAxLCAtMSwgMSwgLTEsIDEpOworICAgIGdsTWF0
cml4TW9kZShHTF9NT0RFTFZJRVcpOworICAgIGdsTG9hZElkZW50aXR5KCk7CisKKyAgICBnbEVu
YWJsZShHTF9URVhUVVJFXzJEKTsKKyAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1f
dGV4dHVyZSk7CisgICAgCisgICAgZ2xCZWdpbihHTF9UUklBTkdMRV9GQU4pOworICAgICAgICBn
bFRleENvb3JkMmYoMCwgMCk7CisgICAgICAgIGdsVmVydGV4MmYoLTEsIC0xKTsKKyAgICAgICAg
Z2xUZXhDb29yZDJmKDEsIDApOworICAgICAgICBnbFZlcnRleDJmKDEsIC0xKTsKKyAgICAgICAg
Z2xUZXhDb29yZDJmKDEsIDEpOworICAgICAgICBnbFZlcnRleDJmKDEsIDEpOworICAgICAgICBn
bFRleENvb3JkMmYoMCwgMSk7CisgICAgICAgIGdsVmVydGV4MmYoLTEsIDEpOworICAgIGdsRW5k
KCk7CisgICAgCisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKKyAgICBnbERp
c2FibGUoR0xfVEVYVFVSRV8yRCk7CisKKyAgICAvLyBDYWxsIHN1cGVyIHRvIGZpbmFsaXplIHRo
ZSBkcmF3aW5nLiBCeSBkZWZhdWx0IGFsbCBpdCBkb2VzIGlzIGNhbGwgZ2xGbHVzaCgpLgorICAg
IFtzdXBlciBkcmF3SW5DR0xDb250ZXh0OmdsQ29udGV4dCBwaXhlbEZvcm1hdDpwaXhlbEZvcm1h
dCBmb3JMYXllclRpbWU6dGltZUludGVydmFsIGRpc3BsYXlUaW1lOnRpbWVTdGFtcF07Cit9CisK
K0BlbmQKKworQGltcGxlbWVudGF0aW9uIENhbnZhczNETGF5ZXIoV2ViTGF5ZXJBZGRpdGlvbnMp
CisKKy0odm9pZClzZXRMYXllck93bmVyOihHcmFwaGljc0xheWVyKilhTGF5ZXIKK3sKKyAgICBt
X2xheWVyT3duZXIgPSBhTGF5ZXI7Cit9CisKKy0oR3JhcGhpY3NMYXllciopbGF5ZXJPd25lcgor
eworICAgIHJldHVybiBtX2xheWVyT3duZXI7Cit9CisKK0BlbmQKKworI2VuZGlmIC8vIEVOQUJM
RSgzRF9DQU5WQVMpCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29u
dGV4dDNETWFjLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNTUy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxl
IENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKworI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCisj
aW5jbHVkZSAiQ2FudmFzQnVmZmVyLmgiCisjaW5jbHVkZSAiQ2FudmFzRnJhbWVidWZmZXIuaCIK
KyNpbmNsdWRlICJDYW52YXNOdW1iZXJBcnJheS5oIgorI2luY2x1ZGUgIkNhbnZhc09iamVjdC5o
IgorI2luY2x1ZGUgIkNhbnZhc1Byb2dyYW0uaCIKKyNpbmNsdWRlICJDYW52YXNSZW5kZXJidWZm
ZXIuaCIKKyNpbmNsdWRlICJDYW52YXNTaGFkZXIuaCIKKyNpbmNsdWRlICJDYW52YXNUZXh0dXJl
LmgiCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50Lmgi
CisjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgi
CisjaW5jbHVkZSAiV2ViS2l0Q1NTTWF0cml4LmgiCisKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3Mv
Q0dCaXRtYXBDb250ZXh0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworR3JhcGhpY3NDb250
ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKCkKK3sKKyAgICBDR0xQaXhlbEZvcm1hdEF0dHJpYnV0
ZSBhdHRyaWJzW10gPQorICAgIHsKKyAgICAgICAgKENHTFBpeGVsRm9ybWF0QXR0cmlidXRlKSBr
Q0dMUEZBQWNjZWxlcmF0ZWQsCisgICAgICAgIChDR0xQaXhlbEZvcm1hdEF0dHJpYnV0ZSkga0NH
TFBGQUNvbG9yU2l6ZSwgKENHTFBpeGVsRm9ybWF0QXR0cmlidXRlKSAzMiwKKyAgICAgICAgKENH
TFBpeGVsRm9ybWF0QXR0cmlidXRlKSBrQ0dMUEZBRGVwdGhTaXplLCAoQ0dMUGl4ZWxGb3JtYXRB
dHRyaWJ1dGUpIDMyLAorICAgICAgICAoQ0dMUGl4ZWxGb3JtYXRBdHRyaWJ1dGUpIGtDR0xQRkFT
dXBlcnNhbXBsZSwKKyAgICAgICAgKENHTFBpeGVsRm9ybWF0QXR0cmlidXRlKSAwCisgICAgfTsK
KyAgICAKKyAgICBDR0xQaXhlbEZvcm1hdE9iaiBwaXhlbEZvcm1hdE9iajsKKyAgICBHTGludCBu
dW1QaXhlbEZvcm1hdHM7CisgICAgCisgICAgQ0dMQ2hvb3NlUGl4ZWxGb3JtYXQoYXR0cmlicywg
JnBpeGVsRm9ybWF0T2JqLCAmbnVtUGl4ZWxGb3JtYXRzKTsKKyAgICAKKyAgICBDR0xDcmVhdGVD
b250ZXh0KHBpeGVsRm9ybWF0T2JqLCAwLCAmbV9jb250ZXh0T2JqKTsKKyAgICAKKyAgICBDR0xE
ZXN0cm95UGl4ZWxGb3JtYXQocGl4ZWxGb3JtYXRPYmopOworICAgIAorICAgIC8vIFNldCB0aGUg
Y3VycmVudCBjb250ZXh0IHRvIHRoZSBvbmUgZ2l2ZW4gdG8gdXMuCisgICAgQ0dMU2V0Q3VycmVu
dENvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICAKKyAgICAvLyBjcmVhdGUgYSB0ZXh0dXJlIHRv
IHJlbmRlciBpbnRvCisgICAgOjpnbEdlblRleHR1cmVzKDEsICZtX3RleHR1cmUpOworICAgIDo6
Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOworICAgIDo6Z2xUZXhQYXJh
bWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsK
KyAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxU
RVIsIEdMX0xJTkVBUik7CisgICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xf
VEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhU
VVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVApOworICAgIDo6Z2xUZXhJbWFnZTJE
KEdMX1RFWFRVUkVfMkQsIDAsIEdMX1JHQkE4LCAxLCAxLCAwLCBHTF9SR0JBLCBHTF9VTlNJR05F
RF9CWVRFLCAwKTsKKyAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7CisgICAg
CisgICAgLy8gY3JlYXRlIGFuIEZCTworICAgIDo6Z2xHZW5GcmFtZWJ1ZmZlcnNFWFQoMSwgJm1f
ZmJvKTsKKyAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9m
Ym8pOworICAgIAorICAgIDo6Z2xHZW5SZW5kZXJidWZmZXJzRVhUKDEsICZtX2RlcHRoQnVmZmVy
KTsKKyAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBtX2Rl
cHRoQnVmZmVyKTsKKyAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZUVYVChHTF9SRU5ERVJCVUZG
RVJfRVhULCBHTF9ERVBUSF9DT01QT05FTlQsIDEsIDEpOworICAgIDo6Z2xCaW5kUmVuZGVyYnVm
ZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIDApOworICAgIAorICAgIDo6Z2xGcmFtZWJ1ZmZl
clRleHR1cmUyREVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VY
VCwgR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlLCAwKTsKKyAgICA6OmdsRnJhbWVidWZmZXJSZW5k
ZXJidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9ERVBUSF9BVFRBQ0hNRU5UX0VYVCwg
R0xfUkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0aEJ1ZmZlcik7CisgICAgCisgICAgOjpnbENsZWFy
Q29sb3IoMCwgMCwgMCwgMCk7Cit9CisKKyBHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29u
dGV4dDNEKCkKK3sKKyAgICAvLyB0ZWxsIGFsbCB0aGUgb2JqZWN0cyB3ZSdyZSBnb2luZyBhd2F5
CisgICAgZGV0YWNoQW5kUmVtb3ZlQWxsT2JqZWN0cygpOworICAgIAorICAgIENHTFNldEN1cnJl
bnRDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQo
MSwgJiBtX2RlcHRoQnVmZmVyKTsKKyAgICA6OmdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVy
ZSk7CisgICAgOjpnbERlbGV0ZUZyYW1lYnVmZmVyc0VYVCgxLCAmbV9mYm8pOworICAgIENHTFNl
dEN1cnJlbnRDb250ZXh0KDApOworICAgIENHTERlc3Ryb3lDb250ZXh0KG1fY29udGV4dE9iaik7
Cit9CisKK1BsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgR3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRm
b3JtR3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbnRleHRPYmo7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNoZWNrRXJyb3IoKSBjb25zdAoreworICAg
IC8vIEZJWE1FOiBUaGlzIG5lZWRzIHRvIG9ubHkgYmUgZG9uZSBpbiB0aGUgZGVidWcgY29udGV4
dC4gSXQgd2lsbCBwcm9iYWJseSB0aHJvdyBhbiBleGNlcHRpb24KKyAgICAvLyBvbiBlcnJvciBh
bmQgcHJpbnQgdGhlIGVycm9yIG1lc3NhZ2UgdG8gdGhlIGRlYnVnIGNvbnNvbGUKKyAgICBHTGVu
dW0gZXJyb3IgPSA6OmdsR2V0RXJyb3IoKTsKKyAgICBpZiAoZXJyb3IgIT0gR0xfTk9fRVJST1Ip
CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiKioqIEdMIGVycm9yICVkXG4iLCBlcnJvcik7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om1ha2VDb250ZXh0Q3VycmVudCgpCit7CisgICAg
Q0dMU2V0Q3VycmVudENvbnRleHQobV9jb250ZXh0T2JqKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCit7CisgICAgaWYgKHdpZHRo
ID09IG1fY3VycmVudFdpZHRoICYmIGhlaWdodCA9PSBtX2N1cnJlbnRIZWlnaHQpCisgICAgICAg
IHJldHVybjsKKyAgICAKKyAgICBtX2N1cnJlbnRXaWR0aCA9IHdpZHRoOworICAgIG1fY3VycmVu
dEhlaWdodCA9IGhlaWdodDsKKyAgICAKKyAgICBDR0xTZXRDdXJyZW50Q29udGV4dChtX2NvbnRl
eHRPYmopOworICAgIAorICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1
cmUpOworICAgIDo6Z2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIEdMX1JHQkE4LCB3aWR0
aCwgaGVpZ2h0LCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKKyAgICA6OmdsQmlu
ZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7CisgICAgCisgICAgOjpnbEJpbmRGcmFtZWJ1ZmZl
ckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAgICA6OmdsQmluZFJlbmRlcmJ1ZmZl
ckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBtX2RlcHRoQnVmZmVyKTsKKyAgICA6OmdsUmVuZGVy
YnVmZmVyU3RvcmFnZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBHTF9ERVBUSF9DT01QT05FTlQs
IHdpZHRoLCBoZWlnaHQpOworICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJV
RkZFUl9FWFQsIDApOworICAgIAorICAgIDo6Z2xGcmFtZWJ1ZmZlclRleHR1cmUyREVYVChHTF9G
UkFNRUJVRkZFUl9FWFQsIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCwgR0xfVEVYVFVSRV8yRCwg
bV90ZXh0dXJlLCAwKTsKKyAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR0xfRlJB
TUVCVUZGRVJfRVhULCBHTF9ERVBUSF9BVFRBQ0hNRU5UX0VYVCwgR0xfUkVOREVSQlVGRkVSX0VY
VCwgbV9kZXB0aEJ1ZmZlcik7CisgICAgR0xlbnVtIHN0YXR1cyA9IDo6Z2xDaGVja0ZyYW1lYnVm
ZmVyU3RhdHVzRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCk7CisgICAgaWYgKHN0YXR1cyAhPSBHTF9G
UkFNRUJVRkZFUl9DT01QTEVURV9FWFQpIHsKKyAgICAgICAgLy8gRklYTUU6IGNsZWFudXAKKyAg
ICAgICAgQVNTRVJUKDApOworICAgIH0KKworICAgIDo6Z2xDbGVhcihHTF9DT0xPUl9CVUZGRVJf
QklUKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGVuc3VyZUNvbnRleHQoQ0dMQ29udGV4dE9i
aiBjb250ZXh0KQoreworICAgIENHTENvbnRleHRPYmogY3VycmVudENvbnRleHQgPSBDR0xHZXRD
dXJyZW50Q29udGV4dCgpOworICAgIGlmIChjdXJyZW50Q29udGV4dCAhPSBjb250ZXh0KQorICAg
ICAgICBDR0xTZXRDdXJyZW50Q29udGV4dChjb250ZXh0KTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6Z2xBY3RpdmVUZXh0dXJlKHVuc2lnbmVkIGxvbmcgdGV4dHVyZSkKK3sKKyAgICBl
bnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAgOjpnbEFjdGl2ZVRleHR1cmUodGV4dHVy
ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdsQXR0YWNoU2hhZGVyKENhbnZhc1By
b2dyYW0qIHByb2dyYW0sIENhbnZhc1NoYWRlciogc2hhZGVyKQoreworICAgIGlmICghcHJvZ3Jh
bSB8fCAhc2hhZGVyKQorICAgICAgICByZXR1cm47CisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRl
eHRPYmopOworICAgIDo6Z2xBdHRhY2hTaGFkZXIoKEdMdWludCkgcHJvZ3JhbS0+b2JqZWN0KCks
IChHTHVpbnQpIHNoYWRlci0+b2JqZWN0KCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpnbEJpbmRBdHRyaWJMb2NhdGlvbihDYW52YXNQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBs
b25nIGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgaWYgKCFwcm9ncmFtKQorICAg
ICAgICByZXR1cm47CisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOworICAgIDo6Z2xC
aW5kQXR0cmliTG9jYXRpb24oKEdMdWludCkgcHJvZ3JhbS0+b2JqZWN0KCksIGluZGV4LCBuYW1l
LnV0ZjgoKS5kYXRhKCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnbEJpbmRCdWZm
ZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIENhbnZhc0J1ZmZlciogYnVmZmVyKQoreworICAgIGVu
c3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICA6OmdsQmluZEJ1ZmZlcih0YXJnZXQsIGJ1
ZmZlciA/IChHTHVpbnQpIGJ1ZmZlci0+b2JqZWN0KCkgOiAwKTsKK30KKworCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpnbEJpbmRGcmFtZWJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgQ2Fu
dmFzRnJhbWVidWZmZXIqIGJ1ZmZlcikKK3sKKyAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9i
aik7CisgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVCh0YXJnZXQsIGJ1ZmZlciA/IChHTHVpbnQp
IGJ1ZmZlci0+b2JqZWN0KCkgOiBtX2Zibyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmdsQmluZFJlbmRlcmJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgQ2FudmFzUmVuZGVyYnVm
ZmVyKiByZW5kZXJidWZmZXIpCit7CisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOwor
ICAgIDo6Z2xCaW5kQnVmZmVyKHRhcmdldCwgcmVuZGVyYnVmZmVyID8gKEdMdWludCkgcmVuZGVy
YnVmZmVyLT5vYmplY3QoKSA6IDApOworfQorCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Omds
QmluZFRleHR1cmUodW5zaWduZWQgdGFyZ2V0LCBDYW52YXNUZXh0dXJlKiB0ZXh0dXJlKQorewor
ICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICA6OmdsQmluZFRleHR1cmUodGFy
Z2V0LCB0ZXh0dXJlID8gKEdMdWludCkgdGV4dHVyZS0+b2JqZWN0KCkgOiAwKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6Z2xCbGVuZENvbG9yKGRvdWJsZSByZWQsIGRvdWJsZSBncmVl
biwgZG91YmxlIGJsdWUsIGRvdWJsZSBhbHBoYSkKK3sKKyAgICBlbnN1cmVDb250ZXh0KG1fY29u
dGV4dE9iaik7CisgICAgOjpnbEJsZW5kQ29sb3Ioc3RhdGljX2Nhc3Q8ZmxvYXQ+KHJlZCksIHN0
YXRpY19jYXN0PGZsb2F0PihncmVlbiksIHN0YXRpY19jYXN0PGZsb2F0PihibHVlKSwgc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KGFscGhhKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdsQmxl
bmRFcXVhdGlvbiggdW5zaWduZWQgbG9uZyBtb2RlICkKK3sKKyAgICBlbnN1cmVDb250ZXh0KG1f
Y29udGV4dE9iaik7CisgICAgOjpnbEJsZW5kRXF1YXRpb24obW9kZSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmdsQmxlbmRFcXVhdGlvblNlcGFyYXRlKHVuc2lnbmVkIGxvbmcgbW9k
ZVJHQiwgdW5zaWduZWQgbG9uZyBtb2RlQWxwaGEpCit7CisgICAgZW5zdXJlQ29udGV4dChtX2Nv
bnRleHRPYmopOworICAgIDo6Z2xCbGVuZEVxdWF0aW9uU2VwYXJhdGUobW9kZVJHQiwgbW9kZUFs
cGhhKTsKK30KKworCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnbEJsZW5kRnVuYyh1bnNpZ25l
ZCBsb25nIHNmYWN0b3IsIHVuc2lnbmVkIGxvbmcgZGZhY3RvcikKK3sKKyAgICBlbnN1cmVDb250
ZXh0KG1fY29udGV4dE9iaik7CisgICAgOjpnbEJsZW5kRnVuYyhzZmFjdG9yLCBkZmFjdG9yKTsK
K30gICAgICAgCisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdsQmxlbmRGdW5jU2VwYXJhdGUo
dW5zaWduZWQgbG9uZyBzcmNSR0IsIHVuc2lnbmVkIGxvbmcgZHN0UkdCLCB1bnNpZ25lZCBsb25n
IHNyY0FscGhhLCB1bnNpZ25lZCBsb25nIGRzdEFscGhhKQoreworICAgIGVuc3VyZUNvbnRleHQo
bV9jb250ZXh0T2JqKTsKKyAgICA6OmdsQmxlbmRGdW5jU2VwYXJhdGUoc3JjUkdCLCBkc3RSR0Is
IHNyY0FscGhhLCBkc3RBbHBoYSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdsQnVm
ZmVyRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgQ2FudmFzTnVtYmVyQXJyYXkqIGFycmF5LCB1
bnNpZ25lZCBsb25nIHVzYWdlKQoreworICAgIGlmICghYXJyYXkgfHwgIWFycmF5LT5kYXRhKCku
c2l6ZSgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRl
eHRPYmopOworICAgIAorICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgY29tcGxldGUgaGFjay4gSWYg
dGhlIHRhcmdldCBpcyBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUiB0aGVuIHRoZQorICAgIC8vIHBh
c3NlZCBkYXRhIG5lZWRzIHRvIGJlIGJ5dGVzIG9yIHNob3J0cyBiZWNhdXNlIHRob3NlIGFyZSB0
aGUgb25seSB0eXBlcyBzdXBwb3J0ZWQKKyAgICAvLyBieSBHTCBFUyAyLjAuIFNvIGZvciBub3cg
d2UganVzdCBjb252ZXJ0IHRvIGEgc2hvcnQgYnVmZmVyCisgICAgaWYgKHRhcmdldCA9PSBHTF9F
TEVNRU5UX0FSUkFZX0JVRkZFUikgeworICAgICAgICB1aW50MTZfdCogYnVmID0gKHVpbnQxNl90
KikgbWFsbG9jKGFycmF5LT5kYXRhKCkuc2l6ZSgpICogc2l6ZW9mKHVpbnQxNl90KSk7CisgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXktPmRhdGEoKS5zaXplKCk7ICsraSkKKyAg
ICAgICAgICAgIGJ1ZltpXSA9ICh1aW50MTZfdCkgYXJyYXktPmRhdGEoKVtpXTsKKyAgICAgICAg
CisgICAgICAgIDo6Z2xCdWZmZXJEYXRhKHRhcmdldCwgYXJyYXktPmRhdGEoKS5zaXplKCkgKiBz
aXplb2YodWludDE2X3QpLCBidWYsIHVzYWdlKTsKKyAgICAgICAgZnJlZShidWYpOworICAgIH0K
KyAgICBlbHNlCisgICAgICAgIDo6Z2xCdWZmZXJEYXRhKHRhcmdldCwgYXJyYXktPmRhdGEoKS5z
aXplKCkgKiBzaXplb2YoZmxvYXQpLCAmKGFycmF5LT5kYXRhKClbMF0pLCB1c2FnZSk7CisgICAg
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdsQnVmZmVyU3ViRGF0YSh1bnNpZ25lZCBs
b25nIHRhcmdldCwgbG9uZyBvZmZzZXQsIENhbnZhc051bWJlckFycmF5KiBhcnJheSkKK3sKKyAg
ICBpZiAoIWFycmF5IHx8ICFhcnJheS0+ZGF0YSgpLnNpemUoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICA6OmdsQnVmZmVyU3Vi
RGF0YSh0YXJnZXQsIG9mZnNldCwgYXJyYXktPmRhdGEoKS5zaXplKCkgKiBzaXplb2YoZmxvYXQp
LCAmKGFycmF5LT5kYXRhKClbMF0pKTsKK30KKwordW5zaWduZWQgbG9uZyBHcmFwaGljc0NvbnRl
eHQzRDo6Z2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzKENhbnZhc0ZyYW1lYnVmZmVyKiBmcmFtZWJ1
ZmZlcikKK3sKKyAgICBpZiAoIWZyYW1lYnVmZmVyKQorICAgICAgICByZXR1cm4gLTE7CisgICAg
CisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOworICAgIHJldHVybiA6OmdsQ2hlY2tG
cmFtZWJ1ZmZlclN0YXR1c0VYVCgoR0x1aW50KSBmcmFtZWJ1ZmZlci0+b2JqZWN0KCkpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnbENsZWFyQ29sb3IoZG91YmxlIHIsIGRvdWJsZSBn
LCBkb3VibGUgYiwgZG91YmxlIGEpCit7CisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmop
OworICAgIDo6Z2xDbGVhckNvbG9yKHN0YXRpY19jYXN0PGZsb2F0PihyKSwgc3RhdGljX2Nhc3Q8
ZmxvYXQ+KGcpLCBzdGF0aWNfY2FzdDxmbG9hdD4oYiksIHN0YXRpY19jYXN0PGZsb2F0PihhKSk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdsQ2xlYXIodW5zaWduZWQgbG9uZyBtYXNr
KQoreworICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICA6OmdsQ2xlYXIobWFz
ayk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdsQ2xlYXJEZXB0aChkb3VibGUgZGVw
dGgpCit7CisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOworICAgIDo6Z2xDbGVhckRl
cHRoKGRlcHRoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2xDbGVhclN0ZW5jaWwo
bG9uZyBzKQoreworICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICA6OmdsQ2xl
YXJTdGVuY2lsKHMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnbENvbG9yTWFzayhi
b29sIHJlZCwgYm9vbCBncmVlbiwgYm9vbCBibHVlLCBib29sIGFscGhhKQoreworICAgIGVuc3Vy
ZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICA6OmdsQ29sb3JNYXNrKHJlZCwgZ3JlZW4sIGJs
dWUsIGFscGhhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2xDb21waWxlU2hhZGVy
KENhbnZhc1NoYWRlciogc2hhZGVyKQoreworICAgIGlmICghc2hhZGVyKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOworICAgIDo6Z2xDb21w
aWxlU2hhZGVyKChHTHVpbnQpIHNoYWRlci0+b2JqZWN0KCkpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpnbENvcHlUZXhJbWFnZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIGxl
dmVsLCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCBsb25nIHgsIGxvbmcgeSwgdW5zaWdu
ZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQsIGxvbmcgYm9yZGVyKQoreworICAg
IGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICA6OmdsQ29weVRleEltYWdlMkQodGFy
Z2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdsQ29weVRleFN1YkltYWdlMkQodW5zaWdu
ZWQgbG9uZyB0YXJnZXQsIGxvbmcgbGV2ZWwsIGxvbmcgeG9mZnNldCwgbG9uZyB5b2Zmc2V0LCBs
b25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQp
Cit7CisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOworICAgIDo6Z2xDb3B5VGV4U3Vi
SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVp
Z2h0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2xDdWxsRmFjZSh1bnNpZ25lZCBs
b25nIG1vZGUpCit7CisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOworICAgIDo6Z2xD
dWxsRmFjZShtb2RlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2xEZXB0aEZ1bmMo
dW5zaWduZWQgbG9uZyBmdW5jKQoreworICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsK
KyAgICA6OmdsRGVwdGhGdW5jKGZ1bmMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpn
bERlcHRoTWFzayhib29sIGZsYWcpCit7CisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmop
OworICAgIDo6Z2xEZXB0aE1hc2soZmxhZyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmdsRGVwdGhSYW5nZShkb3VibGUgek5lYXIsIGRvdWJsZSB6RmFyKQoreworICAgIGVuc3VyZUNv
bnRleHQobV9jb250ZXh0T2JqKTsKKyAgICA6OmdsRGVwdGhSYW5nZSh6TmVhciwgekZhcik7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdsRGV0YWNoU2hhZGVyKENhbnZhc1Byb2dyYW0q
IHByb2dyYW0sIENhbnZhc1NoYWRlciogc2hhZGVyKQoreworICAgIGlmICghcHJvZ3JhbSB8fCAh
c2hhZGVyKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRl
eHRPYmopOworICAgIDo6Z2xEZXRhY2hTaGFkZXIoKEdMdWludCkgcHJvZ3JhbS0+b2JqZWN0KCks
IChHTHVpbnQpIHNoYWRlci0+b2JqZWN0KCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpnbERpc2FibGUodW5zaWduZWQgbG9uZyBjYXApCit7CisgICAgZW5zdXJlQ29udGV4dChtX2Nv
bnRleHRPYmopOworICAgIDo6Z2xEaXNhYmxlKGNhcCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHVuc2lnbmVkIGxvbmcgaW5kZXgpCit7
CisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOworICAgIDo6Z2xEaXNhYmxlVmVydGV4
QXR0cmliQXJyYXkoaW5kZXgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnbERyYXdB
cnJheXModW5zaWduZWQgbG9uZyBtb2RlLCBsb25nIGZpcnN0LCB1bnNpZ25lZCBsb25nIGNvdW50
KQoreworICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICA6OmdsRHJhd0FycmF5
cyhtb2RlLCBmaXJzdCwgY291bnQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnbERy
YXdFbGVtZW50cyh1bnNpZ25lZCBsb25nIG1vZGUsIHVuc2lnbmVkIGxvbmcgY291bnQsIHVuc2ln
bmVkIGxvbmcgdHlwZSwgdm9pZCogYXJyYXkpCit7CisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRl
eHRPYmopOworICAgIDo6Z2xEcmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUsIGFycmF5KTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2xFbmFibGUodW5zaWduZWQgbG9uZyBjYXAp
Cit7CisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOworICAgIDo6Z2xFbmFibGUoY2Fw
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJh
eSh1bnNpZ25lZCBsb25nIGluZGV4KQoreworICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2Jq
KTsKKyAgICA6OmdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpnbEZpbmlzaCgpCit7CisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRl
eHRPYmopOworICAgIDo6Z2xGaW5pc2goKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
Z2xGbHVzaCgpCit7CisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOworICAgIDo6Z2xG
bHVzaCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnbEZyYW1lYnVmZmVyUmVuZGVy
YnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVu
c2lnbmVkIGxvbmcgcmVuZGVyYnVmZmVydGFyZ2V0LCBDYW52YXNSZW5kZXJidWZmZXIqIGJ1ZmZl
cikKK3sKKyAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGVuc3Vy
ZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJF
WFQodGFyZ2V0LCBhdHRhY2htZW50LCByZW5kZXJidWZmZXJ0YXJnZXQsIChHTHVpbnQpIGJ1ZmZl
ci0+b2JqZWN0KCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnbEZyYW1lYnVmZmVy
VGV4dHVyZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQs
IHVuc2lnbmVkIGxvbmcgdGV4dGFyZ2V0LCBDYW52YXNUZXh0dXJlKiB0ZXh0dXJlLCBsb25nIGxl
dmVsKQoreworICAgIGlmICghdGV4dHVyZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGVu
c3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICA6OmdsRnJhbWVidWZmZXJUZXh0dXJlMkRF
WFQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIChHTHVpbnQpIHRleHR1cmUtPm9iamVj
dCgpLCBsZXZlbCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdsRnJvbnRGYWNlKHVu
c2lnbmVkIGxvbmcgbW9kZSkKK3sKKyAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7Cisg
ICAgOjpnbEZyb250RmFjZShtb2RlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2xH
ZW5lcmF0ZU1pcG1hcCh1bnNpZ25lZCBsb25nIHRhcmdldCkKK3sKKyAgICBlbnN1cmVDb250ZXh0
KG1fY29udGV4dE9iaik7CisgICAgOjpnbEdlbmVyYXRlTWlwbWFwRVhUKHRhcmdldCk7Cit9CisK
K2ludCBHcmFwaGljc0NvbnRleHQzRDo6Z2xHZXRBdHRyaWJMb2NhdGlvbihDYW52YXNQcm9ncmFt
KiBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgaWYgKCFwcm9ncmFtKQorICAg
ICAgICByZXR1cm4gLTE7CisgICAgCisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOwor
ICAgIHJldHVybiA6OmdsR2V0QXR0cmliTG9jYXRpb24oKEdMdWludCkgcHJvZ3JhbS0+b2JqZWN0
KCksIG5hbWUudXRmOCgpLmRhdGEoKSk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgR3JhcGhpY3NDb250
ZXh0M0Q6OmdsR2V0RXJyb3IoKQoreworICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsK
KyAgICByZXR1cm4gOjpnbEdldEVycm9yKCk7Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRleHQz
RDo6Z2xHZXRTdHJpbmcodW5zaWduZWQgbG9uZyBuYW1lKQoreworICAgIGVuc3VyZUNvbnRleHQo
bV9jb250ZXh0T2JqKTsKKyAgICByZXR1cm4gU3RyaW5nKChjb25zdCBjaGFyKikgOjpnbEdldFN0
cmluZyhuYW1lKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdsSGludCh1bnNpZ25l
ZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBtb2RlKQoreworICAgIGVuc3VyZUNvbnRleHQo
bV9jb250ZXh0T2JqKTsKKyAgICA6OmdsSGludCh0YXJnZXQsIG1vZGUpOworfQorCitib29sIEdy
YXBoaWNzQ29udGV4dDNEOjpnbElzQnVmZmVyKENhbnZhc0J1ZmZlciogYnVmZmVyKQoreworICAg
IGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgZW5zdXJlQ29u
dGV4dChtX2NvbnRleHRPYmopOworICAgIHJldHVybiA6OmdsSXNCdWZmZXIoKEdMdWludCkgYnVm
ZmVyLT5vYmplY3QoKSk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdsSXNFbmFibGVk
KHVuc2lnbmVkIGxvbmcgY2FwKQoreworICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsK
KyAgICByZXR1cm4gOjpnbElzRW5hYmxlZChjYXApOworfQorCitib29sIEdyYXBoaWNzQ29udGV4
dDNEOjpnbElzRnJhbWVidWZmZXIoQ2FudmFzRnJhbWVidWZmZXIqIGZyYW1lYnVmZmVyKQorewor
ICAgIGlmICghZnJhbWVidWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBl
bnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAgcmV0dXJuIDo6Z2xJc0ZyYW1lYnVmZmVy
RVhUKChHTHVpbnQpIGZyYW1lYnVmZmVyLT5vYmplY3QoKSk7Cit9CisKK2Jvb2wgR3JhcGhpY3ND
b250ZXh0M0Q6OmdsSXNQcm9ncmFtKENhbnZhc1Byb2dyYW0qIHByb2dyYW0pCit7CisgICAgaWYg
KCFwcm9ncmFtKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgZW5zdXJlQ29udGV4
dChtX2NvbnRleHRPYmopOworICAgIHJldHVybiA6OmdsSXNQcm9ncmFtKChHTHVpbnQpIHByb2dy
YW0tPm9iamVjdCgpKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2xJc1JlbmRlcmJ1
ZmZlcihDYW52YXNSZW5kZXJidWZmZXIqIHJlbmRlcmJ1ZmZlcikKK3sKKyAgICBpZiAoIXJlbmRl
cmJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGVuc3VyZUNvbnRleHQo
bV9jb250ZXh0T2JqKTsKKyAgICByZXR1cm4gOjpnbElzUmVuZGVyYnVmZmVyRVhUKChHTHVpbnQp
IHJlbmRlcmJ1ZmZlci0+b2JqZWN0KCkpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjpn
bElzU2hhZGVyKENhbnZhc1NoYWRlciogc2hhZGVyKQoreworICAgIGlmICghc2hhZGVyKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmop
OworICAgIHJldHVybiA6OmdsSXNTaGFkZXIoKEdMdWludCkgc2hhZGVyLT5vYmplY3QoKSk7Cit9
CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdsSXNUZXh0dXJlKENhbnZhc1RleHR1cmUqIHRl
eHR1cmUpCit7CisgICAgaWYgKCF0ZXh0dXJlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
CisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOworICAgIHJldHVybiA6OmdsSXNUZXh0
dXJlKChHTHVpbnQpIHRleHR1cmUtPm9iamVjdCgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6Z2xMaW5lV2lkdGgoZG91YmxlIHdpZHRoKQoreworICAgIGVuc3VyZUNvbnRleHQobV9j
b250ZXh0T2JqKTsKKyAgICA6OmdsTGluZVdpZHRoKHN0YXRpY19jYXN0PGZsb2F0Pih3aWR0aCkp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnbExpbmtQcm9ncmFtKENhbnZhc1Byb2dy
YW0qIHByb2dyYW0pCit7CisgICAgaWYgKCFwcm9ncmFtKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOworICAgIDo6Z2xMaW5rUHJvZ3JhbSgo
R0x1aW50KSBwcm9ncmFtLT5vYmplY3QoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmdsUGl4ZWxTdG9yZWkodW5zaWduZWQgbG9uZyBwbmFtZSwgbG9uZyBwYXJhbSkKK3sKKyAgICBl
bnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAgOjpnbFBpeGVsU3RvcmVpKHBuYW1lLCBw
YXJhbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdsUG9seWdvbk9mZnNldChkb3Vi
bGUgZmFjdG9yLCBkb3VibGUgdW5pdHMpCit7CisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRP
YmopOworICAgIDo6Z2xQb2x5Z29uT2Zmc2V0KHN0YXRpY19jYXN0PGZsb2F0PihmYWN0b3IpLCBz
dGF0aWNfY2FzdDxmbG9hdD4odW5pdHMpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
Z2xSZWxlYXNlU2hhZGVyQ29tcGlsZXIoKQoreworICAgIC8vIEZJWE1FOiBUaGlzIGlzIG5vdCBp
bXBsZW1lbnRlZCBvbiBkZXNrdG9wIE9wZW5HTC4gV2UgbmVlZCB0byBoYXZlIGlmZGVmcyBmb3Ig
dGhlIGRpZmZlcmVudCBHTCB2YXJpYW50cworICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2Jq
KTsKKyAgICAvLzo6Z2xSZWxlYXNlU2hhZGVyQ29tcGlsZXIoKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1
bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25l
ZCBsb25nIGhlaWdodCkKK3sKKyAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAg
OjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VFWFQodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgs
IGhlaWdodCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdsU2FtcGxlQ292ZXJhZ2Uo
ZG91YmxlIHZhbHVlLCBib29sIGludmVydCkKK3sKKyAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4
dE9iaik7CisgICAgOjpnbFNhbXBsZUNvdmVyYWdlKHN0YXRpY19jYXN0PGZsb2F0Pih2YWx1ZSks
IGludmVydCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdsU2Npc3Nvcihsb25nIHgs
IGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpCit7Cisg
ICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOworICAgIDo6Z2xTY2lzc29yKHgsIHksIHdp
ZHRoLCBoZWlnaHQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnbFNoYWRlclNvdXJj
ZShDYW52YXNTaGFkZXIqIHNoYWRlciwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCit7CisgICAgaWYg
KCFzaGFkZXIpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBlbnN1cmVDb250ZXh0KG1fY29u
dGV4dE9iaik7CisgICAgY29uc3QgQ1N0cmluZyYgY3MgPSBzdHJpbmcudXRmOCgpOworICAgIGNv
bnN0IGNoYXIqIHMgPSBjcy5kYXRhKCk7CisgICAgCisgICAgaW50IGxlbmd0aCA9IHN0cmluZy5s
ZW5ndGgoKTsKKyAgICA6OmdsU2hhZGVyU291cmNlKChHTHVpbnQpIHNoYWRlci0+b2JqZWN0KCks
IDEsICZzLCAmbGVuZ3RoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2xTdGVuY2ls
RnVuYyh1bnNpZ25lZCBsb25nIGZ1bmMsIGxvbmcgcmVmLCB1bnNpZ25lZCBsb25nIG1hc2spCit7
CisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOworICAgIDo6Z2xTdGVuY2lsRnVuYyhm
dW5jLCByZWYsIG1hc2spOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnbFN0ZW5jaWxG
dW5jU2VwYXJhdGUodW5zaWduZWQgbG9uZyBmYWNlLCB1bnNpZ25lZCBsb25nIGZ1bmMsIGxvbmcg
cmVmLCB1bnNpZ25lZCBsb25nIG1hc2spCit7CisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRP
YmopOworICAgIDo6Z2xTdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdsU3RlbmNpbE1hc2sodW5zaWduZWQgbG9u
ZyBtYXNrKQoreworICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICA6OmdsU3Rl
bmNpbE1hc2sobWFzayk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdsU3RlbmNpbE1h
c2tTZXBhcmF0ZSh1bnNpZ25lZCBsb25nIGZhY2UsIHVuc2lnbmVkIGxvbmcgbWFzaykKK3sKKyAg
ICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAgOjpnbFN0ZW5jaWxNYXNrU2VwYXJh
dGUoZmFjZSwgbWFzayk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdsU3RlbmNpbE9w
KHVuc2lnbmVkIGxvbmcgZmFpbCwgdW5zaWduZWQgbG9uZyB6ZmFpbCwgdW5zaWduZWQgbG9uZyB6
cGFzcykKK3sKKyAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAgOjpnbFN0ZW5j
aWxPcChmYWlsLCB6ZmFpbCwgenBhc3MpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpn
bFN0ZW5jaWxPcFNlcGFyYXRlKHVuc2lnbmVkIGxvbmcgZmFjZSwgdW5zaWduZWQgbG9uZyBmYWls
LCB1bnNpZ25lZCBsb25nIHpmYWlsLCB1bnNpZ25lZCBsb25nIHpwYXNzKQoreworICAgIGVuc3Vy
ZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICA6OmdsU3RlbmNpbE9wU2VwYXJhdGUoZmFjZSwg
ZmFpbCwgemZhaWwsIHpwYXNzKTsKK30KKworCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnbFRl
eFBhcmFtZXRlcih1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIHBuYW1lLCBDYW52YXNOdW1iZXJB
cnJheSogYXJyYXkpCit7CisgICAgaWYgKCFhcnJheSB8fCAhYXJyYXktPmRhdGEoKS5zaXplKCkp
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7
CisgICAgOjpnbFRleFBhcmFtZXRlcmZ2KHRhcmdldCwgcG5hbWUsICYoYXJyYXktPmRhdGEoKVsw
XSkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnbFRleFBhcmFtZXRlcih1bnNpZ25l
ZCB0YXJnZXQsIHVuc2lnbmVkIHBuYW1lLCBkb3VibGUgdmFsdWUpCit7CisgICAgZW5zdXJlQ29u
dGV4dChtX2NvbnRleHRPYmopOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKHRhcmdldCwgcG5hbWUs
IHN0YXRpY19jYXN0PGZsb2F0Pih2YWx1ZSkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpnbFVuaWZvcm0obG9uZyBsb2NhdGlvbiwgQ2FudmFzTnVtYmVyQXJyYXkqIGFycmF5KQorewor
ICAgIGlmICghYXJyYXkgfHwgIWFycmF5LT5kYXRhKCkuc2l6ZSgpKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOworICAgIDo6Z2xVbmlmb3Jt
MWZ2KGxvY2F0aW9uLCBhcnJheS0+ZGF0YSgpLnNpemUoKSwgJihhcnJheS0+ZGF0YSgpWzBdKSk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdsVW5pZm9ybShsb25nIGxvY2F0aW9uLCBm
bG9hdCB2MCkKK3sKKyAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAgOjpnbFVu
aWZvcm0xZihsb2NhdGlvbiwgdjApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnbFVu
aWZvcm0obG9uZyBsb2NhdGlvbiwgZmxvYXQgdjAsIGZsb2F0IHYxKQoreworICAgIGVuc3VyZUNv
bnRleHQobV9jb250ZXh0T2JqKTsKKyAgICA6OmdsVW5pZm9ybTJmKGxvY2F0aW9uLCB2MCwgdjEp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnbFVuaWZvcm0obG9uZyBsb2NhdGlvbiwg
ZmxvYXQgdjAsIGZsb2F0IHYxLCBmbG9hdCB2MikKK3sKKyAgICBlbnN1cmVDb250ZXh0KG1fY29u
dGV4dE9iaik7CisgICAgOjpnbFVuaWZvcm0zZihsb2NhdGlvbiwgdjAsIHYxLCB2Mik7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdsVW5pZm9ybShsb25nIGxvY2F0aW9uLCBmbG9hdCB2
MCwgZmxvYXQgdjEsIGZsb2F0IHYyLCBmbG9hdCB2MykKK3sKKyAgICBlbnN1cmVDb250ZXh0KG1f
Y29udGV4dE9iaik7CisgICAgOjpnbFVuaWZvcm00Zihsb2NhdGlvbiwgdjAsIHYxLCB2MiwgdjMp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnbFVuaWZvcm0obG9uZyBsb2NhdGlvbiwg
aW50IHYwKQoreworICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICA6OmdsVW5p
Zm9ybTFpKGxvY2F0aW9uLCB2MCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdsVW5p
Zm9ybShsb25nIGxvY2F0aW9uLCBpbnQgdjAsIGludCB2MSkKK3sKKyAgICBlbnN1cmVDb250ZXh0
KG1fY29udGV4dE9iaik7CisgICAgOjpnbFVuaWZvcm0yaShsb2NhdGlvbiwgdjAsIHYxKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2xVbmlmb3JtKGxvbmcgbG9jYXRpb24sIGludCB2
MCwgaW50IHYxLCBpbnQgdjIpCit7CisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOwor
ICAgIDo6Z2xVbmlmb3JtM2kobG9jYXRpb24sIHYwLCB2MSwgdjIpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpnbFVuaWZvcm0obG9uZyBsb2NhdGlvbiwgaW50IHYwLCBpbnQgdjEsIGlu
dCB2MiwgaW50IHYzKQoreworICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICA6
OmdsVW5pZm9ybTRpKGxvY2F0aW9uLCB2MCwgdjEsIHYyLCB2Myk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdsVW5pZm9ybU1hdHJpeChsb25nIGxvY2F0aW9uLCBsb25nIGNvdW50LCBi
b29sIHRyYW5zcG9zZSwgQ2FudmFzTnVtYmVyQXJyYXkqIGFycmF5KQoreworICAgIC8vIEZJWE1F
OiBUaGlzIHNob3VsZCBuZXZlciBoYXZlIHRvIGRlYWwgd2l0aCBiYWQgcGFyYW1zLiBUaGV5IHNo
b3VsZCBiZSBjaGVja2VkIGhpZ2hlciBhbmQgdGhyb3cgZXhjZXB0aW9ucworICAgIGlmICghYXJy
YXkgfHwgIWFycmF5LT5kYXRhKCkuc2l6ZSgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
aW50IG4gPSBhcnJheS0+ZGF0YSgpLnNpemUoKSAvIGNvdW50OworICAgIGlmIChuIDwgMikKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChuID4gNCkKKyAgICAgICAgbiA9IDQ7CisgICAg
CisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOworICAgIAorICAgIHN3aXRjaChuKSB7
CisgICAgICAgIGNhc2UgMjogOjpnbFVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGNvdW50LCB0
cmFuc3Bvc2UsICYoYXJyYXktPmRhdGEoKVswXSkpOyBicmVhazsKKyAgICAgICAgY2FzZSAzOiA6
OmdsVW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgJihhcnJheS0+
ZGF0YSgpWzBdKSk7IGJyZWFrOworICAgICAgICBjYXNlIDQ6IDo6Z2xVbmlmb3JtTWF0cml4NGZ2
KGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCAmKGFycmF5LT5kYXRhKClbMF0pKTsgYnJlYWs7
CisgICAgfQorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnbFVuaWZvcm1NYXRyaXgobG9u
ZyBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIGNvbnN0IFZlY3RvcjxXZWJLaXRDU1NNYXRyaXgq
PiYgYXJyYXkpCit7CisgICAgaW50IGNvdW50ID0gYXJyYXkuc2l6ZSgpOworICAgIGZsb2F0KiBm
bG9hdHMgPSAoZmxvYXQqKSBtYWxsb2MoY291bnQgKiAxNiAqIHNpemVvZihmbG9hdCkpOworICAg
IAorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBmbG9hdHNb
aSoxNisgMF0gPSBzdGF0aWNfY2FzdDxmbG9hdD4oYXJyYXlbaV0tPm0xMSgpKTsKKyAgICAgICAg
ZmxvYXRzW2kqMTYrIDFdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFycmF5W2ldLT5tMTIoKSk7Cisg
ICAgICAgIGZsb2F0c1tpKjE2KyAyXSA9IHN0YXRpY19jYXN0PGZsb2F0PihhcnJheVtpXS0+bTEz
KCkpOworICAgICAgICBmbG9hdHNbaSoxNisgM10gPSBzdGF0aWNfY2FzdDxmbG9hdD4oYXJyYXlb
aV0tPm0xNCgpKTsKKyAgICAgICAgZmxvYXRzW2kqMTYrIDRdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KGFycmF5W2ldLT5tMjEoKSk7CisgICAgICAgIGZsb2F0c1tpKjE2KyA1XSA9IHN0YXRpY19jYXN0
PGZsb2F0PihhcnJheVtpXS0+bTIyKCkpOworICAgICAgICBmbG9hdHNbaSoxNisgNl0gPSBzdGF0
aWNfY2FzdDxmbG9hdD4oYXJyYXlbaV0tPm0yMygpKTsKKyAgICAgICAgZmxvYXRzW2kqMTYrIDdd
ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFycmF5W2ldLT5tMjQoKSk7CisgICAgICAgIGZsb2F0c1tp
KjE2KyA4XSA9IHN0YXRpY19jYXN0PGZsb2F0PihhcnJheVtpXS0+bTMxKCkpOworICAgICAgICBm
bG9hdHNbaSoxNisgOV0gPSBzdGF0aWNfY2FzdDxmbG9hdD4oYXJyYXlbaV0tPm0zMigpKTsKKyAg
ICAgICAgZmxvYXRzW2kqMTYrMTBdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFycmF5W2ldLT5tMzMo
KSk7CisgICAgICAgIGZsb2F0c1tpKjE2KzExXSA9IHN0YXRpY19jYXN0PGZsb2F0PihhcnJheVtp
XS0+bTM0KCkpOworICAgICAgICBmbG9hdHNbaSoxNisxMl0gPSBzdGF0aWNfY2FzdDxmbG9hdD4o
YXJyYXlbaV0tPm00MSgpKTsKKyAgICAgICAgZmxvYXRzW2kqMTYrMTNdID0gc3RhdGljX2Nhc3Q8
ZmxvYXQ+KGFycmF5W2ldLT5tNDIoKSk7CisgICAgICAgIGZsb2F0c1tpKjE2KzE0XSA9IHN0YXRp
Y19jYXN0PGZsb2F0PihhcnJheVtpXS0+bTQzKCkpOworICAgICAgICBmbG9hdHNbaSoxNisxNV0g
PSBzdGF0aWNfY2FzdDxmbG9hdD4oYXJyYXlbaV0tPm00NCgpKTsKKyAgICB9CisgICAgCisgICAg
OjpnbFVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIGZsb2F0cyk7
CisgICAgZnJlZShmbG9hdHMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnbFVuaWZv
cm1NYXRyaXgobG9uZyBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIGNvbnN0IFdlYktpdENTU01h
dHJpeCogbWF0cml4KQoreworICAgIGZsb2F0KiBmbG9hdHMgPSAoZmxvYXQqKSBtYWxsb2MoMTYg
KiBzaXplb2YoZmxvYXQpKTsKKyAgICAKKyAgICBmbG9hdHNbIDBdID0gc3RhdGljX2Nhc3Q8Zmxv
YXQ+KG1hdHJpeC0+bTExKCkpOworICAgIGZsb2F0c1sgMV0gPSBzdGF0aWNfY2FzdDxmbG9hdD4o
bWF0cml4LT5tMTIoKSk7CisgICAgZmxvYXRzWyAyXSA9IHN0YXRpY19jYXN0PGZsb2F0PihtYXRy
aXgtPm0xMygpKTsKKyAgICBmbG9hdHNbIDNdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1hdHJpeC0+
bTE0KCkpOworICAgIGZsb2F0c1sgNF0gPSBzdGF0aWNfY2FzdDxmbG9hdD4obWF0cml4LT5tMjEo
KSk7CisgICAgZmxvYXRzWyA1XSA9IHN0YXRpY19jYXN0PGZsb2F0PihtYXRyaXgtPm0yMigpKTsK
KyAgICBmbG9hdHNbIDZdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1hdHJpeC0+bTIzKCkpOworICAg
IGZsb2F0c1sgN10gPSBzdGF0aWNfY2FzdDxmbG9hdD4obWF0cml4LT5tMjQoKSk7CisgICAgZmxv
YXRzWyA4XSA9IHN0YXRpY19jYXN0PGZsb2F0PihtYXRyaXgtPm0zMSgpKTsKKyAgICBmbG9hdHNb
IDldID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1hdHJpeC0+bTMyKCkpOworICAgIGZsb2F0c1sxMF0g
PSBzdGF0aWNfY2FzdDxmbG9hdD4obWF0cml4LT5tMzMoKSk7CisgICAgZmxvYXRzWzExXSA9IHN0
YXRpY19jYXN0PGZsb2F0PihtYXRyaXgtPm0zNCgpKTsKKyAgICBmbG9hdHNbMTJdID0gc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KG1hdHJpeC0+bTQxKCkpOworICAgIGZsb2F0c1sxM10gPSBzdGF0aWNfY2Fz
dDxmbG9hdD4obWF0cml4LT5tNDIoKSk7CisgICAgZmxvYXRzWzE0XSA9IHN0YXRpY19jYXN0PGZs
b2F0PihtYXRyaXgtPm00MygpKTsKKyAgICBmbG9hdHNbMTVdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KG1hdHJpeC0+bTQ0KCkpOworICAgIAorICAgIDo6Z2xVbmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9u
LCAxLCB0cmFuc3Bvc2UsIGZsb2F0cyk7CisgICAgZnJlZShmbG9hdHMpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpnbFVzZVByb2dyYW0oQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSkKK3sK
KyAgICBpZiAoIXByb2dyYW0pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBlbnN1cmVDb250
ZXh0KG1fY29udGV4dE9iaik7CisgICAgOjpnbFVzZVByb2dyYW0oKEdMdWludCkgcHJvZ3JhbS0+
b2JqZWN0KCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnbFZhbGlkYXRlUHJvZ3Jh
bShDYW52YXNQcm9ncmFtKiBwcm9ncmFtKQoreworICAgIGlmICghcHJvZ3JhbSkKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICA6Omds
VmFsaWRhdGVQcm9ncmFtKChHTHVpbnQpIHByb2dyYW0tPm9iamVjdCgpKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6Z2xWZXJ0ZXhBdHRyaWIodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9h
dCB2MCkKK3sKKyAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAgOjpnbFZlcnRl
eEF0dHJpYjFmKGluZHgsIHYwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2xWZXJ0
ZXhBdHRyaWIodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCB2MCwgZmxvYXQgdjEpCit7CisgICAg
ZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOworICAgIDo6Z2xWZXJ0ZXhBdHRyaWIyZihpbmR4
LCB2MCwgdjEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnbFZlcnRleEF0dHJpYih1
bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHYwLCBmbG9hdCB2MSwgZmxvYXQgdjIpCit7CisgICAg
ZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOworICAgIDo6Z2xWZXJ0ZXhBdHRyaWIzZihpbmR4
LCB2MCwgdjEsIHYyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2xWZXJ0ZXhBdHRy
aWIodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCB2MCwgZmxvYXQgdjEsIGZsb2F0IHYyLCBmbG9h
dCB2MykKK3sKKyAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAgOjpnbFZlcnRl
eEF0dHJpYjRmKGluZHgsIHYwLCB2MSwgdjIsIHYzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6Z2xWZXJ0ZXhBdHRyaWIodW5zaWduZWQgbG9uZyBpbmR4LCBDYW52YXNOdW1iZXJBcnJh
eSogYXJyYXkpCit7CisgICAgaWYgKCFhcnJheSB8fCAhYXJyYXktPmRhdGEoKS5zaXplKCkpCisg
ICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBGSVhNRTogSG93IGRvIHdlIGRlY2lkZSBiZXR3
ZWVuIDFmdiAuLiA0ZnY/CisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOworICAgIDo6
Z2xWZXJ0ZXhBdHRyaWIxZnYoaW5keCwgJihhcnJheS0+ZGF0YSgpWzBdKSk7Cit9CisKKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6Z2xWZXJ0ZXhBdHRyaWJQb2ludGVyKHVuc2lnbmVkIGxvbmcg
aW5keCwgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIHR5cGUsIGJvb2wgbm9ybWFsaXplZCwgdW5z
aWduZWQgbG9uZyBzdHJpZGUsIENhbnZhc051bWJlckFycmF5KiBhcnJheSkKK3sKKyAgICBlbnN1
cmVDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAgCisgICAgaWYgKGFycmF5KSB7CisgICAgICAg
IGlmIChtX3ZlcnRleEFycmF5LnNpemUoKSA8PSBpbmR4KQorICAgICAgICAgICAgbV92ZXJ0ZXhB
cnJheS5yZXNpemUoaW5keCsxKTsKKyAgICAgICAgCisgICAgICAgIG1fdmVydGV4QXJyYXlbaW5k
eF0gPSBhcnJheS0+ZGF0YSgpOworICAgIH0KKyAgICBlbHNlIGlmIChtX3ZlcnRleEFycmF5LnNp
emUoKSA+IGluZHgpCisgICAgICAgIG1fdmVydGV4QXJyYXlbaW5keF0uY2xlYXIoKTsKKyAgICAK
KyAgICA6OmdsVmVydGV4QXR0cmliUG9pbnRlcihpbmR4LCBzaXplLCB0eXBlLCBub3JtYWxpemVk
LCBzdHJpZGUsIGFycmF5ID8gJihtX3ZlcnRleEFycmF5W2luZHhdWzBdKSA6IDApOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnbFZpZXdwb3J0KGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25l
ZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkKK3sKKyAgICBlbnN1cmVDb250ZXh0
KG1fY29udGV4dE9iaik7CisgICAgOjpnbFZpZXdwb3J0KHN0YXRpY19jYXN0PEdMaW50Pih4KSwg
c3RhdGljX2Nhc3Q8R0xpbnQ+KHkpLCBzdGF0aWNfY2FzdDxHTHNpemVpPih3aWR0aCksIHN0YXRp
Y19jYXN0PEdMc2l6ZWk+KGhlaWdodCkpOworfQorCisvLyBOb24tR0wgZnVuY3Rpb25zCitQYXNz
UmVmUHRyPENhbnZhc0J1ZmZlcj4gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUJ1ZmZlcigpCit7
CisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOworICAgIFJlZlB0cjxDYW52YXNCdWZm
ZXI+IG8gPSBDYW52YXNCdWZmZXI6OmNyZWF0ZSh0aGlzKTsKKyAgICBhZGRPYmplY3Qoby5nZXQo
KSk7CisgICAgcmV0dXJuIG87Cit9CisKK1Bhc3NSZWZQdHI8Q2FudmFzRnJhbWVidWZmZXI+IEdy
YXBoaWNzQ29udGV4dDNEOjpjcmVhdGVGcmFtZWJ1ZmZlcigpCit7CisgICAgZW5zdXJlQ29udGV4
dChtX2NvbnRleHRPYmopOworICAgIFJlZlB0cjxDYW52YXNGcmFtZWJ1ZmZlcj4gbyA9IENhbnZh
c0ZyYW1lYnVmZmVyOjpjcmVhdGUodGhpcyk7CisgICAgYWRkT2JqZWN0KG8uZ2V0KCkpOworICAg
IHJldHVybiBvOworfQorCitQYXNzUmVmUHRyPENhbnZhc1RleHR1cmU+IEdyYXBoaWNzQ29udGV4
dDNEOjpjcmVhdGVUZXh0dXJlKCkKK3sKKyAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7
CisgICAgUmVmUHRyPENhbnZhc1RleHR1cmU+IG8gPSBDYW52YXNUZXh0dXJlOjpjcmVhdGUodGhp
cyk7CisgICAgYWRkT2JqZWN0KG8uZ2V0KCkpOworICAgIHJldHVybiBvOworfQorCitQYXNzUmVm
UHRyPENhbnZhc1Byb2dyYW0+IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVQcm9ncmFtKCkKK3sK
KyAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAgUmVmUHRyPENhbnZhc1Byb2dy
YW0+IG8gPSBDYW52YXNQcm9ncmFtOjpjcmVhdGUodGhpcyk7CisgICAgYWRkT2JqZWN0KG8uZ2V0
KCkpOworICAgIHJldHVybiBvOworfQorCitQYXNzUmVmUHRyPENhbnZhc1JlbmRlcmJ1ZmZlcj4g
R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCit7CisgICAgZW5zdXJlQ29u
dGV4dChtX2NvbnRleHRPYmopOworICAgIFJlZlB0cjxDYW52YXNSZW5kZXJidWZmZXI+IG8gPSBD
YW52YXNSZW5kZXJidWZmZXI6OmNyZWF0ZSh0aGlzKTsKKyAgICBhZGRPYmplY3Qoby5nZXQoKSk7
CisgICAgcmV0dXJuIG87Cit9CisKK1Bhc3NSZWZQdHI8Q2FudmFzU2hhZGVyPiBHcmFwaGljc0Nv
bnRleHQzRDo6Y3JlYXRlU2hhZGVyKHVuc2lnbmVkIGxvbmcgdHlwZSkKK3sKKyAgICBlbnN1cmVD
b250ZXh0KG1fY29udGV4dE9iaik7CisgICAgUmVmUHRyPENhbnZhc1NoYWRlcj4gbyA9IENhbnZh
c1NoYWRlcjo6Y3JlYXRlKHRoaXMsIHR5cGUpOworICAgIGFkZE9iamVjdChvLmdldCgpKTsKKyAg
ICByZXR1cm4gbzsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlQnVmZmVyKENh
bnZhc0J1ZmZlciogYnVmZmVyKQoreworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOworICAgIGJ1ZmZlci0+ZGVs
ZXRlT2JqZWN0KCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZUZyYW1lYnVm
ZmVyKENhbnZhc0ZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZlcikKK3sKKyAgICBpZiAoIWZyYW1lYnVm
ZmVyKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRP
YmopOworICAgIGZyYW1lYnVmZmVyLT5kZWxldGVPYmplY3QoKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6ZGVsZXRlUHJvZ3JhbShDYW52YXNQcm9ncmFtKiBwcm9ncmFtKQoreworICAg
IGlmICghcHJvZ3JhbSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGVuc3VyZUNvbnRleHQo
bV9jb250ZXh0T2JqKTsKKyAgICBwcm9ncmFtLT5kZWxldGVPYmplY3QoKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlUmVuZGVyYnVmZmVyKENhbnZhc1JlbmRlcmJ1ZmZlciog
cmVuZGVyYnVmZmVyKQoreworICAgIGlmICghcmVuZGVyYnVmZmVyKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOworICAgIHJlbmRlcmJ1ZmZl
ci0+ZGVsZXRlT2JqZWN0KCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVNo
YWRlcihDYW52YXNTaGFkZXIqIHNoYWRlcikKK3sKKyAgICBpZiAoIXNoYWRlcikKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICBzaGFk
ZXItPmRlbGV0ZU9iamVjdCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVU
ZXh0dXJlKENhbnZhc1RleHR1cmUqIHRleHR1cmUpCit7CisgICAgaWYgKCF0ZXh0dXJlKQorICAg
ICAgICByZXR1cm47CisgICAgCisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOworICAg
IHRleHR1cmUtPmRlbGV0ZU9iamVjdCgpOworfQorCitzdGF0aWMgaW50IHNpemVGb3JHZXRQYXJh
bSh1bnNpZ25lZCBsb25nIHBuYW1lKQoreworICAgIHN3aXRjaChwbmFtZSkgeworICAgICAgICBj
YXNlIEdMX0FDVElWRV9URVhUVVJFOiAgICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAg
ICBjYXNlIEdMX0FMSUFTRURfTElORV9XSURUSF9SQU5HRTogICAgICAgIHJldHVybiAyOworICAg
ICAgICBjYXNlIEdMX0FMSUFTRURfUE9JTlRfU0laRV9SQU5HRTogICAgICAgIHJldHVybiAyOwor
ICAgICAgICBjYXNlIEdMX0FMUEhBX0JJVFM6ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAx
OworICAgICAgICBjYXNlIEdMX0FSUkFZX0JVRkZFUl9CSU5ESU5HOiAgICAgICAgICAgIHJldHVy
biAxOyAvLyAoKiBhY3R1YWxseSBhIENhbnZhc0J1ZmZlciopCisgICAgICAgIGNhc2UgR0xfQkxF
TkQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGNhc2UgR0xf
QkxFTkRfQ09MT1I6ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDQ7CisgICAgICAgIGNhc2Ug
R0xfQkxFTkRfRFNUX0FMUEhBOiAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGNh
c2UgR0xfQkxFTkRfRFNUX1JHQjogICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAg
IGNhc2UgR0xfQkxFTkRfRVFVQVRJT05fQUxQSEE6ICAgICAgICAgICAgcmV0dXJuIDE7CisgICAg
ICAgIGNhc2UgR0xfQkxFTkRfRVFVQVRJT05fUkdCOiAgICAgICAgICAgICAgcmV0dXJuIDE7Cisg
ICAgICAgIGNhc2UgR0xfQkxFTkRfU1JDX0FMUEhBOiAgICAgICAgICAgICAgICAgcmV0dXJuIDE7
CisgICAgICAgIGNhc2UgR0xfQkxFTkRfU1JDX1JHQjogICAgICAgICAgICAgICAgICAgcmV0dXJu
IDE7CisgICAgICAgIGNhc2UgR0xfQkxVRV9CSVRTOiAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIDE7CisgICAgICAgIGNhc2UgR0xfQ09MT1JfQ0xFQVJfVkFMVUU6ICAgICAgICAgICAgICAg
cmV0dXJuIDQ7CisgICAgICAgIGNhc2UgR0xfQ09MT1JfV1JJVEVNQVNLOiAgICAgICAgICAgICAg
ICAgcmV0dXJuIDQ7CisgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFM6
ICAgICAgcmV0dXJuIEdMX05VTV9DT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUzsKKyAgICAgICAg
Y2FzZSBHTF9DVUxMX0ZBQ0U6ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAg
ICAgY2FzZSBHTF9DVUxMX0ZBQ0VfTU9ERTogICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAg
ICAgICAgY2FzZSBHTF9DVVJSRU5UX1BST0dSQU06ICAgICAgICAgICAgICAgICByZXR1cm4gMTsg
Ly8gKCogYWN0dWFsbHkgYSBDYW52YXNQcm9ncmFtKikKKyAgICAgICAgY2FzZSBHTF9ERVBUSF9C
SVRTOiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSBHTF9ERVBU
SF9DTEVBUl9WQUxVRTogICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSBHTF9E
RVBUSF9GVU5DOiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSBH
TF9ERVBUSF9SQU5HRTogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgY2Fz
ZSBHTF9ERVBUSF9URVNUOiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAg
Y2FzZSBHTF9ERVBUSF9XUklURU1BU0s6ICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAg
ICAgY2FzZSBHTF9ESVRIRVI6ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAg
ICAgICAgY2FzZSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HOiAgICByZXR1cm4gMTsg
Ly8gKCogYWN0dWFsbHkgYSBDYW52YXNCdWZmZXIqKQorICAgICAgICBjYXNlIEdMX0ZSQU1FQlVG
RkVSX0JJTkRJTkdfRVhUOiAgICAgICAgIHJldHVybiAxOyAvLyAoKiBhY3R1YWxseSBhIENhbnZh
c0ZyYW1lYnVmZmVyKikKKyAgICAgICAgY2FzZSBHTF9GUk9OVF9GQUNFOiAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSBHTF9HRU5FUkFURV9NSVBNQVBfSElOVDog
ICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSBHTF9HUkVFTl9CSVRTOiAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIC8vY2FzZSBHTF9JTVBMRU1FTlRB
VElPTl9DT0xPUl9SRUFEX0ZPUk1BVDpyZXR1cm4gMTsKKyAgICAgICAgICAgIC8vY2FzZSBHTF9J
TVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX1RZUEU6ICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSBH
TF9MSU5FX1dJRFRIOiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2Fz
ZSBHTF9NQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUzpyZXR1cm4gMTsKKyAgICAgICAg
Y2FzZSBHTF9NQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFOiAgICAgICByZXR1cm4gMTsKKyAgICAg
ICAgICAgIC8vY2FzZSBHTF9NQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTOiAgICByZXR1cm4g
MTsKKyAgICAgICAgY2FzZSBHTF9NQVhfUkVOREVSQlVGRkVSX1NJWkVfRVhUOiAgICAgICByZXR1
cm4gMTsKKyAgICAgICAgY2FzZSBHTF9NQVhfVEVYVFVSRV9JTUFHRV9VTklUUzogICAgICAgICBy
ZXR1cm4gMTsKKyAgICAgICAgY2FzZSBHTF9NQVhfVEVYVFVSRV9TSVpFOiAgICAgICAgICAgICAg
ICByZXR1cm4gMTsKKyAgICAgICAgICAgIC8vY2FzZSBHTF9NQVhfVkFSWUlOR19WRUNUT1JTOiAg
ICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSBHTF9NQVhfVkVSVEVYX0FUVFJJQlM6
ICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSBHTF9NQVhfVkVSVEVYX1RFWFRV
UkVfSU1BR0VfVU5JVFM6ICByZXR1cm4gMTsKKyAgICAgICAgICAgIC8vY2FzZSBHTF9NQVhfVkVS
VEVYX1VOSUZPUk1fVkVDVE9SUzogICAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSBHTF9NQVhf
VklFV1BPUlRfRElNUzogICAgICAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgY2FzZSBHTF9O
VU1fQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFM6ICByZXR1cm4gMTsKKyAgICAgICAgICAgIC8v
Y2FzZSBHTF9OVU1fU0hBREVSX0JJTkFSWV9GT1JNQVRTOiAgICAgICByZXR1cm4gMTsKKyAgICAg
ICAgY2FzZSBHTF9QQUNLX0FMSUdOTUVOVDogICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAg
ICAgICAgY2FzZSBHTF9QT0xZR09OX09GRlNFVF9GQUNUT1I6ICAgICAgICAgICByZXR1cm4gMTsK
KyAgICAgICAgY2FzZSBHTF9QT0xZR09OX09GRlNFVF9GSUxMOiAgICAgICAgICAgICByZXR1cm4g
MTsKKyAgICAgICAgY2FzZSBHTF9QT0xZR09OX09GRlNFVF9VTklUUzogICAgICAgICAgICByZXR1
cm4gMTsKKyAgICAgICAgY2FzZSBHTF9SRURfQklUUzogICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gMTsKKyAgICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfQklORElOR19FWFQ6ICAgICAg
ICByZXR1cm4gMTsgLy8gKCogYWN0dWFsbHkgYSBDYW52YXNSZW5kZXJidWZmZXIqKQorICAgICAg
ICBjYXNlIEdMX1NBTVBMRV9CVUZGRVJTOiAgICAgICAgICAgICAgICAgIHJldHVybiAxOworICAg
ICAgICBjYXNlIEdMX1NBTVBMRV9DT1ZFUkFHRV9JTlZFUlQ6ICAgICAgICAgIHJldHVybiAxOwor
ICAgICAgICBjYXNlIEdMX1NBTVBMRV9DT1ZFUkFHRV9WQUxVRTogICAgICAgICAgIHJldHVybiAx
OworICAgICAgICBjYXNlIEdMX1NBTVBMRVM6ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biAxOworICAgICAgICBjYXNlIEdMX1NDSVNTT1JfQk9YOiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiA0OworICAgICAgICBjYXNlIEdMX1NDSVNTT1JfVEVTVDogICAgICAgICAgICAgICAgICAg
IHJldHVybiAxOworICAgICAgICAgICAgLy9jYXNlIEdMX1NIQURFUl9CSU5BUllfRk9STUFUUzog
ICAgICAgICAgIHJldHVybiBHTF9OVU1fU0hBREVSX0JJTkFSWV9GT1JNQVRTOworICAgICAgICAg
ICAgLy9jYXNlIEdMX1NIQURFUl9DT01QSUxFUjogICAgICAgICAgICAgICAgIHJldHVybiAxOwor
ICAgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19GQUlMOiAgICAgICAgICAgICAgIHJldHVybiAx
OworICAgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19GVU5DOiAgICAgICAgICAgICAgIHJldHVy
biAxOworICAgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUw6ICAgIHJl
dHVybiAxOworICAgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1M6ICAg
IHJldHVybiAxOworICAgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19SRUY6ICAgICAgICAgICAg
ICAgIHJldHVybiAxOworICAgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19WQUxVRV9NQVNLOiAg
ICAgICAgIHJldHVybiAxOworICAgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19XUklURU1BU0s6
ICAgICAgICAgIHJldHVybiAxOworICAgICAgICBjYXNlIEdMX1NURU5DSUxfQklUUzogICAgICAg
ICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBjYXNlIEdMX1NURU5DSUxfQ0xFQVJfVkFM
VUU6ICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBjYXNlIEdMX1NURU5DSUxfRkFJTDog
ICAgICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBjYXNlIEdMX1NURU5DSUxfRlVO
QzogICAgICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBjYXNlIEdMX1NURU5DSUxf
UEFTU19ERVBUSF9GQUlMOiAgICAgICAgIHJldHVybiAxOworICAgICAgICBjYXNlIEdMX1NURU5D
SUxfUEFTU19ERVBUSF9QQVNTOiAgICAgICAgIHJldHVybiAxOworICAgICAgICBjYXNlIEdMX1NU
RU5DSUxfUkVGOiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBjYXNlIEdM
X1NURU5DSUxfVEVTVDogICAgICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBjYXNl
IEdMX1NURU5DSUxfVkFMVUVfTUFTSzogICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBj
YXNlIEdMX1NURU5DSUxfV1JJVEVNQVNLOiAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAg
ICBjYXNlIEdMX1NVQlBJWEVMX0JJVFM6ICAgICAgICAgICAgICAgICAgIHJldHVybiAxOworICAg
ICAgICBjYXNlIEdMX1RFWFRVUkVfQklORElOR18yRDogICAgICAgICAgICAgIHJldHVybiAxOyAv
LyAoKiBhY3R1YWxseSBhIENhbnZhc1RleHR1cmUqKQorICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
QklORElOR19DVUJFX01BUDogICAgICAgIHJldHVybiAxOyAvLyAoKiBhY3R1YWxseSBhIENhbnZh
c1RleHR1cmUqKQorICAgICAgICBjYXNlIEdMX1VOUEFDS19BTElHTk1FTlQ6ICAgICAgICAgICAg
ICAgIHJldHVybiAxOworICAgICAgICBjYXNlIEdMX1ZJRVdQT1JUOiAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiA0OworICAgIH0KKyAgICAKKyAgICByZXR1cm4gLTE7Cit9CisKK3N0YXRp
YyBpbnQgdHlwZUZvckdldFBhcmFtKHVuc2lnbmVkIGxvbmcgcG5hbWUpCit7CisgICAgc3dpdGNo
KHBuYW1lKSB7CisgICAgICAgIGNhc2UgR0xfQUNUSVZFX1RFWFRVUkU6ICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEdMX0lOVDsKKyAgICAgICAgY2FzZSBHTF9BTElBU0VEX0xJTkVfV0lEVEhfUkFO
R0U6ICAgICAgICByZXR1cm4gR0xfRkxPQVQ7CisgICAgICAgIGNhc2UgR0xfQUxJQVNFRF9QT0lO
VF9TSVpFX1JBTkdFOiAgICAgICAgcmV0dXJuIEdMX0ZMT0FUOworICAgICAgICBjYXNlIEdMX0FM
UEhBX0JJVFM6ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9JTlQ7CisgICAgICAgIGNh
c2UgR0xfQVJSQVlfQlVGRkVSX0JJTkRJTkc6ICAgICAgICAgICAgcmV0dXJuIEdMX0lOVDsgLy8g
KCogYWN0dWFsbHkgYSBDYW52YXNCdWZmZXIqKQorICAgICAgICBjYXNlIEdMX0JMRU5EOiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9CWVRFOworICAgICAgICBjYXNlIEdMX0JM
RU5EX0NPTE9SOiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9GTE9BVDsKKyAgICAgICAg
Y2FzZSBHTF9CTEVORF9EU1RfQUxQSEE6ICAgICAgICAgICAgICAgICByZXR1cm4gR0xfSU5UOwor
ICAgICAgICBjYXNlIEdMX0JMRU5EX0RTVF9SR0I6ICAgICAgICAgICAgICAgICAgIHJldHVybiBH
TF9JTlQ7CisgICAgICAgIGNhc2UgR0xfQkxFTkRfRVFVQVRJT05fQUxQSEE6ICAgICAgICAgICAg
cmV0dXJuIEdMX0lOVDsKKyAgICAgICAgY2FzZSBHTF9CTEVORF9FUVVBVElPTl9SR0I6ICAgICAg
ICAgICAgICByZXR1cm4gR0xfSU5UOworICAgICAgICBjYXNlIEdMX0JMRU5EX1NSQ19BTFBIQTog
ICAgICAgICAgICAgICAgIHJldHVybiBHTF9JTlQ7CisgICAgICAgIGNhc2UgR0xfQkxFTkRfU1JD
X1JHQjogICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0lOVDsKKyAgICAgICAgY2FzZSBHTF9C
TFVFX0JJVFM6ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfSU5UOworICAgICAgICBj
YXNlIEdMX0NPTE9SX0NMRUFSX1ZBTFVFOiAgICAgICAgICAgICAgIHJldHVybiBHTF9GTE9BVDsK
KyAgICAgICAgY2FzZSBHTF9DT0xPUl9XUklURU1BU0s6ICAgICAgICAgICAgICAgICByZXR1cm4g
R0xfQllURTsKKyAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUzogICAg
IHJldHVybiBHTF9JTlQ7CisgICAgICAgIGNhc2UgR0xfQ1VMTF9GQUNFOiAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEdMX0JZVEU7CisgICAgICAgIGNhc2UgR0xfQ1VMTF9GQUNFX01PREU6
ICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0lOVDsKKyAgICAgICAgY2FzZSBHTF9DVVJSRU5U
X1BST0dSQU06ICAgICAgICAgICAgICAgICByZXR1cm4gR0xfSU5UOyAvLyAoKiBhY3R1YWxseSBh
IENhbnZhc1Byb2dyYW0qKQorICAgICAgICBjYXNlIEdMX0RFUFRIX0JJVFM6ICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBHTF9JTlQ7CisgICAgICAgIGNhc2UgR0xfREVQVEhfQ0xFQVJfVkFM
VUU6ICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZMT0FUOworICAgICAgICBjYXNlIEdMX0RFUFRI
X0ZVTkM6ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9JTlQ7CisgICAgICAgIGNhc2Ug
R0xfREVQVEhfUkFOR0U6ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZMT0FUOworICAg
ICAgICBjYXNlIEdMX0RFUFRIX1RFU1Q6ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9C
WVRFOworICAgICAgICBjYXNlIEdMX0RFUFRIX1dSSVRFTUFTSzogICAgICAgICAgICAgICAgIHJl
dHVybiBHTF9CWVRFOworICAgICAgICBjYXNlIEdMX0RJVEhFUjogICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBHTF9CWVRFOworICAgICAgICBjYXNlIEdMX0VMRU1FTlRfQVJSQVlfQlVG
RkVSX0JJTkRJTkc6ICAgIHJldHVybiBHTF9JTlQ7IC8vICgqIGFjdHVhbGx5IGEgQ2FudmFzQnVm
ZmVyKikKKyAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9CSU5ESU5HX0VYVDogICAgICAgICBy
ZXR1cm4gR0xfSU5UOyAvLyAoKiBhY3R1YWxseSBhIENhbnZhc0ZyYW1lYnVmZmVyKikKKyAgICAg
ICAgY2FzZSBHTF9GUk9OVF9GQUNFOiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfSU5U
OworICAgICAgICBjYXNlIEdMX0dFTkVSQVRFX01JUE1BUF9ISU5UOiAgICAgICAgICAgIHJldHVy
biBHTF9JTlQ7CisgICAgICAgIGNhc2UgR0xfR1JFRU5fQklUUzogICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEdMX0lOVDsKKyAgICAgICAgICAgIC8vY2FzZSBHTF9JTVBMRU1FTlRBVElPTl9D
T0xPUl9SRUFEX0ZPUk1BVDpyZXR1cm4gR0xfSU5UOworICAgICAgICAgICAgLy9jYXNlIEdMX0lN
UExFTUVOVEFUSU9OX0NPTE9SX1JFQURfVFlQRTogIHJldHVybiBHTF9JTlQ7CisgICAgICAgIGNh
c2UgR0xfTElORV9XSURUSDogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZMT0FUOwor
ICAgICAgICBjYXNlIEdMX01BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTOnJldHVybiBH
TF9JTlQ7CisgICAgICAgIGNhc2UgR0xfTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRTogICAgICAg
cmV0dXJuIEdMX0lOVDsKKyAgICAgICAgICAgIC8vY2FzZSBHTF9NQVhfRlJBR01FTlRfVU5JRk9S
TV9WRUNUT1JTOiAgICByZXR1cm4gR0xfSU5UOworICAgICAgICBjYXNlIEdMX01BWF9SRU5ERVJC
VUZGRVJfU0laRV9FWFQ6ICAgICAgIHJldHVybiBHTF9JTlQ7CisgICAgICAgIGNhc2UgR0xfTUFY
X1RFWFRVUkVfSU1BR0VfVU5JVFM6ICAgICAgICAgcmV0dXJuIEdMX0lOVDsKKyAgICAgICAgY2Fz
ZSBHTF9NQVhfVEVYVFVSRV9TSVpFOiAgICAgICAgICAgICAgICByZXR1cm4gR0xfSU5UOworICAg
ICAgICAgICAgLy9jYXNlIEdMX01BWF9WQVJZSU5HX1ZFQ1RPUlM6ICAgICAgICAgICAgIHJldHVy
biBHTF9JTlQ7CisgICAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9BVFRSSUJTOiAgICAgICAgICAg
ICAgcmV0dXJuIEdMX0lOVDsKKyAgICAgICAgY2FzZSBHTF9NQVhfVkVSVEVYX1RFWFRVUkVfSU1B
R0VfVU5JVFM6ICByZXR1cm4gR0xfSU5UOworICAgICAgICAgICAgLy9jYXNlIEdMX01BWF9WRVJU
RVhfVU5JRk9STV9WRUNUT1JTOiAgICAgIHJldHVybiBHTF9JTlQ7CisgICAgICAgIGNhc2UgR0xf
TUFYX1ZJRVdQT1JUX0RJTVM6ICAgICAgICAgICAgICAgcmV0dXJuIEdMX0lOVDsKKyAgICAgICAg
Y2FzZSBHTF9OVU1fQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFM6ICByZXR1cm4gR0xfSU5UOwor
ICAgICAgICAgICAgLy9jYXNlIEdMX05VTV9TSEFERVJfQklOQVJZX0ZPUk1BVFM6ICAgICAgIHJl
dHVybiBHTF9JTlQ7CisgICAgICAgIGNhc2UgR0xfUEFDS19BTElHTk1FTlQ6ICAgICAgICAgICAg
ICAgICAgcmV0dXJuIEdMX0lOVDsKKyAgICAgICAgY2FzZSBHTF9QT0xZR09OX09GRlNFVF9GQUNU
T1I6ICAgICAgICAgICByZXR1cm4gR0xfRkxPQVQ7CisgICAgICAgIGNhc2UgR0xfUE9MWUdPTl9P
RkZTRVRfRklMTDogICAgICAgICAgICAgcmV0dXJuIEdMX0JZVEU7CisgICAgICAgIGNhc2UgR0xf
UE9MWUdPTl9PRkZTRVRfVU5JVFM6ICAgICAgICAgICAgcmV0dXJuIEdMX0ZMT0FUOworICAgICAg
ICBjYXNlIEdMX1JFRF9CSVRTOiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9JTlQ7
CisgICAgICAgIGNhc2UgR0xfUkVOREVSQlVGRkVSX0JJTkRJTkdfRVhUOiAgICAgICAgcmV0dXJu
IEdMX0lOVDsgLy8gKCogYWN0dWFsbHkgYSBDYW52YXNSZW5kZXJidWZmZXIqKQorICAgICAgICBj
YXNlIEdMX1NBTVBMRV9CVUZGRVJTOiAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9JTlQ7Cisg
ICAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdFX0lOVkVSVDogICAgICAgICAgcmV0dXJuIEdM
X0JZVEU7CisgICAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdFX1ZBTFVFOiAgICAgICAgICAg
cmV0dXJuIEdMX0ZMT0FUOworICAgICAgICBjYXNlIEdMX1NBTVBMRVM6ICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBHTF9JTlQ7CisgICAgICAgIGNhc2UgR0xfU0NJU1NPUl9CT1g6ICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0lOVDsKKyAgICAgICAgY2FzZSBHTF9TQ0lTU09S
X1RFU1Q6ICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfQllURTsKKyAgICAgICAgICAgIC8v
Y2FzZSBHTF9TSEFERVJfQklOQVJZX0ZPUk1BVFM6ICAgICAgICAgICByZXR1cm4gR0xfSU5UOwor
ICAgICAgICAgICAgLy9jYXNlIEdMX1NIQURFUl9DT01QSUxFUjogICAgICAgICAgICAgICAgIHJl
dHVybiBHTF9CWVRFOworICAgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19GQUlMOiAgICAgICAg
ICAgICAgIHJldHVybiBHTF9JTlQ7CisgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX0ZVTkM6
ICAgICAgICAgICAgICAgcmV0dXJuIEdMX0lOVDsKKyAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JB
Q0tfUEFTU19ERVBUSF9GQUlMOiAgICByZXR1cm4gR0xfSU5UOworICAgICAgICBjYXNlIEdMX1NU
RU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1M6ICAgIHJldHVybiBHTF9JTlQ7CisgICAgICAgIGNh
c2UgR0xfU1RFTkNJTF9CQUNLX1JFRjogICAgICAgICAgICAgICAgcmV0dXJuIEdMX0lOVDsKKyAg
ICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfVkFMVUVfTUFTSzogICAgICAgICByZXR1cm4gR0xf
SU5UOworICAgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19XUklURU1BU0s6ICAgICAgICAgIHJl
dHVybiBHTF9JTlQ7CisgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9CSVRTOiAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIEdMX0lOVDsKKyAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX0NMRUFSX1ZBTFVF
OiAgICAgICAgICAgICByZXR1cm4gR0xfSU5UOworICAgICAgICBjYXNlIEdMX1NURU5DSUxfRkFJ
TDogICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9JTlQ7CisgICAgICAgIGNhc2UgR0xfU1RF
TkNJTF9GVU5DOiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0lOVDsKKyAgICAgICAgY2Fz
ZSBHTF9TVEVOQ0lMX1BBU1NfREVQVEhfRkFJTDogICAgICAgICByZXR1cm4gR0xfSU5UOworICAg
ICAgICBjYXNlIEdMX1NURU5DSUxfUEFTU19ERVBUSF9QQVNTOiAgICAgICAgIHJldHVybiBHTF9J
TlQ7CisgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9SRUY6ICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIEdMX0lOVDsKKyAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX1RFU1Q6ICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gR0xfQllURTsKKyAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX1ZBTFVFX01BU0s6
ICAgICAgICAgICAgICByZXR1cm4gR0xfSU5UOworICAgICAgICBjYXNlIEdMX1NURU5DSUxfV1JJ
VEVNQVNLOiAgICAgICAgICAgICAgIHJldHVybiBHTF9JTlQ7CisgICAgICAgIGNhc2UgR0xfU1VC
UElYRUxfQklUUzogICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0lOVDsKKyAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFX0JJTkRJTkdfMkQ6ICAgICAgICAgICAgICByZXR1cm4gR0xfSU5UOyAvLyAo
KiBhY3R1YWxseSBhIENhbnZhc1RleHR1cmUqKQorICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQklO
RElOR19DVUJFX01BUDogICAgICAgIHJldHVybiBHTF9JTlQ7IC8vICgqIGFjdHVhbGx5IGEgQ2Fu
dmFzVGV4dHVyZSopCisgICAgICAgIGNhc2UgR0xfVU5QQUNLX0FMSUdOTUVOVDogICAgICAgICAg
ICAgICAgcmV0dXJuIEdMX0lOVDsKKyAgICAgICAgY2FzZSBHTF9WSUVXUE9SVDogICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gR0xfSU5UOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gLTE7
Cit9CisKK1Bhc3NSZWZQdHI8Q2FudmFzTnVtYmVyQXJyYXk+IEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXQodW5zaWduZWQgbG9uZyBwbmFtZSkKK3sKKyAgICBpbnQgc2l6ZSA9IHNpemVGb3JHZXRQYXJh
bShwbmFtZSk7CisgICAgaWYgKHNpemUgPCAxKSAKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisg
ICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOworICAgIAorICAgIFJlZlB0cjxDYW52YXNO
dW1iZXJBcnJheT4gYXJyYXkgPSBDYW52YXNOdW1iZXJBcnJheTo6Y3JlYXRlKHNpemUpOworICAg
IGJvb2wgaXNBbGxvY2VkID0gZmFsc2U7CisgICAgCisgICAgc3dpdGNoKHR5cGVGb3JHZXRQYXJh
bShwbmFtZSkpIHsKKyAgICAgICAgY2FzZSBHTF9JTlQ6IHsKKyAgICAgICAgICAgIEdMaW50IGJ1
Zls0XTsKKyAgICAgICAgICAgIEdMaW50KiBwYnVmID0gYnVmOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBpZiAoc2l6ZSA+IDQpIHsKKyAgICAgICAgICAgICAgICBwYnVmID0gKEdMaW50Kikg
bWFsbG9jKHNpemUgKiBzaXplb2YoR0xpbnQpKTsKKyAgICAgICAgICAgICAgICBpc0FsbG9jZWQg
PSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICA6OmdsR2V0
SW50ZWdlcnYocG5hbWUsIHBidWYpOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgICAgICAgICBhcnJheS0+ZGF0YSgpW2ld
ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBidWZbaV0pOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBpZiAoaXNBbGxvY2VkKQorICAgICAgICAgICAgICAgIGZyZWUocGJ1Zik7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgR0xfRkxPQVQ6
IHsKKyAgICAgICAgICAgIEdMZmxvYXQgYnVmWzRdOworICAgICAgICAgICAgR0xmbG9hdCogcGJ1
ZiA9IGJ1ZjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHNpemUgPiA0KSB7CisgICAg
ICAgICAgICAgICAgcGJ1ZiA9IChHTGZsb2F0KikgbWFsbG9jKHNpemUgKiBzaXplb2YoR0xmbG9h
dCkpOworICAgICAgICAgICAgICAgIGlzQWxsb2NlZCA9IHRydWU7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIDo6Z2xHZXRGbG9hdHYocG5hbWUsIHBidWYpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAg
ICAgICAgICAgICAgICBhcnJheS0+ZGF0YSgpW2ldID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBidWZb
aV0pOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoaXNBbGxvY2VkKQorICAgICAgICAg
ICAgICAgIGZyZWUocGJ1Zik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2UgR0xfQllURTogeworICAgICAgICAgICAgR0xib29sZWFuIGJ1
Zls0XTsKKyAgICAgICAgICAgIEdMYm9vbGVhbiogcGJ1ZiA9IGJ1ZjsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgaWYgKHNpemUgPiA0KSB7CisgICAgICAgICAgICAgICAgcGJ1ZiA9IChHTGJv
b2xlYW4qKSBtYWxsb2Moc2l6ZSAqIHNpemVvZihHTGJvb2xlYW4pKTsKKyAgICAgICAgICAgICAg
ICBpc0FsbG9jZWQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
ICAgICA6OmdsR2V0Qm9vbGVhbnYocG5hbWUsIHBidWYpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgICAgICAgICBhcnJh
eS0+ZGF0YSgpW2ldID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHBidWZbaV0pOworICAgICAgICAgICAg
CisgICAgICAgICAgICBpZiAoaXNBbGxvY2VkKQorICAgICAgICAgICAgICAgIGZyZWUocGJ1Zik7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAg
IAorICAgIHJldHVybiBhcnJheTsKK30KKworUGFzc1JlZlB0cjxDYW52YXNOdW1iZXJBcnJheT4g
R3JhcGhpY3NDb250ZXh0M0Q6OmdldEJ1ZmZlclBhcmFtZXRlcih1bnNpZ25lZCBsb25nIHRhcmdl
dCwgdW5zaWduZWQgbG9uZyBwbmFtZSkKK3sKKyAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9i
aik7CisgICAgUmVmUHRyPENhbnZhc051bWJlckFycmF5PiBhcnJheSA9IENhbnZhc051bWJlckFy
cmF5OjpjcmVhdGUoMSk7CisgICAgR0xpbnQgZGF0YTsKKyAgICA6OmdsR2V0QnVmZmVyUGFyYW1l
dGVyaXYodGFyZ2V0LCBwbmFtZSwgJmRhdGEpOworICAgIGFycmF5LT5kYXRhKClbMF0gPSBzdGF0
aWNfY2FzdDxmbG9hdD4oZGF0YSk7CisgICAgCisgICAgcmV0dXJuIGFycmF5OworfQorCitQYXNz
UmVmUHRyPENhbnZhc051bWJlckFycmF5PiBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RnJhbWVidWZm
ZXJBdHRhY2htZW50UGFyYW1ldGVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25n
IGF0dGFjaG1lbnQsIHVuc2lnbmVkIGxvbmcgcG5hbWUpCit7CisgICAgZW5zdXJlQ29udGV4dCht
X2NvbnRleHRPYmopOworICAgIFJlZlB0cjxDYW52YXNOdW1iZXJBcnJheT4gYXJyYXkgPSBDYW52
YXNOdW1iZXJBcnJheTo6Y3JlYXRlKDEpOworICAgIEdMaW50IGRhdGE7CisgICAgOjpnbEdldEZy
YW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2RVhUKHRhcmdldCwgYXR0YWNobWVudCwgcG5h
bWUsICZkYXRhKTsKKyAgICBhcnJheS0+ZGF0YSgpWzBdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGRh
dGEpOworICAgIAorICAgIHJldHVybiBhcnJheTsKK30KKworUGFzc1JlZlB0cjxDYW52YXNOdW1i
ZXJBcnJheT4gR3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dyYW0oQ2FudmFzUHJvZ3JhbSogcHJv
Z3JhbSwgdW5zaWduZWQgbG9uZyBwbmFtZSkKK3sKKyAgICBpZiAoIXByb2dyYW0pCisgICAgICAg
IHJldHVybiAwOworICAgIAorICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICBS
ZWZQdHI8Q2FudmFzTnVtYmVyQXJyYXk+IGFycmF5ID0gQ2FudmFzTnVtYmVyQXJyYXk6OmNyZWF0
ZSgxKTsKKyAgICBHTGludCBkYXRhOworICAgIDo6Z2xHZXRQcm9ncmFtaXYoKEdMdWludCkgcHJv
Z3JhbS0+b2JqZWN0KCksIHBuYW1lLCAmZGF0YSk7CisgICAgYXJyYXktPmRhdGEoKVswXSA9IHN0
YXRpY19jYXN0PGZsb2F0PihkYXRhKTsKKyAgICAKKyAgICByZXR1cm4gYXJyYXk7Cit9CisKK1N0
cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2xHZXRQcm9ncmFtSW5mb0xvZyhDYW52YXNQcm9ncmFt
KiBwcm9ncmFtKQoreworICAgIGlmICghcHJvZ3JhbSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygp
OworICAgIAorICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICBHTGludCBsZW5n
dGg7CisgICAgOjpnbEdldFByb2dyYW1pdigoR0x1aW50KSBwcm9ncmFtLT5vYmplY3QoKSwgR0xf
SU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKKyAgICAKKyAgICBHTHNpemVpIHNpemU7CisgICAg
R0xjaGFyKiBpbmZvID0gKEdMY2hhciopIG1hbGxvYyhsZW5ndGgpOworICAgIDo6Z2xHZXRQcm9n
cmFtSW5mb0xvZygoR0x1aW50KSBwcm9ncmFtLT5vYmplY3QoKSwgbGVuZ3RoLCAmc2l6ZSwgaW5m
byk7CisgICAgU3RyaW5nIHMoaW5mbyk7CisgICAgZnJlZShpbmZvKTsKKyAgICByZXR1cm4gczsK
K30KKworUGFzc1JlZlB0cjxDYW52YXNOdW1iZXJBcnJheT4gR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dFJlbmRlcmJ1ZmZlclBhcmFtZXRlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9u
ZyBwbmFtZSkKK3sKKyAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAgUmVmUHRy
PENhbnZhc051bWJlckFycmF5PiBhcnJheSA9IENhbnZhc051bWJlckFycmF5OjpjcmVhdGUoMSk7
CisgICAgR0xpbnQgZGF0YTsKKyAgICA6OmdsR2V0QnVmZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBw
bmFtZSwgJmRhdGEpOworICAgIGFycmF5LT5kYXRhKClbMF0gPSBzdGF0aWNfY2FzdDxmbG9hdD4o
ZGF0YSk7CisgICAgCisgICAgcmV0dXJuIGFycmF5OworfQorCitQYXNzUmVmUHRyPENhbnZhc051
bWJlckFycmF5PiBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyKENhbnZhc1NoYWRlciogc2hh
ZGVyLCB1bnNpZ25lZCBsb25nIHBuYW1lKQoreworICAgIGlmICghc2hhZGVyKQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICAKKyAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAgUmVm
UHRyPENhbnZhc051bWJlckFycmF5PiBhcnJheSA9IENhbnZhc051bWJlckFycmF5OjpjcmVhdGUo
MSk7CisgICAgR0xpbnQgZGF0YTsKKyAgICA6OmdsR2V0U2hhZGVyaXYoKEdMdWludCkgc2hhZGVy
LT5vYmplY3QoKSwgcG5hbWUsICZkYXRhKTsKKyAgICBhcnJheS0+ZGF0YSgpWzBdID0gc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KGRhdGEpOworICAgIAorICAgIHJldHVybiBhcnJheTsKK30KKworU3RyaW5n
IEdyYXBoaWNzQ29udGV4dDNEOjpnbEdldFNoYWRlckluZm9Mb2coQ2FudmFzU2hhZGVyKiBzaGFk
ZXIpCit7CisgICAgaWYgKCFzaGFkZXIpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAK
KyAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAgR0xpbnQgbGVuZ3RoOworICAg
IDo6Z2xHZXRTaGFkZXJpdigoR0x1aW50KSBzaGFkZXItPm9iamVjdCgpLCBHTF9JTkZPX0xPR19M
RU5HVEgsICZsZW5ndGgpOworICAgIAorICAgIEdMc2l6ZWkgc2l6ZTsKKyAgICBHTGNoYXIqIGlu
Zm8gPSAoR0xjaGFyKikgbWFsbG9jKGxlbmd0aCk7CisgICAgOjpnbEdldFNoYWRlckluZm9Mb2co
KEdMdWludCkgc2hhZGVyLT5vYmplY3QoKSwgbGVuZ3RoLCAmc2l6ZSwgaW5mbyk7CisgICAgU3Ry
aW5nIHMoaW5mbyk7CisgICAgZnJlZShpbmZvKTsKKyAgICByZXR1cm4gczsKK30KKworU3RyaW5n
IEdyYXBoaWNzQ29udGV4dDNEOjpnbEdldFNoYWRlclNvdXJjZShDYW52YXNTaGFkZXIqIHNoYWRl
cikKK3sKKyAgICBpZiAoIXNoYWRlcikKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIAor
ICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICBHTGludCBsZW5ndGg7CisgICAg
OjpnbEdldFNoYWRlcml2KChHTHVpbnQpIHNoYWRlci0+b2JqZWN0KCksIEdMX1NIQURFUl9TT1VS
Q0VfTEVOR1RILCAmbGVuZ3RoKTsKKyAgICAKKyAgICBHTHNpemVpIHNpemU7CisgICAgR0xjaGFy
KiBpbmZvID0gKEdMY2hhciopIG1hbGxvYyhsZW5ndGgpOworICAgIDo6Z2xHZXRTaGFkZXJTb3Vy
Y2UoKEdMdWludCkgc2hhZGVyLT5vYmplY3QoKSwgbGVuZ3RoLCAmc2l6ZSwgaW5mbyk7CisgICAg
U3RyaW5nIHMoaW5mbyk7CisgICAgZnJlZShpbmZvKTsKKyAgICByZXR1cm4gczsKK30KKworCitQ
YXNzUmVmUHRyPENhbnZhc051bWJlckFycmF5PiBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VGV4UGFy
YW1ldGVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lKQoreworICAg
IGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKKyAgICBSZWZQdHI8Q2FudmFzTnVtYmVyQXJy
YXk+IGFycmF5ID0gQ2FudmFzTnVtYmVyQXJyYXk6OmNyZWF0ZSgxKTsKKyAgICBHTGZsb2F0IGRh
dGE7CisgICAgOjpnbEdldFRleFBhcmFtZXRlcmZ2KHRhcmdldCwgcG5hbWUsICZkYXRhKTsKKyAg
ICBhcnJheS0+ZGF0YSgpWzBdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGRhdGEpOworICAgIAorICAg
IHJldHVybiBhcnJheTsKK30KKworUGFzc1JlZlB0cjxDYW52YXNOdW1iZXJBcnJheT4gR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldFVuaWZvcm0oQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSwgbG9uZyBsb2Nh
dGlvbiwgbG9uZyBzaXplKQoreworICAgIGlmICghcHJvZ3JhbSkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgCisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOworICAgIFJlZlB0cjxDYW52
YXNOdW1iZXJBcnJheT4gYXJyYXkgPSBDYW52YXNOdW1iZXJBcnJheTo6Y3JlYXRlKHNpemUpOwor
ICAgIAorICAgIC8vIHRvIGF2b2lkIGNyYXNoZXMsIGxldCdzIGdldCBpbnRvIGEgYnVmZmVyIHRo
YXQgd2lsbCBhbHdheXMgYmUgYmlnIGVub3VnaAorICAgIEdMZmxvYXQgZGF0YVsxNl07CisgICAg
OjpnbEdldFVuaWZvcm1mdigoR0x1aW50KSBwcm9ncmFtLT5vYmplY3QoKSwgbG9jYXRpb24sIGRh
dGEpOworICAgIAorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICBh
cnJheS0+ZGF0YSgpW2ldID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGRhdGFbaV0pOworICAgIAorICAg
IAorICAgIHJldHVybiBhcnJheTsKK30KKworbG9uZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5p
Zm9ybUxvY2F0aW9uKENhbnZhc1Byb2dyYW0qIHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkK
K3sKKyAgICBpZiAoIXByb2dyYW0pCisgICAgICAgIHJldHVybiAtMTsKKyAgICAKKyAgICBlbnN1
cmVDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAgcmV0dXJuIDo6Z2xHZXRVbmlmb3JtTG9jYXRp
b24oKEdMdWludCkgcHJvZ3JhbS0+b2JqZWN0KCksIG5hbWUudXRmOCgpLmRhdGEoKSk7Cit9CisK
K3N0YXRpYyBpbnQgc2l6ZUZvckdldFZlcnRleEF0dHJpYlBhcmFtKHVuc2lnbmVkIGxvbmcgcG5h
bWUpCit7CisgICAgc3dpdGNoKHBuYW1lKSB7CisgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJ
Ql9BUlJBWV9CVUZGRVJfQklORElORzogICAgIHJldHVybiAxOyAvLyAoKiBhY3R1YWxseSBhIENh
bnZhc0J1ZmZlciopCisgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9FTkFCTEVE
OiAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJS
QVlfU0laRTogICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSBHTF9WRVJURVhf
QVRUUklCX0FSUkFZX1NUUklERTogICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGNhc2Ug
R0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9UWVBFOiAgICAgICAgICAgICAgIHJldHVybiAxOworICAg
ICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfTk9STUFMSVpFRDogICAgICAgICByZXR1
cm4gMTsKKyAgICAgICAgY2FzZSBHTF9DVVJSRU5UX1ZFUlRFWF9BVFRSSUI6ICAgICAgICAgICAg
ICAgICAgcmV0dXJuIDQ7CisgICAgfQorICAgIAorICAgIHJldHVybiAtMTsKK30KKworc3RhdGlj
IGludCB0eXBlRm9yR2V0VmVydGV4QXR0cmliUGFyYW0odW5zaWduZWQgbG9uZyBwbmFtZSkKK3sK
KyAgICBzd2l0Y2gocG5hbWUpIHsKKyAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZ
X0JVRkZFUl9CSU5ESU5HOiAgICAgcmV0dXJuIEdMX0lOVDsgLy8gKCogYWN0dWFsbHkgYSBDYW52
YXNCdWZmZXIqKQorICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRDog
ICAgICAgICAgICByZXR1cm4gR0xfSU5UOworICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJf
QVJSQVlfU0laRTogICAgICAgICAgICAgICByZXR1cm4gR0xfSU5UOworICAgICAgICBjYXNlIEdM
X1ZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFOiAgICAgICAgICAgICByZXR1cm4gR0xfSU5UOwor
ICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRTogICAgICAgICAgICAgICBy
ZXR1cm4gR0xfSU5UOworICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfTk9STUFM
SVpFRDogICAgICAgICByZXR1cm4gR0xfSU5UOworICAgICAgICBjYXNlIEdMX0NVUlJFTlRfVkVS
VEVYX0FUVFJJQjogICAgICAgICAgICAgICAgICByZXR1cm4gR0xfRkxPQVQ7CisgICAgfQorICAg
IAorICAgIHJldHVybiAtMTsKK30KKworUGFzc1JlZlB0cjxDYW52YXNOdW1iZXJBcnJheT4gR3Jh
cGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYih1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNp
Z25lZCBsb25nIHBuYW1lKQoreworICAgIGludCBzaXplID0gc2l6ZUZvckdldFZlcnRleEF0dHJp
YlBhcmFtKHBuYW1lKTsKKyAgICBpZiAoc2l6ZSA8IDEpIAorICAgICAgICByZXR1cm4gMDsKKyAg
ICAKKyAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAgCisgICAgUmVmUHRyPENh
bnZhc051bWJlckFycmF5PiBhcnJheSA9IENhbnZhc051bWJlckFycmF5OjpjcmVhdGUoc2l6ZSk7
CisgICAgCisgICAgc3dpdGNoKHR5cGVGb3JHZXRWZXJ0ZXhBdHRyaWJQYXJhbShwbmFtZSkpIHsK
KyAgICAgICAgY2FzZSBHTF9JTlQ6IHsKKyAgICAgICAgICAgIEdMaW50IGJ1Zls0XTsKKyAgICAg
ICAgICAgIDo6Z2xHZXRWZXJ0ZXhBdHRyaWJpdihpbmRleCwgcG5hbWUsIGJ1Zik7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAg
ICAgICAgICAgIGFycmF5LT5kYXRhKClbaV0gPSBzdGF0aWNfY2FzdDxmbG9hdD4oYnVmW2ldKTsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIEdMX0ZMT0FUOiB7CisgICAgICAgICAgICBHTGZsb2F0
IGJ1Zls0XTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgOjpnbEdldFZlcnRleEF0dHJpYmZ2
KGluZGV4LCBwbmFtZSwgYnVmKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgICAgICAgICAgYXJyYXktPmRhdGEoKVtpXSA9
IHN0YXRpY19jYXN0PGZsb2F0PihidWZbaV0pOworICAgICAgICB9CisgICAgfQorICAgIAorICAg
IHJldHVybiBhcnJheTsKK30KKworLy8gQXNzdW1lcyB0aGUgdGV4dHVyZSB5b3Ugd2FudCB0byBn
byBpbnRvIGlzIGJvdW5kCitzdGF0aWMgdm9pZCBpbWFnZVRvVGV4dHVyZShJbWFnZSogaW1hZ2Us
IHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwpCit7CisgICAgaWYgKCFpbWFnZSkKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIENHSW1hZ2VSZWYgdGV4dHVyZUltYWdlID0gaW1hZ2Ut
PmdldENHSW1hZ2VSZWYoKTsKKyAgICBpZiAoIXRleHR1cmVJbWFnZSkKKyAgICAgICAgcmV0dXJu
OworICAgIAorICAgIHNpemVfdCB0ZXh0dXJlV2lkdGggPSBDR0ltYWdlR2V0V2lkdGgodGV4dHVy
ZUltYWdlKTsKKyAgICBzaXplX3QgdGV4dHVyZUhlaWdodCA9IENHSW1hZ2VHZXRIZWlnaHQodGV4
dHVyZUltYWdlKTsKKyAgICAKKyAgICBHTHVieXRlKiB0ZXh0dXJlRGF0YSA9IChHTHVieXRlKikg
bWFsbG9jKHRleHR1cmVXaWR0aCAqIHRleHR1cmVIZWlnaHQgKiA0KTsKKyAgICBDR0NvbnRleHRS
ZWYgdGV4dHVyZUNvbnRleHQgPSBDR0JpdG1hcENvbnRleHRDcmVhdGUodGV4dHVyZURhdGEsIHRl
eHR1cmVXaWR0aCwgdGV4dHVyZUhlaWdodCwgOCwgdGV4dHVyZVdpZHRoICogNCwgCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENHSW1hZ2VH
ZXRDb2xvclNwYWNlKHRleHR1cmVJbWFnZSksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFz
dCk7CisgICAgCisgICAgQ0dDb250ZXh0RHJhd0ltYWdlKHRleHR1cmVDb250ZXh0LCBDR1JlY3RN
YWtlKDAsIDAsIChDR0Zsb2F0KXRleHR1cmVXaWR0aCwgKENHRmxvYXQpdGV4dHVyZUhlaWdodCks
IHRleHR1cmVJbWFnZSk7CisgICAgQ0dDb250ZXh0UmVsZWFzZSh0ZXh0dXJlQ29udGV4dCk7Cisg
ICAgCisgICAgOjpnbFRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgR0xfUkdCQSwgdGV4dHVyZVdp
ZHRoLCB0ZXh0dXJlSGVpZ2h0LCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCB0ZXh0dXJl
RGF0YSk7CisgICAgZnJlZSh0ZXh0dXJlRGF0YSk7Cit9CisKK2ludCBHcmFwaGljc0NvbnRleHQz
RDo6dGV4SW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCBIVE1MSW1hZ2VF
bGVtZW50KiBpbWFnZSkKK3sKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm4gLTE7Cisg
ICAgCisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOworICAgIENhY2hlZEltYWdlKiBj
YWNoZWRJbWFnZSA9IGltYWdlLT5jYWNoZWRJbWFnZSgpOworICAgIGlmICghY2FjaGVkSW1hZ2Up
CisgICAgICAgIHJldHVybiAtMTsKKyAgICAKKyAgICBpbWFnZVRvVGV4dHVyZShjYWNoZWRJbWFn
ZS0+aW1hZ2UoKSwgdGFyZ2V0LCBsZXZlbCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBHcmFw
aGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVs
LCBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzKQoreworICAgIGlmICghY2FudmFzKQorICAgICAg
ICByZXR1cm4gLTE7CisgICAgCisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOworICAg
IEltYWdlQnVmZmVyKiBidWZmZXIgPSBjYW52YXMtPmJ1ZmZlcigpOworICAgIGlmICghYnVmZmVy
KQorICAgICAgICByZXR1cm4gLTE7CisgICAgCisgICAgaW1hZ2VUb1RleHR1cmUoYnVmZmVyLT5p
bWFnZSgpLCB0YXJnZXQsIGxldmVsKTsKKyAgICByZXR1cm4gMDsKK30KKworaW50IEdyYXBoaWNz
Q29udGV4dDNEOjp0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWws
IHVuc2lnbmVkIHhvZmYsIHVuc2lnbmVkIHlvZmYsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBo
ZWlnaHQsIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlKQoreworICAgIC8vIEZJWE1FOiB3ZSB3aWxs
IG5lZWQgdG8gZGVhbCB3aXRoIFBpeGVsU3RvcmUgcGFyYW1zIHdoZW4gZGVhbGluZyB3aXRoIGlt
YWdlIGJ1ZmZlcnMgdGhhdCBkaWZmZXIgZnJvbSB0aGUgc3ViaW1hZ2Ugc2l6ZQorICAgIFVOVVNF
RF9QQVJBTSh0YXJnZXQpOworICAgIFVOVVNFRF9QQVJBTShsZXZlbCk7CisgICAgVU5VU0VEX1BB
UkFNKHhvZmYpOworICAgIFVOVVNFRF9QQVJBTSh5b2ZmKTsKKyAgICBVTlVTRURfUEFSQU0od2lk
dGgpOworICAgIFVOVVNFRF9QQVJBTShoZWlnaHQpOworICAgIFVOVVNFRF9QQVJBTShpbWFnZSk7
CisgICAgcmV0dXJuIC0xOworICAgIC8qCisgICAgIGVjID0gMDsKKyAgICAgCisgICAgIGlmICgh
aW1hZ2UpCisgICAgIHJldHVybjsKKyAgICAgCisgICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0
T2JqKTsKKyAgICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlID0gaW1hZ2UtPmNhY2hlZEltYWdl
KCk7CisgICAgIGlmICghY2FjaGVkSW1hZ2UpCisgICAgIHJldHVybjsKKyAgICAgCisgICAgIElt
YWdlKiBpbWcgPSBjYWNoZWRJbWFnZS0+aW1hZ2UoKTsKKyAgICAgaWYgKCFpbWcpCisgICAgIHJl
dHVybjsKKyAgICAgCisgICAgIDo6Z2xUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmYs
IHlvZmYsIHdpZHRoLCBoZWlnaHQsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIGltZy0+ZGF0
YSgpLT5kYXRhKCkpOworICAgICAgKi8KK30KKworaW50IEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhT
dWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIHhvZmYs
IHVuc2lnbmVkIHlvZmYsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIEhUTUxDYW52
YXNFbGVtZW50KiBjYW52YXMpCit7CisgICAgLy8gRklYTUU6IHdlIHdpbGwgbmVlZCB0byBkZWFs
IHdpdGggUGl4ZWxTdG9yZSBwYXJhbXMgd2hlbiBkZWFsaW5nIHdpdGggaW1hZ2UgYnVmZmVycyB0
aGF0IGRpZmZlciBmcm9tIHRoZSBzdWJpbWFnZSBzaXplCisgICAgVU5VU0VEX1BBUkFNKHRhcmdl
dCk7CisgICAgVU5VU0VEX1BBUkFNKGxldmVsKTsKKyAgICBVTlVTRURfUEFSQU0oeG9mZik7Cisg
ICAgVU5VU0VEX1BBUkFNKHlvZmYpOworICAgIFVOVVNFRF9QQVJBTSh3aWR0aCk7CisgICAgVU5V
U0VEX1BBUkFNKGhlaWdodCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbnZhcyk7CisgICAgcmV0dXJu
IC0xOworICAgIC8qCisgICAgIGVjID0gMDsKKyAgICAgCisgICAgIGlmICghY2FudmFzKQorICAg
ICByZXR1cm47CisgICAgIAorICAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAg
IEltYWdlQnVmZmVyKiBidWZmZXIgPSBjYW52YXMtPmJ1ZmZlcigpOworICAgICBpZiAoIWJ1ZmZl
cikKKyAgICAgcmV0dXJuOworICAgICAKKyAgICAgSW1hZ2UqIGltZyA9IGJ1ZmZlci0+aW1hZ2Uo
KTsKKyAgICAgaWYgKCFpbWcpCisgICAgIHJldHVybjsKKyAgICAgCisgICAgIDo6Z2xUZXhTdWJJ
bWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmYsIHlvZmYsIHdpZHRoLCBoZWlnaHQsIEdMX1JHQkEs
IEdMX1VOU0lHTkVEX0JZVEUsIGltZy0+ZGF0YSgpLT5kYXRhKCkpOworICAgICAgKi8KK30KKwor
fQorCisjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykK
</data>
<flag name="review"
          id="19421"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38426</attachid>
            <date>2009-08-21 17:52:18 -0700</date>
            <delta_ts>2009-08-22 06:12:42 -0700</delta_ts>
            <desc>Patch with new GL Object files</desc>
            <filename>28018-GLObjectFiles.patch</filename>
            <type>text/plain</type>
            <size>55383</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NWUwOTIyOS4uMmI5NDgzMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsNiArMSwzOCBAQAogMjAwOS0wOC0yMSAgQ2hyaXMgTWFycmlu
ICA8Y21hcnJpbkBhcHBsZS5jb20+CiAKLSAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIE9saXZl
ciBIdW50LgorICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBO
ZXcgZmlsZXMgaW1wbGVtZW50aW5nIEdMIGJ1ZmZlciB3cmFwcGVycywgYW5kIHN1cHBvcnQgdG8g
bWFrZSB0aGVtIHBsYXRmb3JtIGluZGVwZW5kZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODAxOAorCisgICAgICAgICogaHRtbC9jYW52YXMvQ2Fu
dmFzQnVmZmVyLmNwcDogQWRkZWQuIFdyYXBwZXIgYXJvdW5kIEdMIEJ1ZmZlciBvYmplY3QKKyAg
ICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNCdWZmZXIuaDogQWRkZWQuCisgICAgICAgICogaHRt
bC9jYW52YXMvQ2FudmFzQnVmZmVyLmlkbDogQWRkZWQuCisgICAgICAgICogaHRtbC9jYW52YXMv
Q2FudmFzRnJhbWVidWZmZXIuY3BwOiBBZGRlZC4gV3JhcHBlciBhcm91bmQgR0wgRnJhbWVidWZm
ZXIgb2JqZWN0CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzRnJhbWVidWZmZXIuaDogQWRk
ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzRnJhbWVidWZmZXIuaWRsOiBBZGRlZC4K
KyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNPYmplY3QuaDogRXhwb3NlIG1fY29udGV4dAor
ICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1Byb2dyYW0uY3BwOiBBZGRlZC4gV3JhcHBlciBh
cm91bmQgR0wgUHJvZ3JhbSBvYmplY3QKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNQcm9n
cmFtLmg6IEFkZGVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1Byb2dyYW0uaWRsOiBB
ZGRlZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJidWZmZXIuY3BwOiBBZGRl
ZC4gV3JhcHBlciBhcm91bmQgR0wgUmVuZGVyYnVmZmVyIG9iamVjdAorICAgICAgICAqIGh0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAgKiBodG1sL2NhbnZh
cy9DYW52YXNSZW5kZXJidWZmZXIuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9D
YW52YXNSZW5kZXJpbmdDb250ZXh0M0QuY3BwOiBNb3ZlIG1fb2JqZWN0cyBoYXNoIHRhYmxlIGZy
b20gR3JhcGhpY3NDb250ZXh0M0QgdG8gaGVyZQorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQzRC5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1NoYWRl
ci5jcHA6IEFkZGVkLiBXcmFwcGVyIGFyb3VuZCBHTCBTaGFkZXIgb2JqZWN0CisgICAgICAgICog
aHRtbC9jYW52YXMvQ2FudmFzU2hhZGVyLmg6IEFkZGVkLgorICAgICAgICAqIGh0bWwvY2FudmFz
L0NhbnZhc1NoYWRlci5pZGw6IEFkZGVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1Rl
eHR1cmUuY3BwOiBBZGRlZC4gV3JhcHBlciBhcm91bmQgR0wgVGV4dHVyZSBvYmplY3QKKyAgICAg
ICAgKiBodG1sL2NhbnZhcy9DYW52YXNUZXh0dXJlLmg6IEFkZGVkLgorICAgICAgICAqIGh0bWwv
Y2FudmFzL0NhbnZhc1RleHR1cmUuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaDogTW92ZSBtX29iamVjdHMgaGFzaCB0YWJsZSBm
cm9tIGhlcmUgdG8gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNECisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLmNwcDogSW1wbGVtZW50IHBsYXRmb3Jt
IGRlcGVuZGVudCBjb2RlIGZvciBHTCBvYmplY3QgY3JlYXRpb24vZGVzdHJ1Y3Rpb24KKworMjAw
OS0wOC0yMSAgQ2hyaXMgTWFycmluICA8Y21hcnJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgT2xpdmVyIEh1bnQuCiAKICAgICAgICAgTmV3IGZpbGVzIGZvciBDYW52YXMgM0Qg
ZmVhdHVyZQogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjgwMTgKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzQnVmZmVyLmNwcCBi
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzQnVmZmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4wZDZiNjYxCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9odG1s
L2NhbnZhcy9DYW52YXNCdWZmZXIuY3BwCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorCisjaW5jbHVkZSAiQ2Fu
dmFzQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK1Bhc3NSZWZQdHI8Q2Fu
dmFzQnVmZmVyPiBDYW52YXNCdWZmZXI6OmNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCogY3R4KQor
eworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2FudmFzQnVmZmVyKGN0eCkpOworfQorCitDYW52
YXNCdWZmZXI6OkNhbnZhc0J1ZmZlcihHcmFwaGljc0NvbnRleHQzRCogY3R4KQorICAgIDogQ2Fu
dmFzT2JqZWN0KGN0eCkKK3sKKyAgICBzZXRPYmplY3QoY29udGV4dCgpLT5jcmVhdGVCdWZmZXIo
KSk7Cit9CisKK3ZvaWQgQ2FudmFzQnVmZmVyOjpfZGVsZXRlT2JqZWN0KFBsYXRmb3JtM0RPYmpl
Y3Qgb2JqZWN0KQoreworICAgIGNvbnRleHQoKS0+ZGVsZXRlQnVmZmVyKG9iamVjdCk7Cit9CisK
K30KKworI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0
bWwvY2FudmFzL0NhbnZhc0J1ZmZlci5oIGIvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNCdWZm
ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzM1YjUxCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNCdWZmZXIuaApAQCAtMCwwICsx
LDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBDYW52YXNCdWZmZXJfaAorI2RlZmluZSBDYW52YXNC
dWZmZXJfaAorCisjaW5jbHVkZSAiQ2FudmFzT2JqZWN0LmgiCisKKyNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKyAgICAKKyAgICBjbGFzcyBDYW52YXNCdWZmZXIgOiBwdWJsaWMgQ2FudmFzT2JqZWN0
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgfkNhbnZhc0J1ZmZlcigpIHsgZGVsZXRl
T2JqZWN0KCk7IH0KKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc0J1
ZmZlcj4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKik7CisgICAgICAgIAorICAgIHByb3RlY3Rl
ZDoKKyAgICAgICAgQ2FudmFzQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEKik7CisgICAgICAgIAor
ICAgICAgICB2aXJ0dWFsIHZvaWQgX2RlbGV0ZU9iamVjdChQbGF0Zm9ybTNET2JqZWN0IG8pOwor
ICAgIH07CisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBDYW52YXNC
dWZmZXJfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNCdWZmZXIuaWRs
IGIvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNCdWZmZXIuaWRsCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjliY2E0MmIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2h0
bWwvY2FudmFzL0NhbnZhc0J1ZmZlci5pZGwKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKK21v
ZHVsZSBodG1sIHsKKyAgICBpbnRlcmZhY2UgW0NvbmRpdGlvbmFsPTNEX0NBTlZBU10gQ2FudmFz
QnVmZmVyIHsKKyAgICB9OworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNGcmFtZWJ1ZmZlci5jcHAgYi9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0ZyYW1lYnVmZmVy
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmFkNDJhCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNGcmFtZWJ1ZmZlci5jcHAKQEAg
LTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJM
RSgzRF9DQU5WQVMpCisKKyNpbmNsdWRlICJDYW52YXNGcmFtZWJ1ZmZlci5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisgICAgCitQYXNzUmVmUHRyPENhbnZhc0ZyYW1lYnVmZmVyPiBDYW52YXNG
cmFtZWJ1ZmZlcjo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjdHgpCit7CisgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBDYW52YXNGcmFtZWJ1ZmZlcihjdHgpKTsKK30KKworQ2FudmFzRnJhbWVi
dWZmZXI6OkNhbnZhc0ZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEKiBjdHgpCisgICAgOiBD
YW52YXNPYmplY3QoY3R4KQoreworICAgIHNldE9iamVjdChjb250ZXh0KCktPmNyZWF0ZUZyYW1l
YnVmZmVyKCkpOworfQorCit2b2lkIENhbnZhc0ZyYW1lYnVmZmVyOjpfZGVsZXRlT2JqZWN0KFBs
YXRmb3JtM0RPYmplY3Qgb2JqZWN0KQoreworICAgIGNvbnRleHQoKS0+ZGVsZXRlRnJhbWVidWZm
ZXIob2JqZWN0KTsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzRnJhbWVidWZmZXIuaCBiL1dlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzRnJhbWVidWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi44OWNhNjQyCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9odG1sL2NhbnZh
cy9DYW52YXNGcmFtZWJ1ZmZlci5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IENhbnZhc0ZyYW1lYnVmZmVyX2gKKyNkZWZpbmUgQ2FudmFzRnJhbWVidWZmZXJfaAorCisjaW5j
bHVkZSAiQ2FudmFzT2JqZWN0LmgiCisKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKKyAg
ICBjbGFzcyBDYW52YXNGcmFtZWJ1ZmZlciA6IHB1YmxpYyBDYW52YXNPYmplY3QgeworICAgIHB1
YmxpYzoKKyAgICAgICAgdmlydHVhbCB+Q2FudmFzRnJhbWVidWZmZXIoKSB7IGRlbGV0ZU9iamVj
dCgpOyB9CisgICAgICAgIAorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNGcmFtZWJ1
ZmZlcj4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKik7CisgICAgICAgIAorICAgIHByb3RlY3Rl
ZDoKKyAgICAgICAgQ2FudmFzRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0QqKTsKKyAgICAg
ICAgCisgICAgICAgIHZpcnR1YWwgdm9pZCBfZGVsZXRlT2JqZWN0KFBsYXRmb3JtM0RPYmplY3Qp
OworICAgIH07CisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBDYW52
YXNGcmFtZWJ1ZmZlcl9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0Zy
YW1lYnVmZmVyLmlkbCBiL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzRnJhbWVidWZmZXIuaWRs
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhOWI2NjgKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0ZyYW1lYnVmZmVyLmlkbApAQCAtMCww
ICsxLDI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworbW9kdWxlIGh0bWwgeworICAgIGludGVyZmFjZSBbQ29uZGl0
aW9uYWw9M0RfQ0FOVkFTXSBDYW52YXNGcmFtZWJ1ZmZlciB7CisgICAgfTsKK30KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzT2JqZWN0LmggYi9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0NhbnZhc09iamVjdC5oCmluZGV4IDU1Y2M1MjUuLmQ4OTI2NGEgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzT2JqZWN0LmgKKysrIGIvV2ViQ29yZS9odG1sL2NhbnZh
cy9DYW52YXNPYmplY3QuaApAQCAtNTIsNiArNTIsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgcHJvdGVjdGVkOgogICAgICAgICBDYW52YXNPYmplY3QoR3JhcGhpY3NDb250ZXh0M0QqKTsK
ICAgICAgICAgdmlydHVhbCB2b2lkIF9kZWxldGVPYmplY3QoUGxhdGZvcm0zRE9iamVjdCkgPSAw
OworICAgICAgICAKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQoKSB7IHJldHVy
biBtX2NvbnRleHQ7IH0KICAgICAKICAgICBwcml2YXRlOgogICAgICAgICBQbGF0Zm9ybTNET2Jq
ZWN0IG1fb2JqZWN0OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNQcm9n
cmFtLmNwcCBiL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUHJvZ3JhbS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA3MDA2NAotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUHJvZ3JhbS5jcHAKQEAgLTAsMCArMSw1MiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisKKyNp
bmNsdWRlICJDYW52YXNQcm9ncmFtLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK1Bh
c3NSZWZQdHI8Q2FudmFzUHJvZ3JhbT4gQ2FudmFzUHJvZ3JhbTo6Y3JlYXRlKEdyYXBoaWNzQ29u
dGV4dDNEKiBjdHgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDYW52YXNQcm9ncmFtKGN0
eCkpOworfQorCitDYW52YXNQcm9ncmFtOjpDYW52YXNQcm9ncmFtKEdyYXBoaWNzQ29udGV4dDNE
KiBjdHgpCisgICAgOiBDYW52YXNPYmplY3QoY3R4KQoreworICAgIHNldE9iamVjdChjb250ZXh0
KCktPmNyZWF0ZVByb2dyYW0oKSk7Cit9CisKK3ZvaWQgQ2FudmFzUHJvZ3JhbTo6X2RlbGV0ZU9i
amVjdChQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKK3sKKyAgICBjb250ZXh0KCktPmRlbGV0ZVBy
b2dyYW0ob2JqZWN0KTsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUHJvZ3JhbS5oIGIvV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNQcm9ncmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uMjIyY2UyOAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUHJvZ3JhbS5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIENhbnZhc1By
b2dyYW1faAorI2RlZmluZSBDYW52YXNQcm9ncmFtX2gKKworI2luY2x1ZGUgIkNhbnZhc09iamVj
dC5oIgorCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCisgICAgY2xhc3MgQ2FudmFzUHJv
Z3JhbSA6IHB1YmxpYyBDYW52YXNPYmplY3QgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVh
bCB+Q2FudmFzUHJvZ3JhbSgpIHsgZGVsZXRlT2JqZWN0KCk7IH0KKyAgICAgICAgCisgICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc1Byb2dyYW0+IGNyZWF0ZShHcmFwaGljc0NvbnRleHQz
RCopOworICAgICAgICAKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIENhbnZhc1Byb2dyYW0oR3Jh
cGhpY3NDb250ZXh0M0QqKTsKKyAgICAgICAgCisgICAgICAgIHZpcnR1YWwgdm9pZCBfZGVsZXRl
T2JqZWN0KFBsYXRmb3JtM0RPYmplY3QpOworICAgIH07CisgICAgCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBDYW52YXNQcm9ncmFtX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzUHJvZ3JhbS5pZGwgYi9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c1Byb2dyYW0uaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ZGFhZjIK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Byb2dyYW0uaWRs
CkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCittb2R1bGUgaHRtbCB7CisgICAgaW50ZXJmYWNl
IFtDb25kaXRpb25hbD0zRF9DQU5WQVNdIENhbnZhc1Byb2dyYW0geworICAgIH07Cit9CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmJ1ZmZlci5jcHAgYi9XZWJD
b3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmJ1ZmZlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uMzFjMTllOQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyYnVmZmVyLmNwcApAQCAtMCwwICsxLDUyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKDNEX0NBTlZBUykKKworI2luY2x1
ZGUgIkNhbnZhc1JlbmRlcmJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCitQ
YXNzUmVmUHRyPENhbnZhc1JlbmRlcmJ1ZmZlcj4gQ2FudmFzUmVuZGVyYnVmZmVyOjpjcmVhdGUo
R3JhcGhpY3NDb250ZXh0M0QqIGN0eCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IENhbnZh
c1JlbmRlcmJ1ZmZlcihjdHgpKTsKK30KKworQ2FudmFzUmVuZGVyYnVmZmVyOjpDYW52YXNSZW5k
ZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0QqIGN0eCkKKyAgICA6IENhbnZhc09iamVjdChjdHgp
Cit7CisgICAgc2V0T2JqZWN0KGNvbnRleHQoKS0+Y3JlYXRlUmVuZGVyYnVmZmVyKCkpOworfQor
Cit2b2lkIENhbnZhc1JlbmRlcmJ1ZmZlcjo6X2RlbGV0ZU9iamVjdChQbGF0Zm9ybTNET2JqZWN0
IG9iamVjdCkKK3sKKyAgICBjb250ZXh0KCktPmRlbGV0ZVJlbmRlcmJ1ZmZlcihvYmplY3QpOwor
fQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJidWZmZXIuaCBiL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyYnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
ODQ2OGZiMAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyYnVmZmVyLmgKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQ2FudmFzUmVu
ZGVyYnVmZmVyX2gKKyNkZWZpbmUgQ2FudmFzUmVuZGVyYnVmZmVyX2gKKworI2luY2x1ZGUgIkNh
bnZhc09iamVjdC5oIgorCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCisgICAgY2xhc3Mg
Q2FudmFzUmVuZGVyYnVmZmVyIDogcHVibGljIENhbnZhc09iamVjdCB7CisgICAgcHVibGljOgor
ICAgICAgICB2aXJ0dWFsIH5DYW52YXNSZW5kZXJidWZmZXIoKSB7IGRlbGV0ZU9iamVjdCgpOyB9
CisgICAgICAgIAorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNSZW5kZXJidWZmZXI+
IGNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCopOworICAgICAgICAKKyAgICBwcm90ZWN0ZWQ6Cisg
ICAgICAgIENhbnZhc1JlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRCopOworICAgICAgICAK
KyAgICAgICAgdmlydHVhbCB2b2lkIF9kZWxldGVPYmplY3QoUGxhdGZvcm0zRE9iamVjdCk7Cisg
ICAgfTsKKyAgICAKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIENhbnZhc1Jl
bmRlcmJ1ZmZlcl9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmJ1ZmZlci5pZGwgYi9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmJ1ZmZlci5pZGwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU0N2NjMwotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyYnVmZmVyLmlkbApAQCAtMCww
ICsxLDI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworbW9kdWxlIGh0bWwgeworICAgIGludGVyZmFjZSBbQ29uZGl0
aW9uYWw9M0RfQ0FOVkFTXSBDYW52YXNSZW5kZXJidWZmZXIgeworICAgIH07Cit9CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5jcHAgYi9X
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5jcHAKaW5kZXggNmI2
ZWNmNi4uNWFkNmE1YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0QuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDNELmNwcApAQCAtNDksNiArNDksNyBAQCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
M0Q6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRChIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzKQog
CiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6On5DYW52YXNSZW5kZXJpbmdDb250ZXh0M0QoKQog
eworICAgIGRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMoKTsKIH0KIAogdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0Q6Om1hcmtDb250ZXh0Q2hhbmdlZCgpCkBAIC02NDAsNjggKzY0MSw5OCBA
QCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2xWaWV3cG9ydChsb25nIHgsIGxvbmcg
eSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdQogLy8gTm9uLUdMIGZ1bmN0aW9ucwogUGFzc1JlZlB0
cjxDYW52YXNCdWZmZXI+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Y3JlYXRlQnVmZmVyKCkK
IHsKLSAgICByZXR1cm4gbV9jb250ZXh0LmNyZWF0ZUJ1ZmZlcigpOworICAgIFJlZlB0cjxDYW52
YXNCdWZmZXI+IG8gPSBDYW52YXNCdWZmZXI6OmNyZWF0ZSgmbV9jb250ZXh0KTsKKyAgICBhZGRP
YmplY3Qoby5nZXQoKSk7CisgICAgcmV0dXJuIG87CiB9CiAgICAgICAgIAogUGFzc1JlZlB0cjxD
YW52YXNGcmFtZWJ1ZmZlcj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpjcmVhdGVGcmFtZWJ1
ZmZlcigpCiB7Ci0gICAgcmV0dXJuIG1fY29udGV4dC5jcmVhdGVGcmFtZWJ1ZmZlcigpOworICAg
IFJlZlB0cjxDYW52YXNGcmFtZWJ1ZmZlcj4gbyA9IENhbnZhc0ZyYW1lYnVmZmVyOjpjcmVhdGUo
Jm1fY29udGV4dCk7CisgICAgYWRkT2JqZWN0KG8uZ2V0KCkpOworICAgIHJldHVybiBvOwogfQog
CiBQYXNzUmVmUHRyPENhbnZhc1RleHR1cmU+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Y3Jl
YXRlVGV4dHVyZSgpCiB7Ci0gICAgcmV0dXJuIG1fY29udGV4dC5jcmVhdGVUZXh0dXJlKCk7Cisg
ICAgUmVmUHRyPENhbnZhc1RleHR1cmU+IG8gPSBDYW52YXNUZXh0dXJlOjpjcmVhdGUoJm1fY29u
dGV4dCk7CisgICAgYWRkT2JqZWN0KG8uZ2V0KCkpOworICAgIHJldHVybiBvOwogfQogCiBQYXNz
UmVmUHRyPENhbnZhc1Byb2dyYW0+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Y3JlYXRlUHJv
Z3JhbSgpCiB7Ci0gICAgcmV0dXJuIG1fY29udGV4dC5jcmVhdGVQcm9ncmFtKCk7CisgICAgUmVm
UHRyPENhbnZhc1Byb2dyYW0+IG8gPSBDYW52YXNQcm9ncmFtOjpjcmVhdGUoJm1fY29udGV4dCk7
CisgICAgYWRkT2JqZWN0KG8uZ2V0KCkpOworICAgIHJldHVybiBvOwogfQogCiBQYXNzUmVmUHRy
PENhbnZhc1JlbmRlcmJ1ZmZlcj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpjcmVhdGVSZW5k
ZXJidWZmZXIoKQogewotICAgIHJldHVybiBtX2NvbnRleHQuY3JlYXRlUmVuZGVyYnVmZmVyKCk7
CisgICAgUmVmUHRyPENhbnZhc1JlbmRlcmJ1ZmZlcj4gbyA9IENhbnZhc1JlbmRlcmJ1ZmZlcjo6
Y3JlYXRlKCZtX2NvbnRleHQpOworICAgIGFkZE9iamVjdChvLmdldCgpKTsKKyAgICByZXR1cm4g
bzsKIH0KIAogUGFzc1JlZlB0cjxDYW52YXNTaGFkZXI+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RDo6Y3JlYXRlU2hhZGVyKHVuc2lnbmVkIGxvbmcgdHlwZSkKIHsKLSAgICByZXR1cm4gbV9jb250
ZXh0LmNyZWF0ZVNoYWRlcih0eXBlKTsKKyAgICAvLyBGSVhNRTogTmVlZCB0byBpbmNsdWRlIEdM
XyBjb25zdGFudHMgZm9yIGludGVybmFsIHVzZQorICAgIC8vIEZJWE1FOiBOZWVkIHRvIGRvIHBh
cmFtIGNoZWNraW5nIGFuZCB0aHJvdyBleGNlcHRpb24gaWYgYW4gaWxsZWdhbCB2YWx1ZSBpcyBw
YXNzZWQgaW4KKyAgICBHcmFwaGljc0NvbnRleHQzRDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlID0g
R3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVI7CisgICAgaWYgKHR5cGUgPT0gMHg4QjMw
KSAvLyBHTF9GUkFHTUVOVF9TSEFERVIKKyAgICAgICAgc2hhZGVyVHlwZSA9IEdyYXBoaWNzQ29u
dGV4dDNEOjpGUkFHTUVOVF9TSEFERVI7CisgICAgICAgIAorICAgIFJlZlB0cjxDYW52YXNTaGFk
ZXI+IG8gPSBDYW52YXNTaGFkZXI6OmNyZWF0ZSgmbV9jb250ZXh0LCBzaGFkZXJUeXBlKTsKKyAg
ICBhZGRPYmplY3Qoby5nZXQoKSk7CisgICAgcmV0dXJuIG87CiB9CiAKIHZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDNEOjpkZWxldGVCdWZmZXIoQ2FudmFzQnVmZmVyKiBidWZmZXIpCiB7Ci0g
ICAgbV9jb250ZXh0LmRlbGV0ZUJ1ZmZlcihidWZmZXIpOwotICAgIGNsZWFudXBBZnRlckdyYXBo
aWNzQ2FsbChmYWxzZSk7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybjsKKyAgICAK
KyAgICBidWZmZXItPmRlbGV0ZU9iamVjdCgpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRDo6ZGVsZXRlRnJhbWVidWZmZXIoQ2FudmFzRnJhbWVidWZmZXIqIGZyYW1lYnVmZmVy
KQogewotICAgIG1fY29udGV4dC5kZWxldGVGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcik7Ci0gICAg
Y2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKKyAgICBpZiAoIWZyYW1lYnVmZmVyKQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgZnJhbWVidWZmZXItPmRlbGV0ZU9iamVjdCgpOwog
fQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6ZGVsZXRlUHJvZ3JhbShDYW52YXNQ
cm9ncmFtKiBwcm9ncmFtKQogewotICAgIG1fY29udGV4dC5kZWxldGVQcm9ncmFtKHByb2dyYW0p
OwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CisgICAgaWYgKCFwcm9ncmFt
KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgcHJvZ3JhbS0+ZGVsZXRlT2JqZWN0KCk7CiB9
CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpkZWxldGVSZW5kZXJidWZmZXIoQ2Fu
dmFzUmVuZGVyYnVmZmVyKiByZW5kZXJidWZmZXIpCiB7Ci0gICAgbV9jb250ZXh0LmRlbGV0ZVJl
bmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpOwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChm
YWxzZSk7CisgICAgaWYgKCFyZW5kZXJidWZmZXIpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICByZW5kZXJidWZmZXItPmRlbGV0ZU9iamVjdCgpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQzRDo6ZGVsZXRlU2hhZGVyKENhbnZhc1NoYWRlciogc2hhZGVyKQogewotICAgIG1f
Y29udGV4dC5kZWxldGVTaGFkZXIoc2hhZGVyKTsKLSAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0Nh
bGwoZmFsc2UpOworICAgIGlmICghc2hhZGVyKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
c2hhZGVyLT5kZWxldGVPYmplY3QoKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
M0Q6OmRlbGV0ZVRleHR1cmUoQ2FudmFzVGV4dHVyZSogdGV4dHVyZSkKIHsKLSAgICBtX2NvbnRl
eHQuZGVsZXRlVGV4dHVyZSh0ZXh0dXJlKTsKLSAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwo
ZmFsc2UpOworICAgIGlmICghdGV4dHVyZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHRl
eHR1cmUtPmRlbGV0ZU9iamVjdCgpOwogfQogCiBQYXNzUmVmUHRyPENhbnZhc051bWJlckFycmF5
PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldCh1bnNpZ25lZCBsb25nIHBuYW1lKQpAQCAt
ODI3LDYgKzg1OCwyNiBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dGV4U3ViSW1h
Z2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bgogICAgIGNsZWFudXBBZnRl
ckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
OjpyZW1vdmVPYmplY3QoQ2FudmFzT2JqZWN0KiBvYmplY3QpCit7CisgICAgbV9jYW52YXNPYmpl
Y3RzLnJlbW92ZShvYmplY3QpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6
YWRkT2JqZWN0KENhbnZhc09iamVjdCogb2JqZWN0KQoreworICAgIHJlbW92ZU9iamVjdChvYmpl
Y3QpOworICAgIG1fY2FudmFzT2JqZWN0cy5hZGQob2JqZWN0KTsKK30KKwordm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0Q6OmRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMoKQoreworICAgIEhh
c2hTZXQ8Q2FudmFzT2JqZWN0Kj46Oml0ZXJhdG9yIHBlbmQgPSBtX2NhbnZhc09iamVjdHMuZW5k
KCk7CisgICAgZm9yIChIYXNoU2V0PENhbnZhc09iamVjdCo+OjppdGVyYXRvciBpdCA9IG1fY2Fu
dmFzT2JqZWN0cy5iZWdpbigpOyBpdCAhPSBwZW5kOyArK2l0KQorICAgICAgICAoKml0KS0+ZGV0
YWNoQ29udGV4dCgpOworICAgICAgICAKKyAgICBtX2NhbnZhc09iamVjdHMuY2xlYXIoKTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
LmggYi9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5oCmluZGV4
IDEzNmE0OWEuLjA3ZDU1YTkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDNELmgKKysrIGIvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0QuaApAQCAtMTkwLDYgKzE5MCwxMCBAQCBjbGFzcyBXZWJLaXRDU1NNYXRy
aXg7CiAgICAgICAgIHZvaWQgcmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpOwogICAgICAg
ICAKICAgICBwcml2YXRlOgorICAgICAgICB2b2lkIGFkZE9iamVjdChDYW52YXNPYmplY3QqKTsK
KyAgICAgICAgdm9pZCByZW1vdmVPYmplY3QoQ2FudmFzT2JqZWN0Kik7CisgICAgICAgIHZvaWQg
ZGV0YWNoQW5kUmVtb3ZlQWxsT2JqZWN0cygpOworCiAgICAgICAgIHZvaWQgbWFya0NvbnRleHRD
aGFuZ2VkKCk7CiAgICAgICAgIHZvaWQgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGJvb2wgY2hh
bmdlZCkKICAgICAgICAgewpAQCAtMjAwLDYgKzIwNCw3IEBAIGNsYXNzIFdlYktpdENTU01hdHJp
eDsKICAgICAgICAgCiAgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEIG1fY29udGV4dDsKICAgICAg
ICAgYm9vbCBtX25lZWRzVXBkYXRlOworICAgICAgICBIYXNoU2V0PENhbnZhc09iamVjdCo+IG1f
Y2FudmFzT2JqZWN0czsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1NoYWRlci5jcHAgYi9XZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1NoYWRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uNjYxNWRiYwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
U2hhZGVyLmNwcApAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaWYgRU5BQkxFKDNEX0NBTlZBUykKKworI2luY2x1ZGUgIkNhbnZhc1NoYWRlci5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCitQYXNzUmVmUHRyPENhbnZhc1NoYWRlcj4gQ2Fu
dmFzU2hhZGVyOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGN0eCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlNoYWRlclR5cGUgdHlwZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IENhbnZhc1No
YWRlcihjdHgsIHR5cGUpKTsKK30KKworQ2FudmFzU2hhZGVyOjpDYW52YXNTaGFkZXIoR3JhcGhp
Y3NDb250ZXh0M0QqIGN0eCwgR3JhcGhpY3NDb250ZXh0M0Q6OlNoYWRlclR5cGUgdHlwZSkKKyAg
ICA6IENhbnZhc09iamVjdChjdHgpCit7CisgICAgc2V0T2JqZWN0KGNvbnRleHQoKS0+Y3JlYXRl
U2hhZGVyKHR5cGUpKTsKK30KKwordm9pZCBDYW52YXNTaGFkZXI6Ol9kZWxldGVPYmplY3QoUGxh
dGZvcm0zRE9iamVjdCBvYmplY3QpCit7CisgICAgY29udGV4dCgpLT5kZWxldGVTaGFkZXIob2Jq
ZWN0KTsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU2hhZGVyLmggYi9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1NoYWRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiZDAw
NTAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1NoYWRlci5o
CkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIENhbnZhc1NoYWRlcl9oCisjZGVm
aW5lIENhbnZhc1NoYWRlcl9oCisKKyNpbmNsdWRlICJDYW52YXNPYmplY3QuaCIKKworI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworICAgIAorICAgIGNsYXNzIENhbnZhc1NoYWRlciA6IHB1YmxpYyBD
YW52YXNPYmplY3QgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB+Q2FudmFzU2hhZGVy
KCkgeyBkZWxldGVPYmplY3QoKTsgfQorICAgICAgICAKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8Q2FudmFzU2hhZGVyPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqLCBHcmFwaGljc0NvbnRl
eHQzRDo6U2hhZGVyVHlwZSk7CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIENhbnZh
c1NoYWRlcihHcmFwaGljc0NvbnRleHQzRCosIEdyYXBoaWNzQ29udGV4dDNEOjpTaGFkZXJUeXBl
KTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgX2RlbGV0ZU9iamVjdChQbGF0Zm9ybTNET2JqZWN0
KTsKKyAgICB9OworICAgIAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQ2Fu
dmFzU2hhZGVyX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU2hhZGVy
LmlkbCBiL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU2hhZGVyLmlkbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDc0YzNhCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNTaGFkZXIuaWRsCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
Cittb2R1bGUgaHRtbCB7CisgICAgaW50ZXJmYWNlIFtDb25kaXRpb25hbD0zRF9DQU5WQVNdIENh
bnZhc1NoYWRlciB7CisgICAgfTsKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzVGV4dHVyZS5jcHAgYi9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1RleHR1cmUuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyZjczYWYKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1RleHR1cmUuY3BwCkBAIC0wLDAgKzEs
NTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoM0RfQ0FO
VkFTKQorCisjaW5jbHVkZSAiQ2FudmFzVGV4dHVyZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisgICAgCitQYXNzUmVmUHRyPENhbnZhc1RleHR1cmU+IENhbnZhc1RleHR1cmU6OmNyZWF0ZShH
cmFwaGljc0NvbnRleHQzRCogY3R4KQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2FudmFz
VGV4dHVyZShjdHgpKTsKK30KKworQ2FudmFzVGV4dHVyZTo6Q2FudmFzVGV4dHVyZShHcmFwaGlj
c0NvbnRleHQzRCogY3R4KQorICAgIDogQ2FudmFzT2JqZWN0KGN0eCkKK3sKKyAgICBzZXRPYmpl
Y3QoY29udGV4dCgpLT5jcmVhdGVUZXh0dXJlKCkpOworfQorCit2b2lkIENhbnZhc1RleHR1cmU6
Ol9kZWxldGVPYmplY3QoUGxhdGZvcm0zRE9iamVjdCBvYmplY3QpCit7CisgICAgY29udGV4dCgp
LT5kZWxldGVUZXh0dXJlKG9iamVjdCk7Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRSgzRF9D
QU5WQVMpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1RleHR1cmUuaCBi
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzVGV4dHVyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjAxNWUzOTMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1RleHR1cmUuaApAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBDYW52YXNUZXh0dXJlX2gKKyNkZWZpbmUgQ2FudmFzVGV4dHVyZV9oCisKKyNpbmNsdWRlICJD
YW52YXNPYmplY3QuaCIKKworI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorICAgIGNsYXNz
IENhbnZhc1RleHR1cmUgOiBwdWJsaWMgQ2FudmFzT2JqZWN0IHsKKyAgICBwdWJsaWM6CisgICAg
ICAgIHZpcnR1YWwgfkNhbnZhc1RleHR1cmUoKSB7IGRlbGV0ZU9iamVjdCgpOyB9CisgICAgICAg
IAorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNUZXh0dXJlPiBjcmVhdGUoR3JhcGhp
Y3NDb250ZXh0M0QqKTsKKyAgICAKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIENhbnZhc1RleHR1
cmUoR3JhcGhpY3NDb250ZXh0M0QqKTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgX2RlbGV0ZU9i
amVjdChQbGF0Zm9ybTNET2JqZWN0KTsKKyAgICB9OworICAgIAorfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gQ2FudmFzVGV4dHVyZV9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0
bWwvY2FudmFzL0NhbnZhc1RleHR1cmUuaWRsIGIvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNU
ZXh0dXJlLmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2VlZGQ3Ci0t
LSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNUZXh0dXJlLmlkbApA
QCAtMCwwICsxLDI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworbW9kdWxlIGh0bWwgeworICAgIGludGVyZmFjZSBb
Q29uZGl0aW9uYWw9M0RfQ0FOVkFTXSBDYW52YXNUZXh0dXJlIHsKKyAgICB9OworfQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHAgYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZTMxMGMwOS4uMDAwMDAwMAotLS0gYS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU5
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoM0Rf
Q0FOVkFTKQotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKLSNpbmNsdWRlICJDYW52
YXNPYmplY3QuaCIKLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotICAgIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVtb3ZlT2JqZWN0KENhbnZhc09iamVj
dCogb2JqZWN0KQotewotICAgIG1fY2FudmFzT2JqZWN0cy5yZW1vdmUob2JqZWN0KTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YWRkT2JqZWN0KENhbnZhc09iamVjdCogb2JqZWN0KQot
ewotICAgIHJlbW92ZU9iamVjdChvYmplY3QpOwotICAgIG1fY2FudmFzT2JqZWN0cy5hZGQob2Jq
ZWN0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGV0YWNoQW5kUmVtb3ZlQWxsT2Jq
ZWN0cygpCi17Ci0gICAgSGFzaFNldDxDYW52YXNPYmplY3QqPjo6aXRlcmF0b3IgcGVuZCA9IG1f
Y2FudmFzT2JqZWN0cy5lbmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8Q2FudmFzT2JqZWN0Kj46Oml0
ZXJhdG9yIGl0ID0gbV9jYW52YXNPYmplY3RzLmJlZ2luKCk7IGl0ICE9IHBlbmQ7ICsraXQpCi0g
ICAgICAgICgqaXQpLT5kZXRhY2hDb250ZXh0KCk7Ci0gICAgICAgIAotICAgIG1fY2FudmFzT2Jq
ZWN0cy5jbGVhcigpOwotfQotCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCmluZGV4IDlhYjMx
YTYuLmVmM2M3NzcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0M0QuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dDNELmgKQEAgLTQ0LDcgKzQ0LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNz
IENhbnZhc0J1ZmZlcjsKICAgICBjbGFzcyBDYW52YXNGcmFtZWJ1ZmZlcjsKICAgICBjbGFzcyBD
YW52YXNOdW1iZXJBcnJheTsKLSAgICBjbGFzcyBDYW52YXNPYmplY3Q7CiAgICAgY2xhc3MgQ2Fu
dmFzUHJvZ3JhbTsKICAgICBjbGFzcyBDYW52YXNSZW5kZXJidWZmZXI7CiAgICAgY2xhc3MgQ2Fu
dmFzU2hhZGVyOwpAQCAtNTUsNiArNTQsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCiAg
ICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0M0QgOiBOb25jb3B5YWJsZSB7CiAgICAgcHVibGljOgor
ICAgICAgICBlbnVtIFNoYWRlclR5cGUgeyBGUkFHTUVOVF9TSEFERVIsIFZFUlRFWF9TSEFERVIg
fTsKKyAgICAKICAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QoKTsKICAgICAgICAgdmlydHVhbCB+
R3JhcGhpY3NDb250ZXh0M0QoKTsKICAgICAgICAKQEAgLTYzLDcgKzY0LDYgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICB2b2lkIGNoZWNrRXJyb3IoKSBjb25zdDsKICAgICAgICAgCiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICAgICAgdmlydHVh
bCB2b2lkIHJlbW92ZU9iamVjdChDYW52YXNPYmplY3QqKTsKICAgICAgICAgCiAgICAgICAgIHZv
aWQgZ2xBY3RpdmVUZXh0dXJlKHVuc2lnbmVkIGxvbmcgdGV4dHVyZSk7CiAgICAgICAgIHZvaWQg
Z2xBdHRhY2hTaGFkZXIoQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSwgQ2FudmFzU2hhZGVyKiBzaGFk
ZXIpOwpAQCAtMTYzLDIxICsxNjMsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZv
aWQgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKHVuc2lnbmVkIGxvbmcgaW5keCwgbG9uZyBzaXplLCB1
bnNpZ25lZCBsb25nIHR5cGUsIGJvb2wgbm9ybWFsaXplZCwgdW5zaWduZWQgbG9uZyBzdHJpZGUs
IENhbnZhc051bWJlckFycmF5Kik7CiAgICAgICAgIHZvaWQgZ2xWaWV3cG9ydChsb25nIHgsIGxv
bmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpOwogICAgICAg
ICAKLSAgICAgICAgLy8gTm9uLUdMIGZ1bmN0aW9ucwotICAgICAgICBQYXNzUmVmUHRyPENhbnZh
c0J1ZmZlcj4gY3JlYXRlQnVmZmVyKCk7Ci0gICAgICAgIFBhc3NSZWZQdHI8Q2FudmFzRnJhbWVi
dWZmZXI+IGNyZWF0ZUZyYW1lYnVmZmVyKCk7Ci0gICAgICAgIFBhc3NSZWZQdHI8Q2FudmFzUHJv
Z3JhbT4gY3JlYXRlUHJvZ3JhbSgpOyAgICAgICAgICAgICAgICAgICAgIC8vIHJlcGxhY2VzIGds
Q3JlYXRlUHJvZ3JhbQotICAgICAgICBQYXNzUmVmUHRyPENhbnZhc1JlbmRlcmJ1ZmZlcj4gY3Jl
YXRlUmVuZGVyYnVmZmVyKCk7Ci0gICAgICAgIFBhc3NSZWZQdHI8Q2FudmFzU2hhZGVyPiBjcmVh
dGVTaGFkZXIodW5zaWduZWQgbG9uZyB0eXBlKTsgIC8vIHJlcGxhY2VzIGdsQ3JlYXRlU2hhZGVy
Ci0gICAgICAgIFBhc3NSZWZQdHI8Q2FudmFzVGV4dHVyZT4gY3JlYXRlVGV4dHVyZSgpOwotICAg
ICAgICAKLSAgICAgICAgdm9pZCBkZWxldGVCdWZmZXIoQ2FudmFzQnVmZmVyKik7ICAgICAgICAg
ICAgICAgIC8vIHJlcGxhY2VzIGdsRGVsZXRlQnVmZmVycwotICAgICAgICB2b2lkIGRlbGV0ZUZy
YW1lYnVmZmVyKENhbnZhc0ZyYW1lYnVmZmVyKik7ICAgICAgLy8gcmVwbGFjZXMgZ2xEZWxldGVG
cmFtZWJ1ZmZlcnMKLSAgICAgICAgdm9pZCBkZWxldGVQcm9ncmFtKENhbnZhc1Byb2dyYW0qKTsg
ICAgICAgICAgICAgIC8vIHJlcGxhY2VzIGdsRGVsZXRlUHJvZ3JhbQotICAgICAgICB2b2lkIGRl
bGV0ZVJlbmRlcmJ1ZmZlcihDYW52YXNSZW5kZXJidWZmZXIqKTsgICAgLy8gcmVwbGFjZXMgZ2xE
ZWxldGVSZW5kZXJidWZmZXJzCi0gICAgICAgIHZvaWQgZGVsZXRlU2hhZGVyKENhbnZhc1NoYWRl
ciopOyAgICAgICAgICAgICAgICAvLyByZXBsYWNlcyBnbERlbGV0ZVNoYWRlcgotICAgICAgICB2
b2lkIGRlbGV0ZVRleHR1cmUoQ2FudmFzVGV4dHVyZSopOyAgICAgICAgICAgICAgLy8gcmVwbGFj
ZXMgZ2xEZWxldGVUZXh0dXJlcwotICAgICAgICAKICAgICAgICAgUGFzc1JlZlB0cjxDYW52YXNO
dW1iZXJBcnJheT4gZ2V0KHVuc2lnbmVkIGxvbmcgcG5hbWUpOyAgICAgIC8vIHJlcGxhY2VzIGds
R2V0Qm9vbGVhbnYKICAgICAgICAgUGFzc1JlZlB0cjxDYW52YXNOdW1iZXJBcnJheT4gZ2V0QnVm
ZmVyUGFyYW1ldGVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lKTsg
Ly8gcmVwbGFjZXMgZ2xHZXRCdWZmZXJQYXJhbWV0ZXJpdgogICAgICAgICBQYXNzUmVmUHRyPENh
bnZhc051bWJlckFycmF5PiBnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIodW5zaWdu
ZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyBw
bmFtZSk7IC8vIHJlcGxhY2VzIGdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYK
QEAgLTIwNSwxNCArMTkwLDI1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgCiAgICAg
ICAgIHZvaWQgcmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpOwogICAgICAgICAKLSAgICBw
cml2YXRlOgotICAgICAgICB2b2lkIGFkZE9iamVjdChDYW52YXNPYmplY3QqKTsKLSAgICAgICAg
dm9pZCBkZXRhY2hBbmRSZW1vdmVBbGxPYmplY3RzKCk7Ci0gICAgICAgIAorICAgICAgICAvLyBT
dXBwb3J0IGZvciBidWZmZXIgY3JlYXRpb24gYW5kIGRlbGV0aW9uCisgICAgICAgIHVuc2lnbmVk
IGNyZWF0ZUJ1ZmZlcigpOworICAgICAgICB1bnNpZ25lZCBjcmVhdGVGcmFtZWJ1ZmZlcigpOwor
ICAgICAgICB1bnNpZ25lZCBjcmVhdGVQcm9ncmFtKCk7CisgICAgICAgIHVuc2lnbmVkIGNyZWF0
ZVJlbmRlcmJ1ZmZlcigpOworICAgICAgICB1bnNpZ25lZCBjcmVhdGVTaGFkZXIoU2hhZGVyVHlw
ZSk7CisgICAgICAgIHVuc2lnbmVkIGNyZWF0ZVRleHR1cmUoKTsKKyAgICAgICAgCisgICAgICAg
IHZvaWQgZGVsZXRlQnVmZmVyKHVuc2lnbmVkKTsKKyAgICAgICAgdm9pZCBkZWxldGVGcmFtZWJ1
ZmZlcih1bnNpZ25lZCk7CisgICAgICAgIHZvaWQgZGVsZXRlUHJvZ3JhbSh1bnNpZ25lZCk7Cisg
ICAgICAgIHZvaWQgZGVsZXRlUmVuZGVyYnVmZmVyKHVuc2lnbmVkKTsKKyAgICAgICAgdm9pZCBk
ZWxldGVTaGFkZXIodW5zaWduZWQpOworICAgICAgICB2b2lkIGRlbGV0ZVRleHR1cmUodW5zaWdu
ZWQpOyAgICAgICAgCisgICAgICAgIAorICAgIHByaXZhdGU6ICAgICAgICAKICAgICAgICAgaW50
IG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQ7CiAgICAgICAgIAogICAgICAgICBWZWN0
b3I8VmVjdG9yPGZsb2F0PiA+IG1fdmVydGV4QXJyYXk7Ci0gICAgICAgIEhhc2hTZXQ8Q2FudmFz
T2JqZWN0Kj4gbV9jYW52YXNPYmplY3RzOwogICAgICAgICAKICNpZiBQTEFURk9STShNQUMpCiAg
ICAgICAgIENHTENvbnRleHRPYmogbV9jb250ZXh0T2JqOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMuY3BwIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMuY3BwCmluZGV4IDE3MzM3
NWEuLjQwYmE0OGIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dy
YXBoaWNzQ29udGV4dDNETWFjLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9HcmFwaGljc0NvbnRleHQzRE1hYy5jcHAKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJI
VE1MQ2FudmFzRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIKICNpbmNs
dWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVk
ZSAiV2ViS2l0Q1NTTWF0cml4LmgiCiAKICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dCaXRtYXBD
b250ZXh0Lmg+CkBAIC05OCw5ICs5OSw2IEBAIEdyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0Nv
bnRleHQzRCgpCiAKICBHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKCkKIHsK
LSAgICAvLyB0ZWxsIGFsbCB0aGUgb2JqZWN0cyB3ZSdyZSBnb2luZyBhd2F5Ci0gICAgZGV0YWNo
QW5kUmVtb3ZlQWxsT2JqZWN0cygpOwotICAgIAogICAgIENHTFNldEN1cnJlbnRDb250ZXh0KG1f
Y29udGV4dE9iaik7CiAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJiBtX2RlcHRo
QnVmZmVyKTsKICAgICA6OmdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7CkBAIC04NTgs
MTA5ICs4NTYsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnbFZpZXdwb3J0KGxvbmcgeCwg
bG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZAogICAgIDo6Z2xWaWV3cG9ydChz
dGF0aWNfY2FzdDxHTGludD4oeCksIHN0YXRpY19jYXN0PEdMaW50Pih5KSwgc3RhdGljX2Nhc3Q8
R0xzaXplaT4od2lkdGgpLCBzdGF0aWNfY2FzdDxHTHNpemVpPihoZWlnaHQpKTsKIH0KIAotLy8g
Tm9uLUdMIGZ1bmN0aW9ucwotUGFzc1JlZlB0cjxDYW52YXNCdWZmZXI+IEdyYXBoaWNzQ29udGV4
dDNEOjpjcmVhdGVCdWZmZXIoKQotewotICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsK
LSAgICBSZWZQdHI8Q2FudmFzQnVmZmVyPiBvID0gQ2FudmFzQnVmZmVyOjpjcmVhdGUodGhpcyk7
Ci0gICAgYWRkT2JqZWN0KG8uZ2V0KCkpOwotICAgIHJldHVybiBvOwotfQotCi1QYXNzUmVmUHRy
PENhbnZhc0ZyYW1lYnVmZmVyPiBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlRnJhbWVidWZmZXIo
KQotewotICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKLSAgICBSZWZQdHI8Q2FudmFz
RnJhbWVidWZmZXI+IG8gPSBDYW52YXNGcmFtZWJ1ZmZlcjo6Y3JlYXRlKHRoaXMpOwotICAgIGFk
ZE9iamVjdChvLmdldCgpKTsKLSAgICByZXR1cm4gbzsKLX0KLQotUGFzc1JlZlB0cjxDYW52YXNU
ZXh0dXJlPiBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlVGV4dHVyZSgpCi17Ci0gICAgZW5zdXJl
Q29udGV4dChtX2NvbnRleHRPYmopOwotICAgIFJlZlB0cjxDYW52YXNUZXh0dXJlPiBvID0gQ2Fu
dmFzVGV4dHVyZTo6Y3JlYXRlKHRoaXMpOwotICAgIGFkZE9iamVjdChvLmdldCgpKTsKLSAgICBy
ZXR1cm4gbzsKLX0KLQotUGFzc1JlZlB0cjxDYW52YXNQcm9ncmFtPiBHcmFwaGljc0NvbnRleHQz
RDo6Y3JlYXRlUHJvZ3JhbSgpCi17Ci0gICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOwot
ICAgIFJlZlB0cjxDYW52YXNQcm9ncmFtPiBvID0gQ2FudmFzUHJvZ3JhbTo6Y3JlYXRlKHRoaXMp
OwotICAgIGFkZE9iamVjdChvLmdldCgpKTsKLSAgICByZXR1cm4gbzsKLX0KLQotUGFzc1JlZlB0
cjxDYW52YXNSZW5kZXJidWZmZXI+IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVSZW5kZXJidWZm
ZXIoKQotewotICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKLSAgICBSZWZQdHI8Q2Fu
dmFzUmVuZGVyYnVmZmVyPiBvID0gQ2FudmFzUmVuZGVyYnVmZmVyOjpjcmVhdGUodGhpcyk7Ci0g
ICAgYWRkT2JqZWN0KG8uZ2V0KCkpOwotICAgIHJldHVybiBvOwotfQotCi1QYXNzUmVmUHRyPENh
bnZhc1NoYWRlcj4gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVNoYWRlcih1bnNpZ25lZCBsb25n
IHR5cGUpCi17Ci0gICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOwotICAgIFJlZlB0cjxD
YW52YXNTaGFkZXI+IG8gPSBDYW52YXNTaGFkZXI6OmNyZWF0ZSh0aGlzLCB0eXBlKTsKLSAgICBh
ZGRPYmplY3Qoby5nZXQoKSk7Ci0gICAgcmV0dXJuIG87Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmRlbGV0ZUJ1ZmZlcihDYW52YXNCdWZmZXIqIGJ1ZmZlcikKLXsKLSAgICBpZiAoIWJ1
ZmZlcikKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0
T2JqKTsKLSAgICBidWZmZXItPmRlbGV0ZU9iamVjdCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpkZWxldGVGcmFtZWJ1ZmZlcihDYW52YXNGcmFtZWJ1ZmZlciogZnJhbWVidWZmZXIp
Ci17Ci0gICAgaWYgKCFmcmFtZWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGVu
c3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKLSAgICBmcmFtZWJ1ZmZlci0+ZGVsZXRlT2JqZWN0
KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVByb2dyYW0oQ2FudmFzUHJv
Z3JhbSogcHJvZ3JhbSkKLXsKLSAgICBpZiAoIXByb2dyYW0pCi0gICAgICAgIHJldHVybjsKLSAg
ICAKLSAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7Ci0gICAgcHJvZ3JhbS0+ZGVsZXRl
T2JqZWN0KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVJlbmRlcmJ1ZmZl
cihDYW52YXNSZW5kZXJidWZmZXIqIHJlbmRlcmJ1ZmZlcikKLXsKLSAgICBpZiAoIXJlbmRlcmJ1
ZmZlcikKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0
T2JqKTsKLSAgICByZW5kZXJidWZmZXItPmRlbGV0ZU9iamVjdCgpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpkZWxldGVTaGFkZXIoQ2FudmFzU2hhZGVyKiBzaGFkZXIpCi17Ci0gICAg
aWYgKCFzaGFkZXIpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBlbnN1cmVDb250ZXh0KG1f
Y29udGV4dE9iaik7Ci0gICAgc2hhZGVyLT5kZWxldGVPYmplY3QoKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6ZGVsZXRlVGV4dHVyZShDYW52YXNUZXh0dXJlKiB0ZXh0dXJlKQotewot
ICAgIGlmICghdGV4dHVyZSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGVuc3VyZUNvbnRl
eHQobV9jb250ZXh0T2JqKTsKLSAgICB0ZXh0dXJlLT5kZWxldGVPYmplY3QoKTsKLX0KLQogc3Rh
dGljIGludCBzaXplRm9yR2V0UGFyYW0odW5zaWduZWQgbG9uZyBwbmFtZSkKIHsKICAgICBzd2l0
Y2gocG5hbWUpIHsKQEAgLTE1MTAsNiArMTQwNSw4NiBAQCBpbnQgR3JhcGhpY3NDb250ZXh0M0Q6
OnRleFN1YkltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQg
eAogICAgIHJldHVybiAtMTsKIH0KIAordW5zaWduZWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0
ZUJ1ZmZlcigpCit7CisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOworICAgIEdMdWlu
dCBvOworICAgIGdsR2VuQnVmZmVycygxLCAmbyk7CisgICAgcmV0dXJuIG87Cit9CisKK3Vuc2ln
bmVkIEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVGcmFtZWJ1ZmZlcigpCit7CisgICAgZW5zdXJl
Q29udGV4dChtX2NvbnRleHRPYmopOworICAgIEdMdWludCBvOworICAgIGdsR2VuRnJhbWVidWZm
ZXJzRVhUKDEsICZvKTsKKyAgICByZXR1cm4gbzsKK30KKwordW5zaWduZWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmNyZWF0ZVByb2dyYW0oKQoreworICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2Jq
KTsKKyAgICByZXR1cm4gZ2xDcmVhdGVQcm9ncmFtKCk7Cit9CisKK3Vuc2lnbmVkIEdyYXBoaWNz
Q29udGV4dDNEOjpjcmVhdGVSZW5kZXJidWZmZXIoKQoreworICAgIGVuc3VyZUNvbnRleHQobV9j
b250ZXh0T2JqKTsKKyAgICBHTHVpbnQgbzsKKyAgICBnbEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwg
Jm8pOworICAgIHJldHVybiBvOworfQorCit1bnNpZ25lZCBHcmFwaGljc0NvbnRleHQzRDo6Y3Jl
YXRlU2hhZGVyKFNoYWRlclR5cGUgdHlwZSkKK3sKKyAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4
dE9iaik7CisgICAgcmV0dXJuIGdsQ3JlYXRlU2hhZGVyKCh0eXBlID09IEZSQUdNRU5UX1NIQURF
UikgPyBHTF9GUkFHTUVOVF9TSEFERVIgOiBHTF9WRVJURVhfU0hBREVSKTsKK30KKwordW5zaWdu
ZWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVRleHR1cmUoKQoreworICAgIGVuc3VyZUNvbnRl
eHQobV9jb250ZXh0T2JqKTsKKyAgICBHTHVpbnQgbzsKKyAgICBnbEdlblRleHR1cmVzKDEsICZv
KTsKKyAgICByZXR1cm4gbzsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlQnVm
ZmVyKHVuc2lnbmVkIGJ1ZmZlcikKK3sKKyAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7
CisgICAgZ2xEZWxldGVCdWZmZXJzKDEsICZidWZmZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpkZWxldGVGcmFtZWJ1ZmZlcih1bnNpZ25lZCBmcmFtZWJ1ZmZlcikKK3sKKyAgICBl
bnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CisgICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnNFWFQo
MSwgJmZyYW1lYnVmZmVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlUHJv
Z3JhbSh1bnNpZ25lZCBwcm9ncmFtKQoreworICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2Jq
KTsKKyAgICBnbERlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmRlbGV0ZVJlbmRlcmJ1ZmZlcih1bnNpZ25lZCByZW5kZXJidWZmZXIpCit7CisgICAg
ZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOworICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVyc0VY
VCgxLCAmcmVuZGVyYnVmZmVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRl
U2hhZGVyKHVuc2lnbmVkIHNoYWRlcikKK3sKKyAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9i
aik7CisgICAgZ2xEZWxldGVTaGFkZXIoc2hhZGVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6ZGVsZXRlVGV4dHVyZSh1bnNpZ25lZCB0ZXh0dXJlKQoreworICAgIGVuc3VyZUNvbnRl
eHQobV9jb250ZXh0T2JqKTsKKyAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZ0ZXh0dXJlKTsKK30K
KwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykK
</data>
<flag name="review"
          id="19443"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38460</attachid>
            <date>2009-08-23 16:32:56 -0700</date>
            <delta_ts>2009-08-24 06:40:25 -0700</delta_ts>
            <desc>Patch with remaining new files</desc>
            <filename>webgl-remaining-new-files.patch</filename>
            <type>text/plain</type>
            <size>17292</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NzY5NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTggQEAKKzIwMDktMDgtMjMgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJl
bWFpbmluZyBuZXcgZmlsZXMgZm9yIENhbnZhczNECisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODAxOAorCisgICAgICAgICogYmluZGluZ3MvanMvSlNI
VE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHA6IEFkZGVkIENhbnZhczNEIG1ldGhvZCBiZWhpbmQg
YW4gaWZkZWYKKyAgICAgICAgKiBodG1sL0NhbnZhc0J5dGVBcnJheS5jcHA6IEFkZGVkLiBFZmZp
Y2llbnQgYXJyYXkgb2YgYnl0ZXMgZm9yIHBhc3NpbmcgdG8gR0wgZnVuY3Rpb25zCisgICAgICAg
ICogaHRtbC9DYW52YXNCeXRlQXJyYXkuaDogQWRkZWQuCisgICAgICAgICogaHRtbC9DYW52YXNC
eXRlQXJyYXkuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBodG1sL0NhbnZhc051bWJlckFycmF5LmNw
cDogQWRkZWQuIEVmZmljaWVudCBhcnJheSBvZiAzMiBiaXQgZmxvYXRzIGZvciBwYXNzaW5nIHRv
IEdMIGZ1bmN0aW9ucworICAgICAgICAqIGh0bWwvQ2FudmFzTnVtYmVyQXJyYXkuaDogQWRkZWQu
CisgICAgICAgICogaHRtbC9DYW52YXNOdW1iZXJBcnJheS5pZGw6IEFkZGVkLgorCiAyMDA5LTA4
LTIzICBKb3NlcGggUGVjb3Jhcm8gIDxqb2VwZWNrQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hU
TUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiA0NzY3NSkKKysrIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjAsMTggKzIwLDM4IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJKU0hUTUxDYW52YXNFbGVtZW50LmgiCiAKICNpbmNsdWRlICJIVE1MQ2Fu
dmFzRWxlbWVudC5oIgorI2luY2x1ZGUgIkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgiCisj
aWYgRU5BQkxFKDNEX0NBTlZBUykKKyNpbmNsdWRlICJKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RC5oIgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2Ug
SlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorSlNW
YWx1ZSBKU0hUTUxDYW52YXNFbGVtZW50OjpnZXRDb250ZXh0KEpTQzo6RXhlY1N0YXRlKiBleGVj
LCBKU0M6OkFyZ0xpc3QgY29uc3QmIGFyZ3MpCit7CisgICAgSFRNTENhbnZhc0VsZW1lbnQqIGlt
cCA9IHN0YXRpY19jYXN0PEhUTUxDYW52YXNFbGVtZW50Kj4oaW1wbCgpKTsKKyAgICBjb25zdCBV
U3RyaW5nJiBjb250ZXh0SWQgPSBhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpOworCisgICAgaWYg
KGNvbnRleHRJZCA9PSAiMmQiKQorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBXVEY6OmdldFB0
cihyZWludGVycHJldF9jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCo+KGltcC0+Z2V0Q29u
dGV4dChjb250ZXh0SWQpKSkpOworICAgIGVsc2UgaWYgKGNvbnRleHRJZCA9PSAid2Via2l0LTNk
IikKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgV1RGOjpnZXRQdHIocmVpbnRlcnByZXRfY2Fz
dDxDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QqPihpbXAtPmdldENvbnRleHQoY29udGV4dElkKSkp
KTsKKyAgICAKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKK30KKyNlbmRpZgorCiB2b2lkIEpT
SFRNTENhbnZhc0VsZW1lbnQ6Om1hcmtDaGlsZHJlbihNYXJrU3RhY2smIG1hcmtTdGFjaykKIHsK
ICAgICBCYXNlOjptYXJrQ2hpbGRyZW4obWFya1N0YWNrKTsKQEAgLTQyLDQgKzYyLDQgQEAgdm9p
ZCBKU0hUTUxDYW52YXNFbGVtZW50OjptYXJrQ2hpbGRyZW4oTQogICAgIG1hcmtET01PYmplY3RX
cmFwcGVyKG1hcmtTdGFjaywgZ2xvYmFsRGF0YSwgY2FudmFzLT5yZW5kZXJpbmdDb250ZXh0MkQo
KSk7CiB9CiAKLX0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9D
YW52YXNCeXRlQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9DYW52YXNCeXRl
QXJyYXkuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9odG1sL0NhbnZhc0J5dGVBcnJheS5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBs
ZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisKKyNpbmNsdWRlICJDYW52YXNCeXRlQXJyYXku
aCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7Cisg
ICAgCitQYXNzUmVmUHRyPENhbnZhc0J5dGVBcnJheT4gQ2FudmFzQnl0ZUFycmF5OjpjcmVhdGUo
dW5zaWduZWQgbGVuZ3RoKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2FudmFzQnl0ZUFy
cmF5KGxlbmd0aCkpOworfQorCitDYW52YXNCeXRlQXJyYXk6OkNhbnZhc0J5dGVBcnJheSh1bnNp
Z25lZCBsZW5ndGgpCisgICAgOiBtX2RhdGEobGVuZ3RoKQoreworfQorCit9CisKKyNlbmRpZiAv
LyBFTkFCTEUoM0RfQ0FOVkFTKQoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9odG1sL0Nh
bnZhc0J5dGVBcnJheS5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1pbWUtdHlwZQogICArIHRl
eHQvcGxhaW4KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBXZWJDb3Jl
L2h0bWwvQ2FudmFzQnl0ZUFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0NhbnZh
c0J5dGVBcnJheS5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9odG1sL0NhbnZhc0J5dGVBcnJh
eS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBw
bGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENhbnZhc0J5
dGVBcnJheV9oCisjZGVmaW5lIENhbnZhc0J5dGVBcnJheV9oCisKKyNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorI2luY2x1ZGUgPGxpbWl0cz4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAg
Y2xhc3MgU3RyaW5nOworICAgIAorICAgIGNsYXNzIENhbnZhc0J5dGVBcnJheSA6IHB1YmxpYyBS
ZWZDb3VudGVkPENhbnZhc0J5dGVBcnJheT4geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8Q2FudmFzQnl0ZUFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKKyAg
ICAgICAgCisgICAgICAgIFZlY3Rvcjx1aW50OF90PiYgZGF0YSgpIHsgcmV0dXJuIG1fZGF0YTsg
fQorCisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5zaXpl
KCk7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIENhbnZhc0J5dGVBcnJheSh1bnNpZ25lZCBs
ZW5ndGgpOworICAgICAgICBWZWN0b3I8dWludDhfdD4gbV9kYXRhOworICAgIH07CisgICAgCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBDYW52YXNOdW1iZXJBcnJheV9oCgpQ
cm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL2h0bWwvQ2FudmFzQnl0ZUFycmF5LmgKX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpBZGRlZDogc3ZuOm1pbWUtdHlwZQogICArIHRleHQvcGxhaW4KQWRkZWQ6IHN2bjplb2wt
c3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBXZWJDb3JlL2h0bWwvQ2FudmFzQnl0ZUFycmF5Lmlk
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvQ2FudmFzQnl0ZUFycmF5LmlkbAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvaHRtbC9DYW52YXNCeXRlQXJyYXkuaWRsCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVz
IG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCittb2R1bGUgaHRtbCB7CisgICAgaW50ZXJmYWNlIFsKKyAg
ICAgICAgQ29uZGl0aW9uYWw9M0RfQ0FOVkFTLAorICAgICAgICBHZW5lcmF0ZUNvbnN0cnVjdG9y
CisgICAgXSBDYW52YXNCeXRlQXJyYXkgeworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5z
aWduZWQgbG9uZyBsZW5ndGg7CisgICAgfTsKK30KSW5kZXg6IFdlYkNvcmUvaHRtbC9DYW52YXNO
dW1iZXJBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0NhbnZhc051bWJlckFy
cmF5LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvaHRtbC9DYW52YXNOdW1iZXJBcnJheS5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBs
ZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisKKyNpbmNsdWRlICJDYW52YXNOdW1iZXJBcnJh
eS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KyAgICAKK1Bhc3NSZWZQdHI8Q2FudmFzTnVtYmVyQXJyYXk+IENhbnZhc051bWJlckFycmF5Ojpj
cmVhdGUodW5zaWduZWQgbGVuZ3RoKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2FudmFz
TnVtYmVyQXJyYXkobGVuZ3RoKSk7Cit9CisKK0NhbnZhc051bWJlckFycmF5OjpDYW52YXNOdW1i
ZXJBcnJheSh1bnNpZ25lZCBsZW5ndGgpCisgICAgOiBtX2RhdGEobGVuZ3RoKQoreworfQorCit9
CisKKyNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2Vi
Q29yZS9odG1sL0NhbnZhc051bWJlckFycmF5LmNwcApfX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWlt
ZS10eXBlCiAgICsgdGV4dC9wbGFpbgpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoK
SW5kZXg6IFdlYkNvcmUvaHRtbC9DYW52YXNOdW1iZXJBcnJheS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9DYW52YXNOdW1iZXJBcnJheS5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9o
dG1sL0NhbnZhc051bWJlckFycmF5LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgQ2FudmFzTnVtYmVyQXJyYXlfaAorI2RlZmluZSBDYW52YXNOdW1iZXJBcnJh
eV9oCisKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPGxpbWl0cz4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgU3RyaW5nOworICAgIAorICAgIGNsYXNzIENh
bnZhc051bWJlckFycmF5IDogcHVibGljIFJlZkNvdW50ZWQ8Q2FudmFzTnVtYmVyQXJyYXk+IHsK
KyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc051bWJlckFycmF5
PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxmbG9h
dD4mIGRhdGEoKSB7IHJldHVybiBtX2RhdGE7IH0KKworICAgICAgICB1bnNpZ25lZCBsZW5ndGgo
KSBjb25zdCB7IHJldHVybiBtX2RhdGEuc2l6ZSgpOyB9CisgICAgICAgIGZsb2F0IGl0ZW0odW5z
aWduZWQgaW5kZXgpIHsgcmV0dXJuIChpbmRleCA+PSBtX2RhdGEuc2l6ZSgpKSA/IDAgOiBtX2Rh
dGFbaW5kZXhdOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBDYW52YXNOdW1iZXJBcnJheSh1
bnNpZ25lZCBsZW5ndGgpOworICAgICAgICBWZWN0b3I8ZmxvYXQ+IG1fZGF0YTsKKyAgICB9Owor
ICAgIAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQ2FudmFzTnVtYmVyQXJy
YXlfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9odG1sL0NhbnZhc051bWJlckFycmF5
LmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1pbWUtdHlwZQogICArIHRleHQvcGxhaW4KQWRkZWQ6
IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBXZWJDb3JlL2h0bWwvQ2FudmFzTnVt
YmVyQXJyYXkuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9DYW52YXNOdW1iZXJBcnJh
eS5pZGwJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2h0bWwvQ2FudmFzTnVtYmVyQXJyYXkuaWRs
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4
LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUi
KSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCittb2R1bGUgaHRtbCB7CisgICAg
aW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9M0RfQ0FOVkFTLAorICAgICAgICBHZW5l
cmF0ZUNvbnN0cnVjdG9yLAorICAgICAgICBIYXNDdXN0b21JbmRleEdldHRlcgorICAgIF0gQ2Fu
dmFzTnVtYmVyQXJyYXkgeworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9u
ZyBsZW5ndGg7CisgICAgfTsKK30K
</data>
<flag name="review"
          id="19475"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38483</attachid>
            <date>2009-08-24 09:47:43 -0700</date>
            <delta_ts>2009-08-25 09:29:45 -0700</delta_ts>
            <desc>Patch to add Canvas3D files to build</desc>
            <filename>webgl-add-to-build.patch</filename>
            <type>text/plain</type>
            <size>57496</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ3NzE3KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMDktMDgtMjQgIENocmlzIE1h
cnJpbiAgPGNtYXJyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEV4cG9ydCB0cnlGYXN0TWFsbG9jIGZvciBDYW52YXMzRCB3b3Jr
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODAxOAor
CisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZXhwOgorCiAyMDA5LTA4LTI0ICBHdXN0YXZvIE5v
cm9uaGEgU2lsdmEgIDxndXN0YXZvLm5vcm9uaGFAY29sbGFib3JhLmNvLnVrPgogCiAgICAgICAg
IFVucmV2aWV3ZWQuIEZpeCBhIHR5cG8gaW4gbXkgZGlzdGNoZWNrIGJ1aWxkIGZpeC4KSW5kZXg6
IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHJldmlzaW9uIDQ3NzA3KQorKysgSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzgsNiArMjc4LDcg
QEAgX19aTjNKU0NndEVSS05TXzdVU3RyaW5nRVMyXwogX19aTjNKU0NsdEVSS05TXzdVU3RyaW5n
RVMyXwogX19aTjNXVEYxMGZhc3RDYWxsb2NFbW0KIF9fWk4zV1RGMTBmYXN0TWFsbG9jRW0KK19f
Wk4zV1RGMTN0cnlGYXN0TWFsbG9jRW0KIF9fWk4zV1RGMTFjdXJyZW50VGltZUV2CiBfX1pOM1dU
RjExZmFzdFJlYWxsb2NFUHZtCiBfX1pOM1dURjEyY3JlYXRlVGhyZWFkRVBGUHZTMF9FUzBfCklu
ZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwko
cmV2aXNpb24gNDc3MTcpCisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDQ1IEBACisyMDA5LTA4LTI0ICBDaHJpcyBNYXJyaW4gIDxjbWFycmluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRl
ZCBhbGwgbmV3IENhbnZhczNEIGZpbGVzIHRvIHRoZSBidWlsZAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgwMTgKKworICAgICAgICBUaGlzIGFsc28g
aG9va3MgdXAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCBhcyB0aGUgY29tbW9uIGJhc2UgY2xhc3Mg
Zm9yCisgICAgICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCBhbmQgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDNELiBBbmQgaXQgYWRkcyBhIGJpdAorICAgICAgICBvZiBsb2dpYyB0aHJvdWdob3V0
IHRvIHN1cHBvcnQgdGhlIG5ldyBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Qgb2JqZWN0LgorICAg
ICAgICBCdXQgbm90aGluZyBpcyBob29rZWQgdXAgeWV0LgorCisgICAgICAgICogRGVyaXZlZFNv
dXJjZXMubWFrZToKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmlzT2JzZXJ2YWJsZVRocm91Z2hET00pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRG9j
dW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNEb2N1bWVudDo6Z2V0Q1NTQ2Fu
dmFzQ29udGV4dCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxDYW52YXNFbGVtZW50OjptYXJrQ2hp
bGRyZW4pOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudDo6Z2V0Q1NTQ2FudmFzQ29udGV4dCk6CisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6
CisgICAgICAgICogZG9tL0RvY3VtZW50LmlkbDoKKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpnZXRDb250
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50Ojp3aWxsRHJhdyk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6cmVzZXQpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxD
YW52YXNFbGVtZW50OjppczNEKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50
Ojpjb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnRleHR1
cmUzRCk6CisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnJlbmRlcmluZ0NvbnRleHQpOgorICAgICAgICAqIGh0
bWwvSFRNTENhbnZhc0VsZW1lbnQuaWRsOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc09i
amVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNPYmplY3Q6On5DYW52YXNPYmplY3Qp
OgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaWRsOgorICAg
ICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OkNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRCk6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmg6
CisKIDIwMDktMDgtMjQgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgpJbmRleDogV2ViQ29yZS9EZXJp
dmVkU291cmNlcy5tYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFr
ZQkocmV2aXNpb24gNDc3MDcpCisrKyBXZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHdvcmtp
bmcgY29weSkKQEAgLTY4LDkgKzY4LDE5IEBAIERPTV9DTEFTU0VTID0gXAogICAgIENTU1ZhbHVl
TGlzdCBcCiAgICAgQ1NTVmFyaWFibGVzUnVsZSBcCiAgICAgQ1NTVmFyaWFibGVzRGVjbGFyYXRp
b24gXAorICAgIENhbnZhc0J1ZmZlciBcCisgICAgQ2FudmFzQnl0ZUFycmF5IFwKKyAgICBDYW52
YXNGcmFtZWJ1ZmZlciBcCiAgICAgQ2FudmFzR3JhZGllbnQgXAorICAgIENhbnZhc051bWJlckFy
cmF5IFwKICAgICBDYW52YXNQYXR0ZXJuIFwKKyAgICBDYW52YXNQcm9ncmFtIFwKKyAgICBDYW52
YXNSZW5kZXJidWZmZXIgXAorICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQgXAogICAgIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRCBcCisgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEIFwKKyAg
ICBDYW52YXNTaGFkZXIgXAorICAgIENhbnZhc1RleHR1cmUgXAogICAgIENoYXJhY3RlckRhdGEg
XAogICAgIENsaWVudFJlY3QgXAogICAgIENsaWVudFJlY3RMaXN0IFwKSW5kZXg6IFdlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA0NzcwNykKKysrIFdl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC03ODMsNiArNzgzLDY2IEBACiAJCTQ5ODM5MTU5MEYxRTc3NjkwMEMyMzc4MiAvKiBXZWJLaXRD
U1NNYXRyaXguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQ5ODM5MTU2MEYxRTc3NjkwMEMyMzc4MiAvKiBXZWJLaXRDU1NNYXRyaXguaCAqLzsgfTsKIAkJ
NDk4MzkxNjMwRjFFOEVFMTAwQzIzNzgyIC8qIEpTV2ViS2l0Q1NTTWF0cml4Q29uc3RydWN0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDk4Mzkx
NjEwRjFFOEVFMTAwQzIzNzgyIC8qIEpTV2ViS2l0Q1NTTWF0cml4Q29uc3RydWN0b3IuY3BwICov
OyB9OwogCQk0OTgzOTE2NDBGMUU4RUUxMDBDMjM3ODIgLyogSlNXZWJLaXRDU1NNYXRyaXhDb25z
dHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDk4MzkxNjIwRjFFOEVFMTAwQzIzNzgyIC8qIEpTV2ViS2l0Q1NTTWF0cml4Q29uc3RydWN0b3Iu
aCAqLzsgfTsKKwkJNDlDN0I5N0UxMDQyRDIwODAwMDlENDQ3IC8qIEpTQ2FudmFzTnVtYmVyQXJy
YXlDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDlDN0I5N0MxMDQyRDIwODAwMDlENDQ3IC8qIEpTQ2FudmFzTnVtYmVyQXJyYXlDdXN0b20u
Y3BwICovOyB9OworCQk0OUM3Qjk3RjEwNDJEMjA4MDAwOUQ0NDcgLyogSlNDYW52YXNSZW5kZXJp
bmdDb250ZXh0M0RDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDlDN0I5N0QxMDQyRDIwODAwMDlENDQ3IC8qIEpTQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEQ3VzdG9tLmNwcCAqLzsgfTsKKwkJNDlDN0I5OTMxMDQyRDJEMzAwMDlENDQ3IC8q
IEpTQ2FudmFzQnVmZmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ5QzdCOTgwMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc0J1ZmZlci5jcHAg
Ki87IH07CisJCTQ5QzdCOTk0MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc0J1ZmZlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5ODExMDQy
RDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzQnVmZmVyLmggKi87IH07CisJCTQ5QzdCOTk1MTA0MkQy
RDMwMDA5RDQ0NyAvKiBKU0NhbnZhc0J5dGVBcnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3Qjk4MjEwNDJEMkQzMDAwOUQ0NDcgLyogSlND
YW52YXNCeXRlQXJyYXkuY3BwICovOyB9OworCQk0OUM3Qjk5NjEwNDJEMkQzMDAwOUQ0NDcgLyog
SlNDYW52YXNCeXRlQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ5QzdCOTgzMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc0J5dGVBcnJheS5o
ICovOyB9OworCQk0OUM3Qjk5NzEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNGcmFtZWJ1ZmZl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3
Qjk4NDEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNGcmFtZWJ1ZmZlci5jcHAgKi87IH07CisJ
CTQ5QzdCOTk4MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc0ZyYW1lYnVmZmVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3Qjk4NTEwNDJEMkQz
MDAwOUQ0NDcgLyogSlNDYW52YXNGcmFtZWJ1ZmZlci5oICovOyB9OworCQk0OUM3Qjk5OTEwNDJE
MkQzMDAwOUQ0NDcgLyogSlNDYW52YXNOdW1iZXJBcnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3Qjk4NjEwNDJEMkQzMDAwOUQ0NDcgLyog
SlNDYW52YXNOdW1iZXJBcnJheS5jcHAgKi87IH07CisJCTQ5QzdCOTlBMTA0MkQyRDMwMDA5RDQ0
NyAvKiBKU0NhbnZhc051bWJlckFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0OUM3Qjk4NzEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNOdW1i
ZXJBcnJheS5oICovOyB9OworCQk0OUM3Qjk5QjEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNQ
cm9ncmFtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQ5QzdCOTg4MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1Byb2dyYW0uY3BwICovOyB9Owor
CQk0OUM3Qjk5QzEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNQcm9ncmFtLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3Qjk4OTEwNDJEMkQzMDAw
OUQ0NDcgLyogSlNDYW52YXNQcm9ncmFtLmggKi87IH07CisJCTQ5QzdCOTlEMTA0MkQyRDMwMDA5
RDQ0NyAvKiBKU0NhbnZhc1JlbmRlcmJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3Qjk4QTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52
YXNSZW5kZXJidWZmZXIuY3BwICovOyB9OworCQk0OUM3Qjk5RTEwNDJEMkQzMDAwOUQ0NDcgLyog
SlNDYW52YXNSZW5kZXJidWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQ5QzdCOThCMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1JlbmRlcmJ1
ZmZlci5oICovOyB9OworCQk0OUM3Qjk5RjEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNSZW5k
ZXJpbmdDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQ5QzdCOThDMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQuY3BwICovOyB9OworCQk0OUM3QjlBMDEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNSZW5k
ZXJpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0OUM3Qjk4RDEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0
LmggKi87IH07CisJCTQ5QzdCOUExMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQzRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDlDN0I5OEUxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
LmggKi87IH07CisJCTQ5QzdCOUEyMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1NoYWRlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3Qjk4
RjEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNTaGFkZXIuY3BwICovOyB9OworCQk0OUM3QjlB
MzEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNTaGFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOTkwMTA0MkQyRDMwMDA5RDQ0NyAvKiBK
U0NhbnZhc1NoYWRlci5oICovOyB9OworCQk0OUM3QjlBNDEwNDJEMkQzMDAwOUQ0NDcgLyogSlND
YW52YXNUZXh0dXJlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQ5QzdCOTkxMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1RleHR1cmUuY3BwICov
OyB9OworCQk0OUM3QjlBNTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNUZXh0dXJlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3Qjk5MjEwNDJE
MkQzMDAwOUQ0NDcgLyogSlNDYW52YXNUZXh0dXJlLmggKi87IH07CisJCTQ5QzdCOUM4MTA0MkQz
MkYwMDA5RDQ0NyAvKiBDYW52YXNCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5QTgxMDQyRDMyRTAwMDlENDQ3IC8qIENhbnZhc0J1
ZmZlci5jcHAgKi87IH07CisJCTQ5QzdCOUM5MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNCdWZm
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdC
OUE5MTA0MkQzMkUwMDA5RDQ0NyAvKiBDYW52YXNCdWZmZXIuaCAqLzsgfTsKKwkJNDlDN0I5Q0Ex
MDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc0J1ZmZlci5pZGwgaW4gUmVzb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOUFBMTA0MkQzMkUwMDA5RDQ0NyAvKiBD
YW52YXNCdWZmZXIuaWRsICovOyB9OworCQk0OUM3QjlDQjEwNDJEMzJGMDAwOUQ0NDcgLyogQ2Fu
dmFzQnl0ZUFycmF5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQ5QzdCOUFCMTA0MkQzMkUwMDA5RDQ0NyAvKiBDYW52YXNCeXRlQXJyYXkuY3BwICov
OyB9OworCQk0OUM3QjlDQzEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzQnl0ZUFycmF5LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3QjlBQzEwNDJE
MzJFMDAwOUQ0NDcgLyogQ2FudmFzQnl0ZUFycmF5LmggKi87IH07CisJCTQ5QzdCOUNEMTA0MkQz
MkYwMDA5RDQ0NyAvKiBDYW52YXNCeXRlQXJyYXkuaWRsIGluIFJlc291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3QjlBRDEwNDJEMzJFMDAwOUQ0NDcgLyogQ2Fu
dmFzQnl0ZUFycmF5LmlkbCAqLzsgfTsKKwkJNDlDN0I5Q0UxMDQyRDMyRjAwMDlENDQ3IC8qIENh
bnZhc0ZyYW1lYnVmZmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ5QzdCOUFFMTA0MkQzMkUwMDA5RDQ0NyAvKiBDYW52YXNGcmFtZWJ1ZmZlci5j
cHAgKi87IH07CisJCTQ5QzdCOUNGMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNGcmFtZWJ1ZmZl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5
QUYxMDQyRDMyRTAwMDlENDQ3IC8qIENhbnZhc0ZyYW1lYnVmZmVyLmggKi87IH07CisJCTQ5QzdC
OUQwMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNGcmFtZWJ1ZmZlci5pZGwgaW4gUmVzb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOUIwMTA0MkQzMkUwMDA5
RDQ0NyAvKiBDYW52YXNGcmFtZWJ1ZmZlci5pZGwgKi87IH07CisJCTQ5QzdCOUQxMTA0MkQzMkYw
MDA5RDQ0NyAvKiBDYW52YXNOdW1iZXJBcnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3QjlCMTEwNDJEMzJFMDAwOUQ0NDcgLyogQ2FudmFz
TnVtYmVyQXJyYXkuY3BwICovOyB9OworCQk0OUM3QjlEMjEwNDJEMzJGMDAwOUQ0NDcgLyogQ2Fu
dmFzTnVtYmVyQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQ5QzdCOUIyMTA0MkQzMkUwMDA5RDQ0NyAvKiBDYW52YXNOdW1iZXJBcnJheS5oICov
OyB9OworCQk0OUM3QjlEMzEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzTnVtYmVyQXJyYXkuaWRs
IGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3QjlC
MzEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzTnVtYmVyQXJyYXkuaWRsICovOyB9OworCQk0OUM3
QjlENDEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOUI0MTA0MkQzMkYwMDA5RDQ0NyAv
KiBDYW52YXNPYmplY3QuY3BwICovOyB9OworCQk0OUM3QjlENTEwNDJEMzJGMDAwOUQ0NDcgLyog
Q2FudmFzT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0OUM3QjlCNTEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzT2JqZWN0LmggKi87IH07CisJ
CTQ5QzdCOUQ2MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNQcm9ncmFtLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOUI2MTA0MkQzMkYwMDA5
RDQ0NyAvKiBDYW52YXNQcm9ncmFtLmNwcCAqLzsgfTsKKwkJNDlDN0I5RDcxMDQyRDMyRjAwMDlE
NDQ3IC8qIENhbnZhc1Byb2dyYW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQ5QzdCOUI3MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNQcm9ncmFtLmgg
Ki87IH07CisJCTQ5QzdCOUQ4MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNQcm9ncmFtLmlkbCBp
biBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5Qjgx
MDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1Byb2dyYW0uaWRsICovOyB9OworCQk0OUM3QjlEOTEw
NDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzUmVuZGVyYnVmZmVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOUI5MTA0MkQzMkYwMDA5RDQ0NyAv
KiBDYW52YXNSZW5kZXJidWZmZXIuY3BwICovOyB9OworCQk0OUM3QjlEQTEwNDJEMzJGMDAwOUQ0
NDcgLyogQ2FudmFzUmVuZGVyYnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0OUM3QjlCQTEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzUmVuZGVy
YnVmZmVyLmggKi87IH07CisJCTQ5QzdCOURCMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNSZW5k
ZXJidWZmZXIuaWRsIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0OUM3QjlCQjEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzUmVuZGVyYnVmZmVyLmlkbCAq
LzsgfTsKKwkJNDlDN0I5REMxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlD
N0I5QkMxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQuY3BwICovOyB9
OworCQk0OUM3QjlERDEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5QkQx
MDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCAqLzsgfTsKKwkJNDlD
N0I5REUxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQuaWRsIGluIFJl
c291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3QjlCRTEwNDJE
MzJGMDAwOUQ0NDcgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5pZGwgKi87IH07CisJCTQ5QzdC
OURGMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5QkYxMDQyRDMy
RjAwMDlENDQ3IC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5jcHAgKi87IH07CisJCTQ5QzdC
OUUwMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOUMwMTA0MkQzMkYw
MDA5RDQ0NyAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuaCAqLzsgfTsKKwkJNDlDN0I5RTEx
MDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5pZGwgaW4gUmVzb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOUMxMTA0MkQzMkYw
MDA5RDQ0NyAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuaWRsICovOyB9OworCQk0OUM3QjlF
MjEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzU2hhZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOUMyMTA0MkQzMkYwMDA5RDQ0NyAvKiBD
YW52YXNTaGFkZXIuY3BwICovOyB9OworCQk0OUM3QjlFMzEwNDJEMzJGMDAwOUQ0NDcgLyogQ2Fu
dmFzU2hhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0OUM3QjlDMzEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzU2hhZGVyLmggKi87IH07CisJCTQ5
QzdCOUU0MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNTaGFkZXIuaWRsIGluIFJlc291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3QjlDNDEwNDJEMzJGMDAwOUQ0
NDcgLyogQ2FudmFzU2hhZGVyLmlkbCAqLzsgfTsKKwkJNDlDN0I5RTUxMDQyRDMyRjAwMDlENDQ3
IC8qIENhbnZhc1RleHR1cmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDlDN0I5QzUxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1RleHR1cmUuY3Bw
ICovOyB9OworCQk0OUM3QjlFNjEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzVGV4dHVyZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5QzYxMDQy
RDMyRjAwMDlENDQ3IC8qIENhbnZhc1RleHR1cmUuaCAqLzsgfTsKKwkJNDlDN0I5RTcxMDQyRDMy
RjAwMDlENDQ3IC8qIENhbnZhc1RleHR1cmUuaWRsIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3QjlDNzEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFz
VGV4dHVyZS5pZGwgKi87IH07CisJCTQ5QzdCOUZDMTA0MkQzNjUwMDA5RDQ0NyAvKiBHcmFwaGlj
c0NvbnRleHQzRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDlDN0I5RkIxMDQyRDM2NTAwMDlENDQ3IC8qIEdyYXBoaWNzQ29udGV4dDNELmggKi87IH07
CisJCTQ5QzdCQTAwMTA0MkQzOEMwMDA5RDQ0NyAvKiBDYW52YXMzRExheWVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3QjlGRDEwNDJEMzhDMDAw
OUQ0NDcgLyogQ2FudmFzM0RMYXllci5oICovOyB9OworCQk0OUM3QkEwMTEwNDJEMzhDMDAwOUQ0
NDcgLyogQ2FudmFzM0RMYXllci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQ5QzdCOUZFMTA0MkQzOEMwMDA5RDQ0NyAvKiBDYW52YXMzRExheWVyLm1t
ICovOyB9OworCQk0OUM3QkEwMjEwNDJEMzhDMDAwOUQ0NDcgLyogR3JhcGhpY3NDb250ZXh0M0RN
YWMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlD
N0I5RkYxMDQyRDM4QzAwMDlENDQ3IC8qIEdyYXBoaWNzQ29udGV4dDNETWFjLmNwcCAqLzsgfTsK
KwkJNDlDN0JBNzkxMDQyRUZBRTAwMDlENDQ3IC8qIE9wZW5HTC5mcmFtZXdvcmsgaW4gRnJhbWV3
b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3QkE3ODEwNDJFRkFF
MDAwOUQ0NDcgLyogT3BlbkdMLmZyYW1ld29yayAqLzsgfTsKKwkJNDlDN0JBOEQxMDQyRjVCMTAw
MDlENDQ3IC8qIEpTRG9jdW1lbnRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0JBOEMxMDQyRjVCMTAwMDlENDQ3IC8qIEpTRG9jdW1l
bnRDdXN0b20uY3BwICovOyB9OworCQk0OUM3RDRGQjEwNDJGOTVGMDAwOUQ0NDcgLyogSlNDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDlDN0Q0RkExMDQyRjk1RjAwMDlENDQ3IC8qIEpTQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDNELmNwcCAqLzsgfTsKIAkJNDlENURDMkIwRjQyM0E3MzAwOEYyMEZEIC8qIE1h
dHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RDVEQzI3MEY0MjNBNzMwMDhGMjBGRCAvKiBNYXRyaXgzRFRy
YW5zZm9ybU9wZXJhdGlvbi5jcHAgKi87IH07CiAJCTQ5RDVEQzJDMEY0MjNBNzMwMDhGMjBGRCAv
KiBNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDlENURDMjgwRjQyM0E3MzAwOEYyMEZEIC8qIE1hdHJpeDNE
VHJhbnNmb3JtT3BlcmF0aW9uLmggKi87IH07CiAJCTQ5RDVEQzJEMEY0MjNBNzMwMDhGMjBGRCAv
KiBQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUQ1REMyOTBGNDIzQTczMDA4RjIwRkQgLyogUGVy
c3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24uY3BwICovOyB9OwpAQCAtMTk1NSw3ICsyMDE1LDYg
QEAKIAkJODVGNzRFMEEwQUE4REY4QzAwMERDMjg0IC8qIERPTUNTU1Vua25vd25SdWxlLmggaW4g
Q29weSBHZW5lcmF0ZWQgSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA4NTAzMkRENTBBQThDOUJFMDA3RDNCN0QgLyogRE9NQ1NTVW5rbm93blJ1bGUuaCAqLzsgfTsK
IAkJODVGRjMxNUEwQUFGQkZDQjAwMzc0RjM4IC8qIERPTUtleWJvYXJkRXZlbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1RkYzMTU4MEFBRkJGQ0Iw
MDM3NEYzOCAvKiBET01LZXlib2FyZEV2ZW50LmggKi87IH07CiAJCTg1RkYzMTVCMEFBRkJGQ0Iw
MDM3NEYzOCAvKiBET01LZXlib2FyZEV2ZW50Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODVGRjMxNTkwQUFGQkZDQjAwMzc0RjM4IC8qIERPTUtleWJv
YXJkRXZlbnQubW0gKi87IH07Ci0JCTkyOTI2NDc3MEI2MUZDNzIwMEI0MUQzNCAvKiBKU0RvY3Vt
ZW50Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDkyOTI2NDc2MEI2MUZDNzIwMEI0MUQzNCAvKiBKU0RvY3VtZW50Q3VzdG9tLmNwcCAqLzsg
fTsKIAkJOTMwMkIwQkQwRDc5RjgyOTAwQzdFRTgzIC8qIFBhZ2VHcm91cC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzAyQjBCQzBENzlGODI5MDBD
N0VFODMgLyogUGFnZUdyb3VwLmNwcCAqLzsgfTsKIAkJOTMwMkIwQkYwRDc5RjgyQzAwQzdFRTgz
IC8qIFBhZ2VHcm91cC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTMwMkIwQkUwRDc5RjgyQzAwQzdFRTgzIC8qIFBhZ2VHcm91cC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzMDVCMjREMDk4RjFCNkIw
MEMyODg1NSAvKiBUaW1lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTMwNUIyNEMwOThGMUI2QjAwQzI4ODU1IC8qIFRpbWVyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTU4MzUsNiArNTg5NCw2NiBA
QAogCQk0OTgzOTE1NzBGMUU3NzY5MDBDMjM3ODIgLyogV2ViS2l0Q1NTTWF0cml4LmlkbCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IHBhdGggPSBXZWJLaXRDU1NNYXRyaXguaWRsOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk0OTgzOTE2MTBGMUU4RUUxMDBDMjM3ODIgLyogSlNXZWJLaXRDU1NNYXRy
aXhDb25zdHJ1Y3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
U1dlYktpdENTU01hdHJpeENvbnN0cnVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNDk4MzkxNjIwRjFFOEVFMTAwQzIzNzgyIC8qIEpTV2ViS2l0Q1NTTWF0cml4Q29uc3Ry
dWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXZWJLaXRDU1NNYXRy
aXhDb25zdHJ1Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUM3Qjk3QzEw
NDJEMjA4MDAwOUQ0NDcgLyogSlNDYW52YXNOdW1iZXJBcnJheUN1c3RvbS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NhbnZhc051bWJlckFycmF5Q3VzdG9tLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlDN0I5N0QxMDQyRDIwODAwMDlENDQ3
IC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEQ3VzdG9tLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlDN0I5ODAxMDQyRDJEMzAwMDlENDQ3
IC8qIEpTQ2FudmFzQnVmZmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTQ2FudmFzQnVmZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlD
N0I5ODExMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzQnVmZmVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ2FudmFzQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTQ5QzdCOTgyMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc0J5dGVBcnJheS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NhbnZhc0J5dGVBcnJh
eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5QzdCOTgzMTA0MkQyRDMwMDA5
RDQ0NyAvKiBKU0NhbnZhc0J5dGVBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU0NhbnZhc0J5dGVBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0
OUM3Qjk4NDEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNGcmFtZWJ1ZmZlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NhbnZhc0ZyYW1lYnVmZmVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlDN0I5ODUxMDQyRDJEMzAwMDlENDQ3IC8q
IEpTQ2FudmFzRnJhbWVidWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNDYW52YXNGcmFtZWJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUM3
Qjk4NjEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNOdW1iZXJBcnJheS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NhbnZhc051bWJlckFycmF5LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlDN0I5ODcxMDQyRDJEMzAwMDlENDQ3IC8qIEpT
Q2FudmFzTnVtYmVyQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlND
YW52YXNOdW1iZXJBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUM3Qjk4
ODEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNQcm9ncmFtLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ2FudmFzUHJvZ3JhbS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTQ5QzdCOTg5MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1Byb2dy
YW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDYW52YXNQcm9ncmFtLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5QzdCOThBMTA0MkQyRDMwMDA5RDQ0NyAv
KiBKU0NhbnZhc1JlbmRlcmJ1ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU0NhbnZhc1JlbmRlcmJ1ZmZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTQ5QzdCOThCMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1JlbmRlcmJ1ZmZlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NhbnZhc1JlbmRlcmJ1ZmZlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUM3Qjk4QzEwNDJEMkQzMDAwOUQ0NDcg
LyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTQ5QzdCOThEMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDYW52YXNS
ZW5kZXJpbmdDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5QzdCOThF
MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUM3Qjk4RjEwNDJEMkQzMDAwOUQ0NDcgLyog
SlNDYW52YXNTaGFkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNDYW52YXNTaGFkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUM3Qjk5
MDEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNTaGFkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNDYW52YXNTaGFkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNDlDN0I5OTExMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzVGV4dHVyZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NhbnZhc1RleHR1cmUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUM3Qjk5MjEwNDJEMkQzMDAwOUQ0NDcgLyog
SlNDYW52YXNUZXh0dXJlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ2Fu
dmFzVGV4dHVyZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUM3QjlBODEwNDJE
MzJFMDAwOUQ0NDcgLyogQ2FudmFzQnVmZmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IENhbnZhc0J1ZmZlci5jcHA7IHBhdGggPSBjYW52YXMvQ2FudmFzQnVmZmVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlDN0I5QTkxMDQyRDMyRTAwMDlE
NDQ3IC8qIENhbnZhc0J1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBD
YW52YXNCdWZmZXIuaDsgcGF0aCA9IGNhbnZhcy9DYW52YXNCdWZmZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNDlDN0I5QUExMDQyRDMyRTAwMDlENDQ3IC8qIENhbnZhc0J1ZmZl
ci5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gQ2FudmFzQnVmZmVyLmlkbDsgcGF0aCA9IGNh
bnZhcy9DYW52YXNCdWZmZXIuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUM3
QjlBQjEwNDJEMzJFMDAwOUQ0NDcgLyogQ2FudmFzQnl0ZUFycmF5LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENhbnZhc0J5dGVBcnJheS5jcHA7IHBhdGggPSBjYW52
YXMvQ2FudmFzQnl0ZUFycmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlD
N0I5QUMxMDQyRDMyRTAwMDlENDQ3IC8qIENhbnZhc0J5dGVBcnJheS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBDYW52YXNCeXRlQXJyYXkuaDsgcGF0aCA9IGNhbnZhcy9DYW52
YXNCeXRlQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlDN0I5QUQxMDQy
RDMyRTAwMDlENDQ3IC8qIENhbnZhc0J5dGVBcnJheS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1l
ID0gQ2FudmFzQnl0ZUFycmF5LmlkbDsgcGF0aCA9IGNhbnZhcy9DYW52YXNCeXRlQXJyYXkuaWRs
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUM3QjlBRTEwNDJEMzJFMDAwOUQ0NDcg
LyogQ2FudmFzRnJhbWVidWZmZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gQ2FudmFzRnJhbWVidWZmZXIuY3BwOyBwYXRoID0gY2FudmFzL0NhbnZhc0ZyYW1lYnVm
ZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlDN0I5QUYxMDQyRDMyRTAw
MDlENDQ3IC8qIENhbnZhc0ZyYW1lYnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IENhbnZhc0ZyYW1lYnVmZmVyLmg7IHBhdGggPSBjYW52YXMvQ2FudmFzRnJhbWVidWZm
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlDN0I5QjAxMDQyRDMyRTAwMDlE
NDQ3IC8qIENhbnZhc0ZyYW1lYnVmZmVyLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBDYW52
YXNGcmFtZWJ1ZmZlci5pZGw7IHBhdGggPSBjYW52YXMvQ2FudmFzRnJhbWVidWZmZXIuaWRsOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUM3QjlCMTEwNDJEMzJFMDAwOUQ0NDcgLyog
Q2FudmFzTnVtYmVyQXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gQ2FudmFzTnVtYmVyQXJyYXkuY3BwOyBwYXRoID0gY2FudmFzL0NhbnZhc051bWJlckFycmF5
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlDN0I5QjIxMDQyRDMyRTAwMDlE
NDQ3IC8qIENhbnZhc051bWJlckFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IENhbnZhc051bWJlckFycmF5Lmg7IHBhdGggPSBjYW52YXMvQ2FudmFzTnVtYmVyQXJyYXku
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlDN0I5QjMxMDQyRDMyRjAwMDlENDQ3
IC8qIENhbnZhc051bWJlckFycmF5LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBDYW52YXNO
dW1iZXJBcnJheS5pZGw7IHBhdGggPSBjYW52YXMvQ2FudmFzTnVtYmVyQXJyYXkuaWRsOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUM3QjlCNDEwNDJEMzJGMDAwOUQ0NDcgLyogQ2Fu
dmFzT2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENhbnZh
c09iamVjdC5jcHA7IHBhdGggPSBjYW52YXMvQ2FudmFzT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNDlDN0I5QjUxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc09iamVj
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBDYW52YXNPYmplY3QuaDsgcGF0
aCA9IGNhbnZhcy9DYW52YXNPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NDlDN0I5QjYxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1Byb2dyYW0uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ2FudmFzUHJvZ3JhbS5jcHA7IHBhdGggPSBjYW52
YXMvQ2FudmFzUHJvZ3JhbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5QzdC
OUI3MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNQcm9ncmFtLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IENhbnZhc1Byb2dyYW0uaDsgcGF0aCA9IGNhbnZhcy9DYW52YXNQcm9n
cmFtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5QzdCOUI4MTA0MkQzMkYwMDA5
RDQ0NyAvKiBDYW52YXNQcm9ncmFtLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBDYW52YXNQ
cm9ncmFtLmlkbDsgcGF0aCA9IGNhbnZhcy9DYW52YXNQcm9ncmFtLmlkbDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNDlDN0I5QjkxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1JlbmRl
cmJ1ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDYW52YXNS
ZW5kZXJidWZmZXIuY3BwOyBwYXRoID0gY2FudmFzL0NhbnZhc1JlbmRlcmJ1ZmZlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5QzdCOUJBMTA0MkQzMkYwMDA5RDQ0NyAvKiBD
YW52YXNSZW5kZXJidWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ2Fu
dmFzUmVuZGVyYnVmZmVyLmg7IHBhdGggPSBjYW52YXMvQ2FudmFzUmVuZGVyYnVmZmVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5QzdCOUJCMTA0MkQzMkYwMDA5RDQ0NyAvKiBD
YW52YXNSZW5kZXJidWZmZXIuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IENhbnZhc1JlbmRl
cmJ1ZmZlci5pZGw7IHBhdGggPSBjYW52YXMvQ2FudmFzUmVuZGVyYnVmZmVyLmlkbDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlDN0I5QkMxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHA7IHBhdGggPSBjYW52YXMvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5QzdCOUJEMTA0
MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IENhbnZhc1JlbmRlcmluZ0NvbnRleHQuaDsgcGF0aCA9IGNhbnZh
cy9DYW52YXNSZW5kZXJpbmdDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTQ5QzdCOUJFMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0LmlkbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBDYW52YXNSZW5kZXJpbmdDb250ZXh0LmlkbDsgcGF0aCA9
IGNhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNDlDN0I5QkYxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0QuY3BwOyBwYXRoID0gY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5QzdCOUMwMTA0MkQzMkYwMDA5
RDQ0NyAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmg7IHBhdGggPSBjYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNELmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5
QzdCOUMxMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuaWRsICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgbmFtZSA9IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5pZGw7IHBhdGgg
PSBjYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmlkbDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNDlDN0I5QzIxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1NoYWRlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDYW52YXNTaGFkZXIuY3BwOyBw
YXRoID0gY2FudmFzL0NhbnZhc1NoYWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTQ5QzdCOUMzMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNTaGFkZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ2FudmFzU2hhZGVyLmg7IHBhdGggPSBjYW52YXMvQ2Fu
dmFzU2hhZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5QzdCOUM0MTA0MkQz
MkYwMDA5RDQ0NyAvKiBDYW52YXNTaGFkZXIuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IENh
bnZhc1NoYWRlci5pZGw7IHBhdGggPSBjYW52YXMvQ2FudmFzU2hhZGVyLmlkbDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlDN0I5QzUxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1Rl
eHR1cmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ2FudmFzVGV4
dHVyZS5jcHA7IHBhdGggPSBjYW52YXMvQ2FudmFzVGV4dHVyZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTQ5QzdCOUM2MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNUZXh0dXJl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IENhbnZhc1RleHR1cmUuaDsgcGF0
aCA9IGNhbnZhcy9DYW52YXNUZXh0dXJlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTQ5QzdCOUM3MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNUZXh0dXJlLmlkbCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IG5hbWUgPSBDYW52YXNUZXh0dXJlLmlkbDsgcGF0aCA9IGNhbnZhcy9DYW52YXNUZXh0
dXJlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlDN0I5RkIxMDQyRDM2NTAw
MDlENDQ3IC8qIEdyYXBoaWNzQ29udGV4dDNELmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEdyYXBoaWNzQ29udGV4dDNELmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTQ5QzdCOUZEMTA0MkQzOEMwMDA5RDQ0NyAvKiBDYW52YXMzRExheWVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbnZhczNETGF5ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNDlDN0I5RkUxMDQyRDM4QzAwMDlENDQ3IC8qIENhbnZhczNETGF5ZXIubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDYW52YXMzRExheWVyLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUM3QjlGRjEwNDJEMzhDMDAwOUQ0NDcg
LyogR3JhcGhpY3NDb250ZXh0M0RNYWMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gR3JhcGhpY3NDb250ZXh0M0RNYWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk0OUM3QkE3ODEwNDJFRkFFMDAwOUQ0NDcgLyogT3BlbkdMLmZyYW1ld29yayAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJh
bWV3b3JrOyBuYW1lID0gT3BlbkdMLmZyYW1ld29yazsgcGF0aCA9IC9TeXN0ZW0vTGlicmFyeS9G
cmFtZXdvcmtzL09wZW5HTC5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSAiPGFic29sdXRlPiI7IH07
CisJCTQ5QzdCQThDMTA0MkY1QjEwMDA5RDQ0NyAvKiBKU0RvY3VtZW50Q3VzdG9tLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRG9jdW1lbnRDdXN0b20uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUM3RDRGQTEwNDJGOTVGMDAwOUQ0NDcgLyog
SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk0OUQ1REMyNzBGNDIzQTczMDA4RjIwRkQgLyogTWF0cml4M0RUcmFu
c2Zvcm1PcGVyYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
TWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24uY3BwOyBwYXRoID0gdHJhbnNmb3Jtcy9NYXRyaXgz
RFRyYW5zZm9ybU9wZXJhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5
RDVEQzI4MEY0MjNBNzMwMDhGMjBGRCAvKiBNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlv
bi5oOyBwYXRoID0gdHJhbnNmb3Jtcy9NYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUQ1REMyOTBGNDIzQTczMDA4RjIwRkQgLyogUGVy
c3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24uY3BwOyBwYXRoID0gdHJh
bnNmb3Jtcy9QZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC02OTk2LDcgKzcxMTUsNiBAQAogCQk4NUY1NkE3OTBBOThDRTM3MDBB
REI2MEEgLyogRE9NUHJvY2Vzc2luZ0luc3RydWN0aW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IERPTVByb2Nlc3NpbmdJbnN0cnVjdGlvbi5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODVGRjMxNTgwQUFGQkZDQjAwMzc0RjM4IC8qIERPTUtl
eWJvYXJkRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTUtleWJv
YXJkRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODVGRjMxNTkwQUFGQkZD
QjAwMzc0RjM4IC8qIERPTUtleWJvYXJkRXZlbnQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gRE9NS2V5Ym9hcmRFdmVudC5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJOTI5MjY0NzYwQjYxRkM3MjAwQjQxRDM0IC8qIEpTRG9jdW1lbnRDdXN0b20u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRG9jdW1lbnRDdXN0
b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzAyQjBCQzBENzlGODI5MDBD
N0VFODMgLyogUGFnZUdyb3VwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFBhZ2VHcm91cC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMDJCMEJF
MEQ3OUY4MkMwMEM3RUU4MyAvKiBQYWdlR3JvdXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUGFnZUdyb3VwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMDVC
MjRDMDk4RjFCNkIwMEMyODg1NSAvKiBUaW1lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBUaW1lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTU5NSw2ICs5
NzEzLDcgQEAKIAkJCQlERDc2M0JCMjA5OTJDMkM5MDA3NDBCOEUgLyogbGlieG1sMi5keWxpYiBp
biBGcmFtZXdvcmtzICovLAogCQkJCUE4OEFENTJGMDk1MjRCOTIwMDFERDE5NiAvKiBRdWFydHpD
b3JlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovLAogCQkJCTFBN0ZBN0NDMEREQTRCNzcwMDI4
RjhBNSAvKiBTeXN0ZW1Db25maWd1cmF0aW9uLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovLAor
CQkJCTQ5QzdCQTc5MTA0MkVGQUUwMDA5RDQ0NyAvKiBPcGVuR0wuZnJhbWV3b3JrIGluIEZyYW1l
d29ya3MgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDA7CiAJCX07CkBAIC05NjUyLDYgKzk3NzEsNyBAQAogCQkwODY3RDY5QUZFODQwMjhGQzAyQUFD
MDcgLyogRnJhbWV3b3JrcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4g
PSAoCisJCQkJNDlDN0JBNzgxMDQyRUZBRTAwMDlENDQ3IC8qIE9wZW5HTC5mcmFtZXdvcmsgKi8s
CiAJCQkJRjVDMjg2OTMwMjg0NkRDRDAxODYzNUNBIC8qIEFwcGxpY2F0aW9uU2VydmljZXMuZnJh
bWV3b3JrICovLAogCQkJCUY1QzI4Njk0MDI4NDZEQ0QwMTg2MzVDQSAvKiBDYXJib24uZnJhbWV3
b3JrICovLAogCQkJCUY1QzI4Njk1MDI4NDZEQ0QwMTg2MzVDQSAvKiBDb2NvYS5mcmFtZXdvcmsg
Ki8sCkBAIC0xMDE4MiwyMCArMTAzMDIsNTIgQEAKIAkJNDk0ODRGQUUxMDJDRjAxRTAwMTg3REQz
IC8qIGNhbnZhcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJ
CQkJNDlDN0I5QTgxMDQyRDMyRTAwMDlENDQ3IC8qIENhbnZhc0J1ZmZlci5jcHAgKi8sCisJCQkJ
NDlDN0I5QTkxMDQyRDMyRTAwMDlENDQ3IC8qIENhbnZhc0J1ZmZlci5oICovLAorCQkJCTQ5QzdC
OUFBMTA0MkQzMkUwMDA5RDQ0NyAvKiBDYW52YXNCdWZmZXIuaWRsICovLAorCQkJCTQ5QzdCOUFC
MTA0MkQzMkUwMDA5RDQ0NyAvKiBDYW52YXNCeXRlQXJyYXkuY3BwICovLAorCQkJCTQ5QzdCOUFD
MTA0MkQzMkUwMDA5RDQ0NyAvKiBDYW52YXNCeXRlQXJyYXkuaCAqLywKKwkJCQk0OUM3QjlBRDEw
NDJEMzJFMDAwOUQ0NDcgLyogQ2FudmFzQnl0ZUFycmF5LmlkbCAqLywKKwkJCQk0OUM3QjlBRTEw
NDJEMzJFMDAwOUQ0NDcgLyogQ2FudmFzRnJhbWVidWZmZXIuY3BwICovLAorCQkJCTQ5QzdCOUFG
MTA0MkQzMkUwMDA5RDQ0NyAvKiBDYW52YXNGcmFtZWJ1ZmZlci5oICovLAorCQkJCTQ5QzdCOUIw
MTA0MkQzMkUwMDA5RDQ0NyAvKiBDYW52YXNGcmFtZWJ1ZmZlci5pZGwgKi8sCiAJCQkJNDk0ODRG
QjMxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc0dyYWRpZW50LmNwcCAqLywKIAkJCQk0OTQ4NEZC
NDEwMkNGMjNDMDAxODdERDMgLyogQ2FudmFzR3JhZGllbnQuaCAqLywKIAkJCQk0OTQ4NEZCNTEw
MkNGMjNDMDAxODdERDMgLyogQ2FudmFzR3JhZGllbnQuaWRsICovLAorCQkJCTQ5QzdCOUIxMTA0
MkQzMkUwMDA5RDQ0NyAvKiBDYW52YXNOdW1iZXJBcnJheS5jcHAgKi8sCisJCQkJNDlDN0I5QjIx
MDQyRDMyRTAwMDlENDQ3IC8qIENhbnZhc051bWJlckFycmF5LmggKi8sCisJCQkJNDlDN0I5QjMx
MDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc051bWJlckFycmF5LmlkbCAqLywKKwkJCQk0OUM3QjlC
NDEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzT2JqZWN0LmNwcCAqLywKKwkJCQk0OUM3QjlCNTEw
NDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzT2JqZWN0LmggKi8sCiAJCQkJNDk0ODRGQjYxMDJDRjIz
QzAwMTg3REQzIC8qIENhbnZhc1BhdHRlcm4uY3BwICovLAogCQkJCTQ5NDg0RkI3MTAyQ0YyM0Mw
MDE4N0REMyAvKiBDYW52YXNQYXR0ZXJuLmggKi8sCiAJCQkJNDk0ODRGQjgxMDJDRjIzQzAwMTg3
REQzIC8qIENhbnZhc1BhdHRlcm4uaWRsICovLAogCQkJCTQ5NDg0RkI5MTAyQ0YyM0MwMDE4N0RE
MyAvKiBDYW52YXNQaXhlbEFycmF5LmNwcCAqLywKIAkJCQk0OTQ4NEZCQTEwMkNGMjNDMDAxODdE
RDMgLyogQ2FudmFzUGl4ZWxBcnJheS5oICovLAogCQkJCTQ5NDg0RkJCMTAyQ0YyM0MwMDE4N0RE
MyAvKiBDYW52YXNQaXhlbEFycmF5LmlkbCAqLywKKwkJCQk0OUM3QjlCNjEwNDJEMzJGMDAwOUQ0
NDcgLyogQ2FudmFzUHJvZ3JhbS5jcHAgKi8sCisJCQkJNDlDN0I5QjcxMDQyRDMyRjAwMDlENDQ3
IC8qIENhbnZhc1Byb2dyYW0uaCAqLywKKwkJCQk0OUM3QjlCODEwNDJEMzJGMDAwOUQ0NDcgLyog
Q2FudmFzUHJvZ3JhbS5pZGwgKi8sCisJCQkJNDlDN0I5QjkxMDQyRDMyRjAwMDlENDQ3IC8qIENh
bnZhc1JlbmRlcmJ1ZmZlci5jcHAgKi8sCisJCQkJNDlDN0I5QkExMDQyRDMyRjAwMDlENDQ3IC8q
IENhbnZhc1JlbmRlcmJ1ZmZlci5oICovLAorCQkJCTQ5QzdCOUJCMTA0MkQzMkYwMDA5RDQ0NyAv
KiBDYW52YXNSZW5kZXJidWZmZXIuaWRsICovLAorCQkJCTQ5QzdCOUJDMTA0MkQzMkYwMDA5RDQ0
NyAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0LmNwcCAqLywKKwkJCQk0OUM3QjlCRDEwNDJEMzJG
MDAwOUQ0NDcgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oICovLAorCQkJCTQ5QzdCOUJFMTA0
MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0LmlkbCAqLywKIAkJCQk0OTQ4
NEZCQzEwMkNGMjNDMDAxODdERDMgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcCAqLywK
IAkJCQk0OTQ4NEZCRDEwMkNGMjNDMDAxODdERDMgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
LmggKi8sCiAJCQkJNDk0ODRGQkUxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRC5pZGwgKi8sCisJCQkJNDlDN0I5QkYxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRC5jcHAgKi8sCisJCQkJNDlDN0I5QzAxMDQyRDMyRjAwMDlENDQ3IC8q
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5oICovLAorCQkJCTQ5QzdCOUMxMTA0MkQzMkYwMDA5
RDQ0NyAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuaWRsICovLAorCQkJCTQ5QzdCOUMyMTA0
MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNTaGFkZXIuY3BwICovLAorCQkJCTQ5QzdCOUMzMTA0MkQz
MkYwMDA5RDQ0NyAvKiBDYW52YXNTaGFkZXIuaCAqLywKKwkJCQk0OUM3QjlDNDEwNDJEMzJGMDAw
OUQ0NDcgLyogQ2FudmFzU2hhZGVyLmlkbCAqLywKIAkJCQk0OTQ4NEZCRjEwMkNGMjNDMDAxODdE
RDMgLyogQ2FudmFzU3R5bGUuY3BwICovLAogCQkJCTQ5NDg0RkMwMTAyQ0YyM0MwMDE4N0REMyAv
KiBDYW52YXNTdHlsZS5oICovLAorCQkJCTQ5QzdCOUM1MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52
YXNUZXh0dXJlLmNwcCAqLywKKwkJCQk0OUM3QjlDNjEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFz
VGV4dHVyZS5oICovLAorCQkJCTQ5QzdCOUM3MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNUZXh0
dXJlLmlkbCAqLywKIAkJCSk7CiAJCQluYW1lID0gY2FudmFzOwogCQkJc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsKQEAgLTEyMjU1LDEyICsxMjQwNywzMiBAQAogCQlBODNCNzkwODBDQ0FGRjJCMDAw
QjA4MjUgLyogSFRNTCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
CisJCQkJNDlDN0I5ODAxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzQnVmZmVyLmNwcCAqLywK
KwkJCQk0OUM3Qjk4MTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNCdWZmZXIuaCAqLywKKwkJ
CQk0OUM3Qjk4MjEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNCeXRlQXJyYXkuY3BwICovLAor
CQkJCTQ5QzdCOTgzMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc0J5dGVBcnJheS5oICovLAor
CQkJCTQ5QzdCOTg0MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc0ZyYW1lYnVmZmVyLmNwcCAq
LywKKwkJCQk0OUM3Qjk4NTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNGcmFtZWJ1ZmZlci5o
ICovLAogCQkJCTY1REYzMjMzMDlEMURFNjUwMDBCRTMyNSAvKiBKU0NhbnZhc0dyYWRpZW50LmNw
cCAqLywKIAkJCQk2NURGMzIzNDA5RDFERTY1MDAwQkUzMjUgLyogSlNDYW52YXNHcmFkaWVudC5o
ICovLAorCQkJCTQ5QzdCOTg2MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc051bWJlckFycmF5
LmNwcCAqLywKKwkJCQk0OUM3Qjk4NzEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNOdW1iZXJB
cnJheS5oICovLAogCQkJCTY1REYzMjM1MDlEMURFNjUwMDBCRTMyNSAvKiBKU0NhbnZhc1BhdHRl
cm4uY3BwICovLAogCQkJCTY1REYzMjM2MDlEMURFNjUwMDBCRTMyNSAvKiBKU0NhbnZhc1BhdHRl
cm4uaCAqLywKKwkJCQk0OUM3Qjk4ODEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNQcm9ncmFt
LmNwcCAqLywKKwkJCQk0OUM3Qjk4OTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNQcm9ncmFt
LmggKi8sCisJCQkJNDlDN0I5OEExMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzUmVuZGVyYnVm
ZmVyLmNwcCAqLywKKwkJCQk0OUM3Qjk4QjEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNSZW5k
ZXJidWZmZXIuaCAqLywKKwkJCQk0OUM3Qjk4QzEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNS
ZW5kZXJpbmdDb250ZXh0LmNwcCAqLywKKwkJCQk0OUM3Qjk4RDEwNDJEMkQzMDAwOUQ0NDcgLyog
SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0LmggKi8sCiAJCQkJNjVERjMyMzcwOUQxREU2NTAwMEJF
MzI1IC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcCAqLywKIAkJCQk2NURGMzIzODA5
RDFERTY1MDAwQkUzMjUgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCAqLywKKwkJCQk0
OUM3RDRGQTEwNDJGOTVGMDAwOUQ0NDcgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuY3Bw
ICovLAorCQkJCTQ5QzdCOThFMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRC5oICovLAorCQkJCTQ5QzdCOThGMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1No
YWRlci5jcHAgKi8sCisJCQkJNDlDN0I5OTAxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzU2hh
ZGVyLmggKi8sCisJCQkJNDlDN0I5OTExMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzVGV4dHVy
ZS5jcHAgKi8sCisJCQkJNDlDN0I5OTIxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzVGV4dHVy
ZS5oICovLAogCQkJCUJDNzdEMTY1MEZGMTlGNTUwMDcwODg3QiAvKiBKU0RhdGFHcmlkQ29sdW1u
LmNwcCAqLywKIAkJCQlCQzc3RDE2NjBGRjE5RjU1MDA3MDg4N0IgLyogSlNEYXRhR3JpZENvbHVt
bi5oICovLAogCQkJCUJDNzdEMTY3MEZGMTlGNTUwMDcwODg3QiAvKiBKU0RhdGFHcmlkQ29sdW1u
TGlzdC5jcHAgKi8sCkBAIC0xMzQ1OSw2ICsxMzYzMSw4IEBACiAJCUIyNzUzNTQ5MEIwNTM4MTQw
MDJDRTY0RiAvKiBtYWMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0g
KAorCQkJCTQ5QzdCOUZEMTA0MkQzOEMwMDA5RDQ0NyAvKiBDYW52YXMzRExheWVyLmggKi8sCisJ
CQkJNDlDN0I5RkUxMDQyRDM4QzAwMDlENDQ3IC8qIENhbnZhczNETGF5ZXIubW0gKi8sCiAJCQkJ
RURFM0E0RkYwQzdBNDMwNjAwOTU2QTM3IC8qIENvbG9yTWFjLmggKi8sCiAJCQkJQjI3NTM1NEEw
QjA1MzgxNDAwMkNFNjRGIC8qIENvbG9yTWFjLm1tICovLAogCQkJCTM3MjRDQTU1MEU2OEE3RTQw
MERCNDM4NCAvKiBDb3JlVGV4dENvbnRyb2xsZXIuY3BwICovLApAQCAtMTM0NzYsNiArMTM2NTAs
NyBAQAogCQkJCUIyQUZGQzdBMEQwMEE1QzEwMDMwMDc0RCAvKiBGb250UGxhdGZvcm1EYXRhTWFj
Lm1tICovLAogCQkJCUIyQUZGQzdCMEQwMEE1QzEwMDMwMDc0RCAvKiBHbHlwaFBhZ2VUcmVlTm9k
ZU1hYy5jcHAgKi8sCiAJCQkJQjI3N0I0MDMwQjIyRjM3QzAwMDRCRUM2IC8qIEdyYXBoaWNzQ29u
dGV4dE1hYy5tbSAqLywKKwkJCQk0OUM3QjlGRjEwNDJEMzhDMDAwOUQ0NDcgLyogR3JhcGhpY3ND
b250ZXh0M0RNYWMuY3BwICovLAogCQkJCTBGNTgwQjA0MEYxMkEyNTUwMDUxRDY4OSAvKiBHcmFw
aGljc0xheWVyQ0EuaCAqLywKIAkJCQkwRjU4MEIwMzBGMTJBMjU0MDA1MUQ2ODkgLyogR3JhcGhp
Y3NMYXllckNBLm1tICovLAogCQkJCUIyNzUzNThEMEIwNTNBNjYwMDJDRTY0RiAvKiBJY29uTWFj
Lm1tICovLApAQCAtMTM1NDYsNiArMTM3MjEsNyBAQAogCQkJCUIyQTAxNTkyMEFGNkNENTMwMDZC
Q0UwRSAvKiBHcmFwaGljc0NvbnRleHQuY3BwICovLAogCQkJCUIyQTAxNTkzMEFGNkNENTMwMDZC
Q0UwRSAvKiBHcmFwaGljc0NvbnRleHQuaCAqLywKIAkJCQlBODhGRTMzMzBFNUVFRTg3MDA4RDhD
MEYgLyogR3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5oICovLAorCQkJCTQ5QzdCOUZCMTA0MkQzNjUw
MDA5RDQ0NyAvKiBHcmFwaGljc0NvbnRleHQzRC5oICovLAogCQkJCTBGNTgwQjA5MEYxMkEyNjkw
MDUxRDY4OSAvKiBHcmFwaGljc0xheWVyLmNwcCAqLywKIAkJCQkwRjU4MEIwQTBGMTJBMjY5MDA1
MUQ2ODkgLyogR3JhcGhpY3NMYXllci5oICovLAogCQkJCTBGNTgwQjBCMEYxMkEyNjkwMDUxRDY4
OSAvKiBHcmFwaGljc0xheWVyQ2xpZW50LmggKi8sCkBAIC0xMzg2Myw2ICsxNDAzOSw4IEBACiAJ
CQkJOTM5MjI2MkUxMDMyMTA4NDAwNkU3RDVEIC8qIEpTQ1NTUnVsZUxpc3RDdXN0b20uY3BwICov
LAogCQkJCUJDNTgyNUYyMEMwQjg5MzgwMDUzRjFCNSAvKiBKU0NTU1N0eWxlRGVjbGFyYXRpb25D
dXN0b20uY3BwICovLAogCQkJCUJDMjBGQjdFMEMwRThFNkMwMEQxNDQ3RiAvKiBKU0NTU1ZhbHVl
Q3VzdG9tLmNwcCAqLywKKwkJCQk0OUM3Qjk3QzEwNDJEMjA4MDAwOUQ0NDcgLyogSlNDYW52YXNO
dW1iZXJBcnJheUN1c3RvbS5jcHAgKi8sCisJCQkJNDlDN0I5N0QxMDQyRDIwODAwMDlENDQ3IC8q
IEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEQ3VzdG9tLmNwcCAqLywKIAkJCQlGRTgwRDdBMjBF
OUMxRUQyMDAwRDZGNzUgLyogSlNDdXN0b21Qb3NpdGlvbkNhbGxiYWNrLmNwcCAqLywKIAkJCQlG
RTgwRDdBMzBFOUMxRUQyMDAwRDZGNzUgLyogSlNDdXN0b21Qb3NpdGlvbkNhbGxiYWNrLmggKi8s
CiAJCQkJRkU4MEQ3QTQwRTlDMUVEMjAwMEQ2Rjc1IC8qIEpTQ3VzdG9tUG9zaXRpb25FcnJvckNh
bGxiYWNrLmNwcCAqLywKQEAgLTEzODgyLDggKzE0MDYwLDcgQEAKIAkJCQlCQzc3RDE1MTBGRjE5
QzczMDA3MDg4N0IgLyogSlNEYXRhR3JpZENvbHVtbkxpc3RDdXN0b20uY3BwICovLAogCQkJCTQx
NjJBNDUzMTAxMTQ1RTMwMERGRjNFRCAvKiBKU0RlZGljYXRlZFdvcmtlckNvbnRleHRDdXN0b20u
Y3BwICovLAogCQkJCTMzNTAzQ0JGMTAxNzlDMUEwMDNCNDdFMSAvKiBKU0Rlc2t0b3BOb3RpZmlj
YXRpb25zQ3VzdG9tLmNwcCAqLywKLQkJCQk5MjkyNjQ3NjBCNjFGQzcyMDBCNDFEMzQgLyogSlNE
b2N1bWVudEN1c3RvbS5jcHAgKi8sCi0JCQkJOTI5MjY0NzYwQjYxRkM3MjAwQjQxRDM0IC8qIEpT
RG9jdW1lbnRDdXN0b20uY3BwICovLAorCQkJCTQ5QzdCQThDMTA0MkY1QjEwMDA5RDQ0NyAvKiBK
U0RvY3VtZW50Q3VzdG9tLmNwcCAqLywKIAkJCQlCQzFERUE0RTBFMjY4RUI2MDA4M0E3M0YgLyog
SlNEb2N1bWVudEZyYWdtZW50Q3VzdG9tLmNwcCAqLywKIAkJCQlCQzFERUE0RTBFMjY4RUI2MDA4
M0E3M0YgLyogSlNEb2N1bWVudEZyYWdtZW50Q3VzdG9tLmNwcCAqLywKIAkJCQkxQUMyMjYxNjBE
QjY5Rjc0MDA4OUI2NjkgLyogSlNET01BcHBsaWNhdGlvbkNhY2hlQ3VzdG9tLmNwcCAqLywKQEAg
LTE3MzMwLDYgKzE3NTA3LDI5IEBACiAJCQkJQkNGQTkzMDgxMDMzMzE5MzAwN0IyNUQxIC8qIFJl
bmRlck92ZXJmbG93LmggaW4gSGVhZGVycyAqLywKIAkJCQkwMDE0NjI4QjEwM0NEMURFMDAwQjIw
REIgLyogT3JpZ2luQWNjZXNzRW50cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCUI1MUJGNkYxMTAy
QzlFNTkwMDAyQzE1QSAvKiBTUUxUcmFuc2FjdGlvbkNsaWVudC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNDlDN0I5OTQxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzQnVmZmVyLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk0OUM3Qjk5NjEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNCeXRlQXJyYXku
aCBpbiBIZWFkZXJzICovLAorCQkJCTQ5QzdCOTk4MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZh
c0ZyYW1lYnVmZmVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk0OUM3Qjk5QTEwNDJEMkQzMDAwOUQ0
NDcgLyogSlNDYW52YXNOdW1iZXJBcnJheS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDlDN0I5OUMx
MDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzUHJvZ3JhbS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NDlDN0I5OUUxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzUmVuZGVyYnVmZmVyLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk0OUM3QjlBMDEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNSZW5kZXJp
bmdDb250ZXh0LmggaW4gSGVhZGVycyAqLywKKwkJCQk0OUM3QjlBMTEwNDJEMkQzMDAwOUQ0NDcg
LyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ5QzdC
OUEzMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1NoYWRlci5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNDlDN0I5QTUxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzVGV4dHVyZS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNDlDN0I5QzkxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc0J1ZmZlci5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJNDlDN0I5Q0MxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc0J5dGVB
cnJheS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDlDN0I5Q0YxMDQyRDMyRjAwMDlENDQ3IC8qIENh
bnZhc0ZyYW1lYnVmZmVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk0OUM3QjlEMjEwNDJEMzJGMDAw
OUQ0NDcgLyogQ2FudmFzTnVtYmVyQXJyYXkuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ5QzdCOUQ1
MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNPYmplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ5
QzdCOUQ3MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNQcm9ncmFtLmggaW4gSGVhZGVycyAqLywK
KwkJCQk0OUM3QjlEQTEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzUmVuZGVyYnVmZmVyLmggaW4g
SGVhZGVycyAqLywKKwkJCQk0OUM3QjlERDEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzUmVuZGVy
aW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDlDN0I5RTAxMDQyRDMyRjAwMDlENDQ3
IC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDlDN0I5
RTMxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1NoYWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NDlDN0I5RTYxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1RleHR1cmUuaCBpbiBIZWFkZXJzICov
LAorCQkJCTQ5QzdCOUZDMTA0MkQzNjUwMDA5RDQ0NyAvKiBHcmFwaGljc0NvbnRleHQzRC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJNDlDN0JBMDAxMDQyRDM4QzAwMDlENDQ3IC8qIENhbnZhczNETGF5
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHBy
b2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMTc0MzUsNiArMTc2MzUsMTYgQEAKIAkJCQk0OTQ4NEZD
NjEwMkNGMjNDMDAxODdERDMgLyogQ2FudmFzUGF0dGVybi5pZGwgaW4gUmVzb3VyY2VzICovLAog
CQkJCTQ5NDg0RkM5MTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNQaXhlbEFycmF5LmlkbCBpbiBS
ZXNvdXJjZXMgKi8sCiAJCQkJNDk0ODRGQ0MxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRC5pZGwgaW4gUmVzb3VyY2VzICovLAorCQkJCTQ5QzdCOUNBMTA0MkQzMkYw
MDA5RDQ0NyAvKiBDYW52YXNCdWZmZXIuaWRsIGluIFJlc291cmNlcyAqLywKKwkJCQk0OUM3QjlD
RDEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzQnl0ZUFycmF5LmlkbCBpbiBSZXNvdXJjZXMgKi8s
CisJCQkJNDlDN0I5RDAxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc0ZyYW1lYnVmZmVyLmlkbCBp
biBSZXNvdXJjZXMgKi8sCisJCQkJNDlDN0I5RDMxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc051
bWJlckFycmF5LmlkbCBpbiBSZXNvdXJjZXMgKi8sCisJCQkJNDlDN0I5RDgxMDQyRDMyRjAwMDlE
NDQ3IC8qIENhbnZhc1Byb2dyYW0uaWRsIGluIFJlc291cmNlcyAqLywKKwkJCQk0OUM3QjlEQjEw
NDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzUmVuZGVyYnVmZmVyLmlkbCBpbiBSZXNvdXJjZXMgKi8s
CisJCQkJNDlDN0I5REUxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQu
aWRsIGluIFJlc291cmNlcyAqLywKKwkJCQk0OUM3QjlFMTEwNDJEMzJGMDAwOUQ0NDcgLyogQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNELmlkbCBpbiBSZXNvdXJjZXMgKi8sCisJCQkJNDlDN0I5RTQx
MDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1NoYWRlci5pZGwgaW4gUmVzb3VyY2VzICovLAorCQkJ
CTQ5QzdCOUU3MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNUZXh0dXJlLmlkbCBpbiBSZXNvdXJj
ZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7
CiAJCX07CkBAIC0xODM0OSw3ICsxODU1OSw2IEBACiAJCQkJNDE2MkE0NTQxMDExNDVFMzAwREZG
M0VEIC8qIEpTRGVkaWNhdGVkV29ya2VyQ29udGV4dEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkzMzUwM0NDMDEwMTc5QzFBMDAzQjQ3RTEgLyogSlNEZXNrdG9wTm90aWZpY2F0aW9uc0N1
c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2NTlEREM4MjA5RTE5OEJBMDAxQkYzQzYgLyog
SlNEb2N1bWVudC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk5MjkyNjQ3NzBCNjFGQzcyMDBCNDFE
MzQgLyogSlNEb2N1bWVudEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTQ5NEVERTBB
MTIzRjRDMDBGREFGQzEgLyogSlNEb2N1bWVudEZyYWdtZW50LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUJDMURFQTRGMEUyNjhFQjYwMDgzQTczRiAvKiBKU0RvY3VtZW50RnJhZ21lbnRDdXN0b20u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjVERjMxRjUwOUQxQ0M2MDAwMEJFMzI1IC8qIEpTRG9j
dW1lbnRUeXBlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTkzOTgsNiArMTk2MDcsMzIgQEAKIAkJ
CQlCNUMxMTIzQjEwMkI2QzQ2MDAwOTY1NzggLyogU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwMDE0NjI4QTEwM0NEMURFMDAwQjIwREIgLyogT3JpZ2lu
QWNjZXNzRW50cnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjUxQkY2RjAxMDJDOUU1OTAwMDJD
MTVBIC8qIFNRTFRyYW5zYWN0aW9uQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQ5QzdC
OTdFMTA0MkQyMDgwMDA5RDQ0NyAvKiBKU0NhbnZhc051bWJlckFycmF5Q3VzdG9tLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTQ5QzdCOTdGMTA0MkQyMDgwMDA5RDQ0NyAvKiBKU0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQzREN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0OUM3Qjk5MzEwNDJE
MkQzMDAwOUQ0NDcgLyogSlNDYW52YXNCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDlD
N0I5OTUxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzQnl0ZUFycmF5LmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTQ5QzdCOTk3MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc0ZyYW1lYnVmZmVy
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQ5QzdCOTk5MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0Nh
bnZhc051bWJlckFycmF5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQ5QzdCOTlCMTA0MkQyRDMw
MDA5RDQ0NyAvKiBKU0NhbnZhc1Byb2dyYW0uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDlDN0I5
OUQxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzUmVuZGVyYnVmZmVyLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTQ5QzdCOTlGMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDlDN0I5QTIxMDQyRDJEMzAwMDlENDQ3IC8q
IEpTQ2FudmFzU2hhZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQ5QzdCOUE0MTA0MkQyRDMw
MDA5RDQ0NyAvKiBKU0NhbnZhc1RleHR1cmUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDlDN0I5
QzgxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc0J1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQk0OUM3QjlDQjEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzQnl0ZUFycmF5LmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTQ5QzdCOUNFMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNGcmFtZWJ1ZmZl
ci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0OUM3QjlEMTEwNDJEMzJGMDAwOUQ0NDcgLyogQ2Fu
dmFzTnVtYmVyQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDlDN0I5RDQxMDQyRDMyRjAw
MDlENDQ3IC8qIENhbnZhc09iamVjdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0OUM3QjlENjEw
NDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzUHJvZ3JhbS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0
OUM3QjlEOTEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzUmVuZGVyYnVmZmVyLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTQ5QzdCOURDMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNSZW5kZXJpbmdD
b250ZXh0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQ5QzdCOURGMTA0MkQzMkYwMDA5RDQ0NyAv
KiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDlDN0I5
RTIxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1NoYWRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQk0OUM3QjlFNTEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzVGV4dHVyZS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQk0OUM3QkEwMTEwNDJEMzhDMDAwOUQ0NDcgLyogQ2FudmFzM0RMYXllci5tbSBp
biBTb3VyY2VzICovLAorCQkJCTQ5QzdCQTAyMTA0MkQzOEMwMDA5RDQ0NyAvKiBHcmFwaGljc0Nv
bnRleHQzRE1hYy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0OUM3QkE4RDEwNDJGNUIxMDAwOUQ0
NDcgLyogSlNEb2N1bWVudEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0OUM3RDRGQjEw
NDJGOTVGMDAwOUQ0NDcgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7
CiAJCX07CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCShyZXZpc2lvbiA0
NzcwNykKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjk4LDcgKzI5OCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc09ic2VydmFibGVU
aHJvdWdoRE8KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBp
ZiAoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpLT5oYXNUYWdOYW1lKGNhbnZhc1RhZykpIHsK
LSAgICAgICAgICAgICAgICBpZiAoQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBjb250ZXh0ID0g
c3RhdGljX2Nhc3Q8SFRNTENhbnZhc0VsZW1lbnQqPihub2RlKS0+cmVuZGVyaW5nQ29udGV4dDJE
KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4
dCA9IHN0YXRpY19jYXN0PEhUTUxDYW52YXNFbGVtZW50Kj4obm9kZSktPnJlbmRlcmluZ0NvbnRl
eHQoKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoRE9NT2JqZWN0KiB3cmFwcGVyID0gZ2V0
Q2FjaGVkRE9NT2JqZWN0V3JhcHBlcigqanNOb2RlLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0
YSgpLCBjb250ZXh0KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdyYXBwZXItPmhh
c0N1c3RvbVByb3BlcnRpZXMoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAkocmV2
aXNpb24gNDc3MDcpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCwxMCBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAj
aW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKKyNpbmNs
dWRlICJKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIgorI2lmIEVOQUJMRSgzRF9DQU5WQVMp
CisjaW5jbHVkZSAiSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuaCIKKyNlbmRpZgogI2luY2x1
ZGUgIkpTRE9NV2luZG93Q3VzdG9tLmgiCiAjaW5jbHVkZSAiSlNIVE1MRG9jdW1lbnQuaCIKICNp
bmNsdWRlICJKU0xvY2F0aW9uLmgiCkBAIC0zNSw2ICszOSw4IEBACiAjaW5jbHVkZSAiU1ZHRG9j
dW1lbnQuaCIKICNlbmRpZgogCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorCiB1c2luZyBuYW1l
c3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xMTYsNCArMTIyLDIzIEBAIEpT
VmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmEKICAgICByZXR1cm4gd3JhcHBl
cjsKIH0KIAorSlNWYWx1ZSBKU0RvY3VtZW50OjpnZXRDU1NDYW52YXNDb250ZXh0KEpTQzo6RXhl
Y1N0YXRlKiBleGVjLCBKU0M6OkFyZ0xpc3QgY29uc3QmIGFyZ3MpCit7CisgICAgY29uc3QgVVN0
cmluZyYgY29udGV4dElkID0gYXJncy5hdCgwKS50b1N0cmluZyhleGVjKTsKKyAgICBjb25zdCBV
U3RyaW5nJiBuYW1lID0gYXJncy5hdCgxKS50b1N0cmluZyhleGVjKTsKKyAgICBpbnQgd2lkdGgg
PSBhcmdzLmF0KDIpLnRvSW50MzIoZXhlYyk7CisgICAgaW50IGhlaWdodCA9IGFyZ3MuYXQoMyku
dG9JbnQzMihleGVjKTsKKworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNVbmRlZmluZWQoKTsKKyAg
ICAKKyAgICBpZiAoY29udGV4dElkID09ICIyZCIpCisgICAgICAgIHJlc3VsdCA9IHRvSlMoZXhl
YywgV1RGOjpnZXRQdHIocmVpbnRlcnByZXRfY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQq
PihpbXBsKCktPmdldENTU0NhbnZhc0NvbnRleHQoY29udGV4dElkLCBuYW1lLCB3aWR0aCwgaGVp
Z2h0KSkpKTsKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorICAgIGVsc2UgaWYgKGNvbnRleHRJZCA9
PSAid2Via2l0LTNkIikKKyAgICAgICAgcmVzdWx0ID0gdG9KUyhleGVjLCBXVEY6OmdldFB0cihy
ZWludGVycHJldF9jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCo+KGltcGwoKS0+Z2V0Q1NT
Q2FudmFzQ29udGV4dChjb250ZXh0SWQsIG5hbWUsIHdpZHRoLCBoZWlnaHQpKSkpOworI2VuZGlm
CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0
b20uY3BwCShyZXZpc2lvbiA0NzcwOCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ2Fu
dmFzRWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgdm9p
ZCBKU0hUTUxDYW52YXNFbGVtZW50OjptYXJrQ2hpbGRyZW4oTQogICAgIEhUTUxDYW52YXNFbGVt
ZW50KiBjYW52YXMgPSBzdGF0aWNfY2FzdDxIVE1MQ2FudmFzRWxlbWVudCo+KGltcGwoKSk7CiAg
ICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gKkhlYXA6OmhlYXAodGhpcyktPmdsb2JhbERh
dGEoKTsKIAotICAgIG1hcmtET01PYmplY3RXcmFwcGVyKG1hcmtTdGFjaywgZ2xvYmFsRGF0YSwg
Y2FudmFzLT5yZW5kZXJpbmdDb250ZXh0MkQoKSk7CisgICAgbWFya0RPTU9iamVjdFdyYXBwZXIo
bWFya1N0YWNrLCBnbG9iYWxEYXRhLCBjYW52YXMtPnJlbmRlcmluZ0NvbnRleHQoKSk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDQ3NzA3KQor
KysgV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzMyLDcgKzQz
MzIsNyBAQCB2b2lkIERvY3VtZW50OjpkZXRhY2hSYW5nZShSYW5nZSogcmFuZ2UpCiAgICAgbV9y
YW5nZXMucmVtb3ZlKHJhbmdlKTsKIH0KIAotQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBEb2N1
bWVudDo6Z2V0Q1NTQ2FudmFzQ29udGV4dChjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQorQ2FudmFzUmVuZGVyaW5nQ29udGV4dCog
RG9jdW1lbnQ6OmdldENTU0NhbnZhc0NvbnRleHQoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBT
dHJpbmcmIG5hbWUsIGludCB3aWR0aCwgaW50IGhlaWdodCkKIHsKICAgICBIVE1MQ2FudmFzRWxl
bWVudCogcmVzdWx0ID0gZ2V0Q1NTQ2FudmFzRWxlbWVudChuYW1lKTsKICAgICBpZiAoIXJlc3Vs
dCkKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9k
b20vRG9jdW1lbnQuaAkocmV2aXNpb24gNDc3MDcpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICBjbGFzcyBDREFUQVNlY3Rpb247CiAgICAgY2xhc3MgQ2FjaGVkQ1NTU3R5bGVTaGVldDsKICAg
ICBjbGFzcyBDYWNoZWRTY3JpcHQ7Ci0gICAgY2xhc3MgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OworICAgIGNsYXNzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQ7CiAgICAgY2xhc3MgQ2hhcmFjdGVy
RGF0YTsKICAgICBjbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9uOwogICAgIGNsYXNzIENTU1N0eWxl
U2VsZWN0b3I7CkBAIC03NTksNyArNzU5LDcgQEAgcHVibGljOgogICAgIERPTVNlbGVjdGlvbiog
Z2V0U2VsZWN0aW9uKCkgY29uc3Q7CiAgICAgCiAgICAgLy8gRXh0ZW5zaW9uIGZvciBtYW5pcHVs
YXRpbmcgY2FudmFzIGRyYXdpbmcgY29udGV4dHMgZm9yIHVzZSBpbiBDU1MKLSAgICBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQqIGdldENTU0NhbnZhc0NvbnRleHQoY29uc3QgU3RyaW5nJiB0eXBl
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGludCB3aWR0aCwgaW50IGhlaWdodCk7CisgICAgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dCogZ2V0Q1NTQ2FudmFzQ29udGV4dChjb25zdCBTdHJpbmcmIHR5cGUs
IGNvbnN0IFN0cmluZyYgbmFtZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKICAgICBIVE1MQ2Fu
dmFzRWxlbWVudCogZ2V0Q1NTQ2FudmFzRWxlbWVudChjb25zdCBTdHJpbmcmIG5hbWUpOwogCiAg
ICAgYm9vbCBpc0ROU1ByZWZldGNoRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNETlNQcmVm
ZXRjaEVuYWJsZWQ7IH0KSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmlkbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5pZGwJKHJldmlzaW9uIDQ3NzA3KQorKysgV2ViQ29y
ZS9kb20vRG9jdW1lbnQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yMjYsNyArMjI2LDcgQEAgbW9k
dWxlIGNvcmUgewogCiAjaWYgIWRlZmluZWQoTEFOR1VBR0VfQ09NKSB8fCAhTEFOR1VBR0VfQ09N
CiAjaWYgIWRlZmluZWQoTEFOR1VBR0VfT0JKRUNUSVZFX0MpIHx8ICFMQU5HVUFHRV9PQkpFQ1RJ
VkVfQwotICAgICAgICBbVjhDdXN0b21dIERPTU9iamVjdCBnZXRDU1NDYW52YXNDb250ZXh0KGlu
IERPTVN0cmluZyBjb250ZXh0SWQsIGluIERPTVN0cmluZyBuYW1lLCBpbiBsb25nIHdpZHRoLCBp
biBsb25nIGhlaWdodCk7CisgICAgICAgIFtDdXN0b21dIERPTU9iamVjdCBnZXRDU1NDYW52YXND
b250ZXh0KGluIERPTVN0cmluZyBjb250ZXh0SWQsIGluIERPTVN0cmluZyBuYW1lLCBpbiBsb25n
IHdpZHRoLCBpbiBsb25nIGhlaWdodCk7CiAjZW5kaWYKICNlbmRpZgogCkluZGV4OiBXZWJDb3Jl
L2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9I
VE1MQ2FudmFzRWxlbWVudC5jcHAJKHJldmlzaW9uIDQ3NzA3KQorKysgV2ViQ29yZS9odG1sL0hU
TUxDYW52YXNFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2lu
Y2x1ZGUgIkNhbnZhc0dyYWRpZW50LmgiCiAjaW5jbHVkZSAiQ2FudmFzUGF0dGVybi5oIgogI2lu
Y2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIgorI2luY2x1ZGUgIkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkNhbnZhc1N0eWxlLmgiCiAjaW5jbHVkZSAiQ2hy
b21lLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKQEAgLTE0NywxNiArMTQ4LDMxIEBAIFN0cmlu
ZyBIVE1MQ2FudmFzRWxlbWVudDo6dG9EYXRhVVJMKGNvbnMKIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQqIEhUTUxDYW52YXNFbGVtZW50OjpnZXRDb250ZXh0KGNvbnN0IFN0cmluZyYgdHlwZSkKIHsK
ICAgICBpZiAodHlwZSA9PSAiMmQiKSB7Ci0gICAgICAgIGlmICghbV8yRENvbnRleHQpCi0gICAg
ICAgICAgICBtXzJEQ29udGV4dC5zZXQobmV3IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCh0aGlz
KSk7Ci0gICAgICAgIHJldHVybiBtXzJEQ29udGV4dC5nZXQoKTsKKyAgICAgICAgaWYgKG1fY29u
dGV4dCAmJiAhbV9jb250ZXh0LT5pczJkKCkpCisgICAgICAgICAgICBtX2NvbnRleHQuY2xlYXIo
KTsKKyAgICAgICAgICAgIGlmICghbV9jb250ZXh0KQorICAgICAgICAgICAgICAgIG1fY29udGV4
dC5zZXQobmV3IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCh0aGlzKSk7CiAgICAgfQotICAgIHJl
dHVybiAwOworI2lmIEVOQUJMRSgzRF9DQU5WQVMpICAgIAorICAgIGVsc2UgaWYgKHR5cGUgPT0g
IndlYmtpdC0zZCIpIHsKKyAgICAgICAgaWYgKG1fY29udGV4dCAmJiAhbV9jb250ZXh0LT5pczNk
KCkpCisgICAgICAgICAgICBtX2NvbnRleHQuY2xlYXIoKTsKKyAgICAgICAgaWYgKCFtX2NvbnRl
eHQpIHsKKyAgICAgICAgICAgIG1fY29udGV4dC5zZXQobmV3IENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRCh0aGlzKSk7CisgICAgICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAg
IH0KKyAgICB9CisjZW5kaWYKKyAgICBlbHNlIGlmIChtX2NvbnRleHQuZ2V0KCkpCisgICAgICAg
IG1fY29udGV4dC5jbGVhcigpOworICAgIAorICAgIHJldHVybiBtX2NvbnRleHQuZ2V0KCk7CiB9
CiAKIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OndpbGxEcmF3KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKIHsKLSAgICBtX2ltYWdlQnVmZmVyLT5jbGVhckltYWdlKCk7CisgICAgaWYgKG1faW1hZ2VC
dWZmZXIpCisgICAgICAgIG1faW1hZ2VCdWZmZXItPmNsZWFySW1hZ2UoKTsKICAgICAKICAgICBp
ZiAoUmVuZGVyQm94KiBybyA9IHJlbmRlckJveCgpKSB7CiAgICAgICAgIEZsb2F0UmVjdCBkZXN0
UmVjdCA9IHJvLT5jb250ZW50Qm94UmVjdCgpOwpAQCAtMTkyLDggKzIwOCw4IEBAIHZvaWQgSFRN
TENhbnZhc0VsZW1lbnQ6OnJlc2V0KCkKICAgICBib29sIGhhZEltYWdlQnVmZmVyID0gbV9jcmVh
dGVkSW1hZ2VCdWZmZXI7CiAgICAgbV9jcmVhdGVkSW1hZ2VCdWZmZXIgPSBmYWxzZTsKICAgICBt
X2ltYWdlQnVmZmVyLmNsZWFyKCk7Ci0gICAgaWYgKG1fMkRDb250ZXh0KQotICAgICAgICBtXzJE
Q29udGV4dC0+cmVzZXQoKTsKKyAgICBpZiAobV9jb250ZXh0ICYmIG1fY29udGV4dC0+aXMyZCgp
KQorICAgICAgICBzdGF0aWNfY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqPihtX2NvbnRl
eHQuZ2V0KCkpLT5yZXNldCgpOwogCiAgICAgaWYgKFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSB0
aGlzLT5yZW5kZXJlcigpKSB7CiAgICAgICAgIGlmIChtX3JlbmRlcmVySXNDYW52YXMpIHsKQEAg
LTIyMSw2ICsyMzcsMTEgQEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6cGFpbnQoR3JhcGhpY3ND
bwogICAgICAgICBpZiAoaW1hZ2UpCiAgICAgICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2UoaW1h
Z2UsIHIpOwogICAgIH0KKyAgICAKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKSAgICAKKyAgICBpZiAo
bV9jb250ZXh0ICYmIG1fY29udGV4dC0+aXMzZCgpKQorICAgICAgICBzdGF0aWNfY2FzdDxDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0QqPihtX2NvbnRleHQuZ2V0KCkpLT5yZXNoYXBlKHIud2lkdGgo
KSwgci5oZWlnaHQoKSk7CisjZW5kaWYKIH0KIAogSW50UmVjdCBIVE1MQ2FudmFzRWxlbWVudDo6
Y29udmVydExvZ2ljYWxUb0RldmljZShjb25zdCBGbG9hdFJlY3QmIGxvZ2ljYWxSZWN0KSBjb25z
dApAQCAtMjkzLDQgKzMxNCwyOCBAQCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBIVE1MQ2FudmFzRWxl
bWVudDo6CiAgICAgcmV0dXJuIHRyYW5zZm9ybTsKIH0KIAorI2lmIEVOQUJMRSgzRF9DQU5WQVMp
ICAgIAorYm9vbCBIVE1MQ2FudmFzRWxlbWVudDo6aXMzRCgpIGNvbnN0Cit7CisgICAgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dCogY3R4ID0gbV9jb250ZXh0LmdldCgpOworICAgIHJldHVybiBjdHgg
JiYgIWN0eC0+aXMyZCgpOworfQorCitQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIEhUTUxDYW52
YXNFbGVtZW50Ojpjb250ZXh0M0QoKSBjb25zdAoreworICAgIGlmIChtX2NvbnRleHQgJiYgbV9j
b250ZXh0LT5pczNkKCkpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYW52YXNSZW5kZXJp
bmdDb250ZXh0M0QqPihtX2NvbnRleHQuZ2V0KCkpLT5jb250ZXh0M0QoKTsKKyAgICBlbHNlCisg
ICAgICAgIHJldHVybiAwOworfQorCitQbGF0Zm9ybTNET2JqZWN0IEhUTUxDYW52YXNFbGVtZW50
Ojp0ZXh0dXJlM0QoKSBjb25zdAoreworICAgIGlmIChtX2NvbnRleHQgJiYgbV9jb250ZXh0LT5p
czNkKCkpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0
M0QqPihtX2NvbnRleHQuZ2V0KCkpLT50ZXh0dXJlM0QoKTsKKyAgICBlbHNlCisgICAgICAgIHJl
dHVybiAwOworfQorI2VuZGlmCisKIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCShy
ZXZpc2lvbiA0NzcwNykKKysrIFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCwxMSArMzAsMTQgQEAKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1h
dHJpeC5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50Lmgi
CisjaWYgRU5BQkxFKDNEX0NBTlZBUykgICAgCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0Qu
aCIKKyNlbmRpZgogI2luY2x1ZGUgIkludFNpemUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1jbGFzcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7CitjbGFzcyBDYW52YXNSZW5kZXJpbmdD
b250ZXh0OwogY2xhc3MgRmxvYXRQb2ludDsKIGNsYXNzIEZsb2F0UmVjdDsKIGNsYXNzIEZsb2F0
U2l6ZTsKQEAgLTQ0LDggKzQ3LDYgQEAgY2xhc3MgSW1hZ2VCdWZmZXI7CiBjbGFzcyBJbnRQb2lu
dDsKIGNsYXNzIEludFNpemU7CiAKLXR5cGVkZWYgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQ7Ci0KIGNsYXNzIENhbnZhc09ic2VydmVyIHsKIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIH5DYW52YXNPYnNlcnZlcigpIHsgfQpAQCAtMTAwLDcgKzEwMSwxMyBAQCBw
dWJsaWM6CiAKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBiYXNlVHJhbnNmb3JtKCkgY29uc3Q7
CiAKLSAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIHJlbmRlcmluZ0NvbnRleHQyRCgpIHsg
cmV0dXJuIG1fMkRDb250ZXh0LmdldCgpOyB9CisgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCog
cmVuZGVyaW5nQ29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsgfQorCisjaWYgRU5B
QkxFKDNEX0NBTlZBUykgICAgCisgICAgYm9vbCBpczNEKCkgY29uc3Q7CisgICAgUGxhdGZvcm1H
cmFwaGljc0NvbnRleHQzRCBjb250ZXh0M0QoKSBjb25zdDsKKyAgICBQbGF0Zm9ybTNET2JqZWN0
IHRleHR1cmUzRCgpIGNvbnN0OworI2VuZGlmCiAKIHByaXZhdGU6CiAjaWYgRU5BQkxFKERBU0hC
T0FSRF9TVVBQT1JUKQpAQCAtMTE4LDcgKzEyNSw3IEBAIHByaXZhdGU6CiAKICAgICBib29sIG1f
cmVuZGVyZXJJc0NhbnZhczsKIAotICAgIE93blB0cjxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+
IG1fMkRDb250ZXh0OworICAgIE93blB0cjxDYW52YXNSZW5kZXJpbmdDb250ZXh0PiBtX2NvbnRl
eHQ7CiAgICAgSW50U2l6ZSBtX3NpemU7ICAgIAogICAgIENhbnZhc09ic2VydmVyKiBtX29ic2Vy
dmVyOwogCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaWRsCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5pZGwJKHJldmlzaW9uIDQ3NzA3
KQorKysgV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmlkbAkod29ya2luZyBjb3B5KQpA
QCAtMzksNyArMzksNyBAQCBtb2R1bGUgaHRtbCB7CiAgICAgICAgICAgICByYWlzZXMoRE9NRXhj
ZXB0aW9uKTsKIAogI2lmICFkZWZpbmVkKExBTkdVQUdFX09CSkVDVElWRV9DKSB8fCAhTEFOR1VB
R0VfT0JKRUNUSVZFX0MKLSAgICAgICAgW1Y4Q3VzdG9tXSBET01PYmplY3QgZ2V0Q29udGV4dChp
biBET01TdHJpbmcgY29udGV4dElkKTsKKyAgICAgICAgW0N1c3RvbV0gRE9NT2JqZWN0IGdldENv
bnRleHQoaW4gRE9NU3RyaW5nIGNvbnRleHRJZCk7CiAjZW5kaWYKIAogICAgIH07CkluZGV4OiBX
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNPYmplY3QuY3BwCShyZXZpc2lvbiA0NzcwNykKKysrIFdlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsOCAr
NDAsNiBAQCBDYW52YXNPYmplY3Q6OkNhbnZhc09iamVjdChHcmFwaGljc0NvbnRlCiAKIENhbnZh
c09iamVjdDo6fkNhbnZhc09iamVjdCgpCiB7Ci0gICAgaWYgKG1fY29udGV4dCkKLSAgICAgICAg
bV9jb250ZXh0LT5yZW1vdmVPYmplY3QodGhpcyk7CiB9CiAKIHZvaWQgQ2FudmFzT2JqZWN0Ojpz
ZXRPYmplY3QoUGxhdGZvcm0zRE9iamVjdCBvYmplY3QpCkluZGV4OiBXZWJDb3JlL2h0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShyZXZpc2lvbiA0NzcwNykK
KysrIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTQsNyArOTQsNyBAQCBwcml2YXRlOgogCiAKIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKEhUTUxDYW52YXNFbGVtZW50KiBj
YW52YXMpCi0gICAgOiBtX2NhbnZhcyhjYW52YXMpCisgICAgOiBDYW52YXNSZW5kZXJpbmdDb250
ZXh0KGNhbnZhcykKICAgICAsIG1fc3RhdGVTdGFjaygxKQogewogICAgIC8vIE1ha2Ugc3VyZSB0
aGF0IGV2ZW4gaWYgdGhlIGRyYXdpbmdDb250ZXh0KCkgaGFzIGEgZGlmZmVyZW50IGRlZmF1bHQK
QEAgLTEwMiwxNiArMTAyLDYgQEAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpDYW52YXNSZW5k
ZXJpbgogICAgIHNldExpbmVXaWR0aChsaW5lV2lkdGgoKSk7CiB9CiAKLXZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjpyZWYoKSAKLXsgCi0gICAgbV9jYW52YXMtPnJlZigpOyAKLX0gCi0K
LXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkZXJlZigpIAoteyAKLSAgICBtX2NhbnZh
cy0+ZGVyZWYoKTsgIAotfSAKLQogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnJlc2V0
KCkKIHsKICAgICBtX3N0YXRlU3RhY2sucmVzaXplKDEpOwpJbmRleDogV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0
bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCShyZXZpc2lvbiA0NzcwNykKKysr
IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
X2gKICNkZWZpbmUgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEX2gKIAorI2luY2x1ZGUgIkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgog
I2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgogI2luY2x1ZGUgIkZvbnQuaCIKQEAgLTU0LDE0ICs1NSwx
MCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICB0eXBlZGVmIGludCBFeGNlcHRpb25Db2Rl
OwogCi0gICAgY2xhc3MgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIDogcHVibGljIE5vbmNvcHlh
YmxlIHsKKyAgICBjbGFzcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgOiBwdWJsaWMgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dCB7CiAgICAgcHVibGljOgogICAgICAgICBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQoSFRNTENhbnZhc0VsZW1lbnQqKTsKIAotICAgICAgICB2b2lkIHJlZigpOyAKLSAg
ICAgICAgdm9pZCBkZXJlZigpOyAKLQotICAgICAgICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFz
KCkgY29uc3QgeyByZXR1cm4gbV9jYW52YXM7IH0gCiAgICAgICAgIHZpcnR1YWwgfkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRCgpIHsgfQogICAgICAgICAKICAgICAgICAgdmlydHVhbCBib29sIGlz
MmQoKSB7IHJldHVybiB0cnVlOyB9CkBAIC0yNjUsNyArMjYyLDYgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICB2b2lkIGNoZWNrT3JpZ2luKGNvbnN0IEtVUkwmKTsKICAgICAgICAgdm9p
ZCBjaGVja09yaWdpbihjb25zdCBTdHJpbmcmKTsKIAotICAgICAgICBIVE1MQ2FudmFzRWxlbWVu
dCogbV9jYW52YXM7CiAgICAgICAgIFZlY3RvcjxTdGF0ZSwgMT4gbV9zdGF0ZVN0YWNrOwogICAg
IH07CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5p
ZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0LmlkbAkocmV2aXNpb24gNDc3MDcpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw2IEBAIG1vZHVs
ZSBodG1sIHsKICAgICBdIENhbnZhc1JlbmRlcmluZ0NvbnRleHQgewogCiAgICAgICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSBIVE1MQ2FudmFzRWxlbWVudCBjYW52YXM7Ci0gICAgICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSBET01TdHJpbmcgdHlwZTsKICAgICB9OwogCiB9Cg==
</data>
<flag name="review"
          id="19497"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38551</attachid>
            <date>2009-08-25 09:29:45 -0700</date>
            <delta_ts>2009-08-25 10:15:36 -0700</delta_ts>
            <desc>Replacement patch to add Canvas3D files to build</desc>
            <filename>webgl-add-to-build.patch</filename>
            <type>text/plain</type>
            <size>68432</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ3NzQ3KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMDktMDgtMjUgIENocmlzIE1h
cnJpbiAgPGNtYXJyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEV4cG9ydCB0cnlGYXN0TWFsbG9jIGZvciBDYW52YXMzRCB3b3Jr
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODAxOAor
CisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZXhwOgorCiAyMDA5LTA4LTI0ICBHZW9mZnJleSBH
YXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgQnVpbGQgZml4OiBzdGFydCBvdXQg
d2l0aCBhIDMyLWJpdCB2YWx1ZSB0byBhdm9pZCBhIHNob3J0ZW5pbmcgd2FybmluZy4KSW5kZXg6
IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHJldmlzaW9uIDQ3NzE5KQorKysgSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzgsNiArMjc4LDcg
QEAgX19aTjNKU0NndEVSS05TXzdVU3RyaW5nRVMyXwogX19aTjNKU0NsdEVSS05TXzdVU3RyaW5n
RVMyXwogX19aTjNXVEYxMGZhc3RDYWxsb2NFbW0KIF9fWk4zV1RGMTBmYXN0TWFsbG9jRW0KK19f
Wk4zV1RGMTN0cnlGYXN0TWFsbG9jRW0KIF9fWk4zV1RGMTFjdXJyZW50VGltZUV2CiBfX1pOM1dU
RjExZmFzdFJlYWxsb2NFUHZtCiBfX1pOM1dURjEyY3JlYXRlVGhyZWFkRVBGUHZTMF9FUzBfCklu
ZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwko
cmV2aXNpb24gNDc3NDcpCisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDYyIEBACisyMDA5LTA4LTI1ICBDaHJpcyBNYXJyaW4gIDxjbWFycmluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRl
ZCBhbGwgbmV3IENhbnZhczNEIGZpbGVzIHRvIHRoZSBidWlsZAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgwMTgKKworICAgICAgICBUaGlzIGFsc28g
aG9va3MgdXAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCBhcyB0aGUgY29tbW9uIGJhc2UgY2xhc3Mg
Zm9yCisgICAgICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCBhbmQgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDNELiBBbmQgaXQgYWRkcyBhIGJpdAorICAgICAgICBvZiBsb2dpYyB0aHJvdWdob3V0
IHRvIHN1cHBvcnQgdGhlIG5ldyBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Qgb2JqZWN0LgorICAg
ICAgICBCdXQgbm90aGluZyBpcyBob29rZWQgdXAgeWV0LgorCisgICAgICAgICogRGVyaXZlZFNv
dXJjZXMubWFrZToKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnN0cm9r
ZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpz
ZXRTdHJva2VTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6ZmlsbFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjpzZXRGaWxsU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6OnNldEZpbGxDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpKU0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRDo6c2V0U3Ryb2tlQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6SlND
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnN0cm9rZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdlRnJvbVJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFNoYWRvdyk6CisgICAg
ICAgIChXZWJDb3JlOjpKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlUGF0dGVybik6
CisgICAgICAgIChXZWJDb3JlOjpKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cHV0SW1hZ2VE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpmaWxs
VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c3Ry
b2tlVGV4dCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmlzT2JzZXJ2YWJsZVRocm91Z2hET00pOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSFRNTENh
bnZhc0VsZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MQ2FudmFzRWxl
bWVudDo6bWFya0NoaWxkcmVuKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmdldENTU0NhbnZhc0NvbnRleHQpOgorICAgICAgICAqIGRv
bS9Eb2N1bWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmdldENvbnRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OndpbGxEcmF3KToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxDYW52YXNFbGVtZW50OjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFz
RWxlbWVudDo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6Omlz
M0QpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmNvbnRleHQzRCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6dGV4dHVyZTNEKToKKyAgICAgICAg
KiBodG1sL0hUTUxDYW52YXNFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFz
RWxlbWVudDo6cmVuZGVyaW5nQ29udGV4dCk6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFz
T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc09iamVjdDo6fkNhbnZhc09iamVj
dCk6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5pZGw6Cisg
ICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6fkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRCk6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmg6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OmlzMmQpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRC5pZGw6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
LmNwcDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuaWRs
OgorCiAyMDA5LTA4LTI1ICBBbHBoYSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgRGF2aWQgTGV2aW4uCkluZGV4OiBXZWJDb3JlL0Rlcml2ZWRTb3VyY2Vz
Lm1ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCShyZXZpc2lv
biA0NzcxOSkKKysrIFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkod29ya2luZyBjb3B5KQpA
QCAtNjgsOSArNjgsMTkgQEAgRE9NX0NMQVNTRVMgPSBcCiAgICAgQ1NTVmFsdWVMaXN0IFwKICAg
ICBDU1NWYXJpYWJsZXNSdWxlIFwKICAgICBDU1NWYXJpYWJsZXNEZWNsYXJhdGlvbiBcCisgICAg
Q2FudmFzQnVmZmVyIFwKKyAgICBDYW52YXNCeXRlQXJyYXkgXAorICAgIENhbnZhc0ZyYW1lYnVm
ZmVyIFwKICAgICBDYW52YXNHcmFkaWVudCBcCisgICAgQ2FudmFzTnVtYmVyQXJyYXkgXAogICAg
IENhbnZhc1BhdHRlcm4gXAorICAgIENhbnZhc1Byb2dyYW0gXAorICAgIENhbnZhc1JlbmRlcmJ1
ZmZlciBcCisgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCBcCiAgICAgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEIFwKKyAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QgXAorICAgIENhbnZhc1No
YWRlciBcCisgICAgQ2FudmFzVGV4dHVyZSBcCiAgICAgQ2hhcmFjdGVyRGF0YSBcCiAgICAgQ2xp
ZW50UmVjdCBcCiAgICAgQ2xpZW50UmVjdExpc3QgXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDQ3NzE5KQorKysgV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTc4Myw2ICs3
ODMsNjcgQEAKIAkJNDk4MzkxNTkwRjFFNzc2OTAwQzIzNzgyIC8qIFdlYktpdENTU01hdHJpeC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDk4MzkxNTYw
RjFFNzc2OTAwQzIzNzgyIC8qIFdlYktpdENTU01hdHJpeC5oICovOyB9OwogCQk0OTgzOTE2MzBG
MUU4RUUxMDBDMjM3ODIgLyogSlNXZWJLaXRDU1NNYXRyaXhDb25zdHJ1Y3Rvci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OTgzOTE2MTBGMUU4RUUx
MDBDMjM3ODIgLyogSlNXZWJLaXRDU1NNYXRyaXhDb25zdHJ1Y3Rvci5jcHAgKi87IH07CiAJCTQ5
ODM5MTY0MEYxRThFRTEwMEMyMzc4MiAvKiBKU1dlYktpdENTU01hdHJpeENvbnN0cnVjdG9yLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OTgzOTE2MjBG
MUU4RUUxMDBDMjM3ODIgLyogSlNXZWJLaXRDU1NNYXRyaXhDb25zdHJ1Y3Rvci5oICovOyB9Owor
CQk0OTgzQTk3MDEwNDM1RTkwMDBEQjcwRjkgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0Q3Vz
dG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5
ODNBOTZGMTA0MzVFOTAwMERCNzBGOSAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHRDdXN0b20u
Y3BwICovOyB9OworCQk0OUM3Qjk3RTEwNDJEMjA4MDAwOUQ0NDcgLyogSlNDYW52YXNOdW1iZXJB
cnJheUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0OUM3Qjk3QzEwNDJEMjA4MDAwOUQ0NDcgLyogSlNDYW52YXNOdW1iZXJBcnJheUN1c3Rv
bS5jcHAgKi87IH07CisJCTQ5QzdCOTdGMTA0MkQyMDgwMDA5RDQ0NyAvKiBKU0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQzREN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0OUM3Qjk3RDEwNDJEMjA4MDAwOUQ0NDcgLyogSlNDYW52YXNSZW5kZXJp
bmdDb250ZXh0M0RDdXN0b20uY3BwICovOyB9OworCQk0OUM3Qjk5MzEwNDJEMkQzMDAwOUQ0NDcg
LyogSlNDYW52YXNCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDlDN0I5ODAxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzQnVmZmVyLmNw
cCAqLzsgfTsKKwkJNDlDN0I5OTQxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzQnVmZmVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3Qjk4MTEw
NDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNCdWZmZXIuaCAqLzsgfTsKKwkJNDlDN0I5OTUxMDQy
RDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzQnl0ZUFycmF5LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOTgyMTA0MkQyRDMwMDA5RDQ0NyAvKiBK
U0NhbnZhc0J5dGVBcnJheS5jcHAgKi87IH07CisJCTQ5QzdCOTk2MTA0MkQyRDMwMDA5RDQ0NyAv
KiBKU0NhbnZhc0J5dGVBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDlDN0I5ODMxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzQnl0ZUFycmF5
LmggKi87IH07CisJCTQ5QzdCOTk3MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc0ZyYW1lYnVm
ZmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5
QzdCOTg0MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc0ZyYW1lYnVmZmVyLmNwcCAqLzsgfTsK
KwkJNDlDN0I5OTgxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzRnJhbWVidWZmZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOTg1MTA0MkQy
RDMwMDA5RDQ0NyAvKiBKU0NhbnZhc0ZyYW1lYnVmZmVyLmggKi87IH07CisJCTQ5QzdCOTk5MTA0
MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc051bWJlckFycmF5LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOTg2MTA0MkQyRDMwMDA5RDQ0NyAv
KiBKU0NhbnZhc051bWJlckFycmF5LmNwcCAqLzsgfTsKKwkJNDlDN0I5OUExMDQyRDJEMzAwMDlE
NDQ3IC8qIEpTQ2FudmFzTnVtYmVyQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOTg3MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc051
bWJlckFycmF5LmggKi87IH07CisJCTQ5QzdCOTlCMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZh
c1Byb2dyYW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDlDN0I5ODgxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzUHJvZ3JhbS5jcHAgKi87IH07
CisJCTQ5QzdCOTlDMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1Byb2dyYW0uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOTg5MTA0MkQyRDMw
MDA5RDQ0NyAvKiBKU0NhbnZhc1Byb2dyYW0uaCAqLzsgfTsKKwkJNDlDN0I5OUQxMDQyRDJEMzAw
MDlENDQ3IC8qIEpTQ2FudmFzUmVuZGVyYnVmZmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOThBMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0Nh
bnZhc1JlbmRlcmJ1ZmZlci5jcHAgKi87IH07CisJCTQ5QzdCOTlFMTA0MkQyRDMwMDA5RDQ0NyAv
KiBKU0NhbnZhc1JlbmRlcmJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDlDN0I5OEIxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzUmVuZGVy
YnVmZmVyLmggKi87IH07CisJCTQ5QzdCOTlGMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDlDN0I5OEMxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dC5jcHAgKi87IH07CisJCTQ5QzdCOUEwMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQ5QzdCOThEMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQuaCAqLzsgfTsKKwkJNDlDN0I5QTExMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDNELmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0OUM3Qjk4RTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0
M0QuaCAqLzsgfTsKKwkJNDlDN0I5QTIxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzU2hhZGVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdC
OThGMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1NoYWRlci5jcHAgKi87IH07CisJCTQ5QzdC
OUEzMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1NoYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5OTAxMDQyRDJEMzAwMDlENDQ3IC8q
IEpTQ2FudmFzU2hhZGVyLmggKi87IH07CisJCTQ5QzdCOUE0MTA0MkQyRDMwMDA5RDQ0NyAvKiBK
U0NhbnZhc1RleHR1cmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDlDN0I5OTExMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzVGV4dHVyZS5jcHAg
Ki87IH07CisJCTQ5QzdCOUE1MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1RleHR1cmUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOTkyMTA0
MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1RleHR1cmUuaCAqLzsgfTsKKwkJNDlDN0I5QzgxMDQy
RDMyRjAwMDlENDQ3IC8qIENhbnZhc0J1ZmZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3QjlBODEwNDJEMzJFMDAwOUQ0NDcgLyogQ2FudmFz
QnVmZmVyLmNwcCAqLzsgfTsKKwkJNDlDN0I5QzkxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc0J1
ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlD
N0I5QTkxMDQyRDMyRTAwMDlENDQ3IC8qIENhbnZhc0J1ZmZlci5oICovOyB9OworCQk0OUM3QjlD
QTEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzQnVmZmVyLmlkbCBpbiBSZXNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5QUExMDQyRDMyRTAwMDlENDQ3IC8q
IENhbnZhc0J1ZmZlci5pZGwgKi87IH07CisJCTQ5QzdCOUNCMTA0MkQzMkYwMDA5RDQ0NyAvKiBD
YW52YXNCeXRlQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDlDN0I5QUIxMDQyRDMyRTAwMDlENDQ3IC8qIENhbnZhc0J5dGVBcnJheS5jcHAg
Ki87IH07CisJCTQ5QzdCOUNDMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNCeXRlQXJyYXkuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOUFDMTA0
MkQzMkUwMDA5RDQ0NyAvKiBDYW52YXNCeXRlQXJyYXkuaCAqLzsgfTsKKwkJNDlDN0I5Q0QxMDQy
RDMyRjAwMDlENDQ3IC8qIENhbnZhc0J5dGVBcnJheS5pZGwgaW4gUmVzb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOUFEMTA0MkQzMkUwMDA5RDQ0NyAvKiBD
YW52YXNCeXRlQXJyYXkuaWRsICovOyB9OworCQk0OUM3QjlDRTEwNDJEMzJGMDAwOUQ0NDcgLyog
Q2FudmFzRnJhbWVidWZmZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDlDN0I5QUUxMDQyRDMyRTAwMDlENDQ3IC8qIENhbnZhc0ZyYW1lYnVmZmVy
LmNwcCAqLzsgfTsKKwkJNDlDN0I5Q0YxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc0ZyYW1lYnVm
ZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3
QjlBRjEwNDJEMzJFMDAwOUQ0NDcgLyogQ2FudmFzRnJhbWVidWZmZXIuaCAqLzsgfTsKKwkJNDlD
N0I5RDAxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc0ZyYW1lYnVmZmVyLmlkbCBpbiBSZXNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5QjAxMDQyRDMyRTAw
MDlENDQ3IC8qIENhbnZhc0ZyYW1lYnVmZmVyLmlkbCAqLzsgfTsKKwkJNDlDN0I5RDExMDQyRDMy
RjAwMDlENDQ3IC8qIENhbnZhc051bWJlckFycmF5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOUIxMTA0MkQzMkUwMDA5RDQ0NyAvKiBDYW52
YXNOdW1iZXJBcnJheS5jcHAgKi87IH07CisJCTQ5QzdCOUQyMTA0MkQzMkYwMDA5RDQ0NyAvKiBD
YW52YXNOdW1iZXJBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDlDN0I5QjIxMDQyRDMyRTAwMDlENDQ3IC8qIENhbnZhc051bWJlckFycmF5Lmgg
Ki87IH07CisJCTQ5QzdCOUQzMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNOdW1iZXJBcnJheS5p
ZGwgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdC
OUIzMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNOdW1iZXJBcnJheS5pZGwgKi87IH07CisJCTQ5
QzdCOUQ0MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5QjQxMDQyRDMyRjAwMDlENDQ3
IC8qIENhbnZhc09iamVjdC5jcHAgKi87IH07CisJCTQ5QzdCOUQ1MTA0MkQzMkYwMDA5RDQ0NyAv
KiBDYW52YXNPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQ5QzdCOUI1MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNPYmplY3QuaCAqLzsgfTsK
KwkJNDlDN0I5RDYxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1Byb2dyYW0uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5QjYxMDQyRDMyRjAw
MDlENDQ3IC8qIENhbnZhc1Byb2dyYW0uY3BwICovOyB9OworCQk0OUM3QjlENzEwNDJEMzJGMDAw
OUQ0NDcgLyogQ2FudmFzUHJvZ3JhbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDlDN0I5QjcxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1Byb2dyYW0u
aCAqLzsgfTsKKwkJNDlDN0I5RDgxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1Byb2dyYW0uaWRs
IGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3QjlC
ODEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzUHJvZ3JhbS5pZGwgKi87IH07CisJCTQ5QzdCOUQ5
MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNSZW5kZXJidWZmZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5QjkxMDQyRDMyRjAwMDlENDQ3
IC8qIENhbnZhc1JlbmRlcmJ1ZmZlci5jcHAgKi87IH07CisJCTQ5QzdCOURBMTA0MkQzMkYwMDA5
RDQ0NyAvKiBDYW52YXNSZW5kZXJidWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOUJBMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNSZW5k
ZXJidWZmZXIuaCAqLzsgfTsKKwkJNDlDN0I5REIxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1Jl
bmRlcmJ1ZmZlci5pZGwgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQ5QzdCOUJCMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNSZW5kZXJidWZmZXIuaWRs
ICovOyB9OworCQk0OUM3QjlEQzEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
OUM3QjlCQzEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHAgKi87
IH07CisJCTQ5QzdCOUREMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3QjlC
RDEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oICovOyB9OworCQk0
OUM3QjlERTEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5pZGwgaW4g
UmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOUJFMTA0
MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0LmlkbCAqLzsgfTsKKwkJNDlD
N0I5REYxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3QjlCRjEwNDJE
MzJGMDAwOUQ0NDcgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmNwcCAqLzsgfTsKKwkJNDlD
N0I5RTAxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5QzAxMDQyRDMy
RjAwMDlENDQ3IC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5oICovOyB9OworCQk0OUM3QjlF
MTEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmlkbCBpbiBSZXNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5QzExMDQyRDMy
RjAwMDlENDQ3IC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5pZGwgKi87IH07CisJCTQ5QzdC
OUUyMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNTaGFkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5QzIxMDQyRDMyRjAwMDlENDQ3IC8q
IENhbnZhc1NoYWRlci5jcHAgKi87IH07CisJCTQ5QzdCOUUzMTA0MkQzMkYwMDA5RDQ0NyAvKiBD
YW52YXNTaGFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQ5QzdCOUMzMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNTaGFkZXIuaCAqLzsgfTsKKwkJ
NDlDN0I5RTQxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1NoYWRlci5pZGwgaW4gUmVzb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOUM0MTA0MkQzMkYwMDA5
RDQ0NyAvKiBDYW52YXNTaGFkZXIuaWRsICovOyB9OworCQk0OUM3QjlFNTEwNDJEMzJGMDAwOUQ0
NDcgLyogQ2FudmFzVGV4dHVyZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0OUM3QjlDNTEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzVGV4dHVyZS5j
cHAgKi87IH07CisJCTQ5QzdCOUU2MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNUZXh0dXJlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3QjlDNjEw
NDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzVGV4dHVyZS5oICovOyB9OworCQk0OUM3QjlFNzEwNDJE
MzJGMDAwOUQ0NDcgLyogQ2FudmFzVGV4dHVyZS5pZGwgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOUM3MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52
YXNUZXh0dXJlLmlkbCAqLzsgfTsKKwkJNDlDN0I5RkMxMDQyRDM2NTAwMDlENDQ3IC8qIEdyYXBo
aWNzQ29udGV4dDNELmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0OUM3QjlGQjEwNDJEMzY1MDAwOUQ0NDcgLyogR3JhcGhpY3NDb250ZXh0M0QuaCAqLzsg
fTsKKwkJNDlDN0JBMDAxMDQyRDM4QzAwMDlENDQ3IC8qIENhbnZhczNETGF5ZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOUZEMTA0MkQzOEMw
MDA5RDQ0NyAvKiBDYW52YXMzRExheWVyLmggKi87IH07CisJCTQ5QzdCQTAxMTA0MkQzOEMwMDA5
RDQ0NyAvKiBDYW52YXMzRExheWVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDlDN0I5RkUxMDQyRDM4QzAwMDlENDQ3IC8qIENhbnZhczNETGF5ZXIu
bW0gKi87IH07CisJCTQ5QzdCQTAyMTA0MkQzOEMwMDA5RDQ0NyAvKiBHcmFwaGljc0NvbnRleHQz
RE1hYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
OUM3QjlGRjEwNDJEMzhDMDAwOUQ0NDcgLyogR3JhcGhpY3NDb250ZXh0M0RNYWMuY3BwICovOyB9
OworCQk0OUM3QkE3OTEwNDJFRkFFMDAwOUQ0NDcgLyogT3BlbkdMLmZyYW1ld29yayBpbiBGcmFt
ZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCQTc4MTA0MkVG
QUUwMDA5RDQ0NyAvKiBPcGVuR0wuZnJhbWV3b3JrICovOyB9OworCQk0OUM3QkE4RDEwNDJGNUIx
MDAwOUQ0NDcgLyogSlNEb2N1bWVudEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3QkE4QzEwNDJGNUIxMDAwOUQ0NDcgLyogSlNEb2N1
bWVudEN1c3RvbS5jcHAgKi87IH07CisJCTQ5QzdENEZCMTA0MkY5NUYwMDA5RDQ0NyAvKiBKU0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQzRC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0OUM3RDRGQTEwNDJGOTVGMDAwOUQ0NDcgLyogSlNDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0QuY3BwICovOyB9OwogCQk0OUQ1REMyQjBGNDIzQTczMDA4RjIwRkQgLyog
TWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDlENURDMjcwRjQyM0E3MzAwOEYyMEZEIC8qIE1hdHJpeDNE
VHJhbnNmb3JtT3BlcmF0aW9uLmNwcCAqLzsgfTsKIAkJNDlENURDMkMwRjQyM0E3MzAwOEYyMEZE
IC8qIE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUQ1REMyODBGNDIzQTczMDA4RjIwRkQgLyogTWF0cml4
M0RUcmFuc2Zvcm1PcGVyYXRpb24uaCAqLzsgfTsKIAkJNDlENURDMkQwRjQyM0E3MzAwOEYyMEZE
IC8qIFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RDVEQzI5MEY0MjNBNzMwMDhGMjBGRCAvKiBQ
ZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHAgKi87IH07CkBAIC0xOTU1LDcgKzIwMTYs
NiBAQAogCQk4NUY3NEUwQTBBQThERjhDMDAwREMyODQgLyogRE9NQ1NTVW5rbm93blJ1bGUuaCBp
biBDb3B5IEdlbmVyYXRlZCBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDg1MDMyREQ1MEFBOEM5QkUwMDdEM0I3RCAvKiBET01DU1NVbmtub3duUnVsZS5oICovOyB9
OwogCQk4NUZGMzE1QTBBQUZCRkNCMDAzNzRGMzggLyogRE9NS2V5Ym9hcmRFdmVudC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODVGRjMxNTgwQUFGQkZD
QjAwMzc0RjM4IC8qIERPTUtleWJvYXJkRXZlbnQuaCAqLzsgfTsKIAkJODVGRjMxNUIwQUFGQkZD
QjAwMzc0RjM4IC8qIERPTUtleWJvYXJkRXZlbnQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NUZGMzE1OTBBQUZCRkNCMDAzNzRGMzggLyogRE9NS2V5
Ym9hcmRFdmVudC5tbSAqLzsgfTsKLQkJOTI5MjY0NzcwQjYxRkM3MjAwQjQxRDM0IC8qIEpTRG9j
dW1lbnRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTI5MjY0NzYwQjYxRkM3MjAwQjQxRDM0IC8qIEpTRG9jdW1lbnRDdXN0b20uY3BwICov
OyB9OwogCQk5MzAyQjBCRDBENzlGODI5MDBDN0VFODMgLyogUGFnZUdyb3VwLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMDJCMEJDMEQ3OUY4Mjkw
MEM3RUU4MyAvKiBQYWdlR3JvdXAuY3BwICovOyB9OwogCQk5MzAyQjBCRjBENzlGODJDMDBDN0VF
ODMgLyogUGFnZUdyb3VwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5MzAyQjBCRTBENzlGODJDMDBDN0VFODMgLyogUGFnZUdyb3VwLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTMwNUIyNEQwOThGMUI2
QjAwQzI4ODU1IC8qIFRpbWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5MzA1QjI0QzA5OEYxQjZCMDBDMjg4NTUgLyogVGltZXIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNTgzNSw2ICs1ODk1LDY3
IEBACiAJCTQ5ODM5MTU3MEYxRTc3NjkwMEMyMzc4MiAvKiBXZWJLaXRDU1NNYXRyaXguaWRsICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgcGF0aCA9IFdlYktpdENTU01hdHJpeC5pZGw7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTQ5ODM5MTYxMEYxRThFRTEwMEMyMzc4MiAvKiBKU1dlYktpdENTU01h
dHJpeENvbnN0cnVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTV2ViS2l0Q1NTTWF0cml4Q29uc3RydWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk0OTgzOTE2MjBGMUU4RUUxMDBDMjM3ODIgLyogSlNXZWJLaXRDU1NNYXRyaXhDb25z
dHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dlYktpdENTU01h
dHJpeENvbnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5ODNBOTZG
MTA0MzVFOTAwMERCNzBGOSAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDYW52YXNSZW5kZXJpbmdDb250
ZXh0Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlDN0I5N0MxMDQy
RDIwODAwMDlENDQ3IC8qIEpTQ2FudmFzTnVtYmVyQXJyYXlDdXN0b20uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDYW52YXNOdW1iZXJBcnJheUN1c3RvbS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5QzdCOTdEMTA0MkQyMDgwMDA5RDQ0NyAv
KiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzREN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzREN1c3RvbS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5QzdCOTgwMTA0MkQyRDMwMDA5RDQ0NyAv
KiBKU0NhbnZhc0J1ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU0NhbnZhc0J1ZmZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5QzdC
OTgxMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc0J1ZmZlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU0NhbnZhc0J1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk0OUM3Qjk4MjEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNCeXRlQXJyYXkuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDYW52YXNCeXRlQXJyYXku
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUM3Qjk4MzEwNDJEMkQzMDAwOUQ0
NDcgLyogSlNDYW52YXNCeXRlQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNDYW52YXNCeXRlQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlD
N0I5ODQxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzRnJhbWVidWZmZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDYW52YXNGcmFtZWJ1ZmZlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5QzdCOTg1MTA0MkQyRDMwMDA5RDQ0NyAvKiBK
U0NhbnZhc0ZyYW1lYnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
Q2FudmFzRnJhbWVidWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlDN0I5
ODYxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzTnVtYmVyQXJyYXkuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDYW52YXNOdW1iZXJBcnJheS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5QzdCOTg3MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0Nh
bnZhc051bWJlckFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ2Fu
dmFzTnVtYmVyQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlDN0I5ODgx
MDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzUHJvZ3JhbS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU0NhbnZhc1Byb2dyYW0uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk0OUM3Qjk4OTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNQcm9ncmFt
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ2FudmFzUHJvZ3JhbS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUM3Qjk4QTEwNDJEMkQzMDAwOUQ0NDcgLyog
SlNDYW52YXNSZW5kZXJidWZmZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNDYW52YXNSZW5kZXJidWZmZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk0OUM3Qjk4QjEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNSZW5kZXJidWZmZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDYW52YXNSZW5kZXJidWZmZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlDN0I5OEMxMDQyRDJEMzAwMDlENDQ3IC8q
IEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk0OUM3Qjk4RDEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNSZW5kZXJp
bmdDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUM3Qjk4RTEw
NDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlDN0I5OEYxMDQyRDJEMzAwMDlENDQ3IC8qIEpT
Q2FudmFzU2hhZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
Q2FudmFzU2hhZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlDN0I5OTAx
MDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzU2hhZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTQ2FudmFzU2hhZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTQ5QzdCOTkxMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1RleHR1cmUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDYW52YXNUZXh0dXJlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlDN0I5OTIxMDQyRDJEMzAwMDlENDQ3IC8qIEpT
Q2FudmFzVGV4dHVyZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NhbnZh
c1RleHR1cmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlDN0I5QTgxMDQyRDMy
RTAwMDlENDQ3IC8qIENhbnZhc0J1ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBDYW52YXNCdWZmZXIuY3BwOyBwYXRoID0gY2FudmFzL0NhbnZhc0J1ZmZlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5QzdCOUE5MTA0MkQzMkUwMDA5RDQ0
NyAvKiBDYW52YXNCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ2Fu
dmFzQnVmZmVyLmg7IHBhdGggPSBjYW52YXMvQ2FudmFzQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTQ5QzdCOUFBMTA0MkQzMkUwMDA5RDQ0NyAvKiBDYW52YXNCdWZmZXIu
aWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IENhbnZhc0J1ZmZlci5pZGw7IHBhdGggPSBjYW52
YXMvQ2FudmFzQnVmZmVyLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlDN0I5
QUIxMDQyRDMyRTAwMDlENDQ3IC8qIENhbnZhc0J5dGVBcnJheS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDYW52YXNCeXRlQXJyYXkuY3BwOyBwYXRoID0gY2FudmFz
L0NhbnZhc0J5dGVBcnJheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5QzdC
OUFDMTA0MkQzMkUwMDA5RDQ0NyAvKiBDYW52YXNCeXRlQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gQ2FudmFzQnl0ZUFycmF5Lmg7IHBhdGggPSBjYW52YXMvQ2FudmFz
Qnl0ZUFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5QzdCOUFEMTA0MkQz
MkUwMDA5RDQ0NyAvKiBDYW52YXNCeXRlQXJyYXkuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9
IENhbnZhc0J5dGVBcnJheS5pZGw7IHBhdGggPSBjYW52YXMvQ2FudmFzQnl0ZUFycmF5LmlkbDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlDN0I5QUUxMDQyRDMyRTAwMDlENDQ3IC8q
IENhbnZhc0ZyYW1lYnVmZmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IENhbnZhc0ZyYW1lYnVmZmVyLmNwcDsgcGF0aCA9IGNhbnZhcy9DYW52YXNGcmFtZWJ1ZmZl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5QzdCOUFGMTA0MkQzMkUwMDA5
RDQ0NyAvKiBDYW52YXNGcmFtZWJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBDYW52YXNGcmFtZWJ1ZmZlci5oOyBwYXRoID0gY2FudmFzL0NhbnZhc0ZyYW1lYnVmZmVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5QzdCOUIwMTA0MkQzMkUwMDA5RDQ0
NyAvKiBDYW52YXNGcmFtZWJ1ZmZlci5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gQ2FudmFz
RnJhbWVidWZmZXIuaWRsOyBwYXRoID0gY2FudmFzL0NhbnZhc0ZyYW1lYnVmZmVyLmlkbDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlDN0I5QjExMDQyRDMyRTAwMDlENDQ3IC8qIENh
bnZhc051bWJlckFycmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IENhbnZhc051bWJlckFycmF5LmNwcDsgcGF0aCA9IGNhbnZhcy9DYW52YXNOdW1iZXJBcnJheS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5QzdCOUIyMTA0MkQzMkUwMDA5RDQ0
NyAvKiBDYW52YXNOdW1iZXJBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBDYW52YXNOdW1iZXJBcnJheS5oOyBwYXRoID0gY2FudmFzL0NhbnZhc051bWJlckFycmF5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5QzdCOUIzMTA0MkQzMkYwMDA5RDQ0NyAv
KiBDYW52YXNOdW1iZXJBcnJheS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gQ2FudmFzTnVt
YmVyQXJyYXkuaWRsOyBwYXRoID0gY2FudmFzL0NhbnZhc051bWJlckFycmF5LmlkbDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlDN0I5QjQxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZh
c09iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDYW52YXNP
YmplY3QuY3BwOyBwYXRoID0gY2FudmFzL0NhbnZhc09iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTQ5QzdCOUI1MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNPYmplY3Qu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ2FudmFzT2JqZWN0Lmg7IHBhdGgg
PSBjYW52YXMvQ2FudmFzT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5
QzdCOUI2MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNQcm9ncmFtLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENhbnZhc1Byb2dyYW0uY3BwOyBwYXRoID0gY2FudmFz
L0NhbnZhc1Byb2dyYW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUM3QjlC
NzEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzUHJvZ3JhbS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBDYW52YXNQcm9ncmFtLmg7IHBhdGggPSBjYW52YXMvQ2FudmFzUHJvZ3Jh
bS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUM3QjlCODEwNDJEMzJGMDAwOUQ0
NDcgLyogQ2FudmFzUHJvZ3JhbS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gQ2FudmFzUHJv
Z3JhbS5pZGw7IHBhdGggPSBjYW52YXMvQ2FudmFzUHJvZ3JhbS5pZGw7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTQ5QzdCOUI5MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNSZW5kZXJi
dWZmZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ2FudmFzUmVu
ZGVyYnVmZmVyLmNwcDsgcGF0aCA9IGNhbnZhcy9DYW52YXNSZW5kZXJidWZmZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUM3QjlCQTEwNDJEMzJGMDAwOUQ0NDcgLyogQ2Fu
dmFzUmVuZGVyYnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IENhbnZh
c1JlbmRlcmJ1ZmZlci5oOyBwYXRoID0gY2FudmFzL0NhbnZhc1JlbmRlcmJ1ZmZlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUM3QjlCQjEwNDJEMzJGMDAwOUQ0NDcgLyogQ2Fu
dmFzUmVuZGVyYnVmZmVyLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBDYW52YXNSZW5kZXJi
dWZmZXIuaWRsOyBwYXRoID0gY2FudmFzL0NhbnZhc1JlbmRlcmJ1ZmZlci5pZGw7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5QzdCOUJDMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQuY3BwOyBwYXRoID0gY2FudmFzL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUM3QjlCRDEwNDJE
MzJGMDAwOUQ0NDcgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBDYW52YXNSZW5kZXJpbmdDb250ZXh0Lmg7IHBhdGggPSBjYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0
OUM3QjlCRTEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5pZGwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBuYW1lID0gQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5pZGw7IHBhdGggPSBj
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTQ5QzdCOUJGMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0
M0QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDNELmNwcDsgcGF0aCA9IGNhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0M0Qu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUM3QjlDMDEwNDJEMzJGMDAwOUQ0
NDcgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5oOyBwYXRoID0gY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQzRC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUM3
QjlDMTEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmlkbCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IG5hbWUgPSBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuaWRsOyBwYXRoID0g
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTQ5QzdCOUMyMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNTaGFkZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ2FudmFzU2hhZGVyLmNwcDsgcGF0
aCA9IGNhbnZhcy9DYW52YXNTaGFkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk0OUM3QjlDMzEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzU2hhZGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IENhbnZhc1NoYWRlci5oOyBwYXRoID0gY2FudmFzL0NhbnZh
c1NoYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUM3QjlDNDEwNDJEMzJG
MDAwOUQ0NDcgLyogQ2FudmFzU2hhZGVyLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBDYW52
YXNTaGFkZXIuaWRsOyBwYXRoID0gY2FudmFzL0NhbnZhc1NoYWRlci5pZGw7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTQ5QzdCOUM1MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNUZXh0
dXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENhbnZhc1RleHR1
cmUuY3BwOyBwYXRoID0gY2FudmFzL0NhbnZhc1RleHR1cmUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk0OUM3QjlDNjEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzVGV4dHVyZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBDYW52YXNUZXh0dXJlLmg7IHBhdGgg
PSBjYW52YXMvQ2FudmFzVGV4dHVyZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0
OUM3QjlDNzEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzVGV4dHVyZS5pZGwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBuYW1lID0gQ2FudmFzVGV4dHVyZS5pZGw7IHBhdGggPSBjYW52YXMvQ2FudmFzVGV4dHVy
ZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5QzdCOUZCMTA0MkQzNjUwMDA5
RDQ0NyAvKiBHcmFwaGljc0NvbnRleHQzRC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBHcmFwaGljc0NvbnRleHQzRC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0
OUM3QjlGRDEwNDJEMzhDMDAwOUQ0NDcgLyogQ2FudmFzM0RMYXllci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDYW52YXMzRExheWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTQ5QzdCOUZFMTA0MkQzOEMwMDA5RDQ0NyAvKiBDYW52YXMzRExheWVyLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ2FudmFzM0RMYXllci5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlDN0I5RkYxMDQyRDM4QzAwMDlENDQ3IC8q
IEdyYXBoaWNzQ29udGV4dDNETWFjLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEdyYXBoaWNzQ29udGV4dDNETWFjLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNDlDN0JBNzgxMDQyRUZBRTAwMDlENDQ3IC8qIE9wZW5HTC5mcmFtZXdvcmsgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1l
d29yazsgbmFtZSA9IE9wZW5HTC5mcmFtZXdvcms7IHBhdGggPSAvU3lzdGVtL0xpYnJhcnkvRnJh
bWV3b3Jrcy9PcGVuR0wuZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gIjxhYnNvbHV0ZT4iOyB9Owor
CQk0OUM3QkE4QzEwNDJGNUIxMDAwOUQ0NDcgLyogSlNEb2N1bWVudEN1c3RvbS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RvY3VtZW50Q3VzdG9tLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlDN0Q0RkExMDQyRjk1RjAwMDlENDQ3IC8qIEpT
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNDlENURDMjcwRjQyM0E3MzAwOEYyMEZEIC8qIE1hdHJpeDNEVHJhbnNm
b3JtT3BlcmF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE1h
dHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmNwcDsgcGF0aCA9IHRyYW5zZm9ybXMvTWF0cml4M0RU
cmFuc2Zvcm1PcGVyYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUQ1
REMyODBGNDIzQTczMDA4RjIwRkQgLyogTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24u
aDsgcGF0aCA9IHRyYW5zZm9ybXMvTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlENURDMjkwRjQyM0E3MzAwOEYyMEZEIC8qIFBlcnNw
ZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uLmNwcDsgcGF0aCA9IHRyYW5z
Zm9ybXMvUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtNjk5Niw3ICs3MTE3LDYgQEAKIAkJODVGNTZBNzkwQTk4Q0UzNzAwQURC
NjBBIC8qIERPTVByb2Nlc3NpbmdJbnN0cnVjdGlvbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24ubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg1RkYzMTU4MEFBRkJGQ0IwMDM3NEYzOCAvKiBET01LZXli
b2FyZEV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01LZXlib2Fy
ZEV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg1RkYzMTU5MEFBRkJGQ0Iw
MDM3NEYzOCAvKiBET01LZXlib2FyZEV2ZW50Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IERPTUtleWJvYXJkRXZlbnQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTkyOTI2NDc2MEI2MUZDNzIwMEI0MUQzNCAvKiBKU0RvY3VtZW50Q3VzdG9tLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RvY3VtZW50Q3VzdG9t
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMwMkIwQkMwRDc5RjgyOTAwQzdF
RTgzIC8qIFBhZ2VHcm91cC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBQYWdlR3JvdXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzAyQjBCRTBE
NzlGODJDMDBDN0VFODMgLyogUGFnZUdyb3VwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFBhZ2VHcm91cC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzA1QjI0
QzA5OEYxQjZCMDBDMjg4NTUgLyogVGltZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVGltZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk1OTUsNiArOTcx
NSw3IEBACiAJCQkJREQ3NjNCQjIwOTkyQzJDOTAwNzQwQjhFIC8qIGxpYnhtbDIuZHlsaWIgaW4g
RnJhbWV3b3JrcyAqLywKIAkJCQlBODhBRDUyRjA5NTI0QjkyMDAxREQxOTYgLyogUXVhcnR6Q29y
ZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKIAkJCQkxQTdGQTdDQzBEREE0Qjc3MDAyOEY4
QTUgLyogU3lzdGVtQ29uZmlndXJhdGlvbi5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKKwkJ
CQk0OUM3QkE3OTEwNDJFRkFFMDAwOUQ0NDcgLyogT3BlbkdMLmZyYW1ld29yayBpbiBGcmFtZXdv
cmtzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAw
OwogCQl9OwpAQCAtOTY1Miw2ICs5NzczLDcgQEAKIAkJMDg2N0Q2OUFGRTg0MDI4RkMwMkFBQzA3
IC8qIEZyYW1ld29ya3MgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0g
KAorCQkJCTQ5QzdCQTc4MTA0MkVGQUUwMDA5RDQ0NyAvKiBPcGVuR0wuZnJhbWV3b3JrICovLAog
CQkJCUY1QzI4NjkzMDI4NDZEQ0QwMTg2MzVDQSAvKiBBcHBsaWNhdGlvblNlcnZpY2VzLmZyYW1l
d29yayAqLywKIAkJCQlGNUMyODY5NDAyODQ2RENEMDE4NjM1Q0EgLyogQ2FyYm9uLmZyYW1ld29y
ayAqLywKIAkJCQlGNUMyODY5NTAyODQ2RENEMDE4NjM1Q0EgLyogQ29jb2EuZnJhbWV3b3JrICov
LApAQCAtMTAxODIsMjAgKzEwMzA0LDUyIEBACiAJCTQ5NDg0RkFFMTAyQ0YwMUUwMDE4N0REMyAv
KiBjYW52YXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJ
CTQ5QzdCOUE4MTA0MkQzMkUwMDA5RDQ0NyAvKiBDYW52YXNCdWZmZXIuY3BwICovLAorCQkJCTQ5
QzdCOUE5MTA0MkQzMkUwMDA5RDQ0NyAvKiBDYW52YXNCdWZmZXIuaCAqLywKKwkJCQk0OUM3QjlB
QTEwNDJEMzJFMDAwOUQ0NDcgLyogQ2FudmFzQnVmZmVyLmlkbCAqLywKKwkJCQk0OUM3QjlBQjEw
NDJEMzJFMDAwOUQ0NDcgLyogQ2FudmFzQnl0ZUFycmF5LmNwcCAqLywKKwkJCQk0OUM3QjlBQzEw
NDJEMzJFMDAwOUQ0NDcgLyogQ2FudmFzQnl0ZUFycmF5LmggKi8sCisJCQkJNDlDN0I5QUQxMDQy
RDMyRTAwMDlENDQ3IC8qIENhbnZhc0J5dGVBcnJheS5pZGwgKi8sCisJCQkJNDlDN0I5QUUxMDQy
RDMyRTAwMDlENDQ3IC8qIENhbnZhc0ZyYW1lYnVmZmVyLmNwcCAqLywKKwkJCQk0OUM3QjlBRjEw
NDJEMzJFMDAwOUQ0NDcgLyogQ2FudmFzRnJhbWVidWZmZXIuaCAqLywKKwkJCQk0OUM3QjlCMDEw
NDJEMzJFMDAwOUQ0NDcgLyogQ2FudmFzRnJhbWVidWZmZXIuaWRsICovLAogCQkJCTQ5NDg0RkIz
MTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNHcmFkaWVudC5jcHAgKi8sCiAJCQkJNDk0ODRGQjQx
MDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc0dyYWRpZW50LmggKi8sCiAJCQkJNDk0ODRGQjUxMDJD
RjIzQzAwMTg3REQzIC8qIENhbnZhc0dyYWRpZW50LmlkbCAqLywKKwkJCQk0OUM3QjlCMTEwNDJE
MzJFMDAwOUQ0NDcgLyogQ2FudmFzTnVtYmVyQXJyYXkuY3BwICovLAorCQkJCTQ5QzdCOUIyMTA0
MkQzMkUwMDA5RDQ0NyAvKiBDYW52YXNOdW1iZXJBcnJheS5oICovLAorCQkJCTQ5QzdCOUIzMTA0
MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNOdW1iZXJBcnJheS5pZGwgKi8sCisJCQkJNDlDN0I5QjQx
MDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc09iamVjdC5jcHAgKi8sCisJCQkJNDlDN0I5QjUxMDQy
RDMyRjAwMDlENDQ3IC8qIENhbnZhc09iamVjdC5oICovLAogCQkJCTQ5NDg0RkI2MTAyQ0YyM0Mw
MDE4N0REMyAvKiBDYW52YXNQYXR0ZXJuLmNwcCAqLywKIAkJCQk0OTQ4NEZCNzEwMkNGMjNDMDAx
ODdERDMgLyogQ2FudmFzUGF0dGVybi5oICovLAogCQkJCTQ5NDg0RkI4MTAyQ0YyM0MwMDE4N0RE
MyAvKiBDYW52YXNQYXR0ZXJuLmlkbCAqLywKIAkJCQk0OTQ4NEZCOTEwMkNGMjNDMDAxODdERDMg
LyogQ2FudmFzUGl4ZWxBcnJheS5jcHAgKi8sCiAJCQkJNDk0ODRGQkExMDJDRjIzQzAwMTg3REQz
IC8qIENhbnZhc1BpeGVsQXJyYXkuaCAqLywKIAkJCQk0OTQ4NEZCQjEwMkNGMjNDMDAxODdERDMg
LyogQ2FudmFzUGl4ZWxBcnJheS5pZGwgKi8sCisJCQkJNDlDN0I5QjYxMDQyRDMyRjAwMDlENDQ3
IC8qIENhbnZhc1Byb2dyYW0uY3BwICovLAorCQkJCTQ5QzdCOUI3MTA0MkQzMkYwMDA5RDQ0NyAv
KiBDYW52YXNQcm9ncmFtLmggKi8sCisJCQkJNDlDN0I5QjgxMDQyRDMyRjAwMDlENDQ3IC8qIENh
bnZhc1Byb2dyYW0uaWRsICovLAorCQkJCTQ5QzdCOUI5MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52
YXNSZW5kZXJidWZmZXIuY3BwICovLAorCQkJCTQ5QzdCOUJBMTA0MkQzMkYwMDA5RDQ0NyAvKiBD
YW52YXNSZW5kZXJidWZmZXIuaCAqLywKKwkJCQk0OUM3QjlCQjEwNDJEMzJGMDAwOUQ0NDcgLyog
Q2FudmFzUmVuZGVyYnVmZmVyLmlkbCAqLywKKwkJCQk0OUM3QjlCQzEwNDJEMzJGMDAwOUQ0NDcg
LyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHAgKi8sCisJCQkJNDlDN0I5QkQxMDQyRDMyRjAw
MDlENDQ3IC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCAqLywKKwkJCQk0OUM3QjlCRTEwNDJE
MzJGMDAwOUQ0NDcgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5pZGwgKi8sCiAJCQkJNDk0ODRG
QkMxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgKi8sCiAJ
CQkJNDk0ODRGQkQxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5o
ICovLAogCQkJCTQ5NDg0RkJFMTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQuaWRsICovLAorCQkJCTQ5QzdCOUJGMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0QuY3BwICovLAorCQkJCTQ5QzdCOUMwMTA0MkQzMkYwMDA5RDQ0NyAvKiBD
YW52YXNSZW5kZXJpbmdDb250ZXh0M0QuaCAqLywKKwkJCQk0OUM3QjlDMTEwNDJEMzJGMDAwOUQ0
NDcgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmlkbCAqLywKKwkJCQk0OUM3QjlDMjEwNDJE
MzJGMDAwOUQ0NDcgLyogQ2FudmFzU2hhZGVyLmNwcCAqLywKKwkJCQk0OUM3QjlDMzEwNDJEMzJG
MDAwOUQ0NDcgLyogQ2FudmFzU2hhZGVyLmggKi8sCisJCQkJNDlDN0I5QzQxMDQyRDMyRjAwMDlE
NDQ3IC8qIENhbnZhc1NoYWRlci5pZGwgKi8sCiAJCQkJNDk0ODRGQkYxMDJDRjIzQzAwMTg3REQz
IC8qIENhbnZhc1N0eWxlLmNwcCAqLywKIAkJCQk0OTQ4NEZDMDEwMkNGMjNDMDAxODdERDMgLyog
Q2FudmFzU3R5bGUuaCAqLywKKwkJCQk0OUM3QjlDNTEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFz
VGV4dHVyZS5jcHAgKi8sCisJCQkJNDlDN0I5QzYxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1Rl
eHR1cmUuaCAqLywKKwkJCQk0OUM3QjlDNzEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzVGV4dHVy
ZS5pZGwgKi8sCiAJCQkpOwogCQkJbmFtZSA9IGNhbnZhczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7CkBAIC0xMjI1NSwxMiArMTI0MDksMzIgQEAKIAkJQTgzQjc5MDgwQ0NBRkYyQjAwMEIw
ODI1IC8qIEhUTUwgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAor
CQkJCTQ5QzdCOTgwMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc0J1ZmZlci5jcHAgKi8sCisJ
CQkJNDlDN0I5ODExMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzQnVmZmVyLmggKi8sCisJCQkJ
NDlDN0I5ODIxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzQnl0ZUFycmF5LmNwcCAqLywKKwkJ
CQk0OUM3Qjk4MzEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNCeXRlQXJyYXkuaCAqLywKKwkJ
CQk0OUM3Qjk4NDEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNGcmFtZWJ1ZmZlci5jcHAgKi8s
CisJCQkJNDlDN0I5ODUxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzRnJhbWVidWZmZXIuaCAq
LywKIAkJCQk2NURGMzIzMzA5RDFERTY1MDAwQkUzMjUgLyogSlNDYW52YXNHcmFkaWVudC5jcHAg
Ki8sCiAJCQkJNjVERjMyMzQwOUQxREU2NTAwMEJFMzI1IC8qIEpTQ2FudmFzR3JhZGllbnQuaCAq
LywKKwkJCQk0OUM3Qjk4NjEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNOdW1iZXJBcnJheS5j
cHAgKi8sCisJCQkJNDlDN0I5ODcxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzTnVtYmVyQXJy
YXkuaCAqLywKIAkJCQk2NURGMzIzNTA5RDFERTY1MDAwQkUzMjUgLyogSlNDYW52YXNQYXR0ZXJu
LmNwcCAqLywKIAkJCQk2NURGMzIzNjA5RDFERTY1MDAwQkUzMjUgLyogSlNDYW52YXNQYXR0ZXJu
LmggKi8sCisJCQkJNDlDN0I5ODgxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzUHJvZ3JhbS5j
cHAgKi8sCisJCQkJNDlDN0I5ODkxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzUHJvZ3JhbS5o
ICovLAorCQkJCTQ5QzdCOThBMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1JlbmRlcmJ1ZmZl
ci5jcHAgKi8sCisJCQkJNDlDN0I5OEIxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzUmVuZGVy
YnVmZmVyLmggKi8sCisJCQkJNDlDN0I5OEMxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dC5jcHAgKi8sCisJCQkJNDlDN0I5OEQxMDQyRDJEMzAwMDlENDQ3IC8qIEpT
Q2FudmFzUmVuZGVyaW5nQ29udGV4dC5oICovLAogCQkJCTY1REYzMjM3MDlEMURFNjUwMDBCRTMy
NSAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgKi8sCiAJCQkJNjVERjMyMzgwOUQx
REU2NTAwMEJFMzI1IC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmggKi8sCisJCQkJNDlD
N0Q0RkExMDQyRjk1RjAwMDlENDQ3IC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmNwcCAq
LywKKwkJCQk0OUM3Qjk4RTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0QuaCAqLywKKwkJCQk0OUM3Qjk4RjEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNTaGFk
ZXIuY3BwICovLAorCQkJCTQ5QzdCOTkwMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1NoYWRl
ci5oICovLAorCQkJCTQ5QzdCOTkxMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1RleHR1cmUu
Y3BwICovLAorCQkJCTQ5QzdCOTkyMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1RleHR1cmUu
aCAqLywKIAkJCQlCQzc3RDE2NTBGRjE5RjU1MDA3MDg4N0IgLyogSlNEYXRhR3JpZENvbHVtbi5j
cHAgKi8sCiAJCQkJQkM3N0QxNjYwRkYxOUY1NTAwNzA4ODdCIC8qIEpTRGF0YUdyaWRDb2x1bW4u
aCAqLywKIAkJCQlCQzc3RDE2NzBGRjE5RjU1MDA3MDg4N0IgLyogSlNEYXRhR3JpZENvbHVtbkxp
c3QuY3BwICovLApAQCAtMTM0NTksNiArMTM2MzMsOCBAQAogCQlCMjc1MzU0OTBCMDUzODE0MDAy
Q0U2NEYgLyogbWFjICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
KwkJCQk0OUM3QjlGRDEwNDJEMzhDMDAwOUQ0NDcgLyogQ2FudmFzM0RMYXllci5oICovLAorCQkJ
CTQ5QzdCOUZFMTA0MkQzOEMwMDA5RDQ0NyAvKiBDYW52YXMzRExheWVyLm1tICovLAogCQkJCUVE
RTNBNEZGMEM3QTQzMDYwMDk1NkEzNyAvKiBDb2xvck1hYy5oICovLAogCQkJCUIyNzUzNTRBMEIw
NTM4MTQwMDJDRTY0RiAvKiBDb2xvck1hYy5tbSAqLywKIAkJCQkzNzI0Q0E1NTBFNjhBN0U0MDBE
QjQzODQgLyogQ29yZVRleHRDb250cm9sbGVyLmNwcCAqLywKQEAgLTEzNDc2LDYgKzEzNjUyLDcg
QEAKIAkJCQlCMkFGRkM3QTBEMDBBNUMxMDAzMDA3NEQgLyogRm9udFBsYXRmb3JtRGF0YU1hYy5t
bSAqLywKIAkJCQlCMkFGRkM3QjBEMDBBNUMxMDAzMDA3NEQgLyogR2x5cGhQYWdlVHJlZU5vZGVN
YWMuY3BwICovLAogCQkJCUIyNzdCNDAzMEIyMkYzN0MwMDA0QkVDNiAvKiBHcmFwaGljc0NvbnRl
eHRNYWMubW0gKi8sCisJCQkJNDlDN0I5RkYxMDQyRDM4QzAwMDlENDQ3IC8qIEdyYXBoaWNzQ29u
dGV4dDNETWFjLmNwcCAqLywKIAkJCQkwRjU4MEIwNDBGMTJBMjU1MDA1MUQ2ODkgLyogR3JhcGhp
Y3NMYXllckNBLmggKi8sCiAJCQkJMEY1ODBCMDMwRjEyQTI1NDAwNTFENjg5IC8qIEdyYXBoaWNz
TGF5ZXJDQS5tbSAqLywKIAkJCQlCMjc1MzU4RDBCMDUzQTY2MDAyQ0U2NEYgLyogSWNvbk1hYy5t
bSAqLywKQEAgLTEzNTQ2LDYgKzEzNzIzLDcgQEAKIAkJCQlCMkEwMTU5MjBBRjZDRDUzMDA2QkNF
MEUgLyogR3JhcGhpY3NDb250ZXh0LmNwcCAqLywKIAkJCQlCMkEwMTU5MzBBRjZDRDUzMDA2QkNF
MEUgLyogR3JhcGhpY3NDb250ZXh0LmggKi8sCiAJCQkJQTg4RkUzMzMwRTVFRUU4NzAwOEQ4QzBG
IC8qIEdyYXBoaWNzQ29udGV4dFByaXZhdGUuaCAqLywKKwkJCQk0OUM3QjlGQjEwNDJEMzY1MDAw
OUQ0NDcgLyogR3JhcGhpY3NDb250ZXh0M0QuaCAqLywKIAkJCQkwRjU4MEIwOTBGMTJBMjY5MDA1
MUQ2ODkgLyogR3JhcGhpY3NMYXllci5jcHAgKi8sCiAJCQkJMEY1ODBCMEEwRjEyQTI2OTAwNTFE
Njg5IC8qIEdyYXBoaWNzTGF5ZXIuaCAqLywKIAkJCQkwRjU4MEIwQjBGMTJBMjY5MDA1MUQ2ODkg
LyogR3JhcGhpY3NMYXllckNsaWVudC5oICovLApAQCAtMTM4NTQsNyArMTQwMzIsNiBAQAogCQkJ
Y2hpbGRyZW4gPSAoCiAJCQkJNDE1QjdDNTQwRkY1OThFNjAwNjc3MEY3IC8qIEpTQWJzdHJhY3RX
b3JrZXJDdXN0b20uY3BwICovLAogCQkJCUJDMkVENkJCMEM2QkQyRjAwMDkyMEJGRiAvKiBKU0F0
dHJDdXN0b20uY3BwICovLAotCQkJCTFBOUVGNDU2MEExQjk1N0QwMDMzMkI2MyAvKiBKU0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAgKi8sCiAJCQkJOTNCQTU5QjEwRjJBQTVGRTAw
OEU4RTk5IC8qIEpTQ0RBVEFTZWN0aW9uQ3VzdG9tLmNwcCAqLywKIAkJCQlCQ0E4M0U1MTBEN0NF
MjA1MDAzNDIxQTggLyogSlNDbGlwYm9hcmRDdXN0b20uY3BwICovLAogCQkJCUMwREZDODZGMERC
Njg0MUEwMDNFQUU3QyAvKiBKU0NvbnNvbGVDdXN0b20uY3BwICovLApAQCAtMTM4NjMsNiArMTQw
NDAsMTAgQEAKIAkJCQk5MzkyMjYyRTEwMzIxMDg0MDA2RTdENUQgLyogSlNDU1NSdWxlTGlzdEN1
c3RvbS5jcHAgKi8sCiAJCQkJQkM1ODI1RjIwQzBCODkzODAwNTNGMUI1IC8qIEpTQ1NTU3R5bGVE
ZWNsYXJhdGlvbkN1c3RvbS5jcHAgKi8sCiAJCQkJQkMyMEZCN0UwQzBFOEU2QzAwRDE0NDdGIC8q
IEpTQ1NTVmFsdWVDdXN0b20uY3BwICovLAorCQkJCTQ5QzdCOTdDMTA0MkQyMDgwMDA5RDQ0NyAv
KiBKU0NhbnZhc051bWJlckFycmF5Q3VzdG9tLmNwcCAqLywKKwkJCQk0OTgzQTk2RjEwNDM1RTkw
MDBEQjcwRjkgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCAqLywKKwkJCQkx
QTlFRjQ1NjBBMUI5NTdEMDAzMzJCNjMgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0
b20uY3BwICovLAorCQkJCTQ5QzdCOTdEMTA0MkQyMDgwMDA5RDQ0NyAvKiBKU0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQzREN1c3RvbS5jcHAgKi8sCiAJCQkJRkU4MEQ3QTIwRTlDMUVEMjAwMEQ2Rjc1
IC8qIEpTQ3VzdG9tUG9zaXRpb25DYWxsYmFjay5jcHAgKi8sCiAJCQkJRkU4MEQ3QTMwRTlDMUVE
MjAwMEQ2Rjc1IC8qIEpTQ3VzdG9tUG9zaXRpb25DYWxsYmFjay5oICovLAogCQkJCUZFODBEN0E0
MEU5QzFFRDIwMDBENkY3NSAvKiBKU0N1c3RvbVBvc2l0aW9uRXJyb3JDYWxsYmFjay5jcHAgKi8s
CkBAIC0xMzg4Miw4ICsxNDA2Myw3IEBACiAJCQkJQkM3N0QxNTEwRkYxOUM3MzAwNzA4ODdCIC8q
IEpTRGF0YUdyaWRDb2x1bW5MaXN0Q3VzdG9tLmNwcCAqLywKIAkJCQk0MTYyQTQ1MzEwMTE0NUUz
MDBERkYzRUQgLyogSlNEZWRpY2F0ZWRXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcCAqLywKIAkJCQkz
MzUwM0NCRjEwMTc5QzFBMDAzQjQ3RTEgLyogSlNEZXNrdG9wTm90aWZpY2F0aW9uc0N1c3RvbS5j
cHAgKi8sCi0JCQkJOTI5MjY0NzYwQjYxRkM3MjAwQjQxRDM0IC8qIEpTRG9jdW1lbnRDdXN0b20u
Y3BwICovLAotCQkJCTkyOTI2NDc2MEI2MUZDNzIwMEI0MUQzNCAvKiBKU0RvY3VtZW50Q3VzdG9t
LmNwcCAqLywKKwkJCQk0OUM3QkE4QzEwNDJGNUIxMDAwOUQ0NDcgLyogSlNEb2N1bWVudEN1c3Rv
bS5jcHAgKi8sCiAJCQkJQkMxREVBNEUwRTI2OEVCNjAwODNBNzNGIC8qIEpTRG9jdW1lbnRGcmFn
bWVudEN1c3RvbS5jcHAgKi8sCiAJCQkJQkMxREVBNEUwRTI2OEVCNjAwODNBNzNGIC8qIEpTRG9j
dW1lbnRGcmFnbWVudEN1c3RvbS5jcHAgKi8sCiAJCQkJMUFDMjI2MTYwREI2OUY3NDAwODlCNjY5
IC8qIEpTRE9NQXBwbGljYXRpb25DYWNoZUN1c3RvbS5jcHAgKi8sCkBAIC0xNzMzMCw2ICsxNzUx
MCwyOSBAQAogCQkJCUJDRkE5MzA4MTAzMzMxOTMwMDdCMjVEMSAvKiBSZW5kZXJPdmVyZmxvdy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMDAxNDYyOEIxMDNDRDFERTAwMEIyMERCIC8qIE9yaWdpbkFj
Y2Vzc0VudHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQlCNTFCRjZGMTEwMkM5RTU5MDAwMkMxNUEg
LyogU1FMVHJhbnNhY3Rpb25DbGllbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ5QzdCOTk0MTA0
MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc0J1ZmZlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDlD
N0I5OTYxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzQnl0ZUFycmF5LmggaW4gSGVhZGVycyAq
LywKKwkJCQk0OUM3Qjk5ODEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNGcmFtZWJ1ZmZlci5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNDlDN0I5OUExMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFz
TnVtYmVyQXJyYXkuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ5QzdCOTlDMTA0MkQyRDMwMDA5RDQ0
NyAvKiBKU0NhbnZhc1Byb2dyYW0uaCBpbiBIZWFkZXJzICovLAorCQkJCTQ5QzdCOTlFMTA0MkQy
RDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1JlbmRlcmJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NDlDN0I5QTAxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJNDlDN0I5QTExMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDNELmggaW4gSGVhZGVycyAqLywKKwkJCQk0OUM3QjlBMzEwNDJEMkQzMDAw
OUQ0NDcgLyogSlNDYW52YXNTaGFkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ5QzdCOUE1MTA0
MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1RleHR1cmUuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ5
QzdCOUM5MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNCdWZmZXIuaCBpbiBIZWFkZXJzICovLAor
CQkJCTQ5QzdCOUNDMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNCeXRlQXJyYXkuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTQ5QzdCOUNGMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNGcmFtZWJ1ZmZl
ci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDlDN0I5RDIxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZh
c051bWJlckFycmF5LmggaW4gSGVhZGVycyAqLywKKwkJCQk0OUM3QjlENTEwNDJEMzJGMDAwOUQ0
NDcgLyogQ2FudmFzT2JqZWN0LmggaW4gSGVhZGVycyAqLywKKwkJCQk0OUM3QjlENzEwNDJEMzJG
MDAwOUQ0NDcgLyogQ2FudmFzUHJvZ3JhbS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDlDN0I5REEx
MDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1JlbmRlcmJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNDlDN0I5REQxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCBp
biBIZWFkZXJzICovLAorCQkJCTQ5QzdCOUUwMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0QuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ5QzdCOUUzMTA0MkQzMkYwMDA5
RDQ0NyAvKiBDYW52YXNTaGFkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ5QzdCOUU2MTA0MkQz
MkYwMDA5RDQ0NyAvKiBDYW52YXNUZXh0dXJlLmggaW4gSGVhZGVycyAqLywKKwkJCQk0OUM3QjlG
QzEwNDJEMzY1MDAwOUQ0NDcgLyogR3JhcGhpY3NDb250ZXh0M0QuaCBpbiBIZWFkZXJzICovLAor
CQkJCTQ5QzdCQTAwMTA0MkQzOEMwMDA5RDQ0NyAvKiBDYW52YXMzRExheWVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsK
IAkJfTsKQEAgLTE3NDM1LDYgKzE3NjM4LDE2IEBACiAJCQkJNDk0ODRGQzYxMDJDRjIzQzAwMTg3
REQzIC8qIENhbnZhc1BhdHRlcm4uaWRsIGluIFJlc291cmNlcyAqLywKIAkJCQk0OTQ4NEZDOTEw
MkNGMjNDMDAxODdERDMgLyogQ2FudmFzUGl4ZWxBcnJheS5pZGwgaW4gUmVzb3VyY2VzICovLAog
CQkJCTQ5NDg0RkNDMTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQu
aWRsIGluIFJlc291cmNlcyAqLywKKwkJCQk0OUM3QjlDQTEwNDJEMzJGMDAwOUQ0NDcgLyogQ2Fu
dmFzQnVmZmVyLmlkbCBpbiBSZXNvdXJjZXMgKi8sCisJCQkJNDlDN0I5Q0QxMDQyRDMyRjAwMDlE
NDQ3IC8qIENhbnZhc0J5dGVBcnJheS5pZGwgaW4gUmVzb3VyY2VzICovLAorCQkJCTQ5QzdCOUQw
MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNGcmFtZWJ1ZmZlci5pZGwgaW4gUmVzb3VyY2VzICov
LAorCQkJCTQ5QzdCOUQzMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNOdW1iZXJBcnJheS5pZGwg
aW4gUmVzb3VyY2VzICovLAorCQkJCTQ5QzdCOUQ4MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNQ
cm9ncmFtLmlkbCBpbiBSZXNvdXJjZXMgKi8sCisJCQkJNDlDN0I5REIxMDQyRDMyRjAwMDlENDQ3
IC8qIENhbnZhc1JlbmRlcmJ1ZmZlci5pZGwgaW4gUmVzb3VyY2VzICovLAorCQkJCTQ5QzdCOURF
MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0LmlkbCBpbiBSZXNvdXJj
ZXMgKi8sCisJCQkJNDlDN0I5RTExMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRC5pZGwgaW4gUmVzb3VyY2VzICovLAorCQkJCTQ5QzdCOUU0MTA0MkQzMkYwMDA5RDQ0
NyAvKiBDYW52YXNTaGFkZXIuaWRsIGluIFJlc291cmNlcyAqLywKKwkJCQk0OUM3QjlFNzEwNDJE
MzJGMDAwOUQ0NDcgLyogQ2FudmFzVGV4dHVyZS5pZGwgaW4gUmVzb3VyY2VzICovLAogCQkJKTsK
IAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMTgz
NDksNyArMTg1NjIsNiBAQAogCQkJCTQxNjJBNDU0MTAxMTQ1RTMwMERGRjNFRCAvKiBKU0RlZGlj
YXRlZFdvcmtlckNvbnRleHRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzM1MDNDQzAx
MDE3OUMxQTAwM0I0N0UxIC8qIEpTRGVza3RvcE5vdGlmaWNhdGlvbnNDdXN0b20uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNjU5RERDODIwOUUxOThCQTAwMUJGM0M2IC8qIEpTRG9jdW1lbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCi0JCQkJOTI5MjY0NzcwQjYxRkM3MjAwQjQxRDM0IC8qIEpTRG9jdW1l
bnRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE0OTRFREUwQTEyM0Y0QzAwRkRBRkMx
IC8qIEpTRG9jdW1lbnRGcmFnbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzFERUE0RjBF
MjY4RUI2MDA4M0E3M0YgLyogSlNEb2N1bWVudEZyYWdtZW50Q3VzdG9tLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTY1REYzMUY1MDlEMUNDNjAwMDBCRTMyNSAvKiBKU0RvY3VtZW50VHlwZS5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTE5Mzk4LDYgKzE5NjEwLDMzIEBACiAJCQkJQjVDMTEyM0IxMDJC
NkM0NjAwMDk2NTc4IC8qIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMDAxNDYyOEExMDNDRDFERTAwMEIyMERCIC8qIE9yaWdpbkFjY2Vzc0VudHJ5LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUI1MUJGNkYwMTAyQzlFNTkwMDAyQzE1QSAvKiBTUUxUcmFu
c2FjdGlvbkNsaWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0OUM3Qjk3RTEwNDJEMjA4MDAw
OUQ0NDcgLyogSlNDYW52YXNOdW1iZXJBcnJheUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQk0OUM3Qjk3RjEwNDJEMjA4MDAwOUQ0NDcgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RD
dXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDlDN0I5OTMxMDQyRDJEMzAwMDlENDQ3IC8q
IEpTQ2FudmFzQnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQ5QzdCOTk1MTA0MkQyRDMw
MDA5RDQ0NyAvKiBKU0NhbnZhc0J5dGVBcnJheS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0OUM3
Qjk5NzEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNGcmFtZWJ1ZmZlci5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQk0OUM3Qjk5OTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNOdW1iZXJBcnJh
eS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0OUM3Qjk5QjEwNDJEMkQzMDAwOUQ0NDcgLyogSlND
YW52YXNQcm9ncmFtLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQ5QzdCOTlEMTA0MkQyRDMwMDA5
RDQ0NyAvKiBKU0NhbnZhc1JlbmRlcmJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0OUM3
Qjk5RjEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0LmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTQ5QzdCOUEyMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1NoYWRl
ci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0OUM3QjlBNDEwNDJEMkQzMDAwOUQ0NDcgLyogSlND
YW52YXNUZXh0dXJlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQ5QzdCOUM4MTA0MkQzMkYwMDA5
RDQ0NyAvKiBDYW52YXNCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDlDN0I5Q0IxMDQy
RDMyRjAwMDlENDQ3IC8qIENhbnZhc0J5dGVBcnJheS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0
OUM3QjlDRTEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzRnJhbWVidWZmZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJNDlDN0I5RDExMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc051bWJlckFycmF5
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQ5QzdCOUQ0MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52
YXNPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDlDN0I5RDYxMDQyRDMyRjAwMDlENDQ3
IC8qIENhbnZhc1Byb2dyYW0uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDlDN0I5RDkxMDQyRDMy
RjAwMDlENDQ3IC8qIENhbnZhc1JlbmRlcmJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0
OUM3QjlEQzEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQk0OUM3QjlERjEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDNELmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQ5QzdCOUUyMTA0MkQzMkYwMDA5
RDQ0NyAvKiBDYW52YXNTaGFkZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDlDN0I5RTUxMDQy
RDMyRjAwMDlENDQ3IC8qIENhbnZhc1RleHR1cmUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDlD
N0JBMDExMDQyRDM4QzAwMDlENDQ3IC8qIENhbnZhczNETGF5ZXIubW0gaW4gU291cmNlcyAqLywK
KwkJCQk0OUM3QkEwMjEwNDJEMzhDMDAwOUQ0NDcgLyogR3JhcGhpY3NDb250ZXh0M0RNYWMuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJNDlDN0JBOEQxMDQyRjVCMTAwMDlENDQ3IC8qIEpTRG9jdW1l
bnRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDlDN0Q0RkIxMDQyRjk1RjAwMDlENDQ3
IC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQ5
ODNBOTcwMTA0MzVFOTAwMERCNzBGOSAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHRDdXN0b20u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJv
Y2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAkocmV2aXNpb24gNDc3MTkp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsMjcgKzY3LDMxIEBAIHN0YXRpYyBQYXNzUmVmUHRy
PENhbnZhc1N0eWxlPiB0b0hUTUxDYW4KIAogSlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6c3Ryb2tlU3R5bGUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewotICAgIHJldHVybiB0
b0pTKGV4ZWMsIGltcGwoKS0+c3Ryb2tlU3R5bGUoKSk7ICAgICAgICAKKyAgICBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQqIGNvbnRleHQgPSBzdGF0aWNfY2FzdDxDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQqPihpbXBsKCkpOworICAgIHJldHVybiB0b0pTKGV4ZWMsIGNvbnRleHQtPnN0cm9rZVN0
eWxlKCkpOyAgICAgICAgCiB9CiAKIHZvaWQgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNl
dFN0cm9rZVN0eWxlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBpbXBs
KCktPnNldFN0cm9rZVN0eWxlKHRvSFRNTENhbnZhc1N0eWxlKGV4ZWMsIHZhbHVlKSk7CisgICAg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEKj4oaW1wbCgpKTsKKyAgICBjb250ZXh0LT5zZXRTdHJva2VTdHlsZSh0
b0hUTUxDYW52YXNTdHlsZShleGVjLCB2YWx1ZSkpOwogfQogCiBKU1ZhbHVlIEpTQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjpmaWxsU3R5bGUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewotICAg
IHJldHVybiB0b0pTKGV4ZWMsIGltcGwoKS0+ZmlsbFN0eWxlKCkpOworICAgIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRCogY29udGV4dCA9IHN0YXRpY19jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRCo+KGltcGwoKSk7CisgICAgcmV0dXJuIHRvSlMoZXhlYywgY29udGV4dC0+ZmlsbFN0eWxl
KCkpOwogfQogCiB2b2lkIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGaWxsU3R5bGUo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIGltcGwoKS0+c2V0RmlsbFN0
eWxlKHRvSFRNTENhbnZhc1N0eWxlKGV4ZWMsIHZhbHVlKSk7CisgICAgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEKiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
Kj4oaW1wbCgpKTsKKyAgICBjb250ZXh0LT5zZXRGaWxsU3R5bGUodG9IVE1MQ2FudmFzU3R5bGUo
ZXhlYywgdmFsdWUpKTsKIH0KIAogSlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
c2V0RmlsbENvbG9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAg
ICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIGNvbnRleHQgPSBpbXBsKCk7CisgICAgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEKiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEKj4oaW1wbCgpKTsKIAogICAgIC8vIHN0cmluZyBhcmcgPSBuYW1lZCBjb2xvcgog
ICAgIC8vIG51bWJlciBhcmcgPSBncmF5IGNvbG9yCkBAIC0xMjQsNyArMTI4LDcgQEAgSlNWYWx1
ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0RgogCiBKU1ZhbHVlIEpTQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjpzZXRTdHJva2VDb2xvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCiB7IAotICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogY29udGV4dCA9
IGltcGwoKTsKKyAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIGNvbnRleHQgPSBzdGF0aWNf
Y2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqPihpbXBsKCkpOwogCiAgICAgLy8gc3RyaW5n
IGFyZyA9IG5hbWVkIGNvbG9yCiAgICAgLy8gbnVtYmVyIGFyZyA9IGdyYXkgY29sb3IKQEAgLTE2
Miw3ICsxNjYsNyBAQCBKU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTCiAK
IEpTVmFsdWUgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnN0cm9rZVJlY3QoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogeyAKLSAgICBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQqIGNvbnRleHQgPSBpbXBsKCk7CisgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBj
b250ZXh0ID0gc3RhdGljX2Nhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKj4oaW1wbCgpKTsK
ICAgICAKICAgICBpZiAoYXJncy5zaXplKCkgPD0gNCkKICAgICAgICAgY29udGV4dC0+c3Ryb2tl
UmVjdChhcmdzLmF0KDApLnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQoMSkudG9GbG9hdChleGVjKSwK
QEAgLTE3Niw3ICsxODAsNyBAQCBKU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpz
dHJvCiAKIEpTVmFsdWUgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFnZShFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7IAotICAgIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRCogY29udGV4dCA9IGltcGwoKTsKKyAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQqIGNvbnRleHQgPSBzdGF0aWNfY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqPihpbXBs
KCkpOwogCiAgICAgLy8gRHJhd0ltYWdlIGhhcyB0aHJlZSB2YXJpYW50czoKICAgICAvLyAgICAg
ZHJhd0ltYWdlKGltZywgZHgsIGR5KQpAQCAtMjY0LDcgKzI2OCw3IEBAIEpTVmFsdWUgSlNDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXcKIAogSlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6ZHJhd0ltYWdlRnJvbVJlY3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQogeyAKLSAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIGNvbnRleHQgPSBpbXBs
KCk7CisgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKj4oaW1wbCgpKTsKICAgICAKICAgICBKU1ZhbHVlIHZh
bHVlID0gYXJncy5hdCgwKTsKICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpCkBAIC0yODQsNyAr
Mjg4LDcgQEAgSlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhdwogCiBKU1Zh
bHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTaGFkb3coRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQogeyAKLSAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQq
IGNvbnRleHQgPSBpbXBsKCk7CisgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBjb250ZXh0
ID0gc3RhdGljX2Nhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKj4oaW1wbCgpKTsKIAogICAg
IHN3aXRjaCAoYXJncy5zaXplKCkpIHsKICAgICAgICAgY2FzZSAzOgpAQCAtMzMwLDcgKzMzNCw3
IEBAIEpTVmFsdWUgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFMKIAogSlNWYWx1ZSBK
U0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlUGF0dGVybihFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7IAotICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCog
Y29udGV4dCA9IGltcGwoKTsKKyAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIGNvbnRleHQg
PSBzdGF0aWNfY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqPihpbXBsKCkpOwogCiAgICAg
SlNWYWx1ZSB2YWx1ZSA9IGFyZ3MuYXQoMCk7CiAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKQpA
QCAtMzYyLDcgKzM2Niw3IEBAIEpTVmFsdWUgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnB1
dEkKICAgICAvLyBwdXRJbWFnZURhdGEgaGFzIHR3byB2YXJpYW50cwogICAgIC8vIHB1dEltYWdl
RGF0YShJbWFnZURhdGEsIHgsIHkpCiAgICAgLy8gcHV0SW1hZ2VEYXRhKEltYWdlRGF0YSwgeCwg
eSwgZGlydHlYLCBkaXJ0eVksIGRpcnR5V2lkdGgsIGRpcnR5SGVpZ2h0KQotICAgIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRCogY29udGV4dCA9IGltcGwoKTsKKyAgICBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQqIGNvbnRleHQgPSBzdGF0aWNfY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQq
PihpbXBsKCkpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgaWYgKGFyZ3Muc2l6
ZSgpID49IDcpCkBAIC0zNzcsNyArMzgxLDcgQEAgSlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6cHV0SQogCiBKU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpmaWxs
VGV4dChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7IAotICAgIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRCogY29udGV4dCA9IGltcGwoKTsKKyAgICBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQqIGNvbnRleHQgPSBzdGF0aWNfY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQqPihpbXBsKCkpOwogCiAgICAgLy8gc3RyaW5nIGFyZyA9IHRleHQgdG8gZHJhdwogICAgIC8v
IG51bWJlciBhcmcgPSB4CkBAIC0zOTUsNyArMzk5LDcgQEAgSlNWYWx1ZSBKU0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6ZmlsbAogCiBKU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpzdHJva2VUZXh0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsgCi0g
ICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBjb250ZXh0ID0gaW1wbCgpOworICAgIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRCogY29udGV4dCA9IHN0YXRpY19jYXN0PENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRCo+KGltcGwoKSk7CiAKICAgICAvLyBzdHJpbmcgYXJnID0gdGV4dCB0byBkcmF3
CiAgICAgLy8gbnVtYmVyIGFyZyA9IHgKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01C
aW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGlu
Zy5jcHAJKHJldmlzaW9uIDQ3NzE5KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRp
bmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTgsNyArMjk4LDcgQEAgc3RhdGljIGlubGluZSBi
b29sIGlzT2JzZXJ2YWJsZVRocm91Z2hETwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSktPmhhc1RhZ05h
bWUoY2FudmFzVGFnKSkgewotICAgICAgICAgICAgICAgIGlmIChDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQqIGNvbnRleHQgPSBzdGF0aWNfY2FzdDxIVE1MQ2FudmFzRWxlbWVudCo+KG5vZGUpLT5y
ZW5kZXJpbmdDb250ZXh0MkQoKSkgeworICAgICAgICAgICAgICAgIGlmIChDYW52YXNSZW5kZXJp
bmdDb250ZXh0KiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8SFRNTENhbnZhc0VsZW1lbnQqPihub2Rl
KS0+cmVuZGVyaW5nQ29udGV4dCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChET01PYmpl
Y3QqIHdyYXBwZXIgPSBnZXRDYWNoZWRET01PYmplY3RXcmFwcGVyKCpqc05vZGUtPmdsb2JhbE9i
amVjdCgpLT5nbG9iYWxEYXRhKCksIGNvbnRleHQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAod3JhcHBlci0+aGFzQ3VzdG9tUHJvcGVydGllcygpKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3Vt
ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1l
bnRDdXN0b20uY3BwCShyZXZpc2lvbiA0NzcxOSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNE
b2N1bWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDEwIEBACiAjaW5j
bHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkhUTUxE
b2N1bWVudC5oIgorI2luY2x1ZGUgIkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgiCisjaWYg
RU5BQkxFKDNEX0NBTlZBUykKKyNpbmNsdWRlICJKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5o
IgorI2VuZGlmCiAjaW5jbHVkZSAiSlNET01XaW5kb3dDdXN0b20uaCIKICNpbmNsdWRlICJKU0hU
TUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIkpTTG9jYXRpb24uaCIKQEAgLTM1LDYgKzM5LDggQEAK
ICNpbmNsdWRlICJTVkdEb2N1bWVudC5oIgogI2VuZGlmCiAKKyNpbmNsdWRlIDx3dGYvR2V0UHRy
Lmg+CisKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNw
cAkocmV2aXNpb24gNDc3MTkpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENhbnZhc0Vs
ZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwyOCArMzAsMTMgQEAKICNpbmNs
dWRlICJKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIgogI2lmIEVOQUJMRSgzRF9DQU5WQVMp
CiAjaW5jbHVkZSAiSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuaCIKLSNpbmNsdWRlIDx3dGYv
R2V0UHRyLmg+CiAjZW5kaWYKKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAKIHVzaW5nIG5hbWVz
cGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotI2lmIEVOQUJMRSgzRF9DQU5WQVMp
Ci1KU1ZhbHVlIEpTSFRNTENhbnZhc0VsZW1lbnQ6OmdldENvbnRleHQoSlNDOjpFeGVjU3RhdGUq
IGV4ZWMsIEpTQzo6QXJnTGlzdCBjb25zdCYgYXJncykKLXsKLSAgICBIVE1MQ2FudmFzRWxlbWVu
dCogaW1wID0gc3RhdGljX2Nhc3Q8SFRNTENhbnZhc0VsZW1lbnQqPihpbXBsKCkpOwotICAgIGNv
bnN0IFVTdHJpbmcmIGNvbnRleHRJZCA9IGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyk7Ci0KLSAg
ICBpZiAoY29udGV4dElkID09ICIyZCIpCi0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIFdURjo6
Z2V0UHRyKHJlaW50ZXJwcmV0X2Nhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKj4oaW1wLT5n
ZXRDb250ZXh0KGNvbnRleHRJZCkpKSk7Ci0gICAgaWYgKGNvbnRleHRJZCA9PSAid2Via2l0LTNk
IikKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgV1RGOjpnZXRQdHIocmVpbnRlcnByZXRfY2Fz
dDxDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QqPihpbXAtPmdldENvbnRleHQoY29udGV4dElkKSkp
KTsKLSAgICAKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLSNlbmRpZgotCiB2b2lkIEpT
SFRNTENhbnZhc0VsZW1lbnQ6Om1hcmtDaGlsZHJlbihNYXJrU3RhY2smIG1hcmtTdGFjaykKIHsK
ICAgICBCYXNlOjptYXJrQ2hpbGRyZW4obWFya1N0YWNrKTsKQEAgLTU5LDcgKzQ0LDcgQEAgdm9p
ZCBKU0hUTUxDYW52YXNFbGVtZW50OjptYXJrQ2hpbGRyZW4oTQogICAgIEhUTUxDYW52YXNFbGVt
ZW50KiBjYW52YXMgPSBzdGF0aWNfY2FzdDxIVE1MQ2FudmFzRWxlbWVudCo+KGltcGwoKSk7CiAg
ICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gKkhlYXA6OmhlYXAodGhpcyktPmdsb2JhbERh
dGEoKTsKIAotICAgIG1hcmtET01PYmplY3RXcmFwcGVyKG1hcmtTdGFjaywgZ2xvYmFsRGF0YSwg
Y2FudmFzLT5yZW5kZXJpbmdDb250ZXh0MkQoKSk7CisgICAgbWFya0RPTU9iamVjdFdyYXBwZXIo
bWFya1N0YWNrLCBnbG9iYWxEYXRhLCBjYW52YXMtPnJlbmRlcmluZ0NvbnRleHQoKSk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDQ3NzE5KQor
KysgV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzMyLDcgKzQz
MzIsNyBAQCB2b2lkIERvY3VtZW50OjpkZXRhY2hSYW5nZShSYW5nZSogcmFuZ2UpCiAgICAgbV9y
YW5nZXMucmVtb3ZlKHJhbmdlKTsKIH0KIAotQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBEb2N1
bWVudDo6Z2V0Q1NTQ2FudmFzQ29udGV4dChjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQorQ2FudmFzUmVuZGVyaW5nQ29udGV4dCog
RG9jdW1lbnQ6OmdldENTU0NhbnZhc0NvbnRleHQoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBT
dHJpbmcmIG5hbWUsIGludCB3aWR0aCwgaW50IGhlaWdodCkKIHsKICAgICBIVE1MQ2FudmFzRWxl
bWVudCogcmVzdWx0ID0gZ2V0Q1NTQ2FudmFzRWxlbWVudChuYW1lKTsKICAgICBpZiAoIXJlc3Vs
dCkKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9k
b20vRG9jdW1lbnQuaAkocmV2aXNpb24gNDc3MTkpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICBjbGFzcyBDREFUQVNlY3Rpb247CiAgICAgY2xhc3MgQ2FjaGVkQ1NTU3R5bGVTaGVldDsKICAg
ICBjbGFzcyBDYWNoZWRTY3JpcHQ7Ci0gICAgY2xhc3MgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OworICAgIGNsYXNzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQ7CiAgICAgY2xhc3MgQ2hhcmFjdGVy
RGF0YTsKICAgICBjbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9uOwogICAgIGNsYXNzIENTU1N0eWxl
U2VsZWN0b3I7CkBAIC03NTksNyArNzU5LDcgQEAgcHVibGljOgogICAgIERPTVNlbGVjdGlvbiog
Z2V0U2VsZWN0aW9uKCkgY29uc3Q7CiAgICAgCiAgICAgLy8gRXh0ZW5zaW9uIGZvciBtYW5pcHVs
YXRpbmcgY2FudmFzIGRyYXdpbmcgY29udGV4dHMgZm9yIHVzZSBpbiBDU1MKLSAgICBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQqIGdldENTU0NhbnZhc0NvbnRleHQoY29uc3QgU3RyaW5nJiB0eXBl
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGludCB3aWR0aCwgaW50IGhlaWdodCk7CisgICAgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dCogZ2V0Q1NTQ2FudmFzQ29udGV4dChjb25zdCBTdHJpbmcmIHR5cGUs
IGNvbnN0IFN0cmluZyYgbmFtZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKICAgICBIVE1MQ2Fu
dmFzRWxlbWVudCogZ2V0Q1NTQ2FudmFzRWxlbWVudChjb25zdCBTdHJpbmcmIG5hbWUpOwogCiAg
ICAgYm9vbCBpc0ROU1ByZWZldGNoRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNETlNQcmVm
ZXRjaEVuYWJsZWQ7IH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkocmV2aXNp
b24gNDc3MTkpCisrKyBXZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiQ2FudmFzR3JhZGllbnQuaCIKICNp
bmNsdWRlICJDYW52YXNQYXR0ZXJuLmgiCiAjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJELmgiCisjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmgiCiAjaW5jbHVkZSAi
Q2FudmFzU3R5bGUuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJEb2N1bWVudC5o
IgpAQCAtMTQ2LDE3ICsxNDcsMzYgQEAgU3RyaW5nIEhUTUxDYW52YXNFbGVtZW50Ojp0b0RhdGFV
UkwoY29ucwogCiBDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBIVE1MQ2FudmFzRWxlbWVudDo6Z2V0
Q29udGV4dChjb25zdCBTdHJpbmcmIHR5cGUpCiB7CisgICAgLy8gQSBDYW52YXMgY2FuIGVpdGhl
ciBiZSAiMkQiIG9yICIzRCIgbmV2ZXIgYm90aC4gSWYgeW91IHJlcXVlc3QgYSAyRCBjYW52YXMg
YW5kIHRoZSBleGlzdGluZworICAgIC8vIGNvbnRleHQgaXMgYWxyZWFkeSAyRCwganVzdCByZXR1
cm4gdGhhdC4gSWYgdGhlIGV4aXN0aW5nIGNvbnRleHQgaXMgM0QsIHRoZW4gZGVzdHJveSBpdAor
ICAgIC8vIGJlZm9yZSBjcmVhdGluZyBhIG5ldyAyRCBjb250ZXh0LiBWaWNlIHZlcnNhIHdoZW4g
cmVxdWVzdGluZyBhIDNEIGNhbnZhcy4gUmVxdWVzdGluZyBhCisgICAgLy8gY29udGV4dCB3aXRo
IGFueSBvdGhlciB0eXBlIHN0cmluZyB3aWxsIGRlc3Ryb3kgYW55IGV4aXN0aW5nIGNvbnRleHQu
CiAgICAgaWYgKHR5cGUgPT0gIjJkIikgewotICAgICAgICBpZiAoIW1fMkRDb250ZXh0KQotICAg
ICAgICAgICAgbV8yRENvbnRleHQuc2V0KG5ldyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQodGhp
cykpOwotICAgICAgICByZXR1cm4gbV8yRENvbnRleHQuZ2V0KCk7CisgICAgICAgIGlmIChtX2Nv
bnRleHQgJiYgIW1fY29udGV4dC0+aXMyZCgpKQorICAgICAgICAgICAgbV9jb250ZXh0LmNsZWFy
KCk7CisgICAgICAgICAgICBpZiAoIW1fY29udGV4dCkKKyAgICAgICAgICAgICAgICBtX2NvbnRl
eHQuc2V0KG5ldyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQodGhpcykpOwogICAgIH0KLSAgICBy
ZXR1cm4gMDsKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKSAgICAKKyAgICBlbHNlIGlmICh0eXBlID09
ICJ3ZWJraXQtM2QiKSB7CisgICAgICAgIGlmIChtX2NvbnRleHQgJiYgIW1fY29udGV4dC0+aXMz
ZCgpKQorICAgICAgICAgICAgbV9jb250ZXh0LmNsZWFyKCk7CisgICAgICAgIGlmICghbV9jb250
ZXh0KSB7CisgICAgICAgICAgICBtX2NvbnRleHQuc2V0KG5ldyBDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0QodGhpcykpOworICAgICAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAg
ICB9CisgICAgfQorI2VuZGlmCisgICAgZWxzZSBpZiAobV9jb250ZXh0LmdldCgpKQorICAgICAg
ICBtX2NvbnRleHQuY2xlYXIoKTsKKyAgICAKKyAgICByZXR1cm4gbV9jb250ZXh0LmdldCgpOwog
fQogCiB2b2lkIEhUTUxDYW52YXNFbGVtZW50Ojp3aWxsRHJhdyhjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCiB7Ci0gICAgbV9pbWFnZUJ1ZmZlci0+Y2xlYXJJbWFnZSgpOworICAgIGlmIChtX2ltYWdl
QnVmZmVyKQorICAgICAgICBtX2ltYWdlQnVmZmVyLT5jbGVhckltYWdlKCk7CiAgICAgCiAgICAg
aWYgKFJlbmRlckJveCogcm8gPSByZW5kZXJCb3goKSkgewogICAgICAgICBGbG9hdFJlY3QgZGVz
dFJlY3QgPSByby0+Y29udGVudEJveFJlY3QoKTsKQEAgLTE5Miw4ICsyMTIsOCBAQCB2b2lkIEhU
TUxDYW52YXNFbGVtZW50OjpyZXNldCgpCiAgICAgYm9vbCBoYWRJbWFnZUJ1ZmZlciA9IG1fY3Jl
YXRlZEltYWdlQnVmZmVyOwogICAgIG1fY3JlYXRlZEltYWdlQnVmZmVyID0gZmFsc2U7CiAgICAg
bV9pbWFnZUJ1ZmZlci5jbGVhcigpOwotICAgIGlmIChtXzJEQ29udGV4dCkKLSAgICAgICAgbV8y
RENvbnRleHQtPnJlc2V0KCk7CisgICAgaWYgKG1fY29udGV4dCAmJiBtX2NvbnRleHQtPmlzMmQo
KSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKj4obV9jb250
ZXh0LmdldCgpKS0+cmVzZXQoKTsKIAogICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0g
dGhpcy0+cmVuZGVyZXIoKSkgewogICAgICAgICBpZiAobV9yZW5kZXJlcklzQ2FudmFzKSB7CkBA
IC0yMjEsNiArMjQxLDExIEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnBhaW50KEdyYXBoaWNz
Q28KICAgICAgICAgaWYgKGltYWdlKQogICAgICAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlKGlt
YWdlLCByKTsKICAgICB9CisgICAgCisjaWYgRU5BQkxFKDNEX0NBTlZBUykgICAgCisgICAgaWYg
KG1fY29udGV4dCAmJiBtX2NvbnRleHQtPmlzM2QoKSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEKj4obV9jb250ZXh0LmdldCgpKS0+cmVzaGFwZShyLndpZHRo
KCksIHIuaGVpZ2h0KCkpOworI2VuZGlmCiB9CiAKIEludFJlY3QgSFRNTENhbnZhc0VsZW1lbnQ6
OmNvbnZlcnRMb2dpY2FsVG9EZXZpY2UoY29uc3QgRmxvYXRSZWN0JiBsb2dpY2FsUmVjdCkgY29u
c3QKQEAgLTI5Myw0ICszMTgsMjYgQEAgVHJhbnNmb3JtYXRpb25NYXRyaXggSFRNTENhbnZhc0Vs
ZW1lbnQ6OgogICAgIHJldHVybiB0cmFuc2Zvcm07CiB9CiAKKyNpZiBFTkFCTEUoM0RfQ0FOVkFT
KSAgICAKK2Jvb2wgSFRNTENhbnZhc0VsZW1lbnQ6OmlzM0QoKSBjb25zdAoreworICAgIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQqIGN0eCA9IG1fY29udGV4dC5nZXQoKTsKKyAgICByZXR1cm4gY3R4
ICYmICFjdHgtPmlzMmQoKTsKK30KKworUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBIVE1MQ2Fu
dmFzRWxlbWVudDo6Y29udGV4dDNEKCkgY29uc3QKK3sKKyAgICBpZiAobV9jb250ZXh0ICYmIG1f
Y29udGV4dC0+aXMzZCgpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q2FudmFzUmVuZGVy
aW5nQ29udGV4dDNEKj4obV9jb250ZXh0LmdldCgpKS0+Y29udGV4dDNEKCk7CisgICAgcmV0dXJu
IDA7Cit9CisKK1BsYXRmb3JtM0RPYmplY3QgSFRNTENhbnZhc0VsZW1lbnQ6OnRleHR1cmUzRCgp
IGNvbnN0Cit7CisgICAgaWYgKG1fY29udGV4dCAmJiBtX2NvbnRleHQtPmlzM2QoKSkKKyAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCo+KG1fY29udGV4
dC5nZXQoKSktPnRleHR1cmUzRCgpOworICAgIHJldHVybiAwOworfQorI2VuZGlmCisKIH0KSW5k
ZXg6IFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCShyZXZpc2lvbiA0NzcxOSkKKysrIFdlYkNvcmUv
aHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMSArMzAsMTQg
QEAKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgIkZsb2F0UmVj
dC5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCisjaWYgRU5BQkxFKDNEX0NBTlZBUykgICAg
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNlbmRpZgogI2luY2x1ZGUgIkludFNp
emUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ7CitjbGFzcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0OwogY2xhc3MgRmxvYXRQb2ludDsK
IGNsYXNzIEZsb2F0UmVjdDsKIGNsYXNzIEZsb2F0U2l6ZTsKQEAgLTQ0LDggKzQ3LDYgQEAgY2xh
c3MgSW1hZ2VCdWZmZXI7CiBjbGFzcyBJbnRQb2ludDsKIGNsYXNzIEludFNpemU7CiAKLXR5cGVk
ZWYgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIENhbnZhc1JlbmRlcmluZ0NvbnRleHQ7Ci0KIGNs
YXNzIENhbnZhc09ic2VydmVyIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5DYW52YXNPYnNlcnZl
cigpIHsgfQpAQCAtMTAwLDcgKzEwMSwxMyBAQCBwdWJsaWM6CiAKICAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBiYXNlVHJhbnNmb3JtKCkgY29uc3Q7CiAKLSAgICBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQqIHJlbmRlcmluZ0NvbnRleHQyRCgpIHsgcmV0dXJuIG1fMkRDb250ZXh0LmdldCgpOyB9
CisgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogcmVuZGVyaW5nQ29udGV4dCgpIHsgcmV0dXJu
IG1fY29udGV4dC5nZXQoKTsgfQorCisjaWYgRU5BQkxFKDNEX0NBTlZBUykgICAgCisgICAgYm9v
bCBpczNEKCkgY29uc3Q7CisgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBjb250ZXh0M0Qo
KSBjb25zdDsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUzRCgpIGNvbnN0OworI2VuZGlm
CiAKIHByaXZhdGU6CiAjaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQpAQCAtMTE4LDcgKzEy
NSw3IEBAIHByaXZhdGU6CiAKICAgICBib29sIG1fcmVuZGVyZXJJc0NhbnZhczsKIAotICAgIE93
blB0cjxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+IG1fMkRDb250ZXh0OworICAgIE93blB0cjxD
YW52YXNSZW5kZXJpbmdDb250ZXh0PiBtX2NvbnRleHQ7CiAgICAgSW50U2l6ZSBtX3NpemU7ICAg
IAogICAgIENhbnZhc09ic2VydmVyKiBtX29ic2VydmVyOwogCkluZGV4OiBXZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZh
cy9DYW52YXNPYmplY3QuY3BwCShyZXZpc2lvbiA0NzcxOSkKKysrIFdlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsOCArNDAsNiBAQCBDYW52
YXNPYmplY3Q6OkNhbnZhc09iamVjdChHcmFwaGljc0NvbnRlCiAKIENhbnZhc09iamVjdDo6fkNh
bnZhc09iamVjdCgpCiB7Ci0gICAgaWYgKG1fY29udGV4dCkKLSAgICAgICAgbV9jb250ZXh0LT5y
ZW1vdmVPYmplY3QodGhpcyk7CiB9CiAKIHZvaWQgQ2FudmFzT2JqZWN0OjpzZXRPYmplY3QoUGxh
dGZvcm0zRE9iamVjdCBvYmplY3QpCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShyZXZpc2lvbiA0NzcxOSkKKysrIFdlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTQsNyArOTQsNyBAQCBwcml2YXRlOgogCiAKIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMpCi0gICAg
OiBtX2NhbnZhcyhjYW52YXMpCisgICAgOiBDYW52YXNSZW5kZXJpbmdDb250ZXh0KGNhbnZhcykK
ICAgICAsIG1fc3RhdGVTdGFjaygxKQogewogICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGV2ZW4gaWYg
dGhlIGRyYXdpbmdDb250ZXh0KCkgaGFzIGEgZGlmZmVyZW50IGRlZmF1bHQKQEAgLTEwMiwxNSAr
MTAyLDkgQEAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpDYW52YXNSZW5kZXJpbgogICAgIHNl
dExpbmVXaWR0aChsaW5lV2lkdGgoKSk7CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjpyZWYoKSAKLXsgCi0gICAgbV9jYW52YXMtPnJlZigpOyAKLX0gCi0KLXZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpkZXJlZigpIAoteyAKLSAgICBtX2NhbnZhcy0+ZGVyZWYoKTsg
IAotfSAKK0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6fkNhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RCgpCit7Cit9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpyZXNldCgpCiB7Cklu
ZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgJ
KHJldmlzaW9uIDQ3NzE5KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRfaAogI2RlZmluZSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRf
aAogCisjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIlRyYW5z
Zm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSAiRmxvYXRTaXplLmgiCiAjaW5jbHVkZSAiRm9u
dC5oIgpAQCAtNTQsMTcgKzU1LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIHR5cGVk
ZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAKLSAgICBjbGFzcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQgOiBwdWJsaWMgTm9uY29weWFibGUgeworICAgIGNsYXNzIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRCA6IHB1YmxpYyBDYW52YXNSZW5kZXJpbmdDb250ZXh0IHsKICAgICBwdWJsaWM6CiAgICAg
ICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRChIVE1MQ2FudmFzRWxlbWVudCopOwogCi0gICAg
ICAgIHZvaWQgcmVmKCk7IAotICAgICAgICB2b2lkIGRlcmVmKCk7IAotCi0gICAgICAgIEhUTUxD
YW52YXNFbGVtZW50KiBjYW52YXMoKSBjb25zdCB7IHJldHVybiBtX2NhbnZhczsgfSAKLSAgICAg
ICAgdmlydHVhbCB+Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKCkgeyB9CisgICAgICAgIHZpcnR1
YWwgfkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCgpOwogICAgICAgICAKLSAgICAgICAgdmlydHVh
bCBib29sIGlzMmQoKSB7IHJldHVybiB0cnVlOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBpczJk
KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgICAgIENhbnZhc1N0eWxlKiBzdHJva2VT
dHlsZSgpIGNvbnN0OwogICAgICAgICB2b2lkIHNldFN0cm9rZVN0eWxlKFBhc3NSZWZQdHI8Q2Fu
dmFzU3R5bGU+KTsKQEAgLTI2NSw3ICsyNjIsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIHZvaWQgY2hlY2tPcmlnaW4oY29uc3QgS1VSTCYpOwogICAgICAgICB2b2lkIGNoZWNrT3Jp
Z2luKGNvbnN0IFN0cmluZyYpOwogCi0gICAgICAgIEhUTUxDYW52YXNFbGVtZW50KiBtX2NhbnZh
czsKICAgICAgICAgVmVjdG9yPFN0YXRlLCAxPiBtX3N0YXRlU3RhY2s7CiAgICAgfTsKIApJbmRl
eDogV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaWRsCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmlk
bAkocmV2aXNpb24gNDc3MTkpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEyICsyOSwxMCBAQCBtb2R1bGUg
aHRtbCB7CiAgICAgICAgIEdlbmVyYXRlQ29uc3RydWN0b3IsCiAgICAgICAgIEludGVyZmFjZVVV
SUQ9OThmYjQ4YWUtNzIxNi00ODljLTg2MmItOGUxMjE3ZmM0NDQzLAogICAgICAgICBJbXBsZW1l
bnRhdGlvblVVSUQ9YWI0ZjA3ODEtMTUyZi00NTBlLTk1NDYtNWIzOTg3NDkxYTU0Ci0gICAgXSBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQgeworICAgIF0gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
IDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dCB7CiAKICAgICAgICAgLy8gV2ViIEFwcGxpY2F0aW9u
cyAxLjAgZHJhZnQKIAotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgSFRNTENhbnZhc0VsZW1l
bnQgY2FudmFzOwotCiAgICAgICAgIHZvaWQgc2F2ZSgpOwogICAgICAgICB2b2lkIHJlc3RvcmUo
KTsKIApJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0M0Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDNELmNwcAkocmV2aXNpb24gNDc3MTkpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQzRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDkgQEAK
ICNpbmNsdWRlICJSZW5kZXJCb3guaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogCisvLyBU
aGlzIHN5bWJvbCBpcyB1c2VkIHRvIGRldGVybWluZSBmcm9tIGEgc2NyaXB0IHdoZXRoZXIgM0Qg
Y2FudmFzIGlzIGVuYWJsZWQgKHZpYSAnbm0nKS4KK2Jvb2wgV2ViQ29yZUhhczNEQ2FudmFzID0g
dHJ1ZTsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6
OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRChIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzKQpJbmRl
eDogV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuaWRsCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmlk
bAkocmV2aXNpb24gNDc3MTkpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQzRC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAgbW9kdWxlIGh0
bWwgewogICAgICAgICBHZW5lcmF0ZUNvbnN0cnVjdG9yLAogICAgICAgICBJbnRlcmZhY2VVVUlE
PTk4ZmI0OGFlLTcyMTYtNDg5Yy04NjJiLThlMTIxN2ZjNDQ0MywKICAgICAgICAgSW1wbGVtZW50
YXRpb25VVUlEPWFiNGYwNzgxLTE1MmYtNDUwZS05NTQ2LTViMzk4NzQ5MWE1NAotICAgIF0gQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEIHsKKyAgICBdIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCA6
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQgewogCiAgICAgICAgIC8qIENsZWFyQnVmZmVyTWFzayAq
LwogICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfREVQVEhfQlVGRkVSX0JJVCAgICAgICAg
ICAgICAgID0gMHgwMDAwMDEwMDsKQEAgLTQ1OCw4ICs0NTgsNiBAQCBtb2R1bGUgaHRtbCB7CiAK
ICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdMX0lOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFU
SU9OICA9IDB4MDUwNjsKIAotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgSFRNTENhbnZhc0Vs
ZW1lbnQgY2FudmFzOwotICAgICAgICAKICAgICAgICAgdm9pZCAgICAgICAgIGdsQWN0aXZlVGV4
dHVyZShpbiB1bnNpZ25lZCBsb25nIHRleHR1cmUpOwogICAgICAgICB2b2lkICAgICAgICAgZ2xB
dHRhY2hTaGFkZXIoaW4gQ2FudmFzUHJvZ3JhbSBwcm9ncmFtLCBpbiBDYW52YXNTaGFkZXIgc2hh
ZGVyKTsKICAgICAgICAgdm9pZCAgICAgICAgIGdsQmluZEF0dHJpYkxvY2F0aW9uKGluIENhbnZh
c1Byb2dyYW0gcHJvZ3JhbSwgaW4gdW5zaWduZWQgbG9uZyBpbmRleCwgaW4gRE9NU3RyaW5nIG5h
bWUpOwpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0Lmlk
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQuaWRsCShyZXZpc2lvbiA0NzcxOSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTI3LDEyICsyNywxMiBAQCBtb2R1
bGUgaHRtbCB7CiAKICAgICBpbnRlcmZhY2UgWwogICAgICAgICBHZW5lcmF0ZUNvbnN0cnVjdG9y
LAorICAgICAgICBDdXN0b21Ub0pTLAogICAgICAgICBJbnRlcmZhY2VVVUlEPTk4ZmI0OGFlLTcy
MTYtNDg5Yy04NjJiLThlMTIxN2ZjNDQ0MywKICAgICAgICAgSW1wbGVtZW50YXRpb25VVUlEPWFi
NGYwNzgxLTE1MmYtNDUwZS05NTQ2LTViMzk4NzQ5MWE1NAogICAgIF0gQ2FudmFzUmVuZGVyaW5n
Q29udGV4dCB7CiAKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEhUTUxDYW52YXNFbGVtZW50
IGNhbnZhczsKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyB0eXBlOwogICAg
IH07CiAKIH0KSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ3NzQ3KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMDktMDgtMjUgIENocmlzIE1h
cnJpbiAgPGNtYXJyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEZpeGVkIG9uZSB0ZXN0IHdoaWNoIGNoYW5nZWQgZHVlIHRvIGRp
ZmZlcmVudCBpbmhlcml0YW5jZSBvZiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MDE4CisKKyAgICAgICAg
KiBmYXN0L2RvbS9wcm90b3R5cGUtaW5oZXJpdGFuY2UtMi1leHBlY3RlZC50eHQ6CisKIDIwMDkt
MDgtMjUgIFJlbmF0YSBIb2RvdmFuICA8aG9kb3Zhbi5yZW5hdGFAc3R1ZC51LXN6ZWdlZC5odT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBBcml5YSBIaWRheWF0LgpJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC9kb20vcHJvdG90eXBlLWluaGVyaXRhbmNlLTItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL3Byb3RvdHlwZS1pbmhlcml0YW5jZS0yLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gNDc3MzUpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9wcm90b3R5cGUt
aW5oZXJpdGFuY2UtMi1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDcg
QEAgRkFJTCBDYW52YXNQYXR0ZXJuUHJvdG90eXBlIGZyb20gaW5uZXIuZAogUEFTUyBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQgZnJvbSBpbm5lci5kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFt
ZSgiY2FudmFzIilbMF0uZ2V0Q29udGV4dCgiMmQiKQogUEFTUyBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRDb25zdHJ1Y3RvciBmcm9tIGlubmVyLmRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1l
KCJjYW52YXMiKVswXS5nZXRDb250ZXh0KCIyZCIpLmNvbnN0cnVjdG9yCiBQQVNTIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRFByb3RvdHlwZSBmcm9tIGlubmVyLmRvY3VtZW50LmdldEVsZW1lbnRz
QnlUYWdOYW1lKCJjYW52YXMiKVswXS5nZXRDb250ZXh0KCIyZCIpLl9fcHJvdG9fXworUEFTUyBD
YW52YXNSZW5kZXJpbmdDb250ZXh0UHJvdG90eXBlIGZyb20gaW5uZXIuZG9jdW1lbnQuZ2V0RWxl
bWVudHNCeVRhZ05hbWUoImNhbnZhcyIpWzBdLmdldENvbnRleHQoIjJkIikuX19wcm90b19fLl9f
cHJvdG9fXwogUEFTUyBDaGFyYWN0ZXJEYXRhUHJvdG90eXBlIGZyb20gaW5uZXIuZG9jdW1lbnQu
YWN0aXZlRWxlbWVudC5jaGlsZE5vZGVzLjYxLl9fcHJvdG9fXy5fX3Byb3RvX18KIFBBU1MgQ2xp
ZW50UmVjdCBmcm9tIGlubmVyLmRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkK
IFBBU1MgQ2xpZW50UmVjdENvbnN0cnVjdG9yIGZyb20gaW5uZXIuZG9jdW1lbnQuYm9keS5nZXRC
b3VuZGluZ0NsaWVudFJlY3QoKS5jb25zdHJ1Y3Rvcgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38555</attachid>
            <date>2009-08-25 10:15:03 -0700</date>
            <delta_ts>2009-08-25 11:47:01 -0700</delta_ts>
            <desc>One more replacement patch to add Canvas3D files to build</desc>
            <filename>webgl-add-to-build.patch</filename>
            <type>text/plain</type>
            <size>75676</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ3NzQ4KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMDktMDgtMjUgIENocmlzIE1h
cnJpbiAgPGNtYXJyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEV4cG9ydCB0cnlGYXN0TWFsbG9jIGZvciBDYW52YXMzRCB3b3Jr
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODAxOAor
CisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZXhwOgorCiAyMDA5LTA4LTI0ICBHZW9mZnJleSBH
YXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgQnVpbGQgZml4OiBzdGFydCBvdXQg
d2l0aCBhIDMyLWJpdCB2YWx1ZSB0byBhdm9pZCBhIHNob3J0ZW5pbmcgd2FybmluZy4KSW5kZXg6
IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHJldmlzaW9uIDQ3NzQ4KQorKysgSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzgsNiArMjc4LDcg
QEAgX19aTjNKU0NndEVSS05TXzdVU3RyaW5nRVMyXwogX19aTjNKU0NsdEVSS05TXzdVU3RyaW5n
RVMyXwogX19aTjNXVEYxMGZhc3RDYWxsb2NFbW0KIF9fWk4zV1RGMTBmYXN0TWFsbG9jRW0KK19f
Wk4zV1RGMTN0cnlGYXN0TWFsbG9jRW0KIF9fWk4zV1RGMTFjdXJyZW50VGltZUV2CiBfX1pOM1dU
RjExZmFzdFJlYWxsb2NFUHZtCiBfX1pOM1dURjEyY3JlYXRlVGhyZWFkRVBGUHZTMF9FUzBfCklu
ZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwko
cmV2aXNpb24gNDc3NDgpCisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDY3IEBACisyMDA5LTA4LTI1ICBDaHJpcyBNYXJyaW4gIDxjbWFycmluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRl
ZCBhbGwgbmV3IENhbnZhczNEIGZpbGVzIHRvIHRoZSBidWlsZAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgwMTgKKworICAgICAgICBUaGlzIGFsc28g
aG9va3MgdXAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCBhcyB0aGUgY29tbW9uIGJhc2UgY2xhc3Mg
Zm9yCisgICAgICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCBhbmQgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDNELiBBbmQgaXQgYWRkcyBhIGJpdAorICAgICAgICBvZiBsb2dpYyB0aHJvdWdob3V0
IHRvIHN1cHBvcnQgdGhlIG5ldyBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Qgb2JqZWN0LgorICAg
ICAgICBCdXQgbm90aGluZyBpcyBob29rZWQgdXAgeWV0LgorCisgICAgICAgICogRGVyaXZlZFNv
dXJjZXMubWFrZToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtOgor
ICAgICAgICAqIFdlYkNvcmUvV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUvV2ViQ29y
ZVNvdXJjZXMuYmtsOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3Rv
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c3Ry
b2tlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OnNldFN0cm9rZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjpmaWxsU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OnNldEZpbGxTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6c2V0RmlsbENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTdHJva2VDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpK
U0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c3Ryb2tlUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3SW1hZ2VGcm9tUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0U2hhZG93KToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhdGVQYXR0ZXJu
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpwdXRJbWFn
ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmZp
bGxUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpz
dHJva2VUZXh0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6aXNPYnNlcnZhYmxlVGhyb3VnaERPTSk6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1M
Q2FudmFzRWxlbWVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxDYW52YXNF
bGVtZW50OjptYXJrQ2hpbGRyZW4pOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6Z2V0Q1NTQ2FudmFzQ29udGV4dCk6CisgICAgICAgICog
ZG9tL0RvY3VtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Z2V0Q29udGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6d2lsbERyYXcpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52
YXNFbGVtZW50OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6
aXMzRCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Y29udGV4dDNEKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50Ojp0ZXh0dXJlM0QpOgorICAgICAg
ICAqIGh0bWwvSFRNTENhbnZhc0VsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52
YXNFbGVtZW50OjpyZW5kZXJpbmdDb250ZXh0KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52
YXNPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzT2JqZWN0Ojp+Q2FudmFzT2Jq
ZWN0KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmlkbDoK
KyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp+
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6aXMyZCk6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmlkbDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
M0QuY3BwOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5p
ZGw6CisKIDIwMDktMDgtMjUgIFl1c3VrZSBTYXRvICA8eXVzdWtlc0BjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVyLgpJbmRleDogV2ViQ29yZS9EZXJpdmVk
U291cmNlcy5tYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQko
cmV2aXNpb24gNDc3NDgpCisrKyBXZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHdvcmtpbmcg
Y29weSkKQEAgLTY4LDkgKzY4LDE5IEBAIERPTV9DTEFTU0VTID0gXAogICAgIENTU1ZhbHVlTGlz
dCBcCiAgICAgQ1NTVmFyaWFibGVzUnVsZSBcCiAgICAgQ1NTVmFyaWFibGVzRGVjbGFyYXRpb24g
XAorICAgIENhbnZhc0J1ZmZlciBcCisgICAgQ2FudmFzQnl0ZUFycmF5IFwKKyAgICBDYW52YXNG
cmFtZWJ1ZmZlciBcCiAgICAgQ2FudmFzR3JhZGllbnQgXAorICAgIENhbnZhc051bWJlckFycmF5
IFwKICAgICBDYW52YXNQYXR0ZXJuIFwKKyAgICBDYW52YXNQcm9ncmFtIFwKKyAgICBDYW52YXNS
ZW5kZXJidWZmZXIgXAorICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQgXAogICAgIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRCBcCisgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEIFwKKyAgICBD
YW52YXNTaGFkZXIgXAorICAgIENhbnZhc1RleHR1cmUgXAogICAgIENoYXJhY3RlckRhdGEgXAog
ICAgIENsaWVudFJlY3QgXAogICAgIENsaWVudFJlY3RMaXN0IFwKSW5kZXg6IFdlYkNvcmUvR05V
bWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNp
b24gNDc3NDgpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTEsNiArMTUxLDcgQEAgSURMX0JJTkRJTkdTICs9IFwKIAlXZWJDb3JlL2RvbS9XaGVlbEV2ZW50
LmlkbCBcCiAJV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNHcmFkaWVudC5pZGwgXAogCVdlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzUGF0dGVybi5pZGwgXAorCVdlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dC5pZGwgXAogCVdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJELmlkbCBcCiAJV2ViQ29yZS9odG1sL0RhdGFHcmlkQ29sdW1uLmlk
bCBcCiAJV2ViQ29yZS9odG1sL0RhdGFHcmlkQ29sdW1uTGlzdC5pZGwgXApAQCAtMzE2LDYgKzMx
Nyw3IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0
eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTU3R5
bGVEZWNsYXJhdGlvbkN1c3RvbS5oIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTVmFsdWVD
dXN0b20uY3BwIFwKKwlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4
dEN1c3RvbS5jcHAgXAogCVdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRDdXN0b20uY3BwIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2xpcGJvYXJkQ3VzdG9t
LmNwcCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NvbnNvbGVDdXN0b20uY3BwIFwKQEAgLTkx
Myw2ICs5MTUsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUGF0dGVybi5oIFwKIAlXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1BpeGVsQXJyYXku
Y3BwIFwKIAlXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1BpeGVsQXJyYXkuaCBcCisJV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmNwcCBcCisJV2ViQ29yZS9odG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmggXAogCVdlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcCBcCiAJV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQuaCBcCiAJV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHls
ZS5jcHAgXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDQ3NzQ4KQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJ
KHdvcmtpbmcgY29weSkKQEAgLTc4LDYgKzc4LDcgQEAKICAgICAgICAgICAgICdodG1sL2NhbnZh
cy9DYW52YXNHcmFkaWVudC5pZGwnLAogICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc1Bh
dHRlcm4uaWRsJywKICAgICAgICAgICAgICdodG1sL2NhbnZhcy9DYW52YXNQaXhlbEFycmF5Lmlk
bCcsCisgICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5pZGwn
LAogICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5pZGwn
LAogICAgICAgICAgICAgJ2h0bWwvRGF0YUdyaWRDb2x1bW4uaWRsJywKICAgICAgICAgICAgICdo
dG1sL0RhdGFHcmlkQ29sdW1uTGlzdC5pZGwnLApAQCAtNDExLDYgKzQxMiw3IEBACiAgICAgICAg
ICAgICAnYmluZGluZ3MvanMvSlNBdHRyQ3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGlu
Z3MvanMvSlNBdWRpb0NvbnN0cnVjdG9yLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvanMv
SlNBdWRpb0NvbnN0cnVjdG9yLmgnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL2pzL0pTQ2FudmFz
UmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL2pzL0pT
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGlu
Z3MvanMvSlNDREFUQVNlY3Rpb25DdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy9q
cy9KU0NsaXBib2FyZEN1c3RvbS5jcHAnLApAQCAtMTIxNSw2ICsxMjE3LDggQEAKICAgICAgICAg
ICAgICdodG1sL2NhbnZhcy9DYW52YXNQYXR0ZXJuLmgnLAogICAgICAgICAgICAgJ2h0bWwvY2Fu
dmFzL0NhbnZhc1BpeGVsQXJyYXkuY3BwJywKICAgICAgICAgICAgICdodG1sL2NhbnZhcy9DYW52
YXNQaXhlbEFycmF5LmgnLAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQuY3BwJywKKyAgICAgICAgICAgICdodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdD
b250ZXh0LmgnLAogICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRC5jcHAnLAogICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRC5oJywKICAgICAgICAgICAgICdodG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAnLApJbmRl
eDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJv
CShyZXZpc2lvbiA0Nzc0OCkKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkK
QEAgLTM2MSw2ICszNjEsNyBAQCBJRExfQklORElOR1MgKz0gXAogICAgIGRvbS9XaGVlbEV2ZW50
LmlkbCBcCiAgICAgaHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuaWRsIFwKICAgICBodG1sL2Nh
bnZhcy9DYW52YXNQYXR0ZXJuLmlkbCBcCisgICAgaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dC5pZGwgXAogICAgIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5p
ZGwgXAogICAgIGh0bWwvRGF0YUdyaWRDb2x1bW4uaWRsIFwKICAgICBodG1sL0RhdGFHcmlkQ29s
dW1uTGlzdC5pZGwgXApAQCAtNjQ0LDYgKzY0NSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGJpbmRp
bmdzL2pzL0dDQ29udHJvbGxlci5jcHAgXAogICAgIGJpbmRpbmdzL2pzL0pTQXR0ckN1c3RvbS5j
cHAgXAogICAgIGJpbmRpbmdzL2pzL0pTQ0RBVEFTZWN0aW9uQ3VzdG9tLmNwcCBcCisgICAgYmlu
ZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCBcCiAgICAgYmluZGlu
Z3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwIFwKICAgICBiaW5kaW5n
cy9qcy9KU0NsaXBib2FyZEN1c3RvbS5jcHAgXAogICAgIGJpbmRpbmdzL2pzL0pTQ29uc29sZUN1
c3RvbS5jcHAgXApAQCAtOTQ0LDYgKzk0Niw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGh0bWwvY2Fu
dmFzL0NhbnZhc0dyYWRpZW50LmNwcCBcCiAgICAgaHRtbC9jYW52YXMvQ2FudmFzUGF0dGVybi5j
cHAgXAogICAgIGh0bWwvY2FudmFzL0NhbnZhc1BpeGVsQXJyYXkuY3BwIFwKKyAgICBodG1sL2Nh
bnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmNwcCBcCiAgICAgaHRtbC9jYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJELmNwcCBcCiAgICAgaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuY3Bw
IFwKICAgICBodG1sL0NvbGxlY3Rpb25DYWNoZS5jcHAgXApAQCAtMTYwMyw2ICsxNjA2LDcgQEAg
SEVBREVSUyArPSBcCiAgICAgaHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuaCBcCiAgICAgaHRt
bC9jYW52YXMvQ2FudmFzUGF0dGVybi5oIFwKICAgICBodG1sL2NhbnZhcy9DYW52YXNQaXhlbEFy
cmF5LmggXAorICAgIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCBcCiAgICAg
aHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmggXAogICAgIGh0bWwvY2FudmFz
L0NhbnZhc1N0eWxlLmggXAogICAgIGh0bWwvQ29sbGVjdGlvbkNhY2hlLmggXApJbmRleDogV2Vi
Q29yZS9XZWJDb3JlU291cmNlcy5ia2wKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlU291
cmNlcy5ia2wJKHJldmlzaW9uIDQ3NzQ4KQorKysgV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wJ
KHdvcmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDcgQEAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBs
aXN0IG9mIGZpbGVzIG5lZQogICAgICAgICBiaW5kaW5ncy9qcy9KU0F0dHJDdXN0b20uY3BwCiAg
ICAgICAgIGJpbmRpbmdzL2pzL0pTQXVkaW9Db25zdHJ1Y3Rvci5jcHAKICAgICAgICAgYmluZGlu
Z3MvanMvSlNDREFUQVNlY3Rpb25DdXN0b20uY3BwCisgICAgICAgIGJpbmRpbmdzL2pzL0pTQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAKICAgICAgICAgYmluZGluZ3MvanMvSlNDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCiAgICAgICAgIGJpbmRpbmdzL2pzL0pTQ2xp
cGJvYXJkQ3VzdG9tLmNwcAogICAgICAgICBiaW5kaW5ncy9qcy9KU0NvbnNvbGVDdXN0b20uY3Bw
CkBAIC0yNjQsNiArMjY1LDcgQEAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBsaXN0IG9mIGZpbGVz
IG5lZQogICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTQ1NTVmFyaWFibGVzUnVsZS5j
cHAKICAgICAgICAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0NhbnZhc0dyYWRpZW50LmNwcAog
ICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTQ2FudmFzUGF0dGVybi5jcHAKKyAgICAg
ICAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuY3BwCiAg
ICAgICAgIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQu
Y3BwCiAgICAgICAgIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNDaGFyYWN0ZXJEYXRhLmNwcAog
ICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTQ2xpZW50UmVjdC5jcHAKQEAgLTU3Niw2
ICs1NzgsNyBAQCBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGxpc3Qgb2YgZmlsZXMgbmVlCiAgICAg
ICAgIGh0bWwvY2FudmFzL0NhbnZhc0dyYWRpZW50LmNwcAogICAgICAgICBodG1sL2NhbnZhcy9D
YW52YXNQYXR0ZXJuLmNwcAogICAgICAgICBodG1sL2NhbnZhcy9DYW52YXNQaXhlbEFycmF5LmNw
cAorICAgICAgICBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmNwcAogICAgICAg
ICBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCiAgICAgICAgIGh0bWwv
Y2FudmFzL0NhbnZhc1N0eWxlLmNwcAogICAgICAgICBodG1sL0NvbGxlY3Rpb25DYWNoZS5jcHAK
SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gNDc3NDgp
CisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC02NjMsNiArNjYzLDU0IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJ
CQlSZWxhdGl2ZVBhdGg9IiQoV2ViS2l0T3V0cHV0RGlyKVxvYmpcJChQcm9qZWN0TmFtZSlcRGVy
aXZlZFNvdXJjZXNcSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0LmNwcCINCisJCQkJPg0KKwkJCQk8
RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJRXhjbHVk
ZWRGcm9tQnVpbGQ9InRydWUiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZD
Q0xDb21waWxlclRvb2wiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJ
CQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQlF
eGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFt
ZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+
DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWdfSW50ZXJuYWx8V2lu
MzIiDQorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCisJCQkJCT4NCisJCQkJCTxUb29s
DQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNv
bmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWdf
Q2Fpcm98V2luMzIiDQorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCisJCQkJCT4NCisJ
CQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCS8+DQorCQkJ
CTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFt
ZT0iUmVsZWFzZV9DYWlyb3xXaW4zMiINCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0K
KwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJ
CQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUN
CisJCQkJUmVsYXRpdmVQYXRoPSIkKFdlYktpdE91dHB1dERpcilcb2JqXCQoUHJvamVjdE5hbWUp
XERlcml2ZWRTb3VyY2VzXEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIg0KKwkJCQk+DQorCQkJ
PC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iJChXZWJLaXRPdXRwdXREaXIp
XG9ialwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xKU0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRC5jcHAiDQogCQkJCT4NCiAJCQkJPEZpbGVDb25maWd1cmF0aW9uDQpAQCAtMjQ4ODQsNiAr
MjQ5MzIsMTQgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZl
UGF0aD0iLi5caHRtbFxjYW52YXNcQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHAiDQorCQkJCT4N
CisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXGNhbnZh
c1xDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZp
bGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXGNhbnZhc1xDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KQEAgLTI4NjIzLDYgKzI4Njc5LDEwIEBA
CiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIu
LlxiaW5kaW5nc1xqc1xKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwIg0KKwkJCQkJ
Pg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRp
bmdzXGpzXEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcCINCiAJCQkJCT4NCiAJ
CQkJPC9GaWxlPg0KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiA0Nzc0OCkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03ODMsNiArNzgzLDY3IEBACiAJCTQ5ODM5MTU5
MEYxRTc3NjkwMEMyMzc4MiAvKiBXZWJLaXRDU1NNYXRyaXguaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5ODM5MTU2MEYxRTc3NjkwMEMyMzc4MiAvKiBX
ZWJLaXRDU1NNYXRyaXguaCAqLzsgfTsKIAkJNDk4MzkxNjMwRjFFOEVFMTAwQzIzNzgyIC8qIEpT
V2ViS2l0Q1NTTWF0cml4Q29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDk4MzkxNjEwRjFFOEVFMTAwQzIzNzgyIC8qIEpTV2ViS2l0
Q1NTTWF0cml4Q29uc3RydWN0b3IuY3BwICovOyB9OwogCQk0OTgzOTE2NDBGMUU4RUUxMDBDMjM3
ODIgLyogSlNXZWJLaXRDU1NNYXRyaXhDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDk4MzkxNjIwRjFFOEVFMTAwQzIzNzgyIC8qIEpT
V2ViS2l0Q1NTTWF0cml4Q29uc3RydWN0b3IuaCAqLzsgfTsKKwkJNDk4M0E5NzAxMDQzNUU5MDAw
REI3MEY5IC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OTgzQTk2RjEwNDM1RTkwMDBEQjcw
RjkgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCAqLzsgfTsKKwkJNDlDN0I5
N0UxMDQyRDIwODAwMDlENDQ3IC8qIEpTQ2FudmFzTnVtYmVyQXJyYXlDdXN0b20uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5N0MxMDQyRDIw
ODAwMDlENDQ3IC8qIEpTQ2FudmFzTnVtYmVyQXJyYXlDdXN0b20uY3BwICovOyB9OworCQk0OUM3
Qjk3RjEwNDJEMjA4MDAwOUQ0NDcgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RDdXN0b20u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5
N0QxMDQyRDIwODAwMDlENDQ3IC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEQ3VzdG9tLmNw
cCAqLzsgfTsKKwkJNDlDN0I5OTMxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzQnVmZmVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOTgw
MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc0J1ZmZlci5jcHAgKi87IH07CisJCTQ5QzdCOTk0
MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc0J1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5ODExMDQyRDJEMzAwMDlENDQ3IC8qIEpT
Q2FudmFzQnVmZmVyLmggKi87IH07CisJCTQ5QzdCOTk1MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0Nh
bnZhc0J5dGVBcnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0OUM3Qjk4MjEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNCeXRlQXJyYXkuY3Bw
ICovOyB9OworCQk0OUM3Qjk5NjEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNCeXRlQXJyYXku
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOTgz
MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc0J5dGVBcnJheS5oICovOyB9OworCQk0OUM3Qjk5
NzEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNGcmFtZWJ1ZmZlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3Qjk4NDEwNDJEMkQzMDAwOUQ0
NDcgLyogSlNDYW52YXNGcmFtZWJ1ZmZlci5jcHAgKi87IH07CisJCTQ5QzdCOTk4MTA0MkQyRDMw
MDA5RDQ0NyAvKiBKU0NhbnZhc0ZyYW1lYnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3Qjk4NTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52
YXNGcmFtZWJ1ZmZlci5oICovOyB9OworCQk0OUM3Qjk5OTEwNDJEMkQzMDAwOUQ0NDcgLyogSlND
YW52YXNOdW1iZXJBcnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0OUM3Qjk4NjEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNOdW1iZXJBcnJh
eS5jcHAgKi87IH07CisJCTQ5QzdCOTlBMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc051bWJl
ckFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
OUM3Qjk4NzEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNOdW1iZXJBcnJheS5oICovOyB9Owor
CQk0OUM3Qjk5QjEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNQcm9ncmFtLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOTg4MTA0MkQyRDMw
MDA5RDQ0NyAvKiBKU0NhbnZhc1Byb2dyYW0uY3BwICovOyB9OworCQk0OUM3Qjk5QzEwNDJEMkQz
MDAwOUQ0NDcgLyogSlNDYW52YXNQcm9ncmFtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3Qjk4OTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNQ
cm9ncmFtLmggKi87IH07CisJCTQ5QzdCOTlEMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1Jl
bmRlcmJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0OUM3Qjk4QTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNSZW5kZXJidWZmZXIuY3Bw
ICovOyB9OworCQk0OUM3Qjk5RTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNSZW5kZXJidWZm
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdC
OThCMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1JlbmRlcmJ1ZmZlci5oICovOyB9OworCQk0
OUM3Qjk5RjEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOThDMTA0
MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuY3BwICovOyB9OworCQk0
OUM3QjlBMDEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3Qjk4RDEwNDJE
MkQzMDAwOUQ0NDcgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0LmggKi87IH07CisJCTQ5QzdC
OUExMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5OEUxMDQyRDJE
MzAwMDlENDQ3IC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmggKi87IH07CisJCTQ5QzdC
OUEyMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1NoYWRlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3Qjk4RjEwNDJEMkQzMDAwOUQ0NDcg
LyogSlNDYW52YXNTaGFkZXIuY3BwICovOyB9OworCQk0OUM3QjlBMzEwNDJEMkQzMDAwOUQ0NDcg
LyogSlNDYW52YXNTaGFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ5QzdCOTkwMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1NoYWRlci5oICov
OyB9OworCQk0OUM3QjlBNDEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNUZXh0dXJlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOTkxMTA0
MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1RleHR1cmUuY3BwICovOyB9OworCQk0OUM3QjlBNTEw
NDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNUZXh0dXJlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3Qjk5MjEwNDJEMkQzMDAwOUQ0NDcgLyogSlND
YW52YXNUZXh0dXJlLmggKi87IH07CisJCTQ5QzdCOUM4MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52
YXNCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDlDN0I5QTgxMDQyRDMyRTAwMDlENDQ3IC8qIENhbnZhc0J1ZmZlci5jcHAgKi87IH07CisJ
CTQ5QzdCOUM5MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNCdWZmZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOUE5MTA0MkQzMkUwMDA5RDQ0
NyAvKiBDYW52YXNCdWZmZXIuaCAqLzsgfTsKKwkJNDlDN0I5Q0ExMDQyRDMyRjAwMDlENDQ3IC8q
IENhbnZhc0J1ZmZlci5pZGwgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ5QzdCOUFBMTA0MkQzMkUwMDA5RDQ0NyAvKiBDYW52YXNCdWZmZXIuaWRsICov
OyB9OworCQk0OUM3QjlDQjEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzQnl0ZUFycmF5LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOUFCMTA0
MkQzMkUwMDA5RDQ0NyAvKiBDYW52YXNCeXRlQXJyYXkuY3BwICovOyB9OworCQk0OUM3QjlDQzEw
NDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzQnl0ZUFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3QjlBQzEwNDJEMzJFMDAwOUQ0NDcgLyogQ2Fu
dmFzQnl0ZUFycmF5LmggKi87IH07CisJCTQ5QzdCOUNEMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52
YXNCeXRlQXJyYXkuaWRsIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0OUM3QjlBRDEwNDJEMzJFMDAwOUQ0NDcgLyogQ2FudmFzQnl0ZUFycmF5LmlkbCAq
LzsgfTsKKwkJNDlDN0I5Q0UxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc0ZyYW1lYnVmZmVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOUFF
MTA0MkQzMkUwMDA5RDQ0NyAvKiBDYW52YXNGcmFtZWJ1ZmZlci5jcHAgKi87IH07CisJCTQ5QzdC
OUNGMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNGcmFtZWJ1ZmZlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5QUYxMDQyRDMyRTAwMDlENDQ3
IC8qIENhbnZhc0ZyYW1lYnVmZmVyLmggKi87IH07CisJCTQ5QzdCOUQwMTA0MkQzMkYwMDA5RDQ0
NyAvKiBDYW52YXNGcmFtZWJ1ZmZlci5pZGwgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOUIwMTA0MkQzMkUwMDA5RDQ0NyAvKiBDYW52YXNGcmFt
ZWJ1ZmZlci5pZGwgKi87IH07CisJCTQ5QzdCOUQxMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNO
dW1iZXJBcnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0OUM3QjlCMTEwNDJEMzJFMDAwOUQ0NDcgLyogQ2FudmFzTnVtYmVyQXJyYXkuY3BwICov
OyB9OworCQk0OUM3QjlEMjEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzTnVtYmVyQXJyYXkuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOUIyMTA0
MkQzMkUwMDA5RDQ0NyAvKiBDYW52YXNOdW1iZXJBcnJheS5oICovOyB9OworCQk0OUM3QjlEMzEw
NDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzTnVtYmVyQXJyYXkuaWRsIGluIFJlc291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3QjlCMzEwNDJEMzJGMDAwOUQ0NDcg
LyogQ2FudmFzTnVtYmVyQXJyYXkuaWRsICovOyB9OworCQk0OUM3QjlENDEwNDJEMzJGMDAwOUQ0
NDcgLyogQ2FudmFzT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQ5QzdCOUI0MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNPYmplY3QuY3Bw
ICovOyB9OworCQk0OUM3QjlENTEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzT2JqZWN0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3QjlCNTEwNDJE
MzJGMDAwOUQ0NDcgLyogQ2FudmFzT2JqZWN0LmggKi87IH07CisJCTQ5QzdCOUQ2MTA0MkQzMkYw
MDA5RDQ0NyAvKiBDYW52YXNQcm9ncmFtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOUI2MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNQcm9n
cmFtLmNwcCAqLzsgfTsKKwkJNDlDN0I5RDcxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1Byb2dy
YW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdC
OUI3MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNQcm9ncmFtLmggKi87IH07CisJCTQ5QzdCOUQ4
MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNQcm9ncmFtLmlkbCBpbiBSZXNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5QjgxMDQyRDMyRjAwMDlENDQ3IC8q
IENhbnZhc1Byb2dyYW0uaWRsICovOyB9OworCQk0OUM3QjlEOTEwNDJEMzJGMDAwOUQ0NDcgLyog
Q2FudmFzUmVuZGVyYnVmZmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQ5QzdCOUI5MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNSZW5kZXJidWZm
ZXIuY3BwICovOyB9OworCQk0OUM3QjlEQTEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzUmVuZGVy
YnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
OUM3QjlCQTEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzUmVuZGVyYnVmZmVyLmggKi87IH07CisJ
CTQ5QzdCOURCMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNSZW5kZXJidWZmZXIuaWRsIGluIFJl
c291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3QjlCQjEwNDJE
MzJGMDAwOUQ0NDcgLyogQ2FudmFzUmVuZGVyYnVmZmVyLmlkbCAqLzsgfTsKKwkJNDlDN0I5REMx
MDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5QkMxMDQyRDMyRjAwMDlE
NDQ3IC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQuY3BwICovOyB9OworCQk0OUM3QjlERDEwNDJE
MzJGMDAwOUQ0NDcgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5QkQxMDQyRDMyRjAwMDlENDQ3IC8q
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCAqLzsgfTsKKwkJNDlDN0I5REUxMDQyRDMyRjAwMDlE
NDQ3IC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQuaWRsIGluIFJlc291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3QjlCRTEwNDJEMzJGMDAwOUQ0NDcgLyogQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dC5pZGwgKi87IH07CisJCTQ5QzdCOURGMTA0MkQzMkYwMDA5RDQ0
NyAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5QkYxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQzRC5jcHAgKi87IH07CisJCTQ5QzdCOUUwMTA0MkQzMkYwMDA5RDQ0
NyAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOUMwMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0QuaCAqLzsgfTsKKwkJNDlDN0I5RTExMDQyRDMyRjAwMDlENDQ3IC8q
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5pZGwgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOUMxMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0QuaWRsICovOyB9OworCQk0OUM3QjlFMjEwNDJEMzJGMDAwOUQ0NDcg
LyogQ2FudmFzU2hhZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ5QzdCOUMyMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNTaGFkZXIuY3BwICov
OyB9OworCQk0OUM3QjlFMzEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzU2hhZGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3QjlDMzEwNDJEMzJG
MDAwOUQ0NDcgLyogQ2FudmFzU2hhZGVyLmggKi87IH07CisJCTQ5QzdCOUU0MTA0MkQzMkYwMDA5
RDQ0NyAvKiBDYW52YXNTaGFkZXIuaWRsIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0OUM3QjlDNDEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzU2hhZGVy
LmlkbCAqLzsgfTsKKwkJNDlDN0I5RTUxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1RleHR1cmUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5
QzUxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1RleHR1cmUuY3BwICovOyB9OworCQk0OUM3QjlF
NjEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzVGV4dHVyZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5QzYxMDQyRDMyRjAwMDlENDQ3IC8qIENh
bnZhc1RleHR1cmUuaCAqLzsgfTsKKwkJNDlDN0I5RTcxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZh
c1RleHR1cmUuaWRsIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0OUM3QjlDNzEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzVGV4dHVyZS5pZGwgKi87IH07
CisJCTQ5QzdCOUZDMTA0MkQzNjUwMDA5RDQ0NyAvKiBHcmFwaGljc0NvbnRleHQzRC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5RkIxMDQyRDM2
NTAwMDlENDQ3IC8qIEdyYXBoaWNzQ29udGV4dDNELmggKi87IH07CisJCTQ5QzdCQTAwMTA0MkQz
OEMwMDA5RDQ0NyAvKiBDYW52YXMzRExheWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3QjlGRDEwNDJEMzhDMDAwOUQ0NDcgLyogQ2FudmFzM0RM
YXllci5oICovOyB9OworCQk0OUM3QkEwMTEwNDJEMzhDMDAwOUQ0NDcgLyogQ2FudmFzM0RMYXll
ci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdC
OUZFMTA0MkQzOEMwMDA5RDQ0NyAvKiBDYW52YXMzRExheWVyLm1tICovOyB9OworCQk0OUM3QkEw
MjEwNDJEMzhDMDAwOUQ0NDcgLyogR3JhcGhpY3NDb250ZXh0M0RNYWMuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5RkYxMDQyRDM4QzAwMDlE
NDQ3IC8qIEdyYXBoaWNzQ29udGV4dDNETWFjLmNwcCAqLzsgfTsKKwkJNDlDN0JBNzkxMDQyRUZB
RTAwMDlENDQ3IC8qIE9wZW5HTC5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3QkE3ODEwNDJFRkFFMDAwOUQ0NDcgLyogT3BlbkdM
LmZyYW1ld29yayAqLzsgfTsKKwkJNDlDN0JBOEQxMDQyRjVCMTAwMDlENDQ3IC8qIEpTRG9jdW1l
bnRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDlDN0JBOEMxMDQyRjVCMTAwMDlENDQ3IC8qIEpTRG9jdW1lbnRDdXN0b20uY3BwICovOyB9
OworCQk0OUM3RDRGQjEwNDJGOTVGMDAwOUQ0NDcgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0
M0QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlD
N0Q0RkExMDQyRjk1RjAwMDlENDQ3IC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmNwcCAq
LzsgfTsKIAkJNDlENURDMkIwRjQyM0E3MzAwOEYyMEZEIC8qIE1hdHJpeDNEVHJhbnNmb3JtT3Bl
cmF0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQ5RDVEQzI3MEY0MjNBNzMwMDhGMjBGRCAvKiBNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbi5j
cHAgKi87IH07CiAJCTQ5RDVEQzJDMEY0MjNBNzMwMDhGMjBGRCAvKiBNYXRyaXgzRFRyYW5zZm9y
bU9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDlENURDMjgwRjQyM0E3MzAwOEYyMEZEIC8qIE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9u
LmggKi87IH07CiAJCTQ5RDVEQzJEMEY0MjNBNzMwMDhGMjBGRCAvKiBQZXJzcGVjdGl2ZVRyYW5z
Zm9ybU9wZXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0OUQ1REMyOTBGNDIzQTczMDA4RjIwRkQgLyogUGVyc3BlY3RpdmVUcmFuc2Zvcm1P
cGVyYXRpb24uY3BwICovOyB9OwpAQCAtMTk1NSw3ICsyMDE2LDYgQEAKIAkJODVGNzRFMEEwQUE4
REY4QzAwMERDMjg0IC8qIERPTUNTU1Vua25vd25SdWxlLmggaW4gQ29weSBHZW5lcmF0ZWQgSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NTAzMkRENTBBQThDOUJF
MDA3RDNCN0QgLyogRE9NQ1NTVW5rbm93blJ1bGUuaCAqLzsgfTsKIAkJODVGRjMxNUEwQUFGQkZD
QjAwMzc0RjM4IC8qIERPTUtleWJvYXJkRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1RkYzMTU4MEFBRkJGQ0IwMDM3NEYzOCAvKiBET01LZXli
b2FyZEV2ZW50LmggKi87IH07CiAJCTg1RkYzMTVCMEFBRkJGQ0IwMDM3NEYzOCAvKiBET01LZXli
b2FyZEV2ZW50Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gODVGRjMxNTkwQUFGQkZDQjAwMzc0RjM4IC8qIERPTUtleWJvYXJkRXZlbnQubW0gKi87IH07
Ci0JCTkyOTI2NDc3MEI2MUZDNzIwMEI0MUQzNCAvKiBKU0RvY3VtZW50Q3VzdG9tLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkyOTI2NDc2MEI2MUZD
NzIwMEI0MUQzNCAvKiBKU0RvY3VtZW50Q3VzdG9tLmNwcCAqLzsgfTsKIAkJOTMwMkIwQkQwRDc5
RjgyOTAwQzdFRTgzIC8qIFBhZ2VHcm91cC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5MzAyQjBCQzBENzlGODI5MDBDN0VFODMgLyogUGFnZUdyb3Vw
LmNwcCAqLzsgfTsKIAkJOTMwMkIwQkYwRDc5RjgyQzAwQzdFRTgzIC8qIFBhZ2VHcm91cC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMwMkIwQkUwRDc5
RjgyQzAwQzdFRTgzIC8qIFBhZ2VHcm91cC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTkzMDVCMjREMDk4RjFCNkIwMEMyODg1NSAvKiBUaW1lci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMwNUIyNEMw
OThGMUI2QjAwQzI4ODU1IC8qIFRpbWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTU4MzUsNiArNTg5NSw2NyBAQAogCQk0OTgzOTE1NzBGMUU3
NzY5MDBDMjM3ODIgLyogV2ViS2l0Q1NTTWF0cml4LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGgg
PSBXZWJLaXRDU1NNYXRyaXguaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OTgz
OTE2MTBGMUU4RUUxMDBDMjM3ODIgLyogSlNXZWJLaXRDU1NNYXRyaXhDb25zdHJ1Y3Rvci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYktpdENTU01hdHJpeENv
bnN0cnVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDk4MzkxNjIwRjFF
OEVFMTAwQzIzNzgyIC8qIEpTV2ViS2l0Q1NTTWF0cml4Q29uc3RydWN0b3IuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXZWJLaXRDU1NNYXRyaXhDb25zdHJ1Y3Rvci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OTgzQTk2RjEwNDM1RTkwMDBEQjcwRjkgLyog
SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5QzdCOTdDMTA0MkQyMDgwMDA5RDQ0NyAvKiBKU0Nh
bnZhc051bWJlckFycmF5Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpTQ2FudmFzTnVtYmVyQXJyYXlDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk0OUM3Qjk3RDEwNDJEMjA4MDAwOUQ0NDcgLyogSlNDYW52YXNSZW5kZXJpbmdD
b250ZXh0M0RDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk0OUM3Qjk4MDEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNCdWZmZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDYW52YXNCdWZmZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUM3Qjk4MTEwNDJEMkQzMDAwOUQ0NDcg
LyogSlNDYW52YXNCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlND
YW52YXNCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlDN0I5ODIxMDQy
RDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzQnl0ZUFycmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ2FudmFzQnl0ZUFycmF5LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNDlDN0I5ODMxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzQnl0ZUFy
cmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ2FudmFzQnl0ZUFycmF5
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5QzdCOTg0MTA0MkQyRDMwMDA5RDQ0
NyAvKiBKU0NhbnZhc0ZyYW1lYnVmZmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpTQ2FudmFzRnJhbWVidWZmZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk0OUM3Qjk4NTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNGcmFtZWJ1ZmZlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NhbnZhc0ZyYW1lYnVmZmVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5QzdCOTg2MTA0MkQyRDMwMDA5RDQ0NyAv
KiBKU0NhbnZhc051bWJlckFycmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpTQ2FudmFzTnVtYmVyQXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk0OUM3Qjk4NzEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNOdW1iZXJBcnJheS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NhbnZhc051bWJlckFycmF5Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5QzdCOTg4MTA0MkQyRDMwMDA5RDQ0NyAvKiBK
U0NhbnZhc1Byb2dyYW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNDYW52YXNQcm9ncmFtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlDN0I5
ODkxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzUHJvZ3JhbS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU0NhbnZhc1Byb2dyYW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNDlDN0I5OEExMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzUmVuZGVyYnVmZmVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ2FudmFzUmVuZGVy
YnVmZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlDN0I5OEIxMDQyRDJE
MzAwMDlENDQ3IC8qIEpTQ2FudmFzUmVuZGVyYnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTQ2FudmFzUmVuZGVyYnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTQ5QzdCOThDMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDYW52YXNS
ZW5kZXJpbmdDb250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlDN0I5
OEQxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlDN0I5OEUxMDQyRDJEMzAwMDlENDQ3IC8qIEpT
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTQ5QzdCOThGMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1NoYWRlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NhbnZhc1NoYWRlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5QzdCOTkwMTA0MkQyRDMwMDA5RDQ0NyAvKiBK
U0NhbnZhc1NoYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NhbnZh
c1NoYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUM3Qjk5MTEwNDJEMkQz
MDAwOUQ0NDcgLyogSlNDYW52YXNUZXh0dXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTQ2FudmFzVGV4dHVyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTQ5QzdCOTkyMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1RleHR1cmUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDYW52YXNUZXh0dXJlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5QzdCOUE4MTA0MkQzMkUwMDA5RDQ0NyAvKiBDYW52YXNC
dWZmZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ2FudmFzQnVm
ZmVyLmNwcDsgcGF0aCA9IGNhbnZhcy9DYW52YXNCdWZmZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk0OUM3QjlBOTEwNDJEMzJFMDAwOUQ0NDcgLyogQ2FudmFzQnVmZmVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IENhbnZhc0J1ZmZlci5oOyBwYXRoID0g
Y2FudmFzL0NhbnZhc0J1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUM3
QjlBQTEwNDJEMzJFMDAwOUQ0NDcgLyogQ2FudmFzQnVmZmVyLmlkbCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IG5hbWUgPSBDYW52YXNCdWZmZXIuaWRsOyBwYXRoID0gY2FudmFzL0NhbnZhc0J1ZmZlci5pZGw7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5QzdCOUFCMTA0MkQzMkUwMDA5RDQ0NyAv
KiBDYW52YXNCeXRlQXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gQ2FudmFzQnl0ZUFycmF5LmNwcDsgcGF0aCA9IGNhbnZhcy9DYW52YXNCeXRlQXJyYXkuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUM3QjlBQzEwNDJEMzJFMDAwOUQ0NDcg
LyogQ2FudmFzQnl0ZUFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IENh
bnZhc0J5dGVBcnJheS5oOyBwYXRoID0gY2FudmFzL0NhbnZhc0J5dGVBcnJheS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk0OUM3QjlBRDEwNDJEMzJFMDAwOUQ0NDcgLyogQ2FudmFz
Qnl0ZUFycmF5LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBDYW52YXNCeXRlQXJyYXkuaWRs
OyBwYXRoID0gY2FudmFzL0NhbnZhc0J5dGVBcnJheS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTQ5QzdCOUFFMTA0MkQzMkUwMDA5RDQ0NyAvKiBDYW52YXNGcmFtZWJ1ZmZlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDYW52YXNGcmFtZWJ1ZmZl
ci5jcHA7IHBhdGggPSBjYW52YXMvQ2FudmFzRnJhbWVidWZmZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk0OUM3QjlBRjEwNDJEMzJFMDAwOUQ0NDcgLyogQ2FudmFzRnJhbWVi
dWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ2FudmFzRnJhbWVidWZm
ZXIuaDsgcGF0aCA9IGNhbnZhcy9DYW52YXNGcmFtZWJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk0OUM3QjlCMDEwNDJEMzJFMDAwOUQ0NDcgLyogQ2FudmFzRnJhbWVidWZm
ZXIuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IENhbnZhc0ZyYW1lYnVmZmVyLmlkbDsgcGF0
aCA9IGNhbnZhcy9DYW52YXNGcmFtZWJ1ZmZlci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTQ5QzdCOUIxMTA0MkQzMkUwMDA5RDQ0NyAvKiBDYW52YXNOdW1iZXJBcnJheS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDYW52YXNOdW1iZXJBcnJheS5j
cHA7IHBhdGggPSBjYW52YXMvQ2FudmFzTnVtYmVyQXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk0OUM3QjlCMjEwNDJEMzJFMDAwOUQ0NDcgLyogQ2FudmFzTnVtYmVyQXJy
YXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ2FudmFzTnVtYmVyQXJyYXku
aDsgcGF0aCA9IGNhbnZhcy9DYW52YXNOdW1iZXJBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk0OUM3QjlCMzEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzTnVtYmVyQXJyYXku
aWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IENhbnZhc051bWJlckFycmF5LmlkbDsgcGF0aCA9
IGNhbnZhcy9DYW52YXNOdW1iZXJBcnJheS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTQ5QzdCOUI0MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNPYmplY3QuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ2FudmFzT2JqZWN0LmNwcDsgcGF0aCA9IGNh
bnZhcy9DYW52YXNPYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUM3
QjlCNTEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IENhbnZhc09iamVjdC5oOyBwYXRoID0gY2FudmFzL0NhbnZhc09iamVj
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUM3QjlCNjEwNDJEMzJGMDAwOUQ0
NDcgLyogQ2FudmFzUHJvZ3JhbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBDYW52YXNQcm9ncmFtLmNwcDsgcGF0aCA9IGNhbnZhcy9DYW52YXNQcm9ncmFtLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlDN0I5QjcxMDQyRDMyRjAwMDlENDQ3IC8q
IENhbnZhc1Byb2dyYW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ2FudmFz
UHJvZ3JhbS5oOyBwYXRoID0gY2FudmFzL0NhbnZhc1Byb2dyYW0uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNDlDN0I5QjgxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1Byb2dyYW0u
aWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IENhbnZhc1Byb2dyYW0uaWRsOyBwYXRoID0gY2Fu
dmFzL0NhbnZhc1Byb2dyYW0uaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUM3
QjlCOTEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzUmVuZGVyYnVmZmVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENhbnZhc1JlbmRlcmJ1ZmZlci5jcHA7IHBhdGgg
PSBjYW52YXMvQ2FudmFzUmVuZGVyYnVmZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNDlDN0I5QkExMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1JlbmRlcmJ1ZmZlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBDYW52YXNSZW5kZXJidWZmZXIuaDsgcGF0
aCA9IGNhbnZhcy9DYW52YXNSZW5kZXJidWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNDlDN0I5QkIxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1JlbmRlcmJ1ZmZlci5pZGwg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gQ2FudmFzUmVuZGVyYnVmZmVyLmlkbDsgcGF0aCA9IGNh
bnZhcy9DYW52YXNSZW5kZXJidWZmZXIuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk0OUM3QjlCQzEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDYW52YXNSZW5kZXJpbmdDb250
ZXh0LmNwcDsgcGF0aCA9IGNhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlDN0I5QkQxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dC5oOyBwYXRoID0gY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlDN0I5QkUxMDQyRDMyRjAwMDlE
NDQ3IC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQuaWRsOyBwYXRoID0gY2FudmFzL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUM3QjlCRjEwNDJE
MzJGMDAwOUQ0NDcgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5jcHA7IHBh
dGggPSBjYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNDlDN0I5QzAxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQzRC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0QuaDsgcGF0aCA9IGNhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0M0Qu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlDN0I5QzExMDQyRDMyRjAwMDlENDQ3
IC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0g
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmlkbDsgcGF0aCA9IGNhbnZhcy9DYW52YXNSZW5kZXJp
bmdDb250ZXh0M0QuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUM3QjlDMjEw
NDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzU2hhZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IENhbnZhc1NoYWRlci5jcHA7IHBhdGggPSBjYW52YXMvQ2FudmFzU2hh
ZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlDN0I5QzMxMDQyRDMyRjAw
MDlENDQ3IC8qIENhbnZhc1NoYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBDYW52YXNTaGFkZXIuaDsgcGF0aCA9IGNhbnZhcy9DYW52YXNTaGFkZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlDN0I5QzQxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1No
YWRlci5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gQ2FudmFzU2hhZGVyLmlkbDsgcGF0aCA9
IGNhbnZhcy9DYW52YXNTaGFkZXIuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0
OUM3QjlDNTEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzVGV4dHVyZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDYW52YXNUZXh0dXJlLmNwcDsgcGF0aCA9IGNhbnZh
cy9DYW52YXNUZXh0dXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlDN0I5
QzYxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1RleHR1cmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gQ2FudmFzVGV4dHVyZS5oOyBwYXRoID0gY2FudmFzL0NhbnZhc1RleHR1
cmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlDN0I5QzcxMDQyRDMyRjAwMDlE
NDQ3IC8qIENhbnZhc1RleHR1cmUuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IENhbnZhc1Rl
eHR1cmUuaWRsOyBwYXRoID0gY2FudmFzL0NhbnZhc1RleHR1cmUuaWRsOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk0OUM3QjlGQjEwNDJEMzY1MDAwOUQ0NDcgLyogR3JhcGhpY3NDb250
ZXh0M0QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0
M0QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlDN0I5RkQxMDQyRDM4QzAwMDlE
NDQ3IC8qIENhbnZhczNETGF5ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q2FudmFzM0RMYXllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUM3QjlGRTEw
NDJEMzhDMDAwOUQ0NDcgLyogQ2FudmFzM0RMYXllci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IENhbnZhczNETGF5ZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTQ5QzdCOUZGMTA0MkQzOEMwMDA5RDQ0NyAvKiBHcmFwaGljc0NvbnRleHQzRE1h
Yy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc0NvbnRl
eHQzRE1hYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5QzdCQTc4MTA0MkVG
QUUwMDA5RDQ0NyAvKiBPcGVuR0wuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IG5hbWUgPSBPcGVuR0wu
ZnJhbWV3b3JrOyBwYXRoID0gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvT3BlbkdMLmZyYW1l
d29yazsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsKKwkJNDlDN0JBOEMxMDQyRjVCMTAw
MDlENDQ3IC8qIEpTRG9jdW1lbnRDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNEb2N1bWVudEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTQ5QzdENEZBMTA0MkY5NUYwMDA5RDQ0NyAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5RDVE
QzI3MEY0MjNBNzMwMDhGMjBGRCAvKiBNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBNYXRyaXgzRFRyYW5zZm9ybU9wZXJh
dGlvbi5jcHA7IHBhdGggPSB0cmFuc2Zvcm1zL01hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlENURDMjgwRjQyM0E3MzAwOEYyMEZE
IC8qIE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmg7IHBhdGggPSB0cmFuc2Zvcm1z
L01hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTQ5RDVEQzI5MEY0MjNBNzMwMDhGMjBGRCAvKiBQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJh
dGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBQZXJzcGVjdGl2
ZVRyYW5zZm9ybU9wZXJhdGlvbi5jcHA7IHBhdGggPSB0cmFuc2Zvcm1zL1BlcnNwZWN0aXZlVHJh
bnNmb3JtT3BlcmF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY5OTYs
NyArNzExNyw2IEBACiAJCTg1RjU2QTc5MEE5OENFMzcwMEFEQjYwQSAvKiBET01Qcm9jZXNzaW5n
SW5zdHJ1Y3Rpb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
RE9NUHJvY2Vzc2luZ0luc3RydWN0aW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk4NUZGMzE1ODBBQUZCRkNCMDAzNzRGMzggLyogRE9NS2V5Ym9hcmRFdmVudC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NS2V5Ym9hcmRFdmVudC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk4NUZGMzE1OTBBQUZCRkNCMDAzNzRGMzggLyogRE9NS2V5Ym9h
cmRFdmVudC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBET01L
ZXlib2FyZEV2ZW50Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5MjkyNjQ3NjBC
NjFGQzcyMDBCNDFEMzQgLyogSlNEb2N1bWVudEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNEb2N1bWVudEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTkzMDJCMEJDMEQ3OUY4MjkwMEM3RUU4MyAvKiBQYWdlR3JvdXAuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFnZUdyb3VwLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMwMkIwQkUwRDc5RjgyQzAwQzdFRTgzIC8qIFBh
Z2VHcm91cC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYWdlR3JvdXAuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMwNUIyNEMwOThGMUI2QjAwQzI4ODU1IC8q
IFRpbWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpbWVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05NTk1LDYgKzk3MTUsNyBAQAogCQkJCURENzYzQkIy
MDk5MkMyQzkwMDc0MEI4RSAvKiBsaWJ4bWwyLmR5bGliIGluIEZyYW1ld29ya3MgKi8sCiAJCQkJ
QTg4QUQ1MkYwOTUyNEI5MjAwMUREMTk2IC8qIFF1YXJ0ekNvcmUuZnJhbWV3b3JrIGluIEZyYW1l
d29ya3MgKi8sCiAJCQkJMUE3RkE3Q0MwRERBNEI3NzAwMjhGOEE1IC8qIFN5c3RlbUNvbmZpZ3Vy
YXRpb24uZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8sCisJCQkJNDlDN0JBNzkxMDQyRUZBRTAw
MDlENDQ3IC8qIE9wZW5HTC5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKIAkJCSk7CiAJCQly
dW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTk2NTIsNiAr
OTc3Myw3IEBACiAJCTA4NjdENjlBRkU4NDAyOEZDMDJBQUMwNyAvKiBGcmFtZXdvcmtzICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk0OUM3QkE3ODEwNDJF
RkFFMDAwOUQ0NDcgLyogT3BlbkdMLmZyYW1ld29yayAqLywKIAkJCQlGNUMyODY5MzAyODQ2RENE
MDE4NjM1Q0EgLyogQXBwbGljYXRpb25TZXJ2aWNlcy5mcmFtZXdvcmsgKi8sCiAJCQkJRjVDMjg2
OTQwMjg0NkRDRDAxODYzNUNBIC8qIENhcmJvbi5mcmFtZXdvcmsgKi8sCiAJCQkJRjVDMjg2OTUw
Mjg0NkRDRDAxODYzNUNBIC8qIENvY29hLmZyYW1ld29yayAqLywKQEAgLTEwMTgyLDIwICsxMDMw
NCw1MiBAQAogCQk0OTQ4NEZBRTEwMkNGMDFFMDAxODdERDMgLyogY2FudmFzICovID0gewogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk0OUM3QjlBODEwNDJEMzJFMDAw
OUQ0NDcgLyogQ2FudmFzQnVmZmVyLmNwcCAqLywKKwkJCQk0OUM3QjlBOTEwNDJEMzJFMDAwOUQ0
NDcgLyogQ2FudmFzQnVmZmVyLmggKi8sCisJCQkJNDlDN0I5QUExMDQyRDMyRTAwMDlENDQ3IC8q
IENhbnZhc0J1ZmZlci5pZGwgKi8sCisJCQkJNDlDN0I5QUIxMDQyRDMyRTAwMDlENDQ3IC8qIENh
bnZhc0J5dGVBcnJheS5jcHAgKi8sCisJCQkJNDlDN0I5QUMxMDQyRDMyRTAwMDlENDQ3IC8qIENh
bnZhc0J5dGVBcnJheS5oICovLAorCQkJCTQ5QzdCOUFEMTA0MkQzMkUwMDA5RDQ0NyAvKiBDYW52
YXNCeXRlQXJyYXkuaWRsICovLAorCQkJCTQ5QzdCOUFFMTA0MkQzMkUwMDA5RDQ0NyAvKiBDYW52
YXNGcmFtZWJ1ZmZlci5jcHAgKi8sCisJCQkJNDlDN0I5QUYxMDQyRDMyRTAwMDlENDQ3IC8qIENh
bnZhc0ZyYW1lYnVmZmVyLmggKi8sCisJCQkJNDlDN0I5QjAxMDQyRDMyRTAwMDlENDQ3IC8qIENh
bnZhc0ZyYW1lYnVmZmVyLmlkbCAqLywKIAkJCQk0OTQ4NEZCMzEwMkNGMjNDMDAxODdERDMgLyog
Q2FudmFzR3JhZGllbnQuY3BwICovLAogCQkJCTQ5NDg0RkI0MTAyQ0YyM0MwMDE4N0REMyAvKiBD
YW52YXNHcmFkaWVudC5oICovLAogCQkJCTQ5NDg0RkI1MTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52
YXNHcmFkaWVudC5pZGwgKi8sCisJCQkJNDlDN0I5QjExMDQyRDMyRTAwMDlENDQ3IC8qIENhbnZh
c051bWJlckFycmF5LmNwcCAqLywKKwkJCQk0OUM3QjlCMjEwNDJEMzJFMDAwOUQ0NDcgLyogQ2Fu
dmFzTnVtYmVyQXJyYXkuaCAqLywKKwkJCQk0OUM3QjlCMzEwNDJEMzJGMDAwOUQ0NDcgLyogQ2Fu
dmFzTnVtYmVyQXJyYXkuaWRsICovLAorCQkJCTQ5QzdCOUI0MTA0MkQzMkYwMDA5RDQ0NyAvKiBD
YW52YXNPYmplY3QuY3BwICovLAorCQkJCTQ5QzdCOUI1MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52
YXNPYmplY3QuaCAqLywKIAkJCQk0OTQ4NEZCNjEwMkNGMjNDMDAxODdERDMgLyogQ2FudmFzUGF0
dGVybi5jcHAgKi8sCiAJCQkJNDk0ODRGQjcxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc1BhdHRl
cm4uaCAqLywKIAkJCQk0OTQ4NEZCODEwMkNGMjNDMDAxODdERDMgLyogQ2FudmFzUGF0dGVybi5p
ZGwgKi8sCiAJCQkJNDk0ODRGQjkxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc1BpeGVsQXJyYXku
Y3BwICovLAogCQkJCTQ5NDg0RkJBMTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNQaXhlbEFycmF5
LmggKi8sCiAJCQkJNDk0ODRGQkIxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc1BpeGVsQXJyYXku
aWRsICovLAorCQkJCTQ5QzdCOUI2MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNQcm9ncmFtLmNw
cCAqLywKKwkJCQk0OUM3QjlCNzEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzUHJvZ3JhbS5oICov
LAorCQkJCTQ5QzdCOUI4MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNQcm9ncmFtLmlkbCAqLywK
KwkJCQk0OUM3QjlCOTEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzUmVuZGVyYnVmZmVyLmNwcCAq
LywKKwkJCQk0OUM3QjlCQTEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzUmVuZGVyYnVmZmVyLmgg
Ki8sCisJCQkJNDlDN0I5QkIxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1JlbmRlcmJ1ZmZlci5p
ZGwgKi8sCisJCQkJNDlDN0I5QkMxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQuY3BwICovLAorCQkJCTQ5QzdCOUJEMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0LmggKi8sCisJCQkJNDlDN0I5QkUxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQuaWRsICovLAogCQkJCTQ5NDg0RkJDMTAyQ0YyM0MwMDE4N0REMyAv
KiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwICovLAogCQkJCTQ5NDg0RkJEMTAyQ0YyM0Mw
MDE4N0REMyAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCAqLywKIAkJCQk0OTQ4NEZCRTEw
MkNGMjNDMDAxODdERDMgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmlkbCAqLywKKwkJCQk0
OUM3QjlCRjEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmNwcCAq
LywKKwkJCQk0OUM3QjlDMDEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNELmggKi8sCisJCQkJNDlDN0I5QzExMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQzRC5pZGwgKi8sCisJCQkJNDlDN0I5QzIxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZh
c1NoYWRlci5jcHAgKi8sCisJCQkJNDlDN0I5QzMxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1No
YWRlci5oICovLAorCQkJCTQ5QzdCOUM0MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNTaGFkZXIu
aWRsICovLAogCQkJCTQ5NDg0RkJGMTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNTdHlsZS5jcHAg
Ki8sCiAJCQkJNDk0ODRGQzAxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc1N0eWxlLmggKi8sCisJ
CQkJNDlDN0I5QzUxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1RleHR1cmUuY3BwICovLAorCQkJ
CTQ5QzdCOUM2MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNUZXh0dXJlLmggKi8sCisJCQkJNDlD
N0I5QzcxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1RleHR1cmUuaWRsICovLAogCQkJKTsKIAkJ
CW5hbWUgPSBjYW52YXM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMTIyNTUsMTIg
KzEyNDA5LDMyIEBACiAJCUE4M0I3OTA4MENDQUZGMkIwMDBCMDgyNSAvKiBIVE1MICovID0gewog
CQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk0OUM3Qjk4MDEwNDJEMkQz
MDAwOUQ0NDcgLyogSlNDYW52YXNCdWZmZXIuY3BwICovLAorCQkJCTQ5QzdCOTgxMTA0MkQyRDMw
MDA5RDQ0NyAvKiBKU0NhbnZhc0J1ZmZlci5oICovLAorCQkJCTQ5QzdCOTgyMTA0MkQyRDMwMDA5
RDQ0NyAvKiBKU0NhbnZhc0J5dGVBcnJheS5jcHAgKi8sCisJCQkJNDlDN0I5ODMxMDQyRDJEMzAw
MDlENDQ3IC8qIEpTQ2FudmFzQnl0ZUFycmF5LmggKi8sCisJCQkJNDlDN0I5ODQxMDQyRDJEMzAw
MDlENDQ3IC8qIEpTQ2FudmFzRnJhbWVidWZmZXIuY3BwICovLAorCQkJCTQ5QzdCOTg1MTA0MkQy
RDMwMDA5RDQ0NyAvKiBKU0NhbnZhc0ZyYW1lYnVmZmVyLmggKi8sCiAJCQkJNjVERjMyMzMwOUQx
REU2NTAwMEJFMzI1IC8qIEpTQ2FudmFzR3JhZGllbnQuY3BwICovLAogCQkJCTY1REYzMjM0MDlE
MURFNjUwMDBCRTMyNSAvKiBKU0NhbnZhc0dyYWRpZW50LmggKi8sCisJCQkJNDlDN0I5ODYxMDQy
RDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzTnVtYmVyQXJyYXkuY3BwICovLAorCQkJCTQ5QzdCOTg3
MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc051bWJlckFycmF5LmggKi8sCiAJCQkJNjVERjMy
MzUwOUQxREU2NTAwMEJFMzI1IC8qIEpTQ2FudmFzUGF0dGVybi5jcHAgKi8sCiAJCQkJNjVERjMy
MzYwOUQxREU2NTAwMEJFMzI1IC8qIEpTQ2FudmFzUGF0dGVybi5oICovLAorCQkJCTQ5QzdCOTg4
MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1Byb2dyYW0uY3BwICovLAorCQkJCTQ5QzdCOTg5
MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1Byb2dyYW0uaCAqLywKKwkJCQk0OUM3Qjk4QTEw
NDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNSZW5kZXJidWZmZXIuY3BwICovLAorCQkJCTQ5QzdC
OThCMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1JlbmRlcmJ1ZmZlci5oICovLAorCQkJCTQ5
QzdCOThDMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuY3BwICov
LAorCQkJCTQ5QzdCOThEMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQuaCAqLywKIAkJCQk2NURGMzIzNzA5RDFERTY1MDAwQkUzMjUgLyogSlNDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQuY3BwICovLAogCQkJCTY1REYzMjM4MDlEMURFNjUwMDBCRTMyNSAvKiBKU0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oICovLAorCQkJCTQ5QzdENEZBMTA0MkY5NUYwMDA5RDQ0
NyAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5jcHAgKi8sCisJCQkJNDlDN0I5OEUxMDQy
RDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmggKi8sCisJCQkJNDlD
N0I5OEYxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzU2hhZGVyLmNwcCAqLywKKwkJCQk0OUM3
Qjk5MDEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNTaGFkZXIuaCAqLywKKwkJCQk0OUM3Qjk5
MTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNUZXh0dXJlLmNwcCAqLywKKwkJCQk0OUM3Qjk5
MjEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNUZXh0dXJlLmggKi8sCiAJCQkJQkM3N0QxNjUw
RkYxOUY1NTAwNzA4ODdCIC8qIEpTRGF0YUdyaWRDb2x1bW4uY3BwICovLAogCQkJCUJDNzdEMTY2
MEZGMTlGNTUwMDcwODg3QiAvKiBKU0RhdGFHcmlkQ29sdW1uLmggKi8sCiAJCQkJQkM3N0QxNjcw
RkYxOUY1NTAwNzA4ODdCIC8qIEpTRGF0YUdyaWRDb2x1bW5MaXN0LmNwcCAqLywKQEAgLTEzNDU5
LDYgKzEzNjMzLDggQEAKIAkJQjI3NTM1NDkwQjA1MzgxNDAwMkNFNjRGIC8qIG1hYyAqLyA9IHsK
IAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJNDlDN0I5RkQxMDQyRDM4
QzAwMDlENDQ3IC8qIENhbnZhczNETGF5ZXIuaCAqLywKKwkJCQk0OUM3QjlGRTEwNDJEMzhDMDAw
OUQ0NDcgLyogQ2FudmFzM0RMYXllci5tbSAqLywKIAkJCQlFREUzQTRGRjBDN0E0MzA2MDA5NTZB
MzcgLyogQ29sb3JNYWMuaCAqLywKIAkJCQlCMjc1MzU0QTBCMDUzODE0MDAyQ0U2NEYgLyogQ29s
b3JNYWMubW0gKi8sCiAJCQkJMzcyNENBNTUwRTY4QTdFNDAwREI0Mzg0IC8qIENvcmVUZXh0Q29u
dHJvbGxlci5jcHAgKi8sCkBAIC0xMzQ3Niw2ICsxMzY1Miw3IEBACiAJCQkJQjJBRkZDN0EwRDAw
QTVDMTAwMzAwNzREIC8qIEZvbnRQbGF0Zm9ybURhdGFNYWMubW0gKi8sCiAJCQkJQjJBRkZDN0Iw
RDAwQTVDMTAwMzAwNzREIC8qIEdseXBoUGFnZVRyZWVOb2RlTWFjLmNwcCAqLywKIAkJCQlCMjc3
QjQwMzBCMjJGMzdDMDAwNEJFQzYgLyogR3JhcGhpY3NDb250ZXh0TWFjLm1tICovLAorCQkJCTQ5
QzdCOUZGMTA0MkQzOEMwMDA5RDQ0NyAvKiBHcmFwaGljc0NvbnRleHQzRE1hYy5jcHAgKi8sCiAJ
CQkJMEY1ODBCMDQwRjEyQTI1NTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXJDQS5oICovLAogCQkJ
CTBGNTgwQjAzMEYxMkEyNTQwMDUxRDY4OSAvKiBHcmFwaGljc0xheWVyQ0EubW0gKi8sCiAJCQkJ
QjI3NTM1OEQwQjA1M0E2NjAwMkNFNjRGIC8qIEljb25NYWMubW0gKi8sCkBAIC0xMzU0Niw2ICsx
MzcyMyw3IEBACiAJCQkJQjJBMDE1OTIwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzQ29udGV4
dC5jcHAgKi8sCiAJCQkJQjJBMDE1OTMwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzQ29udGV4
dC5oICovLAogCQkJCUE4OEZFMzMzMEU1RUVFODcwMDhEOEMwRiAvKiBHcmFwaGljc0NvbnRleHRQ
cml2YXRlLmggKi8sCisJCQkJNDlDN0I5RkIxMDQyRDM2NTAwMDlENDQ3IC8qIEdyYXBoaWNzQ29u
dGV4dDNELmggKi8sCiAJCQkJMEY1ODBCMDkwRjEyQTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5
ZXIuY3BwICovLAogCQkJCTBGNTgwQjBBMEYxMkEyNjkwMDUxRDY4OSAvKiBHcmFwaGljc0xheWVy
LmggKi8sCiAJCQkJMEY1ODBCMEIwRjEyQTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXJDbGll
bnQuaCAqLywKQEAgLTEzODU0LDcgKzE0MDMyLDYgQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCTQx
NUI3QzU0MEZGNTk4RTYwMDY3NzBGNyAvKiBKU0Fic3RyYWN0V29ya2VyQ3VzdG9tLmNwcCAqLywK
IAkJCQlCQzJFRDZCQjBDNkJEMkYwMDA5MjBCRkYgLyogSlNBdHRyQ3VzdG9tLmNwcCAqLywKLQkJ
CQkxQTlFRjQ1NjBBMUI5NTdEMDAzMzJCNjMgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRD
dXN0b20uY3BwICovLAogCQkJCTkzQkE1OUIxMEYyQUE1RkUwMDhFOEU5OSAvKiBKU0NEQVRBU2Vj
dGlvbkN1c3RvbS5jcHAgKi8sCiAJCQkJQkNBODNFNTEwRDdDRTIwNTAwMzQyMUE4IC8qIEpTQ2xp
cGJvYXJkQ3VzdG9tLmNwcCAqLywKIAkJCQlDMERGQzg2RjBEQjY4NDFBMDAzRUFFN0MgLyogSlND
b25zb2xlQ3VzdG9tLmNwcCAqLywKQEAgLTEzODYzLDYgKzE0MDQwLDEwIEBACiAJCQkJOTM5MjI2
MkUxMDMyMTA4NDAwNkU3RDVEIC8qIEpTQ1NTUnVsZUxpc3RDdXN0b20uY3BwICovLAogCQkJCUJD
NTgyNUYyMEMwQjg5MzgwMDUzRjFCNSAvKiBKU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3Bw
ICovLAogCQkJCUJDMjBGQjdFMEMwRThFNkMwMEQxNDQ3RiAvKiBKU0NTU1ZhbHVlQ3VzdG9tLmNw
cCAqLywKKwkJCQk0OUM3Qjk3QzEwNDJEMjA4MDAwOUQ0NDcgLyogSlNDYW52YXNOdW1iZXJBcnJh
eUN1c3RvbS5jcHAgKi8sCisJCQkJNDk4M0E5NkYxMDQzNUU5MDAwREI3MEY5IC8qIEpTQ2FudmFz
UmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAgKi8sCisJCQkJMUE5RUY0NTYwQTFCOTU3RDAwMzMy
QjYzIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcCAqLywKKwkJCQk0OUM3
Qjk3RDEwNDJEMjA4MDAwOUQ0NDcgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RDdXN0b20u
Y3BwICovLAogCQkJCUZFODBEN0EyMEU5QzFFRDIwMDBENkY3NSAvKiBKU0N1c3RvbVBvc2l0aW9u
Q2FsbGJhY2suY3BwICovLAogCQkJCUZFODBEN0EzMEU5QzFFRDIwMDBENkY3NSAvKiBKU0N1c3Rv
bVBvc2l0aW9uQ2FsbGJhY2suaCAqLywKIAkJCQlGRTgwRDdBNDBFOUMxRUQyMDAwRDZGNzUgLyog
SlNDdXN0b21Qb3NpdGlvbkVycm9yQ2FsbGJhY2suY3BwICovLApAQCAtMTM4ODIsOCArMTQwNjMs
NyBAQAogCQkJCUJDNzdEMTUxMEZGMTlDNzMwMDcwODg3QiAvKiBKU0RhdGFHcmlkQ29sdW1uTGlz
dEN1c3RvbS5jcHAgKi8sCiAJCQkJNDE2MkE0NTMxMDExNDVFMzAwREZGM0VEIC8qIEpTRGVkaWNh
dGVkV29ya2VyQ29udGV4dEN1c3RvbS5jcHAgKi8sCiAJCQkJMzM1MDNDQkYxMDE3OUMxQTAwM0I0
N0UxIC8qIEpTRGVza3RvcE5vdGlmaWNhdGlvbnNDdXN0b20uY3BwICovLAotCQkJCTkyOTI2NDc2
MEI2MUZDNzIwMEI0MUQzNCAvKiBKU0RvY3VtZW50Q3VzdG9tLmNwcCAqLywKLQkJCQk5MjkyNjQ3
NjBCNjFGQzcyMDBCNDFEMzQgLyogSlNEb2N1bWVudEN1c3RvbS5jcHAgKi8sCisJCQkJNDlDN0JB
OEMxMDQyRjVCMTAwMDlENDQ3IC8qIEpTRG9jdW1lbnRDdXN0b20uY3BwICovLAogCQkJCUJDMURF
QTRFMEUyNjhFQjYwMDgzQTczRiAvKiBKU0RvY3VtZW50RnJhZ21lbnRDdXN0b20uY3BwICovLAog
CQkJCUJDMURFQTRFMEUyNjhFQjYwMDgzQTczRiAvKiBKU0RvY3VtZW50RnJhZ21lbnRDdXN0b20u
Y3BwICovLAogCQkJCTFBQzIyNjE2MERCNjlGNzQwMDg5QjY2OSAvKiBKU0RPTUFwcGxpY2F0aW9u
Q2FjaGVDdXN0b20uY3BwICovLApAQCAtMTczMzAsNiArMTc1MTAsMjkgQEAKIAkJCQlCQ0ZBOTMw
ODEwMzMzMTkzMDA3QjI1RDEgLyogUmVuZGVyT3ZlcmZsb3cuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTAwMTQ2MjhCMTAzQ0QxREUwMDBCMjBEQiAvKiBPcmlnaW5BY2Nlc3NFbnRyeS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQjUxQkY2RjExMDJDOUU1OTAwMDJDMTVBIC8qIFNRTFRyYW5zYWN0aW9uQ2xp
ZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk0OUM3Qjk5NDEwNDJEMkQzMDAwOUQ0NDcgLyogSlND
YW52YXNCdWZmZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ5QzdCOTk2MTA0MkQyRDMwMDA5RDQ0
NyAvKiBKU0NhbnZhc0J5dGVBcnJheS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDlDN0I5OTgxMDQy
RDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzRnJhbWVidWZmZXIuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTQ5QzdCOTlBMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc051bWJlckFycmF5LmggaW4gSGVh
ZGVycyAqLywKKwkJCQk0OUM3Qjk5QzEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNQcm9ncmFt
LmggaW4gSGVhZGVycyAqLywKKwkJCQk0OUM3Qjk5RTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52
YXNSZW5kZXJidWZmZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ5QzdCOUEwMTA0MkQyRDMwMDA5
RDQ0NyAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ5
QzdCOUExMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJNDlDN0I5QTMxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzU2hh
ZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk0OUM3QjlBNTEwNDJEMkQzMDAwOUQ0NDcgLyogSlND
YW52YXNUZXh0dXJlLmggaW4gSGVhZGVycyAqLywKKwkJCQk0OUM3QjlDOTEwNDJEMzJGMDAwOUQ0
NDcgLyogQ2FudmFzQnVmZmVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk0OUM3QjlDQzEwNDJEMzJG
MDAwOUQ0NDcgLyogQ2FudmFzQnl0ZUFycmF5LmggaW4gSGVhZGVycyAqLywKKwkJCQk0OUM3QjlD
RjEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzRnJhbWVidWZmZXIuaCBpbiBIZWFkZXJzICovLAor
CQkJCTQ5QzdCOUQyMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNOdW1iZXJBcnJheS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNDlDN0I5RDUxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc09iamVjdC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNDlDN0I5RDcxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1By
b2dyYW0uaCBpbiBIZWFkZXJzICovLAorCQkJCTQ5QzdCOURBMTA0MkQzMkYwMDA5RDQ0NyAvKiBD
YW52YXNSZW5kZXJidWZmZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ5QzdCOUREMTA0MkQzMkYw
MDA5RDQ0NyAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLywKKwkJCQk0
OUM3QjlFMDEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmggaW4g
SGVhZGVycyAqLywKKwkJCQk0OUM3QjlFMzEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzU2hhZGVy
LmggaW4gSGVhZGVycyAqLywKKwkJCQk0OUM3QjlFNjEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFz
VGV4dHVyZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDlDN0I5RkMxMDQyRDM2NTAwMDlENDQ3IC8q
IEdyYXBoaWNzQ29udGV4dDNELmggaW4gSGVhZGVycyAqLywKKwkJCQk0OUM3QkEwMDEwNDJEMzhD
MDAwOUQ0NDcgLyogQ2FudmFzM0RMYXllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0xNzQzNSw2ICsx
NzYzOCwxNiBAQAogCQkJCTQ5NDg0RkM2MTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNQYXR0ZXJu
LmlkbCBpbiBSZXNvdXJjZXMgKi8sCiAJCQkJNDk0ODRGQzkxMDJDRjIzQzAwMTg3REQzIC8qIENh
bnZhc1BpeGVsQXJyYXkuaWRsIGluIFJlc291cmNlcyAqLywKIAkJCQk0OTQ4NEZDQzEwMkNGMjND
MDAxODdERDMgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmlkbCBpbiBSZXNvdXJjZXMgKi8s
CisJCQkJNDlDN0I5Q0ExMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc0J1ZmZlci5pZGwgaW4gUmVz
b3VyY2VzICovLAorCQkJCTQ5QzdCOUNEMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNCeXRlQXJy
YXkuaWRsIGluIFJlc291cmNlcyAqLywKKwkJCQk0OUM3QjlEMDEwNDJEMzJGMDAwOUQ0NDcgLyog
Q2FudmFzRnJhbWVidWZmZXIuaWRsIGluIFJlc291cmNlcyAqLywKKwkJCQk0OUM3QjlEMzEwNDJE
MzJGMDAwOUQ0NDcgLyogQ2FudmFzTnVtYmVyQXJyYXkuaWRsIGluIFJlc291cmNlcyAqLywKKwkJ
CQk0OUM3QjlEODEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzUHJvZ3JhbS5pZGwgaW4gUmVzb3Vy
Y2VzICovLAorCQkJCTQ5QzdCOURCMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNSZW5kZXJidWZm
ZXIuaWRsIGluIFJlc291cmNlcyAqLywKKwkJCQk0OUM3QjlERTEwNDJEMzJGMDAwOUQ0NDcgLyog
Q2FudmFzUmVuZGVyaW5nQ29udGV4dC5pZGwgaW4gUmVzb3VyY2VzICovLAorCQkJCTQ5QzdCOUUx
MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuaWRsIGluIFJlc291
cmNlcyAqLywKKwkJCQk0OUM3QjlFNDEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzU2hhZGVyLmlk
bCBpbiBSZXNvdXJjZXMgKi8sCisJCQkJNDlDN0I5RTcxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZh
c1RleHR1cmUuaWRsIGluIFJlc291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE4MzQ5LDcgKzE4NTYyLDYgQEAKIAkJ
CQk0MTYyQTQ1NDEwMTE0NUUzMDBERkYzRUQgLyogSlNEZWRpY2F0ZWRXb3JrZXJDb250ZXh0Q3Vz
dG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMzNTAzQ0MwMTAxNzlDMUEwMDNCNDdFMSAvKiBK
U0Rlc2t0b3BOb3RpZmljYXRpb25zQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1OURE
QzgyMDlFMTk4QkEwMDFCRjNDNiAvKiBKU0RvY3VtZW50LmNwcCBpbiBTb3VyY2VzICovLAotCQkJ
CTkyOTI2NDc3MEI2MUZDNzIwMEI0MUQzNCAvKiBKU0RvY3VtZW50Q3VzdG9tLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTFBNDk0RURFMEExMjNGNEMwMEZEQUZDMSAvKiBKU0RvY3VtZW50RnJhZ21l
bnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMxREVBNEYwRTI2OEVCNjAwODNBNzNGIC8qIEpT
RG9jdW1lbnRGcmFnbWVudEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2NURGMzFGNTA5
RDFDQzYwMDAwQkUzMjUgLyogSlNEb2N1bWVudFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0x
OTM5OCw2ICsxOTYxMCwzMyBAQAogCQkJCUI1QzExMjNCMTAyQjZDNDYwMDA5NjU3OCAvKiBTUUxU
cmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTAwMTQ2MjhBMTAz
Q0QxREUwMDBCMjBEQiAvKiBPcmlnaW5BY2Nlc3NFbnRyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlCNTFCRjZGMDEwMkM5RTU5MDAwMkMxNUEgLyogU1FMVHJhbnNhY3Rpb25DbGllbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJNDlDN0I5N0UxMDQyRDIwODAwMDlENDQ3IC8qIEpTQ2FudmFzTnVt
YmVyQXJyYXlDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDlDN0I5N0YxMDQyRDIwODAw
MDlENDQ3IC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEQ3VzdG9tLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTQ5QzdCOTkzMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc0J1ZmZlci5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQk0OUM3Qjk5NTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNC
eXRlQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDlDN0I5OTcxMDQyRDJEMzAwMDlENDQ3
IC8qIEpTQ2FudmFzRnJhbWVidWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDlDN0I5OTkx
MDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzTnVtYmVyQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJNDlDN0I5OUIxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzUHJvZ3JhbS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQk0OUM3Qjk5RDEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNSZW5k
ZXJidWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDlDN0I5OUYxMDQyRDJEMzAwMDlENDQ3
IC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0OUM3
QjlBMjEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNTaGFkZXIuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJNDlDN0I5QTQxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzVGV4dHVyZS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQk0OUM3QjlDODEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzQnVmZmVy
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQ5QzdCOUNCMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52
YXNCeXRlQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDlDN0I5Q0UxMDQyRDMyRjAwMDlE
NDQ3IC8qIENhbnZhc0ZyYW1lYnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQ5QzdCOUQx
MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNOdW1iZXJBcnJheS5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQk0OUM3QjlENDEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzT2JqZWN0LmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTQ5QzdCOUQ2MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNQcm9ncmFtLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTQ5QzdCOUQ5MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNS
ZW5kZXJidWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDlDN0I5REMxMDQyRDMyRjAwMDlE
NDQ3IC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDlD
N0I5REYxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQk0OUM3QjlFMjEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzU2hhZGVy
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQ5QzdCOUU1MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52
YXNUZXh0dXJlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQ5QzdCQTAxMTA0MkQzOEMwMDA5RDQ0
NyAvKiBDYW52YXMzRExheWVyLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNDlDN0JBMDIxMDQyRDM4
QzAwMDlENDQ3IC8qIEdyYXBoaWNzQ29udGV4dDNETWFjLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTQ5QzdCQThEMTA0MkY1QjEwMDA5RDQ0NyAvKiBKU0RvY3VtZW50Q3VzdG9tLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTQ5QzdENEZCMTA0MkY5NUYwMDA5RDQ0NyAvKiBKU0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQzRC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0OTgzQTk3MDEwNDM1RTkwMDBEQjcw
RjkgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREN1c3RvbS5jcHAJKHJldmlzaW9uIDQ3NzQ4KQorKysgV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY3LDI3ICs2NywzMSBAQCBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNTdHlsZT4gdG9IVE1M
Q2FuCiAKIEpTVmFsdWUgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnN0cm9rZVN0eWxlKEV4
ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKLSAgICByZXR1cm4gdG9KUyhleGVjLCBpbXBsKCktPnN0
cm9rZVN0eWxlKCkpOyAgICAgICAgCisgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBjb250
ZXh0ID0gc3RhdGljX2Nhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKj4oaW1wbCgpKTsKKyAg
ICByZXR1cm4gdG9KUyhleGVjLCBjb250ZXh0LT5zdHJva2VTdHlsZSgpKTsgICAgICAgIAogfQog
CiB2b2lkIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTdHJva2VTdHlsZShFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgaW1wbCgpLT5zZXRTdHJva2VTdHlsZSh0
b0hUTUxDYW52YXNTdHlsZShleGVjLCB2YWx1ZSkpOworICAgIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRCogY29udGV4dCA9IHN0YXRpY19jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCo+KGlt
cGwoKSk7CisgICAgY29udGV4dC0+c2V0U3Ryb2tlU3R5bGUodG9IVE1MQ2FudmFzU3R5bGUoZXhl
YywgdmFsdWUpKTsKIH0KIAogSlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Zmls
bFN0eWxlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKLSAgICByZXR1cm4gdG9KUyhleGVjLCBp
bXBsKCktPmZpbGxTdHlsZSgpKTsKKyAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIGNvbnRl
eHQgPSBzdGF0aWNfY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqPihpbXBsKCkpOworICAg
IHJldHVybiB0b0pTKGV4ZWMsIGNvbnRleHQtPmZpbGxTdHlsZSgpKTsKIH0KIAogdm9pZCBKU0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0RmlsbFN0eWxlKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSB2YWx1ZSkKIHsKLSAgICBpbXBsKCktPnNldEZpbGxTdHlsZSh0b0hUTUxDYW52YXNTdHls
ZShleGVjLCB2YWx1ZSkpOworICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogY29udGV4dCA9
IHN0YXRpY19jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCo+KGltcGwoKSk7CisgICAgY29u
dGV4dC0+c2V0RmlsbFN0eWxlKHRvSFRNTENhbnZhc1N0eWxlKGV4ZWMsIHZhbHVlKSk7CiB9CiAK
IEpTVmFsdWUgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZpbGxDb2xvcihFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEKiBjb250ZXh0ID0gaW1wbCgpOworICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCog
Y29udGV4dCA9IHN0YXRpY19jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCo+KGltcGwoKSk7
CiAKICAgICAvLyBzdHJpbmcgYXJnID0gbmFtZWQgY29sb3IKICAgICAvLyBudW1iZXIgYXJnID0g
Z3JheSBjb2xvcgpAQCAtMTI0LDcgKzEyOCw3IEBAIEpTVmFsdWUgSlNDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OnNldEYKIAogSlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0
U3Ryb2tlQ29sb3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogeyAKLSAg
ICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIGNvbnRleHQgPSBpbXBsKCk7CisgICAgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEKiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEKj4oaW1wbCgpKTsKIAogICAgIC8vIHN0cmluZyBhcmcgPSBuYW1lZCBjb2xvcgog
ICAgIC8vIG51bWJlciBhcmcgPSBncmF5IGNvbG9yCkBAIC0xNjIsNyArMTY2LDcgQEAgSlNWYWx1
ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0UwogCiBKU1ZhbHVlIEpTQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjpzdHJva2VSZWN0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlz
dCYgYXJncykKIHsgCi0gICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBjb250ZXh0ID0gaW1w
bCgpOworICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogY29udGV4dCA9IHN0YXRpY19jYXN0
PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCo+KGltcGwoKSk7CiAgICAgCiAgICAgaWYgKGFyZ3Mu
c2l6ZSgpIDw9IDQpCiAgICAgICAgIGNvbnRleHQtPnN0cm9rZVJlY3QoYXJncy5hdCgwKS50b0Zs
b2F0KGV4ZWMpLCBhcmdzLmF0KDEpLnRvRmxvYXQoZXhlYyksCkBAIC0xNzYsNyArMTgwLDcgQEAg
SlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c3RybwogCiBKU1ZhbHVlIEpTQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3SW1hZ2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQogeyAKLSAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIGNvbnRleHQg
PSBpbXBsKCk7CisgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBjb250ZXh0ID0gc3RhdGlj
X2Nhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKj4oaW1wbCgpKTsKIAogICAgIC8vIERyYXdJ
bWFnZSBoYXMgdGhyZWUgdmFyaWFudHM6CiAgICAgLy8gICAgIGRyYXdJbWFnZShpbWcsIGR4LCBk
eSkKQEAgLTI2NCw3ICsyNjgsNyBAQCBKU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpkcmF3CiAKIEpTVmFsdWUgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFnZUZy
b21SZWN0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsgCi0gICAgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEKiBjb250ZXh0ID0gaW1wbCgpOworICAgIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRCogY29udGV4dCA9IHN0YXRpY19jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRCo+KGltcGwoKSk7CiAgICAgCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IGFyZ3MuYXQoMCk7CiAg
ICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKQpAQCAtMjg0LDcgKzI4OCw3IEBAIEpTVmFsdWUgSlND
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXcKIAogSlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6c2V0U2hhZG93KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJn
cykKIHsgCi0gICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBjb250ZXh0ID0gaW1wbCgpOwor
ICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogY29udGV4dCA9IHN0YXRpY19jYXN0PENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRCo+KGltcGwoKSk7CiAKICAgICBzd2l0Y2ggKGFyZ3Muc2l6ZSgp
KSB7CiAgICAgICAgIGNhc2UgMzoKQEAgLTMzMCw3ICszMzQsNyBAQCBKU1ZhbHVlIEpTQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTCiAKIEpTVmFsdWUgSlNDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OmNyZWF0ZVBhdHRlcm4oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdz
KQogeyAKLSAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIGNvbnRleHQgPSBpbXBsKCk7Cisg
ICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEKj4oaW1wbCgpKTsKIAogICAgIEpTVmFsdWUgdmFsdWUgPSBhcmdz
LmF0KDApOwogICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkKQEAgLTM2Miw3ICszNjYsNyBAQCBK
U1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpwdXRJCiAgICAgLy8gcHV0SW1hZ2VE
YXRhIGhhcyB0d28gdmFyaWFudHMKICAgICAvLyBwdXRJbWFnZURhdGEoSW1hZ2VEYXRhLCB4LCB5
KQogICAgIC8vIHB1dEltYWdlRGF0YShJbWFnZURhdGEsIHgsIHksIGRpcnR5WCwgZGlydHlZLCBk
aXJ0eVdpZHRoLCBkaXJ0eUhlaWdodCkKLSAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIGNv
bnRleHQgPSBpbXBsKCk7CisgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBjb250ZXh0ID0g
c3RhdGljX2Nhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKj4oaW1wbCgpKTsKIAogICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGlmIChhcmdzLnNpemUoKSA+PSA3KQpAQCAtMzc3LDcg
KzM4MSw3IEBAIEpTVmFsdWUgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnB1dEkKIAogSlNW
YWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZmlsbFRleHQoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQogeyAKLSAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQq
IGNvbnRleHQgPSBpbXBsKCk7CisgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBjb250ZXh0
ID0gc3RhdGljX2Nhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKj4oaW1wbCgpKTsKIAogICAg
IC8vIHN0cmluZyBhcmcgPSB0ZXh0IHRvIGRyYXcKICAgICAvLyBudW1iZXIgYXJnID0geApAQCAt
Mzk1LDcgKzM5OSw3IEBAIEpTVmFsdWUgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmZpbGwK
IAogSlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c3Ryb2tlVGV4dChFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7IAotICAgIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRCogY29udGV4dCA9IGltcGwoKTsKKyAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQq
IGNvbnRleHQgPSBzdGF0aWNfY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqPihpbXBsKCkp
OwogCiAgICAgLy8gc3RyaW5nIGFyZyA9IHRleHQgdG8gZHJhdwogICAgIC8vIG51bWJlciBhcmcg
PSB4CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCShyZXZpc2lvbiA0Nzc0
OCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjk4LDcgKzI5OCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc09ic2VydmFibGVUaHJv
dWdoRE8KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAo
c3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpLT5oYXNUYWdOYW1lKGNhbnZhc1RhZykpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBjb250ZXh0ID0gc3Rh
dGljX2Nhc3Q8SFRNTENhbnZhc0VsZW1lbnQqPihub2RlKS0+cmVuZGVyaW5nQ29udGV4dDJEKCkp
IHsKKyAgICAgICAgICAgICAgICBpZiAoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCA9
IHN0YXRpY19jYXN0PEhUTUxDYW52YXNFbGVtZW50Kj4obm9kZSktPnJlbmRlcmluZ0NvbnRleHQo
KSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoRE9NT2JqZWN0KiB3cmFwcGVyID0gZ2V0Q2Fj
aGVkRE9NT2JqZWN0V3JhcHBlcigqanNOb2RlLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgp
LCBjb250ZXh0KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdyYXBwZXItPmhhc0N1
c3RvbVByb3BlcnRpZXMoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAkocmV2aXNp
b24gNDc3NDgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCwxMCBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5j
bHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKKyNpbmNsdWRl
ICJKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIgorI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisj
aW5jbHVkZSAiSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuaCIKKyNlbmRpZgogI2luY2x1ZGUg
IkpTRE9NV2luZG93Q3VzdG9tLmgiCiAjaW5jbHVkZSAiSlNIVE1MRG9jdW1lbnQuaCIKICNpbmNs
dWRlICJKU0xvY2F0aW9uLmgiCkBAIC0zNSw2ICszOSw4IEBACiAjaW5jbHVkZSAiU1ZHRG9jdW1l
bnQuaCIKICNlbmRpZgogCisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorCiB1c2luZyBuYW1lc3Bh
Y2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDQ3NzQ4KQor
KysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzAsMjggKzMwLDEzIEBACiAjaW5jbHVkZSAiSlNDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQuaCIKICNpZiBFTkFCTEUoM0RfQ0FOVkFTKQogI2luY2x1ZGUgIkpTQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDNELmgiCi0jaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogI2VuZGlmCisj
aW5jbHVkZSA8d3RmL0dldFB0ci5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLSNpZiBFTkFCTEUoM0RfQ0FOVkFTKQotSlNWYWx1ZSBKU0hUTUxDYW52
YXNFbGVtZW50OjpnZXRDb250ZXh0KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkFyZ0xpc3Qg
Y29uc3QmIGFyZ3MpCi17Ci0gICAgSFRNTENhbnZhc0VsZW1lbnQqIGltcCA9IHN0YXRpY19jYXN0
PEhUTUxDYW52YXNFbGVtZW50Kj4oaW1wbCgpKTsKLSAgICBjb25zdCBVU3RyaW5nJiBjb250ZXh0
SWQgPSBhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpOwotCi0gICAgaWYgKGNvbnRleHRJZCA9PSAi
MmQiKQotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBXVEY6OmdldFB0cihyZWludGVycHJldF9j
YXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCo+KGltcC0+Z2V0Q29udGV4dChjb250ZXh0SWQp
KSkpOwotICAgIGlmIChjb250ZXh0SWQgPT0gIndlYmtpdC0zZCIpCi0gICAgICAgIHJldHVybiB0
b0pTKGV4ZWMsIFdURjo6Z2V0UHRyKHJlaW50ZXJwcmV0X2Nhc3Q8Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDNEKj4oaW1wLT5nZXRDb250ZXh0KGNvbnRleHRJZCkpKSk7Ci0gICAgCi0gICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7Ci19Ci0jZW5kaWYKLQogdm9pZCBKU0hUTUxDYW52YXNFbGVtZW50Ojpt
YXJrQ2hpbGRyZW4oTWFya1N0YWNrJiBtYXJrU3RhY2spCiB7CiAgICAgQmFzZTo6bWFya0NoaWxk
cmVuKG1hcmtTdGFjayk7CkBAIC01OSw3ICs0NCw3IEBAIHZvaWQgSlNIVE1MQ2FudmFzRWxlbWVu
dDo6bWFya0NoaWxkcmVuKE0KICAgICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzID0gc3RhdGlj
X2Nhc3Q8SFRNTENhbnZhc0VsZW1lbnQqPihpbXBsKCkpOwogICAgIEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSA9ICpIZWFwOjpoZWFwKHRoaXMpLT5nbG9iYWxEYXRhKCk7CiAKLSAgICBtYXJrRE9N
T2JqZWN0V3JhcHBlcihtYXJrU3RhY2ssIGdsb2JhbERhdGEsIGNhbnZhcy0+cmVuZGVyaW5nQ29u
dGV4dDJEKCkpOworICAgIG1hcmtET01PYmplY3RXcmFwcGVyKG1hcmtTdGFjaywgZ2xvYmFsRGF0
YSwgY2FudmFzLT5yZW5kZXJpbmdDb250ZXh0KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiA0Nzc0OCkKKysrIFdlYkNvcmUvZG9tL0RvY3Vt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMzMiw3ICs0MzMyLDcgQEAgdm9pZCBEb2N1bWVu
dDo6ZGV0YWNoUmFuZ2UoUmFuZ2UqIHJhbmdlKQogICAgIG1fcmFuZ2VzLnJlbW92ZShyYW5nZSk7
CiB9CiAKLUNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogRG9jdW1lbnQ6OmdldENTU0NhbnZhc0Nv
bnRleHQoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUsIGludCB3aWR0aCwg
aW50IGhlaWdodCkKK0NhbnZhc1JlbmRlcmluZ0NvbnRleHQqIERvY3VtZW50OjpnZXRDU1NDYW52
YXNDb250ZXh0KGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBpbnQgd2lk
dGgsIGludCBoZWlnaHQpCiB7CiAgICAgSFRNTENhbnZhc0VsZW1lbnQqIHJlc3VsdCA9IGdldENT
U0NhbnZhc0VsZW1lbnQobmFtZSk7CiAgICAgaWYgKCFyZXN1bHQpCkluZGV4OiBXZWJDb3JlL2Rv
bS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlz
aW9uIDQ3NzQ4KQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
NTMsNyArNTMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgQ0RBVEFTZWN0aW9u
OwogICAgIGNsYXNzIENhY2hlZENTU1N0eWxlU2hlZXQ7CiAgICAgY2xhc3MgQ2FjaGVkU2NyaXB0
OwotICAgIGNsYXNzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDsKKyAgICBjbGFzcyBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0OwogICAgIGNsYXNzIENoYXJhY3RlckRhdGE7CiAgICAgY2xhc3MgQ1NT
U3R5bGVEZWNsYXJhdGlvbjsKICAgICBjbGFzcyBDU1NTdHlsZVNlbGVjdG9yOwpAQCAtNzU5LDcg
Kzc1OSw3IEBAIHB1YmxpYzoKICAgICBET01TZWxlY3Rpb24qIGdldFNlbGVjdGlvbigpIGNvbnN0
OwogICAgIAogICAgIC8vIEV4dGVuc2lvbiBmb3IgbWFuaXB1bGF0aW5nIGNhbnZhcyBkcmF3aW5n
IGNvbnRleHRzIGZvciB1c2UgaW4gQ1NTCi0gICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBn
ZXRDU1NDYW52YXNDb250ZXh0KGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBuYW1l
LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOworICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGdl
dENTU0NhbnZhc0NvbnRleHQoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUs
IGludCB3aWR0aCwgaW50IGhlaWdodCk7CiAgICAgSFRNTENhbnZhc0VsZW1lbnQqIGdldENTU0Nh
bnZhc0VsZW1lbnQoY29uc3QgU3RyaW5nJiBuYW1lKTsKIAogICAgIGJvb2wgaXNETlNQcmVmZXRj
aEVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2lzRE5TUHJlZmV0Y2hFbmFibGVkOyB9CkluZGV4
OiBXZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJKHJldmlzaW9uIDQ3NzQ4KQorKysgV2ViQ29y
ZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAs
NyBAQAogI2luY2x1ZGUgIkNhbnZhc0dyYWRpZW50LmgiCiAjaW5jbHVkZSAiQ2FudmFzUGF0dGVy
bi5oIgogI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIgorI2luY2x1ZGUgIkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkNhbnZhc1N0eWxlLmgiCiAjaW5j
bHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKQEAgLTE0NiwxNyArMTQ3LDM2
IEBAIFN0cmluZyBIVE1MQ2FudmFzRWxlbWVudDo6dG9EYXRhVVJMKGNvbnMKIAogQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dCogSFRNTENhbnZhc0VsZW1lbnQ6OmdldENvbnRleHQoY29uc3QgU3RyaW5n
JiB0eXBlKQogeworICAgIC8vIEEgQ2FudmFzIGNhbiBlaXRoZXIgYmUgIjJEIiBvciAiM0QiIG5l
dmVyIGJvdGguIElmIHlvdSByZXF1ZXN0IGEgMkQgY2FudmFzIGFuZCB0aGUgZXhpc3RpbmcKKyAg
ICAvLyBjb250ZXh0IGlzIGFscmVhZHkgMkQsIGp1c3QgcmV0dXJuIHRoYXQuIElmIHRoZSBleGlz
dGluZyBjb250ZXh0IGlzIDNELCB0aGVuIGRlc3Ryb3kgaXQKKyAgICAvLyBiZWZvcmUgY3JlYXRp
bmcgYSBuZXcgMkQgY29udGV4dC4gVmljZSB2ZXJzYSB3aGVuIHJlcXVlc3RpbmcgYSAzRCBjYW52
YXMuIFJlcXVlc3RpbmcgYQorICAgIC8vIGNvbnRleHQgd2l0aCBhbnkgb3RoZXIgdHlwZSBzdHJp
bmcgd2lsbCBkZXN0cm95IGFueSBleGlzdGluZyBjb250ZXh0LgogICAgIGlmICh0eXBlID09ICIy
ZCIpIHsKLSAgICAgICAgaWYgKCFtXzJEQ29udGV4dCkKLSAgICAgICAgICAgIG1fMkRDb250ZXh0
LnNldChuZXcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKHRoaXMpKTsKLSAgICAgICAgcmV0dXJu
IG1fMkRDb250ZXh0LmdldCgpOworICAgICAgICBpZiAobV9jb250ZXh0ICYmICFtX2NvbnRleHQt
PmlzMmQoKSkKKyAgICAgICAgICAgIG1fY29udGV4dC5jbGVhcigpOworICAgICAgICAgICAgaWYg
KCFtX2NvbnRleHQpCisgICAgICAgICAgICAgICAgbV9jb250ZXh0LnNldChuZXcgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEKHRoaXMpKTsKICAgICB9Ci0gICAgcmV0dXJuIDA7CisjaWYgRU5BQkxF
KDNEX0NBTlZBUykgICAgCisgICAgZWxzZSBpZiAodHlwZSA9PSAid2Via2l0LTNkIikgeworICAg
ICAgICBpZiAobV9jb250ZXh0ICYmICFtX2NvbnRleHQtPmlzM2QoKSkKKyAgICAgICAgICAgIG1f
Y29udGV4dC5jbGVhcigpOworICAgICAgICBpZiAoIW1fY29udGV4dCkgeworICAgICAgICAgICAg
bV9jb250ZXh0LnNldChuZXcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKHRoaXMpKTsKKyAgICAg
ICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgor
ICAgIGVsc2UgaWYgKG1fY29udGV4dC5nZXQoKSkKKyAgICAgICAgbV9jb250ZXh0LmNsZWFyKCk7
CisgICAgCisgICAgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsKIH0KIAogdm9pZCBIVE1MQ2FudmFz
RWxlbWVudDo6d2lsbERyYXcoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIG1faW1hZ2VC
dWZmZXItPmNsZWFySW1hZ2UoKTsKKyAgICBpZiAobV9pbWFnZUJ1ZmZlcikKKyAgICAgICAgbV9p
bWFnZUJ1ZmZlci0+Y2xlYXJJbWFnZSgpOwogICAgIAogICAgIGlmIChSZW5kZXJCb3gqIHJvID0g
cmVuZGVyQm94KCkpIHsKICAgICAgICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0gcm8tPmNvbnRlbnRC
b3hSZWN0KCk7CkBAIC0xOTIsOCArMjEyLDggQEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6cmVz
ZXQoKQogICAgIGJvb2wgaGFkSW1hZ2VCdWZmZXIgPSBtX2NyZWF0ZWRJbWFnZUJ1ZmZlcjsKICAg
ICBtX2NyZWF0ZWRJbWFnZUJ1ZmZlciA9IGZhbHNlOwogICAgIG1faW1hZ2VCdWZmZXIuY2xlYXIo
KTsKLSAgICBpZiAobV8yRENvbnRleHQpCi0gICAgICAgIG1fMkRDb250ZXh0LT5yZXNldCgpOwor
ICAgIGlmIChtX2NvbnRleHQgJiYgbV9jb250ZXh0LT5pczJkKCkpCisgICAgICAgIHN0YXRpY19j
YXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCo+KG1fY29udGV4dC5nZXQoKSktPnJlc2V0KCk7
CiAKICAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCkpIHsK
ICAgICAgICAgaWYgKG1fcmVuZGVyZXJJc0NhbnZhcykgewpAQCAtMjIxLDYgKzI0MSwxMSBAQCB2
b2lkIEhUTUxDYW52YXNFbGVtZW50OjpwYWludChHcmFwaGljc0NvCiAgICAgICAgIGlmIChpbWFn
ZSkKICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShpbWFnZSwgcik7CiAgICAgfQorICAg
IAorI2lmIEVOQUJMRSgzRF9DQU5WQVMpICAgIAorICAgIGlmIChtX2NvbnRleHQgJiYgbV9jb250
ZXh0LT5pczNkKCkpCisgICAgICAgIHN0YXRpY19jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RCo+KG1fY29udGV4dC5nZXQoKSktPnJlc2hhcGUoci53aWR0aCgpLCByLmhlaWdodCgpKTsKKyNl
bmRpZgogfQogCiBJbnRSZWN0IEhUTUxDYW52YXNFbGVtZW50Ojpjb252ZXJ0TG9naWNhbFRvRGV2
aWNlKGNvbnN0IEZsb2F0UmVjdCYgbG9naWNhbFJlY3QpIGNvbnN0CkBAIC0yOTMsNCArMzE4LDI1
IEBAIFRyYW5zZm9ybWF0aW9uTWF0cml4IEhUTUxDYW52YXNFbGVtZW50OjoKICAgICByZXR1cm4g
dHJhbnNmb3JtOwogfQogCisjaWYgRU5BQkxFKDNEX0NBTlZBUykgICAgCitib29sIEhUTUxDYW52
YXNFbGVtZW50OjppczNEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0ICYmIG1fY29u
dGV4dC0+aXMzZCgpOworfQorCitQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIEhUTUxDYW52YXNF
bGVtZW50Ojpjb250ZXh0M0QoKSBjb25zdAoreworICAgIGlmIChtX2NvbnRleHQgJiYgbV9jb250
ZXh0LT5pczNkKCkpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYW52YXNSZW5kZXJpbmdD
b250ZXh0M0QqPihtX2NvbnRleHQuZ2V0KCkpLT5jb250ZXh0M0QoKTsKKyAgICByZXR1cm4gMDsK
K30KKworUGxhdGZvcm0zRE9iamVjdCBIVE1MQ2FudmFzRWxlbWVudDo6dGV4dHVyZTNEKCkgY29u
c3QKK3sKKyAgICBpZiAobV9jb250ZXh0ICYmIG1fY29udGV4dC0+aXMzZCgpKQorICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKj4obV9jb250ZXh0Lmdl
dCgpKS0+dGV4dHVyZTNEKCk7CisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKwogfQpJbmRleDog
V2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL0hUTUxDYW52YXNFbGVtZW50LmgJKHJldmlzaW9uIDQ3NzQ4KQorKysgV2ViQ29yZS9odG1s
L0hUTUxDYW52YXNFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDExICszMCwxNCBAQAog
I2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0Lmgi
CiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKSAgICAKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2VuZGlmCiAjaW5jbHVkZSAiSW50U2l6ZS5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDsKK2NsYXNzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQ7CiBjbGFzcyBGbG9hdFBvaW50OwogY2xh
c3MgRmxvYXRSZWN0OwogY2xhc3MgRmxvYXRTaXplOwpAQCAtNDQsOCArNDcsNiBAQCBjbGFzcyBJ
bWFnZUJ1ZmZlcjsKIGNsYXNzIEludFBvaW50OwogY2xhc3MgSW50U2l6ZTsKIAotdHlwZWRlZiBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDsKLQogY2xhc3Mg
Q2FudmFzT2JzZXJ2ZXIgewogcHVibGljOgogICAgIHZpcnR1YWwgfkNhbnZhc09ic2VydmVyKCkg
eyB9CkBAIC0xMDAsNyArMTAxLDEzIEBAIHB1YmxpYzoKIAogICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IGJhc2VUcmFuc2Zvcm0oKSBjb25zdDsKIAotICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RCogcmVuZGVyaW5nQ29udGV4dDJEKCkgeyByZXR1cm4gbV8yRENvbnRleHQuZ2V0KCk7IH0KKyAg
ICBDYW52YXNSZW5kZXJpbmdDb250ZXh0KiByZW5kZXJpbmdDb250ZXh0KCkgeyByZXR1cm4gbV9j
b250ZXh0LmdldCgpOyB9CisKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKSAgICAKKyAgICBib29sIGlz
M0QoKSBjb25zdDsKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIGNvbnRleHQzRCgpIGNv
bnN0OworICAgIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZTNEKCkgY29uc3Q7CisjZW5kaWYKIAog
cHJpdmF0ZToKICNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCkBAIC0xMTgsNyArMTI1LDcg
QEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9yZW5kZXJlcklzQ2FudmFzOwogCi0gICAgT3duUHRy
PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4gbV8yRENvbnRleHQ7CisgICAgT3duUHRyPENhbnZh
c1JlbmRlcmluZ0NvbnRleHQ+IG1fY29udGV4dDsKICAgICBJbnRTaXplIG1fc2l6ZTsgICAgCiAg
ICAgQ2FudmFzT2JzZXJ2ZXIqIG1fb2JzZXJ2ZXI7CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc09iamVjdC5jcHAJKHJldmlzaW9uIDQ3NzQ4KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw4ICs0MCw2IEBAIENhbnZhc09i
amVjdDo6Q2FudmFzT2JqZWN0KEdyYXBoaWNzQ29udGUKIAogQ2FudmFzT2JqZWN0Ojp+Q2FudmFz
T2JqZWN0KCkKIHsKLSAgICBpZiAobV9jb250ZXh0KQotICAgICAgICBtX2NvbnRleHQtPnJlbW92
ZU9iamVjdCh0aGlzKTsKIH0KIAogdm9pZCBDYW52YXNPYmplY3Q6OnNldE9iamVjdChQbGF0Zm9y
bTNET2JqZWN0IG9iamVjdCkKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHJldmlzaW9uIDQ3NzQ4KQorKysgV2ViQ29yZS9odG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
NCw3ICs5NCw3IEBAIHByaXZhdGU6CiAKIAogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQoSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcykKLSAgICA6IG1f
Y2FudmFzKGNhbnZhcykKKyAgICA6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQoY2FudmFzKQogICAg
ICwgbV9zdGF0ZVN0YWNrKDEpCiB7CiAgICAgLy8gTWFrZSBzdXJlIHRoYXQgZXZlbiBpZiB0aGUg
ZHJhd2luZ0NvbnRleHQoKSBoYXMgYSBkaWZmZXJlbnQgZGVmYXVsdApAQCAtMTAyLDE1ICsxMDIs
OSBAQCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OkNhbnZhc1JlbmRlcmluCiAgICAgc2V0TGlu
ZVdpZHRoKGxpbmVXaWR0aCgpKTsKIH0KIAotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OnJlZigpIAoteyAKLSAgICBtX2NhbnZhcy0+cmVmKCk7IAotfSAKLQotdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OmRlcmVmKCkgCi17IAotICAgIG1fY2FudmFzLT5kZXJlZigpOyAgCi19
IAorQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp+Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKCkK
K3sKK30KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnJlc2V0KCkKIHsKSW5kZXg6
IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAkocmV2
aXNpb24gNDc3NDgpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRF9oCiAjZGVmaW5lIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRF9oCiAK
KyNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiVHJhbnNmb3Jt
YXRpb25NYXRyaXguaCIKICNpbmNsdWRlICJGbG9hdFNpemUuaCIKICNpbmNsdWRlICJGb250Lmgi
CkBAIC01NCwxNyArNTUsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgdHlwZWRlZiBp
bnQgRXhjZXB0aW9uQ29kZTsKIAotICAgIGNsYXNzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCA6
IHB1YmxpYyBOb25jb3B5YWJsZSB7CisgICAgY2xhc3MgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
IDogcHVibGljIENhbnZhc1JlbmRlcmluZ0NvbnRleHQgewogICAgIHB1YmxpYzoKICAgICAgICAg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKEhUTUxDYW52YXNFbGVtZW50Kik7CiAKLSAgICAgICAg
dm9pZCByZWYoKTsgCi0gICAgICAgIHZvaWQgZGVyZWYoKTsgCi0KLSAgICAgICAgSFRNTENhbnZh
c0VsZW1lbnQqIGNhbnZhcygpIGNvbnN0IHsgcmV0dXJuIG1fY2FudmFzOyB9IAotICAgICAgICB2
aXJ0dWFsIH5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQoKSB7IH0KKyAgICAgICAgdmlydHVhbCB+
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKCk7CiAgICAgICAgIAotICAgICAgICB2aXJ0dWFsIGJv
b2wgaXMyZCgpIHsgcmV0dXJuIHRydWU7IH0KKyAgICAgICAgdmlydHVhbCBib29sIGlzMmQoKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9CiAKICAgICAgICAgQ2FudmFzU3R5bGUqIHN0cm9rZVN0eWxl
KCkgY29uc3Q7CiAgICAgICAgIHZvaWQgc2V0U3Ryb2tlU3R5bGUoUGFzc1JlZlB0cjxDYW52YXNT
dHlsZT4pOwpAQCAtMjY1LDcgKzI2Miw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
dm9pZCBjaGVja09yaWdpbihjb25zdCBLVVJMJik7CiAgICAgICAgIHZvaWQgY2hlY2tPcmlnaW4o
Y29uc3QgU3RyaW5nJik7CiAKLSAgICAgICAgSFRNTENhbnZhc0VsZW1lbnQqIG1fY2FudmFzOwog
ICAgICAgICBWZWN0b3I8U3RhdGUsIDE+IG1fc3RhdGVTdGFjazsKICAgICB9OwogCkluZGV4OiBX
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5pZGwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaWRsCShy
ZXZpc2lvbiA0Nzc0OCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjksMTIgKzI5LDEwIEBAIG1vZHVsZSBodG1s
IHsKICAgICAgICAgR2VuZXJhdGVDb25zdHJ1Y3RvciwKICAgICAgICAgSW50ZXJmYWNlVVVJRD05
OGZiNDhhZS03MjE2LTQ4OWMtODYyYi04ZTEyMTdmYzQ0NDMsCiAgICAgICAgIEltcGxlbWVudGF0
aW9uVVVJRD1hYjRmMDc4MS0xNTJmLTQ1MGUtOTU0Ni01YjM5ODc0OTFhNTQKLSAgICBdIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRCB7CisgICAgXSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgOiBD
YW52YXNSZW5kZXJpbmdDb250ZXh0IHsKIAogICAgICAgICAvLyBXZWIgQXBwbGljYXRpb25zIDEu
MCBkcmFmdAogCi0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBIVE1MQ2FudmFzRWxlbWVudCBj
YW52YXM7Ci0KICAgICAgICAgdm9pZCBzYXZlKCk7CiAgICAgICAgIHZvaWQgcmVzdG9yZSgpOwog
CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5pZGwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
M0QuaWRsCShyZXZpc2lvbiA0Nzc0OCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDNELmlkbAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQCBtb2R1
bGUgaHRtbCB7CiAgICAgICAgIEdlbmVyYXRlQ29uc3RydWN0b3IsCiAgICAgICAgIEludGVyZmFj
ZVVVSUQ9OThmYjQ4YWUtNzIxNi00ODljLTg2MmItOGUxMjE3ZmM0NDQzLAogICAgICAgICBJbXBs
ZW1lbnRhdGlvblVVSUQ9YWI0ZjA3ODEtMTUyZi00NTBlLTk1NDYtNWIzOTg3NDkxYTU0Ci0gICAg
XSBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QgeworICAgIF0gQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEIDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dCB7CiAKICAgICAgICAgLyogQ2xlYXJCdWZmZXJN
YXNrICovCiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHTF9ERVBUSF9CVUZGRVJfQklUICAg
ICAgICAgICAgICAgPSAweDAwMDAwMTAwOwpAQCAtNDU4LDggKzQ1OCw2IEBAIG1vZHVsZSBodG1s
IHsKIAogICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgR0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9P
UEVSQVRJT04gID0gMHgwNTA2OwogCi0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBIVE1MQ2Fu
dmFzRWxlbWVudCBjYW52YXM7Ci0gICAgICAgIAogICAgICAgICB2b2lkICAgICAgICAgZ2xBY3Rp
dmVUZXh0dXJlKGluIHVuc2lnbmVkIGxvbmcgdGV4dHVyZSk7CiAgICAgICAgIHZvaWQgICAgICAg
ICBnbEF0dGFjaFNoYWRlcihpbiBDYW52YXNQcm9ncmFtIHByb2dyYW0sIGluIENhbnZhc1NoYWRl
ciBzaGFkZXIpOwogICAgICAgICB2b2lkICAgICAgICAgZ2xCaW5kQXR0cmliTG9jYXRpb24oaW4g
Q2FudmFzUHJvZ3JhbSBwcm9ncmFtLCBpbiB1bnNpZ25lZCBsb25nIGluZGV4LCBpbiBET01TdHJp
bmcgbmFtZSk7CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dC5pZGwJKHJldmlzaW9uIDQ3NzQ4KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJpbmdDb250ZXh0LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTIgKzI3LDEyIEBA
IG1vZHVsZSBodG1sIHsKIAogICAgIGludGVyZmFjZSBbCiAgICAgICAgIEdlbmVyYXRlQ29uc3Ry
dWN0b3IsCisgICAgICAgIEN1c3RvbVRvSlMsCiAgICAgICAgIEludGVyZmFjZVVVSUQ9OThmYjQ4
YWUtNzIxNi00ODljLTg2MmItOGUxMjE3ZmM0NDQzLAogICAgICAgICBJbXBsZW1lbnRhdGlvblVV
SUQ9YWI0ZjA3ODEtMTUyZi00NTBlLTk1NDYtNWIzOTg3NDkxYTU0CiAgICAgXSBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0IHsKIAogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgSFRNTENhbnZhc0Vs
ZW1lbnQgY2FudmFzOwotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHR5cGU7
CiAgICAgfTsKIAogfQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNDc3NDgpCisrKyBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMiBAQAorMjAwOS0wOC0yNSAgQ2hy
aXMgTWFycmluICA8Y21hcnJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgRml4ZWQgb25lIHRlc3Qgd2hpY2ggY2hhbmdlZCBkdWUg
dG8gZGlmZmVyZW50IGluaGVyaXRhbmNlIG9mIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgwMTgKKworICAg
ICAgICAqIGZhc3QvZG9tL3Byb3RvdHlwZS1pbmhlcml0YW5jZS0yLWV4cGVjdGVkLnR4dDoKKwog
MjAwOS0wOC0yNSAgUmVuYXRhIEhvZG92YW4gIDxob2RvdmFuLnJlbmF0YUBzdHVkLnUtc3plZ2Vk
Lmh1PgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFyaXlhIEhpZGF5YXQuCkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2RvbS9wcm90b3R5cGUtaW5oZXJpdGFuY2UtMi1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vcHJvdG90eXBlLWluaGVyaXRhbmNlLTItZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiA0Nzc0OCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL3Byb3Rv
dHlwZS1pbmhlcml0YW5jZS0yLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNDksNiAr
NDksNyBAQCBGQUlMIENhbnZhc1BhdHRlcm5Qcm90b3R5cGUgZnJvbSBpbm5lci5kCiBQQVNTIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRCBmcm9tIGlubmVyLmRvY3VtZW50LmdldEVsZW1lbnRzQnlU
YWdOYW1lKCJjYW52YXMiKVswXS5nZXRDb250ZXh0KCIyZCIpCiBQQVNTIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRENvbnN0cnVjdG9yIGZyb20gaW5uZXIuZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRh
Z05hbWUoImNhbnZhcyIpWzBdLmdldENvbnRleHQoIjJkIikuY29uc3RydWN0b3IKIFBBU1MgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEUHJvdG90eXBlIGZyb20gaW5uZXIuZG9jdW1lbnQuZ2V0RWxl
bWVudHNCeVRhZ05hbWUoImNhbnZhcyIpWzBdLmdldENvbnRleHQoIjJkIikuX19wcm90b19fCitQ
QVNTIENhbnZhc1JlbmRlcmluZ0NvbnRleHRQcm90b3R5cGUgZnJvbSBpbm5lci5kb2N1bWVudC5n
ZXRFbGVtZW50c0J5VGFnTmFtZSgiY2FudmFzIilbMF0uZ2V0Q29udGV4dCgiMmQiKS5fX3Byb3Rv
X18uX19wcm90b19fCiBQQVNTIENoYXJhY3RlckRhdGFQcm90b3R5cGUgZnJvbSBpbm5lci5kb2N1
bWVudC5hY3RpdmVFbGVtZW50LmNoaWxkTm9kZXMuNjEuX19wcm90b19fLl9fcHJvdG9fXwogUEFT
UyBDbGllbnRSZWN0IGZyb20gaW5uZXIuZG9jdW1lbnQuYm9keS5nZXRCb3VuZGluZ0NsaWVudFJl
Y3QoKQogUEFTUyBDbGllbnRSZWN0Q29uc3RydWN0b3IgZnJvbSBpbm5lci5kb2N1bWVudC5ib2R5
LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmNvbnN0cnVjdG9yCg==
</data>
<flag name="review"
          id="19563"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38576</attachid>
            <date>2009-08-25 16:49:46 -0700</date>
            <delta_ts>2009-08-27 06:39:39 -0700</delta_ts>
            <desc>Patch with Platform specific rendering changes for Canvas3D</desc>
            <filename>webgl-platform-rendering.patch</filename>
            <type>text/plain</type>
            <size>10666</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0Nzc2NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjcgQEAKKzIwMDktMDgtMjUgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBs
YXRmb3JtIHNwZWNpZmljIGZpbGVzIGZvciByZW5kZXJpbmcgQ2FudmFzM0Qgb24gTWFjCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL2F0dGFjaG1lbnQuY2dpP2J1Z2lkPTI4MDE4JmFj
dGlvbj1lbnRlcgorCisgICAgICAgICogcGFnZS9ET01XaW5kb3cuaWRsOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xh
eWVyOjpHcmFwaGljc0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OmR1
bXBQcm9wZXJ0aWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVy
Lmg6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvQ2FudmFz
M0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6cmVkcmF3Q2FudmFzM0QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0xheWVyQ0EuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9tYWMvR3JhcGhpY3NMYXllckNBLm1tOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NM
YXllckNBOjpjb21taXRMYXllckNoYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NM
YXllckNBOjp1cGRhdGVDb250ZW50c0NhbnZhczNEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXJDQTo6c2V0Q29udGVudHNUb0NhbnZhczNEKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXI6OnNldEhhczNETGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NM
YXllckNBOjpyZWRyYXdDYW52YXMzRCk6CisKIDIwMDktMDgtMjUgIEVyaWMgQ2FybHNvbiAgPGVy
aWMuY2FybHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgT2xpdmVyIEh1bnQu
CkluZGV4OiBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BhZ2UvRE9NV2luZG93LmlkbAkocmV2aXNpb24gNDc3NTMpCisrKyBXZWJDb3JlL3BhZ2UvRE9N
V2luZG93LmlkbAkod29ya2luZyBjb3B5KQpAQCAtNDEzLDYgKzQxMyw3IEBAIG1vZHVsZSB3aW5k
b3cgewogICAgICAgICBhdHRyaWJ1dGUgW0N1c3RvbUdldHRlcl0gSFRNTE9wdGlvbkVsZW1lbnRD
b25zdHJ1Y3RvciBPcHRpb247IC8vIFVzYWJsZSB3aXRoIG5ldyBvcGVyYXRvcgogCiAgICAgICAg
IGF0dHJpYnV0ZSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDb25zdHJ1Y3RvciBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ7CisgICAgICAgIGF0dHJpYnV0ZSBbQ29uZGl0aW9uYWw9M0RfQ0FOVkFT
XSBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RDb25zdHJ1Y3RvciBDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0Q7CiAgICAgICAgIGF0dHJpYnV0ZSBUZXh0TWV0cmljc0NvbnN0cnVjdG9yIFRleHRNZXRy
aWNzOwogCiAgICAgICAgIGF0dHJpYnV0ZSBFdmVudENvbnN0cnVjdG9yIEV2ZW50OwpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAkocmV2aXNp
b24gNDc3NTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNE
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDEwICszNCwxNCBAQAogI2luY2x1ZGUgPE9wZW5HTC9P
cGVuR0wuaD4KIAogdHlwZWRlZiB2b2lkKiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEOworI2Rl
ZmluZSBOT19QTEFURk9STV9HUkFQSElDU19DT05URVhUXzNEIDAKIHR5cGVkZWYgR0x1aW50IFBs
YXRmb3JtM0RPYmplY3Q7CisjZGVmaW5lIE5PX1BMQVRGT1JNXzNEX09CSkVDVCAwCiAjZWxzZQog
dHlwZWRlZiB2b2lkKiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEOworI2RlZmluZSBOT19QTEFU
Rk9STV9HUkFQSElDU19DT05URVhUXzNEIDAKIHR5cGVkZWYgaW50IFBsYXRmb3JtM0RPYmplY3Q7
CisjZGVmaW5lIE5PX1BMQVRGT1JNXzNEX09CSkVDVCAwCiAjZW5kaWYKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIu
Y3BwCShyZXZpc2lvbiA0Nzc1MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDYgKzY5LDkgQEAgR3JhcGhpY3NMYXll
cjo6R3JhcGhpY3NMYXllcihHcmFwaGljc0xheQogICAgICwgbV91c2luZ1RpbGVkTGF5ZXIoZmFs
c2UpCiAgICAgLCBtX21hc2tzVG9Cb3VuZHMoZmFsc2UpCiAgICAgLCBtX2RyYXdzQ29udGVudChm
YWxzZSkKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKSAgICAKKyAgICAsIG1fY29udGVudElzM2QoZmFs
c2UpCisjZW5kaWYKICAgICAsIG1fcGFpbnRpbmdQaGFzZShHcmFwaGljc0xheWVyUGFpbnRBbGwp
CiAgICAgLCBtX2dlb21ldHJ5T3JpZW50YXRpb24oQ29tcG9zaXRpbmdDb29yZGluYXRlc1RvcERv
d24pCiAgICAgLCBtX2NvbnRlbnRzT3JpZW50YXRpb24oQ29tcG9zaXRpbmdDb29yZGluYXRlc1Rv
cERvd24pCkBAIC0zOTIsNiArMzk1LDExIEBAIHZvaWQgR3JhcGhpY3NMYXllcjo6ZHVtcFByb3Bl
cnRpZXMoVGV4dFMKICAgICB3cml0ZUluZGVudCh0cywgaW5kZW50ICsgMSk7CiAgICAgdHMgPDwg
IihkcmF3c0NvbnRlbnQgIiA8PCBtX2RyYXdzQ29udGVudCA8PCAiKVxuIjsKIAorI2lmIEVOQUJM
RSgzRF9DQU5WQVMpICAgIAorICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQgKyAxKTsKKyAgICB0
cyA8PCAiKGNvbnRlbnRJczNkICIgPDwgbV9jb250ZW50SXMzZCA8PCAiKVxuIjsKKyNlbmRpZgor
CiAgICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCArIDEpOwogICAgIHRzIDw8ICIobV9iYWNrZmFj
ZVZpc2liaWxpdHkgIiA8PCAobV9iYWNrZmFjZVZpc2liaWxpdHkgPyAidmlzaWJsZSIgOiAiaGlk
ZGVuIikgPDwgIilcbiI7CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NMYXllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NMYXllci5oCShyZXZpc2lvbiA0Nzc1MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NMYXllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw5IEBACiAjaW5jbHVk
ZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIkZsb2F0UG9pbnQzRC5oIgogI2luY2x1ZGUgIkZs
b2F0U2l6ZS5oIgorI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0M0QuaCIKKyNlbmRpZgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJDbGllbnQuaCIKICNpbmNs
dWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKQEAgLTQ4
LDcgKzUxLDcgQEAgdHlwZWRlZiBDQUxheWVyIFBsYXRmb3JtTGF5ZXI7CiB0eXBlZGVmIENBTGF5
ZXIqIE5hdGl2ZUxheWVyOwogI2Vsc2UKIHR5cGVkZWYgdm9pZCogUGxhdGZvcm1MYXllcjsKLXR5
cGVkZWYgdm9pZCogTmF0aXZlTGF5ZXI7Cit0eXBlZGVmIGludCBOYXRpdmVMYXllcjsKICNlbmRp
ZgogI2Vsc2UKIHR5cGVkZWYgdm9pZCogUGxhdGZvcm1MYXllcjsKQEAgLTI1OSw2ICsyNjIsMTAg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvVmlkZW8oUGxhdGZvcm1M
YXllciopIHsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c0JhY2tncm91bmRDb2xvcihj
b25zdCBDb2xvciYpIHsgfQogICAgIAorI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisgICAgdmlydHVh
bCB2b2lkIHNldENvbnRlbnRzVG9DYW52YXMzRChQbGF0Zm9ybUxheWVyKikgeyB9CisgICAgdmly
dHVhbCB2b2lkIHJlZHJhd0NhbnZhczNEKCkgeyB9CisjZW5kaWYKICAgICAvLyBDYWxsYmFjayBm
cm9tIHRoZSB1bmRlcmx5aW5nIGdyYXBoaWNzIHN5c3RlbSB0byBkcmF3IGxheWVyIGNvbnRlbnRz
LgogICAgIHZvaWQgcGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoR3JhcGhpY3NDb250ZXh0Jiwg
Y29uc3QgSW50UmVjdCYgY2xpcCk7CiAgICAgCkBAIC0zMDQsNiArMzExLDEwIEBAIHB1YmxpYzoK
ICAgICAvLyB3aXRoIHVwZGF0ZXMgZHJhd24gaW50byB0aGUgd2luZG93LiBUaGlzIGlzIGEgc2ln
bmFsIHRvIGZsdXNoIGFueSBpbnRlcm5hbCBiYXRjaGVkIHN0YXRlLgogICAgIHZpcnR1YWwgdm9p
ZCBzeW5jQ29tcG9zaXRpbmdTdGF0ZSgpIHsgfQogCisjaWYgRU5BQkxFKDNEX0NBTlZBUykKKyAg
ICB2b2lkIHNldEhhczNETGF5ZXIoYm9vbCBoYXMzRExheWVyLCBQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dDNEIGNvbnRleHQgPSBOT19QTEFURk9STV9HUkFQSElDU19DT05URVhUXzNELCBQbGF0Zm9y
bTNET2JqZWN0IHRleHR1cmUgPSBOT19QTEFURk9STV8zRF9PQkpFQ1QpOworI2VuZGlmCisKIHBy
b3RlY3RlZDoKIAogICAgIHR5cGVkZWYgVmVjdG9yPFRyYW5zZm9ybU9wZXJhdGlvbjo6T3BlcmF0
aW9uVHlwZT4gVHJhbnNmb3JtT3BlcmF0aW9uTGlzdDsKQEAgLTM0Myw2ICszNTQsOSBAQCBwcm90
ZWN0ZWQ6CiAgICAgYm9vbCBtX3VzaW5nVGlsZWRMYXllciA6IDE7CiAgICAgYm9vbCBtX21hc2tz
VG9Cb3VuZHMgOiAxOwogICAgIGJvb2wgbV9kcmF3c0NvbnRlbnQgOiAxOworI2lmIEVOQUJMRSgz
RF9DQU5WQVMpCisgICAgYm9vbCBtX2NvbnRlbnRJczNkIDogMTsKKyNlbmRpZiAKIAogICAgIEdy
YXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlIG1fcGFpbnRpbmdQaGFzZTsKICAgICBDb21wb3NpdGlu
Z0Nvb3JkaW5hdGVzT3JpZW50YXRpb24gbV9nZW9tZXRyeU9yaWVudGF0aW9uOyAgICAvLyBhZmZl
Y3RzIGdlb21ldHJ5IG9mIGxheWVyIHBvc2l0aW9ucwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9tYWMvR3JhcGhpY3NMYXllckNBLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NMYXllckNBLmgJKHJldmlzaW9uIDQ3NzUzKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NMYXllckNBLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTg4LDYgKzg4LDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVl
ZHNEaXNwbGF5KCk7CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheUluUmVjdChjb25z
dCBGbG9hdFJlY3QmKTsKIAorI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisgICAgdmlydHVhbCB2b2lk
IHJlZHJhd0NhbnZhczNEKCk7CisjZW5kaWYKKyAgICAKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29u
dGVudHNSZWN0KGNvbnN0IEludFJlY3QmKTsKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgc3VzcGVu
ZEFuaW1hdGlvbnMoZG91YmxlIHRpbWUpOwpAQCAtMTAwLDYgKzEwNCw5IEBAIHB1YmxpYzoKICAg
ICAKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0ltYWdlKEltYWdlKik7CiAgICAgdmly
dHVhbCB2b2lkIHNldENvbnRlbnRzVG9WaWRlbyhQbGF0Zm9ybUxheWVyKik7CisjaWYgRU5BQkxF
KDNEX0NBTlZBUykKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0NhbnZhczNEKFBsYXRm
b3JtTGF5ZXIqKTsKKyNlbmRpZgogICAgIAogICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxh
dGZvcm1MYXllcigpIGNvbnN0OwogCkBAIC0xNzIsNiArMTc5LDkgQEAgcHJpdmF0ZToKIAogICAg
IHZvaWQgdXBkYXRlQ29udGVudHNJbWFnZSgpOwogICAgIHZvaWQgdXBkYXRlQ29udGVudHNWaWRl
bygpOworI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisgICAgdm9pZCB1cGRhdGVDb250ZW50c0NhbnZh
czNEKCk7CisjZW5kaWYKICAgICB2b2lkIHVwZGF0ZUNvbnRlbnRzUmVjdCgpOwogICAgIHZvaWQg
dXBkYXRlR2VvbWV0cnlPcmllbnRhdGlvbigpOwogICAgIHZvaWQgdXBkYXRlTWFza0xheWVyKCk7
CkBAIC0yMDIsOSArMjEyLDEyIEBAIHByaXZhdGU6CiAgICAgICAgIERpcnR5UmVjdHNDaGFuZ2Vk
ID0gMSA8PCAxNiwKICAgICAgICAgQ29udGVudHNJbWFnZUNoYW5nZWQgPSAxIDw8IDE3LAogICAg
ICAgICBDb250ZW50c1ZpZGVvQ2hhbmdlZCA9IDEgPDwgMTgsCi0gICAgICAgIENvbnRlbnRzUmVj
dENoYW5nZWQgPSAxIDw8IDE5LAotICAgICAgICBHZW9tZXRyeU9yaWVudGF0aW9uQ2hhbmdlZCA9
IDEgPDwgMjAsCi0gICAgICAgIE1hc2tMYXllckNoYW5nZWQgPSAxIDw8IDIxCisjaWYgRU5BQkxF
KDNEX0NBTlZBUykKKyAgICAgICAgQ29udGVudHNDYW52YXMzRENoYW5nZWQgPSAxIDw8IDE5LAor
I2VuZGlmCisgICAgICAgIENvbnRlbnRzUmVjdENoYW5nZWQgPSAxIDw8IDIwLAorICAgICAgICBH
ZW9tZXRyeU9yaWVudGF0aW9uQ2hhbmdlZCA9IDEgPDwgMjEsCisgICAgICAgIE1hc2tMYXllckNo
YW5nZWQgPSAxIDw8IDIyCiAgICAgfTsKICAgICB0eXBlZGVmIHVuc2lnbmVkIExheWVyQ2hhbmdl
RmxhZ3M7CiAgICAgdm9pZCBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoTGF5ZXJDaGFuZ2VGbGFn
cyBmbGFncyk7CkBAIC0yMTksNiArMjMyLDkgQEAgcHJpdmF0ZToKICAgICAgICAgTm9Db250ZW50
c0xheWVyID0gMCwKICAgICAgICAgQ29udGVudHNMYXllckZvckltYWdlLAogICAgICAgICBDb250
ZW50c0xheWVyRm9yVmlkZW8KKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorICAgICAgICAsQ29udGVu
dHNMYXllckZvckNhbnZhczNECisjZW5kaWYKICAgICB9OwogICAgIAogICAgIENvbnRlbnRzTGF5
ZXJQdXJwb3NlIG1fY29udGVudHNMYXllclB1cnBvc2U7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9HcmFwaGljc0xheWVyQ0EubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NMYXllckNBLm1tCShyZXZpc2lvbiA0Nzc1MykK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzTGF5ZXJDQS5tbQkod29y
a2luZyBjb3B5KQpAQCAtMzEsNiArMzEsOSBAQAogCiAjaW1wb3J0ICJBbmltYXRpb24uaCIKICNp
bXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgorI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisjaW1wb3J0
ICJDYW52YXMzRExheWVyLmgiCisjZW5kaWYKICNpbXBvcnQgIkNTdHJpbmcuaCIKICNpbXBvcnQg
IkZsb2F0Q29udmVyc2lvbi5oIgogI2ltcG9ydCAiRmxvYXRSZWN0LmgiCkBAIC03NzUsNyArNzc4
LDEyIEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpjb21taXRMYXllckNoYW5nZXMKICAgICAgICAg
CiAgICAgaWYgKG1fdW5jb21taXR0ZWRDaGFuZ2VzICYgQ29udGVudHNWaWRlb0NoYW5nZWQpIC8v
IE5lZWRzIHRvIGhhcHBlbiBiZWZvcmUgQ2hpbGRyZW5DaGFuZ2VkCiAgICAgICAgIHVwZGF0ZUNv
bnRlbnRzVmlkZW8oKTsKLQorICAgIAorI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisgICAgaWYgKG1f
dW5jb21taXR0ZWRDaGFuZ2VzICYgQ29udGVudHNDYW52YXMzRENoYW5nZWQpIC8vIE5lZWRzIHRv
IGhhcHBlbiBiZWZvcmUgQ2hpbGRyZW5DaGFuZ2VkCisgICAgICAgIHVwZGF0ZUNvbnRlbnRzQ2Fu
dmFzM0QoKTsKKyNlbmRpZgorICAgIAogICAgIGlmIChtX3VuY29tbWl0dGVkQ2hhbmdlcyAmIEJh
Y2tncm91bmRDb2xvckNoYW5nZWQpICAvLyBOZWVkcyB0byBoYXBwZW4gYmVmb3JlIENoaWxkcmVu
Q2hhbmdlZCwgYW5kIGFmdGVyIHVwZGF0aW5nIGltYWdlIG9yIHZpZGVvCiAgICAgICAgIHVwZGF0
ZUxheWVyQmFja2dyb3VuZENvbG9yKCk7CiAKQEAgLTEwNzgsNiArMTA4NiwxNyBAQCB2b2lkIEdy
YXBoaWNzTGF5ZXJDQTo6dXBkYXRlQ29udGVudHNWaWRlCiAgICAgfQogfQogCisjaWYgRU5BQkxF
KDNEX0NBTlZBUykKK3ZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50c0NhbnZhczNE
KCkKK3sKKyAgICAvLyBDYW52YXMzRCBsYXllciB3YXMgc2V0IGFzIG1fY29udGVudHNMYXllciwg
YW5kIHdpbGwgZ2V0IHBhcmVudGVkIGluIHVwZGF0ZVN1YmxheWVyTGlzdCgpLgorICAgIGlmICht
X2NvbnRlbnRzTGF5ZXIpIHsKKyAgICAgICAgc2V0dXBDb250ZW50c0xheWVyKG1fY29udGVudHNM
YXllci5nZXQoKSk7CisgICAgICAgIHVwZGF0ZUNvbnRlbnRzUmVjdCgpOworICAgIH0KK30KKyNl
bmRpZgorICAgIAogdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUNvbnRlbnRzUmVjdCgpCiB7
CiAgICAgaWYgKCFtX2NvbnRlbnRzTGF5ZXIpCkBAIC0xMjcwLDYgKzEyODksMjIgQEAgdm9pZCBH
cmFwaGljc0xheWVyQ0E6OnBhdXNlQW5pbWF0aW9uT25MYQogICAgIFtsYXllciBhZGRBbmltYXRp
b246cGF1c2VkQW5pbSBmb3JLZXk6YW5pbWF0aW9uTmFtZV07ICAvLyBUaGlzIHdpbGwgcmVwbGFj
ZSB0aGUgcnVubmluZyBhbmltYXRpb24uCiB9CiAKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQordm9p
ZCBHcmFwaGljc0xheWVyQ0E6OnNldENvbnRlbnRzVG9DYW52YXMzRChQbGF0Zm9ybUxheWVyKiBs
YXllcikKK3sKKworICAgIAorICAgIAorICAgIGlmIChsYXllciAhPSBtX2NvbnRlbnRzTGF5ZXIu
Z2V0KCkpCisgICAgICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChDaGlsZHJlbkNoYW5nZWQp
OworICAgIAorICAgIG1fY29udGVudHNMYXllciA9IGxheWVyOworICAgIG5vdGVMYXllclByb3Bl
cnR5Q2hhbmdlZChDb250ZW50c0NhbnZhczNEQ2hhbmdlZCk7CisgICAgCisgICAgbV9jb250ZW50
c0xheWVyUHVycG9zZSA9IGxheWVyID8gQ29udGVudHNMYXllckZvckNhbnZhczNEIDogTm9Db250
ZW50c0xheWVyOworfQorI2VuZGlmCisgICAgCiB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6cmVwYWlu
dExheWVyRGlydHlSZWN0cygpCiB7CiAgICAgaWYgKCFtX2RpcnR5UmVjdHMuc2l6ZSgpKQpAQCAt
MTc4OCw2ICsxODIzLDM3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpub3RlTGF5ZXJQcm9wZXJ0
eUMKICAgICBtX3VuY29tbWl0dGVkQ2hhbmdlcyB8PSBmbGFnczsKIH0KIAorI2lmIEVOQUJMRSgz
RF9DQU5WQVMpCit2b2lkIEdyYXBoaWNzTGF5ZXI6OnNldEhhczNETGF5ZXIoYm9vbCBoYXMzRExh
eWVyLCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIGNvbnRleHQsIFBsYXRmb3JtM0RPYmplY3Qg
dGV4dHVyZSkKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKKworICAgIGlmICho
YXMzRExheWVyICYmICFtX2NvbnRlbnRJczNkKSB7CisgICAgICAgIC8vIGNyZWF0ZSB0aGUgaW5u
ZXIgM2QgbGF5ZXIKKyAgICAgICAgUGxhdGZvcm1MYXllciogbGF5ZXIgPSBbW0NhbnZhczNETGF5
ZXIgYWxsb2NdIGluaXRXaXRoQ29udGV4dDooQ0dMQ29udGV4dE9iaikgY29udGV4dCB0ZXh0dXJl
OiAoR0x1aW50KSB0ZXh0dXJlXTsKKyAgICAgICAgW2xheWVyIHNldE5hbWU6QCIzRCBMYXllciJd
OworICAgICAgICAKKyAgICAgICAgc2V0Q29udGVudHNUb0NhbnZhczNEKGxheWVyKTsKKyAgICAg
ICAgW2xheWVyIHNldE5lZWRzRGlzcGxheV07CisgICAgICAgIAorICAgICAgICBtX2NvbnRlbnRJ
czNkID0gdHJ1ZTsKKyAgICAgICAgCisgICAgfSBlbHNlIGlmICghaGFzM0RMYXllcikgeworICAg
ICAgICAvLyByZW1vdmUgdGhlIGlubmVyIGxheWVyCisgICAgICAgIHNldENvbnRlbnRzVG9DYW52
YXMzRCgwKTsKKyAgICAgICAgbV9jb250ZW50SXMzZCA9IGZhbHNlOworICAgIH0KKyAgICAKKyAg
ICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCit9ICAKKwordm9pZCBHcmFwaGljc0xheWVyQ0E6
OnJlZHJhd0NhbnZhczNEKCkKK3sKKyAgICBpZiAobV9jb250ZW50SXMzZCkKKyAgICAgICAgW21f
Y29udGVudHNMYXllci5nZXQoKSBzZXROZWVkc0Rpc3BsYXldOworfQorI2VuZGlmCisgICAgCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38667</attachid>
            <date>2009-08-27 06:39:39 -0700</date>
            <delta_ts>2009-08-27 16:56:48 -0700</delta_ts>
            <desc>Final patch for Canvas3D work</desc>
            <filename>webgl-hook-up.patch</filename>
            <type>text/plain</type>
            <size>32663</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NzgxOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjAgQEAKKzIwMDktMDgtMjcgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZp
bmFsIHBhdGNoIGZvciBDYW52YXMgM0Qgc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgwMTgKKworICAgICAgICBUaGlzIGhvb2tzIGV2ZXJ5
dGhpbmcgdXAgYW5kIHByb3ZpZGVzIGEgd29ya2luZyBpbXBsZW1lbnRhdGlvbiBvZgorICAgICAg
ICBDYW52YXMgM0QuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RDdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6Omds
RHJhd0VsZW1lbnRzKToKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpFbGVtZW50OjpyZWNhbGNTdHlsZSk6CisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Tm9kZTo6c2V0TmVlZHNTdHlsZVJlY2FsYyk6CisgICAgICAgICogZG9t
L05vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgICogaHRtbC9IVE1MQ2FudmFz
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Z2V0Q29u
dGV4dCk6CisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oOgorICAgICAgICAqIHBh
Z2UvRE9NV2luZG93LmlkbDoKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkJhc2U6OnNldE5lZWRzU3R5bGVSZWNh
bGMpOgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnVwZGF0ZUFuaW1h
dGlvblRpbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRl
Ojp1cGRhdGVTdHlsZUlmTmVlZGVkRGlzcGF0Y2hlckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpwYXVzZUFuaW1hdGlvbkF0VGltZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cGF1c2VUcmFuc2l0aW9u
QXRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkNvbnRyb2xsZXI6OmNhbmNlbEFu
aW1hdGlvbnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNE
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNUbzNEQ2FudmFzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OnJlZHJhdzNEQ2FudmFzKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NMYXllckNBLmg6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0xheWVyQ0E6Oik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dy
YXBoaWNzTGF5ZXJDQS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6R3Jh
cGhpY3NMYXllckNBKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6Y29tbWl0
TGF5ZXJDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRl
Q29udGVudHMzRENhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnNl
dENvbnRlbnRzVG8zRENhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6
OnJlZHJhdzNEQ2FudmFzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySFRNTENhbnZhcy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJIVE1MQ2FudmFzOjpyZXF1aXJlc0xheWVyKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySFRNTENhbnZhcy5oOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVySFRNTENhbnZhczo6aXNDYW52YXMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5n
Ojp1cGRhdGVHcmFwaGljc0xheWVyQ29uZmlndXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllckJhY2tpbmc6OmNhblVzZURpcmVjdENvbXBvc2l0aW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6cmVuZGVyZXJDb250ZW50Q2hhbmdlZCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdMYXllcik6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyT2JqZWN0Ojppc0NhbnZhcyk6CisKIDIwMDktMDgtMjcgIEFyaXlhIEhpZGF5YXQgIDxhcml5
YS5oaWRheWF0QG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBUb3IgQXJuZSBWZXN0
YsO4LgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDQ3NzUzKQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTgzNyw3ICs4MzcsNyBAQAogCQk0OUM3QjlFNTEwNDJEMzJG
MDAwOUQ0NDcgLyogQ2FudmFzVGV4dHVyZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3QjlDNTEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzVGV4
dHVyZS5jcHAgKi87IH07CiAJCTQ5QzdCOUU2MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNUZXh0
dXJlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3
QjlDNjEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzVGV4dHVyZS5oICovOyB9OwogCQk0OUM3QjlF
NzEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzVGV4dHVyZS5pZGwgaW4gUmVzb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOUM3MTA0MkQzMkYwMDA5RDQ0NyAv
KiBDYW52YXNUZXh0dXJlLmlkbCAqLzsgfTsKLQkJNDlDN0I5RkMxMDQyRDM2NTAwMDlENDQ3IC8q
IEdyYXBoaWNzQ29udGV4dDNELmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0OUM3QjlGQjEwNDJEMzY1MDAwOUQ0NDcgLyogR3JhcGhpY3NDb250ZXh0M0Qu
aCAqLzsgfTsKKwkJNDlDN0I5RkMxMDQyRDM2NTAwMDlENDQ3IC8qIEdyYXBoaWNzQ29udGV4dDNE
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3QjlG
QjEwNDJEMzY1MDAwOUQ0NDcgLyogR3JhcGhpY3NDb250ZXh0M0QuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0OUM3QkEwMDEwNDJEMzhDMDAwOUQ0
NDcgLyogQ2FudmFzM0RMYXllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDlDN0I5RkQxMDQyRDM4QzAwMDlENDQ3IC8qIENhbnZhczNETGF5ZXIuaCAq
LzsgfTsKIAkJNDlDN0JBMDExMDQyRDM4QzAwMDlENDQ3IC8qIENhbnZhczNETGF5ZXIubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3QjlGRTEwNDJE
MzhDMDAwOUQ0NDcgLyogQ2FudmFzM0RMYXllci5tbSAqLzsgfTsKIAkJNDlDN0JBMDIxMDQyRDM4
QzAwMDlENDQ3IC8qIEdyYXBoaWNzQ29udGV4dDNETWFjLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOUZGMTA0MkQzOEMwMDA5RDQ0NyAvKiBH
cmFwaGljc0NvbnRleHQzRE1hYy5jcHAgKi87IH07CkBAIC0xNjI0Niw2ICsxNjI0Niw3IEBACiAJ
CQkJQjJBMDE1QTkwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzQ29udGV4dC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTgwRDY3MDgwRTlFOURFQjAwRTQyMEYwIC8qIEdyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZUNHLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODhGRTMzNDBFNUVFRTg3MDA4
RDhDMEYgLyogR3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDlD
N0I5RkMxMDQyRDM2NTAwMDlENDQ3IC8qIEdyYXBoaWNzQ29udGV4dDNELmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjU4MEIwRDBGMTJBMjY5MDA1MUQ2ODkgLyogR3JhcGhpY3NMYXllci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY1ODBCMDYwRjEyQTI1NTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXJD
QS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1ODBCMEUwRjEyQTI2OTAwNTFENjg5IC8qIEdyYXBo
aWNzTGF5ZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMTc1MzEsNyArMTc1MzIsNiBAQAog
CQkJCTQ5QzdCOUUwMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCTQ5QzdCOUUzMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNT
aGFkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5QzdCOUU2MTA0MkQzMkYwMDA5RDQ0NyAvKiBD
YW52YXNUZXh0dXJlLmggaW4gSGVhZGVycyAqLywKLQkJCQk0OUM3QjlGQzEwNDJEMzY1MDAwOUQ0
NDcgLyogR3JhcGhpY3NDb250ZXh0M0QuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5QzdCQTAwMTA0
MkQzOEMwMDA5RDQ0NyAvKiBDYW52YXMzRExheWVyLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJ
CQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RDdXN0
b20uY3BwCShyZXZpc2lvbiA0Nzc1NCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODQsNDIgKzI4
NCw0NCBAQCBKU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnbERyCiAgICAgICAg
IGlmIChhcmdzLnNpemUoKSA+IDQpCiAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVj
LCBTeW50YXhFcnJvcik7CiAgICAgICAgICAgICAKLSAgICAgICAgY291bnQgPSBhcmdzLmF0KDIp
LnRvSW50MzIoZXhlYyk7CisgICAgICAgIHVuc2lnbmVkIGludCBjb3VudCA9IGFyZ3MuYXQoMiku
dG9JbnQzMihleGVjKTsKICAgICAgICAgdW5zaWduZWQgaW50IG9mZnNldCA9IChhcmdzLnNpemUo
KSA9PSA0KSA/IGFyZ3MuYXQoMykudG9JbnQzMihleGVjKSA6IDA7CiAgICAgICAgIGNvbnRleHQt
PmdsRHJhd0VsZW1lbnRzKG1vZGUsIGNvdW50LCB0eXBlLCAodm9pZCopIG9mZnNldCk7CisgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKyAgICAKKyAgICAvLyAzcmQgcGFyYW0g
aXMgYW4gb2JqZWN0LiBUcmVhdCBpdCBhcyBhbiBhcnJheQorICAgIGlmIChhcmdzLnNpemUoKSAh
PSAzKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvcik7CisgICAg
ICAgIAorICAgIGlmICh0eXBlICE9IEdMX1VOU0lHTkVEX0JZVEUgJiYgdHlwZSAhPSBHTF9VTlNJ
R05FRF9TSE9SVCkKKyAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7
CisgICAgICAgICAKKyAgICBKU09iamVjdCogYXJyYXkgPSBhc09iamVjdChhcmdzLmF0KDIpKTsK
KyAgICBjb3VudCA9IGFycmF5LT5nZXQoZXhlYywgSWRlbnRpZmllcihleGVjLCAibGVuZ3RoIikp
LnRvSW50MzIoZXhlYyk7CisgICAgc2l6ZV90IHNpemUgPSBjb3VudCAqICgodHlwZSA9PSBHTF9V
TlNJR05FRF9CWVRFKSA/IHNpemVvZih1bnNpZ25lZCBjaGFyKSA6IHNpemVvZih1bnNpZ25lZCBz
aG9ydCkpOworICAgIAorICAgIHZvaWQqIHRlbXBJbmRpY2VzOworICAgIGlmICghdHJ5RmFzdE1h
bGxvYyhzaXplKS5nZXRWYWx1ZSh0ZW1wSW5kaWNlcykpCisgICAgICAgIHJldHVybiB0aHJvd0Vy
cm9yKGV4ZWMsIEdlbmVyYWxFcnJvcik7CisKKyAgICBPd25GYXN0TWFsbG9jUHRyPHZvaWQ+IHBh
c3NlZEluZGljZXModGVtcEluZGljZXMpOworCisgICAgaWYgKHR5cGUgPT0gR0xfVU5TSUdORURf
QllURSkgeworICAgICAgICB1bnNpZ25lZCBjaGFyKiBpbmRpY2VzID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcio+KHBhc3NlZEluZGljZXMuZ2V0KCkpOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0
IHZhbHVlID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oYXJyYXktPmdldChleGVjLCBpKS50
b1VJbnQzMihleGVjKSk7CisgICAgICAgICAgICBpbmRpY2VzW2ldID0gdmFsdWU7CisgICAgICAg
IH0KICAgICB9IGVsc2UgewotICAgICAgICBpZiAoYXJncy5zaXplKCkgIT0gMykKLSAgICAgICAg
ICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yKTsKLSAgICAgICAgICAgIAot
ICAgICAgICBpZiAodHlwZSAhPSBHTF9VTlNJR05FRF9CWVRFICYmIHR5cGUgIT0gR0xfVU5TSUdO
RURfU0hPUlQpCi0gICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9y
KTsKLSAgICAgICAgICAgICAKLSAgICAgICAgc2l6ZV90IHNpemUgPSBjb3VudCAqICgodHlwZSA9
PSBHTF9VTlNJR05FRF9CWVRFKSA/IHNpemVvZih1bnNpZ25lZCBjaGFyKSA6IHNpemVvZih1bnNp
Z25lZCBzaG9ydCkpOwotICAgICAgICB2b2lkKiB0ZW1wSW5kaWNlczsKLSAgICAgICAgaWYgKCF0
cnlGYXN0TWFsbG9jKHNpemUpLmdldFZhbHVlKHRlbXBJbmRpY2VzKSkKLSAgICAgICAgICAgIHJl
dHVybiB0aHJvd0Vycm9yKGV4ZWMsIEdlbmVyYWxFcnJvcik7Ci0KLSAgICAgICAgT3duRmFzdE1h
bGxvY1B0cjx2b2lkPiBwYXNzZWRJbmRpY2VzKHRlbXBJbmRpY2VzKTsKLSAgICAgICAgSlNPYmpl
Y3QqIGFycmF5ID0gYXNPYmplY3QoYXJncy5hdCgyKSk7Ci0gICAgICAgIGNvdW50ID0gYXJyYXkt
PmdldChleGVjLCBJZGVudGlmaWVyKGV4ZWMsICJsZW5ndGgiKSkudG9JbnQzMihleGVjKTsKLQot
ICAgICAgICBpZiAodHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFKSB7Ci0gICAgICAgICAgICB1bnNp
Z25lZCBjaGFyKiBpbmRpY2VzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KHBhc3NlZElu
ZGljZXMuZ2V0KCkpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBj
b3VudDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgdmFsdWUgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihhcnJheS0+Z2V0KGV4ZWMsIGkpLnRvVUludDMyKGV4ZWMp
KTsKLSAgICAgICAgICAgICAgICBpbmRpY2VzW2ldID0gdmFsdWU7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCogaW5kaWNlcyA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0Kj4ocGFzc2VkSW5kaWNlcy5nZXQoKSk7Ci0gICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBzaG9ydCB2YWx1ZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0
PihhcnJheS0+Z2V0KGV4ZWMsIGkpLnRvVUludDMyKGV4ZWMpKTsKLSAgICAgICAgICAgICAgICBp
bmRpY2VzW2ldID0gdmFsdWU7Ci0gICAgICAgICAgICB9CisgICAgICAgIHVuc2lnbmVkIHNob3J0
KiBpbmRpY2VzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQqPihwYXNzZWRJbmRpY2VzLmdl
dCgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7
CisgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCB2YWx1ZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
IHNob3J0PihhcnJheS0+Z2V0KGV4ZWMsIGkpLnRvVUludDMyKGV4ZWMpKTsKKyAgICAgICAgICAg
IGluZGljZXNbaV0gPSB2YWx1ZTsKICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNv
bnRleHQtPmdsRHJhd0VsZW1lbnRzKG1vZGUsIGNvdW50LCB0eXBlLCBwYXNzZWRJbmRpY2VzLmdl
dCgpKTsKICAgICB9Ci0KKyAgICAgICAgCisgICAgY29udGV4dC0+Z2xEcmF3RWxlbWVudHMobW9k
ZSwgY291bnQsIHR5cGUsIHBhc3NlZEluZGljZXMuZ2V0KCkpOwogICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogfQogCkluZGV4OiBXZWJDb3JlL2RvbS9FbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkocmV2aXNpb24gNDc3NTMpCisrKyBXZWJDb3JlL2Rv
bS9FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYwLDcgKzg2MCw3IEBAIHZvaWQgRWxl
bWVudDo6cmVjYWxjU3R5bGUoU3R5bGVDaGFuZ2UgY2gKIAogICAgICAgICBpZiAoY2ggIT0gTm9D
aGFuZ2UgfHwgcHNldWRvU3R5bGVDYWNoZUlzSW52YWxpZChjdXJyZW50U3R5bGUuZ2V0KCksIG5l
d1N0eWxlLmdldCgpKSkgewogICAgICAgICAgICAgc2V0UmVuZGVyU3R5bGUobmV3U3R5bGUpOwot
ICAgICAgICB9IGVsc2UgaWYgKG5lZWRzU3R5bGVSZWNhbGMoKSAmJiAoc3R5bGVDaGFuZ2VUeXBl
KCkgIT0gQW5pbWF0aW9uU3R5bGVDaGFuZ2UpICYmIChkb2N1bWVudCgpLT51c2VzU2libGluZ1J1
bGVzKCkgfHwgZG9jdW1lbnQoKS0+dXNlc0Rlc2NlbmRhbnRSdWxlcygpKSkgeworICAgICAgICB9
IGVsc2UgaWYgKG5lZWRzU3R5bGVSZWNhbGMoKSAmJiAoc3R5bGVDaGFuZ2VUeXBlKCkgIT0gU3lu
dGhldGljU3R5bGVDaGFuZ2UpICYmIChkb2N1bWVudCgpLT51c2VzU2libGluZ1J1bGVzKCkgfHwg
ZG9jdW1lbnQoKS0+dXNlc0Rlc2NlbmRhbnRSdWxlcygpKSkgewogICAgICAgICAgICAgLy8gQWx0
aG91Z2ggbm8gY2hhbmdlIG9jY3VycmVkLCB3ZSB1c2UgdGhlIG5ldyBzdHlsZSBzbyB0aGF0IHRo
ZSBjb3VzaW4gc3R5bGUgc2hhcmluZyBjb2RlIHdvbid0IGdldAogICAgICAgICAgICAgLy8gZm9v
bGVkIGludG8gYmVsaWV2aW5nIHRoaXMgc3R5bGUgaXMgdGhlIHNhbWUuICBUaGlzIGlzIG9ubHkg
bmVjZXNzYXJ5IGlmIHRoZSBkb2N1bWVudCBhY3R1YWxseSB1c2VzCiAgICAgICAgICAgICAvLyBz
aWJsaW5nL2Rlc2NlbmRhbnQgcnVsZXMsIHNpbmNlIG90aGVyd2lzZSBpdCBpc24ndCBwb3NzaWJs
ZSBmb3IgYW5jZXN0b3Igc3R5bGVzIHRvIGFmZmVjdCBzaGFyaW5nIG9mCkBAIC04NjksNyArODY5
LDcgQEAgdm9pZCBFbGVtZW50OjpyZWNhbGNTdHlsZShTdHlsZUNoYW5nZSBjaAogICAgICAgICAg
ICAgICAgIHJlbmRlcmVyKCktPnNldFN0eWxlSW50ZXJuYWwobmV3U3R5bGUuZ2V0KCkpOwogICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHNldFJlbmRlclN0eWxlKG5ld1N0eWxlKTsK
LSAgICAgICAgfSBlbHNlIGlmIChzdHlsZUNoYW5nZVR5cGUoKSA9PSBBbmltYXRpb25TdHlsZUNo
YW5nZSkKKyAgICAgICAgfSBlbHNlIGlmIChzdHlsZUNoYW5nZVR5cGUoKSA9PSBTeW50aGV0aWNT
dHlsZUNoYW5nZSkKICAgICAgICAgICAgICBzZXRSZW5kZXJTdHlsZShuZXdTdHlsZSk7CiAKICAg
ICAgICAgaWYgKGNoYW5nZSAhPSBGb3JjZSkgewpJbmRleDogV2ViQ29yZS9kb20vTm9kZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDQ3NzUzKQorKysg
V2ViQ29yZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2NSw3ICs3NjUsNyBAQCB2
b2lkIE5vZGU6OnNldE5lZWRzU3R5bGVSZWNhbGMoU3R5bGVDaGFuCiAgICAgaWYgKChjaGFuZ2VU
eXBlICE9IE5vU3R5bGVDaGFuZ2UpICYmICFhdHRhY2hlZCgpKSAvLyBjaGFuZ2VkIGNvbXBhcmVk
IHRvIHdoYXQ/CiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghKGNoYW5nZVR5cGUgPT0gSW5s
aW5lU3R5bGVDaGFuZ2UgJiYgKG1fc3R5bGVDaGFuZ2UgPT0gRnVsbFN0eWxlQ2hhbmdlIHx8IG1f
c3R5bGVDaGFuZ2UgPT0gQW5pbWF0aW9uU3R5bGVDaGFuZ2UpKSkKKyAgICBpZiAoIShjaGFuZ2VU
eXBlID09IElubGluZVN0eWxlQ2hhbmdlICYmIChtX3N0eWxlQ2hhbmdlID09IEZ1bGxTdHlsZUNo
YW5nZSB8fCBtX3N0eWxlQ2hhbmdlID09IFN5bnRoZXRpY1N0eWxlQ2hhbmdlKSkpCiAgICAgICAg
IG1fc3R5bGVDaGFuZ2UgPSBjaGFuZ2VUeXBlOwogCiAgICAgaWYgKG1fc3R5bGVDaGFuZ2UgIT0g
Tm9TdHlsZUNoYW5nZSkgewpJbmRleDogV2ViQ29yZS9kb20vTm9kZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvZG9tL05vZGUuaAkocmV2aXNpb24gNDc3NTMpCisrKyBXZWJDb3JlL2RvbS9Ob2Rl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDEwIEBAIGNsYXNzIFN0cmluZ0J1aWxkZXI7
CiAKIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAKLWVudW0gU3R5bGVDaGFuZ2VUeXBlIHsg
Tm9TdHlsZUNoYW5nZSwgSW5saW5lU3R5bGVDaGFuZ2UsIEZ1bGxTdHlsZUNoYW5nZSwgQW5pbWF0
aW9uU3R5bGVDaGFuZ2UgfTsKKy8vIFN5bnRoZXRpY1N0eWxlQ2hhbmdlIG1lYW5zIHRoYXQgd2Ug
bmVlZCB0byBnbyB0aHJvdWdoIHRoZSBlbnRpcmUgc3R5bGUgY2hhbmdlIGxvZ2ljIGV2ZW4gdGhv
dWdoCisvLyBubyBzdHlsZSBwcm9wZXJ0eSBoYXMgYWN0dWFsbHkgY2hhbmdlZC4gSXQgaXMgdXNl
ZCB0byByZXN0cnVjdHVyZSB0aGUgdHJlZSB3aGVuLCBmb3IgaW5zdGFuY2UsCisvLyBSZW5kZXJM
YXllcnMgYXJlIGNyZWF0ZWQgb3IgZGVzdHJveWVkIGR1ZSB0byBhbmltYXRpb24gY2hhbmdlcy4K
K2VudW0gU3R5bGVDaGFuZ2VUeXBlIHsgTm9TdHlsZUNoYW5nZSwgSW5saW5lU3R5bGVDaGFuZ2Us
IEZ1bGxTdHlsZUNoYW5nZSwgU3ludGhldGljU3R5bGVDaGFuZ2UgfTsKIAogY29uc3QgdW5zaWdu
ZWQgc2hvcnQgRE9DVU1FTlRfUE9TSVRJT05fRVFVSVZBTEVOVCA9IDB4MDA7CiBjb25zdCB1bnNp
Z25lZCBzaG9ydCBET0NVTUVOVF9QT1NJVElPTl9ESVNDT05ORUNURUQgPSAweDAxOwpJbmRleDog
V2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCShyZXZpc2lvbiA0Nzc1NSkKKysrIFdlYkNvcmUv
aHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NSw3ICsxNjUs
NyBAQCBDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBIVE1MQ2FudmFzRWxlbWVuCiAgICAgICAgICAg
ICBtX2NvbnRleHQuY2xlYXIoKTsKICAgICAgICAgaWYgKCFtX2NvbnRleHQpIHsKICAgICAgICAg
ICAgIG1fY29udGV4dC5zZXQobmV3IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCh0aGlzKSk7Ci0g
ICAgICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgICAgICBzZXROZWVkc1N0
eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKICAgICAgICAgfQogICAgIH0KICNlbmRp
ZgpJbmRleDogV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wYWdlL0RPTVdpbmRvdy5pZGwJKHJldmlzaW9uIDQ3NzUzKQorKysgV2ViQ29yZS9wYWdlL0RP
TVdpbmRvdy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTQxMyw2ICs0MTMsNyBAQCBtb2R1bGUgd2lu
ZG93IHsKICAgICAgICAgYXR0cmlidXRlIFtDdXN0b21HZXR0ZXJdIEhUTUxPcHRpb25FbGVtZW50
Q29uc3RydWN0b3IgT3B0aW9uOyAvLyBVc2FibGUgd2l0aCBuZXcgb3BlcmF0b3IKIAogICAgICAg
ICBhdHRyaWJ1dGUgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ29uc3RydWN0b3IgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOworICAgICAgICBhdHRyaWJ1dGUgW0NvbmRpdGlvbmFsPTNEX0NBTlZB
U10gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEQ29uc3RydWN0b3IgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDNEOwogICAgICAgICBhdHRyaWJ1dGUgVGV4dE1ldHJpY3NDb25zdHJ1Y3RvciBUZXh0TWV0
cmljczsKIAogICAgICAgICBhdHRyaWJ1dGUgRXZlbnRDb25zdHJ1Y3RvciBFdmVudDsKSW5kZXg6
IFdlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcAkocmV2aXNpb24gNDc3NTMp
CisrKyBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04MjQsNyArODI0LDcgQEAgdm9pZCBBbmltYXRpb25CYXNlOjpzZXROZWVkc1N0eWxl
UmVjYWxjKAogewogICAgIEFTU0VSVCghbm9kZSB8fCAobm9kZS0+ZG9jdW1lbnQoKSAmJiAhbm9k
ZS0+ZG9jdW1lbnQoKS0+aW5QYWdlQ2FjaGUoKSkpOwogICAgIGlmIChub2RlKQotICAgICAgICBu
b2RlLT5zZXROZWVkc1N0eWxlUmVjYWxjKEFuaW1hdGlvblN0eWxlQ2hhbmdlKTsKKyAgICAgICAg
bm9kZS0+c2V0TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7CiB9CiAKIGRv
dWJsZSBBbmltYXRpb25CYXNlOjpkdXJhdGlvbigpIGNvbnN0CkluZGV4OiBXZWJDb3JlL3BhZ2Uv
YW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDQ3NzUzKQor
KysgV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTgsNyArOTgsNyBAQCB2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRl
Ojp1cGRhdGVBCiAgICAgICAgICAgICAgICAgaWYgKGNhbGxTZXRDaGFuZ2VkKSB7CiAgICAgICAg
ICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBpdC0+Zmlyc3QtPm5vZGUoKTsKICAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKCFub2RlIHx8IChub2RlLT5kb2N1bWVudCgpICYmICFub2RlLT5kb2N1
bWVudCgpLT5pblBhZ2VDYWNoZSgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE5l
ZWRzU3R5bGVSZWNhbGMoQW5pbWF0aW9uU3R5bGVDaGFuZ2UpOworICAgICAgICAgICAgICAgICAg
ICBub2RlLT5zZXROZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKICAgICAg
ICAgICAgICAgICAgICAgY2FsbGVkU2V0Q2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIGVsc2UKQEAgLTE0Niw3ICsxNDYsNyBAQCB2b2lkIEFuaW1hdGlv
bkNvbnRyb2xsZXJQcml2YXRlOjp1cGRhdGVTCiAgICAgLy8gY2FsbCBzZXRDaGFuZ2VkIG9uIGFs
bCB0aGUgZWxlbWVudHMKICAgICBWZWN0b3I8UmVmUHRyPE5vZGU+ID46OmNvbnN0X2l0ZXJhdG9y
IG5vZGVDaGFuZ2VzVG9EaXNwYXRjaEVuZCA9IG1fbm9kZUNoYW5nZXNUb0Rpc3BhdGNoLmVuZCgp
OwogICAgIGZvciAoVmVjdG9yPFJlZlB0cjxOb2RlPiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1f
bm9kZUNoYW5nZXNUb0Rpc3BhdGNoLmJlZ2luKCk7IGl0ICE9IG5vZGVDaGFuZ2VzVG9EaXNwYXRj
aEVuZDsgKytpdCkKLSAgICAgICAgKCppdCktPnNldE5lZWRzU3R5bGVSZWNhbGMoQW5pbWF0aW9u
U3R5bGVDaGFuZ2UpOworICAgICAgICAoKml0KS0+c2V0TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0
aWNTdHlsZUNoYW5nZSk7CiAgICAgCiAgICAgbV9ub2RlQ2hhbmdlc1RvRGlzcGF0Y2guY2xlYXIo
KTsKICAgICAKQEAgLTI0NCw3ICsyNDQsNyBAQCBib29sIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2
YXRlOjpwYXVzZUFuCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChjb21wQW5pbS0+
cGF1c2VBbmltYXRpb25BdFRpbWUobmFtZSwgdCkpIHsKLSAgICAgICAgcmVuZGVyZXItPm5vZGUo
KS0+c2V0TmVlZHNTdHlsZVJlY2FsYyhBbmltYXRpb25TdHlsZUNoYW5nZSk7CisgICAgICAgIHJl
bmRlcmVyLT5ub2RlKCktPnNldE5lZWRzU3R5bGVSZWNhbGMoU3ludGhldGljU3R5bGVDaGFuZ2Up
OwogICAgICAgICBzdGFydFVwZGF0ZVN0eWxlSWZOZWVkZWREaXNwYXRjaGVyKCk7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KQEAgLTI2Miw3ICsyNjIsNyBAQCBib29sIEFuaW1hdGlvbkNv
bnRyb2xsZXJQcml2YXRlOjpwYXVzZVRyCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlm
IChjb21wQW5pbS0+cGF1c2VUcmFuc2l0aW9uQXRUaW1lKGNzc1Byb3BlcnR5SUQocHJvcGVydHkp
LCB0KSkgewotICAgICAgICByZW5kZXJlci0+bm9kZSgpLT5zZXROZWVkc1N0eWxlUmVjYWxjKEFu
aW1hdGlvblN0eWxlQ2hhbmdlKTsKKyAgICAgICAgcmVuZGVyZXItPm5vZGUoKS0+c2V0TmVlZHNT
dHlsZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7CiAgICAgICAgIHN0YXJ0VXBkYXRlU3R5
bGVJZk5lZWRlZERpc3BhdGNoZXIoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAt
NDM4LDcgKzQzOCw3IEBAIHZvaWQgQW5pbWF0aW9uQ29udHJvbGxlcjo6Y2FuY2VsQW5pbWF0aW8K
ICAgICBpZiAobV9kYXRhLT5jbGVhcihyZW5kZXJlcikpIHsKICAgICAgICAgTm9kZSogbm9kZSA9
IHJlbmRlcmVyLT5ub2RlKCk7CiAgICAgICAgIEFTU0VSVCghbm9kZSB8fCAobm9kZS0+ZG9jdW1l
bnQoKSAmJiAhbm9kZS0+ZG9jdW1lbnQoKS0+aW5QYWdlQ2FjaGUoKSkpOwotICAgICAgICBub2Rl
LT5zZXROZWVkc1N0eWxlUmVjYWxjKEFuaW1hdGlvblN0eWxlQ2hhbmdlKTsKKyAgICAgICAgbm9k
ZS0+c2V0TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7CiAgICAgfQogfQog
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5o
CShyZXZpc2lvbiA0Nzc1MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0M0QuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTAgKzM0LDE0IEBACiAjaW5jbHVkZSA8
T3BlbkdML09wZW5HTC5oPgogCiB0eXBlZGVmIHZvaWQqIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
M0Q7CisjZGVmaW5lIE5PX1BMQVRGT1JNX0dSQVBISUNTX0NPTlRFWFRfM0QgMAogdHlwZWRlZiBH
THVpbnQgUGxhdGZvcm0zRE9iamVjdDsKKyNkZWZpbmUgTk9fUExBVEZPUk1fM0RfT0JKRUNUIDAK
ICNlbHNlCiB0eXBlZGVmIHZvaWQqIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0Q7CisjZGVmaW5l
IE5PX1BMQVRGT1JNX0dSQVBISUNTX0NPTlRFWFRfM0QgMAogdHlwZWRlZiBpbnQgUGxhdGZvcm0z
RE9iamVjdDsKKyNkZWZpbmUgTk9fUExBVEZPUk1fM0RfT0JKRUNUIDAKICNlbmRpZgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
TGF5ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
TGF5ZXIuaAkocmV2aXNpb24gNDc3NTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzTGF5ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsOSBAQAogI2luY2x1ZGUg
IkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJGbG9hdFBvaW50M0QuaCIKICNpbmNsdWRlICJGbG9h
dFNpemUuaCIKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dDNELmgiCisjZW5kaWYKICNpbmNsdWRlICJHcmFwaGljc0xheWVyQ2xpZW50LmgiCiAjaW5jbHVk
ZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCkBAIC00OCw3
ICs1MSw3IEBAIHR5cGVkZWYgQ0FMYXllciBQbGF0Zm9ybUxheWVyOwogdHlwZWRlZiBDQUxheWVy
KiBOYXRpdmVMYXllcjsKICNlbHNlCiB0eXBlZGVmIHZvaWQqIFBsYXRmb3JtTGF5ZXI7Ci10eXBl
ZGVmIHZvaWQqIE5hdGl2ZUxheWVyOwordHlwZWRlZiBpbnQgTmF0aXZlTGF5ZXI7CiAjZW5kaWYK
ICNlbHNlCiB0eXBlZGVmIHZvaWQqIFBsYXRmb3JtTGF5ZXI7CkBAIC0yNTksNiArMjYyLDEwIEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb1ZpZGVvKFBsYXRmb3JtTGF5
ZXIqKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNCYWNrZ3JvdW5kQ29sb3IoY29u
c3QgQ29sb3ImKSB7IH0KICAgICAKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorICAgIHZpcnR1YWwg
dm9pZCBzZXRDb250ZW50c1RvM0RDYW52YXMoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCwgUGxh
dGZvcm0zRE9iamVjdCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHJlZHJhdzNEQ2FudmFzKCkgeyB9
CisjZW5kaWYKICAgICAvLyBDYWxsYmFjayBmcm9tIHRoZSB1bmRlcmx5aW5nIGdyYXBoaWNzIHN5
c3RlbSB0byBkcmF3IGxheWVyIGNvbnRlbnRzLgogICAgIHZvaWQgcGFpbnRHcmFwaGljc0xheWVy
Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgY2xpcCk7CiAgICAgCkBA
IC0zMDQsNiArMzExLDEwIEBAIHB1YmxpYzoKICAgICAvLyB3aXRoIHVwZGF0ZXMgZHJhd24gaW50
byB0aGUgd2luZG93LiBUaGlzIGlzIGEgc2lnbmFsIHRvIGZsdXNoIGFueSBpbnRlcm5hbCBiYXRj
aGVkIHN0YXRlLgogICAgIHZpcnR1YWwgdm9pZCBzeW5jQ29tcG9zaXRpbmdTdGF0ZSgpIHsgfQog
CisjaWYgRU5BQkxFKDNEX0NBTlZBUykKKyAgICB2b2lkIHNldEhhczNETGF5ZXIoYm9vbCBoYXMz
RExheWVyLCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIGNvbnRleHQgPSBOT19QTEFURk9STV9H
UkFQSElDU19DT05URVhUXzNELCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUgPSBOT19QTEFURk9S
TV8zRF9PQkpFQ1QpOworI2VuZGlmCisKIHByb3RlY3RlZDoKIAogICAgIHR5cGVkZWYgVmVjdG9y
PFRyYW5zZm9ybU9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZT4gVHJhbnNmb3JtT3BlcmF0aW9uTGlz
dDsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzTGF5ZXJDQS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzTGF5
ZXJDQS5oCShyZXZpc2lvbiA0Nzc1MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0dyYXBoaWNzTGF5ZXJDQS5oCSh3b3JraW5nIGNvcHkpCkBAIC04OCw2ICs4OCwxMCBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheSgpOwogICAgIHZpcnR1YWwgdm9p
ZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CiAKKyNpZiBFTkFCTEUo
M0RfQ0FOVkFTKQorICAgIHZpcnR1YWwgdm9pZCByZWRyYXczRENhbnZhcygpOworI2VuZGlmCisg
ICAgCiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzUmVjdChjb25zdCBJbnRSZWN0Jik7CiAg
ICAgCiAgICAgdmlydHVhbCB2b2lkIHN1c3BlbmRBbmltYXRpb25zKGRvdWJsZSB0aW1lKTsKQEAg
LTEwMCw2ICsxMDQsOSBAQCBwdWJsaWM6CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRl
bnRzVG9JbWFnZShJbWFnZSopOwogICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvVmlkZW8o
UGxhdGZvcm1MYXllciopOworI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisgICAgdmlydHVhbCB2b2lk
IHNldENvbnRlbnRzVG8zRENhbnZhcyhQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNELCBQbGF0Zm9y
bTNET2JqZWN0KTsKKyNlbmRpZgogICAgIAogICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxh
dGZvcm1MYXllcigpIGNvbnN0OwogCkBAIC0xNzIsNiArMTc5LDkgQEAgcHJpdmF0ZToKIAogICAg
IHZvaWQgdXBkYXRlQ29udGVudHNJbWFnZSgpOwogICAgIHZvaWQgdXBkYXRlQ29udGVudHNWaWRl
bygpOworI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisgICAgdm9pZCB1cGRhdGVDb250ZW50czNEQ2Fu
dmFzKCk7CisjZW5kaWYKICAgICB2b2lkIHVwZGF0ZUNvbnRlbnRzUmVjdCgpOwogICAgIHZvaWQg
dXBkYXRlR2VvbWV0cnlPcmllbnRhdGlvbigpOwogICAgIHZvaWQgdXBkYXRlTWFza0xheWVyKCk7
CkBAIC0yMDIsOSArMjEyLDEyIEBAIHByaXZhdGU6CiAgICAgICAgIERpcnR5UmVjdHNDaGFuZ2Vk
ID0gMSA8PCAxNiwKICAgICAgICAgQ29udGVudHNJbWFnZUNoYW5nZWQgPSAxIDw8IDE3LAogICAg
ICAgICBDb250ZW50c1ZpZGVvQ2hhbmdlZCA9IDEgPDwgMTgsCi0gICAgICAgIENvbnRlbnRzUmVj
dENoYW5nZWQgPSAxIDw8IDE5LAotICAgICAgICBHZW9tZXRyeU9yaWVudGF0aW9uQ2hhbmdlZCA9
IDEgPDwgMjAsCi0gICAgICAgIE1hc2tMYXllckNoYW5nZWQgPSAxIDw8IDIxCisjaWYgRU5BQkxF
KDNEX0NBTlZBUykKKyAgICAgICAgQ29udGVudHMzRENhbnZhc0NoYW5nZWQgPSAxIDw8IDE5LAor
I2VuZGlmCisgICAgICAgIENvbnRlbnRzUmVjdENoYW5nZWQgPSAxIDw8IDIwLAorICAgICAgICBH
ZW9tZXRyeU9yaWVudGF0aW9uQ2hhbmdlZCA9IDEgPDwgMjEsCisgICAgICAgIE1hc2tMYXllckNo
YW5nZWQgPSAxIDw8IDIyCiAgICAgfTsKICAgICB0eXBlZGVmIHVuc2lnbmVkIExheWVyQ2hhbmdl
RmxhZ3M7CiAgICAgdm9pZCBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5nZWQoTGF5ZXJDaGFuZ2VGbGFn
cyBmbGFncyk7CkBAIC0yMTksNiArMjMyLDkgQEAgcHJpdmF0ZToKICAgICAgICAgTm9Db250ZW50
c0xheWVyID0gMCwKICAgICAgICAgQ29udGVudHNMYXllckZvckltYWdlLAogICAgICAgICBDb250
ZW50c0xheWVyRm9yVmlkZW8KKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorICAgICAgICAsQ29udGVu
dHNMYXllckZvcjNEQ2FudmFzCisjZW5kaWYKICAgICB9OwogICAgIAogICAgIENvbnRlbnRzTGF5
ZXJQdXJwb3NlIG1fY29udGVudHNMYXllclB1cnBvc2U7CkBAIC0yNjQsNiArMjgwLDExIEBAIHBy
aXZhdGU6CiAgICAgVmVjdG9yPEZsb2F0UmVjdD4gbV9kaXJ0eVJlY3RzOwogICAgIAogICAgIExh
eWVyQ2hhbmdlRmxhZ3MgbV91bmNvbW1pdHRlZENoYW5nZXM7CisgICAgCisjaWYgRU5BQkxFKDNE
X0NBTlZBUykKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIG1fM0RDb250ZXh0OworICAg
IFBsYXRmb3JtM0RPYmplY3QgbV8zRFRleHR1cmU7CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNz
TGF5ZXJDQS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9H
cmFwaGljc0xheWVyQ0EubW0JKHJldmlzaW9uIDQ3NzUzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9tYWMvR3JhcGhpY3NMYXllckNBLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICsz
MSw5IEBACiAKICNpbXBvcnQgIkFuaW1hdGlvbi5oIgogI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25z
LmgiCisjaWYgRU5BQkxFKDNEX0NBTlZBUykKKyNpbXBvcnQgIkNhbnZhczNETGF5ZXIuaCIKKyNl
bmRpZgogI2ltcG9ydCAiQ1N0cmluZy5oIgogI2ltcG9ydCAiRmxvYXRDb252ZXJzaW9uLmgiCiAj
aW1wb3J0ICJGbG9hdFJlY3QuaCIKQEAgLTM0MSw2ICszNDQsMTAgQEAgR3JhcGhpY3NMYXllckNB
OjpHcmFwaGljc0xheWVyQ0EoR3JhcGhpYwogLCBtX2NvbnRlbnRzTGF5ZXJQdXJwb3NlKE5vQ29u
dGVudHNMYXllcikKICwgbV9jb250ZW50c0xheWVySGFzQmFja2dyb3VuZENvbG9yKGZhbHNlKQog
LCBtX3VuY29tbWl0dGVkQ2hhbmdlcyhOb0NoYW5nZSkKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQor
LCBtXzNEQ29udGV4dChOT19QTEFURk9STV9HUkFQSElDU19DT05URVhUXzNEKQorLCBtXzNEVGV4
dHVyZShOT19QTEFURk9STV8zRF9PQkpFQ1QpCisjZW5kaWYKIHsKICAgICBCRUdJTl9CTE9DS19P
QkpDX0VYQ0VQVElPTlMKICAgICBtX2xheWVyLmFkb3B0TlMoW1tXZWJMYXllciBhbGxvY10gaW5p
dF0pOwpAQCAtNzc1LDcgKzc4MiwxMiBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6Y29tbWl0TGF5
ZXJDaGFuZ2VzCiAgICAgICAgIAogICAgIGlmIChtX3VuY29tbWl0dGVkQ2hhbmdlcyAmIENvbnRl
bnRzVmlkZW9DaGFuZ2VkKSAvLyBOZWVkcyB0byBoYXBwZW4gYmVmb3JlIENoaWxkcmVuQ2hhbmdl
ZAogICAgICAgICB1cGRhdGVDb250ZW50c1ZpZGVvKCk7Ci0KKyAgICAKKyNpZiBFTkFCTEUoM0Rf
Q0FOVkFTKQorICAgIGlmIChtX3VuY29tbWl0dGVkQ2hhbmdlcyAmIENvbnRlbnRzM0RDYW52YXND
aGFuZ2VkKSAvLyBOZWVkcyB0byBoYXBwZW4gYmVmb3JlIENoaWxkcmVuQ2hhbmdlZAorICAgICAg
ICB1cGRhdGVDb250ZW50czNEQ2FudmFzKCk7CisjZW5kaWYKKyAgICAKICAgICBpZiAobV91bmNv
bW1pdHRlZENoYW5nZXMgJiBCYWNrZ3JvdW5kQ29sb3JDaGFuZ2VkKSAgLy8gTmVlZHMgdG8gaGFw
cGVuIGJlZm9yZSBDaGlsZHJlbkNoYW5nZWQsIGFuZCBhZnRlciB1cGRhdGluZyBpbWFnZSBvciB2
aWRlbwogICAgICAgICB1cGRhdGVMYXllckJhY2tncm91bmRDb2xvcigpOwogCkBAIC0xMDc4LDYg
KzEwOTAsMTcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUNvbnRlbnRzVmlkZQogICAg
IH0KIH0KIAorI2lmIEVOQUJMRSgzRF9DQU5WQVMpCit2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBk
YXRlQ29udGVudHMzRENhbnZhcygpCit7CisgICAgLy8gQ2FudmFzM0QgbGF5ZXIgd2FzIHNldCBh
cyBtX2NvbnRlbnRzTGF5ZXIsIGFuZCB3aWxsIGdldCBwYXJlbnRlZCBpbiB1cGRhdGVTdWJsYXll
ckxpc3QoKS4KKyAgICBpZiAobV9jb250ZW50c0xheWVyKSB7CisgICAgICAgIHNldHVwQ29udGVu
dHNMYXllcihtX2NvbnRlbnRzTGF5ZXIuZ2V0KCkpOworICAgICAgICB1cGRhdGVDb250ZW50c1Jl
Y3QoKTsKKyAgICB9Cit9CisjZW5kaWYKKyAgICAKIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRh
dGVDb250ZW50c1JlY3QoKQogewogICAgIGlmICghbV9jb250ZW50c0xheWVyKQpAQCAtMTI3MCw2
ICsxMjkzLDM3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpwYXVzZUFuaW1hdGlvbk9uTGEKICAg
ICBbbGF5ZXIgYWRkQW5pbWF0aW9uOnBhdXNlZEFuaW0gZm9yS2V5OmFuaW1hdGlvbk5hbWVdOyAg
Ly8gVGhpcyB3aWxsIHJlcGxhY2UgdGhlIHJ1bm5pbmcgYW5pbWF0aW9uLgogfQogCisjaWYgRU5B
QkxFKDNEX0NBTlZBUykKK3ZvaWQgR3JhcGhpY3NMYXllckNBOjpzZXRDb250ZW50c1RvM0RDYW52
YXMoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBjb250ZXh0LCBQbGF0Zm9ybTNET2JqZWN0IHRl
eHR1cmUpCit7CisgICAgaWYgKGNvbnRleHQgPT0gbV8zRENvbnRleHQgJiYgdGV4dHVyZSA9PSBt
XzNEVGV4dHVyZSkKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBtXzNEQ29udGV4dCA9
IGNvbnRleHQ7CisgICAgbV8zRFRleHR1cmUgPSB0ZXh0dXJlOworICAgIAorICAgIG5vdGVMYXll
clByb3BlcnR5Q2hhbmdlZChDaGlsZHJlbkNoYW5nZWQpOworICAgIAorICAgIEJFR0lOX0JMT0NL
X09CSkNfRVhDRVBUSU9OUworCisgICAgaWYgKGNvbnRleHQgIT0gTk9fUExBVEZPUk1fR1JBUEhJ
Q1NfQ09OVEVYVF8zRCAmJiB0ZXh0dXJlICE9IE5PX1BMQVRGT1JNXzNEX09CSkVDVCkgeworICAg
ICAgICAvLyBjcmVhdGUgdGhlIGlubmVyIDNkIGxheWVyCisgICAgICAgIG1fY29udGVudHNMYXll
ciA9IFtbQ2FudmFzM0RMYXllciBhbGxvY10gaW5pdFdpdGhDb250ZXh0OihDR0xDb250ZXh0T2Jq
KSBjb250ZXh0IHRleHR1cmU6IChHTHVpbnQpIHRleHR1cmVdOworI2lmbmRlZiBOREVCVUcKKyAg
ICAgICAgW21fY29udGVudHNMYXllci5nZXQoKSBzZXROYW1lOkAiM0QgTGF5ZXIiXTsKKyNlbmRp
ZiAgICAgICAgCisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gcmVtb3ZlIHRoZSBpbm5lciBsYXll
cgorICAgICAgICBtX2NvbnRlbnRzTGF5ZXIgPSAwOworICAgIH0KKyAgICAKKyAgICBFTkRfQkxP
Q0tfT0JKQ19FWENFUFRJT05TCisgICAgCisgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKENv
bnRlbnRzM0RDYW52YXNDaGFuZ2VkKTsKKyAgICBtX2NvbnRlbnRzTGF5ZXJQdXJwb3NlID0gbV9j
b250ZW50c0xheWVyID8gQ29udGVudHNMYXllckZvcjNEQ2FudmFzIDogTm9Db250ZW50c0xheWVy
OworfQorI2VuZGlmCisgICAgCiB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6cmVwYWludExheWVyRGly
dHlSZWN0cygpCiB7CiAgICAgaWYgKCFtX2RpcnR5UmVjdHMuc2l6ZSgpKQpAQCAtMTc4OCw2ICsx
ODQyLDE0IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpub3RlTGF5ZXJQcm9wZXJ0eUMKICAgICBt
X3VuY29tbWl0dGVkQ2hhbmdlcyB8PSBmbGFnczsKIH0KIAorI2lmIEVOQUJMRSgzRF9DQU5WQVMp
Cit2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6cmVkcmF3M0RDYW52YXMoKQoreworICAgIGlmIChtX2Nv
bnRlbnRzTGF5ZXJQdXJwb3NlID09IENvbnRlbnRzTGF5ZXJGb3IzRENhbnZhcykKKyAgICAgICAg
W21fY29udGVudHNMYXllci5nZXQoKSBzZXROZWVkc0Rpc3BsYXldOworfQorI2VuZGlmCisgICAg
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJIVE1MQ2FudmFzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJIVE1MQ2FudmFzLmNwcAkocmV2
aXNpb24gNDc3NTMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJIVE1MQ2FudmFzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsMTkgQEAgUmVuZGVySFRNTENhbnZhczo6UmVuZGVy
SFRNTENhbnZhcyhIVE1MQwogICAgIHZpZXcoKS0+ZnJhbWVWaWV3KCktPnNldElzVmlzdWFsbHlO
b25FbXB0eSgpOwogfQogCitib29sIFJlbmRlckhUTUxDYW52YXM6OnJlcXVpcmVzTGF5ZXIoKSBj
b25zdAoreworICAgIGlmIChSZW5kZXJSZXBsYWNlZDo6cmVxdWlyZXNMYXllcigpKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorICAgIEhUTUxDYW52
YXNFbGVtZW50KiBjYW52YXMgPSByZWludGVycHJldF9jYXN0PEhUTUxDYW52YXNFbGVtZW50Kj4o
bm9kZSgpKTsKKyAgICByZXR1cm4gY2FudmFzICYmIGNhbnZhcy0+aXMzRCgpOworI2Vsc2UKKyAg
ICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKwogdm9pZCBSZW5kZXJIVE1MQ2FudmFzOjpwYWlu
dFJlcGxhY2VkKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkKIHsKICAgICBJ
bnRSZWN0IHJlY3QgPSBjb250ZW50Qm94UmVjdCgpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVySFRNTENhbnZhcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckhUTUxDYW52YXMuaAkocmV2aXNpb24gNDc3NTMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJIVE1MQ2FudmFzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDkgQEAgY2xhc3MgUmVu
ZGVySFRNTENhbnZhcyA6IHB1YmxpYyBSZW5kZXJSZQogcHVibGljOgogICAgIFJlbmRlckhUTUxD
YW52YXMoSFRNTENhbnZhc0VsZW1lbnQqKTsKIAorICAgIHZpcnR1YWwgYm9vbCBpc0NhbnZhcygp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNMYXllcigp
IGNvbnN0OworCiAgICAgdm9pZCBjYW52YXNTaXplQ2hhbmdlZCgpOwogICAgIAogcHJpdmF0ZToK
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAkocmV2aXNpb24g
NDc3NTMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgorI2lu
Y2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKICNp
bmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJSZW5kZXJCb3guaCIKQEAgLTE2Myw2ICsx
NjQsMTggQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdyYXBoaWNzTAogICAgICAg
ICAgICAgbV9oYXNEaXJlY3RseUNvbXBvc2l0ZWRDb250ZW50ID0gdHJ1ZTsKICAgICAgICAgICAg
IG1fZ3JhcGhpY3NMYXllci0+c2V0RHJhd3NDb250ZW50KGZhbHNlKTsKICAgICAgICAgfQorI2lm
IEVOQUJMRSgzRF9DQU5WQVMpICAgIAorICAgICAgICBlbHNlIGlmIChyZW5kZXJlcigpLT5pc0Nh
bnZhcygpKSB7CisgICAgICAgICAgICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzID0gcmVpbnRl
cnByZXRfY2FzdDxIVE1MQ2FudmFzRWxlbWVudCo+KHJlbmRlcmVyKCktPm5vZGUoKSk7CisgICAg
ICAgICAgICBpZiAoY2FudmFzLT5pczNEKCkpIHsKKyAgICAgICAgICAgICAgICBtX2hhc0RpcmVj
dGx5Q29tcG9zaXRlZENvbnRlbnQgPSB0cnVlOworICAgICAgICAgICAgICAgIGlmIChjYW52YXMt
PmNvbnRleHQzRCgpKSB7CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0
Q29udGVudHNUbzNEQ2FudmFzKGNhbnZhcy0+Y29udGV4dDNEKCksIGNhbnZhcy0+dGV4dHVyZTNE
KCkpOworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoaWNzTGF5ZXItPnNldERyYXdzQ29udGVu
dCh0cnVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNl
bmRpZgogCiAgICAgICAgIGlmIChyZW5kZXJlckhhc0JhY2tncm91bmQoKSkKICAgICAgICAgICAg
IG1fZ3JhcGhpY3NMYXllci0+c2V0QmFja2dyb3VuZENvbG9yKHJlbmRlcmVyQmFja2dyb3VuZENv
bG9yKCkpOwpAQCAtNjMwLDYgKzY0MywxNyBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6Y2Fu
VXNlRGlyZWN0Q29tCiB7CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QgPSByZW5kZXJl
cigpOwogICAgIAorICAgIC8vIENhbnZhczNEIGlzIGFsd2F5cyBkaXJlY3QgY29tcG9zaXRlZAor
I2lmIEVOQUJMRSgzRF9DQU5WQVMpICAgIAorICAgIGJvb2wgaXMzRENhbnZhcyA9IGZhbHNlOwor
ICAgIGlmIChyZW5kZXJlcigpLT5pc0NhbnZhcygpKSB7CisgICAgICAgIEhUTUxDYW52YXNFbGVt
ZW50KiBjYW52YXMgPSByZWludGVycHJldF9jYXN0PEhUTUxDYW52YXNFbGVtZW50Kj4ocmVuZGVy
ZXIoKS0+bm9kZSgpKTsKKyAgICAgICAgaXMzRENhbnZhcyA9IGNhbnZhcy0+aXMzRCgpOworICAg
IH0KKyAgICBpZiAoaXMzRENhbnZhcykKKyAgICAgICAgcmV0dXJuIHRydWU7CisjZW5kaWYKKwog
ICAgIC8vIFJlamVjdCBhbnl0aGluZyB0aGF0IGlzbid0IGFuIGltYWdlCiAgICAgaWYgKCFyZW5k
ZXJPYmplY3QtPmlzSW1hZ2UoKSAmJiAhcmVuZGVyT2JqZWN0LT5pc1ZpZGVvKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKQEAgLTY0OCw4ICs2NzIsMTkgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tp
bmc6OmNhblVzZURpcmVjdENvbQogICAgIAogdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnJlbmRl
cmVyQ29udGVudENoYW5nZWQoKQogewotICAgIGlmIChjYW5Vc2VEaXJlY3RDb21wb3NpdGluZygp
ICYmIHJlbmRlcmVyKCktPmlzSW1hZ2UoKSkKLSAgICAgICAgdXBkYXRlSW1hZ2VDb250ZW50cygp
OworICAgIGlmIChjYW5Vc2VEaXJlY3RDb21wb3NpdGluZygpKSB7CisgICAgICAgIGlmIChyZW5k
ZXJlcigpLT5pc0ltYWdlKCkpCisgICAgICAgICAgICB1cGRhdGVJbWFnZUNvbnRlbnRzKCk7Cisg
ICAgICAgIGVsc2UgeworI2lmIEVOQUJMRSgzRF9DQU5WQVMpICAgIAorICAgICAgICAgICAgaWYg
KHJlbmRlcmVyKCktPmlzQ2FudmFzKCkpIHsKKyAgICAgICAgICAgICAgICBIVE1MQ2FudmFzRWxl
bWVudCogY2FudmFzID0gcmVpbnRlcnByZXRfY2FzdDxIVE1MQ2FudmFzRWxlbWVudCo+KHJlbmRl
cmVyKCktPm5vZGUoKSk7CisgICAgICAgICAgICAgICAgaWYgKGNhbnZhcy0+aXMzRCgpKQorICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoaWNzTGF5ZXItPnJlZHJhdzNEQ2FudmFzKCk7CisgICAg
ICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgfQorICAgIH0KIH0KIAogdm9pZCBSZW5kZXJMYXll
ckJhY2tpbmc6OnVwZGF0ZUltYWdlQ29udGVudHMoKQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCShyZXZpc2lvbiA0Nzc1MykKKysrIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDggKzM0LDggQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgog
I2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKLSNpbmNsdWRlICJIaXRUZXN0UmVxdWVzdC5oIgog
I2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKKyNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5o
IgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNp
bmNsdWRlICJSZW5kZXJWaWRlby5oIgpAQCAtODIwLDEzICs4MjAsMjUgQEAgYm9vbCBSZW5kZXJM
YXllckNvbXBvc2l0b3I6Om5lZWRzVG9CZUNvbQogLy8gc3RhdGljCiBib29sIFJlbmRlckxheWVy
Q29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0xheWVyKGNvbnN0IFJlbmRlckxheWVyKiBs
YXllcikgY29uc3QKIHsKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKSAgICAKKyAgICBib29sIGlzM0RD
YW52YXMgPSBmYWxzZTsKKyAgICBpZiAobGF5ZXItPnJlbmRlcmVyKCktPmlzQ2FudmFzKCkpIHsK
KyAgICAgICAgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8SFRN
TENhbnZhc0VsZW1lbnQqPihsYXllci0+cmVuZGVyZXIoKS0+bm9kZSgpKTsKKyAgICAgICAgaXMz
RENhbnZhcyA9IGNhbnZhcy0+aXMzRCgpOworICAgIH0KKyNlbmRpZgorICAgIAogICAgIC8vIFRo
ZSByb290IGxheWVyIGFsd2F5cyBoYXMgYSBjb21wb3NpdGluZyBsYXllciwgYnV0IGl0IG1heSBu
b3QgaGF2ZSBiYWNraW5nLgogICAgIHJldHVybiAoaW5Db21wb3NpdGluZ01vZGUoKSAmJiBsYXll
ci0+aXNSb290TGF5ZXIoKSkgfHwKICAgICAgICAgICAgICByZXF1aXJlc0NvbXBvc2l0aW5nRm9y
VHJhbnNmb3JtKGxheWVyLT5yZW5kZXJlcigpKSB8fAogICAgICAgICAgICAgIHJlcXVpcmVzQ29t
cG9zaXRpbmdGb3JWaWRlbyhsYXllci0+cmVuZGVyZXIoKSkgfHwKICAgICAgICAgICAgICBsYXll
ci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+YmFja2ZhY2VWaXNpYmlsaXR5KCkgPT0gQmFja2ZhY2VW
aXNpYmlsaXR5SGlkZGVuIHx8CiAgICAgICAgICAgICAgY2xpcHNDb21wb3NpdGluZ0Rlc2NlbmRh
bnRzKGxheWVyKSB8fAotICAgICAgICAgICAgIHJlcXVpcmVzQ29tcG9zaXRpbmdGb3JBbmltYXRp
b24obGF5ZXItPnJlbmRlcmVyKCkpOworICAgICAgICAgICAgIHJlcXVpcmVzQ29tcG9zaXRpbmdG
b3JBbmltYXRpb24obGF5ZXItPnJlbmRlcmVyKCkpCisjaWYgRU5BQkxFKDNEX0NBTlZBUykgICAg
CisgICAgICAgICAgICAgfHwgaXMzRENhbnZhcworI2VuZGlmCisgICAgICAgICAgICAgOwogfQog
CiAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgZ2l2ZW4gbGF5ZXIgaGFzIHNvbWUgYW5jZXN0b3IgaW4g
dGhlIFJlbmRlckxheWVyIGhpZXJhcmNoeSB0aGF0IGNsaXBzLApJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmgJKHJldmlzaW9uIDQ3NzUzKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3OCw2ICsyNzgsNyBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCBib29sIGlzVGV4dEZpZWxkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2
aXJ0dWFsIGJvb2wgaXNWaWRlbygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVh
bCBib29sIGlzV2lkZ2V0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgaXNDYW52YXMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgYm9vbCBpc1Jvb3Qo
KSBjb25zdCB7IHJldHVybiBkb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSA9PSBtX25vZGU7
IH0KICAgICBib29sIGlzQm9keSgpIGNvbnN0OwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNDc4MTgpCisr
KyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAor
MjAwOS0wOC0yNyAgQ2hyaXMgTWFycmluICA8Y21hcnJpbkBhcHBsZS5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW9kaWZpZWQgdGVzdHMgdG8g
d29yayB3aGVuIDNELUNBTlZBUyBmbGFnIGlzIG9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODAxOAorCisgICAgICAgIFRoaXMgc2tpcHMgdGVzdGlu
ZyBvZiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QsIHdoaWNoIHdpbGwgYmUgaGFuZGxlZCBpbiAK
KyAgICAgICAgc2VwYXJhdGUgdGVzdHMKKworICAgICAgICAqIGZhc3QvZG9tL1dpbmRvdy93aW5k
b3ctcHJvcGVydGllcy5odG1sOgorICAgICAgICAqIGZhc3QvZG9tL3Jlc291cmNlcy9wcm90b3R5
cGUtaW5oZXJpdGFuY2UtMi5qczoKKyAgICAgICAgKGNvbnN0cnVjdG9yTmFtZXNGb3JXaW5kb3cp
OgorICAgICAgICAqIGZhc3QvZG9tL3Jlc291cmNlcy9wcm90b3R5cGUtaW5oZXJpdGFuY2UuanM6
CisKIDIwMDktMDgtMjcgIFJlbmF0YSBIb2RvdmFuICA8aG9kb3Zhbi5yZW5hdGFAc3R1ZC51LXN6
ZWdlZC5odT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBcml5YSBIaWRheWF0LgpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLmh0bWwJ
KHJldmlzaW9uIDQ3NzUzKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1w
cm9wZXJ0aWVzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDkgQEAgdmFyIF9fc2tp
cF9fID0gewogICAgICJ3aW5kb3cub2JqQ1BsdWdpbiIgOiAxLAogICAgICJ3aW5kb3cub2JqQ1Bs
dWdpbkZ1bmN0aW9uIiA6IDEsCiAgICAgIndpbmRvdy5wbGFpblRleHQiIDogMSwKLSAgICAid2lu
ZG93LnRleHRJbnB1dENvbnRyb2xsZXIiIDogMQorICAgICJ3aW5kb3cudGV4dElucHV0Q29udHJv
bGxlciIgOiAxLAorICAgIAorICAgICJ3aW5kb3cuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEIiA6
IDEgLy8gV2UgaWdub3JlIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCBhbmQgdGVzdCBpdCBlbHNl
d2hlcmUsIHNpbmNlIGl0IGlzIG5vdCBpbiBhbGwgYnVpbGRzCiB9OwogCiBmdW5jdGlvbiBsb2dW
YWx1ZSh2YWx1ZU5hbWUpCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9yZXNvdXJjZXMvcHJv
dG90eXBlLWluaGVyaXRhbmNlLTIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9k
b20vcmVzb3VyY2VzL3Byb3RvdHlwZS1pbmhlcml0YW5jZS0yLmpzCShyZXZpc2lvbiA0Nzc1MykK
KysrIExheW91dFRlc3RzL2Zhc3QvZG9tL3Jlc291cmNlcy9wcm90b3R5cGUtaW5oZXJpdGFuY2Ut
Mi5qcwkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsOCBAQCBmdW5jdGlvbiBjb25zdHJ1Y3Rv
ck5hbWVzRm9yV2luZG93KGdsb2JhCiAgICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKQogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIHZhciB0eXBlID0gY2xhc3NOYW1lRm9yT2JqZWN0KHZh
bHVlKTsKKyAgICAgICAgaWYgKHR5cGUgPT0gIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRENvbnN0
cnVjdG9yIikKKyAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBXZSBpZ25vcmUgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDNEIGFuZCB0ZXN0IGl0IGVsc2V3aGVyZSwgc2luY2UgaXQgaXMgbm90IGluIGFs
bCBidWlsZHMKICAgICAgICAgaWYgKCF0eXBlLm1hdGNoKCdDb25zdHJ1Y3RvciQnKSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICBuYW1lc1NldFt0eXBlXSA9IDE7CkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L2RvbS9yZXNvdXJjZXMvcHJvdG90eXBlLWluaGVyaXRhbmNlLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL3Jlc291cmNlcy9wcm90b3R5cGUtaW5oZXJp
dGFuY2UuanMJKHJldmlzaW9uIDQ3NzUzKQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20vcmVzb3Vy
Y2VzL3Byb3RvdHlwZS1pbmhlcml0YW5jZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMTIsNiArMTIs
NyBAQCB2YXIgc2tpcHBlZFByb3BlcnRpZXMgPSBbCiAgICAgIm9iakNDb250cm9sbGVyIiwgInRl
eHRJbnB1dENvbnRyb2xsZXIiLCAibmF2aWdhdGlvbkNvbnRyb2xsZXIiLAogICAgICJldmVudFNl
bmRlciIsICJvYmpDUGx1Z2luIiwgIm9iakNQbHVnaW5GdW5jdGlvbiIsCiAgICAgImFwcGxlU2Ny
aXB0Q29udHJvbGxlciIsICJwbGFpblRleHQiLCAiYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIiLAor
ICAgICJDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QiLCAvLyBJZ25vcmUgdGhpcyBwcm9wZXJ0eSBi
ZWNhdXNlIGl0IGRvZXMgbm90IGV4aXN0IGluIGFsbCBpbXBsZW1lbnRhdGlvbnMuIEl0IHdpbGwg
YmUgdGVzdGVkIHNlcGFyYXRlbHkKIF07CiAKIHZhciBza2lwcGVkUHJvcGVydGllc1NldCA9IHt9
Owo=
</data>
<flag name="review"
          id="19666"
          type_id="1"
          status="-"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>