<?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>114639</bug_id>
          
          <creation_ts>2013-04-15 14:26:29 -0700</creation_ts>
          <short_desc>[CSS Shaders] Extract validation logic out of CustomFilterValidatedProgram into a CustomFilterValidator class</short_desc>
          <delta_ts>2014-03-02 08:52:29 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>71392</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Max Vujovic">mvujovic</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>achicu</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>krit</cc>
    
    <cc>michelangelo</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>876067</commentid>
    <comment_count>0</comment_count>
    <who name="Max Vujovic">mvujovic</who>
    <bug_when>2013-04-15 14:26:29 -0700</bug_when>
    <thetext>Alex&apos;s comment:
&quot;&quot;&quot;
Let&apos;s extract the validation out of CustomFilterValidatedProgram into a separate class like CustomFilterValidator where we could store the mix/webgl shader validators and have all the blending code. CustomFilterValidatedProgram should only contain the &quot;storing&quot; logic, it is just the result of the CustomFilterValidator. I think we could consolidate that with CustomFilterProgram (which is the &apos;raw&apos; program information).
&quot;&quot;&quot;

In addition, I don&apos;t think we need to keep around the validated shader strings after we have a compiled program.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>886048</commentid>
    <comment_count>1</comment_count>
      <attachid>200998</attachid>
    <who name="Max Vujovic">mvujovic</who>
    <bug_when>2013-05-07 17:02:34 -0700</bug_when>
    <thetext>Created attachment 200998
Patch

Some areas in the patch I&apos;d like feedback on:

(1) CustomFilterValidator is a class with only static methods, and it should never be initialized. I&apos;ve made its constructor private. I&apos;m thinking I should additionally disallow the copy constructor and assignment. I could only find the macro &quot;DISALLOW_IMPLICIT_CONSTRUCTORS&quot; defined in wtf/dtoa/utils.h. It doesn&apos;t seem correct to include that file here, since the file is all about double to string conversion. I&apos;m wondering if we have some convention in WebKit for static classes.

(2) I used only file static methods in CustomFilterValidator, since I try to keep things out of headers. Any thoughts on that? I could instead use class static methods or some mix between the two.

(3) Does the static local initialization of ANGLEWebKitBridge in CustomFilterValidator.cpp look ok? I didn&apos;t want to use the DEFINE_STATIC_LOCAL macro because it only supports sending arguments to the ANGLEWebKitBridge constructor. I need to both send arguments to the constructor *and* perform some initialization after running the constructor (see the createShaderValidator function).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>886050</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-05-07 17:05:13 -0700</bug_when>
    <thetext>Attachment 200998 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/GNUmakefile.list.am&apos;, u&apos;Source/WebCore/Target.pri&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/platform/graphics/filters/CustomFilterGlobalContext.cpp&apos;, u&apos;Source/WebCore/platform/graphics/filters/CustomFilterGlobalContext.h&apos;, u&apos;Source/WebCore/platform/graphics/filters/CustomFilterValidatedProgram.cpp&apos;, u&apos;Source/WebCore/platform/graphics/filters/CustomFilterValidatedProgram.h&apos;, u&apos;Source/WebCore/platform/graphics/filters/CustomFilterValidator.cpp&apos;, u&apos;Source/WebCore/platform/graphics/filters/CustomFilterValidator.h&apos;, u&apos;Source/WebCore/rendering/RenderLayer.cpp&apos;]&quot; exit_code: 1
Source/WebCore/platform/graphics/filters/CustomFilterValidator.cpp:284:  css_SetSatHelper is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 1 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>887678</commentid>
    <comment_count>3</comment_count>
      <attachid>200998</attachid>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2013-05-10 17:03:12 -0700</bug_when>
    <thetext>Comment on attachment 200998
Patch

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

Thanks Max! I think this is a step in the right direction.

&gt; Source/WebCore/platform/graphics/filters/CustomFilterValidatedProgram.cpp:45
&gt; +    : m_programInfo(program-&gt;programInfo())

Let&apos;s remove this programInfo and just store the validated program info. See below.

&gt; Source/WebCore/platform/graphics/filters/CustomFilterValidatedProgram.cpp:50
&gt; +    m_isInitialized = CustomFilterValidator::validateShaderStrings(program, m_validatedVertexShader, m_validatedFragmentShader);

I think this might look better. This might also fix the questions about static methods &amp; constructors.
CustomFilterValidator customFilterValidator();
if (customFilterValidator.validate(program)) {
    m_programInfo = CustomFilterProgramInfo(customFilterValidator.vertexShader(), customFilterValidator.fragmentShader(), programInfo.programType(), programInfo.mixSettings(), programInfo.meshType());
    m_initialized = true;
}

We would need a follow up patch to remove ProgramInfo and only store the required settings for the platform layer.

&gt; Source/WebCore/platform/graphics/filters/CustomFilterValidator.cpp:104
&gt; +static String blendFunctionString(BlendMode blendMode)

Let&apos;s add a bug to break this up in smaller functions. I would like to see these two functions (blendFunctionString and compositeFunctionString) extracted to a separate file. They seem independent from the validation part of the other class. The code might be useful in other parts in the future (ie. blending &amp; compositing).

&gt; Source/WebCore/platform/graphics/filters/CustomFilterValidator.cpp:593
&gt; +        // FIXME: Report the validation errors.

Having this as an object might help do this patch in the future.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>200998</attachid>
            <date>2013-05-07 17:02:34 -0700</date>
            <delta_ts>2013-05-10 17:03:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>114639-1.patch</filename>
            <type>text/plain</type>
            <size>65287</size>
            <attacher name="Max Vujovic">mvujovic</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA5NGEzMGMwLi5jYzYzMmNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzkg
QEAKKzIwMTMtMDUtMDcgIE1heCBWdWpvdmljICA8bXZ1am92aWNAYWRvYmUuY29tPgorCisgICAg
ICAgIFtDU1MgU2hhZGVyc10gRXh0cmFjdCB2YWxpZGF0aW9uIGxvZ2ljIG91dCBvZiBDdXN0b21G
aWx0ZXJWYWxpZGF0ZWRQcm9ncmFtIGludG8gYSBDdXN0b21GaWx0ZXJWYWxpZGF0b3IgY2xhc3MK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNDYzOQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBDdXN0
b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtIGNvbnN0cnVjdG9yIG5vdyBjYWxscyBDdXN0b21GaWx0
ZXJWYWxpZGF0b3IgdG8gcGVyZm9ybQorICAgICAgICB2YWxpZGF0aW9uLiBJbiBhIGZ1dHVyZSBw
YXRjaCwgd2UgcGxhbiBvbiByZW1vdmluZyBDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtIGFs
dG9nZXRoZXIuCisKKyAgICAgICAgTW9zdCBvZiB0aGUgZnVuY3Rpb25zIGZyb20gQ3VzdG9tRmls
dGVyVmFsaWRhdGVkUHJvZ3JhbS5jcHAgd2VyZSBtb3ZlZCB0bworICAgICAgICBDdXN0b21GaWx0
ZXJWYWxpZGF0b3IuY3BwLiBTZWUgdGhlIGRldGFpbGVkIGNvbW1lbnRzIGJlbG93LgorCisgICAg
ICAgIE5vIG5ldyB0ZXN0cy4gSnVzdCByZWZhY3RvcmluZy4KKworICAgICAgICAqIEdOVW1ha2Vm
aWxlLmxpc3QuYW06CisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICAgICBBZGQgbmV3IEN1c3RvbUZpbHRl
clZhbGlkYXRvclsuaCwgLmNwcF0gZmlsZXMgdG8gYnVpbGRzLgorCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0LmNwcDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlckdsb2JhbENvbnRleHQu
aDoKKyAgICAgICAgKEN1c3RvbUZpbHRlckdsb2JhbENvbnRleHQpOgorICAgICAgICAgICAgTW92
ZSB0aGUgQU5HTEVXZWJLaXRCcmlkZ2UgdmFsaWRhdG9ycyBvdXQgb2YgQ3VzdG9tRmlsdGVyR2xv
YmFsQ29udGV4dCBhbmQgaW50bworICAgICAgICAgICAgQ3VzdG9tRmlsdGVyVmFsaWRhdG9yLmNw
cCBhcyBzdGF0aWMgbG9jYWxzLiAKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
dXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtOjpDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFt
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclZhbGlk
YXRlZFByb2dyYW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUZpbHRlclZhbGlkYXRlZFBy
b2dyYW06OmNyZWF0ZSk6CisgICAgICAgIChDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtKToK
KyAgICAgICAgICAgIENoYW5nZWQgQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbSdzIGNvbnN0
cnVjdG9yIHNpZ25hdHVyZSB0byB0YWtlIGluIGEKKyAgICAgICAgICAgIEN1c3RvbUZpbHRlclBy
b2dyYW0sIHNpbmNlIHRoYXQncyB3aGF0IEN1c3RvbUZpbHRlclZhbGlkYXRvciBhY2NlcHRzLgor
ICAgICAgICAgICAgQWxzbyByZW1vdmVkIEN1c3RvbUZpbHRlckdsb2JhbENvbnRleHQgZnJvbSB0
aGUgc2lnbmF0dXJlIHNpbmNlCisgICAgICAgICAgICBDdXN0b21GaWx0ZXJWYWxpZGF0b3IuY3Bw
IGhhcyBkaXJlY3RhY2Nlc3MgdG8gdGhlIEFOR0xFV2ViS2l0QnJpZGdlIGluc3RhbmNlcyBub3cu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclZhbGlk
YXRvci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbS5jcHAuCisgICAgICAgIChXZWJDb3Jl
OjpjcmVhdGVTaGFkZXJWYWxpZGF0b3IpOgorICAgICAgICAgICAgQ29waWVkLiBOb3cgcmV0dXJu
cyBhIHJhdyBwb2ludGVyIGluc3RlYWQgb2YgYW4gT3duUHRyIHNpbmNlIHRoZSBBTkdMRVdlYktp
dEJyaWRnZXMgYXJlCisgICAgICAgICAgICBiZWluZyBjcmVhdGVkIGFzIHN0YXRpYyBsb2NhbHMg
d2hvc2UgZGVzdHJ1Y3RvcnMgc2hvdWxkIG5ldmVyIHJ1bi4KKworICAgICAgICAoV2ViQ29yZTo6
d2ViZ2xTaGFkZXJWYWxpZGF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6bWl4U2hhZGVyVmFsaWRh
dG9yKToKKyAgICAgICAgICAgIENvcGllZC4gTm93IHRoZXNlIGVhY2ggY3JlYXRlIGEgc3RhdGlj
IGxvY2FsIEFOR0xFV2ViS2l0QnJpZGdlLgorCisgICAgICAgIChXZWJDb3JlOjpkZWZhdWx0VmVy
dGV4U2hhZGVyU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmRlZmF1bHRGcmFnbWVudFNoYWRl
clN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpibGVuZEZ1bmN0aW9uU3RyaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbXBvc2l0ZUZ1bmN0aW9uU3RyaW5nKToKKyAgICAgICAgICAgIENvcGll
ZC4gTm93IHRoZXNlIGFyZSBmaWxlIHN0YXRpYyBpbnN0ZWFkIG9mIGNsYXNzIHN0YXRpYy4KKwor
ICAgICAgICAoV2ViQ29yZTo6cmV3cml0ZU1peFZlcnRleFNoYWRlcik6CisgICAgICAgIChXZWJD
b3JlOjpyZXdyaXRlTWl4RnJhZ21lbnRTaGFkZXIpOgorICAgICAgICAgICAgQ29waWVkLiBOb3cg
dGhlc2UgYXJlIGZpbGUgc3RhdGljIGluc3RlYWQgb2YgaW5zdGFuY2UgbWV0aG9kcy4gVGhlIGZ1
bmN0aW9uIHNpZ25hdHVyZXMKKyAgICAgICAgICAgIGhhdmUgY2hhbmdlZCB0byB0YWtlIGluIGFy
Z3VtZW50cyBhbmQgcmV0dXJuIHN0cmluZ3MuIFRoZSBmdW5jdGlvbnMgbm8gbG9uZ2VyIHJlYWQg
YW5kCisgICAgICAgICAgICB3cml0ZSBtZW1iZXIgdmFyaWFibGVzLgorCisgICAgICAgIChXZWJD
b3JlOjpidWlsdEluQXR0cmlidXRlTmFtZVRvVHlwZU1hcCk6CisgICAgICAgIChXZWJDb3JlOjpi
dWlsdEluVW5pZm9ybU5hbWVUb1R5cGVNYXApOgorICAgICAgICAoV2ViQ29yZTo6dmFsaWRhdGVT
eW1ib2xzKToKKyAgICAgICAgICAgIENvcGllZCBhbmQgdW5jaGFuZ2VkLgorCisgICAgICAgIChX
ZWJDb3JlOjpDdXN0b21GaWx0ZXJWYWxpZGF0b3I6OnZhbGlkYXRlU2hhZGVyU3RyaW5ncyk6Cisg
ICAgICAgICAgICBDdXN0b21GaWx0ZXJWYWxpZGF0b3I6OnZhbGlkYXRlU2hhZGVyU3RyaW5ncyBp
cyB0aGUgbmV3IG1ldGhvZCBmb3IgdmFsaWRhdGlvbi4gSXQgY29udGFpbnMKKyAgICAgICAgICAg
IHRoZSBmb3JtZXIgQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbSBjb25zdHJ1Y3RvciBjb2Rl
LCB3aGljaCBjYWxsZWQgdGhlIHZhcmlvdXMKKyAgICAgICAgICAgIHZhbGlkYXRpb24gbWV0aG9k
cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyVmFs
aWRhdG9yLmg6IEFkZGVkLgorICAgICAgICAoQ3VzdG9tRmlsdGVyVmFsaWRhdG9yKToKKyAgICAg
ICAgICAgIE5ldyBDdXN0b21GaWx0ZXJWYWxpZGF0b3IgY2xhc3MuCisKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNv
bXB1dGVGaWx0ZXJPcGVyYXRpb25zKToKKyAgICAgICAgICAgIFBhc3MgdGhlIEN1c3RvbUZpbHRl
clZhbGlkYXRlZFByb2dyYW0gY29uc3RydWN0b3IganVzdCBhIEN1c3RvbUZpbHRlclByb2dyYW0g
aW5zdGVhZCBvZgorICAgICAgICAgICAgYSBDdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0IGFuZCBh
IEN1c3RvbUZpbHRlclByb2dyYW1JbmZvLgorCiAyMDEzLTA1LTA3ICBBbmRlcnMgQ2FybHNzb24g
IDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIEFsd2F5c0lubGluZS5oIGZy
b20gV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIv
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCAyZWIxNGZkLi4xMjE0NGRk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTU1NzYsNiArNTU3Niw4IEBAIHdl
YmNvcmVfcGxhdGZvcm1fc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIuaCBcCiAJU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJWYWxpZGF0ZWRQ
cm9ncmFtLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9D
dXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyVmFsaWRhdG9yLmNwcCBcCisJU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJWYWxpZGF0b3IuaCBc
CiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRT
b3VyY2UuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rp
c3RhbnRMaWdodFNvdXJjZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQmxlbmQuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5w
cmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IGY3OTM3ZWQuLmFlOWRkYzMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUv
VGFyZ2V0LnByaQpAQCAtMjE5MCw2ICsyMTkwLDcgQEAgSEVBREVSUyArPSBcCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJSZW5kZXJlci5oIFwKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlci5oIFwKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW0u
aCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJWYWxpZGF0b3Iu
aCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmggXAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oIFwKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuaCBcCkBAIC0zNjQyLDYgKzM2NDMsNyBA
QCBlbmFibGU/KEZJTFRFUlMpIHsKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9D
dXN0b21GaWx0ZXJNZXNoR2VuZXJhdG9yLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUmVuZGVyZXIuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtLmNwcCBcCisgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyVmFsaWRhdG9yLmNwcCBcCiAg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmNwcCBc
CiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAgXAogICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwIFwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBlMjY0
NmQ3Li40MTRmMzNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCkBAIC0zMzY3LDYgKzMzNjcsOCBAQAogCQlBMUUxMTU0ODEzMDE1QzVE
MDA1NEFDOEMgLyogU3BvdExpZ2h0U291cmNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExRTExNTQ3MTMwMTVDNUQwMDU0QUM4QyAvKiBTcG90TGln
aHRTb3VyY2UuY3BwICovOyB9OwogCQlBMjRCRjc3QjE1Q0MzQkFGMDAzMTkxRjIgLyogV2ViS2l0
Q1NTTWl4RnVuY3Rpb25WYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTI0QkY3NzkxNUNDM0JBRjAwMzE5MUYyIC8qIFdlYktpdENTU01peEZ1bmN0
aW9uVmFsdWUuaCAqLzsgfTsKIAkJQTI0QkY3N0MxNUNDM0JBRjAwMzE5MUYyIC8qIFdlYktpdENT
U01peEZ1bmN0aW9uVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTI0QkY3N0ExNUNDM0JBRjAwMzE5MUYyIC8qIFdlYktpdENTU01peEZ1bmN0
aW9uVmFsdWUuY3BwICovOyB9OworCQlBMjY0Q0I0ODE3MzlBMzFCMDBGRTkxOTIgLyogQ3VzdG9t
RmlsdGVyVmFsaWRhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEEyNjRDQjQ2MTczOUEzMUIwMEZFOTE5MiAvKiBDdXN0b21GaWx0ZXJWYWxpZGF0
b3IuY3BwICovOyB9OworCQlBMjY0Q0I0OTE3MzlBMzFCMDBGRTkxOTIgLyogQ3VzdG9tRmlsdGVy
VmFsaWRhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBMjY0Q0I0NzE3MzlBMzFCMDBGRTkxOTIgLyogQ3VzdG9tRmlsdGVyVmFsaWRhdG9yLmggKi87
IH07CiAJCUEyOTUzMkNGMTVERDVFMTcwMDQ2OUVCQyAvKiBDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQ
cm9ncmFtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEEyOTUzMkNEMTVERDVFMTcwMDQ2OUVCQyAvKiBDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFt
LmNwcCAqLzsgfTsKIAkJQTI5NTMyRDAxNURENUUxNzAwNDY5RUJDIC8qIEN1c3RvbUZpbHRlclZh
bGlkYXRlZFByb2dyYW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEEyOTUzMkNFMTVERDVFMTcwMDQ2OUVCQyAvKiBDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQ
cm9ncmFtLmggKi87IH07CiAJCUEyQjJBRTdDMTYzNzVFRTUwMENGQTUwQiAvKiBDdXN0b21GaWx0
ZXJDb25zdGFudHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEEyQjJBRTdCMTYzNzVFRTUwMENGQTUwQiAvKiBDdXN0b21GaWx0ZXJDb25zdGFudHMuaCAq
LzsgfTsKQEAgLTk4NDcsNiArOTg0OSw4IEBACiAJCUExRTExNTQ3MTMwMTVDNUQwMDU0QUM4QyAv
KiBTcG90TGlnaHRTb3VyY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gU3BvdExpZ2h0U291cmNlLmNwcDsgcGF0aCA9IGZpbHRlcnMvU3BvdExpZ2h0U291cmNlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTI0QkY3NzkxNUNDM0JBRjAwMzE5MUYy
IC8qIFdlYktpdENTU01peEZ1bmN0aW9uVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2ViS2l0Q1NTTWl4RnVuY3Rpb25WYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBMjRCRjc3QTE1Q0MzQkFGMDAzMTkxRjIgLyogV2ViS2l0Q1NTTWl4RnVuY3Rp
b25WYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJLaXRD
U1NNaXhGdW5jdGlvblZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTI2
NENCNDYxNzM5QTMxQjAwRkU5MTkyIC8qIEN1c3RvbUZpbHRlclZhbGlkYXRvci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDdXN0b21GaWx0ZXJWYWxpZGF0b3IuY3Bw
OyBwYXRoID0gZmlsdGVycy9DdXN0b21GaWx0ZXJWYWxpZGF0b3IuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlBMjY0Q0I0NzE3MzlBMzFCMDBGRTkxOTIgLyogQ3VzdG9tRmlsdGVy
VmFsaWRhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEN1c3RvbUZpbHRl
clZhbGlkYXRvci5oOyBwYXRoID0gZmlsdGVycy9DdXN0b21GaWx0ZXJWYWxpZGF0b3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTI5NTMyQ0QxNURENUUxNzAwNDY5RUJDIC8qIEN1
c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbS5jcHA7IHBhdGggPSBmaWx0
ZXJzL0N1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBMjk1MzJDRTE1REQ1RTE3MDA0NjlFQkMgLyogQ3VzdG9tRmlsdGVyVmFsaWRh
dGVkUHJvZ3JhbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBDdXN0b21GaWx0
ZXJWYWxpZGF0ZWRQcm9ncmFtLmg7IHBhdGggPSBmaWx0ZXJzL0N1c3RvbUZpbHRlclZhbGlkYXRl
ZFByb2dyYW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTJCMkFFN0IxNjM3NUVF
NTAwQ0ZBNTBCIC8qIEN1c3RvbUZpbHRlckNvbnN0YW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBDdXN0b21GaWx0ZXJDb25zdGFudHMuaDsgcGF0aCA9IGZpbHRlcnMvQ3Vz
dG9tRmlsdGVyQ29uc3RhbnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjYy
Myw2ICsxNjYyNyw4IEBACiAJCQkJNTA5RUMxMDgxNUU4NDhDQTAwRTgyNTgxIC8qIEN1c3RvbUZp
bHRlclRyYW5zZm9ybVBhcmFtZXRlci5oICovLAogCQkJCUEyOTUzMkNEMTVERDVFMTcwMDQ2OUVC
QyAvKiBDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtLmNwcCAqLywKIAkJCQlBMjk1MzJDRTE1
REQ1RTE3MDA0NjlFQkMgLyogQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbS5oICovLAorCQkJ
CUEyNjRDQjQ2MTczOUEzMUIwMEZFOTE5MiAvKiBDdXN0b21GaWx0ZXJWYWxpZGF0b3IuY3BwICov
LAorCQkJCUEyNjRDQjQ3MTczOUEzMUIwMEZFOTE5MiAvKiBDdXN0b21GaWx0ZXJWYWxpZGF0b3Iu
aCAqLywKIAkJCQlBMUUxMTU0MzEzMDE1QzNEMDA1NEFDOEMgLyogRGlzdGFudExpZ2h0U291cmNl
LmNwcCAqLywKIAkJCQk4NDczMEQ1QTEyNDhGMEIzMDBEM0E5QzkgLyogRGlzdGFudExpZ2h0U291
cmNlLmggKi8sCiAJCQkJQTc1RThCODAwRTFERTJENjAwN0YyNDgxIC8qIEZFQmxlbmQuY3BwICov
LApAQCAtMjEzMDUsNiArMjEzMTEsNyBAQAogCQkJCTUwRDg4Q0I2MTVCREZEQUEwMDE4MDlGNCAv
KiBDdXN0b21GaWx0ZXJQcm9ncmFtSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTAzRDBDQUIx
NEI1QjA4NzAwRjMyRjU4IC8qIEN1c3RvbUZpbHRlclJlbmRlcmVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBMjk1MzJEMDE1REQ1RTE3MDA0NjlFQkMgLyogQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJv
Z3JhbS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTI2NENCNDkxNzM5QTMxQjAwRkU5MTkyIC8qIEN1
c3RvbUZpbHRlclZhbGlkYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThDQjQxM0UwRTg2MzNG
RDAwMzJDNEYwIC8qIERhc2hBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgwRTZEMEIwQTE5
ODlDQTAwN0ZCOEM1IC8qIERhc2hib2FyZFJlZ2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdC
QzZBMjExNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlLmggaW4gSGVhZGVycyAqLywKQEAgLTI0
NzA5LDYgKzI0NzE2LDcgQEAKIAkJCQk1MEQ4OENCNTE1QkRGREFBMDAxODA5RjQgLyogQ3VzdG9t
RmlsdGVyUHJvZ3JhbUluZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTAzRDBDQUExNEI1QjA4
NzAwRjMyRjU4IC8qIEN1c3RvbUZpbHRlclJlbmRlcmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUEyOTUzMkNGMTVERDVFMTcwMDQ2OUVCQyAvKiBDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFt
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUEyNjRDQjQ4MTczOUEzMUIwMEZFOTE5MiAvKiBDdXN0
b21GaWx0ZXJWYWxpZGF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTdCQzZBMjAxNTA1RjA4
MTAwMUI3NEFDIC8qIERhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3QkM2QTIzMTUw
NUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZUF1dGhvcml6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJRkUxNkNGRDMxNjlEMURFRDAwRDNBMEM3IC8qIERhdGFiYXNlQmFja2VuZC5jcHAgaW4gU291
cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlckdsb2JhbENvbnRleHQuY3BwCmluZGV4
IDRmNWRkMmUuLjBjNGRlOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJHbG9iYWxDb250
ZXh0LmNwcApAQCAtNDQsMjkgKzQ0LDYgQEAgQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dDo6fkN1
c3RvbUZpbHRlckdsb2JhbENvbnRleHQoKQogewogfQogCi1BTkdMRVdlYktpdEJyaWRnZSogQ3Vz
dG9tRmlsdGVyR2xvYmFsQ29udGV4dDo6d2ViZ2xTaGFkZXJWYWxpZGF0b3IoKQotewotICAgIGlm
ICghbV93ZWJnbFNoYWRlclZhbGlkYXRvcikKLSAgICAgICAgbV93ZWJnbFNoYWRlclZhbGlkYXRv
ciA9IGNyZWF0ZVNoYWRlclZhbGlkYXRvcihTSF9XRUJHTF9TUEVDKTsKLSAgICByZXR1cm4gbV93
ZWJnbFNoYWRlclZhbGlkYXRvci5nZXQoKTsKLX0KLQotQU5HTEVXZWJLaXRCcmlkZ2UqIEN1c3Rv
bUZpbHRlckdsb2JhbENvbnRleHQ6Om1peFNoYWRlclZhbGlkYXRvcigpCi17Ci0gICAgaWYgKCFt
X21peFNoYWRlclZhbGlkYXRvcikKLSAgICAgICAgbV9taXhTaGFkZXJWYWxpZGF0b3IgPSBjcmVh
dGVTaGFkZXJWYWxpZGF0b3IoU0hfQ1NTX1NIQURFUlNfU1BFQyk7Ci0gICAgcmV0dXJuIG1fbWl4
U2hhZGVyVmFsaWRhdG9yLmdldCgpOwotfQotCi1QYXNzT3duUHRyPEFOR0xFV2ViS2l0QnJpZGdl
PiBDdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0OjpjcmVhdGVTaGFkZXJWYWxpZGF0b3IoU2hTaGFk
ZXJTcGVjIHNoYWRlclNwZWMpCi17Ci0gICAgT3duUHRyPEFOR0xFV2ViS2l0QnJpZGdlPiB2YWxp
ZGF0b3IgPSBhZG9wdFB0cihuZXcgQU5HTEVXZWJLaXRCcmlkZ2UoU0hfRVNTTF9PVVRQVVQsIHNo
YWRlclNwZWMpKTsKLSAgICBTaEJ1aWx0SW5SZXNvdXJjZXMgcmVzb3VyY2VzOwotICAgIFNoSW5p
dEJ1aWx0SW5SZXNvdXJjZXMoJnJlc291cmNlcyk7Ci0gICAgdmFsaWRhdG9yLT5zZXRSZXNvdXJj
ZXMocmVzb3VyY2VzKTsKLSAgICByZXR1cm4gdmFsaWRhdG9yLnJlbGVhc2UoKTsKLX0KLQogdm9p
ZCBDdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0OjpwcmVwYXJlQ29udGV4dElmTmVlZGVkKEhvc3RX
aW5kb3cqIGhvc3RXaW5kb3cpCiB7CiAgICAgaWYgKG1fY29udGV4dC5nZXQoKSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVy
R2xvYmFsQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9DdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0LmgKaW5kZXggODY2ZjYzOC4uZTYzMzhkYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21G
aWx0ZXJHbG9iYWxDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9DdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0LmgKQEAgLTMxLDcgKzMxLDYgQEAK
ICNkZWZpbmUgQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dF9oCiAKICNpZiBFTkFCTEUoQ1NTX1NI
QURFUlMpICYmIFVTRSgzRF9HUkFQSElDUykKLSNpbmNsdWRlICJBTkdMRVdlYktpdEJyaWRnZS5o
IgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCkBA
IC00NiwyOCArNDUsMTAgQEAgcHVibGljOgogICAgIH5DdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0
KCk7CiAgICAgCiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQoKSBjb25zdCB7IHJldHVy
biBtX2NvbnRleHQuZ2V0KCk7IH0KLQotICAgIC8vIENTUyBzaGFkZXJzIG5vdCByZWZlcmVuY2Vk
IGZyb20gdGhlIENTUyBtaXggZnVuY3Rpb24gc2hvdWxkIGJlIHZhbGlkYXRlZCBqdXN0IGxpa2Ug
cmVndWxhciBXZWJHTCBzaGFkZXJzLgotICAgIC8vIFRoaXMgQU5HTEUgdmFsaWRhdG9yIHVzZXMg
dGhlIFNIX1dFQkdMX1NQRUMgZmxhZy4KLSAgICBBTkdMRVdlYktpdEJyaWRnZSogd2ViZ2xTaGFk
ZXJWYWxpZGF0b3IoKTsKLQotICAgIC8vIENTUyBzaGFkZXJzIHJlZmVyZW5jZWQgZnJvbSB0aGUg
Q1NTIG1peCBmdW5jdGlvbiBzaG91bGQgYmUgdmFsaWRhdGVkIHNsaWdodGx5IGRpZmZlcmVudGx5
IHRoYW4gV2ViR0wgc2hhZGVycy4KLSAgICAvLyBUaGlzIEFOR0xFIHZhbGlkYXRvciB1c2VzIHRo
ZSBTSF9DU1NfU0hBREVSU19TUEVDIGZsYWcuCi0gICAgLy8gVW5kZXIgdGhpcyBmbGFnLCBtb3N0
IG5vdGFibHk6Ci0gICAgLy8gLSBUaGUgImdsX0ZyYWdDb2xvciIgYnVpbHQtaW4gaXMgbm90IGF2
YWlsYWJsZS4KLSAgICAvLyAtIEluc3RlYWQsIHRoZSAiY3NzX01peENvbG9yIiBhbmQgImNzc19D
b2xvck1hdHJpeCIgYnVpbHQtaW5zIGFyZSBhdmFpbGFibGUuCi0gICAgLy8gLSBUaGUgImNzc18i
IHByZWZpeCBpcyByZXNlcnZlZC4KLSAgICAvLyAtIEluIHRoZSB0cmFuc2xhdGVkIHNvdXJjZSB0
aGF0IEFOR0xFIHJldHVybnMsIEFOR0xFIHJlbmFtZXMgdGhlIGF1dGhvcidzICJtYWluIiBmdW5j
dGlvbiB0byAiY3NzX21haW4iLgotICAgIC8vIFRoZSBjb21wbGV0ZSBkZXRhaWxzIGFyZSBkb2N1
bWVudGVkIGluIEFOR0xFL1NoYWRlckxhbmcuaC4KLSAgICBBTkdMRVdlYktpdEJyaWRnZSogbWl4
U2hhZGVyVmFsaWRhdG9yKCk7CiAgICAgCiAgICAgdm9pZCBwcmVwYXJlQ29udGV4dElmTmVlZGVk
KEhvc3RXaW5kb3cqKTsKIHByaXZhdGU6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8QU5HTEVXZWJL
aXRCcmlkZ2U+IGNyZWF0ZVNoYWRlclZhbGlkYXRvcihTaFNoYWRlclNwZWMpOwotCiAgICAgUmVm
UHRyPEdyYXBoaWNzQ29udGV4dDNEPiBtX2NvbnRleHQ7Ci0gICAgT3duUHRyPEFOR0xFV2ViS2l0
QnJpZGdlPiBtX3dlYmdsU2hhZGVyVmFsaWRhdG9yOwotICAgIE93blB0cjxBTkdMRVdlYktpdEJy
aWRnZT4gbV9taXhTaGFkZXJWYWxpZGF0b3I7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1
c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtLmNwcAppbmRleCA3
NzBhNWU1Li41NGQ3ZDAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW0uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyVmFsaWRhdGVk
UHJvZ3JhbS5jcHAKQEAgLTMzLDE3MSArMzMsMjEgQEAKIAogI2luY2x1ZGUgIkN1c3RvbUZpbHRl
clZhbGlkYXRlZFByb2dyYW0uaCIKIAotI2luY2x1ZGUgIkFOR0xFV2ViS2l0QnJpZGdlLmgiCiAj
aW5jbHVkZSAiQ3VzdG9tRmlsdGVyQ29tcGlsZWRQcm9ncmFtLmgiCiAjaW5jbHVkZSAiQ3VzdG9t
RmlsdGVyQ29uc3RhbnRzLmgiCi0jaW5jbHVkZSAiQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dC5o
IgorI2luY2x1ZGUgIkN1c3RvbUZpbHRlclByb2dyYW0uaCIKICNpbmNsdWRlICJDdXN0b21GaWx0
ZXJQcm9ncmFtSW5mby5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nQnVpbGRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKyNp
bmNsdWRlICJDdXN0b21GaWx0ZXJWYWxpZGF0b3IuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci0jZGVmaW5lIFNIQURFUihTcmMpICgjU3JjKSAKLQotdHlwZWRlZiBIYXNoTWFwPFN0cmluZywg
U2hEYXRhVHlwZT4gU3ltYm9sTmFtZVRvVHlwZU1hcDsKLQotc3RhdGljIFN5bWJvbE5hbWVUb1R5
cGVNYXAqIGJ1aWx0SW5BdHRyaWJ1dGVOYW1lVG9UeXBlTWFwKCkKLXsKLSAgICBzdGF0aWMgU3lt
Ym9sTmFtZVRvVHlwZU1hcCogbmFtZVRvVHlwZU1hcCA9IDA7Ci0gICAgaWYgKCFuYW1lVG9UeXBl
TWFwKSB7Ci0gICAgICAgIG5hbWVUb1R5cGVNYXAgPSBuZXcgU3ltYm9sTmFtZVRvVHlwZU1hcDsg
ICAgICAgIAotICAgICAgICBuYW1lVG9UeXBlTWFwLT5zZXQoImFfbWVzaENvb3JkIiwgU0hfRkxP
QVRfVkVDMik7Ci0gICAgICAgIG5hbWVUb1R5cGVNYXAtPnNldCgiYV9wb3NpdGlvbiIsIFNIX0ZM
T0FUX1ZFQzQpOwotICAgICAgICBuYW1lVG9UeXBlTWFwLT5zZXQoImFfdGV4Q29vcmQiLCBTSF9G
TE9BVF9WRUMyKTsKLSAgICAgICAgbmFtZVRvVHlwZU1hcC0+c2V0KCJhX3RyaWFuZ2xlQ29vcmQi
LCBTSF9GTE9BVF9WRUMzKTsKLSAgICB9Ci0gICAgcmV0dXJuIG5hbWVUb1R5cGVNYXA7Ci19Ci0K
LXN0YXRpYyBTeW1ib2xOYW1lVG9UeXBlTWFwKiBidWlsdEluVW5pZm9ybU5hbWVUb1R5cGVNYXAo
KQotewotICAgIHN0YXRpYyBTeW1ib2xOYW1lVG9UeXBlTWFwKiBuYW1lVG9UeXBlTWFwID0gMDsK
LSAgICBpZiAoIW5hbWVUb1R5cGVNYXApIHsKLSAgICAgICAgbmFtZVRvVHlwZU1hcCA9IG5ldyBT
eW1ib2xOYW1lVG9UeXBlTWFwOwotICAgICAgICBuYW1lVG9UeXBlTWFwLT5zZXQoInVfbWVzaEJv
eCIsIFNIX0ZMT0FUX1ZFQzQpOwotICAgICAgICBuYW1lVG9UeXBlTWFwLT5zZXQoInVfbWVzaFNp
emUiLCBTSF9GTE9BVF9WRUMyKTsKLSAgICAgICAgbmFtZVRvVHlwZU1hcC0+c2V0KCJ1X3Byb2pl
Y3Rpb25NYXRyaXgiLCBTSF9GTE9BVF9NQVQ0KTsKLSAgICAgICAgbmFtZVRvVHlwZU1hcC0+c2V0
KCJ1X3RleHR1cmVTaXplIiwgU0hfRkxPQVRfVkVDMik7Ci0gICAgICAgIG5hbWVUb1R5cGVNYXAt
PnNldCgidV90aWxlU2l6ZSIsIFNIX0ZMT0FUX1ZFQzIpOwotICAgIH0KLSAgICByZXR1cm4gbmFt
ZVRvVHlwZU1hcDsKLX0KLQotc3RhdGljIGJvb2wgdmFsaWRhdGVTeW1ib2xzKGNvbnN0IFZlY3Rv
cjxBTkdMRVNoYWRlclN5bWJvbD4mIHN5bWJvbHMsIEN1c3RvbUZpbHRlck1lc2hUeXBlIG1lc2hU
eXBlKQotewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3ltYm9scy5zaXplKCk7ICsraSkg
ewotICAgICAgICBjb25zdCBBTkdMRVNoYWRlclN5bWJvbCYgc3ltYm9sID0gc3ltYm9sc1tpXTsK
LSAgICAgICAgc3dpdGNoIChzeW1ib2wuc3ltYm9sVHlwZSkgewotICAgICAgICBjYXNlIFNIQURF
Ul9TWU1CT0xfVFlQRV9BVFRSSUJVVEU6IHsKLSAgICAgICAgICAgIFN5bWJvbE5hbWVUb1R5cGVN
YXAqIGF0dHJpYnV0ZU5hbWVUb1R5cGVNYXAgPSBidWlsdEluQXR0cmlidXRlTmFtZVRvVHlwZU1h
cCgpOwotICAgICAgICAgICAgU3ltYm9sTmFtZVRvVHlwZU1hcDo6aXRlcmF0b3IgYnVpbHRJbkF0
dHJpYnV0ZSA9IGF0dHJpYnV0ZU5hbWVUb1R5cGVNYXAtPmZpbmQoc3ltYm9sLm5hbWUpOwotICAg
ICAgICAgICAgaWYgKGJ1aWx0SW5BdHRyaWJ1dGUgPT0gYXR0cmlidXRlTmFtZVRvVHlwZU1hcC0+
ZW5kKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGUgYXV0aG9yIGRlZmluZWQgYSBjdXN0b20g
YXR0cmlidXRlLgotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBSZXBvcnQgdGhlIHZhbGlkYXRp
b24gZXJyb3IuCi0gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTc0NDE2Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgaWYgKG1lc2hUeXBlID09IE1lc2hUeXBlQXR0YWNoZWQgJiYg
c3ltYm9sLm5hbWUgPT0gImFfdHJpYW5nbGVDb29yZCIpIHsKLSAgICAgICAgICAgICAgICAvLyBh
X3RyaWFuZ2xlQ29vcmQgaXMgb25seSBhdmFpbGFibGUgZm9yIGRldGFjaGVkIG1lc2hlcy4KLSAg
ICAgICAgICAgICAgICAvLyBGSVhNRTogUmVwb3J0IHRoZSB2YWxpZGF0aW9uIGVycm9yLgotICAg
ICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
NDQxNgotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGlmIChzeW1ib2wuZGF0YVR5cGUgIT0gYnVpbHRJbkF0dHJpYnV0ZS0+dmFsdWUpIHsK
LSAgICAgICAgICAgICAgICAvLyBUaGUgYXV0aG9yIGRlZmluZWQgb25lIG9mIHRoZSBidWlsdC1p
biBhdHRyaWJ1dGVzIHdpdGggdGhlIHdyb25nIHR5cGUuCi0gICAgICAgICAgICAgICAgLy8gRklY
TUU6IFJlcG9ydCB0aGUgdmFsaWRhdGlvbiBlcnJvci4KLSAgICAgICAgICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ0MTYKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIFNIQURFUl9TWU1CT0xfVFlQRV9VTklGT1JNOiB7Ci0gICAgICAg
ICAgICBpZiAoc3ltYm9sLmlzU2FtcGxlcigpKSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6
IEZvciBub3csIHdlIHJlc3RyaWN0IHNoYWRlcnMgd2l0aCBhbnkgc2FtcGxlciBkZWZpbmVkLgot
ICAgICAgICAgICAgICAgIC8vIFdoZW4gd2UgaW1wbGVtZW50IHRleHR1cmUgcGFyYW1ldGVycywg
d2Ugd2lsbCBhbGxvdyBzaGFkZXJzIHdob3NlIHNhbXBsZXJzIGFyZSBib3VuZCB0byB2YWxpZCB0
ZXh0dXJlcy4KLSAgICAgICAgICAgICAgICAvLyBXZSBtdXN0IG5vdCBhbGxvdyBPcGVuR0wgdG8g
Z2l2ZSB1bmJvdW5kIHNhbXBsZXJzIGEgZGVmYXVsdCB2YWx1ZSBvZiAwIGJlY2F1c2UgdGhhdCBy
ZWZlcmVuY2VzIHRoZSBlbGVtZW50IHRleHR1cmUsCi0gICAgICAgICAgICAgICAgLy8gd2hpY2gg
c2hvdWxkIGJlIGluYWNjZXNzaWJsZSB0byB0aGUgYXV0aG9yJ3Mgc2hhZGVyIGNvZGUuCi0gICAg
ICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk2
MjMwCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBTeW1ib2xOYW1lVG9UeXBlTWFwKiB1bmlmb3JtTmFtZVRvVHlwZU1hcCA9IGJ1aWx0
SW5Vbmlmb3JtTmFtZVRvVHlwZU1hcCgpOwotICAgICAgICAgICAgU3ltYm9sTmFtZVRvVHlwZU1h
cDo6aXRlcmF0b3IgYnVpbHRJblVuaWZvcm0gPSB1bmlmb3JtTmFtZVRvVHlwZU1hcC0+ZmluZChz
eW1ib2wubmFtZSk7Ci0gICAgICAgICAgICBpZiAoYnVpbHRJblVuaWZvcm0gIT0gdW5pZm9ybU5h
bWVUb1R5cGVNYXAtPmVuZCgpICYmIChzeW1ib2wuaXNBcnJheSB8fCBzeW1ib2wuZGF0YVR5cGUg
IT0gYnVpbHRJblVuaWZvcm0tPnZhbHVlKSkgewotICAgICAgICAgICAgICAgIC8vIFRoZSBhdXRo
b3IgZGVmaW5lZCBvbmUgb2YgdGhlIGJ1aWx0LWluIHVuaWZvcm1zIHdpdGggdGhlIHdyb25nIHR5
cGUuCi0gICAgICAgICAgICAgICAgLy8gRklYTUU6IFJlcG9ydCB0aGUgdmFsaWRhdGlvbiBlcnJv
ci4KLSAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzQ0MTYKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1TdHJpbmcgQ3VzdG9tRmlsdGVyVmFs
aWRhdGVkUHJvZ3JhbTo6ZGVmYXVsdFZlcnRleFNoYWRlclN0cmluZygpCi17Ci0gICAgREVGSU5F
X1NUQVRJQ19MT0NBTChTdHJpbmcsIHZlcnRleFNoYWRlclN0cmluZywgKEFTQ0lJTGl0ZXJhbChT
SEFERVIoCi0gICAgICAgIGF0dHJpYnV0ZSBtZWRpdW1wIHZlYzQgYV9wb3NpdGlvbjsKLSAgICAg
ICAgdW5pZm9ybSBtZWRpdW1wIG1hdDQgdV9wcm9qZWN0aW9uTWF0cml4OwotCi0gICAgICAgIHZv
aWQgbWFpbigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsX1Bvc2l0aW9uID0gdV9wcm9qZWN0
aW9uTWF0cml4ICogYV9wb3NpdGlvbjsKLSAgICAgICAgfQotICAgICkpKSk7Ci0gICAgcmV0dXJu
IHZlcnRleFNoYWRlclN0cmluZzsKLX0KLQotU3RyaW5nIEN1c3RvbUZpbHRlclZhbGlkYXRlZFBy
b2dyYW06OmRlZmF1bHRGcmFnbWVudFNoYWRlclN0cmluZygpCi17Ci0gICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChTdHJpbmcsIGZyYWdtZW50U2hhZGVyU3RyaW5nLCAoQVNDSUlMaXRlcmFsKFNIQURF
UigKLSAgICAgICAgdm9pZCBtYWluKCkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgKSkpKTsK
LSAgICByZXR1cm4gZnJhZ21lbnRTaGFkZXJTdHJpbmc7Ci19Ci0KLUN1c3RvbUZpbHRlclZhbGlk
YXRlZFByb2dyYW06OkN1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW0oQ3VzdG9tRmlsdGVyR2xv
YmFsQ29udGV4dCogZ2xvYmFsQ29udGV4dCwgY29uc3QgQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8m
IHByb2dyYW1JbmZvKQotICAgIDogbV9wcm9ncmFtSW5mbyhwcm9ncmFtSW5mbykKK0N1c3RvbUZp
bHRlclZhbGlkYXRlZFByb2dyYW06OkN1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW0oY29uc3Qg
Q3VzdG9tRmlsdGVyUHJvZ3JhbSogcHJvZ3JhbSkKKyAgICA6IG1fcHJvZ3JhbUluZm8ocHJvZ3Jh
bS0+cHJvZ3JhbUluZm8oKSkKICAgICAsIG1faXNJbml0aWFsaXplZChmYWxzZSkKIHsKICAgICBw
bGF0Zm9ybUluaXQoKTsKIAotICAgIFN0cmluZyBvcmlnaW5hbFZlcnRleFNoYWRlciA9IHByb2dy
YW1JbmZvLnZlcnRleFNoYWRlclN0cmluZygpOwotICAgIGlmIChvcmlnaW5hbFZlcnRleFNoYWRl
ci5pc051bGwoKSkKLSAgICAgICAgb3JpZ2luYWxWZXJ0ZXhTaGFkZXIgPSBkZWZhdWx0VmVydGV4
U2hhZGVyU3RyaW5nKCk7Ci0KLSAgICBTdHJpbmcgb3JpZ2luYWxGcmFnbWVudFNoYWRlciA9IHBy
b2dyYW1JbmZvLmZyYWdtZW50U2hhZGVyU3RyaW5nKCk7Ci0gICAgaWYgKG9yaWdpbmFsRnJhZ21l
bnRTaGFkZXIuaXNOdWxsKCkpCi0gICAgICAgIG9yaWdpbmFsRnJhZ21lbnRTaGFkZXIgPSBkZWZh
dWx0RnJhZ21lbnRTaGFkZXJTdHJpbmcoKTsKLQotICAgIC8vIFNoYWRlcnMgcmVmZXJlbmNlZCBm
cm9tIHRoZSBDU1MgbWl4IGZ1bmN0aW9uIHVzZSBhIGRpZmZlcmVudCB2YWxpZGF0b3IgdGhhbiBy
ZWd1bGFyIFdlYkdMIHNoYWRlcnMuIFNlZSBDdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0LmggZm9y
IG1vcmUgZGV0YWlscy4KLSAgICBib29sIGJsZW5kc0VsZW1lbnRUZXh0dXJlID0gKHByb2dyYW1J
bmZvLnByb2dyYW1UeXBlKCkgPT0gUFJPR1JBTV9UWVBFX0JMRU5EU19FTEVNRU5UX1RFWFRVUkUp
OwotICAgIEFOR0xFV2ViS2l0QnJpZGdlKiB2YWxpZGF0b3IgPSBibGVuZHNFbGVtZW50VGV4dHVy
ZSA/IGdsb2JhbENvbnRleHQtPm1peFNoYWRlclZhbGlkYXRvcigpIDogZ2xvYmFsQ29udGV4dC0+
d2ViZ2xTaGFkZXJWYWxpZGF0b3IoKTsKLSAgICBTdHJpbmcgdmVydGV4U2hhZGVyTG9nLCBmcmFn
bWVudFNoYWRlckxvZzsKLSAgICBWZWN0b3I8QU5HTEVTaGFkZXJTeW1ib2w+IHN5bWJvbHM7Ci0g
ICAgYm9vbCB2ZXJ0ZXhTaGFkZXJWYWxpZCA9IHZhbGlkYXRvci0+Y29tcGlsZVNoYWRlclNvdXJj
ZShvcmlnaW5hbFZlcnRleFNoYWRlci51dGY4KCkuZGF0YSgpLCBTSEFERVJfVFlQRV9WRVJURVgs
IG1fdmFsaWRhdGVkVmVydGV4U2hhZGVyLCB2ZXJ0ZXhTaGFkZXJMb2csIHN5bWJvbHMpOwotICAg
IGJvb2wgZnJhZ21lbnRTaGFkZXJWYWxpZCA9IHZhbGlkYXRvci0+Y29tcGlsZVNoYWRlclNvdXJj
ZShvcmlnaW5hbEZyYWdtZW50U2hhZGVyLnV0ZjgoKS5kYXRhKCksIFNIQURFUl9UWVBFX0ZSQUdN
RU5ULCBtX3ZhbGlkYXRlZEZyYWdtZW50U2hhZGVyLCBmcmFnbWVudFNoYWRlckxvZywgc3ltYm9s
cyk7Ci0gICAgaWYgKCF2ZXJ0ZXhTaGFkZXJWYWxpZCB8fCAhZnJhZ21lbnRTaGFkZXJWYWxpZCkg
ewotICAgICAgICAvLyBGSVhNRTogUmVwb3J0IHRoZSB2YWxpZGF0aW9uIGVycm9ycy4KLSAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0NDE2Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIXZhbGlkYXRlU3ltYm9scyhzeW1ib2xzLCBt
X3Byb2dyYW1JbmZvLm1lc2hUeXBlKCkpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBSZXBvcnQgdmFs
aWRhdGlvbiBlcnJvcnMuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03NDQxNgotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gV2UgbmVl
ZCB0byBhZGQgdGV4dHVyZSBhY2Nlc3MsIGJsZW5kaW5nLCBhbmQgY29tcG9zaXRpbmcgY29kZSB0
byBzaGFkZXJzIHRoYXQgYXJlIHJlZmVyZW5jZWQgZnJvbSB0aGUgQ1NTIG1peCBmdW5jdGlvbi4K
LSAgICBpZiAoYmxlbmRzRWxlbWVudFRleHR1cmUpIHsKLSAgICAgICAgcmV3cml0ZU1peFZlcnRl
eFNoYWRlcihzeW1ib2xzKTsKLSAgICAgICAgcmV3cml0ZU1peEZyYWdtZW50U2hhZGVyKCk7Ci0g
ICAgfQotCi0gICAgbV9pc0luaXRpYWxpemVkID0gdHJ1ZTsKKyAgICBtX2lzSW5pdGlhbGl6ZWQg
PSBDdXN0b21GaWx0ZXJWYWxpZGF0b3I6OnZhbGlkYXRlU2hhZGVyU3RyaW5ncyhwcm9ncmFtLCBt
X3ZhbGlkYXRlZFZlcnRleFNoYWRlciwgbV92YWxpZGF0ZWRGcmFnbWVudFNoYWRlcik7CiB9CiAK
IFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyQ29tcGlsZWRQcm9ncmFtPiBDdXN0b21GaWx0ZXJWYWxp
ZGF0ZWRQcm9ncmFtOjpjb21waWxlZFByb2dyYW0oKQpAQCAtMjEwLDM4OSArNjAsNiBAQCB2b2lk
IEN1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW06OnNldENvbXBpbGVkUHJvZ3JhbShQYXNzUmVm
UHRyPEN1c3RvbUZpbHRlckNvbQogICAgIG1fY29tcGlsZWRQcm9ncmFtID0gY29tcGlsZWRQcm9n
cmFtOwogfQogCi1ib29sIEN1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW06Om5lZWRzSW5wdXRU
ZXh0dXJlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcm9ncmFtSW5mby5wcm9ncmFtVHlwZSgp
ID09IFBST0dSQU1fVFlQRV9CTEVORFNfRUxFTUVOVF9URVhUVVJFCi0gICAgICAgICYmIG1fcHJv
Z3JhbUluZm8ubWl4U2V0dGluZ3MoKS5jb21wb3NpdGVPcGVyYXRvciAhPSBDb21wb3NpdGVDbGVh
cgotICAgICAgICAmJiBtX3Byb2dyYW1JbmZvLm1peFNldHRpbmdzKCkuY29tcG9zaXRlT3BlcmF0
b3IgIT0gQ29tcG9zaXRlQ29weTsKLX0KLQotdm9pZCBDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9n
cmFtOjpyZXdyaXRlTWl4VmVydGV4U2hhZGVyKGNvbnN0IFZlY3RvcjxBTkdMRVNoYWRlclN5bWJv
bD4mIHN5bWJvbHMpCi17Ci0gICAgQVNTRVJUKG1fcHJvZ3JhbUluZm8ucHJvZ3JhbVR5cGUoKSA9
PSBQUk9HUkFNX1RZUEVfQkxFTkRTX0VMRU1FTlRfVEVYVFVSRSk7Ci0KLSAgICAvLyBJZiB0aGUg
YXV0aG9yIGRlZmluZWQgYV90ZXhDb29yZCwgd2UgY2FuIHVzZSBpdCB0byBzaHV0dGxlIHRoZSB0
ZXh0dXJlIGNvb3JkaW5hdGUgdG8gdGhlIGZyYWdtZW50IHNoYWRlci4KLSAgICAvLyBOb3RlIHRo
YXQgdmVydGV4IGF0dHJpYnV0ZXMgYXJlIHJlYWQtb25seSBpbiBHTFNMLCBzbyB0aGUgYXV0aG9y
IGNvdWxkIG5vdCBoYXZlIGNoYW5nZWQgYV90ZXhDb29yZCdzIHZhbHVlLgotICAgIC8vIEFsc28s
IG5vdGUgdGhhdCB3ZSB3b3VsZCBoYXZlIGFscmVhZHkgcmVqZWN0ZWQgdGhlIHNoYWRlciBpZiB0
aGUgYXV0aG9yIGRlZmluZWQgYV90ZXhDb29yZCB3aXRoIHRoZSB3cm9uZyB0eXBlLgotICAgIGJv
b2wgdGV4Q29vcmRBdHRyaWJ1dGVEZWZpbmVkID0gZmFsc2U7Ci0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzeW1ib2xzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChzeW1ib2xzW2ldLm5h
bWUgPT0gImFfdGV4Q29vcmQiKQotICAgICAgICAgICAgdGV4Q29vcmRBdHRyaWJ1dGVEZWZpbmVk
ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoIXRleENvb3JkQXR0cmlidXRlRGVmaW5lZCkKLSAg
ICAgICAgbV92YWxpZGF0ZWRWZXJ0ZXhTaGFkZXIuYXBwZW5kKCJhdHRyaWJ1dGUgbWVkaXVtcCB2
ZWMyIGFfdGV4Q29vcmQ7Iik7Ci0KLSAgICAvLyBEdXJpbmcgdmFsaWRhdGlvbiwgQU5HTEUgcmVu
YW1lZCB0aGUgYXV0aG9yJ3MgIm1haW4iIGZ1bmN0aW9uIHRvICJjc3NfbWFpbiIuCi0gICAgLy8g
V2Ugd3JpdGUgb3VyIG93biAibWFpbiIgZnVuY3Rpb24gYW5kIGNhbGwgImNzc19tYWluIiBmcm9t
IGl0LgotICAgIC8vIFRoaXMgbWFrZXMgcmV3cml0aW5nIGVhc3kgYW5kIGVuc3VyZXMgdGhhdCBv
dXIgY29kZSBydW5zIGFmdGVyIGFsbCBhdXRob3IgY29kZS4KLSAgICBtX3ZhbGlkYXRlZFZlcnRl
eFNoYWRlci5hcHBlbmQoU0hBREVSKAotICAgICAgICB2YXJ5aW5nIG1lZGl1bXAgdmVjMiBjc3Nf
dl90ZXhDb29yZDsKLQotICAgICAgICB2b2lkIG1haW4oKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBjc3NfbWFpbigpOwotICAgICAgICAgICAgY3NzX3ZfdGV4Q29vcmQgPSBhX3RleENvb3JkOwot
ICAgICAgICB9Ci0gICAgKSk7Ci19Ci0KLXZvaWQgQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3Jh
bTo6cmV3cml0ZU1peEZyYWdtZW50U2hhZGVyKCkKLXsKLSAgICBBU1NFUlQobV9wcm9ncmFtSW5m
by5wcm9ncmFtVHlwZSgpID09IFBST0dSQU1fVFlQRV9CTEVORFNfRUxFTUVOVF9URVhUVVJFKTsK
LQotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICAvLyBBTkdMRSBjb25zaWRlcmVkIHRo
ZXNlIHN5bWJvbHMgYXMgYnVpbHQtaW5zIGR1cmluZyB2YWxpZGF0aW9uIHVuZGVyIHRoZSBTSF9D
U1NfU0hBREVSU19TUEVDIGZsYWcuCi0gICAgLy8gTm93LCB3ZSBoYXZlIHRvIGRlZmluZSB0aGVz
ZSBzeW1ib2xzIGluIG9yZGVyIHRvIG1ha2UgdGhpcyBzaGFkZXIgdmFsaWQgR0xTTC4KLSAgICAv
LyBXZSBkZWZpbmUgdGhlc2Ugc3ltYm9scyBiZWZvcmUgdGhlIGF1dGhvcidzIHNoYWRlciBjb2Rl
LCB3aGljaCBtYWtlcyB0aGVtIGFjY2Vzc2libGUgdG8gYXV0aG9yIGNvZGUuCi0gICAgYnVpbGRl
ci5hcHBlbmQoU0hBREVSKAotICAgICAgICBtZWRpdW1wIHZlYzQgY3NzX01peENvbG9yID0gdmVj
NCgwLjApOwotICAgICAgICBtZWRpdW1wIG1hdDQgY3NzX0NvbG9yTWF0cml4ID0gbWF0NCgxLjAp
OwotICAgICkpOwotICAgIGJ1aWxkZXIuYXBwZW5kKG1fdmFsaWRhdGVkRnJhZ21lbnRTaGFkZXIp
OwotICAgIGJ1aWxkZXIuYXBwZW5kKGJsZW5kRnVuY3Rpb25TdHJpbmcobV9wcm9ncmFtSW5mby5t
aXhTZXR0aW5ncygpLmJsZW5kTW9kZSkpOwotICAgIGJ1aWxkZXIuYXBwZW5kKGNvbXBvc2l0ZUZ1
bmN0aW9uU3RyaW5nKG1fcHJvZ3JhbUluZm8ubWl4U2V0dGluZ3MoKS5jb21wb3NpdGVPcGVyYXRv
cikpOwotICAgIC8vIFdlIGRlZmluZSBzeW1ib2xzIGxpa2UgImNzc191X3RleHR1cmUiIGFmdGVy
IHRoZSBhdXRob3IncyBzaGFkZXIgY29kZSwgd2hpY2ggbWFrZXMgdGhlbSBpbmFjY2Vzc2libGUg
dG8gYXV0aG9yIGNvZGUuCi0gICAgLy8gSW4gcGFydGljdWxhciwgImNzc191X3RleHR1cmUiIHJl
cHJlc2VudHMgdGhlIERPTSBlbGVtZW50IHRleHR1cmUsIHNvIGl0J3MgaW1wb3J0YW50IHRvIGtl
ZXAgaXQgaW5hY2Nlc3NpYmxlIHRvCi0gICAgLy8gYXV0aG9yIGNvZGUgZm9yIHNlY3VyaXR5IHJl
YXNvbnMuCi0gICAgYnVpbGRlci5hcHBlbmQoU0hBREVSKAotICAgICAgICB1bmlmb3JtIHNhbXBs
ZXIyRCBjc3NfdV90ZXh0dXJlOwotICAgICAgICB2YXJ5aW5nIG1lZGl1bXAgdmVjMiBjc3Nfdl90
ZXhDb29yZDsKLQotICAgICAgICB2b2lkIG1haW4oKQotICAgICAgICB7Ci0gICAgICAgICAgICBj
c3NfbWFpbigpOwotICAgICAgICAgICAgbWVkaXVtcCB2ZWM0IG9yaWdpbmFsQ29sb3IgPSB0ZXh0
dXJlMkQoY3NzX3VfdGV4dHVyZSwgY3NzX3ZfdGV4Q29vcmQpOwotICAgICAgICAgICAgbWVkaXVt
cCB2ZWM0IG11bHRpcGxpZWRDb2xvciA9IGNsYW1wKGNzc19Db2xvck1hdHJpeCAqIG9yaWdpbmFs
Q29sb3IsIDAuMCwgMS4wKTsKLSAgICAgICAgICAgIG1lZGl1bXAgdmVjNCBjbGFtcGVkTWl4Q29s
b3IgPSBjbGFtcChjc3NfTWl4Q29sb3IsIDAuMCwgMS4wKTsKLSAgICAgICAgICAgIG1lZGl1bXAg
dmVjMyBibGVuZGVkQ29sb3IgPSBjc3NfQmxlbmRDb2xvcihtdWx0aXBsaWVkQ29sb3IucmdiLCBj
bGFtcGVkTWl4Q29sb3IucmdiKTsKLSAgICAgICAgICAgIG1lZGl1bXAgdmVjMyB3ZWlnaHRlZENv
bG9yID0gKDEuMCAtIG11bHRpcGxpZWRDb2xvci5hKSAqIGNsYW1wZWRNaXhDb2xvci5yZ2IgKyBt
dWx0aXBsaWVkQ29sb3IuYSAqIGJsZW5kZWRDb2xvcjsKLSAgICAgICAgICAgIGdsX0ZyYWdDb2xv
ciA9IGNzc19Db21wb3NpdGUobXVsdGlwbGllZENvbG9yLnJnYiwgbXVsdGlwbGllZENvbG9yLmEs
IHdlaWdodGVkQ29sb3IucmdiLCBjbGFtcGVkTWl4Q29sb3IuYSk7Ci0gICAgICAgIH0KLSAgICAp
KTsKLSAgICBtX3ZhbGlkYXRlZEZyYWdtZW50U2hhZGVyID0gYnVpbGRlci50b1N0cmluZygpOwot
fQotCi1TdHJpbmcgQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbTo6YmxlbmRGdW5jdGlvblN0
cmluZyhCbGVuZE1vZGUgYmxlbmRNb2RlKQotewotICAgIC8vIEltcGxlbWVudGVkIHVzaW5nIHRo
ZSBzYW1lIHN5bWJvbCBuYW1lcyBhcyB0aGUgQ29tcG9zaXRpbmcgYW5kIEJsZW5kaW5nIHNwZWM6
Ci0gICAgLy8gaHR0cHM6Ly9kdmNzLnczLm9yZy9oZy9GWFRGL3Jhd2ZpbGUvdGlwL2NvbXBvc2l0
aW5nL2luZGV4Lmh0bWwjYmxlbmRpbmdub3JtYWwKLSAgICAvLyBDczogaXMgdGhlIHNvdXJjZSBj
b2xvciBpbiBjc3NfQmxlbmRDb2xvcigpIGFuZCB0aGUgc291cmNlIGNvbG9yIGNvbXBvbmVudCBp
biBjc3NfQmxlbmRDb21wb25lbnQoKQotICAgIC8vIENiOiBpcyB0aGUgYmFja2Ryb3AgY29sb3Ig
aW4gY3NzX0JsZW5kQ29sb3IoKSBhbmQgdGhlIGJhY2tkcm9wIGNvbG9yIGNvbXBvbmVudCBpbiBj
c3NfQmxlbmRDb21wb25lbnQoKQotICAgIGNvbnN0IGNoYXIqIGJsZW5kQ29sb3JFeHByZXNzaW9u
ID0gInZlYzMoY3NzX0JsZW5kQ29tcG9uZW50KENiLnIsIENzLnIpLCBjc3NfQmxlbmRDb21wb25l
bnQoQ2IuZywgQ3MuZyksIGNzc19CbGVuZENvbXBvbmVudChDYi5iLCBDcy5iKSkiOwotICAgIGNv
bnN0IGNoYXIqIGJsZW5kQ29tcG9uZW50RXhwcmVzc2lvbiA9ICJDbyA9IDAuMDsiOwotICAgIGJv
b2wgbmVlZHNMdW1pbm9zaXR5SGVscGVyRnVuY3Rpb25zID0gZmFsc2U7Ci0gICAgYm9vbCBuZWVk
c1NhdHVyYXRpb25IZWxwZXJGdW5jdGlvbnMgPSBmYWxzZTsKLSAgICBTdHJpbmcgYmxlbmRGdW5j
dGlvblN0cmluZzsKLSAgICBzd2l0Y2ggKGJsZW5kTW9kZSkgewotICAgIGNhc2UgQmxlbmRNb2Rl
Tm9ybWFsOgotICAgICAgICBibGVuZENvbG9yRXhwcmVzc2lvbiA9ICJDcyI7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgQmxlbmRNb2RlTXVsdGlwbHk6Ci0gICAgICAgIGJsZW5kQ29sb3JFeHBy
ZXNzaW9uID0gIkNzICogQ2IiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEJsZW5kTW9kZVNj
cmVlbjoKLSAgICAgICAgYmxlbmRDb2xvckV4cHJlc3Npb24gPSAiQ2IgKyBDcyAtIChDYiAqIENz
KSI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQmxlbmRNb2RlRGFya2VuOgotICAgICAgICBi
bGVuZENvbG9yRXhwcmVzc2lvbiA9ICJtaW4oQ2IsIENzKSI7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgQmxlbmRNb2RlTGlnaHRlbjoKLSAgICAgICAgYmxlbmRDb2xvckV4cHJlc3Npb24gPSAi
bWF4KENiLCBDcykiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEJsZW5kTW9kZURpZmZlcmVu
Y2U6Ci0gICAgICAgIGJsZW5kQ29sb3JFeHByZXNzaW9uID0gImFicyhDYiAtIENzKSI7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgQmxlbmRNb2RlRXhjbHVzaW9uOgotICAgICAgICBibGVuZENv
bG9yRXhwcmVzc2lvbiA9ICJDYiArIENzIC0gMi4wICogQ2IgKiBDcyI7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgQmxlbmRNb2RlT3ZlcmxheToKLSAgICAgICAgLyoKLSAgICAgICAgICAgIENv
ID0gSGFyZExpZ2h0KENzLCBDYikKLSAgICAgICAgICAgICAgID0gaWYoQ2IgPD0gMC41KQotICAg
ICAgICAgICAgICAgICAgICAgTXVsdGlwbHkoQ3MsIDIgeCBDYikKLSAgICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICAgICAgU2NyZWVuKENzLCAyIHggQ2IgLSAxKQotICAgICAg
ICAgICAgICAgPSBpZihDYiA8PSAwLjUpCi0gICAgICAgICAgICAgICAgICAgICBDcyB4ICgyIHgg
Q2IpCi0gICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgIENzICsgKDIg
eCBDYiAtIDEpIC0gKENzIHggKDIgeCBDYiAtIDEpKQotICAgICAgICAqLwotICAgICAgICBibGVu
ZENvbXBvbmVudEV4cHJlc3Npb24gPSBTSEFERVIoCi0gICAgICAgICAgICBpZiAoQ2IgPD0gMC41
KQotICAgICAgICAgICAgICAgIENvID0gQ3MgKiAoMi4wICogQ2IpOwotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIENvID0gQ3MgKyAoMi4wICogQ2IgLSAxLjApIC0gKENzICogKDIu
MCAqIENiIC0gMS4wKSk7Ci0gICAgICAgICk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQmxl
bmRNb2RlQ29sb3JEb2RnZToKLSAgICAgICAgLyoKLSAgICAgICAgICAgIENvID0gaWYoQ3MgPCAx
KQotICAgICAgICAgICAgICAgICAgICAgbWluKDEsIENiIC8gKDEgLSBDcykpCi0gICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgIDEKLSAgICAgICAgKi8KLSAgICAgICAg
YmxlbmRDb21wb25lbnRFeHByZXNzaW9uID0gU0hBREVSKAotICAgICAgICAgICAgaWYgKENzIDwg
MS4wKQotICAgICAgICAgICAgICAgIENvID0gbWluKDEuMCwgQ2IgLyAoMS4wIC0gQ3MpKTsKLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBDbyA9IDEuMDsKLSAgICAgICAgKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBCbGVuZE1vZGVDb2xvckJ1cm46Ci0gICAgICAgIC8qCi0g
ICAgICAgICAgICBDbyA9IGlmKENzID4gMCkKLSAgICAgICAgICAgICAgICAgICAgIDEgLSBtaW4o
MSwgKDEgLSBDYikgLyBDcykKLSAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
ICAgICAgMAotICAgICAgICAqLwotICAgICAgICBibGVuZENvbXBvbmVudEV4cHJlc3Npb24gPSBT
SEFERVIoCi0gICAgICAgICAgICBpZiAoQ3MgPiAwLjApCi0gICAgICAgICAgICAgICAgQ28gPSAx
LjAgLSBtaW4oMS4wLCAoMS4wIC0gQ2IpIC8gQ3MpOwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIENvID0gMC4wOwotICAgICAgICApOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEJsZW5kTW9kZUhhcmRMaWdodDoKLSAgICAgICAgLyoKLSAgICAgICAgICAgIENvID0gaWYoQ3Mg
PD0gMC41KQotICAgICAgICAgICAgICAgICAgICAgTXVsdGlwbHkoQ2IsIDIgeCBDcykKLSAgICAg
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgU2NyZWVuKENiLCAyIHggQ3Mg
LTEpCi0gICAgICAgICAgICAgICA9IGlmKENzIDw9IDAuNSkKLSAgICAgICAgICAgICAgICAgICAg
IENiIHggKDIgeCBDcykKLSAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAg
ICAgQ2IgKyAoMiB4IENzIC0gMSkgLSAoQ2IgeCAoMiB4IENzIC0gMSkpCi0gICAgICAgICovCi0g
ICAgICAgIGJsZW5kQ29tcG9uZW50RXhwcmVzc2lvbiA9IFNIQURFUigKLSAgICAgICAgICAgIGlm
IChDcyA8PSAwLjUpCi0gICAgICAgICAgICAgICAgQ28gPSBDYiAqICgyLjAgKiBDcyk7Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgQ28gPSBDYiArICgyLjAgKiBDcyAtIDEuMCkg
LSAoQ2IgKiAoMi4wICogQ3MgLSAxLjApKTsKLSAgICAgICAgKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBCbGVuZE1vZGVTb2Z0TGlnaHQ6Ci0gICAgICAgIC8qCi0gICAgICAgICAgICBDbyA9
IGlmKENzIDw9IDAuNSkKLSAgICAgICAgICAgICAgICAgICAgIENiIC0gKDEgLSAyIHggQ3MpIHgg
Q2IgeCAoMSAtIENiKQotICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
ICBDYiArICgyIHggQ3MgLSAxKSB4IChEKENiKSAtIENiKQotCi0gICAgICAgICAgICB3aXRoCi0K
LSAgICAgICAgICAgIEQoQ2IpID0gaWYoQ2IgPD0gMC4yNSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICgxNiAqIENiIC0gMTIpIHggQ2IgKyA0KSB4IENiCi0gICAgICAgICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHNxcnQoQ2IpCi0gICAgICAgICovCi0gICAgICAg
IGJsZW5kQ29tcG9uZW50RXhwcmVzc2lvbiA9IFNIQURFUigKLSAgICAgICAgICAgIG1lZGl1bXAg
ZmxvYXQgRDsKLSAgICAgICAgICAgIGlmIChDYiA8PSAwLjI1KQotICAgICAgICAgICAgICAgIEQg
PSAoKDE2LjAgKiBDYiAtIDEyLjApICogQ2IgKyA0LjApICogQ2I7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgRCA9IHNxcnQoQ2IpOwotCi0gICAgICAgICAgICBpZiAoQ3MgPD0g
MC41KQotICAgICAgICAgICAgICAgIENvID0gQ2IgLSAoMS4wIC0gMi4wICogQ3MpICogQ2IgKiAo
MS4wIC0gQ2IpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIENvID0gQ2IgKyAo
Mi4wICogQ3MgLSAxLjApICogKEQgLSBDYik7Ci0gICAgICAgICk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgQmxlbmRNb2RlQ29sb3I6Ci0gICAgICAgIG5lZWRzTHVtaW5vc2l0eUhlbHBlckZ1
bmN0aW9ucyA9IHRydWU7Ci0gICAgICAgIGJsZW5kQ29sb3JFeHByZXNzaW9uID0gImNzc19TZXRM
dW0oQ3MsIGNzc19MdW0oQ2IpKSI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQmxlbmRNb2Rl
THVtaW5vc2l0eToKLSAgICAgICAgbmVlZHNMdW1pbm9zaXR5SGVscGVyRnVuY3Rpb25zID0gdHJ1
ZTsKLSAgICAgICAgYmxlbmRDb2xvckV4cHJlc3Npb24gPSAiY3NzX1NldEx1bShDYiwgY3NzX0x1
bShDcykpIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBCbGVuZE1vZGVIdWU6Ci0gICAgICAg
IG5lZWRzTHVtaW5vc2l0eUhlbHBlckZ1bmN0aW9ucyA9IHRydWU7Ci0gICAgICAgIG5lZWRzU2F0
dXJhdGlvbkhlbHBlckZ1bmN0aW9ucyA9IHRydWU7Ci0gICAgICAgIGJsZW5kQ29sb3JFeHByZXNz
aW9uID0gImNzc19TZXRMdW0oY3NzX1NldFNhdChDcywgY3NzX1NhdChDYikpLCBjc3NfTHVtKENi
KSkiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEJsZW5kTW9kZVNhdHVyYXRpb246Ci0gICAg
ICAgIG5lZWRzTHVtaW5vc2l0eUhlbHBlckZ1bmN0aW9ucyA9IHRydWU7Ci0gICAgICAgIG5lZWRz
U2F0dXJhdGlvbkhlbHBlckZ1bmN0aW9ucyA9IHRydWU7Ci0gICAgICAgIGJsZW5kQ29sb3JFeHBy
ZXNzaW9uID0gImNzc19TZXRMdW0oY3NzX1NldFNhdChDYiwgY3NzX1NhdChDcykpLCBjc3NfTHVt
KENiKSkiOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICBpZiAobmVlZHNMdW1pbm9zaXR5SGVscGVyRnVuY3Rp
b25zKSB7Ci0gICAgICAgIGJsZW5kRnVuY3Rpb25TdHJpbmcuYXBwZW5kKFNIQURFUigKLSAgICAg
ICAgICAgIG1lZGl1bXAgZmxvYXQgY3NzX0x1bShtZWRpdW1wIHZlYzMgQykKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gMC4zICogQy5yICsgMC41OSAqIEMuZyArIDAuMTEg
KiBDLmI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtZWRpdW1wIHZlYzMgY3NzX0NsaXBD
b2xvcihtZWRpdW1wIHZlYzMgQykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtZWRp
dW1wIGZsb2F0IEwgPSBjc3NfTHVtKEMpOwotICAgICAgICAgICAgICAgIG1lZGl1bXAgZmxvYXQg
biA9IG1pbihtaW4oQy5yLCBDLmcpLCBDLmIpOwotICAgICAgICAgICAgICAgIG1lZGl1bXAgZmxv
YXQgeCA9IG1heChtYXgoQy5yLCBDLmcpLCBDLmIpOwotICAgICAgICAgICAgICAgIGlmIChuIDwg
MC4wKQotICAgICAgICAgICAgICAgICAgICBDID0gTCArICgoKEMgLSBMKSAqIEwpIC8gKEwgLSBu
KSk7Ci0gICAgICAgICAgICAgICAgaWYgKHggPiAxLjApCi0gICAgICAgICAgICAgICAgICAgIEMg
PSBMICsgKCgoQyAtIEwpICogKDEuMCAtIEwpIC8gKHggLSBMKSkpOwotICAgICAgICAgICAgICAg
IHJldHVybiBDOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbWVkaXVtcCB2ZWMzIGNzc19T
ZXRMdW0obWVkaXVtcCB2ZWMzIEMsIG1lZGl1bXAgZmxvYXQgbCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBDICs9IGwgLSBjc3NfTHVtKEMpOwotICAgICAgICAgICAgICAgIHJldHVy
biBjc3NfQ2xpcENvbG9yKEMpOwotICAgICAgICAgICAgfQotICAgICAgICApKTsKLSAgICB9Ci0K
LSAgICBpZiAobmVlZHNTYXR1cmF0aW9uSGVscGVyRnVuY3Rpb25zKSB7Ci0gICAgICAgIGJsZW5k
RnVuY3Rpb25TdHJpbmcuYXBwZW5kKFNIQURFUigKLSAgICAgICAgICAgIG1lZGl1bXAgZmxvYXQg
Y3NzX1NhdChtZWRpdW1wIHZlYzMgQykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBt
ZWRpdW1wIGZsb2F0IGNNaW4gPSBtaW4obWluKEMuciwgQy5nKSwgQy5iKTsKLSAgICAgICAgICAg
ICAgICBtZWRpdW1wIGZsb2F0IGNNYXggPSBtYXgobWF4KEMuciwgQy5nKSwgQy5iKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gY01heCAtIGNNaW47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB2b2lkIGNzc19TZXRTYXRIZWxwZXIoaW5vdXQgbWVkaXVtcCBmbG9hdCBjTWluLCBpbm91dCBt
ZWRpdW1wIGZsb2F0IGNNaWQsIGlub3V0IG1lZGl1bXAgZmxvYXQgY01heCwgbWVkaXVtcCBmbG9h
dCBzKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChjTWF4ID4gY01pbikgewot
ICAgICAgICAgICAgICAgICAgICBjTWlkID0gKCgoY01pZCAtIGNNaW4pICogcykgLyAoY01heCAt
IGNNaW4pKTsKLSAgICAgICAgICAgICAgICAgICAgY01heCA9IHM7Ci0gICAgICAgICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGNNaWQgPSBjTWF4ID0gMC4wOwotICAgICAgICAg
ICAgICAgIGNNaW4gPSAwLjA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtZWRpdW1wIHZl
YzMgY3NzX1NldFNhdChtZWRpdW1wIHZlYzMgQywgbWVkaXVtcCBmbG9hdCBzKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGlmIChDLnIgPD0gQy5nKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChDLmcgPD0gQy5iKQotICAgICAgICAgICAgICAgICAgICAgICAgY3NzX1NldFNhdEhl
bHBlcihDLnIsIEMuZywgQy5iLCBzKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoQy5yIDw9IEMuYikKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjc3NfU2V0U2F0SGVscGVyKEMuciwgQy5iLCBDLmcsIHMpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzc19TZXRTYXRI
ZWxwZXIoQy5iLCBDLnIsIEMuZywgcyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoQy5yIDw9IEMuYikKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGNzc19TZXRTYXRIZWxwZXIoQy5nLCBDLnIsIEMuYiwgcyk7
Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KEMuZyA8PSBDLmIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzX1NldFNhdEhlbHBl
cihDLmcsIEMuYiwgQy5yLCBzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjc3NfU2V0U2F0SGVscGVyKEMuYiwgQy5nLCBDLnIsIHMp
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIHJldHVybiBDOwotICAgICAgICAgICAgfQotICAgICAgICApKTsKLSAgICB9Ci0KLSAgICBi
bGVuZEZ1bmN0aW9uU3RyaW5nLmFwcGVuZChTdHJpbmc6OmZvcm1hdChTSEFERVIoCi0gICAgICAg
IG1lZGl1bXAgZmxvYXQgY3NzX0JsZW5kQ29tcG9uZW50KG1lZGl1bXAgZmxvYXQgQ2IsIG1lZGl1
bXAgZmxvYXQgQ3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1lZGl1bXAgZmxvYXQgQ287Ci0g
ICAgICAgICAgICAlcwotICAgICAgICAgICAgcmV0dXJuIENvOwotICAgICAgICB9Ci0gICAgICAg
IG1lZGl1bXAgdmVjMyBjc3NfQmxlbmRDb2xvcihtZWRpdW1wIHZlYzMgQ2IsIG1lZGl1bXAgdmVj
MyBDcykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICVzOwotICAgICAgICB9Ci0gICAg
KSwgYmxlbmRDb21wb25lbnRFeHByZXNzaW9uLCBibGVuZENvbG9yRXhwcmVzc2lvbikpOwotCi0g
ICAgcmV0dXJuIGJsZW5kRnVuY3Rpb25TdHJpbmc7Ci19Ci0KLVN0cmluZyBDdXN0b21GaWx0ZXJW
YWxpZGF0ZWRQcm9ncmFtOjpjb21wb3NpdGVGdW5jdGlvblN0cmluZyhDb21wb3NpdGVPcGVyYXRv
ciBjb21wb3NpdGVPcGVyYXRvcikKLXsKLSAgICAvLyBVc2UgdGhlIHNhbWUgc3ltYm9sIG5hbWVz
IGFzIHRoZSBDb21wb3NpdGluZyBhbmQgQmxlbmRpbmcgc3BlYzoKLSAgICAvLyBodHRwczovL2R2
Y3MudzMub3JnL2hnL0ZYVEYvcmF3ZmlsZS90aXAvY29tcG9zaXRpbmcvaW5kZXguaHRtbCNibGVu
ZGluZ25vcm1hbAotICAgIC8vIENzOiBpcyB0aGUgc291cmNlIGNvbG9yCi0gICAgLy8gQ2I6IGlz
IHRoZSBiYWNrZHJvcCBjb2xvcgotICAgIC8vIGFzOiBpcyB0aGUgc291cmNlIGFscGhhCi0gICAg
Ly8gYWI6IGlzIHRoZSBiYWNrZHJvcCBhbHBoYQotICAgIC8vIEZhOiBpcyBkZWZpbmVkIGJ5IHRo
ZSBQb3J0ZXIgRHVmZiBvcGVyYXRvciBpbiB1c2UKLSAgICAvLyBGYjogaXMgZGVmaW5lZCBieSB0
aGUgUG9ydGVyIER1ZmYgb3BlcmF0b3IgaW4gdXNlCi0gICAgY29uc3QgY2hhciogRmEgPSAwOwot
ICAgIGNvbnN0IGNoYXIqIEZiID0gMDsKLSAgICBzd2l0Y2ggKGNvbXBvc2l0ZU9wZXJhdG9yKSB7
Ci0gICAgY2FzZSBDb21wb3NpdGVTb3VyY2VBdG9wOgotICAgICAgICBGYSA9ICJhYiI7Ci0gICAg
ICAgIEZiID0gIjEuMCAtIGFzIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb21wb3NpdGVD
bGVhcjoKLSAgICAgICAgRmEgPSAiMC4wIjsKLSAgICAgICAgRmIgPSAiMC4wIjsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBDb21wb3NpdGVDb3B5OgotICAgICAgICBGYSA9ICIxLjAiOwotICAg
ICAgICBGYiA9ICIwLjAiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENvbXBvc2l0ZVNvdXJj
ZU92ZXI6Ci0gICAgICAgIEZhID0gIjEuMCI7Ci0gICAgICAgIEZiID0gIjEuMCAtIGFzIjsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb21wb3NpdGVTb3VyY2VJbjoKLSAgICAgICAgRmEgPSAi
YWIiOwotICAgICAgICBGYiA9ICIwLjAiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENvbXBv
c2l0ZVNvdXJjZU91dDoKLSAgICAgICAgRmEgPSAiMS4wIC0gYWIiOwotICAgICAgICBGYiA9ICIw
LjAiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENvbXBvc2l0ZURlc3RpbmF0aW9uT3ZlcjoK
LSAgICAgICAgRmEgPSAiMS4wIC0gYWIiOwotICAgICAgICBGYiA9ICIxLjAiOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIENvbXBvc2l0ZURlc3RpbmF0aW9uSW46Ci0gICAgICAgIEZhID0gIjAu
MCI7Ci0gICAgICAgIEZiID0gImFzIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb21wb3Np
dGVEZXN0aW5hdGlvbk91dDoKLSAgICAgICAgRmEgPSAiMC4wIjsKLSAgICAgICAgRmIgPSAiMS4w
IC0gYXMiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENvbXBvc2l0ZURlc3RpbmF0aW9uQXRv
cDoKLSAgICAgICAgRmEgPSAiMS4wIC0gYWIiOwotICAgICAgICBGYiA9ICJhcyI7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgQ29tcG9zaXRlWE9SOgotICAgICAgICBGYSA9ICIxLjAgLSBhYiI7
Ci0gICAgICAgIEZiID0gIjEuMCAtIGFzIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb21w
b3NpdGVQbHVzTGlnaHRlcjoKLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICAgICAgcmV0
dXJuIFN0cmluZygpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIC8vIFRoZSBDU1MgcGFyc2VyIHNo
b3VsZCBub3QgaGF2ZSBhY2NlcHRlZCBhbnkgb3RoZXIgY29tcG9zaXRlIG9wZXJhdG9ycy4KLSAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAg
ICB9Ci0KLSAgICBBU1NFUlQoRmEgJiYgRmIpOwotICAgIC8vIFVzZSB0aGUgZ2VuZXJhbCBmb3Jt
dWxhIGZvciBjb21wb3NpdGluZywgbGlmdGVkIGZyb20gdGhlIHNwZWM6Ci0gICAgLy8gaHR0cHM6
Ly9kdmNzLnczLm9yZy9oZy9GWFRGL3Jhd2ZpbGUvdGlwL2NvbXBvc2l0aW5nL2luZGV4Lmh0bWwj
Z2VuZXJhbGZvcm11bGEKLSAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoU0hBREVSKAotICAgICAg
ICBtZWRpdW1wIHZlYzQgY3NzX0NvbXBvc2l0ZShtZWRpdW1wIHZlYzMgQ2IsIG1lZGl1bXAgZmxv
YXQgYWIsIG1lZGl1bXAgdmVjMyBDcywgbWVkaXVtcCBmbG9hdCBhcykKLSAgICAgICAgewotICAg
ICAgICAgICAgbWVkaXVtcCBmbG9hdCBGYSA9ICVzOwotICAgICAgICAgICAgbWVkaXVtcCBmbG9h
dCBGYiA9ICVzOwotICAgICAgICAgICAgcmV0dXJuIHZlYzQoYXMgKiBGYSAqIENzICsgYWIgKiBG
YiAqIENiLCBhcyAqIEZhICsgYWIgKiBGYik7IAotICAgICAgICB9Ci0gICAgKSwgRmEsIEZiKTsK
LX0KLSAgICAKIEN1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW06On5DdXN0b21GaWx0ZXJWYWxp
ZGF0ZWRQcm9ncmFtKCkKIHsKICAgICBwbGF0Zm9ybURlc3Ryb3koKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyVmFsaWRh
dGVkUHJvZ3JhbS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9D
dXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtLmgKaW5kZXggZWY3OTE5YS4uMjI3MWZhZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21G
aWx0ZXJWYWxpZGF0ZWRQcm9ncmFtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtLmgKQEAgLTQ4LDkgKzQ4
LDggQEAgdHlwZWRlZiBXZWJDb3JlOjpMYXllckNvbXBpbGVkUHJvZ3JhbSBQbGF0Zm9ybUNvbXBp
bGVkUHJvZ3JhbTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdHJ1Y3QgQU5HTEVTaGFkZXJT
eW1ib2w7CitjbGFzcyBDdXN0b21GaWx0ZXJQcm9ncmFtOwogY2xhc3MgQ3VzdG9tRmlsdGVyQ29t
cGlsZWRQcm9ncmFtOwotY2xhc3MgQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dDsKIAogI2lmIFVT
RShURVhUVVJFX01BUFBFUikKIGNsYXNzIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUNvbXBpbGVkUHJv
Z3JhbTsKQEAgLTY0LDkgKzYzLDkgQEAgdHlwZWRlZiBUZXh0dXJlTWFwcGVyUGxhdGZvcm1Db21w
aWxlZFByb2dyYW0gUGxhdGZvcm1Db21waWxlZFByb2dyYW07CiAvLwogY2xhc3MgQ3VzdG9tRmls
dGVyVmFsaWRhdGVkUHJvZ3JhbSA6IHB1YmxpYyBSZWZDb3VudGVkPEN1c3RvbUZpbHRlclZhbGlk
YXRlZFByb2dyYW0+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxDdXN0b21GaWx0
ZXJWYWxpZGF0ZWRQcm9ncmFtPiBjcmVhdGUoQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dCogZ2xv
YmFsQ29udGV4dCwgY29uc3QgQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8mIHByb2dyYW1JbmZvKQor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW0+IGNyZWF0
ZShjb25zdCBDdXN0b21GaWx0ZXJQcm9ncmFtKiBwcm9ncmFtKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtKGdsb2JhbENvbnRl
eHQsIHByb2dyYW1JbmZvKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ3VzdG9tRmls
dGVyVmFsaWRhdGVkUHJvZ3JhbShwcm9ncmFtKSk7CiAgICAgfQogCiAgICAgfkN1c3RvbUZpbHRl
clZhbGlkYXRlZFByb2dyYW0oKTsKQEAgLTk1LDIyICs5NCwxMSBAQCBwdWJsaWM6CiAKICAgICBi
b29sIGlzSW5pdGlhbGl6ZWQoKSBjb25zdCB7IHJldHVybiBtX2lzSW5pdGlhbGl6ZWQ7IH0KIHBy
aXZhdGU6Ci0gICAgQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbShDdXN0b21GaWx0ZXJHbG9i
YWxDb250ZXh0KiwgY29uc3QgQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8mKTsKKyAgICBDdXN0b21G
aWx0ZXJWYWxpZGF0ZWRQcm9ncmFtKGNvbnN0IEN1c3RvbUZpbHRlclByb2dyYW0qKTsKIAogICAg
IHZvaWQgcGxhdGZvcm1Jbml0KCk7CiAgICAgdm9pZCBwbGF0Zm9ybURlc3Ryb3koKTsKIAotICAg
IHN0YXRpYyBTdHJpbmcgZGVmYXVsdFZlcnRleFNoYWRlclN0cmluZygpOwotICAgIHN0YXRpYyBT
dHJpbmcgZGVmYXVsdEZyYWdtZW50U2hhZGVyU3RyaW5nKCk7Ci0KLSAgICBzdGF0aWMgU3RyaW5n
IGJsZW5kRnVuY3Rpb25TdHJpbmcoQmxlbmRNb2RlKTsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbXBv
c2l0ZUZ1bmN0aW9uU3RyaW5nKENvbXBvc2l0ZU9wZXJhdG9yKTsKLQotICAgIHZvaWQgcmV3cml0
ZU1peFZlcnRleFNoYWRlcihjb25zdCBWZWN0b3I8QU5HTEVTaGFkZXJTeW1ib2w+JiBzeW1ib2xz
KTsKLSAgICB2b2lkIHJld3JpdGVNaXhGcmFnbWVudFNoYWRlcigpOwotCi0gICAgYm9vbCBuZWVk
c0lucHV0VGV4dHVyZSgpIGNvbnN0OwotCiAgICAgQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8gbV9w
cm9ncmFtSW5mbzsKIAogICAgIFN0cmluZyBtX3ZhbGlkYXRlZFZlcnRleFNoYWRlcjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmls
dGVyVmFsaWRhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvQ3VzdG9tRmlsdGVyVmFsaWRhdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi44OTYxMjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJWYWxpZGF0b3IuY3BwCkBAIC0wLDAgKzEs
NjEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3Jh
dGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIg4oCc
QVMgSVPigJ0gQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUK
KyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwKKyAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKKyAqIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRgorICogVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisKKyNpbmNsdWRlICJDdXN0b21GaWx0ZXJW
YWxpZGF0b3IuaCIKKworI2luY2x1ZGUgIkFOR0xFV2ViS2l0QnJpZGdlLmgiCisjaW5jbHVkZSAi
Q3VzdG9tRmlsdGVyQ29uc3RhbnRzLmgiCisjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyUHJvZ3JhbS5o
IgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRl
ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCisjZGVmaW5lIFNIQURFUihTcmMpICgjU3JjKSAKKworc3RhdGljIEFOR0xFV2ViS2l0
QnJpZGdlKiBjcmVhdGVTaGFkZXJWYWxpZGF0b3IoU2hTaGFkZXJTcGVjIHNoYWRlclNwZWMpCit7
CisgICAgQU5HTEVXZWJLaXRCcmlkZ2UqIHZhbGlkYXRvciA9IG5ldyBBTkdMRVdlYktpdEJyaWRn
ZShTSF9FU1NMX09VVFBVVCwgc2hhZGVyU3BlYyk7CisgICAgU2hCdWlsdEluUmVzb3VyY2VzIHJl
c291cmNlczsKKyAgICBTaEluaXRCdWlsdEluUmVzb3VyY2VzKCZyZXNvdXJjZXMpOworICAgIHZh
bGlkYXRvci0+c2V0UmVzb3VyY2VzKHJlc291cmNlcyk7CisgICAgcmV0dXJuIHZhbGlkYXRvcjsK
K30KKworLy8gQ1NTIHNoYWRlcnMgdGhhdCBkbyBub3QgdXNlIGJsZW5kaW5nIGFuZCBjb21wb3Np
dGluZyBzaG91bGQgYmUgdmFsaWRhdGVkIGp1c3QgbGlrZSByZWd1bGFyIFdlYkdMIHNoYWRlcnMu
CisvLyBUaGlzIEFOR0xFIHZhbGlkYXRvciB1c2VzIHRoZSBTSF9XRUJHTF9TUEVDIGZsYWcuCitz
dGF0aWMgQU5HTEVXZWJLaXRCcmlkZ2UqIHdlYmdsU2hhZGVyVmFsaWRhdG9yKCkKK3sKKyAgICBz
dGF0aWMgQU5HTEVXZWJLaXRCcmlkZ2UqIHdlYmdsU2hhZGVyVmFsaWRhdG9yID0gY3JlYXRlU2hh
ZGVyVmFsaWRhdG9yKFNIX1dFQkdMX1NQRUMpOworICAgIHJldHVybiB3ZWJnbFNoYWRlclZhbGlk
YXRvcjsKK30KKworLy8gQ1NTIHNoYWRlcnMgdGhhdCB1c2UgYmxlbmRpbmcgYW5kIGNvbXBvc2l0
aW5nIHNob3VsZCBiZSB2YWxpZGF0ZWQgc2xpZ2h0bHkgZGlmZmVyZW50bHkgdGhhbiBXZWJHTCBz
aGFkZXJzLgorLy8gVGhpcyBBTkdMRSB2YWxpZGF0b3IgdXNlcyB0aGUgU0hfQ1NTX1NIQURFUlNf
U1BFQyBmbGFnLgorLy8gVW5kZXIgdGhpcyBmbGFnLCBtb3N0IG5vdGFibHk6CisvLyAtIFRoZSAi
Z2xfRnJhZ0NvbG9yIiBidWlsdC1pbiBpcyBub3QgYXZhaWxhYmxlLgorLy8gLSBJbnN0ZWFkLCB0
aGUgImNzc19NaXhDb2xvciIgYW5kICJjc3NfQ29sb3JNYXRyaXgiIGJ1aWx0LWlucyBhcmUgYXZh
aWxhYmxlLgorLy8gLSBUaGUgImNzc18iIHByZWZpeCBpcyByZXNlcnZlZC4KKy8vIC0gSW4gdGhl
IHRyYW5zbGF0ZWQgc291cmNlIHRoYXQgQU5HTEUgcmV0dXJucywgQU5HTEUgcmVuYW1lcyB0aGUg
YXV0aG9yJ3MgIm1haW4iIGZ1bmN0aW9uIHRvICJjc3NfbWFpbiIuCisvLyBUaGUgY29tcGxldGUg
ZGV0YWlscyBhcmUgZG9jdW1lbnRlZCBpbiBBTkdMRS9TaGFkZXJMYW5nLmguCitzdGF0aWMgQU5H
TEVXZWJLaXRCcmlkZ2UqIG1peFNoYWRlclZhbGlkYXRvcigpCit7CisgICAgc3RhdGljIEFOR0xF
V2ViS2l0QnJpZGdlKiBtaXhTaGFkZXJWYWxpZGF0b3IgPSBjcmVhdGVTaGFkZXJWYWxpZGF0b3Io
U0hfQ1NTX1NIQURFUlNfU1BFQyk7CisgICAgcmV0dXJuIG1peFNoYWRlclZhbGlkYXRvcjsKK30K
Kworc3RhdGljIFN0cmluZyBkZWZhdWx0VmVydGV4U2hhZGVyU3RyaW5nKCkKK3sKKyAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKFN0cmluZywgdmVydGV4U2hhZGVyU3RyaW5nLCAoQVNDSUlMaXRlcmFs
KFNIQURFUigKKyAgICAgICAgYXR0cmlidXRlIG1lZGl1bXAgdmVjNCBhX3Bvc2l0aW9uOworICAg
ICAgICB1bmlmb3JtIG1lZGl1bXAgbWF0NCB1X3Byb2plY3Rpb25NYXRyaXg7CisKKyAgICAgICAg
dm9pZCBtYWluKCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2xfUG9zaXRpb24gPSB1X3Byb2pl
Y3Rpb25NYXRyaXggKiBhX3Bvc2l0aW9uOworICAgICAgICB9CisgICAgKSkpKTsKKyAgICByZXR1
cm4gdmVydGV4U2hhZGVyU3RyaW5nOworfQorCitzdGF0aWMgU3RyaW5nIGRlZmF1bHRGcmFnbWVu
dFNoYWRlclN0cmluZygpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGZyYWdt
ZW50U2hhZGVyU3RyaW5nLCAoQVNDSUlMaXRlcmFsKFNIQURFUigKKyAgICAgICAgdm9pZCBtYWlu
KCkKKyAgICAgICAgeworICAgICAgICB9CisgICAgKSkpKTsKKyAgICByZXR1cm4gZnJhZ21lbnRT
aGFkZXJTdHJpbmc7Cit9CisKK3N0YXRpYyBTdHJpbmcgYmxlbmRGdW5jdGlvblN0cmluZyhCbGVu
ZE1vZGUgYmxlbmRNb2RlKQoreworICAgIC8vIEltcGxlbWVudGVkIHVzaW5nIHRoZSBzYW1lIHN5
bWJvbCBuYW1lcyBhcyB0aGUgQ29tcG9zaXRpbmcgYW5kIEJsZW5kaW5nIHNwZWM6CisgICAgLy8g
aHR0cHM6Ly9kdmNzLnczLm9yZy9oZy9GWFRGL3Jhd2ZpbGUvdGlwL2NvbXBvc2l0aW5nL2luZGV4
Lmh0bWwjYmxlbmRpbmdub3JtYWwKKyAgICAvLyBDczogaXMgdGhlIHNvdXJjZSBjb2xvciBpbiBj
c3NfQmxlbmRDb2xvcigpIGFuZCB0aGUgc291cmNlIGNvbG9yIGNvbXBvbmVudCBpbiBjc3NfQmxl
bmRDb21wb25lbnQoKQorICAgIC8vIENiOiBpcyB0aGUgYmFja2Ryb3AgY29sb3IgaW4gY3NzX0Js
ZW5kQ29sb3IoKSBhbmQgdGhlIGJhY2tkcm9wIGNvbG9yIGNvbXBvbmVudCBpbiBjc3NfQmxlbmRD
b21wb25lbnQoKQorICAgIGNvbnN0IGNoYXIqIGJsZW5kQ29sb3JFeHByZXNzaW9uID0gInZlYzMo
Y3NzX0JsZW5kQ29tcG9uZW50KENiLnIsIENzLnIpLCBjc3NfQmxlbmRDb21wb25lbnQoQ2IuZywg
Q3MuZyksIGNzc19CbGVuZENvbXBvbmVudChDYi5iLCBDcy5iKSkiOworICAgIGNvbnN0IGNoYXIq
IGJsZW5kQ29tcG9uZW50RXhwcmVzc2lvbiA9ICJDbyA9IDAuMDsiOworICAgIGJvb2wgbmVlZHNM
dW1pbm9zaXR5SGVscGVyRnVuY3Rpb25zID0gZmFsc2U7CisgICAgYm9vbCBuZWVkc1NhdHVyYXRp
b25IZWxwZXJGdW5jdGlvbnMgPSBmYWxzZTsKKyAgICBTdHJpbmcgYmxlbmRGdW5jdGlvblN0cmlu
ZzsKKyAgICBzd2l0Y2ggKGJsZW5kTW9kZSkgeworICAgIGNhc2UgQmxlbmRNb2RlTm9ybWFsOgor
ICAgICAgICBibGVuZENvbG9yRXhwcmVzc2lvbiA9ICJDcyI7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQmxlbmRNb2RlTXVsdGlwbHk6CisgICAgICAgIGJsZW5kQ29sb3JFeHByZXNzaW9uID0g
IkNzICogQ2IiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEJsZW5kTW9kZVNjcmVlbjoKKyAg
ICAgICAgYmxlbmRDb2xvckV4cHJlc3Npb24gPSAiQ2IgKyBDcyAtIChDYiAqIENzKSI7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQmxlbmRNb2RlRGFya2VuOgorICAgICAgICBibGVuZENvbG9y
RXhwcmVzc2lvbiA9ICJtaW4oQ2IsIENzKSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQmxl
bmRNb2RlTGlnaHRlbjoKKyAgICAgICAgYmxlbmRDb2xvckV4cHJlc3Npb24gPSAibWF4KENiLCBD
cykiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEJsZW5kTW9kZURpZmZlcmVuY2U6CisgICAg
ICAgIGJsZW5kQ29sb3JFeHByZXNzaW9uID0gImFicyhDYiAtIENzKSI7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQmxlbmRNb2RlRXhjbHVzaW9uOgorICAgICAgICBibGVuZENvbG9yRXhwcmVz
c2lvbiA9ICJDYiArIENzIC0gMi4wICogQ2IgKiBDcyI7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQmxlbmRNb2RlT3ZlcmxheToKKyAgICAgICAgLyoKKyAgICAgICAgICAgIENvID0gSGFyZExp
Z2h0KENzLCBDYikKKyAgICAgICAgICAgICAgID0gaWYoQ2IgPD0gMC41KQorICAgICAgICAgICAg
ICAgICAgICAgTXVsdGlwbHkoQ3MsIDIgeCBDYikKKyAgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICAgU2NyZWVuKENzLCAyIHggQ2IgLSAxKQorICAgICAgICAgICAgICAg
PSBpZihDYiA8PSAwLjUpCisgICAgICAgICAgICAgICAgICAgICBDcyB4ICgyIHggQ2IpCisgICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgIENzICsgKDIgeCBDYiAtIDEp
IC0gKENzIHggKDIgeCBDYiAtIDEpKQorICAgICAgICAqLworICAgICAgICBibGVuZENvbXBvbmVu
dEV4cHJlc3Npb24gPSBTSEFERVIoCisgICAgICAgICAgICBpZiAoQ2IgPD0gMC41KQorICAgICAg
ICAgICAgICAgIENvID0gQ3MgKiAoMi4wICogQ2IpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIENvID0gQ3MgKyAoMi4wICogQ2IgLSAxLjApIC0gKENzICogKDIuMCAqIENiIC0g
MS4wKSk7CisgICAgICAgICk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQmxlbmRNb2RlQ29s
b3JEb2RnZToKKyAgICAgICAgLyoKKyAgICAgICAgICAgIENvID0gaWYoQ3MgPCAxKQorICAgICAg
ICAgICAgICAgICAgICAgbWluKDEsIENiIC8gKDEgLSBDcykpCisgICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgIDEKKyAgICAgICAgKi8KKyAgICAgICAgYmxlbmRDb21w
b25lbnRFeHByZXNzaW9uID0gU0hBREVSKAorICAgICAgICAgICAgaWYgKENzIDwgMS4wKQorICAg
ICAgICAgICAgICAgIENvID0gbWluKDEuMCwgQ2IgLyAoMS4wIC0gQ3MpKTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBDbyA9IDEuMDsKKyAgICAgICAgKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBCbGVuZE1vZGVDb2xvckJ1cm46CisgICAgICAgIC8qCisgICAgICAgICAg
ICBDbyA9IGlmKENzID4gMCkKKyAgICAgICAgICAgICAgICAgICAgIDEgLSBtaW4oMSwgKDEgLSBD
YikgLyBDcykKKyAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgMAor
ICAgICAgICAqLworICAgICAgICBibGVuZENvbXBvbmVudEV4cHJlc3Npb24gPSBTSEFERVIoCisg
ICAgICAgICAgICBpZiAoQ3MgPiAwLjApCisgICAgICAgICAgICAgICAgQ28gPSAxLjAgLSBtaW4o
MS4wLCAoMS4wIC0gQ2IpIC8gQ3MpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IENvID0gMC4wOworICAgICAgICApOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEJsZW5kTW9k
ZUhhcmRMaWdodDoKKyAgICAgICAgLyoKKyAgICAgICAgICAgIENvID0gaWYoQ3MgPD0gMC41KQor
ICAgICAgICAgICAgICAgICAgICAgTXVsdGlwbHkoQ2IsIDIgeCBDcykKKyAgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgU2NyZWVuKENiLCAyIHggQ3MgLTEpCisgICAg
ICAgICAgICAgICA9IGlmKENzIDw9IDAuNSkKKyAgICAgICAgICAgICAgICAgICAgIENiIHggKDIg
eCBDcykKKyAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgQ2IgKyAo
MiB4IENzIC0gMSkgLSAoQ2IgeCAoMiB4IENzIC0gMSkpCisgICAgICAgICovCisgICAgICAgIGJs
ZW5kQ29tcG9uZW50RXhwcmVzc2lvbiA9IFNIQURFUigKKyAgICAgICAgICAgIGlmIChDcyA8PSAw
LjUpCisgICAgICAgICAgICAgICAgQ28gPSBDYiAqICgyLjAgKiBDcyk7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgQ28gPSBDYiArICgyLjAgKiBDcyAtIDEuMCkgLSAoQ2IgKiAo
Mi4wICogQ3MgLSAxLjApKTsKKyAgICAgICAgKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBC
bGVuZE1vZGVTb2Z0TGlnaHQ6CisgICAgICAgIC8qCisgICAgICAgICAgICBDbyA9IGlmKENzIDw9
IDAuNSkKKyAgICAgICAgICAgICAgICAgICAgIENiIC0gKDEgLSAyIHggQ3MpIHggQ2IgeCAoMSAt
IENiKQorICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICBDYiArICgy
IHggQ3MgLSAxKSB4IChEKENiKSAtIENiKQorCisgICAgICAgICAgICB3aXRoCisKKyAgICAgICAg
ICAgIEQoQ2IpID0gaWYoQ2IgPD0gMC4yNSkKKyAgICAgICAgICAgICAgICAgICAgICAgICgxNiAq
IENiIC0gMTIpIHggQ2IgKyA0KSB4IENiCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHNxcnQoQ2IpCisgICAgICAgICovCisgICAgICAgIGJsZW5kQ29t
cG9uZW50RXhwcmVzc2lvbiA9IFNIQURFUigKKyAgICAgICAgICAgIG1lZGl1bXAgZmxvYXQgRDsK
KyAgICAgICAgICAgIGlmIChDYiA8PSAwLjI1KQorICAgICAgICAgICAgICAgIEQgPSAoKDE2LjAg
KiBDYiAtIDEyLjApICogQ2IgKyA0LjApICogQ2I7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgRCA9IHNxcnQoQ2IpOworCisgICAgICAgICAgICBpZiAoQ3MgPD0gMC41KQorICAg
ICAgICAgICAgICAgIENvID0gQ2IgLSAoMS4wIC0gMi4wICogQ3MpICogQ2IgKiAoMS4wIC0gQ2Ip
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIENvID0gQ2IgKyAoMi4wICogQ3Mg
LSAxLjApICogKEQgLSBDYik7CisgICAgICAgICk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
QmxlbmRNb2RlQ29sb3I6CisgICAgICAgIG5lZWRzTHVtaW5vc2l0eUhlbHBlckZ1bmN0aW9ucyA9
IHRydWU7CisgICAgICAgIGJsZW5kQ29sb3JFeHByZXNzaW9uID0gImNzc19TZXRMdW0oQ3MsIGNz
c19MdW0oQ2IpKSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQmxlbmRNb2RlTHVtaW5vc2l0
eToKKyAgICAgICAgbmVlZHNMdW1pbm9zaXR5SGVscGVyRnVuY3Rpb25zID0gdHJ1ZTsKKyAgICAg
ICAgYmxlbmRDb2xvckV4cHJlc3Npb24gPSAiY3NzX1NldEx1bShDYiwgY3NzX0x1bShDcykpIjsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBCbGVuZE1vZGVIdWU6CisgICAgICAgIG5lZWRzTHVt
aW5vc2l0eUhlbHBlckZ1bmN0aW9ucyA9IHRydWU7CisgICAgICAgIG5lZWRzU2F0dXJhdGlvbkhl
bHBlckZ1bmN0aW9ucyA9IHRydWU7CisgICAgICAgIGJsZW5kQ29sb3JFeHByZXNzaW9uID0gImNz
c19TZXRMdW0oY3NzX1NldFNhdChDcywgY3NzX1NhdChDYikpLCBjc3NfTHVtKENiKSkiOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEJsZW5kTW9kZVNhdHVyYXRpb246CisgICAgICAgIG5lZWRz
THVtaW5vc2l0eUhlbHBlckZ1bmN0aW9ucyA9IHRydWU7CisgICAgICAgIG5lZWRzU2F0dXJhdGlv
bkhlbHBlckZ1bmN0aW9ucyA9IHRydWU7CisgICAgICAgIGJsZW5kQ29sb3JFeHByZXNzaW9uID0g
ImNzc19TZXRMdW0oY3NzX1NldFNhdChDYiwgY3NzX1NhdChDcykpLCBjc3NfTHVtKENiKSkiOwor
ICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICB9CisKKyAgICBpZiAobmVlZHNMdW1pbm9zaXR5SGVscGVyRnVuY3Rpb25zKSB7Cisg
ICAgICAgIGJsZW5kRnVuY3Rpb25TdHJpbmcuYXBwZW5kKFNIQURFUigKKyAgICAgICAgICAgIG1l
ZGl1bXAgZmxvYXQgY3NzX0x1bShtZWRpdW1wIHZlYzMgQykKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gMC4zICogQy5yICsgMC41OSAqIEMuZyArIDAuMTEgKiBDLmI7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBtZWRpdW1wIHZlYzMgY3NzX0NsaXBDb2xvcihtZWRp
dW1wIHZlYzMgQykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtZWRpdW1wIGZsb2F0
IEwgPSBjc3NfTHVtKEMpOworICAgICAgICAgICAgICAgIG1lZGl1bXAgZmxvYXQgbiA9IG1pbiht
aW4oQy5yLCBDLmcpLCBDLmIpOworICAgICAgICAgICAgICAgIG1lZGl1bXAgZmxvYXQgeCA9IG1h
eChtYXgoQy5yLCBDLmcpLCBDLmIpOworICAgICAgICAgICAgICAgIGlmIChuIDwgMC4wKQorICAg
ICAgICAgICAgICAgICAgICBDID0gTCArICgoKEMgLSBMKSAqIEwpIC8gKEwgLSBuKSk7CisgICAg
ICAgICAgICAgICAgaWYgKHggPiAxLjApCisgICAgICAgICAgICAgICAgICAgIEMgPSBMICsgKCgo
QyAtIEwpICogKDEuMCAtIEwpIC8gKHggLSBMKSkpOworICAgICAgICAgICAgICAgIHJldHVybiBD
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgbWVkaXVtcCB2ZWMzIGNzc19TZXRMdW0obWVk
aXVtcCB2ZWMzIEMsIG1lZGl1bXAgZmxvYXQgbCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBDICs9IGwgLSBjc3NfTHVtKEMpOworICAgICAgICAgICAgICAgIHJldHVybiBjc3NfQ2xp
cENvbG9yKEMpOworICAgICAgICAgICAgfQorICAgICAgICApKTsKKyAgICB9CisKKyAgICBpZiAo
bmVlZHNTYXR1cmF0aW9uSGVscGVyRnVuY3Rpb25zKSB7CisgICAgICAgIGJsZW5kRnVuY3Rpb25T
dHJpbmcuYXBwZW5kKFNIQURFUigKKyAgICAgICAgICAgIG1lZGl1bXAgZmxvYXQgY3NzX1NhdCht
ZWRpdW1wIHZlYzMgQykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtZWRpdW1wIGZs
b2F0IGNNaW4gPSBtaW4obWluKEMuciwgQy5nKSwgQy5iKTsKKyAgICAgICAgICAgICAgICBtZWRp
dW1wIGZsb2F0IGNNYXggPSBtYXgobWF4KEMuciwgQy5nKSwgQy5iKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gY01heCAtIGNNaW47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2b2lkIGNz
c19TZXRTYXRIZWxwZXIoaW5vdXQgbWVkaXVtcCBmbG9hdCBjTWluLCBpbm91dCBtZWRpdW1wIGZs
b2F0IGNNaWQsIGlub3V0IG1lZGl1bXAgZmxvYXQgY01heCwgbWVkaXVtcCBmbG9hdCBzKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChjTWF4ID4gY01pbikgeworICAgICAgICAg
ICAgICAgICAgICBjTWlkID0gKCgoY01pZCAtIGNNaW4pICogcykgLyAoY01heCAtIGNNaW4pKTsK
KyAgICAgICAgICAgICAgICAgICAgY01heCA9IHM7CisgICAgICAgICAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICAgICAgICAgIGNNaWQgPSBjTWF4ID0gMC4wOworICAgICAgICAgICAgICAgIGNN
aW4gPSAwLjA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtZWRpdW1wIHZlYzMgY3NzX1Nl
dFNhdChtZWRpdW1wIHZlYzMgQywgbWVkaXVtcCBmbG9hdCBzKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGlmIChDLnIgPD0gQy5nKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChD
LmcgPD0gQy5iKQorICAgICAgICAgICAgICAgICAgICAgICAgY3NzX1NldFNhdEhlbHBlcihDLnIs
IEMuZywgQy5iLCBzKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoQy5yIDw9IEMuYikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
c3NfU2V0U2F0SGVscGVyKEMuciwgQy5iLCBDLmcsIHMpOworICAgICAgICAgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzc19TZXRTYXRIZWxwZXIoQy5i
LCBDLnIsIEMuZywgcyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoQy5yIDw9IEMuYikKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNzc19TZXRTYXRIZWxwZXIoQy5nLCBDLnIsIEMuYiwgcyk7CisgICAgICAg
ICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEMuZyA8PSBD
LmIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzX1NldFNhdEhlbHBlcihDLmcsIEMu
YiwgQy5yLCBzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjc3NfU2V0U2F0SGVscGVyKEMuYiwgQy5nLCBDLnIsIHMpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVy
biBDOworICAgICAgICAgICAgfQorICAgICAgICApKTsKKyAgICB9CisKKyAgICBibGVuZEZ1bmN0
aW9uU3RyaW5nLmFwcGVuZChTdHJpbmc6OmZvcm1hdChTSEFERVIoCisgICAgICAgIG1lZGl1bXAg
ZmxvYXQgY3NzX0JsZW5kQ29tcG9uZW50KG1lZGl1bXAgZmxvYXQgQ2IsIG1lZGl1bXAgZmxvYXQg
Q3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1lZGl1bXAgZmxvYXQgQ287CisgICAgICAgICAg
ICAlcworICAgICAgICAgICAgcmV0dXJuIENvOworICAgICAgICB9CisgICAgICAgIG1lZGl1bXAg
dmVjMyBjc3NfQmxlbmRDb2xvcihtZWRpdW1wIHZlYzMgQ2IsIG1lZGl1bXAgdmVjMyBDcykKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuICVzOworICAgICAgICB9CisgICAgKSwgYmxlbmRD
b21wb25lbnRFeHByZXNzaW9uLCBibGVuZENvbG9yRXhwcmVzc2lvbikpOworCisgICAgcmV0dXJu
IGJsZW5kRnVuY3Rpb25TdHJpbmc7Cit9CisKK3N0YXRpYyBTdHJpbmcgY29tcG9zaXRlRnVuY3Rp
b25TdHJpbmcoQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IpCit7CisgICAgLy8g
VXNlIHRoZSBzYW1lIHN5bWJvbCBuYW1lcyBhcyB0aGUgQ29tcG9zaXRpbmcgYW5kIEJsZW5kaW5n
IHNwZWM6CisgICAgLy8gaHR0cHM6Ly9kdmNzLnczLm9yZy9oZy9GWFRGL3Jhd2ZpbGUvdGlwL2Nv
bXBvc2l0aW5nL2luZGV4Lmh0bWwjYmxlbmRpbmdub3JtYWwKKyAgICAvLyBDczogaXMgdGhlIHNv
dXJjZSBjb2xvcgorICAgIC8vIENiOiBpcyB0aGUgYmFja2Ryb3AgY29sb3IKKyAgICAvLyBhczog
aXMgdGhlIHNvdXJjZSBhbHBoYQorICAgIC8vIGFiOiBpcyB0aGUgYmFja2Ryb3AgYWxwaGEKKyAg
ICAvLyBGYTogaXMgZGVmaW5lZCBieSB0aGUgUG9ydGVyIER1ZmYgb3BlcmF0b3IgaW4gdXNlCisg
ICAgLy8gRmI6IGlzIGRlZmluZWQgYnkgdGhlIFBvcnRlciBEdWZmIG9wZXJhdG9yIGluIHVzZQor
ICAgIGNvbnN0IGNoYXIqIEZhID0gMDsKKyAgICBjb25zdCBjaGFyKiBGYiA9IDA7CisgICAgc3dp
dGNoIChjb21wb3NpdGVPcGVyYXRvcikgeworICAgIGNhc2UgQ29tcG9zaXRlU291cmNlQXRvcDoK
KyAgICAgICAgRmEgPSAiYWIiOworICAgICAgICBGYiA9ICIxLjAgLSBhcyI7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQ29tcG9zaXRlQ2xlYXI6CisgICAgICAgIEZhID0gIjAuMCI7CisgICAg
ICAgIEZiID0gIjAuMCI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29tcG9zaXRlQ29weToK
KyAgICAgICAgRmEgPSAiMS4wIjsKKyAgICAgICAgRmIgPSAiMC4wIjsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBDb21wb3NpdGVTb3VyY2VPdmVyOgorICAgICAgICBGYSA9ICIxLjAiOworICAg
ICAgICBGYiA9ICIxLjAgLSBhcyI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29tcG9zaXRl
U291cmNlSW46CisgICAgICAgIEZhID0gImFiIjsKKyAgICAgICAgRmIgPSAiMC4wIjsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBDb21wb3NpdGVTb3VyY2VPdXQ6CisgICAgICAgIEZhID0gIjEu
MCAtIGFiIjsKKyAgICAgICAgRmIgPSAiMC4wIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBD
b21wb3NpdGVEZXN0aW5hdGlvbk92ZXI6CisgICAgICAgIEZhID0gIjEuMCAtIGFiIjsKKyAgICAg
ICAgRmIgPSAiMS4wIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb21wb3NpdGVEZXN0aW5h
dGlvbkluOgorICAgICAgICBGYSA9ICIwLjAiOworICAgICAgICBGYiA9ICJhcyI7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQ29tcG9zaXRlRGVzdGluYXRpb25PdXQ6CisgICAgICAgIEZhID0g
IjAuMCI7CisgICAgICAgIEZiID0gIjEuMCAtIGFzIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBDb21wb3NpdGVEZXN0aW5hdGlvbkF0b3A6CisgICAgICAgIEZhID0gIjEuMCAtIGFiIjsKKyAg
ICAgICAgRmIgPSAiYXMiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbXBvc2l0ZVhPUjoK
KyAgICAgICAgRmEgPSAiMS4wIC0gYWIiOworICAgICAgICBGYiA9ICIxLjAgLSBhcyI7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQ29tcG9zaXRlUGx1c0xpZ2h0ZXI6CisgICAgICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBkZWZhdWx0OgorICAg
ICAgICAvLyBUaGUgQ1NTIHBhcnNlciBzaG91bGQgbm90IGhhdmUgYWNjZXB0ZWQgYW55IG90aGVy
IGNvbXBvc2l0ZSBvcGVyYXRvcnMuCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgfQorCisgICAgQVNTRVJUKEZhICYmIEZiKTsKKyAg
ICAvLyBVc2UgdGhlIGdlbmVyYWwgZm9ybXVsYSBmb3IgY29tcG9zaXRpbmcsIGxpZnRlZCBmcm9t
IHRoZSBzcGVjOgorICAgIC8vIGh0dHBzOi8vZHZjcy53My5vcmcvaGcvRlhURi9yYXdmaWxlL3Rp
cC9jb21wb3NpdGluZy9pbmRleC5odG1sI2dlbmVyYWxmb3JtdWxhCisgICAgcmV0dXJuIFN0cmlu
Zzo6Zm9ybWF0KFNIQURFUigKKyAgICAgICAgbWVkaXVtcCB2ZWM0IGNzc19Db21wb3NpdGUobWVk
aXVtcCB2ZWMzIENiLCBtZWRpdW1wIGZsb2F0IGFiLCBtZWRpdW1wIHZlYzMgQ3MsIG1lZGl1bXAg
ZmxvYXQgYXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1lZGl1bXAgZmxvYXQgRmEgPSAlczsK
KyAgICAgICAgICAgIG1lZGl1bXAgZmxvYXQgRmIgPSAlczsKKyAgICAgICAgICAgIHJldHVybiB2
ZWM0KGFzICogRmEgKiBDcyArIGFiICogRmIgKiBDYiwgYXMgKiBGYSArIGFiICogRmIpOyAKKyAg
ICAgICAgfQorICAgICksIEZhLCBGYik7Cit9CisKK3N0YXRpYyBTdHJpbmcgcmV3cml0ZU1peFZl
cnRleFNoYWRlcihjb25zdCBTdHJpbmcmIHZlcnRleFNoYWRlclN0cmluZywgY29uc3QgVmVjdG9y
PEFOR0xFU2hhZGVyU3ltYm9sPiYgc3ltYm9scykKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxk
ZXI7CisgICAgYnVpbGRlci5hcHBlbmQodmVydGV4U2hhZGVyU3RyaW5nKTsKKworICAgIC8vIElm
IHRoZSBhdXRob3IgZGVmaW5lZCBhX3RleENvb3JkLCB3ZSBjYW4gdXNlIGl0IHRvIHNodXR0bGUg
dGhlIHRleHR1cmUgY29vcmRpbmF0ZSB0byB0aGUgZnJhZ21lbnQgc2hhZGVyLgorICAgIC8vIE5v
dGUgdGhhdCB2ZXJ0ZXggYXR0cmlidXRlcyBhcmUgcmVhZC1vbmx5IGluIEdMU0wsIHNvIHRoZSBh
dXRob3IgY291bGQgbm90IGhhdmUgY2hhbmdlZCBhX3RleENvb3JkJ3MgdmFsdWUuCisgICAgLy8g
QWxzbywgbm90ZSB0aGF0IHdlIHdvdWxkIGhhdmUgYWxyZWFkeSByZWplY3RlZCB0aGUgc2hhZGVy
IGlmIHRoZSBhdXRob3IgZGVmaW5lZCBhX3RleENvb3JkIHdpdGggdGhlIHdyb25nIHR5cGUuCisg
ICAgYm9vbCB0ZXhDb29yZEF0dHJpYnV0ZURlZmluZWQgPSBmYWxzZTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHN5bWJvbHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKHN5bWJvbHNb
aV0ubmFtZSA9PSAiYV90ZXhDb29yZCIpCisgICAgICAgICAgICB0ZXhDb29yZEF0dHJpYnV0ZURl
ZmluZWQgPSB0cnVlOworICAgIH0KKworICAgIGlmICghdGV4Q29vcmRBdHRyaWJ1dGVEZWZpbmVk
KQorICAgICAgICBidWlsZGVyLmFwcGVuZCgiYXR0cmlidXRlIG1lZGl1bXAgdmVjMiBhX3RleENv
b3JkOyIpOworCisgICAgLy8gRHVyaW5nIHZhbGlkYXRpb24sIEFOR0xFIHJlbmFtZWQgdGhlIGF1
dGhvcidzICJtYWluIiBmdW5jdGlvbiB0byAiY3NzX21haW4iLgorICAgIC8vIFdlIHdyaXRlIG91
ciBvd24gIm1haW4iIGZ1bmN0aW9uIGFuZCBjYWxsICJjc3NfbWFpbiIgZnJvbSBpdC4KKyAgICAv
LyBUaGlzIG1ha2VzIHJld3JpdGluZyBlYXN5IGFuZCBlbnN1cmVzIHRoYXQgb3VyIGNvZGUgcnVu
cyBhZnRlciBhbGwgYXV0aG9yIGNvZGUuCisgICAgYnVpbGRlci5hcHBlbmQoU0hBREVSKAorICAg
ICAgICB2YXJ5aW5nIG1lZGl1bXAgdmVjMiBjc3Nfdl90ZXhDb29yZDsKKworICAgICAgICB2b2lk
IG1haW4oKQorICAgICAgICB7CisgICAgICAgICAgICBjc3NfbWFpbigpOworICAgICAgICAgICAg
Y3NzX3ZfdGV4Q29vcmQgPSBhX3RleENvb3JkOworICAgICAgICB9CisgICAgKSk7CisKKyAgICBy
ZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworfQorCitzdGF0aWMgU3RyaW5nIHJld3JpdGVNaXhG
cmFnbWVudFNoYWRlcihjb25zdCBTdHJpbmcmIGZyYWdtZW50U2hhZGVyU3RyaW5nLCBjb25zdCBD
dXN0b21GaWx0ZXJQcm9ncmFtTWl4U2V0dGluZ3MmIG1peFNldHRpbmdzKQoreworICAgIFN0cmlu
Z0J1aWxkZXIgYnVpbGRlcjsKKworICAgIC8vIEFOR0xFIGNvbnNpZGVyZWQgdGhlc2Ugc3ltYm9s
cyBhcyBidWlsdC1pbnMgZHVyaW5nIHZhbGlkYXRpb24gdW5kZXIgdGhlIFNIX0NTU19TSEFERVJT
X1NQRUMgZmxhZy4KKyAgICAvLyBOb3csIHdlIGhhdmUgdG8gZGVmaW5lIHRoZXNlIHN5bWJvbHMg
aW4gb3JkZXIgdG8gbWFrZSB0aGlzIHNoYWRlciB2YWxpZCBHTFNMLgorICAgIC8vIFdlIGRlZmlu
ZSB0aGVzZSBzeW1ib2xzIGJlZm9yZSB0aGUgYXV0aG9yJ3Mgc2hhZGVyIGNvZGUsIHdoaWNoIG1h
a2VzIHRoZW0gYWNjZXNzaWJsZSB0byBhdXRob3IgY29kZS4KKyAgICBidWlsZGVyLmFwcGVuZChT
SEFERVIoCisgICAgICAgIG1lZGl1bXAgdmVjNCBjc3NfTWl4Q29sb3IgPSB2ZWM0KDAuMCk7Cisg
ICAgICAgIG1lZGl1bXAgbWF0NCBjc3NfQ29sb3JNYXRyaXggPSBtYXQ0KDEuMCk7CisgICAgKSk7
CisKKyAgICBidWlsZGVyLmFwcGVuZChmcmFnbWVudFNoYWRlclN0cmluZyk7CisgICAgYnVpbGRl
ci5hcHBlbmQoYmxlbmRGdW5jdGlvblN0cmluZyhtaXhTZXR0aW5ncy5ibGVuZE1vZGUpKTsKKyAg
ICBidWlsZGVyLmFwcGVuZChjb21wb3NpdGVGdW5jdGlvblN0cmluZyhtaXhTZXR0aW5ncy5jb21w
b3NpdGVPcGVyYXRvcikpOworCisgICAgLy8gV2UgZGVmaW5lIHN5bWJvbHMgbGlrZSAiY3NzX3Vf
dGV4dHVyZSIgYWZ0ZXIgdGhlIGF1dGhvcidzIHNoYWRlciBjb2RlLCB3aGljaCBtYWtlcyB0aGVt
IGluYWNjZXNzaWJsZSB0byBhdXRob3IgY29kZS4KKyAgICAvLyBJbiBwYXJ0aWN1bGFyLCAiY3Nz
X3VfdGV4dHVyZSIgcmVwcmVzZW50cyB0aGUgRE9NIGVsZW1lbnQgdGV4dHVyZSwgc28gaXQncyBp
bXBvcnRhbnQgdG8ga2VlcCBpdCBpbmFjY2Vzc2libGUgdG8KKyAgICAvLyBhdXRob3IgY29kZSBm
b3Igc2VjdXJpdHkgcmVhc29ucy4KKyAgICBidWlsZGVyLmFwcGVuZChTSEFERVIoCisgICAgICAg
IHVuaWZvcm0gc2FtcGxlcjJEIGNzc191X3RleHR1cmU7CisgICAgICAgIHZhcnlpbmcgbWVkaXVt
cCB2ZWMyIGNzc192X3RleENvb3JkOworCisgICAgICAgIHZvaWQgbWFpbigpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGNzc19tYWluKCk7CisgICAgICAgICAgICBtZWRpdW1wIHZlYzQgb3JpZ2lu
YWxDb2xvciA9IHRleHR1cmUyRChjc3NfdV90ZXh0dXJlLCBjc3Nfdl90ZXhDb29yZCk7CisgICAg
ICAgICAgICBtZWRpdW1wIHZlYzQgbXVsdGlwbGllZENvbG9yID0gY2xhbXAoY3NzX0NvbG9yTWF0
cml4ICogb3JpZ2luYWxDb2xvciwgMC4wLCAxLjApOworICAgICAgICAgICAgbWVkaXVtcCB2ZWM0
IGNsYW1wZWRNaXhDb2xvciA9IGNsYW1wKGNzc19NaXhDb2xvciwgMC4wLCAxLjApOworICAgICAg
ICAgICAgbWVkaXVtcCB2ZWMzIGJsZW5kZWRDb2xvciA9IGNzc19CbGVuZENvbG9yKG11bHRpcGxp
ZWRDb2xvci5yZ2IsIGNsYW1wZWRNaXhDb2xvci5yZ2IpOworICAgICAgICAgICAgbWVkaXVtcCB2
ZWMzIHdlaWdodGVkQ29sb3IgPSAoMS4wIC0gbXVsdGlwbGllZENvbG9yLmEpICogY2xhbXBlZE1p
eENvbG9yLnJnYiArIG11bHRpcGxpZWRDb2xvci5hICogYmxlbmRlZENvbG9yOworICAgICAgICAg
ICAgZ2xfRnJhZ0NvbG9yID0gY3NzX0NvbXBvc2l0ZShtdWx0aXBsaWVkQ29sb3IucmdiLCBtdWx0
aXBsaWVkQ29sb3IuYSwgd2VpZ2h0ZWRDb2xvci5yZ2IsIGNsYW1wZWRNaXhDb2xvci5hKTsKKyAg
ICAgICAgfQorICAgICkpOworCisgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKK30KKwor
dHlwZWRlZiBIYXNoTWFwPFN0cmluZywgU2hEYXRhVHlwZT4gU3ltYm9sTmFtZVRvVHlwZU1hcDsK
Kworc3RhdGljIFN5bWJvbE5hbWVUb1R5cGVNYXAqIGJ1aWx0SW5BdHRyaWJ1dGVOYW1lVG9UeXBl
TWFwKCkKK3sKKyAgICBzdGF0aWMgU3ltYm9sTmFtZVRvVHlwZU1hcCogbmFtZVRvVHlwZU1hcCA9
IDA7CisgICAgaWYgKCFuYW1lVG9UeXBlTWFwKSB7CisgICAgICAgIG5hbWVUb1R5cGVNYXAgPSBu
ZXcgU3ltYm9sTmFtZVRvVHlwZU1hcDsgICAgICAgIAorICAgICAgICBuYW1lVG9UeXBlTWFwLT5z
ZXQoImFfbWVzaENvb3JkIiwgU0hfRkxPQVRfVkVDMik7CisgICAgICAgIG5hbWVUb1R5cGVNYXAt
PnNldCgiYV9wb3NpdGlvbiIsIFNIX0ZMT0FUX1ZFQzQpOworICAgICAgICBuYW1lVG9UeXBlTWFw
LT5zZXQoImFfdGV4Q29vcmQiLCBTSF9GTE9BVF9WRUMyKTsKKyAgICAgICAgbmFtZVRvVHlwZU1h
cC0+c2V0KCJhX3RyaWFuZ2xlQ29vcmQiLCBTSF9GTE9BVF9WRUMzKTsKKyAgICB9CisgICAgcmV0
dXJuIG5hbWVUb1R5cGVNYXA7Cit9CisKK3N0YXRpYyBTeW1ib2xOYW1lVG9UeXBlTWFwKiBidWls
dEluVW5pZm9ybU5hbWVUb1R5cGVNYXAoKQoreworICAgIHN0YXRpYyBTeW1ib2xOYW1lVG9UeXBl
TWFwKiBuYW1lVG9UeXBlTWFwID0gMDsKKyAgICBpZiAoIW5hbWVUb1R5cGVNYXApIHsKKyAgICAg
ICAgbmFtZVRvVHlwZU1hcCA9IG5ldyBTeW1ib2xOYW1lVG9UeXBlTWFwOworICAgICAgICBuYW1l
VG9UeXBlTWFwLT5zZXQoInVfbWVzaEJveCIsIFNIX0ZMT0FUX1ZFQzQpOworICAgICAgICBuYW1l
VG9UeXBlTWFwLT5zZXQoInVfbWVzaFNpemUiLCBTSF9GTE9BVF9WRUMyKTsKKyAgICAgICAgbmFt
ZVRvVHlwZU1hcC0+c2V0KCJ1X3Byb2plY3Rpb25NYXRyaXgiLCBTSF9GTE9BVF9NQVQ0KTsKKyAg
ICAgICAgbmFtZVRvVHlwZU1hcC0+c2V0KCJ1X3RleHR1cmVTaXplIiwgU0hfRkxPQVRfVkVDMik7
CisgICAgICAgIG5hbWVUb1R5cGVNYXAtPnNldCgidV90aWxlU2l6ZSIsIFNIX0ZMT0FUX1ZFQzIp
OworICAgIH0KKyAgICByZXR1cm4gbmFtZVRvVHlwZU1hcDsKK30KKworc3RhdGljIGJvb2wgdmFs
aWRhdGVTeW1ib2xzKGNvbnN0IFZlY3RvcjxBTkdMRVNoYWRlclN5bWJvbD4mIHN5bWJvbHMsIEN1
c3RvbUZpbHRlck1lc2hUeXBlIG1lc2hUeXBlKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgc3ltYm9scy5zaXplKCk7ICsraSkgeworICAgICAgICBjb25zdCBBTkdMRVNoYWRlclN5bWJv
bCYgc3ltYm9sID0gc3ltYm9sc1tpXTsKKyAgICAgICAgc3dpdGNoIChzeW1ib2wuc3ltYm9sVHlw
ZSkgeworICAgICAgICBjYXNlIFNIQURFUl9TWU1CT0xfVFlQRV9BVFRSSUJVVEU6IHsKKyAgICAg
ICAgICAgIFN5bWJvbE5hbWVUb1R5cGVNYXAqIGF0dHJpYnV0ZU5hbWVUb1R5cGVNYXAgPSBidWls
dEluQXR0cmlidXRlTmFtZVRvVHlwZU1hcCgpOworICAgICAgICAgICAgU3ltYm9sTmFtZVRvVHlw
ZU1hcDo6aXRlcmF0b3IgYnVpbHRJbkF0dHJpYnV0ZSA9IGF0dHJpYnV0ZU5hbWVUb1R5cGVNYXAt
PmZpbmQoc3ltYm9sLm5hbWUpOworICAgICAgICAgICAgaWYgKGJ1aWx0SW5BdHRyaWJ1dGUgPT0g
YXR0cmlidXRlTmFtZVRvVHlwZU1hcC0+ZW5kKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUg
YXV0aG9yIGRlZmluZWQgYSBjdXN0b20gYXR0cmlidXRlLgorICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiBSZXBvcnQgdGhlIHZhbGlkYXRpb24gZXJyb3IuCisgICAgICAgICAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0NDE2CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1lc2hUeXBl
ID09IE1lc2hUeXBlQXR0YWNoZWQgJiYgc3ltYm9sLm5hbWUgPT0gImFfdHJpYW5nbGVDb29yZCIp
IHsKKyAgICAgICAgICAgICAgICAvLyBhX3RyaWFuZ2xlQ29vcmQgaXMgb25seSBhdmFpbGFibGUg
Zm9yIGRldGFjaGVkIG1lc2hlcy4KKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogUmVwb3J0IHRo
ZSB2YWxpZGF0aW9uIGVycm9yLgorICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDQxNgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzeW1ib2wuZGF0YVR5cGUgIT0gYnVp
bHRJbkF0dHJpYnV0ZS0+dmFsdWUpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgYXV0aG9yIGRl
ZmluZWQgb25lIG9mIHRoZSBidWlsdC1pbiBhdHRyaWJ1dGVzIHdpdGggdGhlIHdyb25nIHR5cGUu
CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFJlcG9ydCB0aGUgdmFsaWRhdGlvbiBlcnJvci4K
KyAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NzQ0MTYKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFNIQURFUl9TWU1CT0xf
VFlQRV9VTklGT1JNOiB7CisgICAgICAgICAgICBpZiAoc3ltYm9sLmlzU2FtcGxlcigpKSB7Cisg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IEZvciBub3csIHdlIHJlc3RyaWN0IHNoYWRlcnMgd2l0
aCBhbnkgc2FtcGxlciBkZWZpbmVkLgorICAgICAgICAgICAgICAgIC8vIFdoZW4gd2UgaW1wbGVt
ZW50IHRleHR1cmUgcGFyYW1ldGVycywgd2Ugd2lsbCBhbGxvdyBzaGFkZXJzIHdob3NlIHNhbXBs
ZXJzIGFyZSBib3VuZCB0byB2YWxpZCB0ZXh0dXJlcy4KKyAgICAgICAgICAgICAgICAvLyBXZSBt
dXN0IG5vdCBhbGxvdyBPcGVuR0wgdG8gZ2l2ZSB1bmJvdW5kIHNhbXBsZXJzIGEgZGVmYXVsdCB2
YWx1ZSBvZiAwIGJlY2F1c2UgdGhhdCByZWZlcmVuY2VzIHRoZSBlbGVtZW50IHRleHR1cmUsCisg
ICAgICAgICAgICAgICAgLy8gd2hpY2ggc2hvdWxkIGJlIGluYWNjZXNzaWJsZSB0byB0aGUgYXV0
aG9yJ3Mgc2hhZGVyIGNvZGUuCisgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTk2MjMwCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBTeW1ib2xOYW1lVG9UeXBlTWFwKiB1bmlm
b3JtTmFtZVRvVHlwZU1hcCA9IGJ1aWx0SW5Vbmlmb3JtTmFtZVRvVHlwZU1hcCgpOworICAgICAg
ICAgICAgU3ltYm9sTmFtZVRvVHlwZU1hcDo6aXRlcmF0b3IgYnVpbHRJblVuaWZvcm0gPSB1bmlm
b3JtTmFtZVRvVHlwZU1hcC0+ZmluZChzeW1ib2wubmFtZSk7CisgICAgICAgICAgICBpZiAoYnVp
bHRJblVuaWZvcm0gIT0gdW5pZm9ybU5hbWVUb1R5cGVNYXAtPmVuZCgpICYmIChzeW1ib2wuaXNB
cnJheSB8fCBzeW1ib2wuZGF0YVR5cGUgIT0gYnVpbHRJblVuaWZvcm0tPnZhbHVlKSkgeworICAg
ICAgICAgICAgICAgIC8vIFRoZSBhdXRob3IgZGVmaW5lZCBvbmUgb2YgdGhlIGJ1aWx0LWluIHVu
aWZvcm1zIHdpdGggdGhlIHdyb25nIHR5cGUuCisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFJl
cG9ydCB0aGUgdmFsaWRhdGlvbiBlcnJvci4KKyAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ0MTYKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIEN1c3RvbUZpbHRlclZhbGlkYXRvcjo6dmFsaWRhdGVTaGFkZXJTdHJpbmdzKGNvbnN0
IEN1c3RvbUZpbHRlclByb2dyYW0qIHByb2dyYW0sIFN0cmluZyYgdmFsaWRhdGVkVmVydGV4U2hh
ZGVyU3RyaW5nLCBTdHJpbmcmIHZhbGlkYXRlZEZyYWdtZW50U2hhZGVyU3RyaW5nKQoreworICAg
IFN0cmluZyBvcmlnaW5hbFZlcnRleFNoYWRlciA9IHByb2dyYW0tPnZlcnRleFNoYWRlclN0cmlu
ZygpOworICAgIGlmIChvcmlnaW5hbFZlcnRleFNoYWRlci5pc051bGwoKSkKKyAgICAgICAgb3Jp
Z2luYWxWZXJ0ZXhTaGFkZXIgPSBkZWZhdWx0VmVydGV4U2hhZGVyU3RyaW5nKCk7CisKKyAgICBT
dHJpbmcgb3JpZ2luYWxGcmFnbWVudFNoYWRlciA9IHByb2dyYW0tPmZyYWdtZW50U2hhZGVyU3Ry
aW5nKCk7CisgICAgaWYgKG9yaWdpbmFsRnJhZ21lbnRTaGFkZXIuaXNOdWxsKCkpCisgICAgICAg
IG9yaWdpbmFsRnJhZ21lbnRTaGFkZXIgPSBkZWZhdWx0RnJhZ21lbnRTaGFkZXJTdHJpbmcoKTsK
KworICAgIC8vIFNoYWRlcnMgdGhhdCB1c2UgYmxlbmRpbmcgYW5kIGNvbXBvc2l0aW5nIHVzZSBh
IGRpZmZlcmVudCB2YWxpZGF0b3IgdGhhbiByZWd1bGFyIFdlYkdMIHNoYWRlcnMuCisgICAgYm9v
bCBibGVuZHNFbGVtZW50VGV4dHVyZSA9IChwcm9ncmFtLT5wcm9ncmFtVHlwZSgpID09IFBST0dS
QU1fVFlQRV9CTEVORFNfRUxFTUVOVF9URVhUVVJFKTsKKyAgICBBTkdMRVdlYktpdEJyaWRnZSog
dmFsaWRhdG9yID0gYmxlbmRzRWxlbWVudFRleHR1cmUgPyBtaXhTaGFkZXJWYWxpZGF0b3IoKSA6
IHdlYmdsU2hhZGVyVmFsaWRhdG9yKCk7CisgICAgVmVjdG9yPEFOR0xFU2hhZGVyU3ltYm9sPiBz
eW1ib2xzOworCisgICAgU3RyaW5nIGFuZ2xlVmVydGV4U2hhZGVyU3RyaW5nLCB2ZXJ0ZXhTaGFk
ZXJMb2c7CisgICAgYm9vbCB2ZXJ0ZXhTaGFkZXJWYWxpZCA9IHZhbGlkYXRvci0+Y29tcGlsZVNo
YWRlclNvdXJjZShvcmlnaW5hbFZlcnRleFNoYWRlci51dGY4KCkuZGF0YSgpLCBTSEFERVJfVFlQ
RV9WRVJURVgsIGFuZ2xlVmVydGV4U2hhZGVyU3RyaW5nLCB2ZXJ0ZXhTaGFkZXJMb2csIHN5bWJv
bHMpOworCisgICAgU3RyaW5nIGFuZ2xlRnJhZ21lbnRTaGFkZXJTdHJpbmcsIGZyYWdtZW50U2hh
ZGVyTG9nOworICAgIGJvb2wgZnJhZ21lbnRTaGFkZXJWYWxpZCA9IHZhbGlkYXRvci0+Y29tcGls
ZVNoYWRlclNvdXJjZShvcmlnaW5hbEZyYWdtZW50U2hhZGVyLnV0ZjgoKS5kYXRhKCksIFNIQURF
Ul9UWVBFX0ZSQUdNRU5ULCBhbmdsZUZyYWdtZW50U2hhZGVyU3RyaW5nLCBmcmFnbWVudFNoYWRl
ckxvZywgc3ltYm9scyk7CisKKyAgICBpZiAoIXZlcnRleFNoYWRlclZhbGlkIHx8ICFmcmFnbWVu
dFNoYWRlclZhbGlkKSB7CisgICAgICAgIC8vIEZJWE1FOiBSZXBvcnQgdGhlIHZhbGlkYXRpb24g
ZXJyb3JzLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NzQ0MTYKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghdmFsaWRh
dGVTeW1ib2xzKHN5bWJvbHMsIHByb2dyYW0tPm1lc2hUeXBlKCkpKSB7CisgICAgICAgIC8vIEZJ
WE1FOiBSZXBvcnQgdmFsaWRhdGlvbiBlcnJvcnMuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDQxNgorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgLy8gV2UgbmVlZCB0byBhZGQgdGV4dHVyZSBhY2Nlc3MsIGJsZW5kaW5nLCBh
bmQgY29tcG9zaXRpbmcgY29kZSB0byBzaGFkZXJzIHRoYXQgcmVxdWlyZSBpdC4KKyAgICB2YWxp
ZGF0ZWRWZXJ0ZXhTaGFkZXJTdHJpbmcgPSBibGVuZHNFbGVtZW50VGV4dHVyZSA/IHJld3JpdGVN
aXhWZXJ0ZXhTaGFkZXIoYW5nbGVWZXJ0ZXhTaGFkZXJTdHJpbmcsIHN5bWJvbHMpIDogYW5nbGVW
ZXJ0ZXhTaGFkZXJTdHJpbmc7CisgICAgdmFsaWRhdGVkRnJhZ21lbnRTaGFkZXJTdHJpbmcgPSBi
bGVuZHNFbGVtZW50VGV4dHVyZSA/IHJld3JpdGVNaXhGcmFnbWVudFNoYWRlcihhbmdsZUZyYWdt
ZW50U2hhZGVyU3RyaW5nLCBwcm9ncmFtLT5taXhTZXR0aW5ncygpKSA6IGFuZ2xlRnJhZ21lbnRT
aGFkZXJTdHJpbmc7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEVOQUJMRShDU1NfU0hBREVSUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyVmFsaWRhdG9yLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclZh
bGlkYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3ZTFkMGIKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0N1c3RvbUZpbHRlclZhbGlkYXRvci5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQor
ICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xh
aW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiDigJxBUyBJU+KAnSBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRQorICogTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAorICogT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgorICogVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GCisgKiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ3VzdG9tRmlsdGVyVmFsaWRhdG9yX2gKKyNkZWZp
bmUgQ3VzdG9tRmlsdGVyVmFsaWRhdG9yX2gKKworI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKwor
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIEN1c3RvbUZpbHRlclByb2dyYW07CisKKy8vIENsYXNzIGZvciB2YWxpZGF0aW5nIGFu
ZCByZXdyaXRpbmcgc2hhZGVyIHN0cmluZ3MgZm9yIENTUyBDdXN0b20gRmlsdGVycy4KKy8vIERv
IG5vdCBpbnN0YW50aWF0ZSB0aGlzIGNsYXNzLiBVc2UgaXRzIHN0YXRpYyBtZXRob2RzLgorY2xh
c3MgQ3VzdG9tRmlsdGVyVmFsaWRhdG9yIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCB2YWxp
ZGF0ZVNoYWRlclN0cmluZ3MoY29uc3QgQ3VzdG9tRmlsdGVyUHJvZ3JhbSosIFN0cmluZyYgdmFs
aWRhdGVkVmVydGV4U2hhZGVyU3RyaW5nLCBTdHJpbmcmIHZhbGlkYXRlZEZyYWdtZW50U2hhZGVy
U3RyaW5nKTsKK3ByaXZhdGU6CisgICAgQ3VzdG9tRmlsdGVyVmFsaWRhdG9yKCk7Cit9OworCit9
CisKKyNlbmRpZiAvLyBFTkFCTEUoQ1NTX1NIQURFUlMpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXggYzg2ZjdiYi4uZDA2MjEwNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC02MzM0LDggKzYzMzQsNyBA
QCBGaWx0ZXJPcGVyYXRpb25zIFJlbmRlckxheWVyOjpjb21wdXRlRmlsdGVyT3BlcmF0aW9ucyhj
b25zdCBSZW5kZXJTdHlsZSogc3R5bGUpCiAgICAgICAgICAgICBSZWZQdHI8Q3VzdG9tRmlsdGVy
VmFsaWRhdGVkUHJvZ3JhbT4gdmFsaWRhdGVkUHJvZ3JhbSA9IHByb2dyYW0tPnZhbGlkYXRlZFBy
b2dyYW0oKTsKICAgICAgICAgICAgIGlmICghdmFsaWRhdGVkUHJvZ3JhbSkgewogICAgICAgICAg
ICAgICAgIC8vIExhemlseSBjcmVhdGUgYSB2YWxpZGF0ZWQgcHJvZ3JhbSBhbmQgc3RvcmUgaXQg
b24gdGhlIEN1c3RvbUZpbHRlclByb2dyYW0uCi0gICAgICAgICAgICAgICAgQ3VzdG9tRmlsdGVy
R2xvYmFsQ29udGV4dCogZ2xvYmFsQ29udGV4dCA9IHJlbmRlcmVyKCktPnZpZXcoKS0+Y3VzdG9t
RmlsdGVyR2xvYmFsQ29udGV4dCgpOwotICAgICAgICAgICAgICAgIHZhbGlkYXRlZFByb2dyYW0g
PSBDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtOjpjcmVhdGUoZ2xvYmFsQ29udGV4dCwgcHJv
Z3JhbS0+cHJvZ3JhbUluZm8oKSk7CisgICAgICAgICAgICAgICAgdmFsaWRhdGVkUHJvZ3JhbSA9
IEN1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW06OmNyZWF0ZShwcm9ncmFtLmdldCgpKTsKICAg
ICAgICAgICAgICAgICBwcm9ncmFtLT5zZXRWYWxpZGF0ZWRQcm9ncmFtKHZhbGlkYXRlZFByb2dy
YW0pOwogICAgICAgICAgICAgfQogCg==
</data>
<flag name="review"
          id="222319"
          type_id="1"
          status="-"
          setter="achicu"
    />
    <flag name="commit-queue"
          id="222320"
          type_id="3"
          status="-"
          setter="mvujovic"
    />
          </attachment>
      

    </bug>

</bugzilla>