From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on archive.lwn.net X-Spam-Level: X-Spam-Status: No, score=-5.7 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI,SPF_HELO_NONE,SPF_NONE autolearn=unavailable autolearn_force=no version=3.4.2 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by archive.lwn.net (Postfix) with ESMTP id 253717D8AB for ; Tue, 25 Jun 2019 14:23:36 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728247AbfFYOV7 (ORCPT ); Tue, 25 Jun 2019 10:21:59 -0400 Received: from mga09.intel.com ([134.134.136.24]:11384 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728252AbfFYOV4 (ORCPT ); Tue, 25 Jun 2019 10:21:56 -0400 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orsmga102.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 25 Jun 2019 07:21:54 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.63,416,1557212400"; d="scan'208";a="163999718" Received: from syhu-mobl.ccr.corp.intel.com ([10.249.173.95]) by orsmga003.jf.intel.com with ESMTP; 25 Jun 2019 07:21:48 -0700 Message-ID: <1561472500.19713.2.camel@intel.com> Subject: Re: [PATCH v1 04/22] docs: thermal: convert to ReST From: Zhang Rui To: Mauro Carvalho Chehab Cc: Linux Doc Mailing List , Mauro Carvalho Chehab , linux-kernel@vger.kernel.org, Jonathan Corbet , Amit Daniel Kachhap , Viresh Kumar , Javi Merino , Kukjin Kim , Krzysztof Kozlowski , Eduardo Valentin , Daniel Lezcano , linux-pm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, Arjan van de Ven Date: Tue, 25 Jun 2019 22:21:40 +0800 In-Reply-To: <20190625105334.19ae5d12@coco.lan> References: <23fafb70bfc9bd8b7f306f2502617d8f8794eae5.1560891322.git.mchehab+samsung@kernel.org> <1561470011.19713.1.camel@intel.com> <20190625105334.19ae5d12@coco.lan> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.18.5.2-0ubuntu3.2 Mime-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-doc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-doc@vger.kernel.org On 二, 2019-06-25 at 10:53 -0300, Mauro Carvalho Chehab wrote: > Em Tue, 25 Jun 2019 21:40:11 +0800 > Zhang Rui escreveu: > > > > > On 二, 2019-06-18 at 18:05 -0300, Mauro Carvalho Chehab wrote: > > > > > > Rename the thermal documentation files to ReST, add an > > > index for them and adjust in order to produce a nice html > > > output via the Sphinx build system. > > > > > > At its new index.rst, let's add a :orphan: while this is not > > > linked > > > to > > > the main index.rst file, in order to avoid build warnings. > > > > > > Signed-off-by: Mauro Carvalho Chehab > > >    > > Acked-by: Zhang Rui > > > > should I apply this patch or you have a separate tree for all these > > changes? > Feel free to apply it directly to your tree. The patches on this > series are pretty much independent. > okay, queued for 5.3-rc1. thanks, rui > > > > > > thanks, > > rui > > > > > > --- > > >  ...pu-cooling-api.txt => cpu-cooling-api.rst} |  39 +- > > >  .../{exynos_thermal => exynos_thermal.rst}    |  47 +- > > >  ...emulation => exynos_thermal_emulation.rst} |  66 +-- > > >  Documentation/thermal/index.rst               |  18 + > > >  ...el_powerclamp.txt => intel_powerclamp.rst} | 177 +++---- > > >  .../{nouveau_thermal => nouveau_thermal.rst}  |  54 +- > > >  ...ower_allocator.txt => power_allocator.rst} | 140 ++--- > > >  .../thermal/{sysfs-api.txt => sysfs-api.rst}  | 490 > > > ++++++++++++-- > > > ---- > > >  ...hermal => x86_pkg_temperature_thermal.rst} |  28 +- > > >  MAINTAINERS                                   |   2 +- > > >  include/linux/thermal.h                       |   4 +- > > >  11 files changed, 665 insertions(+), 400 deletions(-) > > >  rename Documentation/thermal/{cpu-cooling-api.txt => cpu- > > > cooling- > > > api.rst} (82%) > > >  rename Documentation/thermal/{exynos_thermal => > > > exynos_thermal.rst} > > > (67%) > > >  rename Documentation/thermal/{exynos_thermal_emulation => > > > exynos_thermal_emulation.rst} (36%) > > >  create mode 100644 Documentation/thermal/index.rst > > >  rename Documentation/thermal/{intel_powerclamp.txt => > > > intel_powerclamp.rst} (76%) > > >  rename Documentation/thermal/{nouveau_thermal => > > > nouveau_thermal.rst} (64%) > > >  rename Documentation/thermal/{power_allocator.txt => > > > power_allocator.rst} (74%) > > >  rename Documentation/thermal/{sysfs-api.txt => sysfs-api.rst} > > > (66%) > > >  rename Documentation/thermal/{x86_pkg_temperature_thermal => > > > x86_pkg_temperature_thermal.rst} (80%) > > > > > > diff --git a/Documentation/thermal/cpu-cooling-api.txt > > > b/Documentation/thermal/cpu-cooling-api.rst > > > similarity index 82% > > > rename from Documentation/thermal/cpu-cooling-api.txt > > > rename to Documentation/thermal/cpu-cooling-api.rst > > > index 7df567eaea1a..645d914c45a6 100644 > > > --- a/Documentation/thermal/cpu-cooling-api.txt > > > +++ b/Documentation/thermal/cpu-cooling-api.rst > > > @@ -1,5 +1,6 @@ > > > +======================= > > >  CPU cooling APIs How To > > > -=================================== > > > +======================= > > >   > > >  Written by Amit Daniel Kachhap > > >   > > > @@ -8,40 +9,54 @@ Updated: 6 Jan 2015 > > >  Copyright (c)  2012 Samsung Electronics Co., Ltd(http://www.sams > > > ung. > > > com) > > >   > > >  0. Introduction > > > +=============== > > >   > > >  The generic cpu cooling(freq clipping) provides > > > registration/unregistration APIs > > >  to the caller. The binding of the cooling devices to the trip > > > point > > > is left for > > >  the user. The registration APIs returns the cooling device > > > pointer. > > >   > > >  1. cpu cooling APIs > > > +=================== > > >   > > >  1.1 cpufreq registration/unregistration APIs > > > -1.1.1 struct thermal_cooling_device *cpufreq_cooling_register( > > > - struct cpumask *clip_cpus) > > > +-------------------------------------------- > > > + > > > +    :: > > > + > > > + struct thermal_cooling_device > > > + *cpufreq_cooling_register(struct cpumask *clip_cpus) > > >   > > >      This interface function registers the cpufreq cooling device > > > with the name > > >      "thermal-cpufreq-%x". This api can support multiple > > > instances of > > > cpufreq > > >      cooling devices. > > >   > > > -   clip_cpus: cpumask of cpus where the frequency constraints > > > will > > > happen. > > > +   clip_cpus: > > > + cpumask of cpus where the frequency constraints will > > > happen. > > >   > > > -1.1.2 struct thermal_cooling_device > > > *of_cpufreq_cooling_register( > > > - struct cpufreq_policy > > > *policy) > > > +    :: > > > + > > > + struct thermal_cooling_device > > > + *of_cpufreq_cooling_register(struct cpufreq_policy > > > *policy) > > >   > > >      This interface function registers the cpufreq cooling device > > > with > > >      the name "thermal-cpufreq-%x" linking it with a device tree > > > node, in > > >      order to bind it via the thermal DT code. This api can > > > support > > > multiple > > >      instances of cpufreq cooling devices. > > >   > > > -    policy: CPUFreq policy. > > > +    policy: > > > + CPUFreq policy. > > >   > > > -1.1.3 void cpufreq_cooling_unregister(struct > > > thermal_cooling_device > > > *cdev) > > > + > > > +    :: > > > + > > > + void cpufreq_cooling_unregister(struct > > > thermal_cooling_device *cdev) > > >   > > >      This interface function unregisters the "thermal-cpufreq-%x" > > > cooling device. > > >   > > >      cdev: Cooling device pointer which has to be unregistered. > > >   > > >  2. Power models > > > +=============== > > >   > > >  The power API registration functions provide a simple power > > > model > > > for > > >  CPUs.  The current power is calculated as dynamic power (static > > > power isn't > > > @@ -65,9 +80,9 @@ For a given processor implementation the > > > primary > > > factors are: > > >    variation.  In pathological cases this variation can be > > > significant, > > >    but typically it is of a much lesser impact than the factors > > > above. > > >   > > > -A high level dynamic power consumption model may then be > > > represented > > > as: > > > +A high level dynamic power consumption model may then be > > > represented > > > as:: > > >   > > > -Pdyn = f(run) * Voltage^2 * Frequency * Utilisation > > > + Pdyn = f(run) * Voltage^2 * Frequency * Utilisation > > >   > > >  f(run) here represents the described execution behaviour and its > > >  result has a units of Watts/Hz/Volt^2 (this often expressed in > > > @@ -80,9 +95,9 @@ factors.  Therefore, in initial implementation > > > that > > > contribution is > > >  represented as a constant coefficient.  This is a simplification > > >  consistent with the relative contribution to overall power > > > variation. > > >   > > > -In this simplified representation our model becomes: > > > +In this simplified representation our model becomes:: > > >   > > > -Pdyn = Capacitance * Voltage^2 * Frequency * Utilisation > > > + Pdyn = Capacitance * Voltage^2 * Frequency * Utilisation > > >   > > >  Where `capacitance` is a constant that represents an indicative > > >  running time dynamic power coefficient in fundamental units of > > > diff --git a/Documentation/thermal/exynos_thermal > > > b/Documentation/thermal/exynos_thermal.rst > > > similarity index 67% > > > rename from Documentation/thermal/exynos_thermal > > > rename to Documentation/thermal/exynos_thermal.rst > > > index 9010c4416967..5bd556566c70 100644 > > > --- a/Documentation/thermal/exynos_thermal > > > +++ b/Documentation/thermal/exynos_thermal.rst > > > @@ -1,8 +1,11 @@ > > > +======================== > > >  Kernel driver exynos_tmu > > > -================= > > > +======================== > > >   > > >  Supported chips: > > > + > > >  * ARM SAMSUNG EXYNOS4, EXYNOS5 series of SoC > > > + > > >    Datasheet: Not publicly available > > >   > > >  Authors: Donggeun Kim > > > @@ -19,32 +22,39 @@ Temperature can be taken from the temperature > > > code. > > >  There are three equations converting from temperature to > > > temperature > > > code. > > >   > > >  The three equations are: > > > -  1. Two point trimming > > > +  1. Two point trimming:: > > > + > > >   Tc = (T - 25) * (TI2 - TI1) / (85 - 25) + TI1 > > >   > > > -  2. One point trimming > > > +  2. One point trimming:: > > > + > > >   Tc = T + TI1 - 25 > > >   > > > -  3. No trimming > > > +  3. No trimming:: > > > + > > >   Tc = T + 50 > > >   > > > -  Tc: Temperature code, T: Temperature, > > > -  TI1: Trimming info for 25 degree Celsius (stored at TRIMINFO > > > register) > > > +  Tc: > > > +       Temperature code, T: Temperature, > > > +  TI1: > > > +       Trimming info for 25 degree Celsius (stored at TRIMINFO > > > register) > > >         Temperature code measured at 25 degree Celsius which is > > > unchanged > > > -  TI2: Trimming info for 85 degree Celsius (stored at TRIMINFO > > > register) > > > +  TI2: > > > +       Trimming info for 85 degree Celsius (stored at TRIMINFO > > > register) > > >         Temperature code measured at 85 degree Celsius which is > > > unchanged > > >   > > >  TMU(Thermal Management Unit) in EXYNOS4/5 generates interrupt > > >  when temperature exceeds pre-defined levels. > > >  The maximum number of configurable threshold is five. > > > -The threshold levels are defined as follows: > > > +The threshold levels are defined as follows:: > > > + > > >    Level_0: current temperature > trigger_level_0 + threshold > > >    Level_1: current temperature > trigger_level_1 + threshold > > >    Level_2: current temperature > trigger_level_2 + threshold > > >    Level_3: current temperature > trigger_level_3 + threshold > > >   > > > -  The threshold and each trigger_level are set > > > -  through the corresponding registers. > > > +The threshold and each trigger_level are set > > > +through the corresponding registers. > > >   > > >  When an interrupt occurs, this driver notify kernel thermal > > > framework > > >  with the function exynos_report_trigger. > > > @@ -54,24 +64,27 @@ it can be used to synchronize the cooling > > > action. > > >  TMU driver description: > > >  ----------------------- > > >   > > > -The exynos thermal driver is structured as, > > > +The exynos thermal driver is structured as:: > > >   > > >   Kernel Core thermal > > > framework > > >   (thermal_core.c, step_wise.c, > > > cpu_cooling.c) > > >   > > > ^ > > >   > > > | > > >   > > > | > > > -TMU configuration data -------> TMU Driver  <------> Exynos Core > > > thermal wrapper > > > -(exynos_tmu_data.c)       (exynos_tmu.c)    (exyno > > > s_th > > > ermal_common.c) > > > -(exynos_tmu_data.h)       (exynos_tmu.h)    (exyno > > > s_th > > > ermal_common.h) > > > +  TMU configuration data -----> TMU Driver  <----> Exynos Core > > > thermal wrapper > > > +  (exynos_tmu_data.c)       (exynos_tmu.c)    (exy > > > nos_ > > > thermal_common.c) > > > +  (exynos_tmu_data.h)       (exynos_tmu.h)    (exy > > > nos_ > > > thermal_common.h) > > >   > > > -a) TMU configuration data: This consist of TMU register > > > offsets/bitfields > > > +a) TMU configuration data: > > > + This consist of TMU register offsets/bitfields > > >   described through structure > > > exynos_tmu_registers. > > > Also several > > >   other platform data (struct > > > exynos_tmu_platform_data) members > > >   are used to configure the TMU. > > > -b) TMU driver: This component initialises the TMU controller and > > > sets different > > > +b) TMU driver: > > > + This component initialises the TMU controller > > > and > > > sets different > > >   thresholds. It invokes core thermal > > > implementation > > > with the call > > >   exynos_report_trigger. > > > -c) Exynos Core thermal wrapper: This provides 3 wrapper function > > > to > > > use the > > > +c) Exynos Core thermal wrapper: > > > + This provides 3 wrapper function to use the > > >   Kernel core thermal framework. They are > > > exynos_unregister_thermal, > > >   exynos_register_thermal and > > > exynos_report_trigger. > > > diff --git a/Documentation/thermal/exynos_thermal_emulation > > > b/Documentation/thermal/exynos_thermal_emulation.rst > > > similarity index 36% > > > rename from Documentation/thermal/exynos_thermal_emulation > > > rename to Documentation/thermal/exynos_thermal_emulation.rst > > > index b15efec6ca28..c21d10838bc5 100644 > > > --- a/Documentation/thermal/exynos_thermal_emulation > > > +++ b/Documentation/thermal/exynos_thermal_emulation.rst > > > @@ -1,5 +1,6 @@ > > > -EXYNOS EMULATION MODE > > > -======================== > > > +===================== > > > +Exynos Emulation Mode > > > +===================== > > >   > > >  Copyright (C) 2012 Samsung Electronics > > >   > > > @@ -8,46 +9,53 @@ Written by Jonghwa Lee > > m> > > >  Description > > >  ----------- > > >   > > > -Exynos 4x12 (4212, 4412) and 5 series provide emulation mode for > > > thermal management unit. > > > -Thermal emulation mode supports software debug for TMU's > > > operation. > > > User can set temperature > > > -manually with software code and TMU will read current > > > temperature > > > from user value not from > > > -sensor's value. > > > +Exynos 4x12 (4212, 4412) and 5 series provide emulation mode for > > > thermal > > > +management unit. Thermal emulation mode supports software debug > > > for > > > +TMU's operation. User can set temperature manually with software > > > code > > > +and TMU will read current temperature from user value not from > > > sensor's > > > +value. > > >   > > > -Enabling CONFIG_THERMAL_EMULATION option will make this support > > > available. > > > -When it's enabled, sysfs node will be created as > > > +Enabling CONFIG_THERMAL_EMULATION option will make this support > > > +available. When it's enabled, sysfs node will be created as > > >  /sys/devices/virtual/thermal/thermal_zone'zone id'/emul_temp. > > >   > > > -The sysfs node, 'emul_node', will contain value 0 for the > > > initial > > > state. When you input any > > > -temperature you want to update to sysfs node, it automatically > > > enable emulation mode and > > > -current temperature will be changed into it. > > > -(Exynos also supports user changeable delay time which would be > > > used > > > to delay of > > > - changing temperature. However, this node only uses same delay > > > of > > > real sensing time, 938us.) > > > +The sysfs node, 'emul_node', will contain value 0 for the > > > initial > > > state. > > > +When you input any temperature you want to update to sysfs node, > > > it > > > +automatically enable emulation mode and current temperature will > > > be > > > +changed into it. > > >   > > > -Exynos emulation mode requires synchronous of value changing and > > > enabling. It means when you > > > -want to update the any value of delay or next temperature, then > > > you > > > have to enable emulation > > > -mode at the same time. (Or you have to keep the mode enabling.) > > > If > > > you don't, it fails to > > > -change the value to updated one and just use last succeessful > > > value > > > repeatedly. That's why > > > -this node gives users the right to change termerpature only. > > > Just > > > one interface makes it more > > > -simply to use. > > > +(Exynos also supports user changeable delay time which would be > > > used > > > to > > > +delay of changing temperature. However, this node only uses same > > > delay > > > +of real sensing time, 938us.) > > > + > > > +Exynos emulation mode requires synchronous of value changing and > > > +enabling. It means when you want to update the any value of > > > delay or > > > +next temperature, then you have to enable emulation mode at the > > > same > > > +time. (Or you have to keep the mode enabling.) If you don't, it > > > fails to > > > +change the value to updated one and just use last succeessful > > > value > > > +repeatedly. That's why this node gives users the right to change > > > +termerpature only. Just one interface makes it more simply to > > > use. > > >   > > >  Disabling emulation mode only requires writing value 0 to sysfs > > > node. > > >   > > > +:: > > >   > > > -TEMP 120 | > > > + > > > +  TEMP 120 | > > >       | > > >   100 | > > >       | > > >    80 | > > > -     |          +----------- > > > -  60 |              |     | > > > -     |            +-------------|          | > > > +     |  +----------- > > > +  60 |        |     | > > > +     |    +-------------|          | > > >    40 |              |           |          | > > > -     |    |        |         > > >   | > > > -  20 |    |        |         > > >   +- > > > --------- > > > -     |      |        |        > > >    | > > >           | > > > +     |    |  |          | > > > +  20 |    |  |          + > > > ---- > > > ------ > > > +     |    |  |          |   > > >      > > >     | > > >     0 > > > > > > > > ______________|_____________|__________|__________|_________ > > > -    A       A     A   > > >    > > >        A     TIME > > > +    A  A     A > > >   > > >       A     TIME > > >      |<----->|  |<----->|  |<----->| > > >     > > >     | > > >      | 938us |    |  |  |       |    > > >      > > >    | > > > -emulation    :  0  50    |    70      |  20      | > > >      > > >       0 > > > -current temp :   sensor   50  70         20 > > >    > > >     sensor > > > +  emulation   : 0  50    |    70      |  20      | > > >      > > >       0 > > > +  current temp:   sensor   50  70         20 > > >   > > >      sensor > > > diff --git a/Documentation/thermal/index.rst > > > b/Documentation/thermal/index.rst > > > new file mode 100644 > > > index 000000000000..8c1c00146cad > > > --- /dev/null > > > +++ b/Documentation/thermal/index.rst > > > @@ -0,0 +1,18 @@ > > > +:orphan: > > > + > > > +======= > > > +Thermal > > > +======= > > > + > > > +.. toctree:: > > > +   :maxdepth: 1 > > > + > > > +   cpu-cooling-api > > > +   sysfs-api > > > +   power_allocator > > > + > > > +   exynos_thermal > > > +   exynos_thermal_emulation > > > +   intel_powerclamp > > > +   nouveau_thermal > > > +   x86_pkg_temperature_thermal > > > diff --git a/Documentation/thermal/intel_powerclamp.txt > > > b/Documentation/thermal/intel_powerclamp.rst > > > similarity index 76% > > > rename from Documentation/thermal/intel_powerclamp.txt > > > rename to Documentation/thermal/intel_powerclamp.rst > > > index b5df21168fbc..3f6dfb0b3ea6 100644 > > > --- a/Documentation/thermal/intel_powerclamp.txt > > > +++ b/Documentation/thermal/intel_powerclamp.rst > > > @@ -1,10 +1,13 @@ > > > -  ======================= > > > -  INTEL POWERCLAMP DRIVER > > > -  ======================= > > > -By: Arjan van de Ven > > > -    Jacob Pan > > > +======================= > > > +Intel Powerclamp Driver > > > +======================= > > > + > > > +By: > > > +  - Arjan van de Ven > > > +  - Jacob Pan > > > + > > > +.. Contents: > > >   > > > -Contents: > > >   (*) Introduction > > >       - Goals and Objectives > > >   > > > @@ -23,7 +26,6 @@ Contents: > > >       - Generic Thermal Layer (sysfs) > > >       - Kernel APIs (TBD) > > >   > > > -============ > > >  INTRODUCTION > > >  ============ > > >   > > > @@ -47,7 +49,6 @@ scalability, and user experience. In many > > > cases, > > > clear advantage is > > >  shown over taking the CPU offline or modulating the CPU clock. > > >   > > >   > > > -=================== > > >  THEORY OF OPERATION > > >  =================== > > >   > > > @@ -57,11 +58,12 @@ Idle Injection > > >  On modern Intel processors (Nehalem or later), package level C- > > > state > > >  residency is available in MSRs, thus also available to the > > > kernel. > > >   > > > -These MSRs are: > > > -      #define MSR_PKG_C2_RESIDENCY 0x60D > > > -      #define MSR_PKG_C3_RESIDENCY 0x3F8 > > > -      #define MSR_PKG_C6_RESIDENCY 0x3F9 > > > -      #define MSR_PKG_C7_RESIDENCY 0x3FA > > > +These MSRs are:: > > > + > > > +      #define MSR_PKG_C2_RESIDENCY      0x60D > > > +      #define MSR_PKG_C3_RESIDENCY      0x3F8 > > > +      #define MSR_PKG_C6_RESIDENCY      0x3F9 > > > +      #define MSR_PKG_C7_RESIDENCY      0x3FA > > >   > > >  If the kernel can also inject idle time to the system, then a > > >  closed-loop control system can be established that manages > > > package > > > @@ -96,19 +98,21 @@ are not masked. Tests show that the extra > > > wakeups > > > from scheduler tick > > >  have a dramatic impact on the effectiveness of the powerclamp > > > driver > > >  on large scale systems (Westmere system with 80 processors). > > >   > > > -CPU0 > > > -   ____________          ____________ > > > -kidle_inject/0   |   sleep    |  mwait |  sleep     | > > > - _________|            |________|            |_______ > > > -        duration > > > -CPU1 > > > -   ____________          ____________ > > > -kidle_inject/1   |   sleep    |  mwait |  sleep     | > > > - _________|            |________|            |_______ > > > -       ^ > > > -       | > > > -       | > > > -       roundup(jiffies, interval) > > > +:: > > > + > > > +  CPU0 > > > +     ____________          ____________ > > > +  kidle_inject/0   |   sleep    |  mwait |  sleep     | > > > +   _________|            |________|            |_______ > > > +  duration > > > +  CPU1 > > > +     ____________          ____________ > > > +  kidle_inject/1   |   sleep    |  mwait |  sleep     | > > > +   _________|            |________|            |_______ > > > + ^ > > > + | > > > + | > > > + roundup(jiffies, interval) > > >   > > >  Only one CPU is allowed to collect statistics and update global > > >  control parameters. This CPU is referred to as the controlling > > > CPU > > > in > > > @@ -148,7 +152,7 @@ b) determine the amount of compensation > > > needed at > > > each target ratio > > >   > > >  Compensation to each target ratio consists of two parts: > > >   > > > -        a) steady state error compensation > > > + a) steady state error compensation > > >   This is to offset the error occurring when the system > > > can > > >   enter idle without extra wakeups (such as external > > > interrupts). > > >   > > > @@ -158,41 +162,42 @@ Compensation to each target ratio consists > > > of > > > two parts: > > >   slowing down CPU activities. > > >   > > >  A debugfs file is provided for the user to examine compensation > > > -progress and results, such as on a Westmere system. > > > -[jacob@nex01 ~]$ cat > > > -/sys/kernel/debug/intel_powerclamp/powerclamp_calib > > > -controlling cpu: 0 > > > -pct confidence steady dynamic (compensation) > > > -0 0 0 0 > > > -1 1 0 0 > > > -2 1 1 0 > > > -3 3 1 0 > > > -4 3 1 0 > > > -5 3 1 0 > > > -6 3 1 0 > > > -7 3 1 0 > > > -8 3 1 0 > > > -... > > > -30 3 2 0 > > > -31 3 2 0 > > > -32 3 1 0 > > > -33 3 2 0 > > > -34 3 1 0 > > > -35 3 2 0 > > > -36 3 1 0 > > > -37 3 2 0 > > > -38 3 1 0 > > > -39 3 2 0 > > > -40 3 3 0 > > > -41 3 1 0 > > > -42 3 2 0 > > > -43 3 1 0 > > > -44 3 1 0 > > > -45 3 2 0 > > > -46 3 3 0 > > > -47 3 0 0 > > > -48 3 2 0 > > > -49 3 3 0 > > > +progress and results, such as on a Westmere system:: > > > + > > > +  [jacob@nex01 ~]$ cat > > > +  /sys/kernel/debug/intel_powerclamp/powerclamp_calib > > > +  controlling cpu: 0 > > > +  pct confidence steady dynamic (compensation) > > > +  0       0       0       0 > > > +  1       1       0       0 > > > +  2       1       1       0 > > > +  3       3       1       0 > > > +  4       3       1       0 > > > +  5       3       1       0 > > > +  6       3       1       0 > > > +  7       3       1       0 > > > +  8       3       1       0 > > > +  ... > > > +  30      3       2       0 > > > +  31      3       2       0 > > > +  32      3       1       0 > > > +  33      3       2       0 > > > +  34      3       1       0 > > > +  35      3       2       0 > > > +  36      3       1       0 > > > +  37      3       2       0 > > > +  38      3       1       0 > > > +  39      3       2       0 > > > +  40      3       3       0 > > > +  41      3       1       0 > > > +  42      3       2       0 > > > +  43      3       1       0 > > > +  44      3       1       0 > > > +  45      3       2       0 > > > +  46      3       3       0 > > > +  47      3       0       0 > > > +  48      3       2       0 > > > +  49      3       3       0 > > >   > > >  Calibration occurs during runtime. No offline method is > > > available. > > >  Steady state compensation is used only when confidence levels of > > > all > > > @@ -217,9 +222,8 @@ keeps track of clamping kernel threads, even > > > after they are migrated > > >  to other CPUs, after a CPU offline event. > > >   > > >   > > > -===================== > > >  Performance Analysis > > > -===================== > > > +==================== > > >  This section describes the general performance data collected on > > >  multiple systems, including Westmere (80P) and Ivy Bridge (4P, > > > 8P). > > >   > > > @@ -257,16 +261,15 @@ achieve up to 40% better performance per > > > watt. > > > (measured by a spin > > >  counter summed over per CPU counting threads spawned for all > > > running > > >  CPUs). > > >   > > > -==================== > > >  Usage and Interfaces > > >  ==================== > > >  The powerclamp driver is registered to the generic thermal layer > > > as > > > a > > > -cooling device. Currently, it’s not bound to any thermal zones. > > > +cooling device. Currently, it’s not bound to any thermal zones:: > > >   > > > -jacob@chromoly:/sys/class/thermal/cooling_device14$ grep . * > > > -cur_state:0 > > > -max_state:50 > > > -type:intel_powerclamp > > > +  jacob@chromoly:/sys/class/thermal/cooling_device14$ grep . * > > > +  cur_state:0 > > > +  max_state:50 > > > +  type:intel_powerclamp > > >   > > >  cur_state allows user to set the desired idle percentage. > > > Writing 0 > > > to > > >  cur_state will stop idle injection. Writing a value between 1 > > > and > > > @@ -278,9 +281,9 @@ cur_state returns value -1 instead of 0 which > > > is > > > to avoid confusing > > >  100% busy state with the disabled state. > > >   > > >  Example usage: > > > -- To inject 25% idle time > > > -$ sudo sh -c "echo 25 > > > > /sys/class/thermal/cooling_device80/cur_state > > > -" > > > +- To inject 25% idle time:: > > > + > > > + $ sudo sh -c "echo 25 > > > > /sys/class/thermal/cooling_device80/cur_state > > >   > > >  If the system is not busy and has more than 25% idle time > > > already, > > >  then the powerclamp driver will not start idle injection. Using > > > Top > > > @@ -292,23 +295,23 @@ idle time is accounted as normal idle in > > > that > > > common code path is > > >  taken as the idle task. > > >   > > >  In this example, 24.1% idle is shown. This helps the system > > > admin or > > > -user determine the cause of slowdown, when a powerclamp driver > > > is in > > > action. > > > +user determine the cause of slowdown, when a powerclamp driver > > > is in > > > action:: > > >   > > >   > > > -Tasks: 197 total,   1 running, 196 sleeping,   0 stopped,   0 > > > zombie > > > -Cpu(s): 71.2%us,  4.7%sy,  0.0%ni, > > > 24.1%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st > > > -Mem:   3943228k total,  1689632k used,  2253596k free,    74960k > > > buffers > > > -Swap:  4087804k total,        0k used,  4087804k free,   945336k > > > cached > > > +  Tasks: 197 total,   1 running, 196 sleeping,   0 stopped,   0 > > > zombie > > > +  Cpu(s): 71.2%us,  4.7%sy,  0.0%ni, > > > 24.1%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st > > > +  Mem:   3943228k total,  1689632k used,  2253596k > > > free,    74960k > > > buffers > > > +  Swap:  4087804k total,        0k used,  4087804k > > > free,   945336k > > > cached > > >   > > > -  PID USER      PR  NI  VIRT  RES  SHR S %CPU > > > %MEM    TIME+  COMMAND > > > - 3352 jacob     20   0  262m  644  428 S  286  0.0   0:17.16 > > > spin > > > - 3341 root     -51   0     0    0    0 D   25  0.0   0:01.62 > > > kidle_inject/0 > > > - 3344 root     -51   0     0    0    0 D   25  0.0   0:01.60 > > > kidle_inject/3 > > > - 3342 root     -51   0     0    0    0 D   25  0.0   0:01.61 > > > kidle_inject/1 > > > - 3343 root     -51   0     0    0    0 D   25  0.0   0:01.60 > > > kidle_inject/2 > > > - 2935 jacob     20   0  696m 125m  35m S    5  3.3   0:31.11 > > > firefox > > > - 1546 root      20   0  158m  20m 6640 S    3  0.5   0:26.97 > > > Xorg > > > - 2100 jacob     20   0 1223m  88m  30m S    3  2.3   0:23.68 > > > compiz > > > +    PID USER      PR  NI  VIRT  RES  SHR S %CPU > > > %MEM    TIME+  COMMAND > > > +   3352 jacob     20   0  262m  644  428 S  286  0.0   0:17.16 > > > spin > > > +   3341 root     -51   0     0    0    0 D   25  0.0   0:01.62 > > > kidle_inject/0 > > > +   3344 root     -51   0     0    0    0 D   25  0.0   0:01.60 > > > kidle_inject/3 > > > +   3342 root     -51   0     0    0    0 D   25  0.0   0:01.61 > > > kidle_inject/1 > > > +   3343 root     -51   0     0    0    0 D   25  0.0   0:01.60 > > > kidle_inject/2 > > > +   2935 jacob     20   0  696m 125m  35m S    5  3.3   0:31.11 > > > firefox > > > +   1546 root      20   0  158m  20m 6640 S    3  0.5   0:26.97 > > > Xorg > > > +   2100 jacob     20   0 1223m  88m  30m S    3  2.3   0:23.68 > > > compiz > > >   > > >  Tests have shown that by using the powerclamp driver as a > > > cooling > > >  device, a PID based userspace thermal controller can manage to > > > diff --git a/Documentation/thermal/nouveau_thermal > > > b/Documentation/thermal/nouveau_thermal.rst > > > similarity index 64% > > > rename from Documentation/thermal/nouveau_thermal > > > rename to Documentation/thermal/nouveau_thermal.rst > > > index 6e17a11efcb0..37255fd6735d 100644 > > > --- a/Documentation/thermal/nouveau_thermal > > > +++ b/Documentation/thermal/nouveau_thermal.rst > > > @@ -1,13 +1,15 @@ > > > +===================== > > >  Kernel driver nouveau > > > -=================== > > > +===================== > > >   > > >  Supported chips: > > > + > > >  * NV43+ > > >   > > >  Authors: Martin Peres (mupuf) > > >   > > >  Description > > > ---------- > > > +----------- > > >   > > >  This driver allows to read the GPU core temperature, drive the > > > GPU > > > fan and > > >  set temperature alarms. > > > @@ -19,20 +21,25 @@ interface is likely not to work. This > > > document > > > may then not cover your situation > > >  entirely. > > >   > > >  Temperature management > > > --------------------- > > > +---------------------- > > >   > > >  Temperature is exposed under as a read-only HWMON attribute > > > temp1_input. > > >   > > >  In order to protect the GPU from overheating, Nouveau supports 4 > > > configurable > > >  temperature thresholds: > > >   > > > - * Fan_boost: Fan speed is set to 100% when reaching this > > > temperature; > > > - * Downclock: The GPU will be downclocked to reduce its power > > > dissipation; > > > - * Critical: The GPU is put on hold to further lower power > > > dissipation; > > > - * Shutdown: Shut the computer down to protect your GPU. > > > + * Fan_boost: > > > + Fan speed is set to 100% when reaching this temperature; > > > + * Downclock: > > > + The GPU will be downclocked to reduce its power > > > dissipation; > > > + * Critical: > > > + The GPU is put on hold to further lower power > > > dissipation; > > > + * Shutdown: > > > + Shut the computer down to protect your GPU. > > >   > > > -WARNING: Some of these thresholds may not be used by Nouveau > > > depending > > > -on your chipset. > > > +WARNING: > > > + Some of these thresholds may not be used by Nouveau > > > depending > > > + on your chipset. > > >   > > >  The default value for these thresholds comes from the GPU's > > > vbios. > > > These > > >  thresholds can be configured thanks to the following HWMON > > > attributes: > > > @@ -46,19 +53,24 @@ NOTE: Remember that the values are stored as > > > milli degrees Celsius. Don't forget > > >  to multiply! > > >   > > >  Fan management > > > ------------- > > > +-------------- > > >   > > >  Not all cards have a drivable fan. If you do, then the following > > > HWMON > > >  attributes should be available: > > >   > > > - * pwm1_enable: Current fan management mode (NONE, MANUAL or > > > AUTO); > > > - * pwm1: Current PWM value (power percentage); > > > - * pwm1_min: The minimum PWM speed allowed; > > > - * pwm1_max: The maximum PWM speed allowed (bypassed when > > > hitting > > > Fan_boost); > > > + * pwm1_enable: > > > + Current fan management mode (NONE, MANUAL or AUTO); > > > + * pwm1: > > > + Current PWM value (power percentage); > > > + * pwm1_min: > > > + The minimum PWM speed allowed; > > > + * pwm1_max: > > > + The maximum PWM speed allowed (bypassed when hitting > > > Fan_boost); > > >   > > >  You may also have the following attribute: > > >   > > > - * fan1_input: Speed in RPM of your fan. > > > + * fan1_input: > > > + Speed in RPM of your fan. > > >   > > >  Your fan can be driven in different modes: > > >   > > > @@ -66,14 +78,16 @@ Your fan can be driven in different modes: > > >   * 1: The fan can be driven in manual (use pwm1 to change the > > > speed); > > >   * 2; The fan is driven automatically depending on the > > > temperature. > > >   > > > -NOTE: Be sure to use the manual mode if you want to drive the > > > fan > > > speed manually > > > +NOTE: > > > +  Be sure to use the manual mode if you want to drive the fan > > > speed > > > manually > > >   > > > -NOTE2: When operating in manual mode outside the vbios-defined > > > -[PWM_min, PWM_max] range, the reported fan speed (RPM) may not > > > be > > > accurate > > > -depending on your hardware. > > > +NOTE2: > > > +  When operating in manual mode outside the vbios-defined > > > +  [PWM_min, PWM_max] range, the reported fan speed (RPM) may not > > > be > > > accurate > > > +  depending on your hardware. > > >   > > >  Bug reports > > > ---------- > > > +----------- > > >   > > >  Thermal management on Nouveau is new and may not work on all > > > cards. > > > If you have > > >  inquiries, please ping mupuf on IRC (#nouveau, freenode). > > > diff --git a/Documentation/thermal/power_allocator.txt > > > b/Documentation/thermal/power_allocator.rst > > > similarity index 74% > > > rename from Documentation/thermal/power_allocator.txt > > > rename to Documentation/thermal/power_allocator.rst > > > index 9fb0ff06dca9..67b6a3297238 100644 > > > --- a/Documentation/thermal/power_allocator.txt > > > +++ b/Documentation/thermal/power_allocator.rst > > > @@ -1,3 +1,4 @@ > > > +================================= > > >  Power allocator governor tunables > > >  ================================= > > >   > > > @@ -25,36 +26,36 @@ temperature as the control input and power as > > > the > > > controlled output: > > >      P_max = k_p * e + k_i * err_integral + k_d * diff_err + > > > sustainable_power > > >   > > >  where > > > -    e = desired_temperature - current_temperature > > > -    err_integral is the sum of previous errors > > > -    diff_err = e - previous_error > > > +   -  e = desired_temperature - current_temperature > > > +   -  err_integral is the sum of previous errors > > > +   -  diff_err = e - previous_error > > >   > > > -It is similar to the one depicted below: > > > +It is similar to the one depicted below:: > > >   > > > -                                      k_d > > > -                                       | > > > -current_temp                           | > > > -     |                                 v > > > -     |                +----------+   +---+ > > > -     |         +----->| diff_err |-->| X |------+ > > > -     |         |      +----------+   +---+      | > > > -     |         |                                |      tdp       > > >   ac > > > tor > > > -     |         |                      k_i       |       |  get_r > > > eque > > > sted_power() > > > -     |         |                       |        |       |        > > >  |   > > >    | > > > -     |         |                       |        |       |        > > >  |   > > >    | ... > > > -     v         |                       v        v       v        > > >  v   > > >    v > > > -   +---+       |      +-------+      +---+    +---+   +---+   +- > > > ---- > > > -----+ > > > -   | S |-------+----->| sum e |----->| X |--->| S |-->| S |   > > > -->|power     |   > > > -   +---+       |      +-------+      +---+    +---+   +--- > > > +   |allocation| > > > -     ^         |                                ^             +- > > > ---- > > > -----+ > > > -     |         |                                |                > > >  |   > > >    | > > > -     |         |        +--- > > > +                   |                |     | > > > -     |         +------->| X |------------------- > > > +                v     v > > > -     |                  +--- > > > +                               granted > > > performance > > > -desired_temperature       ^ > > > -                          | > > > -                          | > > > -                      k_po/k_pu > > > +       k_d > > > +        | > > > +  current_temp                         | > > > +       |                               v > > > +       |              +----------+   +---+ > > > +       |       +----->| diff_err |-->| X |------+ > > > +       |       |      +----------+   +---+      | > > > +       |       |                                |      tdp       > > >   ac > > > tor > > > +       |       |                      k_i       |       |  get_r > > > eque > > > sted_power() > > > +       |       |                       |        |       |        > > >  |   > > >    | > > > +       |       |                       |        |       |        > > >  |   > > >    | ... > > > +       v       |                       v        v       v        > > >  v   > > >    v > > > +     +---+     |      +-------+      +---+    +---+   +---+   +- > > > ---- > > > -----+ > > > +     | S |-----+----->| sum e |----->| X |--->| S |-->| S |   > > > -->|power     |   > > > +     +---+     |      +-------+      +---+    +---+   +--- > > > +   |allocation| > > > +       ^       |                                ^             +- > > > ---- > > > -----+ > > > +       |       |                                |                > > >  |   > > >    | > > > +       |       |        +--- > > > +                   |                |     | > > > +       |       +------->| X |------------------- > > > +                v     v > > > +       |                +--- > > > +                               granted > > > performance > > > +  desired_temperature     ^ > > > +   | > > > +   | > > > +       k_po/k_pu > > >   > > >  Sustainable power > > >  ----------------- > > > @@ -73,7 +74,7 @@ is typically 2000mW, while on a 10" tablet is > > > around 4500mW (may vary > > >  depending on screen size). > > >   > > >  If you are using device tree, do add it as a property of the > > > -thermal-zone.  For example: > > > +thermal-zone.  For example:: > > >   > > >   thermal-zones { > > >   soc_thermal { > > > @@ -85,7 +86,7 @@ thermal-zone.  For example: > > >  Instead, if the thermal zone is registered from the platform > > > code, > > > pass a > > >  `thermal_zone_params` that has a `sustainable_power`.  If no > > >  `thermal_zone_params` were being passed, then something like > > > below > > > -will suffice: > > > +will suffice:: > > >   > > >   static const struct thermal_zone_params tz_params = { > > >   .sustainable_power = 3500, > > > @@ -112,18 +113,18 @@ available capacity at a low > > > temperature.  On > > > the other hand, a high > > >  value of `k_pu` will result in the governor granting very high > > > power > > >  while temperature is low, and may lead to temperature > > > overshooting. > > >   > > > -The default value for `k_pu` is: > > > +The default value for `k_pu` is:: > > >   > > >      2 * sustainable_power / (desired_temperature - > > > switch_on_temp) > > >   > > >  This means that at `switch_on_temp` the output of the > > > controller's > > >  proportional term will be 2 * `sustainable_power`.  The default > > > value > > > -for `k_po` is: > > > +for `k_po` is:: > > >   > > >      sustainable_power / (desired_temperature - switch_on_temp) > > >   > > >  Focusing on the proportional and feed forward values of the PID > > > -controller equation we have: > > > +controller equation we have:: > > >   > > >      P_max = k_p * e + sustainable_power > > >   > > > @@ -134,21 +135,23 @@ is the desired one, then the proportional > > > component is zero and > > >  thermal equilibrium under constant load.  `sustainable_power` is > > > only > > >  an estimate, which is the reason for closed-loop control such as > > > this. > > >   > > > -Expanding `k_pu` we get: > > > +Expanding `k_pu` we get:: > > > + > > >      P_max = 2 * sustainable_power * (T_set - T) / (T_set - T_on) > > > + > > > -        sustainable_power > > > + sustainable_power > > >   > > > -where > > > -    T_set is the desired temperature > > > -    T is the current temperature > > > -    T_on is the switch on temperature > > > +where: > > > + > > > +    - T_set is the desired temperature > > > +    - T is the current temperature > > > +    - T_on is the switch on temperature > > >   > > >  When the current temperature is the switch_on temperature, the > > > above > > > -formula becomes: > > > +formula becomes:: > > >   > > >      P_max = 2 * sustainable_power * (T_set - T_on) / (T_set - > > > T_on) > > > + > > > -        sustainable_power = 2 * sustainable_power + > > > sustainable_power = > > > -        3 * sustainable_power > > > + sustainable_power = 2 * sustainable_power + > > > sustainable_power = > > > + 3 * sustainable_power > > >   > > >  Therefore, the proportional term alone linearly decreases power > > > from > > >  3 * `sustainable_power` to `sustainable_power` as the > > > temperature > > > @@ -178,11 +181,18 @@ Cooling device power API > > >  Cooling devices controlled by this governor must supply the > > > additional > > >  "power" API in their `cooling_device_ops`.  It consists on three > > > ops: > > >   > > > -1. int get_requested_power(struct thermal_cooling_device *cdev, > > > - struct thermal_zone_device *tz, u32 *power); > > > -@cdev: The `struct thermal_cooling_device` pointer > > > -@tz: thermal zone in which we are currently operating > > > -@power: pointer in which to store the calculated power > > > +1. :: > > > + > > > +    int get_requested_power(struct thermal_cooling_device *cdev, > > > +     struct thermal_zone_device *tz, u32 > > > *power); > > > + > > > + > > > +@cdev: > > > + The `struct thermal_cooling_device` pointer > > > +@tz: > > > + thermal zone in which we are currently operating > > > +@power: > > > + pointer in which to store the calculated power > > >   > > >  `get_requested_power()` calculates the power requested by the > > > device > > >  in milliwatts and stores it in @power .  It should return 0 on > > > @@ -190,23 +200,37 @@ success, -E* on failure.  This is currently > > > used by the power > > >  allocator governor to calculate how much power to give to each > > > cooling > > >  device. > > >   > > > -2. int state2power(struct thermal_cooling_device *cdev, struct > > > -        thermal_zone_device *tz, unsigned long state, u32 > > > *power); > > > -@cdev: The `struct thermal_cooling_device` pointer > > > -@tz: thermal zone in which we are currently operating > > > -@state: A cooling device state > > > -@power: pointer in which to store the equivalent power > > > +2. :: > > > + > > > + int state2power(struct thermal_cooling_device *cdev, > > > struct > > > + thermal_zone_device *tz, unsigned long > > > state, > > > + u32 *power); > > > + > > > +@cdev: > > > + The `struct thermal_cooling_device` pointer > > > +@tz: > > > + thermal zone in which we are currently operating > > > +@state: > > > + A cooling device state > > > +@power: > > > + pointer in which to store the equivalent power > > >   > > >  Convert cooling device state @state into power consumption in > > >  milliwatts and store it in @power.  It should return 0 on > > > success, > > > -E* > > >  on failure.  This is currently used by thermal core to calculate > > > the > > >  maximum power that an actor can consume. > > >   > > > -3. int power2state(struct thermal_cooling_device *cdev, u32 > > > power, > > > - unsigned long *state); > > > -@cdev: The `struct thermal_cooling_device` pointer > > > -@power: power in milliwatts > > > -@state: pointer in which to store the resulting state > > > +3. :: > > > + > > > + int power2state(struct thermal_cooling_device *cdev, u32 > > > power, > > > + unsigned long *state); > > > + > > > +@cdev: > > > + The `struct thermal_cooling_device` pointer > > > +@power: > > > + power in milliwatts > > > +@state: > > > + pointer in which to store the resulting state > > >   > > >  Calculate a cooling device state that would make the device > > > consume > > > at > > >  most @power mW and store it in @state.  It should return 0 on > > > success, > > > diff --git a/Documentation/thermal/sysfs-api.txt > > > b/Documentation/thermal/sysfs-api.rst > > > similarity index 66% > > > rename from Documentation/thermal/sysfs-api.txt > > > rename to Documentation/thermal/sysfs-api.rst > > > index c3fa500df92c..e4930761d3e5 100644 > > > --- a/Documentation/thermal/sysfs-api.txt > > > +++ b/Documentation/thermal/sysfs-api.rst > > > @@ -1,3 +1,4 @@ > > > +=================================== > > >  Generic Thermal Sysfs driver How To > > >  =================================== > > >   > > > @@ -9,6 +10,7 @@ Copyright (c)  2008 Intel Corporation > > >   > > >   > > >  0. Introduction > > > +=============== > > >   > > >  The generic thermal sysfs provides a set of interfaces for > > > thermal > > > zone > > >  devices (sensors) and thermal cooling devices (fan, > > > processor...) to > > > register > > > @@ -25,59 +27,90 @@ An intelligent thermal management application > > > can > > > make decisions based on > > >  inputs from thermal zone attributes (the current temperature and > > > trip point > > >  temperature) and throttle appropriate devices. > > >   > > > -[0-*] denotes any positive number starting from 0 > > > -[1-*] denotes any positive number starting from 1 > > > +- `[0-*]` denotes any positive number starting from 0 > > > +- `[1-*]` denotes any positive number starting from 1 > > >   > > >  1. thermal sysfs driver interface functions > > > +=========================================== > > >   > > >  1.1 thermal zone device interface > > > -1.1.1 struct thermal_zone_device > > > *thermal_zone_device_register(char > > > *type, > > > - int trips, int mask, void *devdata, > > > - struct thermal_zone_device_ops *ops, > > > - const struct thermal_zone_params *tzp, > > > - int passive_delay, int polling_delay)) > > > +--------------------------------- > > > + > > > +    :: > > > + > > > + struct thermal_zone_device > > > + *thermal_zone_device_register(char *type, > > > +       int trips, int mask, void > > > *devdata, > > > +       struct > > > thermal_zone_device_ops > > > *ops, > > > +       const struct > > > thermal_zone_params *tzp, > > > +       int passive_delay, int > > > polling_delay)) > > >   > > >      This interface function adds a new thermal zone device > > > (sensor) > > > to > > > -    /sys/class/thermal folder as thermal_zone[0-*]. It tries to > > > bind > > > all the > > > +    /sys/class/thermal folder as `thermal_zone[0-*]`. It tries > > > to > > > bind all the > > >      thermal cooling devices registered at the same time. > > >   > > > -    type: the thermal zone type. > > > -    trips: the total number of trip points this thermal zone > > > supports. > > > -    mask: Bit string: If 'n'th bit is set, then trip point 'n' > > > is > > > writeable. > > > -    devdata: device private data > > > -    ops: thermal zone device call-backs. > > > - .bind: bind the thermal zone device with a thermal > > > cooling > > > device. > > > - .unbind: unbind the thermal zone device with a thermal > > > cooling device. > > > - .get_temp: get the current temperature of the thermal > > > zone. > > > - .set_trips: set the trip points window. Whenever the > > > current > > > temperature > > > +    type: > > > + the thermal zone type. > > > +    trips: > > > + the total number of trip points this thermal zone > > > supports. > > > +    mask: > > > + Bit string: If 'n'th bit is set, then trip point 'n' is > > > writeable. > > > +    devdata: > > > + device private data > > > +    ops: > > > + thermal zone device call-backs. > > > + > > > + .bind: > > > + bind the thermal zone device with a thermal > > > cooling > > > device. > > > + .unbind: > > > + unbind the thermal zone device with a thermal > > > cooling device. > > > + .get_temp: > > > + get the current temperature of the thermal zone. > > > + .set_trips: > > > +     set the trip points window. Whenever the > > > current > > > temperature > > >       is updated, the trip points immediately > > > below > > > and above the > > >       current temperature are found. > > > - .get_mode: get the current mode (enabled/disabled) of > > > the > > > thermal zone. > > > -     - "enabled" means the kernel thermal management is > > > enabled. > > > -     - "disabled" will prevent kernel thermal driver > > > action > > > upon trip points > > > -       so that user applications can take charge of > > > thermal > > > management. > > > - .set_mode: set the mode (enabled/disabled) of the > > > thermal > > > zone. > > > - .get_trip_type: get the type of certain trip point. > > > - .get_trip_temp: get the temperature above which the > > > certain > > > trip point > > > + .get_mode: > > > +    get the current mode (enabled/disabled) of > > > the > > > thermal zone. > > > + > > > + - "enabled" means the kernel thermal > > > management is > > > +   enabled. > > > + - "disabled" will prevent kernel thermal > > > driver action > > > +   upon trip points so that user > > > applications > > > can take > > > +   charge of thermal management. > > > + .set_mode: > > > + set the mode (enabled/disabled) of the thermal > > > zone. > > > + .get_trip_type: > > > + get the type of certain trip point. > > > + .get_trip_temp: > > > + get the temperature above which the > > > certain > > > trip point > > >   will be fired. > > > - .set_emul_temp: set the emulation temperature which > > > helps in > > > debugging > > > + .set_emul_temp: > > > + set the emulation temperature which > > > helps in > > > debugging > > >   different threshold temperature points. > > > -    tzp: thermal zone platform parameters. > > > -    passive_delay: number of milliseconds to wait between polls > > > when > > > +    tzp: > > > + thermal zone platform parameters. > > > +    passive_delay: > > > + number of milliseconds to wait between polls when > > >   performing passive cooling. > > > -    polling_delay: number of milliseconds to wait between polls > > > when > > > checking > > > +    polling_delay: > > > + number of milliseconds to wait between polls when > > > checking > > >   whether trip points have been crossed (0 for interrupt > > > driven systems). > > >   > > > +    :: > > >   > > > -1.1.2 void thermal_zone_device_unregister(struct > > > thermal_zone_device > > > *tz) > > > + void thermal_zone_device_unregister(struct > > > thermal_zone_device *tz) > > >   > > >      This interface function removes the thermal zone device. > > >      It deletes the corresponding entry from /sys/class/thermal > > > folder and > > >      unbinds all the thermal cooling devices it uses. > > >   > > > -1.1.3 struct thermal_zone_device > > > *thermal_zone_of_sensor_register( > > > - struct device *dev, int sensor_id, void *data, > > > - const struct thermal_zone_of_device_ops *ops) > > > + :: > > > + > > > +    struct thermal_zone_device > > > +    *thermal_zone_of_sensor_register(struct device *dev, > > > int > > > sensor_id, > > > + void *data, > > > + const struct > > > thermal_zone_of_device_ops *ops) > > >   > > >   This interface adds a new sensor to a DT thermal zone. > > >   This function will search the list of thermal zones > > > described in > > > @@ -87,25 +120,33 @@ temperature) and throttle appropriate > > > devices. > > >   thermal zone device. > > >   > > >   The parameters for this interface are: > > > - dev: Device node of sensor containing > > > valid > > > node pointer in > > > + > > > + dev: > > > + Device node of sensor containing valid > > > node > > > pointer in > > >   dev->of_node. > > > - sensor_id: a sensor identifier, in case the > > > sensor IP > > > has more > > > + sensor_id: > > > + a sensor identifier, in case the sensor > > > IP > > > has more > > >   than one sensors > > > - data: a private pointer (owned by the > > > caller) > > > that will be > > > + data: > > > + a private pointer (owned by the caller) > > > that > > > will be > > >   passed back, when a temperature reading > > > is > > > needed. > > > - ops: struct thermal_zone_of_device_ops *. > > > + ops: > > > + `struct thermal_zone_of_device_ops *`. > > >   > > > - get_temp: a pointer to a function > > > that reads the > > > + ==============  ======================== > > > ==== > > > =========== > > > + get_temp a pointer to a function > > > that > > > reads the > > >   sensor temperature. This > > > is > > > mandatory > > >   callback provided by > > > sensor > > > driver. > > > - set_trips:      a pointer to a function > > > that > > > sets a > > > + set_trips a pointer to a function > > > that sets a > > >   temperature window. When > > > this window is > > >   left the driver must > > > inform > > > the thermal > > >   core via > > > thermal_zone_device_update. > > > - get_trend:  a pointer to a > > > function > > > that reads the > > > + get_trend  a pointer to a > > > function > > > that reads the > > >   sensor temperature > > > trend. > > > - set_emul_temp: a pointer to a > > > function that sets > > > + set_emul_temp a pointer to a > > > function > > > that sets > > >   sensor emulated > > > temperature. > > > + ==============  ======================== > > > ==== > > > =========== > > > + > > >   The thermal zone temperature is provided by the > > > get_temp() > > > function > > >   pointer of thermal_zone_of_device_ops. When called, it > > > will > > >   have the private pointer @data back. > > > @@ -114,8 +155,10 @@ temperature) and throttle appropriate > > > devices. > > >   handle. Caller should check the return handle with > > > IS_ERR() > > > for finding > > >   whether success or not. > > >   > > > -1.1.4 void thermal_zone_of_sensor_unregister(struct device *dev, > > > - struct thermal_zone_device *tzd) > > > + :: > > > + > > > +     void thermal_zone_of_sensor_unregister(struct device > > > *dev, > > > +    struct > > > thermal_zone_device *tzd) > > >   > > >   This interface unregisters a sensor from a DT thermal > > > zone > > > which was > > >   successfully added by interface > > > thermal_zone_of_sensor_register(). > > > @@ -124,21 +167,29 @@ temperature) and throttle appropriate > > > devices. > > >   interface. It will also silent the zone by remove the > > > .get_temp() and > > >   get_trend() thermal zone device callbacks. > > >   > > > -1.1.5 struct thermal_zone_device > > > *devm_thermal_zone_of_sensor_register( > > > - struct device *dev, int sensor_id, > > > - void *data, const struct > > > thermal_zone_of_device_ops > > > *ops) > > > + :: > > > + > > > +   struct thermal_zone_device > > > +   *devm_thermal_zone_of_sensor_register(struct device > > > *dev, > > > + int sensor_id, > > > + void *data, > > > + const struct > > > thermal_zone_of_device_ops *ops) > > >   > > >   This interface is resource managed version of > > >   thermal_zone_of_sensor_register(). > > > + > > >   All details of thermal_zone_of_sensor_register() > > > described > > > in > > >   section 1.1.3 is applicable here. > > > + > > >   The benefit of using this interface to register sensor > > > is > > > that it > > >   is not require to explicitly call > > > thermal_zone_of_sensor_unregister() > > >   in error path or during driver unbinding as this is done > > > by > > > driver > > >   resource manager. > > >   > > > -1.1.6 void devm_thermal_zone_of_sensor_unregister(struct device > > > *dev, > > > - struct thermal_zone_device *tzd) > > > + :: > > > + > > > + void > > > devm_thermal_zone_of_sensor_unregister(struct > > > device *dev, > > > + struct > > > thermal_zone_device *tzd) > > >   > > >   This interface is resource managed version of > > >   thermal_zone_of_sensor_unregister(). > > > @@ -147,123 +198,186 @@ temperature) and throttle appropriate > > > devices. > > >   Normally this function will not need to be called and > > > the > > > resource > > >   management code will ensure that the resource is freed. > > >   > > > -1.1.7 int thermal_zone_get_slope(struct thermal_zone_device *tz) > > > + :: > > > + > > > + int thermal_zone_get_slope(struct > > > thermal_zone_device *tz) > > >   > > >   This interface is used to read the slope attribute value > > >   for the thermal zone device, which might be useful for > > > platform > > >   drivers for temperature calculations. > > >   > > > -1.1.8 int thermal_zone_get_offset(struct thermal_zone_device > > > *tz) > > > + :: > > > + > > > + int thermal_zone_get_offset(struct > > > thermal_zone_device *tz) > > >   > > >   This interface is used to read the offset attribute > > > value > > >   for the thermal zone device, which might be useful for > > > platform > > >   drivers for temperature calculations. > > >   > > >  1.2 thermal cooling device interface > > > -1.2.1 struct thermal_cooling_device > > > *thermal_cooling_device_register(char *name, > > > - void *devdata, struct thermal_cooling_device_ops > > > *) > > > +------------------------------------ > > > + > > > + > > > +    :: > > > + > > > + struct thermal_cooling_device > > > + *thermal_cooling_device_register(char *name, > > > + void *devdata, struct > > > thermal_cooling_device_ops *) > > >   > > >      This interface function adds a new thermal cooling device > > > (fan/processor/...) > > > -    to /sys/class/thermal/ folder as cooling_device[0-*]. It > > > tries > > > to bind itself > > > +    to /sys/class/thermal/ folder as `cooling_device[0-*]`. It > > > tries > > > to bind itself > > >      to all the thermal zone devices registered at the same time. > > > -    name: the cooling device name. > > > -    devdata: device private data. > > > -    ops: thermal cooling devices call-backs. > > > - .get_max_state: get the Maximum throttle state of the > > > cooling device. > > > - .get_cur_state: get the Currently requested throttle > > > state > > > of the cooling device. > > > - .set_cur_state: set the Current throttle state of the > > > cooling device. > > > - > > > -1.2.2 void thermal_cooling_device_unregister(struct > > > thermal_cooling_device *cdev) > > > + > > > +    name: > > > + the cooling device name. > > > +    devdata: > > > + device private data. > > > +    ops: > > > + thermal cooling devices call-backs. > > > + > > > + .get_max_state: > > > + get the Maximum throttle state of the cooling > > > device. > > > + .get_cur_state: > > > + get the Currently requested throttle state of > > > the > > > + cooling device. > > > + .set_cur_state: > > > + set the Current throttle state of the cooling > > > device. > > > + > > > +    :: > > > + > > > + void thermal_cooling_device_unregister(struct > > > thermal_cooling_device *cdev) > > >   > > >      This interface function removes the thermal cooling device. > > >      It deletes the corresponding entry from /sys/class/thermal > > > folder and > > >      unbinds itself from all the thermal zone devices using it. > > >   > > >  1.3 interface for binding a thermal zone device with a thermal > > > cooling device > > > -1.3.1 int thermal_zone_bind_cooling_device(struct > > > thermal_zone_device *tz, > > > - int trip, struct thermal_cooling_device *cdev, > > > - unsigned long upper, unsigned long lower, unsigned int > > > weight); > > > +-------------------------------------------------------------- > > > ---- > > > ----------- > > > + > > > +    :: > > > + > > > + int thermal_zone_bind_cooling_device(struct > > > thermal_zone_device *tz, > > > + int trip, struct thermal_cooling_device *cdev, > > > + unsigned long upper, unsigned long lower, > > > unsigned > > > int weight); > > >   > > >      This interface function binds a thermal cooling device to a > > > particular trip > > >      point of a thermal zone device. > > > + > > >      This function is usually called in the thermal zone device > > > .bind > > > callback. > > > -    tz: the thermal zone device > > > -    cdev: thermal cooling device > > > -    trip: indicates which trip point in this thermal zone the > > > cooling device > > > -          is associated with. > > > -    upper:the Maximum cooling state for this trip point. > > > -          THERMAL_NO_LIMIT means no upper limit, > > > + > > > +    tz: > > > +   the thermal zone device > > > +    cdev: > > > +   thermal cooling device > > > +    trip: > > > +   indicates which trip point in this thermal zone the > > > cooling device > > > +   is associated with. > > > +    upper: > > > +   the Maximum cooling state for this trip point. > > > +   THERMAL_NO_LIMIT means no upper limit, > > >     and the cooling device can be in max_state. > > > -    lower:the Minimum cooling state can be used for this trip > > > point. > > > -          THERMAL_NO_LIMIT means no lower limit, > > > +    lower: > > > +   the Minimum cooling state can be used for this trip > > > point. > > > +   THERMAL_NO_LIMIT means no lower limit, > > >     and the cooling device can be in cooling state 0. > > > -    weight: the influence of this cooling device in this thermal > > > -            zone.  See 1.4.1 below for more information. > > > +    weight: > > > +   the influence of this cooling device in this thermal > > > +   zone.  See 1.4.1 below for more information. > > >   > > > -1.3.2 int thermal_zone_unbind_cooling_device(struct > > > thermal_zone_device *tz, > > > - int trip, struct thermal_cooling_device *cdev); > > > +    :: > > > + > > > + int thermal_zone_unbind_cooling_device(struct > > > thermal_zone_device *tz, > > > + int trip, struct > > > thermal_cooling_device *cdev); > > >   > > >      This interface function unbinds a thermal cooling device > > > from a > > > particular > > >      trip point of a thermal zone device. This function is > > > usually > > > called in > > >      the thermal zone device .unbind callback. > > > -    tz: the thermal zone device > > > -    cdev: thermal cooling device > > > -    trip: indicates which trip point in this thermal zone the > > > cooling device > > > -          is associated with. > > > + > > > +    tz: > > > + the thermal zone device > > > +    cdev: > > > + thermal cooling device > > > +    trip: > > > + indicates which trip point in this thermal zone the > > > cooling > > > device > > > + is associated with. > > >   > > >  1.4 Thermal Zone Parameters > > > -1.4.1 struct thermal_bind_params > > > +--------------------------- > > > + > > > +    :: > > > + > > > + struct thermal_bind_params > > > + > > >      This structure defines the following parameters that are > > > used to > > > bind > > >      a zone with a cooling device for a particular trip point. > > > -    .cdev: The cooling device pointer > > > -    .weight: The 'influence' of a particular cooling device on > > > this > > > -             zone. This is relative to the rest of the cooling > > > -             devices. For example, if all cooling devices have a > > > -             weight of 1, then they all contribute the same. You > > > can > > > -             use percentages if you want, but it's not > > > mandatory. A > > > -             weight of 0 means that this cooling device doesn't > > > -             contribute to the cooling of this zone unless all > > > cooling > > > -             devices have a weight of 0. If all weights are 0, > > > then > > > -             they all contribute the same. > > > -    .trip_mask:This is a bit mask that gives the binding > > > relation > > > between > > > -               this thermal zone and cdev, for a particular trip > > > point. > > > -               If nth bit is set, then the cdev and thermal zone > > > are > > > bound > > > -               for trip point n. > > > -    .binding_limits: This is an array of cooling state limits. > > > Must > > > have > > > -                     exactly 2 * > > > thermal_zone.number_of_trip_points. > > > It is an > > > -                     array consisting of tuples > > upper-   > > > state> of   > > > -                     state limits. Each trip will be associated > > > with > > > one state > > > -                     limit tuple when binding. A NULL pointer > > > means > > > -                      on > > > all > > > trips. > > > -                     These limits are used when binding a cdev > > > to a > > > trip point. > > > -    .match: This call back returns success(0) if the 'tz and > > > cdev' > > > need to > > > + > > > +    .cdev: > > > +      The cooling device pointer > > > +    .weight: > > > +      The 'influence' of a particular cooling device on > > > this > > > +      zone. This is relative to the rest of the cooling > > > +      devices. For example, if all cooling devices have a > > > +      weight of 1, then they all contribute the same. You > > > can > > > +      use percentages if you want, but it's not > > > mandatory. A > > > +      weight of 0 means that this cooling device doesn't > > > +      contribute to the cooling of this zone unless all > > > cooling > > > +      devices have a weight of 0. If all weights are 0, > > > then > > > +      they all contribute the same. > > > +    .trip_mask: > > > +        This is a bit mask that gives the binding > > > relation > > > between > > > +        this thermal zone and cdev, for a particular trip > > > point. > > > +        If nth bit is set, then the cdev and thermal zone > > > are > > > bound > > > +        for trip point n. > > > +    .binding_limits: > > > +      This is an array of cooling state limits. > > > Must > > > have > > > +      exactly 2 * > > > thermal_zone.number_of_trip_points. > > > It is an > > > +      array consisting of tuples > > upper-   > > > state> of   > > > +      state limits. Each trip will be associated > > > with > > > one state > > > +      limit tuple when binding. A NULL pointer > > > means > > > +       on > > > all > > > trips. > > > +      These limits are used when binding a cdev > > > to a > > > trip point. > > > +    .match: > > > +     This call back returns success(0) if the 'tz and > > > cdev' > > > need to > > >       be bound, as per platform data. > > > -1.4.2 struct thermal_zone_params > > > + > > > +    :: > > > + > > > + struct thermal_zone_params > > > + > > >      This structure defines the platform level parameters for a > > > thermal zone. > > >      This data, for each thermal zone should come from the > > > platform > > > layer. > > >      This is an optional feature where some platforms can choose > > > not > > > to > > >      provide this data. > > > -    .governor_name: Name of the thermal governor used for this > > > zone > > > -    .no_hwmon: a boolean to indicate if the thermal to hwmon > > > sysfs > > > interface > > > -               is required. when no_hwmon == false, a hwmon > > > sysfs > > > interface > > > -               will be created. when no_hwmon == true, nothing > > > will > > > be done. > > > -               In case the thermal_zone_params is NULL, the > > > hwmon > > > interface > > > -               will be created (for backward compatibility). > > > -    .num_tbps: Number of thermal_bind_params entries for this > > > zone > > > -    .tbp: thermal_bind_params entries > > > + > > > +    .governor_name: > > > +        Name of the thermal governor used for this zone > > > +    .no_hwmon: > > > +        a boolean to indicate if the thermal to hwmon > > > sysfs > > > interface > > > +        is required. when no_hwmon == false, a hwmon > > > sysfs > > > interface > > > +        will be created. when no_hwmon == true, nothing > > > will > > > be done. > > > +        In case the thermal_zone_params is NULL, the > > > hwmon > > > interface > > > +        will be created (for backward compatibility). > > > +    .num_tbps: > > > +        Number of thermal_bind_params entries for this > > > zone > > > +    .tbp: > > > +        thermal_bind_params entries > > >   > > >  2. sysfs attributes structure > > > +============================= > > >   > > > +== ================ > > >  RO read only value > > >  WO write only value > > >  RW read/write value > > > +== ================ > > >   > > >  Thermal sysfs attributes will be represented under > > > /sys/class/thermal. > > >  Hwmon sysfs I/F extension is also available under > > > /sys/class/hwmon > > >  if hwmon is compiled in or built as a module. > > >   > > > -Thermal zone device sys I/F, created once it's registered: > > > -/sys/class/thermal/thermal_zone[0-*]: > > > +Thermal zone device sys I/F, created once it's registered:: > > > + > > > +  /sys/class/thermal/thermal_zone[0-*]: > > >      |---type: Type of the thermal zone > > >      |---temp: Current temperature > > >      |---mode: Working mode of the thermal > > > zone > > > @@ -282,8 +396,9 @@ Thermal zone device sys I/F, created once > > > it's > > > registered: > > >      |---slope:                  Slope constant applied as linear > > > extrapolation > > >      |---offset:                 Offset constant applied as > > > linear > > > extrapolation > > >   > > > -Thermal cooling device sys I/F, created once it's registered: > > > -/sys/class/thermal/cooling_device[0-*]: > > > +Thermal cooling device sys I/F, created once it's registered:: > > > + > > > +  /sys/class/thermal/cooling_device[0-*]: > > >      |---type: Type of the cooling > > > device(processor/fan/...) > > >      |---max_state: Maximum cooling state of the > > > cooling device > > >      |---cur_state: Current cooling state of the > > > cooling device > > > @@ -299,11 +414,13 @@ the relationship between a thermal zone and > > > its > > > associated cooling device. > > >  They are created/removed for each successful execution of > > >  thermal_zone_bind_cooling_device/thermal_zone_unbind_cooling_dev > > > ice. > > >   > > > -/sys/class/thermal/thermal_zone[0-*]: > > > +:: > > > + > > > +  /sys/class/thermal/thermal_zone[0-*]: > > >      |---cdev[0-*]: [0-*]th cooling device in > > > current > > > thermal zone > > >      |---cdev[0-*]_trip_point: Trip point that cdev[0-*] > > > is > > > associated with > > >      |---cdev[0-*]_weight:       Influence of the cooling device > > > in > > > -                                this thermal zone > > > + this thermal zone > > >   > > >  Besides the thermal zone device sysfs I/F and cooling device > > > sysfs > > > I/F, > > >  the generic thermal driver also creates a hwmon sysfs I/F for > > > each > > > _type_ > > > @@ -311,16 +428,17 @@ of thermal zone device. E.g. the generic > > > thermal driver registers one hwmon > > >  class device and build the associated hwmon sysfs I/F for all > > > the > > > registered > > >  ACPI thermal zones. > > >   > > > -/sys/class/hwmon/hwmon[0-*]: > > > +:: > > > + > > > +  /sys/class/hwmon/hwmon[0-*]: > > >      |---name: The type of the thermal > > > zone > > > devices > > >      |---temp[1-*]_input: The current temperature of > > > thermal > > > zone [1-*] > > >      |---temp[1-*]_critical: The critical trip point of > > > thermal zone [1-*] > > >   > > >  Please read Documentation/hwmon/sysfs-interface.rst for > > > additional > > > information. > > >   > > > -*************************** > > > -* Thermal zone attributes * > > > -*************************** > > > +Thermal zone attributes > > > +----------------------- > > >   > > >  type > > >   Strings which represent the thermal zone type. > > > @@ -340,54 +458,67 @@ mode > > >   This file gives information about the algorithm that is > > > currently > > >   managing the thermal zone. It can be either default > > > kernel > > > based > > >   algorithm or user space application. > > > - enabled = enable Kernel Thermal > > > management. > > > - disabled = Preventing kernel thermal zone driver > > > actions upon > > > + > > > + enabled > > > +   enable Kernel Thermal management. > > > + disabled > > > +   Preventing kernel thermal zone driver > > > actions upon > > >     trip points so that user application > > > can > > > take full > > >     charge of the thermal management. > > > + > > >   RW, Optional > > >   > > >  policy > > >   One of the various thermal governors used for a > > > particular > > > zone. > > > + > > >   RW, Required > > >   > > >  available_policies > > >   Available thermal governors which can be used for a > > > particular zone. > > > + > > >   RO, Required > > >   > > > -trip_point_[0-*]_temp > > > +`trip_point_[0-*]_temp` > > >   The temperature above which trip point will be fired. > > > + > > >   Unit: millidegree Celsius > > > + > > >   RO, Optional > > >   > > > -trip_point_[0-*]_type > > > +`trip_point_[0-*]_type` > > >   Strings which indicate the type of the trip point. > > > - E.g. it can be one of critical, hot, passive, active[0- > > > *] > > > for ACPI > > > + > > > + E.g. it can be one of critical, hot, passive, `active[0- > > > *]` > > > for ACPI > > >   thermal zone. > > > + > > >   RO, Optional > > >   > > > -trip_point_[0-*]_hyst > > > +`trip_point_[0-*]_hyst` > > >   The hysteresis value for a trip point, represented as an > > > integer > > >   Unit: Celsius > > >   RW, Optional > > >   > > > -cdev[0-*] > > > +`cdev[0-*]` > > >   Sysfs link to the thermal cooling device node where the > > > sys > > > I/F > > >   for cooling device throttling control represents. > > > + > > >   RO, Optional > > >   > > > -cdev[0-*]_trip_point > > > - The trip point in this thermal zone which cdev[0-*] is > > > associated > > > +`cdev[0-*]_trip_point` > > > + The trip point in this thermal zone which `cdev[0-*]` is > > > associated > > >   with; -1 means the cooling device is not associated with > > > any > > > trip > > >   point. > > > + > > >   RO, Optional > > >   > > > -cdev[0-*]_weight > > > -        The influence of cdev[0-*] in this thermal zone. This > > > value > > > -        is relative to the rest of cooling devices in the > > > thermal > > > -        zone. For example, if a cooling device has a weight > > > double > > > -        than that of other, it's twice as effective in cooling > > > the > > > -        thermal zone. > > > -        RW, Optional > > > +`cdev[0-*]_weight` > > > + The influence of `cdev[0-*]` in this thermal zone. This > > > value > > > + is relative to the rest of cooling devices in the > > > thermal > > > + zone. For example, if a cooling device has a weight > > > double > > > + than that of other, it's twice as effective in cooling > > > the > > > + thermal zone. > > > + > > > + RW, Optional > > >   > > >  passive > > >   Attribute is only present for zones in which the passive > > > cooling > > > @@ -395,8 +526,11 @@ passive > > >   and can be set to a temperature (in millidegrees) to > > > enable > > > a > > >   passive trip point for the zone. Activation is done by > > > polling with > > >   an interval of 1 second. > > > + > > >   Unit: millidegrees Celsius > > > + > > >   Valid values: 0 (disabled) or greater than 1000 > > > + > > >   RW, Optional > > >   > > >  emul_temp > > > @@ -407,17 +541,21 @@ emul_temp > > >   threshold and its associated cooling action. This is > > > write > > > only node > > >   and writing 0 on this node should disable emulation. > > >   Unit: millidegree Celsius > > > + > > >   WO, Optional > > >   > > > -   WARNING: Be careful while enabling this option on > > > production systems, > > > -   because userland can easily disable the thermal policy > > > by > > > simply > > > -   flooding this sysfs node with low temperature values. > > > +   WARNING: > > > +     Be careful while enabling this option on production > > > systems, > > > +     because userland can easily disable the thermal > > > policy > > > by simply > > > +     flooding this sysfs node with low temperature > > > values. > > >   > > >  sustainable_power > > >   An estimate of the sustained power that can be > > > dissipated by > > >   the thermal zone. Used by the power allocator governor. > > > For > > > - more information see > > > Documentation/thermal/power_allocator.txt > > > + more information see > > > Documentation/thermal/power_allocator.rst > > > + > > >   Unit: milliwatts > > > + > > >   RW, Optional > > >   > > >  k_po > > > @@ -425,7 +563,8 @@ k_po > > >   controller during temperature overshoot. Temperature > > > overshoot > > >   is when the current temperature is above the "desired > > >   temperature" trip point. For more information see > > > - Documentation/thermal/power_allocator.txt > > > + Documentation/thermal/power_allocator.rst > > > + > > >   RW, Optional > > >   > > >  k_pu > > > @@ -433,20 +572,23 @@ k_pu > > >   controller during temperature undershoot. Temperature > > > undershoot > > >   is when the current temperature is below the "desired > > >   temperature" trip point. For more information see > > > - Documentation/thermal/power_allocator.txt > > > + Documentation/thermal/power_allocator.rst > > > + > > >   RW, Optional > > >   > > >  k_i > > >   The integral term of the power allocator governor's PID > > >   controller. This term allows the PID controller to > > > compensate > > >   for long term drift. For more information see > > > - Documentation/thermal/power_allocator.txt > > > + Documentation/thermal/power_allocator.rst > > > + > > >   RW, Optional > > >   > > >  k_d > > >   The derivative term of the power allocator governor's > > > PID > > >   controller. For more information see > > > - Documentation/thermal/power_allocator.txt > > > + Documentation/thermal/power_allocator.rst > > > + > > >   RW, Optional > > >   > > >  integral_cutoff > > > @@ -456,8 +598,10 @@ integral_cutoff > > >   example, if integral_cutoff is 0, then the integral term > > > only > > >   accumulates error when temperature is above the desired > > >   temperature trip point. For more information see > > > - Documentation/thermal/power_allocator.txt > > > + Documentation/thermal/power_allocator.rst > > > + > > >   Unit: millidegree Celsius > > > + > > >   RW, Optional > > >   > > >  slope > > > @@ -465,6 +609,7 @@ slope > > >   to determine a hotspot temperature based off the > > > sensor's > > >   raw readings. It is up to the device driver to determine > > >   the usage of these values. > > > + > > >   RW, Optional > > >   > > >  offset > > > @@ -472,28 +617,33 @@ offset > > >   to determine a hotspot temperature based off the > > > sensor's > > >   raw readings. It is up to the device driver to determine > > >   the usage of these values. > > > + > > >   RW, Optional > > >   > > > -***************************** > > > -* Cooling device attributes * > > > -***************************** > > > +Cooling device attributes > > > +------------------------- > > >   > > >  type > > >   String which represents the type of device, e.g: > > > + > > >   - for generic ACPI: should be "Fan", "Processor" or > > > "LCD" > > >   - for memory controller device on intel_menlow platform: > > >     should be "Memory controller". > > > + > > >   RO, Required > > >   > > >  max_state > > >   The maximum permissible cooling state of this cooling > > > device. > > > + > > >   RO, Required > > >   > > >  cur_state > > >   The current cooling state of this cooling device. > > >   The value can any integer numbers between 0 and > > > max_state: > > > + > > >   - cur_state == 0 means no cooling > > >   - cur_state == max_state means the maximum cooling. > > > + > > >   RW, Required > > >   > > >  stats/reset > > > @@ -508,9 +658,11 @@ stats/time_in_state_ms: > > >   units here is 10mS (similar to other time exported in > > > /proc). > > >   RO, Required > > >   > > > + > > >  stats/total_trans: > > >   A single positive value showing the total number of > > > times > > > the state of a > > >   cooling device is changed. > > > + > > >   RO, Required > > >   > > >  stats/trans_table: > > > @@ -522,6 +674,7 @@ stats/trans_table: > > >   RO, Required > > >   > > >  3. A simple implementation > > > +========================== > > >   > > >  ACPI thermal zone may support multiple trip points like > > > critical, > > > hot, > > >  passive, active. If an ACPI thermal zone supports critical, > > > passive, > > > @@ -532,11 +685,10 @@ thermal_cooling_device. Both are considered > > > to > > > have the same > > >  effectiveness in cooling the thermal zone. > > >   > > >  If the processor is listed in _PSL method, and the fan is listed > > > in > > > _AL0 > > > -method, the sys I/F structure will be built like this: > > > +method, the sys I/F structure will be built like this:: > > >   > > > -/sys/class/thermal: > > > - > > > -|thermal_zone1: > > > + /sys/class/thermal: > > > +  |thermal_zone1: > > >      |---type: acpitz > > >      |---temp: 37000 > > >      |---mode: enabled > > > @@ -557,24 +709,24 @@ method, the sys I/F structure will be built > > > like this: > > >      |---cdev1_trip_point: 2 /* cdev1 can be used > > > for > > > active[0]*/ > > >      |---cdev1_weight:           1024 > > >   > > > -|cooling_device0: > > > +  |cooling_device0: > > >      |---type: Processor > > >      |---max_state: 8 > > >      |---cur_state: 0 > > >   > > > -|cooling_device3: > > > +  |cooling_device3: > > >      |---type: Fan > > >      |---max_state: 2 > > >      |---cur_state: 0 > > >   > > > -/sys/class/hwmon: > > > - > > > -|hwmon0: > > > + /sys/class/hwmon: > > > +  |hwmon0: > > >      |---name: acpitz > > >      |---temp1_input: 37000 > > >      |---temp1_crit: 100000 > > >   > > >  4. Event Notification > > > +===================== > > >   > > >  The framework includes a simple notification mechanism, in the > > > form > > > of a > > >  netlink event. Netlink socket initialization is done during the > > > _init_ > > > @@ -587,21 +739,28 @@ event will be one of:{THERMAL_AUX0, > > > THERMAL_AUX1, THERMAL_CRITICAL, > > >  THERMAL_DEV_FAULT}. Notification can be sent when the current > > > temperature > > >  crosses any of the configured thresholds. > > >   > > > -5. Export Symbol APIs: > > > +5. Export Symbol APIs > > > +===================== > > > + > > > +5.1. get_tz_trend > > > +----------------- > > >   > > > -5.1: get_tz_trend: > > >  This function returns the trend of a thermal zone, i.e the rate > > > of > > > change > > >  of temperature of the thermal zone. Ideally, the thermal sensor > > > drivers > > >  are supposed to implement the callback. If they don't, the > > > thermal > > >  framework calculated the trend by comparing the previous and the > > > current > > >  temperature values. > > >   > > > -5.2:get_thermal_instance: > > > +5.2. get_thermal_instance > > > +------------------------- > > > + > > >  This function returns the thermal_instance corresponding to a > > > given > > >  {thermal_zone, cooling_device, trip_point} combination. Returns > > > NULL > > >  if such an instance does not exist. > > >   > > > -5.3:thermal_notify_framework: > > > +5.3. thermal_notify_framework > > > +----------------------------- > > > + > > >  This function handles the trip events from sensor drivers. It > > > starts > > >  throttling the cooling devices according to the policy > > > configured. > > >  For CRITICAL and HOT trip points, this notifies the respective > > > drivers, > > > @@ -609,12 +768,15 @@ and does actual throttling for other trip > > > points i.e ACTIVE and PASSIVE. > > >  The throttling policy is based on the configured platform data; > > > if > > > no > > >  platform data is provided, this uses the step_wise throttling > > > policy. > > >   > > > -5.4:thermal_cdev_update: > > > +5.4. thermal_cdev_update > > > +------------------------ > > > + > > >  This function serves as an arbitrator to set the state of a > > > cooling > > >  device. It sets the cooling device to the deepest cooling state > > > if > > >  possible. > > >   > > > -6. thermal_emergency_poweroff: > > > +6. thermal_emergency_poweroff > > > +============================= > > >   > > >  On an event of critical trip temperature crossing. Thermal > > > framework > > >  allows the system to shutdown gracefully by calling > > > orderly_poweroff(). > > > diff --git a/Documentation/thermal/x86_pkg_temperature_thermal > > > b/Documentation/thermal/x86_pkg_temperature_thermal.rst > > > similarity index 80% > > > rename from Documentation/thermal/x86_pkg_temperature_thermal > > > rename to Documentation/thermal/x86_pkg_temperature_thermal.rst > > > index 17a3a4c0a0ca..f134dbd3f5a9 100644 > > > --- a/Documentation/thermal/x86_pkg_temperature_thermal > > > +++ b/Documentation/thermal/x86_pkg_temperature_thermal.rst > > > @@ -1,19 +1,23 @@ > > > +=================================== > > >  Kernel driver: x86_pkg_temp_thermal > > > -=================== > > > +=================================== > > >   > > >  Supported chips: > > > + > > >  * x86: with package level thermal management > > > + > > >  (Verify using: CPUID.06H:EAX[bit 6] =1) > > >   > > >  Authors: Srinivas Pandruvada > > m> > > >   > > >  Reference > > > ---- > > > +--------- > > > + > > >  Intel® 64 and IA-32 Architectures Software Developer’s Manual > > > (Jan, > > > 2013): > > >  Chapter 14.6: PACKAGE LEVEL THERMAL MANAGEMENT > > >   > > >  Description > > > ---------- > > > +----------- > > >   > > >  This driver register CPU digital temperature package level > > > sensor as > > > a thermal > > >  zone with maximum two user mode configurable trip points. Number > > > of > > > trip points > > > @@ -25,23 +29,27 @@ take any action to control temperature. > > >  Threshold management > > >  -------------------- > > >  Each package will register as a thermal zone under > > > /sys/class/thermal. > > > -Example: > > > -/sys/class/thermal/thermal_zone1 > > > + > > > +Example:: > > > + > > > + /sys/class/thermal/thermal_zone1 > > >   > > >  This contains two trip points: > > > + > > >  - trip_point_0_temp > > >  - trip_point_1_temp > > >   > > >  User can set any temperature between 0 to TJ-Max temperature. > > > Temperature units > > > -are in milli-degree Celsius. Refer to > > > "Documentation/thermal/sysfs- > > > api.txt" for > > > +are in milli-degree Celsius. Refer to > > > "Documentation/thermal/sysfs- > > > api.rst" for > > >  thermal sys-fs details. > > >   > > >  Any value other than 0 in these trip points, can trigger thermal > > > notifications. > > >  Setting 0, stops sending thermal notifications. > > >   > > > -Thermal notifications: To get kobject-uevent notifications, set > > > the > > > thermal zone > > > -policy to "user_space". For example: echo -n "user_space" > > > > policy > > > - > > > - > > > +Thermal notifications: > > > +To get kobject-uevent notifications, set the thermal zone > > > +policy to "user_space". > > >   > > > +For example:: > > >   > > > + echo -n "user_space" > policy > > > diff --git a/MAINTAINERS b/MAINTAINERS > > > index d9e214f68e52..b2254bc8e495 100644 > > > --- a/MAINTAINERS > > > +++ b/MAINTAINERS > > > @@ -15687,7 +15687,7 @@ M: Viresh Kumar > > ro.o   > > > rg>   > > >  M: Javi Merino > > >  L: linux-pm@vger.kernel.org > > >  S: Supported > > > -F: Documentation/thermal/cpu-cooling-api.txt > > > +F: Documentation/thermal/cpu-cooling-api.rst > > >  F: drivers/thermal/cpu_cooling.c > > >  F: include/linux/cpu_cooling.h > > >   > > > diff --git a/include/linux/thermal.h b/include/linux/thermal.h > > > index 15a4ca5d7099..681047f8cc05 100644 > > > --- a/include/linux/thermal.h > > > +++ b/include/linux/thermal.h > > > @@ -251,7 +251,7 @@ struct thermal_bind_params { > > >    * platform characterization. This value is relative to > > > the > > >    * rest of the weights so a cooling device whose weight > > > is > > >    * double that of another cooling device is twice as > > > -  * effective. See Documentation/thermal/sysfs-api.txt > > > for > > > more > > > +  * effective. See Documentation/thermal/sysfs-api.rst > > > for > > > more > > >    * information. > > >    */ > > >   int weight; > > > @@ -259,7 +259,7 @@ struct thermal_bind_params { > > >   /* > > >    * This is a bit mask that gives the binding relation > > > between this > > >    * thermal zone and cdev, for a particular trip point. > > > -  * See Documentation/thermal/sysfs-api.txt for more > > > information. > > > +  * See Documentation/thermal/sysfs-api.rst for more > > > information. > > >    */ > > >   int trip_mask; > > >     > > > Thanks, > Mauro From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 51889C48BD4 for ; Tue, 25 Jun 2019 14:22:29 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 09A632133F for ; Tue, 25 Jun 2019 14:22:29 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="Qur9qkxT" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 09A632133F Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:Mime-Version:References:In-Reply-To: Date:To:From:Subject:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=Xg3WLOiEPEbt/pqaFh2lY6DiqFz40UC0/hCGiHmKgKs=; b=Qur9qkxTFozuN5 9RZ/0k7huCfmvUb2Cj5uMwpALNQiT+WlFOmwcBcpk/ORyWqCrCOSqefXceLoJaMuwkrofodV8zSJ7 FQ2IhM+ZLrND+GfRgHBGxmQTXw0hhXK3yDTZWCX1xlFsNqfL7eLFy3pO5ie9CD1ooTAsY3LA+Mzp3 deYRhwH8I4+sPsFqRsl8rW7fETUVnKkg2wA7ckfEpHcRJJA4b7HU7Sw4h3JY+T5sZh2j1cRP1jZLl w6AijgShb1QkxJ/Xkx/7tTqn+n55q3hfKkhdu9sEUa7emWbBumDLP0kAaT54sxWSwgjerrO26TlDE WtjoZCi/G2NKZ8pwEA0g==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92 #3 (Red Hat Linux)) id 1hfmL0-0000It-6s; Tue, 25 Jun 2019 14:22:22 +0000 Received: from mga03.intel.com ([134.134.136.65]) by bombadil.infradead.org with esmtps (Exim 4.92 #3 (Red Hat Linux)) id 1hfmKa-0008UP-LB for linux-arm-kernel@lists.infradead.org; Tue, 25 Jun 2019 14:22:05 +0000 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 25 Jun 2019 07:21:54 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.63,416,1557212400"; d="scan'208";a="163999718" Received: from syhu-mobl.ccr.corp.intel.com ([10.249.173.95]) by orsmga003.jf.intel.com with ESMTP; 25 Jun 2019 07:21:48 -0700 Message-ID: <1561472500.19713.2.camel@intel.com> Subject: Re: [PATCH v1 04/22] docs: thermal: convert to ReST From: Zhang Rui To: Mauro Carvalho Chehab Date: Tue, 25 Jun 2019 22:21:40 +0800 In-Reply-To: <20190625105334.19ae5d12@coco.lan> References: <23fafb70bfc9bd8b7f306f2502617d8f8794eae5.1560891322.git.mchehab+samsung@kernel.org> <1561470011.19713.1.camel@intel.com> <20190625105334.19ae5d12@coco.lan> X-Mailer: Evolution 3.18.5.2-0ubuntu3.2 Mime-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190625_072156_909245_2F8A9CCE X-CRM114-Status: GOOD ( 33.76 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Daniel Lezcano , Jonathan Corbet , Viresh Kumar , Amit Daniel Kachhap , Linux Doc Mailing List , linux-kernel@vger.kernel.org, Krzysztof Kozlowski , Mauro Carvalho Chehab , Eduardo Valentin , linux-samsung-soc@vger.kernel.org, Kukjin Kim , linux-pm@vger.kernel.org, Javi Merino , Arjan van de Ven , linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24g5LqMLCAyMDE5LTA2LTI1IGF0IDEwOjUzIC0wMzAwLCBNYXVybyBDYXJ2YWxobyBDaGVoYWIg d3JvdGU6Cj4gRW0gVHVlLCAyNSBKdW4gMjAxOSAyMTo0MDoxMSArMDgwMAo+IFpoYW5nIFJ1aSA8 cnVpLnpoYW5nQGludGVsLmNvbT4gZXNjcmV2ZXU6Cj4gCj4gPiAKPiA+IE9uIOS6jCwgMjAxOS0w Ni0xOCBhdCAxODowNSAtMDMwMCwgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIHdyb3RlOgo+ID4gPiAK PiA+ID4gUmVuYW1lIHRoZSB0aGVybWFsIGRvY3VtZW50YXRpb24gZmlsZXMgdG8gUmVTVCwgYWRk IGFuCj4gPiA+IGluZGV4IGZvciB0aGVtIGFuZCBhZGp1c3QgaW4gb3JkZXIgdG8gcHJvZHVjZSBh IG5pY2UgaHRtbAo+ID4gPiBvdXRwdXQgdmlhIHRoZSBTcGhpbnggYnVpbGQgc3lzdGVtLgo+ID4g PiAKPiA+ID4gQXQgaXRzIG5ldyBpbmRleC5yc3QsIGxldCdzIGFkZCBhIDpvcnBoYW46IHdoaWxl IHRoaXMgaXMgbm90Cj4gPiA+IGxpbmtlZAo+ID4gPiB0bwo+ID4gPiB0aGUgbWFpbiBpbmRleC5y c3QgZmlsZSwgaW4gb3JkZXIgdG8gYXZvaWQgYnVpbGQgd2FybmluZ3MuCj4gPiA+IAo+ID4gPiBT aWduZWQtb2ZmLWJ5OiBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWIrc2Ftc3VuZ0BrZXJu ZWwub3JnPgo+ID4gPiDCoMKgCj4gPiBBY2tlZC1ieTogWmhhbmcgUnVpIDxydWkuemhhbmdAaW50 ZWwuY29tPgo+ID4gCj4gPiBzaG91bGQgSSBhcHBseSB0aGlzIHBhdGNoIG9yIHlvdSBoYXZlIGEg c2VwYXJhdGUgdHJlZSBmb3IgYWxsIHRoZXNlCj4gPiBjaGFuZ2VzPwo+IEZlZWwgZnJlZSB0byBh cHBseSBpdCBkaXJlY3RseSB0byB5b3VyIHRyZWUuIFRoZSBwYXRjaGVzIG9uIHRoaXMKPiBzZXJp ZXMgYXJlIHByZXR0eSBtdWNoIGluZGVwZW5kZW50Lgo+IApva2F5LCBxdWV1ZWQgZm9yIDUuMy1y YzEuCgp0aGFua3MsCnJ1aQo+ID4gCj4gPiAKPiA+IHRoYW5rcywKPiA+IHJ1aQo+ID4gPiAKPiA+ ID4gLS0tCj4gPiA+IMKgLi4ucHUtY29vbGluZy1hcGkudHh0ID0+IGNwdS1jb29saW5nLWFwaS5y c3R9IHzCoMKgMzkgKy0KPiA+ID4gwqAuLi4ve2V4eW5vc190aGVybWFsID0+IGV4eW5vc190aGVy bWFsLnJzdH3CoMKgwqDCoHzCoMKgNDcgKy0KPiA+ID4gwqAuLi5lbXVsYXRpb24gPT4gZXh5bm9z X3RoZXJtYWxfZW11bGF0aW9uLnJzdH0gfMKgwqA2NiArLS0KPiA+ID4gwqBEb2N1bWVudGF0aW9u L3RoZXJtYWwvaW5kZXgucnN0wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqAxOCAr Cj4gPiA+IMKgLi4uZWxfcG93ZXJjbGFtcC50eHQgPT4gaW50ZWxfcG93ZXJjbGFtcC5yc3R9IHwg MTc3ICsrKy0tLS0KPiA+ID4gwqAuLi4ve25vdXZlYXVfdGhlcm1hbCA9PiBub3V2ZWF1X3RoZXJt YWwucnN0fcKgwqB8wqDCoDU0ICstCj4gPiA+IMKgLi4ub3dlcl9hbGxvY2F0b3IudHh0ID0+IHBv d2VyX2FsbG9jYXRvci5yc3R9IHwgMTQwICsrLS0tCj4gPiA+IMKgLi4uL3RoZXJtYWwve3N5c2Zz LWFwaS50eHQgPT4gc3lzZnMtYXBpLnJzdH3CoMKgfCA0OTAKPiA+ID4gKysrKysrKysrKysrLS0K PiA+ID4gLS0tLQo+ID4gPiDCoC4uLmhlcm1hbCA9PiB4ODZfcGtnX3RlbXBlcmF0dXJlX3RoZXJt YWwucnN0fSB8wqDCoDI4ICstCj4gPiA+IMKgTUFJTlRBSU5FUlPCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqDC oDIgKy0KPiA+ID4gwqBpbmNsdWRlL2xpbnV4L3RoZXJtYWwuaMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoMKgNCArLQo+ID4gPiDCoDExIGZpbGVzIGNo YW5nZWQsIDY2NSBpbnNlcnRpb25zKCspLCA0MDAgZGVsZXRpb25zKC0pCj4gPiA+IMKgcmVuYW1l IERvY3VtZW50YXRpb24vdGhlcm1hbC97Y3B1LWNvb2xpbmctYXBpLnR4dCA9PiBjcHUtCj4gPiA+ IGNvb2xpbmctCj4gPiA+IGFwaS5yc3R9ICg4MiUpCj4gPiA+IMKgcmVuYW1lIERvY3VtZW50YXRp b24vdGhlcm1hbC97ZXh5bm9zX3RoZXJtYWwgPT4KPiA+ID4gZXh5bm9zX3RoZXJtYWwucnN0fQo+ ID4gPiAoNjclKQo+ID4gPiDCoHJlbmFtZSBEb2N1bWVudGF0aW9uL3RoZXJtYWwve2V4eW5vc190 aGVybWFsX2VtdWxhdGlvbiA9Pgo+ID4gPiBleHlub3NfdGhlcm1hbF9lbXVsYXRpb24ucnN0fSAo MzYlKQo+ID4gPiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBEb2N1bWVudGF0aW9uL3RoZXJtYWwvaW5k ZXgucnN0Cj4gPiA+IMKgcmVuYW1lIERvY3VtZW50YXRpb24vdGhlcm1hbC97aW50ZWxfcG93ZXJj bGFtcC50eHQgPT4KPiA+ID4gaW50ZWxfcG93ZXJjbGFtcC5yc3R9ICg3NiUpCj4gPiA+IMKgcmVu YW1lIERvY3VtZW50YXRpb24vdGhlcm1hbC97bm91dmVhdV90aGVybWFsID0+Cj4gPiA+IG5vdXZl YXVfdGhlcm1hbC5yc3R9ICg2NCUpCj4gPiA+IMKgcmVuYW1lIERvY3VtZW50YXRpb24vdGhlcm1h bC97cG93ZXJfYWxsb2NhdG9yLnR4dCA9Pgo+ID4gPiBwb3dlcl9hbGxvY2F0b3IucnN0fSAoNzQl KQo+ID4gPiDCoHJlbmFtZSBEb2N1bWVudGF0aW9uL3RoZXJtYWwve3N5c2ZzLWFwaS50eHQgPT4g c3lzZnMtYXBpLnJzdH0KPiA+ID4gKDY2JSkKPiA+ID4gwqByZW5hbWUgRG9jdW1lbnRhdGlvbi90 aGVybWFsL3t4ODZfcGtnX3RlbXBlcmF0dXJlX3RoZXJtYWwgPT4KPiA+ID4geDg2X3BrZ190ZW1w ZXJhdHVyZV90aGVybWFsLnJzdH0gKDgwJSkKPiA+ID4gCj4gPiA+IGRpZmYgLS1naXQgYS9Eb2N1 bWVudGF0aW9uL3RoZXJtYWwvY3B1LWNvb2xpbmctYXBpLnR4dAo+ID4gPiBiL0RvY3VtZW50YXRp b24vdGhlcm1hbC9jcHUtY29vbGluZy1hcGkucnN0Cj4gPiA+IHNpbWlsYXJpdHkgaW5kZXggODIl Cj4gPiA+IHJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vdGhlcm1hbC9jcHUtY29vbGluZy1hcGku dHh0Cj4gPiA+IHJlbmFtZSB0byBEb2N1bWVudGF0aW9uL3RoZXJtYWwvY3B1LWNvb2xpbmctYXBp LnJzdAo+ID4gPiBpbmRleCA3ZGY1NjdlYWVhMWEuLjY0NWQ5MTRjNDVhNiAxMDA2NDQKPiA+ID4g LS0tIGEvRG9jdW1lbnRhdGlvbi90aGVybWFsL2NwdS1jb29saW5nLWFwaS50eHQKPiA+ID4gKysr IGIvRG9jdW1lbnRhdGlvbi90aGVybWFsL2NwdS1jb29saW5nLWFwaS5yc3QKPiA+ID4gQEAgLTEs NSArMSw2IEBACj4gPiA+ICs9PT09PT09PT09PT09PT09PT09PT09PQo+ID4gPiDCoENQVSBjb29s aW5nIEFQSXMgSG93IFRvCj4gPiA+IC09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQo+ID4gPiArPT09PT09PT09PT09PT09PT09PT09PT0KPiA+ID4gwqAKPiA+ID4gwqBXcml0dGVu IGJ5IEFtaXQgRGFuaWVsIEthY2hoYXAgPGFtaXQua2FjaGhhcEBsaW5hcm8ub3JnPgo+ID4gPiDC oAo+ID4gPiBAQCAtOCw0MCArOSw1NCBAQCBVcGRhdGVkOiA2IEphbiAyMDE1Cj4gPiA+IMKgQ29w eXJpZ2h0IChjKcKgwqAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQoaHR0cDovL3d3 dy5zYW1zCj4gPiA+IHVuZy4KPiA+ID4gY29tKQo+ID4gPiDCoAo+ID4gPiDCoDAuIEludHJvZHVj dGlvbgo+ID4gPiArPT09PT09PT09PT09PT09Cj4gPiA+IMKgCj4gPiA+IMKgVGhlIGdlbmVyaWMg Y3B1IGNvb2xpbmcoZnJlcSBjbGlwcGluZykgcHJvdmlkZXMKPiA+ID4gcmVnaXN0cmF0aW9uL3Vu cmVnaXN0cmF0aW9uIEFQSXMKPiA+ID4gwqB0byB0aGUgY2FsbGVyLiBUaGUgYmluZGluZyBvZiB0 aGUgY29vbGluZyBkZXZpY2VzIHRvIHRoZSB0cmlwCj4gPiA+IHBvaW50Cj4gPiA+IGlzIGxlZnQg Zm9yCj4gPiA+IMKgdGhlIHVzZXIuIFRoZSByZWdpc3RyYXRpb24gQVBJcyByZXR1cm5zIHRoZSBj b29saW5nIGRldmljZQo+ID4gPiBwb2ludGVyLgo+ID4gPiDCoAo+ID4gPiDCoDEuIGNwdSBjb29s aW5nIEFQSXMKPiA+ID4gKz09PT09PT09PT09PT09PT09PT0KPiA+ID4gwqAKPiA+ID4gwqAxLjEg Y3B1ZnJlcSByZWdpc3RyYXRpb24vdW5yZWdpc3RyYXRpb24gQVBJcwo+ID4gPiAtMS4xLjEgc3Ry dWN0IHRoZXJtYWxfY29vbGluZ19kZXZpY2UgKmNwdWZyZXFfY29vbGluZ19yZWdpc3RlcigKPiA+ ID4gLQlzdHJ1Y3QgY3B1bWFzayAqY2xpcF9jcHVzKQo+ID4gPiArLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiA+ID4gKwo+ID4gPiArwqDCoMKgwqA6Ogo+ID4g PiArCj4gPiA+ICsJc3RydWN0IHRoZXJtYWxfY29vbGluZ19kZXZpY2UKPiA+ID4gKwkqY3B1ZnJl cV9jb29saW5nX3JlZ2lzdGVyKHN0cnVjdCBjcHVtYXNrICpjbGlwX2NwdXMpCj4gPiA+IMKgCj4g PiA+IMKgwqDCoMKgwqBUaGlzIGludGVyZmFjZSBmdW5jdGlvbiByZWdpc3RlcnMgdGhlIGNwdWZy ZXEgY29vbGluZyBkZXZpY2UKPiA+ID4gd2l0aCB0aGUgbmFtZQo+ID4gPiDCoMKgwqDCoMKgInRo ZXJtYWwtY3B1ZnJlcS0leCIuIFRoaXMgYXBpIGNhbiBzdXBwb3J0IG11bHRpcGxlCj4gPiA+IGlu c3RhbmNlcyBvZgo+ID4gPiBjcHVmcmVxCj4gPiA+IMKgwqDCoMKgwqBjb29saW5nIGRldmljZXMu Cj4gPiA+IMKgCj4gPiA+IC3CoMKgwqBjbGlwX2NwdXM6IGNwdW1hc2sgb2YgY3B1cyB3aGVyZSB0 aGUgZnJlcXVlbmN5IGNvbnN0cmFpbnRzCj4gPiA+IHdpbGwKPiA+ID4gaGFwcGVuLgo+ID4gPiAr wqDCoMKgY2xpcF9jcHVzOgo+ID4gPiArCWNwdW1hc2sgb2YgY3B1cyB3aGVyZSB0aGUgZnJlcXVl bmN5IGNvbnN0cmFpbnRzIHdpbGwKPiA+ID4gaGFwcGVuLgo+ID4gPiDCoAo+ID4gPiAtMS4xLjIg c3RydWN0IHRoZXJtYWxfY29vbGluZ19kZXZpY2UKPiA+ID4gKm9mX2NwdWZyZXFfY29vbGluZ19y ZWdpc3RlcigKPiA+ID4gLQkJCQkJc3RydWN0IGNwdWZyZXFfcG9saWN5Cj4gPiA+ICpwb2xpY3kp Cj4gPiA+ICvCoMKgwqDCoDo6Cj4gPiA+ICsKPiA+ID4gKwlzdHJ1Y3QgdGhlcm1hbF9jb29saW5n X2RldmljZQo+ID4gPiArCSpvZl9jcHVmcmVxX2Nvb2xpbmdfcmVnaXN0ZXIoc3RydWN0IGNwdWZy ZXFfcG9saWN5Cj4gPiA+ICpwb2xpY3kpCj4gPiA+IMKgCj4gPiA+IMKgwqDCoMKgwqBUaGlzIGlu dGVyZmFjZSBmdW5jdGlvbiByZWdpc3RlcnMgdGhlIGNwdWZyZXEgY29vbGluZyBkZXZpY2UKPiA+ ID4gd2l0aAo+ID4gPiDCoMKgwqDCoMKgdGhlIG5hbWUgInRoZXJtYWwtY3B1ZnJlcS0leCIgbGlu a2luZyBpdCB3aXRoIGEgZGV2aWNlIHRyZWUKPiA+ID4gbm9kZSwgaW4KPiA+ID4gwqDCoMKgwqDC oG9yZGVyIHRvIGJpbmQgaXQgdmlhIHRoZSB0aGVybWFsIERUIGNvZGUuIFRoaXMgYXBpIGNhbgo+ ID4gPiBzdXBwb3J0Cj4gPiA+IG11bHRpcGxlCj4gPiA+IMKgwqDCoMKgwqBpbnN0YW5jZXMgb2Yg Y3B1ZnJlcSBjb29saW5nIGRldmljZXMuCj4gPiA+IMKgCj4gPiA+IC3CoMKgwqDCoHBvbGljeTog Q1BVRnJlcSBwb2xpY3kuCj4gPiA+ICvCoMKgwqDCoHBvbGljeToKPiA+ID4gKwlDUFVGcmVxIHBv bGljeS4KPiA+ID4gwqAKPiA+ID4gLTEuMS4zIHZvaWQgY3B1ZnJlcV9jb29saW5nX3VucmVnaXN0 ZXIoc3RydWN0Cj4gPiA+IHRoZXJtYWxfY29vbGluZ19kZXZpY2UKPiA+ID4gKmNkZXYpCj4gPiA+ ICsKPiA+ID4gK8KgwqDCoMKgOjoKPiA+ID4gKwo+ID4gPiArCXZvaWQgY3B1ZnJlcV9jb29saW5n X3VucmVnaXN0ZXIoc3RydWN0Cj4gPiA+IHRoZXJtYWxfY29vbGluZ19kZXZpY2UgKmNkZXYpCj4g PiA+IMKgCj4gPiA+IMKgwqDCoMKgwqBUaGlzIGludGVyZmFjZSBmdW5jdGlvbiB1bnJlZ2lzdGVy cyB0aGUgInRoZXJtYWwtY3B1ZnJlcS0leCIKPiA+ID4gY29vbGluZyBkZXZpY2UuCj4gPiA+IMKg Cj4gPiA+IMKgwqDCoMKgwqBjZGV2OiBDb29saW5nIGRldmljZSBwb2ludGVyIHdoaWNoIGhhcyB0 byBiZSB1bnJlZ2lzdGVyZWQuCj4gPiA+IMKgCj4gPiA+IMKgMi4gUG93ZXIgbW9kZWxzCj4gPiA+ ICs9PT09PT09PT09PT09PT0KPiA+ID4gwqAKPiA+ID4gwqBUaGUgcG93ZXIgQVBJIHJlZ2lzdHJh dGlvbiBmdW5jdGlvbnMgcHJvdmlkZSBhIHNpbXBsZSBwb3dlcgo+ID4gPiBtb2RlbAo+ID4gPiBm b3IKPiA+ID4gwqBDUFVzLsKgwqBUaGUgY3VycmVudCBwb3dlciBpcyBjYWxjdWxhdGVkIGFzIGR5 bmFtaWMgcG93ZXIgKHN0YXRpYwo+ID4gPiBwb3dlciBpc24ndAo+ID4gPiBAQCAtNjUsOSArODAs OSBAQCBGb3IgYSBnaXZlbiBwcm9jZXNzb3IgaW1wbGVtZW50YXRpb24gdGhlCj4gPiA+IHByaW1h cnkKPiA+ID4gZmFjdG9ycyBhcmU6Cj4gPiA+IMKgwqDCoHZhcmlhdGlvbi7CoMKgSW4gcGF0aG9s b2dpY2FsIGNhc2VzIHRoaXMgdmFyaWF0aW9uIGNhbiBiZQo+ID4gPiBzaWduaWZpY2FudCwKPiA+ ID4gwqDCoMKgYnV0IHR5cGljYWxseSBpdCBpcyBvZiBhIG11Y2ggbGVzc2VyIGltcGFjdCB0aGFu IHRoZSBmYWN0b3JzCj4gPiA+IGFib3ZlLgo+ID4gPiDCoAo+ID4gPiAtQSBoaWdoIGxldmVsIGR5 bmFtaWMgcG93ZXIgY29uc3VtcHRpb24gbW9kZWwgbWF5IHRoZW4gYmUKPiA+ID4gcmVwcmVzZW50 ZWQKPiA+ID4gYXM6Cj4gPiA+ICtBIGhpZ2ggbGV2ZWwgZHluYW1pYyBwb3dlciBjb25zdW1wdGlv biBtb2RlbCBtYXkgdGhlbiBiZQo+ID4gPiByZXByZXNlbnRlZAo+ID4gPiBhczo6Cj4gPiA+IMKg Cj4gPiA+IC1QZHluID0gZihydW4pICogVm9sdGFnZV4yICogRnJlcXVlbmN5ICogVXRpbGlzYXRp b24KPiA+ID4gKwlQZHluID0gZihydW4pICogVm9sdGFnZV4yICogRnJlcXVlbmN5ICogVXRpbGlz YXRpb24KPiA+ID4gwqAKPiA+ID4gwqBmKHJ1bikgaGVyZSByZXByZXNlbnRzIHRoZSBkZXNjcmli ZWQgZXhlY3V0aW9uIGJlaGF2aW91ciBhbmQgaXRzCj4gPiA+IMKgcmVzdWx0IGhhcyBhIHVuaXRz IG9mIFdhdHRzL0h6L1ZvbHReMiAodGhpcyBvZnRlbiBleHByZXNzZWQgaW4KPiA+ID4gQEAgLTgw LDkgKzk1LDkgQEAgZmFjdG9ycy7CoMKgVGhlcmVmb3JlLCBpbiBpbml0aWFsIGltcGxlbWVudGF0 aW9uCj4gPiA+IHRoYXQKPiA+ID4gY29udHJpYnV0aW9uIGlzCj4gPiA+IMKgcmVwcmVzZW50ZWQg YXMgYSBjb25zdGFudCBjb2VmZmljaWVudC7CoMKgVGhpcyBpcyBhIHNpbXBsaWZpY2F0aW9uCj4g PiA+IMKgY29uc2lzdGVudCB3aXRoIHRoZSByZWxhdGl2ZSBjb250cmlidXRpb24gdG8gb3ZlcmFs bCBwb3dlcgo+ID4gPiB2YXJpYXRpb24uCj4gPiA+IMKgCj4gPiA+IC1JbiB0aGlzIHNpbXBsaWZp ZWQgcmVwcmVzZW50YXRpb24gb3VyIG1vZGVsIGJlY29tZXM6Cj4gPiA+ICtJbiB0aGlzIHNpbXBs aWZpZWQgcmVwcmVzZW50YXRpb24gb3VyIG1vZGVsIGJlY29tZXM6Ogo+ID4gPiDCoAo+ID4gPiAt UGR5biA9IENhcGFjaXRhbmNlICogVm9sdGFnZV4yICogRnJlcXVlbmN5ICogVXRpbGlzYXRpb24K PiA+ID4gKwlQZHluID0gQ2FwYWNpdGFuY2UgKiBWb2x0YWdlXjIgKiBGcmVxdWVuY3kgKiBVdGls aXNhdGlvbgo+ID4gPiDCoAo+ID4gPiDCoFdoZXJlIGBjYXBhY2l0YW5jZWAgaXMgYSBjb25zdGFu dCB0aGF0IHJlcHJlc2VudHMgYW4gaW5kaWNhdGl2ZQo+ID4gPiDCoHJ1bm5pbmcgdGltZSBkeW5h bWljIHBvd2VyIGNvZWZmaWNpZW50IGluIGZ1bmRhbWVudGFsIHVuaXRzIG9mCj4gPiA+IGRpZmYg LS1naXQgYS9Eb2N1bWVudGF0aW9uL3RoZXJtYWwvZXh5bm9zX3RoZXJtYWwKPiA+ID4gYi9Eb2N1 bWVudGF0aW9uL3RoZXJtYWwvZXh5bm9zX3RoZXJtYWwucnN0Cj4gPiA+IHNpbWlsYXJpdHkgaW5k ZXggNjclCj4gPiA+IHJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vdGhlcm1hbC9leHlub3NfdGhl cm1hbAo+ID4gPiByZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi90aGVybWFsL2V4eW5vc190aGVybWFs LnJzdAo+ID4gPiBpbmRleCA5MDEwYzQ0MTY5NjcuLjViZDU1NjU2NmM3MCAxMDA2NDQKPiA+ID4g LS0tIGEvRG9jdW1lbnRhdGlvbi90aGVybWFsL2V4eW5vc190aGVybWFsCj4gPiA+ICsrKyBiL0Rv Y3VtZW50YXRpb24vdGhlcm1hbC9leHlub3NfdGhlcm1hbC5yc3QKPiA+ID4gQEAgLTEsOCArMSwx MSBAQAo+ID4gPiArPT09PT09PT09PT09PT09PT09PT09PT09Cj4gPiA+IMKgS2VybmVsIGRyaXZl ciBleHlub3NfdG11Cj4gPiA+IC09PT09PT09PT09PT09PT09PQo+ID4gPiArPT09PT09PT09PT09 PT09PT09PT09PT09Cj4gPiA+IMKgCj4gPiA+IMKgU3VwcG9ydGVkIGNoaXBzOgo+ID4gPiArCj4g PiA+IMKgKiBBUk0gU0FNU1VORyBFWFlOT1M0LCBFWFlOT1M1IHNlcmllcyBvZiBTb0MKPiA+ID4g Kwo+ID4gPiDCoMKgwqBEYXRhc2hlZXQ6IE5vdCBwdWJsaWNseSBhdmFpbGFibGUKPiA+ID4gwqAK PiA+ID4gwqBBdXRob3JzOiBEb25nZ2V1biBLaW0gPGRnNzcua2ltQHNhbXN1bmcuY29tPgo+ID4g PiBAQCAtMTksMzIgKzIyLDM5IEBAIFRlbXBlcmF0dXJlIGNhbiBiZSB0YWtlbiBmcm9tIHRoZSB0 ZW1wZXJhdHVyZQo+ID4gPiBjb2RlLgo+ID4gPiDCoFRoZXJlIGFyZSB0aHJlZSBlcXVhdGlvbnMg Y29udmVydGluZyBmcm9tIHRlbXBlcmF0dXJlIHRvCj4gPiA+IHRlbXBlcmF0dXJlCj4gPiA+IGNv ZGUuCj4gPiA+IMKgCj4gPiA+IMKgVGhlIHRocmVlIGVxdWF0aW9ucyBhcmU6Cj4gPiA+IC3CoMKg MS4gVHdvIHBvaW50IHRyaW1taW5nCj4gPiA+ICvCoMKgMS4gVHdvIHBvaW50IHRyaW1taW5nOjoK PiA+ID4gKwo+ID4gPiDCoAlUYyA9IChUIC0gMjUpICogKFRJMiAtIFRJMSkgLyAoODUgLSAyNSkg KyBUSTEKPiA+ID4gwqAKPiA+ID4gLcKgwqAyLiBPbmUgcG9pbnQgdHJpbW1pbmcKPiA+ID4gK8Kg wqAyLiBPbmUgcG9pbnQgdHJpbW1pbmc6Ogo+ID4gPiArCj4gPiA+IMKgCVRjID0gVCArIFRJMSAt IDI1Cj4gPiA+IMKgCj4gPiA+IC3CoMKgMy4gTm8gdHJpbW1pbmcKPiA+ID4gK8KgwqAzLiBObyB0 cmltbWluZzo6Cj4gPiA+ICsKPiA+ID4gwqAJVGMgPSBUICsgNTAKPiA+ID4gwqAKPiA+ID4gLcKg wqBUYzogVGVtcGVyYXR1cmUgY29kZSwgVDogVGVtcGVyYXR1cmUsCj4gPiA+IC3CoMKgVEkxOiBU cmltbWluZyBpbmZvIGZvciAyNSBkZWdyZWUgQ2Vsc2l1cyAoc3RvcmVkIGF0IFRSSU1JTkZPCj4g PiA+IHJlZ2lzdGVyKQo+ID4gPiArwqDCoFRjOgo+ID4gPiArwqDCoMKgwqDCoMKgwqBUZW1wZXJh dHVyZSBjb2RlLCBUOiBUZW1wZXJhdHVyZSwKPiA+ID4gK8KgwqBUSTE6Cj4gPiA+ICvCoMKgwqDC oMKgwqDCoFRyaW1taW5nIGluZm8gZm9yIDI1IGRlZ3JlZSBDZWxzaXVzIChzdG9yZWQgYXQgVFJJ TUlORk8KPiA+ID4gcmVnaXN0ZXIpCj4gPiA+IMKgwqDCoMKgwqDCoMKgwqBUZW1wZXJhdHVyZSBj b2RlIG1lYXN1cmVkIGF0IDI1IGRlZ3JlZSBDZWxzaXVzIHdoaWNoIGlzCj4gPiA+IHVuY2hhbmdl ZAo+ID4gPiAtwqDCoFRJMjogVHJpbW1pbmcgaW5mbyBmb3IgODUgZGVncmVlIENlbHNpdXMgKHN0 b3JlZCBhdCBUUklNSU5GTwo+ID4gPiByZWdpc3RlcikKPiA+ID4gK8KgwqBUSTI6Cj4gPiA+ICvC oMKgwqDCoMKgwqDCoFRyaW1taW5nIGluZm8gZm9yIDg1IGRlZ3JlZSBDZWxzaXVzIChzdG9yZWQg YXQgVFJJTUlORk8KPiA+ID4gcmVnaXN0ZXIpCj4gPiA+IMKgwqDCoMKgwqDCoMKgwqBUZW1wZXJh dHVyZSBjb2RlIG1lYXN1cmVkIGF0IDg1IGRlZ3JlZSBDZWxzaXVzIHdoaWNoIGlzCj4gPiA+IHVu Y2hhbmdlZAo+ID4gPiDCoAo+ID4gPiDCoFRNVShUaGVybWFsIE1hbmFnZW1lbnQgVW5pdCkgaW4g RVhZTk9TNC81IGdlbmVyYXRlcyBpbnRlcnJ1cHQKPiA+ID4gwqB3aGVuIHRlbXBlcmF0dXJlIGV4 Y2VlZHMgcHJlLWRlZmluZWQgbGV2ZWxzLgo+ID4gPiDCoFRoZSBtYXhpbXVtIG51bWJlciBvZiBj b25maWd1cmFibGUgdGhyZXNob2xkIGlzIGZpdmUuCj4gPiA+IC1UaGUgdGhyZXNob2xkIGxldmVs cyBhcmUgZGVmaW5lZCBhcyBmb2xsb3dzOgo+ID4gPiArVGhlIHRocmVzaG9sZCBsZXZlbHMgYXJl IGRlZmluZWQgYXMgZm9sbG93czo6Cj4gPiA+ICsKPiA+ID4gwqDCoMKgTGV2ZWxfMDogY3VycmVu dCB0ZW1wZXJhdHVyZSA+IHRyaWdnZXJfbGV2ZWxfMCArIHRocmVzaG9sZAo+ID4gPiDCoMKgwqBM ZXZlbF8xOiBjdXJyZW50IHRlbXBlcmF0dXJlID4gdHJpZ2dlcl9sZXZlbF8xICsgdGhyZXNob2xk Cj4gPiA+IMKgwqDCoExldmVsXzI6IGN1cnJlbnQgdGVtcGVyYXR1cmUgPiB0cmlnZ2VyX2xldmVs XzIgKyB0aHJlc2hvbGQKPiA+ID4gwqDCoMKgTGV2ZWxfMzogY3VycmVudCB0ZW1wZXJhdHVyZSA+ IHRyaWdnZXJfbGV2ZWxfMyArIHRocmVzaG9sZAo+ID4gPiDCoAo+ID4gPiAtwqDCoFRoZSB0aHJl c2hvbGQgYW5kIGVhY2ggdHJpZ2dlcl9sZXZlbCBhcmUgc2V0Cj4gPiA+IC3CoMKgdGhyb3VnaCB0 aGUgY29ycmVzcG9uZGluZyByZWdpc3RlcnMuCj4gPiA+ICtUaGUgdGhyZXNob2xkIGFuZCBlYWNo IHRyaWdnZXJfbGV2ZWwgYXJlIHNldAo+ID4gPiArdGhyb3VnaCB0aGUgY29ycmVzcG9uZGluZyBy ZWdpc3RlcnMuCj4gPiA+IMKgCj4gPiA+IMKgV2hlbiBhbiBpbnRlcnJ1cHQgb2NjdXJzLCB0aGlz IGRyaXZlciBub3RpZnkga2VybmVsIHRoZXJtYWwKPiA+ID4gZnJhbWV3b3JrCj4gPiA+IMKgd2l0 aCB0aGUgZnVuY3Rpb24gZXh5bm9zX3JlcG9ydF90cmlnZ2VyLgo+ID4gPiBAQCAtNTQsMjQgKzY0 LDI3IEBAIGl0IGNhbiBiZSB1c2VkIHRvIHN5bmNocm9uaXplIHRoZSBjb29saW5nCj4gPiA+IGFj dGlvbi4KPiA+ID4gwqBUTVUgZHJpdmVyIGRlc2NyaXB0aW9uOgo+ID4gPiDCoC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCj4gPiA+IMKgCj4gPiA+IC1UaGUgZXh5bm9zIHRoZXJtYWwgZHJpdmVyIGlz IHN0cnVjdHVyZWQgYXMsCj4gPiA+ICtUaGUgZXh5bm9zIHRoZXJtYWwgZHJpdmVyIGlzIHN0cnVj dHVyZWQgYXM6Ogo+ID4gPiDCoAo+ID4gPiDCoAkJCQkJS2VybmVsIENvcmUgdGhlcm1hbAo+ID4g PiBmcmFtZXdvcmsKPiA+ID4gwqAJCQkJKHRoZXJtYWxfY29yZS5jLCBzdGVwX3dpc2UuYywKPiA+ ID4gY3B1X2Nvb2xpbmcuYykKPiA+ID4gwqAJCQkJCQkJCQo+ID4gPiBeCj4gPiA+IMKgCQkJCQkJ CQkKPiA+ID4gfAo+ID4gPiDCoAkJCQkJCQkJCj4gPiA+IHwKPiA+ID4gLVRNVSBjb25maWd1cmF0 aW9uIGRhdGEgLS0tLS0tLT4gVE1VIERyaXZlcsKgwqA8LS0tLS0tPiBFeHlub3MgQ29yZQo+ID4g PiB0aGVybWFsIHdyYXBwZXIKPiA+ID4gLShleHlub3NfdG11X2RhdGEuYykJwqDCoMKgwqDCoMKg KGV4eW5vc190bXUuYykJwqDCoMKgKGV4eW5vCj4gPiA+IHNfdGgKPiA+ID4gZXJtYWxfY29tbW9u LmMpCj4gPiA+IC0oZXh5bm9zX3RtdV9kYXRhLmgpCcKgwqDCoMKgwqDCoChleHlub3NfdG11Lmgp CcKgwqDCoChleHlubwo+ID4gPiBzX3RoCj4gPiA+IGVybWFsX2NvbW1vbi5oKQo+ID4gPiArwqDC oFRNVSBjb25maWd1cmF0aW9uIGRhdGEgLS0tLS0+IFRNVSBEcml2ZXLCoMKgPC0tLS0+IEV4eW5v cyBDb3JlCj4gPiA+IHRoZXJtYWwgd3JhcHBlcgo+ID4gPiArwqDCoChleHlub3NfdG11X2RhdGEu YykJwqDCoMKgwqDCoMKgKGV4eW5vc190bXUuYykJwqDCoMKgKGV4eQo+ID4gPiBub3NfCj4gPiA+ IHRoZXJtYWxfY29tbW9uLmMpCj4gPiA+ICvCoMKgKGV4eW5vc190bXVfZGF0YS5oKQnCoMKgwqDC oMKgwqAoZXh5bm9zX3RtdS5oKQnCoMKgwqAoZXh5Cj4gPiA+IG5vc18KPiA+ID4gdGhlcm1hbF9j b21tb24uaCkKPiA+ID4gwqAKPiA+ID4gLWEpIFRNVSBjb25maWd1cmF0aW9uIGRhdGE6IFRoaXMg Y29uc2lzdCBvZiBUTVUgcmVnaXN0ZXIKPiA+ID4gb2Zmc2V0cy9iaXRmaWVsZHMKPiA+ID4gK2Ep IFRNVSBjb25maWd1cmF0aW9uIGRhdGE6Cj4gPiA+ICsJCVRoaXMgY29uc2lzdCBvZiBUTVUgcmVn aXN0ZXIgb2Zmc2V0cy9iaXRmaWVsZHMKPiA+ID4gwqAJCWRlc2NyaWJlZCB0aHJvdWdoIHN0cnVj dHVyZQo+ID4gPiBleHlub3NfdG11X3JlZ2lzdGVycy4KPiA+ID4gQWxzbyBzZXZlcmFsCj4gPiA+ IMKgCQlvdGhlciBwbGF0Zm9ybSBkYXRhIChzdHJ1Y3QKPiA+ID4gZXh5bm9zX3RtdV9wbGF0Zm9y bV9kYXRhKSBtZW1iZXJzCj4gPiA+IMKgCQlhcmUgdXNlZCB0byBjb25maWd1cmUgdGhlIFRNVS4K PiA+ID4gLWIpIFRNVSBkcml2ZXI6IFRoaXMgY29tcG9uZW50IGluaXRpYWxpc2VzIHRoZSBUTVUg Y29udHJvbGxlciBhbmQKPiA+ID4gc2V0cyBkaWZmZXJlbnQKPiA+ID4gK2IpIFRNVSBkcml2ZXI6 Cj4gPiA+ICsJCVRoaXMgY29tcG9uZW50IGluaXRpYWxpc2VzIHRoZSBUTVUgY29udHJvbGxlcgo+ ID4gPiBhbmQKPiA+ID4gc2V0cyBkaWZmZXJlbnQKPiA+ID4gwqAJCXRocmVzaG9sZHMuIEl0IGlu dm9rZXMgY29yZSB0aGVybWFsCj4gPiA+IGltcGxlbWVudGF0aW9uCj4gPiA+IHdpdGggdGhlIGNh bGwKPiA+ID4gwqAJCWV4eW5vc19yZXBvcnRfdHJpZ2dlci4KPiA+ID4gLWMpIEV4eW5vcyBDb3Jl IHRoZXJtYWwgd3JhcHBlcjogVGhpcyBwcm92aWRlcyAzIHdyYXBwZXIgZnVuY3Rpb24KPiA+ID4g dG8KPiA+ID4gdXNlIHRoZQo+ID4gPiArYykgRXh5bm9zIENvcmUgdGhlcm1hbCB3cmFwcGVyOgo+ ID4gPiArCQlUaGlzIHByb3ZpZGVzIDMgd3JhcHBlciBmdW5jdGlvbiB0byB1c2UgdGhlCj4gPiA+ IMKgCQlLZXJuZWwgY29yZSB0aGVybWFsIGZyYW1ld29yay4gVGhleSBhcmUKPiA+ID4gZXh5bm9z X3VucmVnaXN0ZXJfdGhlcm1hbCwKPiA+ID4gwqAJCWV4eW5vc19yZWdpc3Rlcl90aGVybWFsIGFu ZAo+ID4gPiBleHlub3NfcmVwb3J0X3RyaWdnZXIuCj4gPiA+IGRpZmYgLS1naXQgYS9Eb2N1bWVu dGF0aW9uL3RoZXJtYWwvZXh5bm9zX3RoZXJtYWxfZW11bGF0aW9uCj4gPiA+IGIvRG9jdW1lbnRh dGlvbi90aGVybWFsL2V4eW5vc190aGVybWFsX2VtdWxhdGlvbi5yc3QKPiA+ID4gc2ltaWxhcml0 eSBpbmRleCAzNiUKPiA+ID4gcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi90aGVybWFsL2V4eW5v c190aGVybWFsX2VtdWxhdGlvbgo+ID4gPiByZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi90aGVybWFs L2V4eW5vc190aGVybWFsX2VtdWxhdGlvbi5yc3QKPiA+ID4gaW5kZXggYjE1ZWZlYzZjYTI4Li5j MjFkMTA4MzhiYzUgMTAwNjQ0Cj4gPiA+IC0tLSBhL0RvY3VtZW50YXRpb24vdGhlcm1hbC9leHlu b3NfdGhlcm1hbF9lbXVsYXRpb24KPiA+ID4gKysrIGIvRG9jdW1lbnRhdGlvbi90aGVybWFsL2V4 eW5vc190aGVybWFsX2VtdWxhdGlvbi5yc3QKPiA+ID4gQEAgLTEsNSArMSw2IEBACj4gPiA+IC1F WFlOT1MgRU1VTEFUSU9OIE1PREUKPiA+ID4gLT09PT09PT09PT09PT09PT09PT09PT09PQo+ID4g PiArPT09PT09PT09PT09PT09PT09PT09Cj4gPiA+ICtFeHlub3MgRW11bGF0aW9uIE1vZGUKPiA+ ID4gKz09PT09PT09PT09PT09PT09PT09PQo+ID4gPiDCoAo+ID4gPiDCoENvcHlyaWdodCAoQykg MjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCj4gPiA+IMKgCj4gPiA+IEBAIC04LDQ2ICs5LDUzIEBA IFdyaXR0ZW4gYnkgSm9uZ2h3YSBMZWUgPGpvbmdod2EzLmxlZUBzYW1zdW5nLmNvCj4gPiA+IG0+ Cj4gPiA+IMKgRGVzY3JpcHRpb24KPiA+ID4gwqAtLS0tLS0tLS0tLQo+ID4gPiDCoAo+ID4gPiAt RXh5bm9zIDR4MTIgKDQyMTIsIDQ0MTIpIGFuZCA1IHNlcmllcyBwcm92aWRlIGVtdWxhdGlvbiBt b2RlIGZvcgo+ID4gPiB0aGVybWFsIG1hbmFnZW1lbnQgdW5pdC4KPiA+ID4gLVRoZXJtYWwgZW11 bGF0aW9uIG1vZGUgc3VwcG9ydHMgc29mdHdhcmUgZGVidWcgZm9yIFRNVSdzCj4gPiA+IG9wZXJh dGlvbi4KPiA+ID4gVXNlciBjYW4gc2V0IHRlbXBlcmF0dXJlCj4gPiA+IC1tYW51YWxseSB3aXRo IHNvZnR3YXJlIGNvZGUgYW5kIFRNVSB3aWxsIHJlYWQgY3VycmVudAo+ID4gPiB0ZW1wZXJhdHVy ZQo+ID4gPiBmcm9tIHVzZXIgdmFsdWUgbm90IGZyb20KPiA+ID4gLXNlbnNvcidzIHZhbHVlLgo+ ID4gPiArRXh5bm9zIDR4MTIgKDQyMTIsIDQ0MTIpIGFuZCA1IHNlcmllcyBwcm92aWRlIGVtdWxh dGlvbiBtb2RlIGZvcgo+ID4gPiB0aGVybWFsCj4gPiA+ICttYW5hZ2VtZW50IHVuaXQuIFRoZXJt YWwgZW11bGF0aW9uIG1vZGUgc3VwcG9ydHMgc29mdHdhcmUgZGVidWcKPiA+ID4gZm9yCj4gPiA+ ICtUTVUncyBvcGVyYXRpb24uIFVzZXIgY2FuIHNldCB0ZW1wZXJhdHVyZSBtYW51YWxseSB3aXRo IHNvZnR3YXJlCj4gPiA+IGNvZGUKPiA+ID4gK2FuZCBUTVUgd2lsbCByZWFkIGN1cnJlbnQgdGVt cGVyYXR1cmUgZnJvbSB1c2VyIHZhbHVlIG5vdCBmcm9tCj4gPiA+IHNlbnNvcidzCj4gPiA+ICt2 YWx1ZS4KPiA+ID4gwqAKPiA+ID4gLUVuYWJsaW5nIENPTkZJR19USEVSTUFMX0VNVUxBVElPTiBv cHRpb24gd2lsbCBtYWtlIHRoaXMgc3VwcG9ydAo+ID4gPiBhdmFpbGFibGUuCj4gPiA+IC1XaGVu IGl0J3MgZW5hYmxlZCwgc3lzZnMgbm9kZSB3aWxsIGJlIGNyZWF0ZWQgYXMKPiA+ID4gK0VuYWJs aW5nIENPTkZJR19USEVSTUFMX0VNVUxBVElPTiBvcHRpb24gd2lsbCBtYWtlIHRoaXMgc3VwcG9y dAo+ID4gPiArYXZhaWxhYmxlLiBXaGVuIGl0J3MgZW5hYmxlZCwgc3lzZnMgbm9kZSB3aWxsIGJl IGNyZWF0ZWQgYXMKPiA+ID4gwqAvc3lzL2RldmljZXMvdmlydHVhbC90aGVybWFsL3RoZXJtYWxf em9uZSd6b25lIGlkJy9lbXVsX3RlbXAuCj4gPiA+IMKgCj4gPiA+IC1UaGUgc3lzZnMgbm9kZSwg J2VtdWxfbm9kZScsIHdpbGwgY29udGFpbiB2YWx1ZSAwIGZvciB0aGUKPiA+ID4gaW5pdGlhbAo+ ID4gPiBzdGF0ZS4gV2hlbiB5b3UgaW5wdXQgYW55Cj4gPiA+IC10ZW1wZXJhdHVyZSB5b3Ugd2Fu dCB0byB1cGRhdGUgdG8gc3lzZnMgbm9kZSwgaXQgYXV0b21hdGljYWxseQo+ID4gPiBlbmFibGUg ZW11bGF0aW9uIG1vZGUgYW5kCj4gPiA+IC1jdXJyZW50IHRlbXBlcmF0dXJlIHdpbGwgYmUgY2hh bmdlZCBpbnRvIGl0Lgo+ID4gPiAtKEV4eW5vcyBhbHNvIHN1cHBvcnRzIHVzZXIgY2hhbmdlYWJs ZSBkZWxheSB0aW1lIHdoaWNoIHdvdWxkIGJlCj4gPiA+IHVzZWQKPiA+ID4gdG8gZGVsYXkgb2YK PiA+ID4gLSBjaGFuZ2luZyB0ZW1wZXJhdHVyZS4gSG93ZXZlciwgdGhpcyBub2RlIG9ubHkgdXNl cyBzYW1lIGRlbGF5Cj4gPiA+IG9mCj4gPiA+IHJlYWwgc2Vuc2luZyB0aW1lLCA5Mzh1cy4pCj4g PiA+ICtUaGUgc3lzZnMgbm9kZSwgJ2VtdWxfbm9kZScsIHdpbGwgY29udGFpbiB2YWx1ZSAwIGZv ciB0aGUKPiA+ID4gaW5pdGlhbAo+ID4gPiBzdGF0ZS4KPiA+ID4gK1doZW4geW91IGlucHV0IGFu eSB0ZW1wZXJhdHVyZSB5b3Ugd2FudCB0byB1cGRhdGUgdG8gc3lzZnMgbm9kZSwKPiA+ID4gaXQK PiA+ID4gK2F1dG9tYXRpY2FsbHkgZW5hYmxlIGVtdWxhdGlvbiBtb2RlIGFuZCBjdXJyZW50IHRl bXBlcmF0dXJlIHdpbGwKPiA+ID4gYmUKPiA+ID4gK2NoYW5nZWQgaW50byBpdC4KPiA+ID4gwqAK PiA+ID4gLUV4eW5vcyBlbXVsYXRpb24gbW9kZSByZXF1aXJlcyBzeW5jaHJvbm91cyBvZiB2YWx1 ZSBjaGFuZ2luZyBhbmQKPiA+ID4gZW5hYmxpbmcuIEl0IG1lYW5zIHdoZW4geW91Cj4gPiA+IC13 YW50IHRvIHVwZGF0ZSB0aGUgYW55IHZhbHVlIG9mIGRlbGF5IG9yIG5leHQgdGVtcGVyYXR1cmUs IHRoZW4KPiA+ID4geW91Cj4gPiA+IGhhdmUgdG8gZW5hYmxlIGVtdWxhdGlvbgo+ID4gPiAtbW9k ZSBhdCB0aGUgc2FtZSB0aW1lLiAoT3IgeW91IGhhdmUgdG8ga2VlcCB0aGUgbW9kZSBlbmFibGlu Zy4pCj4gPiA+IElmCj4gPiA+IHlvdSBkb24ndCwgaXQgZmFpbHMgdG8KPiA+ID4gLWNoYW5nZSB0 aGUgdmFsdWUgdG8gdXBkYXRlZCBvbmUgYW5kIGp1c3QgdXNlIGxhc3Qgc3VjY2Vlc3NmdWwKPiA+ ID4gdmFsdWUKPiA+ID4gcmVwZWF0ZWRseS4gVGhhdCdzIHdoeQo+ID4gPiAtdGhpcyBub2RlIGdp dmVzIHVzZXJzIHRoZSByaWdodCB0byBjaGFuZ2UgdGVybWVycGF0dXJlIG9ubHkuCj4gPiA+IEp1 c3QKPiA+ID4gb25lIGludGVyZmFjZSBtYWtlcyBpdCBtb3JlCj4gPiA+IC1zaW1wbHkgdG8gdXNl Lgo+ID4gPiArKEV4eW5vcyBhbHNvIHN1cHBvcnRzIHVzZXIgY2hhbmdlYWJsZSBkZWxheSB0aW1l IHdoaWNoIHdvdWxkIGJlCj4gPiA+IHVzZWQKPiA+ID4gdG8KPiA+ID4gK2RlbGF5IG9mIGNoYW5n aW5nIHRlbXBlcmF0dXJlLiBIb3dldmVyLCB0aGlzIG5vZGUgb25seSB1c2VzIHNhbWUKPiA+ID4g ZGVsYXkKPiA+ID4gK29mIHJlYWwgc2Vuc2luZyB0aW1lLCA5Mzh1cy4pCj4gPiA+ICsKPiA+ID4g K0V4eW5vcyBlbXVsYXRpb24gbW9kZSByZXF1aXJlcyBzeW5jaHJvbm91cyBvZiB2YWx1ZSBjaGFu Z2luZyBhbmQKPiA+ID4gK2VuYWJsaW5nLiBJdCBtZWFucyB3aGVuIHlvdSB3YW50IHRvIHVwZGF0 ZSB0aGUgYW55IHZhbHVlIG9mCj4gPiA+IGRlbGF5IG9yCj4gPiA+ICtuZXh0IHRlbXBlcmF0dXJl LCB0aGVuIHlvdSBoYXZlIHRvIGVuYWJsZSBlbXVsYXRpb24gbW9kZSBhdCB0aGUKPiA+ID4gc2Ft ZQo+ID4gPiArdGltZS4gKE9yIHlvdSBoYXZlIHRvIGtlZXAgdGhlIG1vZGUgZW5hYmxpbmcuKSBJ ZiB5b3UgZG9uJ3QsIGl0Cj4gPiA+IGZhaWxzIHRvCj4gPiA+ICtjaGFuZ2UgdGhlIHZhbHVlIHRv IHVwZGF0ZWQgb25lIGFuZCBqdXN0IHVzZSBsYXN0IHN1Y2NlZXNzZnVsCj4gPiA+IHZhbHVlCj4g PiA+ICtyZXBlYXRlZGx5LiBUaGF0J3Mgd2h5IHRoaXMgbm9kZSBnaXZlcyB1c2VycyB0aGUgcmln aHQgdG8gY2hhbmdlCj4gPiA+ICt0ZXJtZXJwYXR1cmUgb25seS4gSnVzdCBvbmUgaW50ZXJmYWNl IG1ha2VzIGl0IG1vcmUgc2ltcGx5IHRvCj4gPiA+IHVzZS4KPiA+ID4gwqAKPiA+ID4gwqBEaXNh YmxpbmcgZW11bGF0aW9uIG1vZGUgb25seSByZXF1aXJlcyB3cml0aW5nIHZhbHVlIDAgdG8gc3lz ZnMKPiA+ID4gbm9kZS4KPiA+ID4gwqAKPiA+ID4gKzo6Cj4gPiA+IMKgCj4gPiA+IC1URU1QCTEy MCB8Cj4gPiA+ICsKPiA+ID4gK8KgwqBURU1QCTEyMCB8Cj4gPiA+IMKgCcKgwqDCoMKgfAo+ID4g PiDCoAkxMDAgfAo+ID4gPiDCoAnCoMKgwqDCoHwKPiA+ID4gwqAJwqA4MCB8Cj4gPiA+IC0JwqDC oMKgwqB8CQnCoMKgwqDCoMKgCcKgCcKgKy0tLS0tLS0tLS0tCj4gPiA+IC0JwqA2MCB8wqDCoMKg wqDCoMKgCQnCoMKgwqDCoMKgCcKgfAnCoMKgwqDCoHwKPiA+ID4gLQnCoMKgwqDCoHwJwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCstLS0tLS0tLS0tLS0tfMKgwqDCoMKgwqDCoMKgwqDCoMKgfAo+ID4g PiArCcKgwqDCoMKgfAkJCQnCoCstLS0tLS0tLS0tLQo+ID4gPiArCcKgNjAgfMKgwqDCoMKgwqDC oAkJCcKgfAnCoMKgwqDCoHwKPiA+ID4gKwnCoMKgwqDCoHwJCcKgwqDCoCstLS0tLS0tLS0tLS0t fMKgwqDCoMKgwqDCoMKgwqDCoMKgfAo+ID4gPiDCoAnCoDQwIHzCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgfMKgwqDCoMKgwqDCoMKgwqDCoAnCoHzCoMKgwqDCoMKgwqDCoMKgwqDCoHwKPiA+ ID4gLQnCoMKgwqDCoHwJCcKgwqDCoHwJwqDCoMKgwqDCoAnCoHzCoMKgwqDCoMKgwqDCoMKgCj4g PiA+IMKgwqB8Cj4gPiA+IC0JwqAyMCB8CQnCoMKgwqB8CcKgwqDCoMKgwqAJwqB8wqDCoMKgwqDC oMKgwqDCoAo+ID4gPiDCoMKgKy0KPiA+ID4gLS0tLS0tLS0tCj4gPiA+IC0JwqDCoMKgwqB8CcKg CcKgwqDCoHwJwqDCoMKgwqDCoAnCoHzCoMKgwqDCoMKgwqDCoAo+ID4gPiDCoMKgwqB8Cj4gPiA+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgfAo+ID4gPiArCcKgwqDCoMKgfAkJwqDCoMKgfAkJwqB8wqDC oMKgwqDCoMKgwqDCoMKgwqB8Cj4gPiA+ICsJwqAyMCB8CQnCoMKgwqB8CQnCoHzCoMKgwqDCoMKg wqDCoMKgwqDCoCsKPiA+ID4gLS0tLQo+ID4gPiAtLS0tLS0KPiA+ID4gKwnCoMKgwqDCoHwJCcKg wqDCoHwJCcKgfMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqAKPiA+ID4gwqDCoMKgwqAKPiA+ID4g wqDCoMKgwqB8Cj4gPiA+IMKgCcKgwqAwCj4gPiA+ID4gCj4gPiA+ID4gX19fX19fX19fX19fX198 X19fX19fX19fX19fX3xfX19fX19fX19ffF9fX19fX19fX198X19fX19fX19fCj4gPiA+IC0JCcKg wqDCoEEJwqDCoMKgwqAJwqBBCcKgwqDCoMKgQQnCoAo+ID4gPiDCoMKgCQo+ID4gPiDCoMKgwqDC oMKgwqDCoEHCoMKgwqDCoMKgVElNRQo+ID4gPiArCQnCoMKgwqBBCQnCoEEJwqDCoMKgwqBBCQkK PiA+ID4gwqAKPiA+ID4gwqDCoMKgwqDCoMKgQcKgwqDCoMKgwqBUSU1FCj4gPiA+IMKgCQnCoMKg wqB8PC0tLS0tPnwJwqB8PC0tLS0tPnzCoMKgfDwtLS0tLT58CQo+ID4gPiDCoMKgwqAKPiA+ID4g wqDCoMKgwqB8Cj4gPiA+IMKgCQnCoMKgwqB8IDkzOHVzIHzCoMKgCcKgfAnCoHzCoMKgfMKgwqDC oMKgwqDCoMKgfMKgwqDCoAo+ID4gPiDCoMKgwqDCoAo+ID4gPiDCoMKgwqB8Cj4gPiA+IC1lbXVs YXRpb27CoMKgwqDCoDrCoMKgMMKgwqA1MAnCoMKgwqB8wqDCoAnCoDcwwqDCoMKgwqDCoMKgfMKg wqAyMMKgwqDCoMKgwqDCoHwKPiA+ID4gwqDCoMKgwqAKPiA+ID4gwqDCoMKgwqDCoMKgMAo+ID4g PiAtY3VycmVudCB0ZW1wIDrCoMKgwqBzZW5zb3LCoMKgwqA1MAkJwqA3MMKgwqDCoMKgwqDCoMKg wqDCoDIwCQo+ID4gPiDCoMKgCj4gPiA+IMKgwqDCoMKgc2Vuc29yCj4gPiA+ICvCoMKgZW11bGF0 aW9uwqDCoMKgOiAwwqDCoDUwCcKgwqDCoHzCoMKgCcKgNzDCoMKgwqDCoMKgwqB8wqDCoDIwwqDC oMKgwqDCoMKgfAo+ID4gPiDCoMKgwqDCoAo+ID4gPiDCoMKgwqDCoMKgwqAwCj4gPiA+ICvCoMKg Y3VycmVudCB0ZW1wOsKgwqDCoHNlbnNvcsKgwqDCoDUwCQnCoDcwwqDCoMKgwqDCoMKgwqDCoMKg MjAJCj4gPiA+IMKgCj4gPiA+IMKgwqDCoMKgwqBzZW5zb3IKPiA+ID4gZGlmZiAtLWdpdCBhL0Rv Y3VtZW50YXRpb24vdGhlcm1hbC9pbmRleC5yc3QKPiA+ID4gYi9Eb2N1bWVudGF0aW9uL3RoZXJt YWwvaW5kZXgucnN0Cj4gPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiA+IGluZGV4IDAwMDAw MDAwMDAwMC4uOGMxYzAwMTQ2Y2FkCj4gPiA+IC0tLSAvZGV2L251bGwKPiA+ID4gKysrIGIvRG9j dW1lbnRhdGlvbi90aGVybWFsL2luZGV4LnJzdAo+ID4gPiBAQCAtMCwwICsxLDE4IEBACj4gPiA+ ICs6b3JwaGFuOgo+ID4gPiArCj4gPiA+ICs9PT09PT09Cj4gPiA+ICtUaGVybWFsCj4gPiA+ICs9 PT09PT09Cj4gPiA+ICsKPiA+ID4gKy4uIHRvY3RyZWU6Ogo+ID4gPiArwqDCoMKgOm1heGRlcHRo OiAxCj4gPiA+ICsKPiA+ID4gK8KgwqDCoGNwdS1jb29saW5nLWFwaQo+ID4gPiArwqDCoMKgc3lz ZnMtYXBpCj4gPiA+ICvCoMKgwqBwb3dlcl9hbGxvY2F0b3IKPiA+ID4gKwo+ID4gPiArwqDCoMKg ZXh5bm9zX3RoZXJtYWwKPiA+ID4gK8KgwqDCoGV4eW5vc190aGVybWFsX2VtdWxhdGlvbgo+ID4g PiArwqDCoMKgaW50ZWxfcG93ZXJjbGFtcAo+ID4gPiArwqDCoMKgbm91dmVhdV90aGVybWFsCj4g PiA+ICvCoMKgwqB4ODZfcGtnX3RlbXBlcmF0dXJlX3RoZXJtYWwKPiA+ID4gZGlmZiAtLWdpdCBh L0RvY3VtZW50YXRpb24vdGhlcm1hbC9pbnRlbF9wb3dlcmNsYW1wLnR4dAo+ID4gPiBiL0RvY3Vt ZW50YXRpb24vdGhlcm1hbC9pbnRlbF9wb3dlcmNsYW1wLnJzdAo+ID4gPiBzaW1pbGFyaXR5IGlu ZGV4IDc2JQo+ID4gPiByZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3RoZXJtYWwvaW50ZWxfcG93 ZXJjbGFtcC50eHQKPiA+ID4gcmVuYW1lIHRvIERvY3VtZW50YXRpb24vdGhlcm1hbC9pbnRlbF9w b3dlcmNsYW1wLnJzdAo+ID4gPiBpbmRleCBiNWRmMjExNjhmYmMuLjNmNmRmYjBiM2VhNiAxMDA2 NDQKPiA+ID4gLS0tIGEvRG9jdW1lbnRhdGlvbi90aGVybWFsL2ludGVsX3Bvd2VyY2xhbXAudHh0 Cj4gPiA+ICsrKyBiL0RvY3VtZW50YXRpb24vdGhlcm1hbC9pbnRlbF9wb3dlcmNsYW1wLnJzdAo+ ID4gPiBAQCAtMSwxMCArMSwxMyBAQAo+ID4gPiAtCQkJwqA9PT09PT09PT09PT09PT09PT09PT09 PQo+ID4gPiAtCQkJwqBJTlRFTCBQT1dFUkNMQU1QIERSSVZFUgo+ID4gPiAtCQkJwqA9PT09PT09 PT09PT09PT09PT09PT09PQo+ID4gPiAtQnk6IEFyamFuIHZhbiBkZSBWZW4gPGFyamFuQGxpbnV4 LmludGVsLmNvbT4KPiA+ID4gLcKgwqDCoMKgSmFjb2IgUGFuIDxqYWNvYi5qdW4ucGFuQGxpbnV4 LmludGVsLmNvbT4KPiA+ID4gKz09PT09PT09PT09PT09PT09PT09PT09Cj4gPiA+ICtJbnRlbCBQ b3dlcmNsYW1wIERyaXZlcgo+ID4gPiArPT09PT09PT09PT09PT09PT09PT09PT0KPiA+ID4gKwo+ ID4gPiArQnk6Cj4gPiA+ICvCoMKgLSBBcmphbiB2YW4gZGUgVmVuIDxhcmphbkBsaW51eC5pbnRl bC5jb20+Cj4gPiA+ICvCoMKgLSBKYWNvYiBQYW4gPGphY29iLmp1bi5wYW5AbGludXguaW50ZWwu Y29tPgo+ID4gPiArCj4gPiA+ICsuLiBDb250ZW50czoKPiA+ID4gwqAKPiA+ID4gLUNvbnRlbnRz Ogo+ID4gPiDCoAkoKikgSW50cm9kdWN0aW9uCj4gPiA+IMKgCcKgwqDCoMKgLSBHb2FscyBhbmQg T2JqZWN0aXZlcwo+ID4gPiDCoAo+ID4gPiBAQCAtMjMsNyArMjYsNiBAQCBDb250ZW50czoKPiA+ ID4gwqAJwqDCoMKgwqAtIEdlbmVyaWMgVGhlcm1hbCBMYXllciAoc3lzZnMpCj4gPiA+IMKgCcKg wqDCoMKgLSBLZXJuZWwgQVBJcyAoVEJEKQo+ID4gPiDCoAo+ID4gPiAtPT09PT09PT09PT09Cj4g PiA+IMKgSU5UUk9EVUNUSU9OCj4gPiA+IMKgPT09PT09PT09PT09Cj4gPiA+IMKgCj4gPiA+IEBA IC00Nyw3ICs0OSw2IEBAIHNjYWxhYmlsaXR5LCBhbmQgdXNlciBleHBlcmllbmNlLiBJbiBtYW55 Cj4gPiA+IGNhc2VzLAo+ID4gPiBjbGVhciBhZHZhbnRhZ2UgaXMKPiA+ID4gwqBzaG93biBvdmVy IHRha2luZyB0aGUgQ1BVIG9mZmxpbmUgb3IgbW9kdWxhdGluZyB0aGUgQ1BVIGNsb2NrLgo+ID4g PiDCoAo+ID4gPiDCoAo+ID4gPiAtPT09PT09PT09PT09PT09PT09PQo+ID4gPiDCoFRIRU9SWSBP RiBPUEVSQVRJT04KPiA+ID4gwqA9PT09PT09PT09PT09PT09PT09Cj4gPiA+IMKgCj4gPiA+IEBA IC01NywxMSArNTgsMTIgQEAgSWRsZSBJbmplY3Rpb24KPiA+ID4gwqBPbiBtb2Rlcm4gSW50ZWwg cHJvY2Vzc29ycyAoTmVoYWxlbSBvciBsYXRlciksIHBhY2thZ2UgbGV2ZWwgQy0KPiA+ID4gc3Rh dGUKPiA+ID4gwqByZXNpZGVuY3kgaXMgYXZhaWxhYmxlIGluIE1TUnMsIHRodXMgYWxzbyBhdmFp bGFibGUgdG8gdGhlCj4gPiA+IGtlcm5lbC4KPiA+ID4gwqAKPiA+ID4gLVRoZXNlIE1TUnMgYXJl Ogo+ID4gPiAtwqDCoMKgwqDCoMKgI2RlZmluZSBNU1JfUEtHX0MyX1JFU0lERU5DWQkweDYwRAo+ ID4gPiAtwqDCoMKgwqDCoMKgI2RlZmluZSBNU1JfUEtHX0MzX1JFU0lERU5DWQkweDNGOAo+ID4g PiAtwqDCoMKgwqDCoMKgI2RlZmluZSBNU1JfUEtHX0M2X1JFU0lERU5DWQkweDNGOQo+ID4gPiAt wqDCoMKgwqDCoMKgI2RlZmluZSBNU1JfUEtHX0M3X1JFU0lERU5DWQkweDNGQQo+ID4gPiArVGhl c2UgTVNScyBhcmU6Ogo+ID4gPiArCj4gPiA+ICvCoMKgwqDCoMKgwqAjZGVmaW5lIE1TUl9QS0df QzJfUkVTSURFTkNZwqDCoMKgwqDCoMKgMHg2MEQKPiA+ID4gK8KgwqDCoMKgwqDCoCNkZWZpbmUg TVNSX1BLR19DM19SRVNJREVOQ1nCoMKgwqDCoMKgwqAweDNGOAo+ID4gPiArwqDCoMKgwqDCoMKg I2RlZmluZSBNU1JfUEtHX0M2X1JFU0lERU5DWcKgwqDCoMKgwqDCoDB4M0Y5Cj4gPiA+ICvCoMKg wqDCoMKgwqAjZGVmaW5lIE1TUl9QS0dfQzdfUkVTSURFTkNZwqDCoMKgwqDCoMKgMHgzRkEKPiA+ ID4gwqAKPiA+ID4gwqBJZiB0aGUga2VybmVsIGNhbiBhbHNvIGluamVjdCBpZGxlIHRpbWUgdG8g dGhlIHN5c3RlbSwgdGhlbiBhCj4gPiA+IMKgY2xvc2VkLWxvb3AgY29udHJvbCBzeXN0ZW0gY2Fu IGJlIGVzdGFibGlzaGVkIHRoYXQgbWFuYWdlcwo+ID4gPiBwYWNrYWdlCj4gPiA+IEBAIC05Niwx OSArOTgsMjEgQEAgYXJlIG5vdCBtYXNrZWQuIFRlc3RzIHNob3cgdGhhdCB0aGUgZXh0cmEKPiA+ ID4gd2FrZXVwcwo+ID4gPiBmcm9tIHNjaGVkdWxlciB0aWNrCj4gPiA+IMKgaGF2ZSBhIGRyYW1h dGljIGltcGFjdCBvbiB0aGUgZWZmZWN0aXZlbmVzcyBvZiB0aGUgcG93ZXJjbGFtcAo+ID4gPiBk cml2ZXIKPiA+ID4gwqBvbiBsYXJnZSBzY2FsZSBzeXN0ZW1zIChXZXN0bWVyZSBzeXN0ZW0gd2l0 aCA4MCBwcm9jZXNzb3JzKS4KPiA+ID4gwqAKPiA+ID4gLUNQVTAKPiA+ID4gLQkJwqDCoF9fX19f X19fX19fX8KgwqDCoMKgwqDCoMKgwqDCoMKgX19fX19fX19fX19fCj4gPiA+IC1raWRsZV9pbmpl Y3QvMMKgwqDCoHzCoMKgwqBzbGVlcMKgwqDCoMKgfMKgwqBtd2FpdCB8wqDCoHNsZWVwwqDCoMKg wqDCoHwKPiA+ID4gLQlfX19fX19fX198wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfF9fX19fX19f fMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHxfX19fX19fCj4gPiA+IC0JCQnCoMKgwqDCoMKgwqDC oGR1cmF0aW9uCj4gPiA+IC1DUFUxCj4gPiA+IC0JCcKgwqBfX19fX19fX19fX1/CoMKgwqDCoMKg wqDCoMKgwqDCoF9fX19fX19fX19fXwo+ID4gPiAta2lkbGVfaW5qZWN0LzHCoMKgwqB8wqDCoMKg c2xlZXDCoMKgwqDCoHzCoMKgbXdhaXQgfMKgwqBzbGVlcMKgwqDCoMKgwqB8Cj4gPiA+IC0JX19f X19fX19ffMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHxfX19fX19fX3zCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqB8X19fX19fXwo+ID4gPiAtCQkJwqDCoMKgwqDCoMKgXgo+ID4gPiAtCQkJwqDCoMKg wqDCoMKgfAo+ID4gPiAtCQkJwqDCoMKgwqDCoMKgfAo+ID4gPiAtCQkJwqDCoMKgwqDCoMKgcm91 bmR1cChqaWZmaWVzLCBpbnRlcnZhbCkKPiA+ID4gKzo6Cj4gPiA+ICsKPiA+ID4gK8KgwqBDUFUw Cj4gPiA+ICsJCcKgwqDCoMKgX19fX19fX19fX19fwqDCoMKgwqDCoMKgwqDCoMKgwqBfX19fX19f X19fX18KPiA+ID4gK8KgwqBraWRsZV9pbmplY3QvMMKgwqDCoHzCoMKgwqBzbGVlcMKgwqDCoMKg fMKgwqBtd2FpdCB8wqDCoHNsZWVwwqDCoMKgwqDCoHwKPiA+ID4gKwnCoMKgX19fX19fX19ffMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHxfX19fX19fX3zCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8 X19fX19fXwo+ID4gPiArCQkJCcKgZHVyYXRpb24KPiA+ID4gK8KgwqBDUFUxCj4gPiA+ICsJCcKg wqDCoMKgX19fX19fX19fX19fwqDCoMKgwqDCoMKgwqDCoMKgwqBfX19fX19fX19fX18KPiA+ID4g K8KgwqBraWRsZV9pbmplY3QvMcKgwqDCoHzCoMKgwqBzbGVlcMKgwqDCoMKgfMKgwqBtd2FpdCB8 wqDCoHNsZWVwwqDCoMKgwqDCoHwKPiA+ID4gKwnCoMKgX19fX19fX19ffMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHxfX19fX19fX3zCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8X19fX19fXwo+ID4g PiArCQkJCV4KPiA+ID4gKwkJCQl8Cj4gPiA+ICsJCQkJfAo+ID4gPiArCQkJCXJvdW5kdXAoamlm ZmllcywgaW50ZXJ2YWwpCj4gPiA+IMKgCj4gPiA+IMKgT25seSBvbmUgQ1BVIGlzIGFsbG93ZWQg dG8gY29sbGVjdCBzdGF0aXN0aWNzIGFuZCB1cGRhdGUgZ2xvYmFsCj4gPiA+IMKgY29udHJvbCBw YXJhbWV0ZXJzLiBUaGlzIENQVSBpcyByZWZlcnJlZCB0byBhcyB0aGUgY29udHJvbGxpbmcKPiA+ ID4gQ1BVCj4gPiA+IGluCj4gPiA+IEBAIC0xNDgsNyArMTUyLDcgQEAgYikgZGV0ZXJtaW5lIHRo ZSBhbW91bnQgb2YgY29tcGVuc2F0aW9uCj4gPiA+IG5lZWRlZCBhdAo+ID4gPiBlYWNoIHRhcmdl dCByYXRpbwo+ID4gPiDCoAo+ID4gPiDCoENvbXBlbnNhdGlvbiB0byBlYWNoIHRhcmdldCByYXRp byBjb25zaXN0cyBvZiB0d28gcGFydHM6Cj4gPiA+IMKgCj4gPiA+IC3CoMKgwqDCoMKgwqDCoMKg YSkgc3RlYWR5IHN0YXRlIGVycm9yIGNvbXBlbnNhdGlvbgo+ID4gPiArCWEpIHN0ZWFkeSBzdGF0 ZSBlcnJvciBjb21wZW5zYXRpb24KPiA+ID4gwqAJVGhpcyBpcyB0byBvZmZzZXQgdGhlIGVycm9y IG9jY3VycmluZyB3aGVuIHRoZSBzeXN0ZW0KPiA+ID4gY2FuCj4gPiA+IMKgCWVudGVyIGlkbGUg d2l0aG91dCBleHRyYSB3YWtldXBzIChzdWNoIGFzIGV4dGVybmFsCj4gPiA+IGludGVycnVwdHMp Lgo+ID4gPiDCoAo+ID4gPiBAQCAtMTU4LDQxICsxNjIsNDIgQEAgQ29tcGVuc2F0aW9uIHRvIGVh Y2ggdGFyZ2V0IHJhdGlvIGNvbnNpc3RzCj4gPiA+IG9mCj4gPiA+IHR3byBwYXJ0czoKPiA+ID4g wqAJc2xvd2luZyBkb3duIENQVSBhY3Rpdml0aWVzLgo+ID4gPiDCoAo+ID4gPiDCoEEgZGVidWdm cyBmaWxlIGlzIHByb3ZpZGVkIGZvciB0aGUgdXNlciB0byBleGFtaW5lIGNvbXBlbnNhdGlvbgo+ ID4gPiAtcHJvZ3Jlc3MgYW5kIHJlc3VsdHMsIHN1Y2ggYXMgb24gYSBXZXN0bWVyZSBzeXN0ZW0u Cj4gPiA+IC1bamFjb2JAbmV4MDEgfl0kIGNhdAo+ID4gPiAtL3N5cy9rZXJuZWwvZGVidWcvaW50 ZWxfcG93ZXJjbGFtcC9wb3dlcmNsYW1wX2NhbGliCj4gPiA+IC1jb250cm9sbGluZyBjcHU6IDAK PiA+ID4gLXBjdCBjb25maWRlbmNlIHN0ZWFkeSBkeW5hbWljIChjb21wZW5zYXRpb24pCj4gPiA+ IC0wCTAJMAkwCj4gPiA+IC0xCTEJMAkwCj4gPiA+IC0yCTEJMQkwCj4gPiA+IC0zCTMJMQkwCj4g PiA+IC00CTMJMQkwCj4gPiA+IC01CTMJMQkwCj4gPiA+IC02CTMJMQkwCj4gPiA+IC03CTMJMQkw Cj4gPiA+IC04CTMJMQkwCj4gPiA+IC0uLi4KPiA+ID4gLTMwCTMJMgkwCj4gPiA+IC0zMQkzCTIJ MAo+ID4gPiAtMzIJMwkxCTAKPiA+ID4gLTMzCTMJMgkwCj4gPiA+IC0zNAkzCTEJMAo+ID4gPiAt MzUJMwkyCTAKPiA+ID4gLTM2CTMJMQkwCj4gPiA+IC0zNwkzCTIJMAo+ID4gPiAtMzgJMwkxCTAK PiA+ID4gLTM5CTMJMgkwCj4gPiA+IC00MAkzCTMJMAo+ID4gPiAtNDEJMwkxCTAKPiA+ID4gLTQy CTMJMgkwCj4gPiA+IC00MwkzCTEJMAo+ID4gPiAtNDQJMwkxCTAKPiA+ID4gLTQ1CTMJMgkwCj4g PiA+IC00NgkzCTMJMAo+ID4gPiAtNDcJMwkwCTAKPiA+ID4gLTQ4CTMJMgkwCj4gPiA+IC00OQkz CTMJMAo+ID4gPiArcHJvZ3Jlc3MgYW5kIHJlc3VsdHMsIHN1Y2ggYXMgb24gYSBXZXN0bWVyZSBz eXN0ZW06Ogo+ID4gPiArCj4gPiA+ICvCoMKgW2phY29iQG5leDAxIH5dJCBjYXQKPiA+ID4gK8Kg wqAvc3lzL2tlcm5lbC9kZWJ1Zy9pbnRlbF9wb3dlcmNsYW1wL3Bvd2VyY2xhbXBfY2FsaWIKPiA+ ID4gK8KgwqBjb250cm9sbGluZyBjcHU6IDAKPiA+ID4gK8KgwqBwY3QgY29uZmlkZW5jZSBzdGVh ZHkgZHluYW1pYyAoY29tcGVuc2F0aW9uKQo+ID4gPiArwqDCoDDCoMKgwqDCoMKgwqDCoDDCoMKg wqDCoMKgwqDCoDDCoMKgwqDCoMKgwqDCoDAKPiA+ID4gK8KgwqAxwqDCoMKgwqDCoMKgwqAxwqDC oMKgwqDCoMKgwqAwwqDCoMKgwqDCoMKgwqAwCj4gPiA+ICvCoMKgMsKgwqDCoMKgwqDCoMKgMcKg wqDCoMKgwqDCoMKgMcKgwqDCoMKgwqDCoMKgMAo+ID4gPiArwqDCoDPCoMKgwqDCoMKgwqDCoDPC oMKgwqDCoMKgwqDCoDHCoMKgwqDCoMKgwqDCoDAKPiA+ID4gK8KgwqA0wqDCoMKgwqDCoMKgwqAz wqDCoMKgwqDCoMKgwqAxwqDCoMKgwqDCoMKgwqAwCj4gPiA+ICvCoMKgNcKgwqDCoMKgwqDCoMKg M8KgwqDCoMKgwqDCoMKgMcKgwqDCoMKgwqDCoMKgMAo+ID4gPiArwqDCoDbCoMKgwqDCoMKgwqDC oDPCoMKgwqDCoMKgwqDCoDHCoMKgwqDCoMKgwqDCoDAKPiA+ID4gK8KgwqA3wqDCoMKgwqDCoMKg wqAzwqDCoMKgwqDCoMKgwqAxwqDCoMKgwqDCoMKgwqAwCj4gPiA+ICvCoMKgOMKgwqDCoMKgwqDC oMKgM8KgwqDCoMKgwqDCoMKgMcKgwqDCoMKgwqDCoMKgMAo+ID4gPiArwqDCoC4uLgo+ID4gPiAr wqDCoDMwwqDCoMKgwqDCoMKgM8KgwqDCoMKgwqDCoMKgMsKgwqDCoMKgwqDCoMKgMAo+ID4gPiAr wqDCoDMxwqDCoMKgwqDCoMKgM8KgwqDCoMKgwqDCoMKgMsKgwqDCoMKgwqDCoMKgMAo+ID4gPiAr wqDCoDMywqDCoMKgwqDCoMKgM8KgwqDCoMKgwqDCoMKgMcKgwqDCoMKgwqDCoMKgMAo+ID4gPiAr wqDCoDMzwqDCoMKgwqDCoMKgM8KgwqDCoMKgwqDCoMKgMsKgwqDCoMKgwqDCoMKgMAo+ID4gPiAr wqDCoDM0wqDCoMKgwqDCoMKgM8KgwqDCoMKgwqDCoMKgMcKgwqDCoMKgwqDCoMKgMAo+ID4gPiAr wqDCoDM1wqDCoMKgwqDCoMKgM8KgwqDCoMKgwqDCoMKgMsKgwqDCoMKgwqDCoMKgMAo+ID4gPiAr wqDCoDM2wqDCoMKgwqDCoMKgM8KgwqDCoMKgwqDCoMKgMcKgwqDCoMKgwqDCoMKgMAo+ID4gPiAr wqDCoDM3wqDCoMKgwqDCoMKgM8KgwqDCoMKgwqDCoMKgMsKgwqDCoMKgwqDCoMKgMAo+ID4gPiAr wqDCoDM4wqDCoMKgwqDCoMKgM8KgwqDCoMKgwqDCoMKgMcKgwqDCoMKgwqDCoMKgMAo+ID4gPiAr wqDCoDM5wqDCoMKgwqDCoMKgM8KgwqDCoMKgwqDCoMKgMsKgwqDCoMKgwqDCoMKgMAo+ID4gPiAr wqDCoDQwwqDCoMKgwqDCoMKgM8KgwqDCoMKgwqDCoMKgM8KgwqDCoMKgwqDCoMKgMAo+ID4gPiAr wqDCoDQxwqDCoMKgwqDCoMKgM8KgwqDCoMKgwqDCoMKgMcKgwqDCoMKgwqDCoMKgMAo+ID4gPiAr wqDCoDQywqDCoMKgwqDCoMKgM8KgwqDCoMKgwqDCoMKgMsKgwqDCoMKgwqDCoMKgMAo+ID4gPiAr wqDCoDQzwqDCoMKgwqDCoMKgM8KgwqDCoMKgwqDCoMKgMcKgwqDCoMKgwqDCoMKgMAo+ID4gPiAr wqDCoDQ0wqDCoMKgwqDCoMKgM8KgwqDCoMKgwqDCoMKgMcKgwqDCoMKgwqDCoMKgMAo+ID4gPiAr wqDCoDQ1wqDCoMKgwqDCoMKgM8KgwqDCoMKgwqDCoMKgMsKgwqDCoMKgwqDCoMKgMAo+ID4gPiAr wqDCoDQ2wqDCoMKgwqDCoMKgM8KgwqDCoMKgwqDCoMKgM8KgwqDCoMKgwqDCoMKgMAo+ID4gPiAr wqDCoDQ3wqDCoMKgwqDCoMKgM8KgwqDCoMKgwqDCoMKgMMKgwqDCoMKgwqDCoMKgMAo+ID4gPiAr wqDCoDQ4wqDCoMKgwqDCoMKgM8KgwqDCoMKgwqDCoMKgMsKgwqDCoMKgwqDCoMKgMAo+ID4gPiAr wqDCoDQ5wqDCoMKgwqDCoMKgM8KgwqDCoMKgwqDCoMKgM8KgwqDCoMKgwqDCoMKgMAo+ID4gPiDC oAo+ID4gPiDCoENhbGlicmF0aW9uIG9jY3VycyBkdXJpbmcgcnVudGltZS4gTm8gb2ZmbGluZSBt ZXRob2QgaXMKPiA+ID4gYXZhaWxhYmxlLgo+ID4gPiDCoFN0ZWFkeSBzdGF0ZSBjb21wZW5zYXRp b24gaXMgdXNlZCBvbmx5IHdoZW4gY29uZmlkZW5jZSBsZXZlbHMgb2YKPiA+ID4gYWxsCj4gPiA+ IEBAIC0yMTcsOSArMjIyLDggQEAga2VlcHMgdHJhY2sgb2YgY2xhbXBpbmcga2VybmVsIHRocmVh ZHMsIGV2ZW4KPiA+ID4gYWZ0ZXIgdGhleSBhcmUgbWlncmF0ZWQKPiA+ID4gwqB0byBvdGhlciBD UFVzLCBhZnRlciBhIENQVSBvZmZsaW5lIGV2ZW50Lgo+ID4gPiDCoAo+ID4gPiDCoAo+ID4gPiAt PT09PT09PT09PT09PT09PT09PT09Cj4gPiA+IMKgUGVyZm9ybWFuY2UgQW5hbHlzaXMKPiA+ID4g LT09PT09PT09PT09PT09PT09PT09PQo+ID4gPiArPT09PT09PT09PT09PT09PT09PT0KPiA+ID4g wqBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHRoZSBnZW5lcmFsIHBlcmZvcm1hbmNlIGRhdGEgY29s bGVjdGVkIG9uCj4gPiA+IMKgbXVsdGlwbGUgc3lzdGVtcywgaW5jbHVkaW5nIFdlc3RtZXJlICg4 MFApIGFuZCBJdnkgQnJpZGdlICg0UCwKPiA+ID4gOFApLgo+ID4gPiDCoAo+ID4gPiBAQCAtMjU3 LDE2ICsyNjEsMTUgQEAgYWNoaWV2ZSB1cCB0byA0MCUgYmV0dGVyIHBlcmZvcm1hbmNlIHBlcgo+ ID4gPiB3YXR0Lgo+ID4gPiAobWVhc3VyZWQgYnkgYSBzcGluCj4gPiA+IMKgY291bnRlciBzdW1t ZWQgb3ZlciBwZXIgQ1BVIGNvdW50aW5nIHRocmVhZHMgc3Bhd25lZCBmb3IgYWxsCj4gPiA+IHJ1 bm5pbmcKPiA+ID4gwqBDUFVzKS4KPiA+ID4gwqAKPiA+ID4gLT09PT09PT09PT09PT09PT09PT09 Cj4gPiA+IMKgVXNhZ2UgYW5kIEludGVyZmFjZXMKPiA+ID4gwqA9PT09PT09PT09PT09PT09PT09 PQo+ID4gPiDCoFRoZSBwb3dlcmNsYW1wIGRyaXZlciBpcyByZWdpc3RlcmVkIHRvIHRoZSBnZW5l cmljIHRoZXJtYWwgbGF5ZXIKPiA+ID4gYXMKPiA+ID4gYQo+ID4gPiAtY29vbGluZyBkZXZpY2Uu IEN1cnJlbnRseSwgaXTigJlzIG5vdCBib3VuZCB0byBhbnkgdGhlcm1hbCB6b25lcy4KPiA+ID4g K2Nvb2xpbmcgZGV2aWNlLiBDdXJyZW50bHksIGl04oCZcyBub3QgYm91bmQgdG8gYW55IHRoZXJt YWwgem9uZXM6Ogo+ID4gPiDCoAo+ID4gPiAtamFjb2JAY2hyb21vbHk6L3N5cy9jbGFzcy90aGVy bWFsL2Nvb2xpbmdfZGV2aWNlMTQkIGdyZXAgLiAqCj4gPiA+IC1jdXJfc3RhdGU6MAo+ID4gPiAt bWF4X3N0YXRlOjUwCj4gPiA+IC10eXBlOmludGVsX3Bvd2VyY2xhbXAKPiA+ID4gK8KgwqBqYWNv YkBjaHJvbW9seTovc3lzL2NsYXNzL3RoZXJtYWwvY29vbGluZ19kZXZpY2UxNCQgZ3JlcCAuICoK PiA+ID4gK8KgwqBjdXJfc3RhdGU6MAo+ID4gPiArwqDCoG1heF9zdGF0ZTo1MAo+ID4gPiArwqDC oHR5cGU6aW50ZWxfcG93ZXJjbGFtcAo+ID4gPiDCoAo+ID4gPiDCoGN1cl9zdGF0ZSBhbGxvd3Mg dXNlciB0byBzZXQgdGhlIGRlc2lyZWQgaWRsZSBwZXJjZW50YWdlLgo+ID4gPiBXcml0aW5nIDAK PiA+ID4gdG8KPiA+ID4gwqBjdXJfc3RhdGUgd2lsbCBzdG9wIGlkbGUgaW5qZWN0aW9uLiBXcml0 aW5nIGEgdmFsdWUgYmV0d2VlbiAxCj4gPiA+IGFuZAo+ID4gPiBAQCAtMjc4LDkgKzI4MSw5IEBA IGN1cl9zdGF0ZSByZXR1cm5zIHZhbHVlIC0xIGluc3RlYWQgb2YgMCB3aGljaAo+ID4gPiBpcwo+ ID4gPiB0byBhdm9pZCBjb25mdXNpbmcKPiA+ID4gwqAxMDAlIGJ1c3kgc3RhdGUgd2l0aCB0aGUg ZGlzYWJsZWQgc3RhdGUuCj4gPiA+IMKgCj4gPiA+IMKgRXhhbXBsZSB1c2FnZToKPiA+ID4gLS0g VG8gaW5qZWN0IDI1JSBpZGxlIHRpbWUKPiA+ID4gLSQgc3VkbyBzaCAtYyAiZWNobyAyNSA+Cj4g PiA+IC9zeXMvY2xhc3MvdGhlcm1hbC9jb29saW5nX2RldmljZTgwL2N1cl9zdGF0ZQo+ID4gPiAt Igo+ID4gPiArLSBUbyBpbmplY3QgMjUlIGlkbGUgdGltZTo6Cj4gPiA+ICsKPiA+ID4gKwkkIHN1 ZG8gc2ggLWMgImVjaG8gMjUgPgo+ID4gPiAvc3lzL2NsYXNzL3RoZXJtYWwvY29vbGluZ19kZXZp Y2U4MC9jdXJfc3RhdGUKPiA+ID4gwqAKPiA+ID4gwqBJZiB0aGUgc3lzdGVtIGlzIG5vdCBidXN5 IGFuZCBoYXMgbW9yZSB0aGFuIDI1JSBpZGxlIHRpbWUKPiA+ID4gYWxyZWFkeSwKPiA+ID4gwqB0 aGVuIHRoZSBwb3dlcmNsYW1wIGRyaXZlciB3aWxsIG5vdCBzdGFydCBpZGxlIGluamVjdGlvbi4g VXNpbmcKPiA+ID4gVG9wCj4gPiA+IEBAIC0yOTIsMjMgKzI5NSwyMyBAQCBpZGxlIHRpbWUgaXMg YWNjb3VudGVkIGFzIG5vcm1hbCBpZGxlIGluCj4gPiA+IHRoYXQKPiA+ID4gY29tbW9uIGNvZGUg cGF0aCBpcwo+ID4gPiDCoHRha2VuIGFzIHRoZSBpZGxlIHRhc2suCj4gPiA+IMKgCj4gPiA+IMKg SW4gdGhpcyBleGFtcGxlLCAyNC4xJSBpZGxlIGlzIHNob3duLiBUaGlzIGhlbHBzIHRoZSBzeXN0 ZW0KPiA+ID4gYWRtaW4gb3IKPiA+ID4gLXVzZXIgZGV0ZXJtaW5lIHRoZSBjYXVzZSBvZiBzbG93 ZG93biwgd2hlbiBhIHBvd2VyY2xhbXAgZHJpdmVyCj4gPiA+IGlzIGluCj4gPiA+IGFjdGlvbi4K PiA+ID4gK3VzZXIgZGV0ZXJtaW5lIHRoZSBjYXVzZSBvZiBzbG93ZG93biwgd2hlbiBhIHBvd2Vy Y2xhbXAgZHJpdmVyCj4gPiA+IGlzIGluCj4gPiA+IGFjdGlvbjo6Cj4gPiA+IMKgCj4gPiA+IMKg Cj4gPiA+IC1UYXNrczogMTk3IHRvdGFsLMKgwqDCoDEgcnVubmluZywgMTk2IHNsZWVwaW5nLMKg wqDCoDAgc3RvcHBlZCzCoMKgwqAwCj4gPiA+IHpvbWJpZQo+ID4gPiAtQ3B1KHMpOiA3MS4yJXVz LMKgwqA0Ljclc3kswqDCoDAuMCVuaSwKPiA+ID4gMjQuMSVpZCzCoMKgMC4wJXdhLMKgwqAwLjAl aGkswqDCoDAuMCVzaSzCoMKgMC4wJXN0Cj4gPiA+IC1NZW06wqDCoMKgMzk0MzIyOGsgdG90YWws wqDCoDE2ODk2MzJrIHVzZWQswqDCoDIyNTM1OTZrIGZyZWUswqDCoMKgwqA3NDk2MGsKPiA+ID4g YnVmZmVycwo+ID4gPiAtU3dhcDrCoMKgNDA4NzgwNGsgdG90YWwswqDCoMKgwqDCoMKgwqDCoDBr IHVzZWQswqDCoDQwODc4MDRrIGZyZWUswqDCoMKgOTQ1MzM2awo+ID4gPiBjYWNoZWQKPiA+ID4g K8KgwqBUYXNrczogMTk3IHRvdGFsLMKgwqDCoDEgcnVubmluZywgMTk2IHNsZWVwaW5nLMKgwqDC oDAgc3RvcHBlZCzCoMKgwqAwCj4gPiA+IHpvbWJpZQo+ID4gPiArwqDCoENwdShzKTogNzEuMiV1 cyzCoMKgNC43JXN5LMKgwqAwLjAlbmksCj4gPiA+IDI0LjElaWQswqDCoDAuMCV3YSzCoMKgMC4w JWhpLMKgwqAwLjAlc2kswqDCoDAuMCVzdAo+ID4gPiArwqDCoE1lbTrCoMKgwqAzOTQzMjI4ayB0 b3RhbCzCoMKgMTY4OTYzMmsgdXNlZCzCoMKgMjI1MzU5NmsKPiA+ID4gZnJlZSzCoMKgwqDCoDc0 OTYwawo+ID4gPiBidWZmZXJzCj4gPiA+ICvCoMKgU3dhcDrCoMKgNDA4NzgwNGsgdG90YWwswqDC oMKgwqDCoMKgwqDCoDBrIHVzZWQswqDCoDQwODc4MDRrCj4gPiA+IGZyZWUswqDCoMKgOTQ1MzM2 awo+ID4gPiBjYWNoZWQKPiA+ID4gwqAKPiA+ID4gLcKgwqBQSUQgVVNFUsKgwqDCoMKgwqDCoFBS wqDCoE5JwqDCoFZJUlTCoMKgUkVTwqDCoFNIUiBTICVDUFUKPiA+ID4gJU1FTcKgwqDCoMKgVElN RSvCoMKgQ09NTUFORAo+ID4gPiAtIDMzNTIgamFjb2LCoMKgwqDCoMKgMjDCoMKgwqAwwqDCoDI2 Mm3CoMKgNjQ0wqDCoDQyOCBTwqDCoDI4NsKgwqAwLjDCoMKgwqAwOjE3LjE2Cj4gPiA+IHNwaW4K PiA+ID4gLSAzMzQxIHJvb3TCoMKgwqDCoMKgLTUxwqDCoMKgMMKgwqDCoMKgwqAwwqDCoMKgwqAw wqDCoMKgwqAwIETCoMKgwqAyNcKgwqAwLjDCoMKgwqAwOjAxLjYyCj4gPiA+IGtpZGxlX2luamVj dC8wCj4gPiA+IC0gMzM0NCByb290wqDCoMKgwqDCoC01McKgwqDCoDDCoMKgwqDCoMKgMMKgwqDC oMKgMMKgwqDCoMKgMCBEwqDCoMKgMjXCoMKgMC4wwqDCoMKgMDowMS42MAo+ID4gPiBraWRsZV9p bmplY3QvMwo+ID4gPiAtIDMzNDIgcm9vdMKgwqDCoMKgwqAtNTHCoMKgwqAwwqDCoMKgwqDCoDDC oMKgwqDCoDDCoMKgwqDCoDAgRMKgwqDCoDI1wqDCoDAuMMKgwqDCoDA6MDEuNjEKPiA+ID4ga2lk bGVfaW5qZWN0LzEKPiA+ID4gLSAzMzQzIHJvb3TCoMKgwqDCoMKgLTUxwqDCoMKgMMKgwqDCoMKg wqAwwqDCoMKgwqAwwqDCoMKgwqAwIETCoMKgwqAyNcKgwqAwLjDCoMKgwqAwOjAxLjYwCj4gPiA+ IGtpZGxlX2luamVjdC8yCj4gPiA+IC0gMjkzNSBqYWNvYsKgwqDCoMKgwqAyMMKgwqDCoDDCoMKg Njk2bSAxMjVtwqDCoDM1bSBTwqDCoMKgwqA1wqDCoDMuM8KgwqDCoDA6MzEuMTEKPiA+ID4gZmly ZWZveAo+ID4gPiAtIDE1NDYgcm9vdMKgwqDCoMKgwqDCoDIwwqDCoMKgMMKgwqAxNThtwqDCoDIw bSA2NjQwIFPCoMKgwqDCoDPCoMKgMC41wqDCoMKgMDoyNi45Nwo+ID4gPiBYb3JnCj4gPiA+IC0g MjEwMCBqYWNvYsKgwqDCoMKgwqAyMMKgwqDCoDAgMTIyM23CoMKgODhtwqDCoDMwbSBTwqDCoMKg wqAzwqDCoDIuM8KgwqDCoDA6MjMuNjgKPiA+ID4gY29tcGl6Cj4gPiA+ICvCoMKgwqDCoFBJRCBV U0VSwqDCoMKgwqDCoMKgUFLCoMKgTknCoMKgVklSVMKgwqBSRVPCoMKgU0hSIFMgJUNQVQo+ID4g PiAlTUVNwqDCoMKgwqBUSU1FK8KgwqBDT01NQU5ECj4gPiA+ICvCoMKgwqAzMzUyIGphY29iwqDC oMKgwqDCoDIwwqDCoMKgMMKgwqAyNjJtwqDCoDY0NMKgwqA0MjggU8KgwqAyODbCoMKgMC4wwqDC oMKgMDoxNy4xNgo+ID4gPiBzcGluCj4gPiA+ICvCoMKgwqAzMzQxIHJvb3TCoMKgwqDCoMKgLTUx wqDCoMKgMMKgwqDCoMKgwqAwwqDCoMKgwqAwwqDCoMKgwqAwIETCoMKgwqAyNcKgwqAwLjDCoMKg wqAwOjAxLjYyCj4gPiA+IGtpZGxlX2luamVjdC8wCj4gPiA+ICvCoMKgwqAzMzQ0IHJvb3TCoMKg wqDCoMKgLTUxwqDCoMKgMMKgwqDCoMKgwqAwwqDCoMKgwqAwwqDCoMKgwqAwIETCoMKgwqAyNcKg wqAwLjDCoMKgwqAwOjAxLjYwCj4gPiA+IGtpZGxlX2luamVjdC8zCj4gPiA+ICvCoMKgwqAzMzQy IHJvb3TCoMKgwqDCoMKgLTUxwqDCoMKgMMKgwqDCoMKgwqAwwqDCoMKgwqAwwqDCoMKgwqAwIETC oMKgwqAyNcKgwqAwLjDCoMKgwqAwOjAxLjYxCj4gPiA+IGtpZGxlX2luamVjdC8xCj4gPiA+ICvC oMKgwqAzMzQzIHJvb3TCoMKgwqDCoMKgLTUxwqDCoMKgMMKgwqDCoMKgwqAwwqDCoMKgwqAwwqDC oMKgwqAwIETCoMKgwqAyNcKgwqAwLjDCoMKgwqAwOjAxLjYwCj4gPiA+IGtpZGxlX2luamVjdC8y Cj4gPiA+ICvCoMKgwqAyOTM1IGphY29iwqDCoMKgwqDCoDIwwqDCoMKgMMKgwqA2OTZtIDEyNW3C oMKgMzVtIFPCoMKgwqDCoDXCoMKgMy4zwqDCoMKgMDozMS4xMQo+ID4gPiBmaXJlZm94Cj4gPiA+ ICvCoMKgwqAxNTQ2IHJvb3TCoMKgwqDCoMKgwqAyMMKgwqDCoDDCoMKgMTU4bcKgwqAyMG0gNjY0 MCBTwqDCoMKgwqAzwqDCoDAuNcKgwqDCoDA6MjYuOTcKPiA+ID4gWG9yZwo+ID4gPiArwqDCoMKg MjEwMCBqYWNvYsKgwqDCoMKgwqAyMMKgwqDCoDAgMTIyM23CoMKgODhtwqDCoDMwbSBTwqDCoMKg wqAzwqDCoDIuM8KgwqDCoDA6MjMuNjgKPiA+ID4gY29tcGl6Cj4gPiA+IMKgCj4gPiA+IMKgVGVz dHMgaGF2ZSBzaG93biB0aGF0IGJ5IHVzaW5nIHRoZSBwb3dlcmNsYW1wIGRyaXZlciBhcyBhCj4g PiA+IGNvb2xpbmcKPiA+ID4gwqBkZXZpY2UsIGEgUElEIGJhc2VkIHVzZXJzcGFjZSB0aGVybWFs IGNvbnRyb2xsZXIgY2FuIG1hbmFnZSB0bwo+ID4gPiBkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlv bi90aGVybWFsL25vdXZlYXVfdGhlcm1hbAo+ID4gPiBiL0RvY3VtZW50YXRpb24vdGhlcm1hbC9u b3V2ZWF1X3RoZXJtYWwucnN0Cj4gPiA+IHNpbWlsYXJpdHkgaW5kZXggNjQlCj4gPiA+IHJlbmFt ZSBmcm9tIERvY3VtZW50YXRpb24vdGhlcm1hbC9ub3V2ZWF1X3RoZXJtYWwKPiA+ID4gcmVuYW1l IHRvIERvY3VtZW50YXRpb24vdGhlcm1hbC9ub3V2ZWF1X3RoZXJtYWwucnN0Cj4gPiA+IGluZGV4 IDZlMTdhMTFlZmNiMC4uMzcyNTVmZDY3MzVkIDEwMDY0NAo+ID4gPiAtLS0gYS9Eb2N1bWVudGF0 aW9uL3RoZXJtYWwvbm91dmVhdV90aGVybWFsCj4gPiA+ICsrKyBiL0RvY3VtZW50YXRpb24vdGhl cm1hbC9ub3V2ZWF1X3RoZXJtYWwucnN0Cj4gPiA+IEBAIC0xLDEzICsxLDE1IEBACj4gPiA+ICs9 PT09PT09PT09PT09PT09PT09PT0KPiA+ID4gwqBLZXJuZWwgZHJpdmVyIG5vdXZlYXUKPiA+ID4g LT09PT09PT09PT09PT09PT09PT0KPiA+ID4gKz09PT09PT09PT09PT09PT09PT09PQo+ID4gPiDC oAo+ID4gPiDCoFN1cHBvcnRlZCBjaGlwczoKPiA+ID4gKwo+ID4gPiDCoCogTlY0MysKPiA+ID4g wqAKPiA+ID4gwqBBdXRob3JzOiBNYXJ0aW4gUGVyZXMgKG11cHVmKSA8bWFydGluLnBlcmVzQGZy ZWUuZnI+Cj4gPiA+IMKgCj4gPiA+IMKgRGVzY3JpcHRpb24KPiA+ID4gLS0tLS0tLS0tLQo+ID4g PiArLS0tLS0tLS0tLS0KPiA+ID4gwqAKPiA+ID4gwqBUaGlzIGRyaXZlciBhbGxvd3MgdG8gcmVh ZCB0aGUgR1BVIGNvcmUgdGVtcGVyYXR1cmUsIGRyaXZlIHRoZQo+ID4gPiBHUFUKPiA+ID4gZmFu IGFuZAo+ID4gPiDCoHNldCB0ZW1wZXJhdHVyZSBhbGFybXMuCj4gPiA+IEBAIC0xOSwyMCArMjEs MjUgQEAgaW50ZXJmYWNlIGlzIGxpa2VseSBub3QgdG8gd29yay4gVGhpcwo+ID4gPiBkb2N1bWVu dAo+ID4gPiBtYXkgdGhlbiBub3QgY292ZXIgeW91ciBzaXR1YXRpb24KPiA+ID4gwqBlbnRpcmVs eS4KPiA+ID4gwqAKPiA+ID4gwqBUZW1wZXJhdHVyZSBtYW5hZ2VtZW50Cj4gPiA+IC0tLS0tLS0t LS0tLS0tLS0tLS0tLQo+ID4gPiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ID4gPiDCoAo+ID4g PiDCoFRlbXBlcmF0dXJlIGlzIGV4cG9zZWQgdW5kZXIgYXMgYSByZWFkLW9ubHkgSFdNT04gYXR0 cmlidXRlCj4gPiA+IHRlbXAxX2lucHV0Lgo+ID4gPiDCoAo+ID4gPiDCoEluIG9yZGVyIHRvIHBy b3RlY3QgdGhlIEdQVSBmcm9tIG92ZXJoZWF0aW5nLCBOb3V2ZWF1IHN1cHBvcnRzIDQKPiA+ID4g Y29uZmlndXJhYmxlCj4gPiA+IMKgdGVtcGVyYXR1cmUgdGhyZXNob2xkczoKPiA+ID4gwqAKPiA+ ID4gLSAqIEZhbl9ib29zdDogRmFuIHNwZWVkIGlzIHNldCB0byAxMDAlIHdoZW4gcmVhY2hpbmcg dGhpcwo+ID4gPiB0ZW1wZXJhdHVyZTsKPiA+ID4gLSAqIERvd25jbG9jazogVGhlIEdQVSB3aWxs IGJlIGRvd25jbG9ja2VkIHRvIHJlZHVjZSBpdHMgcG93ZXIKPiA+ID4gZGlzc2lwYXRpb247Cj4g PiA+IC0gKiBDcml0aWNhbDogVGhlIEdQVSBpcyBwdXQgb24gaG9sZCB0byBmdXJ0aGVyIGxvd2Vy IHBvd2VyCj4gPiA+IGRpc3NpcGF0aW9uOwo+ID4gPiAtICogU2h1dGRvd246IFNodXQgdGhlIGNv bXB1dGVyIGRvd24gdG8gcHJvdGVjdCB5b3VyIEdQVS4KPiA+ID4gKyAqIEZhbl9ib29zdDoKPiA+ ID4gKwlGYW4gc3BlZWQgaXMgc2V0IHRvIDEwMCUgd2hlbiByZWFjaGluZyB0aGlzIHRlbXBlcmF0 dXJlOwo+ID4gPiArICogRG93bmNsb2NrOgo+ID4gPiArCVRoZSBHUFUgd2lsbCBiZSBkb3duY2xv Y2tlZCB0byByZWR1Y2UgaXRzIHBvd2VyCj4gPiA+IGRpc3NpcGF0aW9uOwo+ID4gPiArICogQ3Jp dGljYWw6Cj4gPiA+ICsJVGhlIEdQVSBpcyBwdXQgb24gaG9sZCB0byBmdXJ0aGVyIGxvd2VyIHBv d2VyCj4gPiA+IGRpc3NpcGF0aW9uOwo+ID4gPiArICogU2h1dGRvd246Cj4gPiA+ICsJU2h1dCB0 aGUgY29tcHV0ZXIgZG93biB0byBwcm90ZWN0IHlvdXIgR1BVLgo+ID4gPiDCoAo+ID4gPiAtV0FS TklORzogU29tZSBvZiB0aGVzZSB0aHJlc2hvbGRzIG1heSBub3QgYmUgdXNlZCBieSBOb3V2ZWF1 Cj4gPiA+IGRlcGVuZGluZwo+ID4gPiAtb24geW91ciBjaGlwc2V0Lgo+ID4gPiArV0FSTklORzoK PiA+ID4gKwlTb21lIG9mIHRoZXNlIHRocmVzaG9sZHMgbWF5IG5vdCBiZSB1c2VkIGJ5IE5vdXZl YXUKPiA+ID4gZGVwZW5kaW5nCj4gPiA+ICsJb24geW91ciBjaGlwc2V0Lgo+ID4gPiDCoAo+ID4g PiDCoFRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGVzZSB0aHJlc2hvbGRzIGNvbWVzIGZyb20gdGhl IEdQVSdzCj4gPiA+IHZiaW9zLgo+ID4gPiBUaGVzZQo+ID4gPiDCoHRocmVzaG9sZHMgY2FuIGJl IGNvbmZpZ3VyZWQgdGhhbmtzIHRvIHRoZSBmb2xsb3dpbmcgSFdNT04KPiA+ID4gYXR0cmlidXRl czoKPiA+ID4gQEAgLTQ2LDE5ICs1MywyNCBAQCBOT1RFOiBSZW1lbWJlciB0aGF0IHRoZSB2YWx1 ZXMgYXJlIHN0b3JlZCBhcwo+ID4gPiBtaWxsaSBkZWdyZWVzIENlbHNpdXMuIERvbid0IGZvcmdl dAo+ID4gPiDCoHRvIG11bHRpcGx5IQo+ID4gPiDCoAo+ID4gPiDCoEZhbiBtYW5hZ2VtZW50Cj4g PiA+IC0tLS0tLS0tLS0tLS0KPiA+ID4gKy0tLS0tLS0tLS0tLS0tCj4gPiA+IMKgCj4gPiA+IMKg Tm90IGFsbCBjYXJkcyBoYXZlIGEgZHJpdmFibGUgZmFuLiBJZiB5b3UgZG8sIHRoZW4gdGhlIGZv bGxvd2luZwo+ID4gPiBIV01PTgo+ID4gPiDCoGF0dHJpYnV0ZXMgc2hvdWxkIGJlIGF2YWlsYWJs ZToKPiA+ID4gwqAKPiA+ID4gLSAqIHB3bTFfZW5hYmxlOiBDdXJyZW50IGZhbiBtYW5hZ2VtZW50 IG1vZGUgKE5PTkUsIE1BTlVBTCBvcgo+ID4gPiBBVVRPKTsKPiA+ID4gLSAqIHB3bTE6IEN1cnJl bnQgUFdNIHZhbHVlIChwb3dlciBwZXJjZW50YWdlKTsKPiA+ID4gLSAqIHB3bTFfbWluOiBUaGUg bWluaW11bSBQV00gc3BlZWQgYWxsb3dlZDsKPiA+ID4gLSAqIHB3bTFfbWF4OiBUaGUgbWF4aW11 bSBQV00gc3BlZWQgYWxsb3dlZCAoYnlwYXNzZWQgd2hlbgo+ID4gPiBoaXR0aW5nCj4gPiA+IEZh bl9ib29zdCk7Cj4gPiA+ICsgKiBwd20xX2VuYWJsZToKPiA+ID4gKwlDdXJyZW50IGZhbiBtYW5h Z2VtZW50IG1vZGUgKE5PTkUsIE1BTlVBTCBvciBBVVRPKTsKPiA+ID4gKyAqIHB3bTE6Cj4gPiA+ ICsJQ3VycmVudCBQV00gdmFsdWUgKHBvd2VyIHBlcmNlbnRhZ2UpOwo+ID4gPiArICogcHdtMV9t aW46Cj4gPiA+ICsJVGhlIG1pbmltdW0gUFdNIHNwZWVkIGFsbG93ZWQ7Cj4gPiA+ICsgKiBwd20x X21heDoKPiA+ID4gKwlUaGUgbWF4aW11bSBQV00gc3BlZWQgYWxsb3dlZCAoYnlwYXNzZWQgd2hl biBoaXR0aW5nCj4gPiA+IEZhbl9ib29zdCk7Cj4gPiA+IMKgCj4gPiA+IMKgWW91IG1heSBhbHNv IGhhdmUgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGU6Cj4gPiA+IMKgCj4gPiA+IC0gKiBmYW4xX2lu cHV0OiBTcGVlZCBpbiBSUE0gb2YgeW91ciBmYW4uCj4gPiA+ICsgKiBmYW4xX2lucHV0Ogo+ID4g PiArCVNwZWVkIGluIFJQTSBvZiB5b3VyIGZhbi4KPiA+ID4gwqAKPiA+ID4gwqBZb3VyIGZhbiBj YW4gYmUgZHJpdmVuIGluIGRpZmZlcmVudCBtb2RlczoKPiA+ID4gwqAKPiA+ID4gQEAgLTY2LDE0 ICs3OCwxNiBAQCBZb3VyIGZhbiBjYW4gYmUgZHJpdmVuIGluIGRpZmZlcmVudCBtb2RlczoKPiA+ ID4gwqAgKiAxOiBUaGUgZmFuIGNhbiBiZSBkcml2ZW4gaW4gbWFudWFsICh1c2UgcHdtMSB0byBj aGFuZ2UgdGhlCj4gPiA+IHNwZWVkKTsKPiA+ID4gwqAgKiAyOyBUaGUgZmFuIGlzIGRyaXZlbiBh dXRvbWF0aWNhbGx5IGRlcGVuZGluZyBvbiB0aGUKPiA+ID4gdGVtcGVyYXR1cmUuCj4gPiA+IMKg Cj4gPiA+IC1OT1RFOiBCZSBzdXJlIHRvIHVzZSB0aGUgbWFudWFsIG1vZGUgaWYgeW91IHdhbnQg dG8gZHJpdmUgdGhlCj4gPiA+IGZhbgo+ID4gPiBzcGVlZCBtYW51YWxseQo+ID4gPiArTk9URToK PiA+ID4gK8KgwqBCZSBzdXJlIHRvIHVzZSB0aGUgbWFudWFsIG1vZGUgaWYgeW91IHdhbnQgdG8g ZHJpdmUgdGhlIGZhbgo+ID4gPiBzcGVlZAo+ID4gPiBtYW51YWxseQo+ID4gPiDCoAo+ID4gPiAt Tk9URTI6IFdoZW4gb3BlcmF0aW5nIGluIG1hbnVhbCBtb2RlIG91dHNpZGUgdGhlIHZiaW9zLWRl ZmluZWQKPiA+ID4gLVtQV01fbWluLCBQV01fbWF4XSByYW5nZSwgdGhlIHJlcG9ydGVkIGZhbiBz cGVlZCAoUlBNKSBtYXkgbm90Cj4gPiA+IGJlCj4gPiA+IGFjY3VyYXRlCj4gPiA+IC1kZXBlbmRp bmcgb24geW91ciBoYXJkd2FyZS4KPiA+ID4gK05PVEUyOgo+ID4gPiArwqDCoFdoZW4gb3BlcmF0 aW5nIGluIG1hbnVhbCBtb2RlIG91dHNpZGUgdGhlIHZiaW9zLWRlZmluZWQKPiA+ID4gK8KgwqBb UFdNX21pbiwgUFdNX21heF0gcmFuZ2UsIHRoZSByZXBvcnRlZCBmYW4gc3BlZWQgKFJQTSkgbWF5 IG5vdAo+ID4gPiBiZQo+ID4gPiBhY2N1cmF0ZQo+ID4gPiArwqDCoGRlcGVuZGluZyBvbiB5b3Vy IGhhcmR3YXJlLgo+ID4gPiDCoAo+ID4gPiDCoEJ1ZyByZXBvcnRzCj4gPiA+IC0tLS0tLS0tLS0K PiA+ID4gKy0tLS0tLS0tLS0tCj4gPiA+IMKgCj4gPiA+IMKgVGhlcm1hbCBtYW5hZ2VtZW50IG9u IE5vdXZlYXUgaXMgbmV3IGFuZCBtYXkgbm90IHdvcmsgb24gYWxsCj4gPiA+IGNhcmRzLgo+ID4g PiBJZiB5b3UgaGF2ZQo+ID4gPiDCoGlucXVpcmllcywgcGxlYXNlIHBpbmcgbXVwdWYgb24gSVJD ICgjbm91dmVhdSwgZnJlZW5vZGUpLgo+ID4gPiBkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90 aGVybWFsL3Bvd2VyX2FsbG9jYXRvci50eHQKPiA+ID4gYi9Eb2N1bWVudGF0aW9uL3RoZXJtYWwv cG93ZXJfYWxsb2NhdG9yLnJzdAo+ID4gPiBzaW1pbGFyaXR5IGluZGV4IDc0JQo+ID4gPiByZW5h bWUgZnJvbSBEb2N1bWVudGF0aW9uL3RoZXJtYWwvcG93ZXJfYWxsb2NhdG9yLnR4dAo+ID4gPiBy ZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi90aGVybWFsL3Bvd2VyX2FsbG9jYXRvci5yc3QKPiA+ID4g aW5kZXggOWZiMGZmMDZkY2E5Li42N2I2YTMyOTcyMzggMTAwNjQ0Cj4gPiA+IC0tLSBhL0RvY3Vt ZW50YXRpb24vdGhlcm1hbC9wb3dlcl9hbGxvY2F0b3IudHh0Cj4gPiA+ICsrKyBiL0RvY3VtZW50 YXRpb24vdGhlcm1hbC9wb3dlcl9hbGxvY2F0b3IucnN0Cj4gPiA+IEBAIC0xLDMgKzEsNCBAQAo+ ID4gPiArPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cj4gPiA+IMKgUG93ZXIgYWxs b2NhdG9yIGdvdmVybm9yIHR1bmFibGVzCj4gPiA+IMKgPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Cj4gPiA+IMKgCj4gPiA+IEBAIC0yNSwzNiArMjYsMzYgQEAgdGVtcGVyYXR1cmUg YXMgdGhlIGNvbnRyb2wgaW5wdXQgYW5kIHBvd2VyIGFzCj4gPiA+IHRoZQo+ID4gPiBjb250cm9s bGVkIG91dHB1dDoKPiA+ID4gwqDCoMKgwqDCoFBfbWF4ID0ga19wICogZSArIGtfaSAqIGVycl9p bnRlZ3JhbCArIGtfZCAqIGRpZmZfZXJyICsKPiA+ID4gc3VzdGFpbmFibGVfcG93ZXIKPiA+ID4g wqAKPiA+ID4gwqB3aGVyZQo+ID4gPiAtwqDCoMKgwqBlID0gZGVzaXJlZF90ZW1wZXJhdHVyZSAt IGN1cnJlbnRfdGVtcGVyYXR1cmUKPiA+ID4gLcKgwqDCoMKgZXJyX2ludGVncmFsIGlzIHRoZSBz dW0gb2YgcHJldmlvdXMgZXJyb3JzCj4gPiA+IC3CoMKgwqDCoGRpZmZfZXJyID0gZSAtIHByZXZp b3VzX2Vycm9yCj4gPiA+ICvCoMKgwqAtwqDCoGUgPSBkZXNpcmVkX3RlbXBlcmF0dXJlIC0gY3Vy cmVudF90ZW1wZXJhdHVyZQo+ID4gPiArwqDCoMKgLcKgwqBlcnJfaW50ZWdyYWwgaXMgdGhlIHN1 bSBvZiBwcmV2aW91cyBlcnJvcnMKPiA+ID4gK8KgwqDCoC3CoMKgZGlmZl9lcnIgPSBlIC0gcHJl dmlvdXNfZXJyb3IKPiA+ID4gwqAKPiA+ID4gLUl0IGlzIHNpbWlsYXIgdG8gdGhlIG9uZSBkZXBp Y3RlZCBiZWxvdzoKPiA+ID4gK0l0IGlzIHNpbWlsYXIgdG8gdGhlIG9uZSBkZXBpY3RlZCBiZWxv dzo6Cj4gPiA+IMKgCj4gPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKga19kCj4gPiA+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqB8Cj4gPiA+IC1jdXJyZW50X3RlbXDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8Cj4gPiA+IC3CoMKgwqDCoMKgfMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHYKPiA+ID4gLcKgwqDCoMKgwqB8wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAr LS0tLS0tLS0tLSvCoMKgwqArLS0tKwo+ID4gPiAtwqDCoMKgwqDCoHzCoMKgwqDCoMKgwqDCoMKg wqArLS0tLS0+fCBkaWZmX2VyciB8LS0+fCBYIHwtLS0tLS0rCj4gPiA+IC3CoMKgwqDCoMKgfMKg wqDCoMKgwqDCoMKgwqDCoHzCoMKgwqDCoMKgwqArLS0tLS0tLS0tLSvCoMKgwqArLS0tK8KgwqDC oMKgwqDCoHwKPiA+ID4gLcKgwqDCoMKgwqB8wqDCoMKgwqDCoMKgwqDCoMKgfMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDC oMKgwqDCoMKgdGRwwqDCoMKgwqDCoMKgCj4gPiA+IMKgwqBhYwo+ID4gPiB0b3IKPiA+ID4gLcKg wqDCoMKgwqB8wqDCoMKgwqDCoMKgwqDCoMKgfMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKga19pwqDCoMKgwqDCoMKgwqB8wqDCoMKgwqDCoMKgwqB8wqDCoGdldF9y Cj4gPiA+IGVxdWUKPiA+ID4gc3RlZF9wb3dlcigpCj4gPiA+IC3CoMKgwqDCoMKgfMKgwqDCoMKg wqDCoMKgwqDCoHzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg fMKgwqDCoMKgwqDCoMKgwqB8wqDCoMKgwqDCoMKgwqB8wqDCoMKgwqDCoMKgwqAKPiA+ID4gwqB8 wqDCoAo+ID4gPiDCoMKgwqB8Cj4gPiA+IC3CoMKgwqDCoMKgfMKgwqDCoMKgwqDCoMKgwqDCoHzC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqDCoMKgwqDC oMKgwqB8wqDCoMKgwqDCoMKgwqB8wqDCoMKgwqDCoMKgwqAKPiA+ID4gwqB8wqDCoAo+ID4gPiDC oMKgwqB8IC4uLgo+ID4gPiAtwqDCoMKgwqDCoHbCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHbCoMKgwqDCoMKgwqDCoMKgdsKg wqDCoMKgwqDCoMKgdsKgwqDCoMKgwqDCoMKgCj4gPiA+IMKgdsKgwqAKPiA+ID4gwqDCoMKgdgo+ ID4gPiAtwqDCoMKgKy0tLSvCoMKgwqDCoMKgwqDCoHzCoMKgwqDCoMKgwqArLS0tLS0tLSvCoMKg wqDCoMKgwqArLS0tK8KgwqDCoMKgKy0tLSvCoMKgwqArLS0tK8KgwqDCoCstCj4gPiA+IC0tLS0K PiA+ID4gLS0tLS0rCj4gPiA+IC3CoMKgwqB8IFMgfC0tLS0tLS0rLS0tLS0+fCBzdW0gZSB8LS0t LS0+fCBYIHwtLS0+fCBTIHwtLT58IFMgfMKgwqAKPiA+ID4gLS0+fHBvd2VywqDCoMKgwqDCoHzC oMKgCj4gPiA+IC3CoMKgwqArLS0tK8KgwqDCoMKgwqDCoMKgfMKgwqDCoMKgwqDCoCstLS0tLS0t K8KgwqDCoMKgwqDCoCstLS0rwqDCoMKgwqArLS0tK8KgwqDCoCstLS0KPiA+ID4gK8KgwqDCoHxh bGxvY2F0aW9ufAo+ID4gPiAtwqDCoMKgwqDCoF7CoMKgwqDCoMKgwqDCoMKgwqB8wqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoF7C oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCstCj4gPiA+IC0tLS0KPiA+ID4gLS0tLS0rCj4gPiA+ IC3CoMKgwqDCoMKgfMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoAo+ID4gPiDCoHzCoMKgCj4gPiA+IMKgwqDCoHwKPiA+ID4gLcKgwqDCoMKg wqB8wqDCoMKgwqDCoMKgwqDCoMKgfMKgwqDCoMKgwqDCoMKgwqArLS0tCj4gPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHzCoMKgwqDCoMKgfAo+ID4gPiAtwqDCoMKgwqDCoHzCoMKgwqDCoMKgwqDCoMKgwqAr LS0tLS0tLT58IFggfC0tLS0tLS0tLS0tLS0tLS0tLS0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgdsKgwqDCoMKgwqB2Cj4gPiA+IC3CoMKgwqDCoMKgfMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCstLS0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ3JhbnRlZAo+ID4gPiBw ZXJmb3JtYW5jZQo+ID4gPiAtZGVzaXJlZF90ZW1wZXJhdHVyZcKgwqDCoMKgwqDCoMKgXgo+ID4g PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHwK PiA+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqB8Cj4gPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGtf cG8va19wdQo+ID4gPiArCQkJCcKgwqDCoMKgwqDCoGtfZAo+ID4gPiArCQkJCcKgwqDCoMKgwqDC oMKgfAo+ID4gPiArwqDCoGN1cnJlbnRfdGVtcMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgfAo+ID4gPiArwqDCoMKgwqDCoMKgwqB8wqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB2Cj4gPiA+ ICvCoMKgwqDCoMKgwqDCoHzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKy0tLS0tLS0tLS0r wqDCoMKgKy0tLSsKPiA+ID4gK8KgwqDCoMKgwqDCoMKgfMKgwqDCoMKgwqDCoMKgKy0tLS0tPnwg ZGlmZl9lcnIgfC0tPnwgWCB8LS0tLS0tKwo+ID4gPiArwqDCoMKgwqDCoMKgwqB8wqDCoMKgwqDC oMKgwqB8wqDCoMKgwqDCoMKgKy0tLS0tLS0tLS0rwqDCoMKgKy0tLSvCoMKgwqDCoMKgwqB8Cj4g PiA+ICvCoMKgwqDCoMKgwqDCoHzCoMKgwqDCoMKgwqDCoHzCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqDCoMKgwqDCoHRk cMKgwqDCoMKgwqDCoAo+ID4gPiDCoMKgYWMKPiA+ID4gdG9yCj4gPiA+ICvCoMKgwqDCoMKgwqDC oHzCoMKgwqDCoMKgwqDCoHzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGtfacKgwqDCoMKgwqDCoMKgfMKgwqDCoMKgwqDCoMKgfMKgwqBnZXRfcgo+ID4gPiBlcXVl Cj4gPiA+IHN0ZWRfcG93ZXIoKQo+ID4gPiArwqDCoMKgwqDCoMKgwqB8wqDCoMKgwqDCoMKgwqB8 wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgwqDCoMKg wqDCoMKgfMKgwqDCoMKgwqDCoMKgfMKgwqDCoMKgwqDCoMKgCj4gPiA+IMKgfMKgwqAKPiA+ID4g wqDCoMKgfAo+ID4gPiArwqDCoMKgwqDCoMKgwqB8wqDCoMKgwqDCoMKgwqB8wqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgwqDCoMKgwqDCoMKgfMKgwqDC oMKgwqDCoMKgfMKgwqDCoMKgwqDCoMKgCj4gPiA+IMKgfMKgwqAKPiA+ID4gwqDCoMKgfCAuLi4K PiA+ID4gK8KgwqDCoMKgwqDCoMKgdsKgwqDCoMKgwqDCoMKgfMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB2wqDCoMKgwqDCoMKgwqDCoHbCoMKgwqDCoMKgwqDC oHbCoMKgwqDCoMKgwqDCoAo+ID4gPiDCoHbCoMKgCj4gPiA+IMKgwqDCoHYKPiA+ID4gK8KgwqDC oMKgwqArLS0tK8KgwqDCoMKgwqB8wqDCoMKgwqDCoMKgKy0tLS0tLS0rwqDCoMKgwqDCoMKgKy0t LSvCoMKgwqDCoCstLS0rwqDCoMKgKy0tLSvCoMKgwqArLQo+ID4gPiAtLS0tCj4gPiA+IC0tLS0t Kwo+ID4gPiArwqDCoMKgwqDCoHwgUyB8LS0tLS0rLS0tLS0+fCBzdW0gZSB8LS0tLS0+fCBYIHwt LS0+fCBTIHwtLT58IFMgfMKgwqAKPiA+ID4gLS0+fHBvd2VywqDCoMKgwqDCoHzCoMKgCj4gPiA+ ICvCoMKgwqDCoMKgKy0tLSvCoMKgwqDCoMKgfMKgwqDCoMKgwqDCoCstLS0tLS0tK8KgwqDCoMKg wqDCoCstLS0rwqDCoMKgwqArLS0tK8KgwqDCoCstLS0KPiA+ID4gK8KgwqDCoHxhbGxvY2F0aW9u fAo+ID4gPiArwqDCoMKgwqDCoMKgwqBewqDCoMKgwqDCoMKgwqB8wqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoF7CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCstCj4gPiA+IC0tLS0KPiA+ID4gLS0tLS0rCj4gPiA+ICvCoMKgwqDC oMKgwqDCoHzCoMKgwqDCoMKgwqDCoHzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoAo+ID4gPiDCoHzCoMKgCj4gPiA+IMKgwqDCoHwKPiA+ID4gK8KgwqDCoMKgwqDCoMKgfMKg wqDCoMKgwqDCoMKgfMKgwqDCoMKgwqDCoMKgwqArLS0tCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzC oMKgwqDCoMKgfAo+ID4gPiArwqDCoMKgwqDCoMKgwqB8wqDCoMKgwqDCoMKgwqArLS0tLS0tLT58 IFggfC0tLS0tLS0tLS0tLS0tLS0tLS0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgdsKgwqDCoMKgwqB2Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoHzCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCstLS0KPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ3JhbnRlZAo+ID4gPiBwZXJmb3JtYW5j ZQo+ID4gPiArwqDCoGRlc2lyZWRfdGVtcGVyYXR1cmXCoMKgwqDCoMKgXgo+ID4gPiArCQkJwqDC oHwKPiA+ID4gKwkJCcKgwqB8Cj4gPiA+ICsJCcKgwqDCoMKgwqDCoGtfcG8va19wdQo+ID4gPiDC oAo+ID4gPiDCoFN1c3RhaW5hYmxlIHBvd2VyCj4gPiA+IMKgLS0tLS0tLS0tLS0tLS0tLS0KPiA+ ID4gQEAgLTczLDcgKzc0LDcgQEAgaXMgdHlwaWNhbGx5IDIwMDBtVywgd2hpbGUgb24gYSAxMCIg dGFibGV0IGlzCj4gPiA+IGFyb3VuZCA0NTAwbVcgKG1heSB2YXJ5Cj4gPiA+IMKgZGVwZW5kaW5n IG9uIHNjcmVlbiBzaXplKS4KPiA+ID4gwqAKPiA+ID4gwqBJZiB5b3UgYXJlIHVzaW5nIGRldmlj ZSB0cmVlLCBkbyBhZGQgaXQgYXMgYSBwcm9wZXJ0eSBvZiB0aGUKPiA+ID4gLXRoZXJtYWwtem9u ZS7CoMKgRm9yIGV4YW1wbGU6Cj4gPiA+ICt0aGVybWFsLXpvbmUuwqDCoEZvciBleGFtcGxlOjoK PiA+ID4gwqAKPiA+ID4gwqAJdGhlcm1hbC16b25lcyB7Cj4gPiA+IMKgCQlzb2NfdGhlcm1hbCB7 Cj4gPiA+IEBAIC04NSw3ICs4Niw3IEBAIHRoZXJtYWwtem9uZS7CoMKgRm9yIGV4YW1wbGU6Cj4g PiA+IMKgSW5zdGVhZCwgaWYgdGhlIHRoZXJtYWwgem9uZSBpcyByZWdpc3RlcmVkIGZyb20gdGhl IHBsYXRmb3JtCj4gPiA+IGNvZGUsCj4gPiA+IHBhc3MgYQo+ID4gPiDCoGB0aGVybWFsX3pvbmVf cGFyYW1zYCB0aGF0IGhhcyBhIGBzdXN0YWluYWJsZV9wb3dlcmAuwqDCoElmIG5vCj4gPiA+IMKg YHRoZXJtYWxfem9uZV9wYXJhbXNgIHdlcmUgYmVpbmcgcGFzc2VkLCB0aGVuIHNvbWV0aGluZyBs aWtlCj4gPiA+IGJlbG93Cj4gPiA+IC13aWxsIHN1ZmZpY2U6Cj4gPiA+ICt3aWxsIHN1ZmZpY2U6 Ogo+ID4gPiDCoAo+ID4gPiDCoAlzdGF0aWMgY29uc3Qgc3RydWN0IHRoZXJtYWxfem9uZV9wYXJh bXMgdHpfcGFyYW1zID0gewo+ID4gPiDCoAkJLnN1c3RhaW5hYmxlX3Bvd2VyID0gMzUwMCwKPiA+ ID4gQEAgLTExMiwxOCArMTEzLDE4IEBAIGF2YWlsYWJsZSBjYXBhY2l0eSBhdCBhIGxvdwo+ID4g PiB0ZW1wZXJhdHVyZS7CoMKgT24KPiA+ID4gdGhlIG90aGVyIGhhbmQsIGEgaGlnaAo+ID4gPiDC oHZhbHVlIG9mIGBrX3B1YCB3aWxsIHJlc3VsdCBpbiB0aGUgZ292ZXJub3IgZ3JhbnRpbmcgdmVy eSBoaWdoCj4gPiA+IHBvd2VyCj4gPiA+IMKgd2hpbGUgdGVtcGVyYXR1cmUgaXMgbG93LCBhbmQg bWF5IGxlYWQgdG8gdGVtcGVyYXR1cmUKPiA+ID4gb3ZlcnNob290aW5nLgo+ID4gPiDCoAo+ID4g PiAtVGhlIGRlZmF1bHQgdmFsdWUgZm9yIGBrX3B1YCBpczoKPiA+ID4gK1RoZSBkZWZhdWx0IHZh bHVlIGZvciBga19wdWAgaXM6Ogo+ID4gPiDCoAo+ID4gPiDCoMKgwqDCoMKgMiAqIHN1c3RhaW5h YmxlX3Bvd2VyIC8gKGRlc2lyZWRfdGVtcGVyYXR1cmUgLQo+ID4gPiBzd2l0Y2hfb25fdGVtcCkK PiA+ID4gwqAKPiA+ID4gwqBUaGlzIG1lYW5zIHRoYXQgYXQgYHN3aXRjaF9vbl90ZW1wYCB0aGUg b3V0cHV0IG9mIHRoZQo+ID4gPiBjb250cm9sbGVyJ3MKPiA+ID4gwqBwcm9wb3J0aW9uYWwgdGVy bSB3aWxsIGJlIDIgKiBgc3VzdGFpbmFibGVfcG93ZXJgLsKgwqBUaGUgZGVmYXVsdAo+ID4gPiB2 YWx1ZQo+ID4gPiAtZm9yIGBrX3BvYCBpczoKPiA+ID4gK2ZvciBga19wb2AgaXM6Ogo+ID4gPiDC oAo+ID4gPiDCoMKgwqDCoMKgc3VzdGFpbmFibGVfcG93ZXIgLyAoZGVzaXJlZF90ZW1wZXJhdHVy ZSAtIHN3aXRjaF9vbl90ZW1wKQo+ID4gPiDCoAo+ID4gPiDCoEZvY3VzaW5nIG9uIHRoZSBwcm9w b3J0aW9uYWwgYW5kIGZlZWQgZm9yd2FyZCB2YWx1ZXMgb2YgdGhlIFBJRAo+ID4gPiAtY29udHJv bGxlciBlcXVhdGlvbiB3ZSBoYXZlOgo+ID4gPiArY29udHJvbGxlciBlcXVhdGlvbiB3ZSBoYXZl OjoKPiA+ID4gwqAKPiA+ID4gwqDCoMKgwqDCoFBfbWF4ID0ga19wICogZSArIHN1c3RhaW5hYmxl X3Bvd2VyCj4gPiA+IMKgCj4gPiA+IEBAIC0xMzQsMjEgKzEzNSwyMyBAQCBpcyB0aGUgZGVzaXJl ZCBvbmUsIHRoZW4gdGhlIHByb3BvcnRpb25hbAo+ID4gPiBjb21wb25lbnQgaXMgemVybyBhbmQK PiA+ID4gwqB0aGVybWFsIGVxdWlsaWJyaXVtIHVuZGVyIGNvbnN0YW50IGxvYWQuwqDCoGBzdXN0 YWluYWJsZV9wb3dlcmAgaXMKPiA+ID4gb25seQo+ID4gPiDCoGFuIGVzdGltYXRlLCB3aGljaCBp cyB0aGUgcmVhc29uIGZvciBjbG9zZWQtbG9vcCBjb250cm9sIHN1Y2ggYXMKPiA+ID4gdGhpcy4K PiA+ID4gwqAKPiA+ID4gLUV4cGFuZGluZyBga19wdWAgd2UgZ2V0Ogo+ID4gPiArRXhwYW5kaW5n IGBrX3B1YCB3ZSBnZXQ6Ogo+ID4gPiArCj4gPiA+IMKgwqDCoMKgwqBQX21heCA9IDIgKiBzdXN0 YWluYWJsZV9wb3dlciAqIChUX3NldCAtIFQpIC8gKFRfc2V0IC0gVF9vbikKPiA+ID4gKwo+ID4g PiAtwqDCoMKgwqDCoMKgwqDCoHN1c3RhaW5hYmxlX3Bvd2VyCj4gPiA+ICsJc3VzdGFpbmFibGVf cG93ZXIKPiA+ID4gwqAKPiA+ID4gLXdoZXJlCj4gPiA+IC3CoMKgwqDCoFRfc2V0IGlzIHRoZSBk ZXNpcmVkIHRlbXBlcmF0dXJlCj4gPiA+IC3CoMKgwqDCoFQgaXMgdGhlIGN1cnJlbnQgdGVtcGVy YXR1cmUKPiA+ID4gLcKgwqDCoMKgVF9vbiBpcyB0aGUgc3dpdGNoIG9uIHRlbXBlcmF0dXJlCj4g PiA+ICt3aGVyZToKPiA+ID4gKwo+ID4gPiArwqDCoMKgwqAtIFRfc2V0IGlzIHRoZSBkZXNpcmVk IHRlbXBlcmF0dXJlCj4gPiA+ICvCoMKgwqDCoC0gVCBpcyB0aGUgY3VycmVudCB0ZW1wZXJhdHVy ZQo+ID4gPiArwqDCoMKgwqAtIFRfb24gaXMgdGhlIHN3aXRjaCBvbiB0ZW1wZXJhdHVyZQo+ID4g PiDCoAo+ID4gPiDCoFdoZW4gdGhlIGN1cnJlbnQgdGVtcGVyYXR1cmUgaXMgdGhlIHN3aXRjaF9v biB0ZW1wZXJhdHVyZSwgdGhlCj4gPiA+IGFib3ZlCj4gPiA+IC1mb3JtdWxhIGJlY29tZXM6Cj4g PiA+ICtmb3JtdWxhIGJlY29tZXM6Ogo+ID4gPiDCoAo+ID4gPiDCoMKgwqDCoMKgUF9tYXggPSAy ICogc3VzdGFpbmFibGVfcG93ZXIgKiAoVF9zZXQgLSBUX29uKSAvIChUX3NldCAtCj4gPiA+IFRf b24pCj4gPiA+ICsKPiA+ID4gLcKgwqDCoMKgwqDCoMKgwqBzdXN0YWluYWJsZV9wb3dlciA9IDIg KiBzdXN0YWluYWJsZV9wb3dlciArCj4gPiA+IHN1c3RhaW5hYmxlX3Bvd2VyID0KPiA+ID4gLcKg wqDCoMKgwqDCoMKgwqAzICogc3VzdGFpbmFibGVfcG93ZXIKPiA+ID4gKwlzdXN0YWluYWJsZV9w b3dlciA9IDIgKiBzdXN0YWluYWJsZV9wb3dlciArCj4gPiA+IHN1c3RhaW5hYmxlX3Bvd2VyID0K PiA+ID4gKwkzICogc3VzdGFpbmFibGVfcG93ZXIKPiA+ID4gwqAKPiA+ID4gwqBUaGVyZWZvcmUs IHRoZSBwcm9wb3J0aW9uYWwgdGVybSBhbG9uZSBsaW5lYXJseSBkZWNyZWFzZXMgcG93ZXIKPiA+ ID4gZnJvbQo+ID4gPiDCoDMgKiBgc3VzdGFpbmFibGVfcG93ZXJgIHRvIGBzdXN0YWluYWJsZV9w b3dlcmAgYXMgdGhlCj4gPiA+IHRlbXBlcmF0dXJlCj4gPiA+IEBAIC0xNzgsMTEgKzE4MSwxOCBA QCBDb29saW5nIGRldmljZSBwb3dlciBBUEkKPiA+ID4gwqBDb29saW5nIGRldmljZXMgY29udHJv bGxlZCBieSB0aGlzIGdvdmVybm9yIG11c3Qgc3VwcGx5IHRoZQo+ID4gPiBhZGRpdGlvbmFsCj4g PiA+IMKgInBvd2VyIiBBUEkgaW4gdGhlaXIgYGNvb2xpbmdfZGV2aWNlX29wc2AuwqDCoEl0IGNv bnNpc3RzIG9uIHRocmVlCj4gPiA+IG9wczoKPiA+ID4gwqAKPiA+ID4gLTEuIGludCBnZXRfcmVx dWVzdGVkX3Bvd2VyKHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICpjZGV2LAo+ID4gPiAt CXN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICp0eiwgdTMyICpwb3dlcik7Cj4gPiA+IC1AY2Rl djogVGhlIGBzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZWAgcG9pbnRlcgo+ID4gPiAtQHR6 OiB0aGVybWFsIHpvbmUgaW4gd2hpY2ggd2UgYXJlIGN1cnJlbnRseSBvcGVyYXRpbmcKPiA+ID4g LUBwb3dlcjogcG9pbnRlciBpbiB3aGljaCB0byBzdG9yZSB0aGUgY2FsY3VsYXRlZCBwb3dlcgo+ ID4gPiArMS4gOjoKPiA+ID4gKwo+ID4gPiArwqDCoMKgwqBpbnQgZ2V0X3JlcXVlc3RlZF9wb3dl cihzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqY2RldiwKPiA+ID4gKwkJCcKgwqDCoMKg c3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKnR6LCB1MzIKPiA+ID4gKnBvd2VyKTsKPiA+ID4g Kwo+ID4gPiArCj4gPiA+ICtAY2RldjoKPiA+ID4gKwlUaGUgYHN0cnVjdCB0aGVybWFsX2Nvb2xp bmdfZGV2aWNlYCBwb2ludGVyCj4gPiA+ICtAdHo6Cj4gPiA+ICsJdGhlcm1hbCB6b25lIGluIHdo aWNoIHdlIGFyZSBjdXJyZW50bHkgb3BlcmF0aW5nCj4gPiA+ICtAcG93ZXI6Cj4gPiA+ICsJcG9p bnRlciBpbiB3aGljaCB0byBzdG9yZSB0aGUgY2FsY3VsYXRlZCBwb3dlcgo+ID4gPiDCoAo+ID4g PiDCoGBnZXRfcmVxdWVzdGVkX3Bvd2VyKClgIGNhbGN1bGF0ZXMgdGhlIHBvd2VyIHJlcXVlc3Rl ZCBieSB0aGUKPiA+ID4gZGV2aWNlCj4gPiA+IMKgaW4gbWlsbGl3YXR0cyBhbmQgc3RvcmVzIGl0 IGluIEBwb3dlciAuwqDCoEl0IHNob3VsZCByZXR1cm4gMCBvbgo+ID4gPiBAQCAtMTkwLDIzICsy MDAsMzcgQEAgc3VjY2VzcywgLUUqIG9uIGZhaWx1cmUuwqDCoFRoaXMgaXMgY3VycmVudGx5Cj4g PiA+IHVzZWQgYnkgdGhlIHBvd2VyCj4gPiA+IMKgYWxsb2NhdG9yIGdvdmVybm9yIHRvIGNhbGN1 bGF0ZSBob3cgbXVjaCBwb3dlciB0byBnaXZlIHRvIGVhY2gKPiA+ID4gY29vbGluZwo+ID4gPiDC oGRldmljZS4KPiA+ID4gwqAKPiA+ID4gLTIuIGludCBzdGF0ZTJwb3dlcihzdHJ1Y3QgdGhlcm1h bF9jb29saW5nX2RldmljZSAqY2Rldiwgc3RydWN0Cj4gPiA+IC3CoMKgwqDCoMKgwqDCoMKgdGhl cm1hbF96b25lX2RldmljZSAqdHosIHVuc2lnbmVkIGxvbmcgc3RhdGUsIHUzMgo+ID4gPiAqcG93 ZXIpOwo+ID4gPiAtQGNkZXY6IFRoZSBgc3RydWN0IHRoZXJtYWxfY29vbGluZ19kZXZpY2VgIHBv aW50ZXIKPiA+ID4gLUB0ejogdGhlcm1hbCB6b25lIGluIHdoaWNoIHdlIGFyZSBjdXJyZW50bHkg b3BlcmF0aW5nCj4gPiA+IC1Ac3RhdGU6IEEgY29vbGluZyBkZXZpY2Ugc3RhdGUKPiA+ID4gLUBw b3dlcjogcG9pbnRlciBpbiB3aGljaCB0byBzdG9yZSB0aGUgZXF1aXZhbGVudCBwb3dlcgo+ID4g PiArMi4gOjoKPiA+ID4gKwo+ID4gPiArCWludCBzdGF0ZTJwb3dlcihzdHJ1Y3QgdGhlcm1hbF9j b29saW5nX2RldmljZSAqY2RldiwKPiA+ID4gc3RydWN0Cj4gPiA+ICsJCQl0aGVybWFsX3pvbmVf ZGV2aWNlICp0eiwgdW5zaWduZWQgbG9uZwo+ID4gPiBzdGF0ZSwKPiA+ID4gKwkJCXUzMiAqcG93 ZXIpOwo+ID4gPiArCj4gPiA+ICtAY2RldjoKPiA+ID4gKwlUaGUgYHN0cnVjdCB0aGVybWFsX2Nv b2xpbmdfZGV2aWNlYCBwb2ludGVyCj4gPiA+ICtAdHo6Cj4gPiA+ICsJdGhlcm1hbCB6b25lIGlu IHdoaWNoIHdlIGFyZSBjdXJyZW50bHkgb3BlcmF0aW5nCj4gPiA+ICtAc3RhdGU6Cj4gPiA+ICsJ QSBjb29saW5nIGRldmljZSBzdGF0ZQo+ID4gPiArQHBvd2VyOgo+ID4gPiArCXBvaW50ZXIgaW4g d2hpY2ggdG8gc3RvcmUgdGhlIGVxdWl2YWxlbnQgcG93ZXIKPiA+ID4gwqAKPiA+ID4gwqBDb252 ZXJ0IGNvb2xpbmcgZGV2aWNlIHN0YXRlIEBzdGF0ZSBpbnRvIHBvd2VyIGNvbnN1bXB0aW9uIGlu Cj4gPiA+IMKgbWlsbGl3YXR0cyBhbmQgc3RvcmUgaXQgaW4gQHBvd2VyLsKgwqBJdCBzaG91bGQg cmV0dXJuIDAgb24KPiA+ID4gc3VjY2VzcywKPiA+ID4gLUUqCj4gPiA+IMKgb24gZmFpbHVyZS7C oMKgVGhpcyBpcyBjdXJyZW50bHkgdXNlZCBieSB0aGVybWFsIGNvcmUgdG8gY2FsY3VsYXRlCj4g PiA+IHRoZQo+ID4gPiDCoG1heGltdW0gcG93ZXIgdGhhdCBhbiBhY3RvciBjYW4gY29uc3VtZS4K PiA+ID4gwqAKPiA+ID4gLTMuIGludCBwb3dlcjJzdGF0ZShzdHJ1Y3QgdGhlcm1hbF9jb29saW5n X2RldmljZSAqY2RldiwgdTMyCj4gPiA+IHBvd2VyLAo+ID4gPiAtCXVuc2lnbmVkIGxvbmcgKnN0 YXRlKTsKPiA+ID4gLUBjZGV2OiBUaGUgYHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlYCBw b2ludGVyCj4gPiA+IC1AcG93ZXI6IHBvd2VyIGluIG1pbGxpd2F0dHMKPiA+ID4gLUBzdGF0ZTog cG9pbnRlciBpbiB3aGljaCB0byBzdG9yZSB0aGUgcmVzdWx0aW5nIHN0YXRlCj4gPiA+ICszLiA6 Ogo+ID4gPiArCj4gPiA+ICsJaW50IHBvd2VyMnN0YXRlKHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdf ZGV2aWNlICpjZGV2LCB1MzIKPiA+ID4gcG93ZXIsCj4gPiA+ICsJCQl1bnNpZ25lZCBsb25nICpz dGF0ZSk7Cj4gPiA+ICsKPiA+ID4gK0BjZGV2Ogo+ID4gPiArCVRoZSBgc3RydWN0IHRoZXJtYWxf Y29vbGluZ19kZXZpY2VgIHBvaW50ZXIKPiA+ID4gK0Bwb3dlcjoKPiA+ID4gKwlwb3dlciBpbiBt aWxsaXdhdHRzCj4gPiA+ICtAc3RhdGU6Cj4gPiA+ICsJcG9pbnRlciBpbiB3aGljaCB0byBzdG9y ZSB0aGUgcmVzdWx0aW5nIHN0YXRlCj4gPiA+IMKgCj4gPiA+IMKgQ2FsY3VsYXRlIGEgY29vbGlu ZyBkZXZpY2Ugc3RhdGUgdGhhdCB3b3VsZCBtYWtlIHRoZSBkZXZpY2UKPiA+ID4gY29uc3VtZQo+ ID4gPiBhdAo+ID4gPiDCoG1vc3QgQHBvd2VyIG1XIGFuZCBzdG9yZSBpdCBpbiBAc3RhdGUuwqDC oEl0IHNob3VsZCByZXR1cm4gMCBvbgo+ID4gPiBzdWNjZXNzLAo+ID4gPiBkaWZmIC0tZ2l0IGEv RG9jdW1lbnRhdGlvbi90aGVybWFsL3N5c2ZzLWFwaS50eHQKPiA+ID4gYi9Eb2N1bWVudGF0aW9u L3RoZXJtYWwvc3lzZnMtYXBpLnJzdAo+ID4gPiBzaW1pbGFyaXR5IGluZGV4IDY2JQo+ID4gPiBy ZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3RoZXJtYWwvc3lzZnMtYXBpLnR4dAo+ID4gPiByZW5h bWUgdG8gRG9jdW1lbnRhdGlvbi90aGVybWFsL3N5c2ZzLWFwaS5yc3QKPiA+ID4gaW5kZXggYzNm YTUwMGRmOTJjLi5lNDkzMDc2MWQzZTUgMTAwNjQ0Cj4gPiA+IC0tLSBhL0RvY3VtZW50YXRpb24v dGhlcm1hbC9zeXNmcy1hcGkudHh0Cj4gPiA+ICsrKyBiL0RvY3VtZW50YXRpb24vdGhlcm1hbC9z eXNmcy1hcGkucnN0Cj4gPiA+IEBAIC0xLDMgKzEsNCBAQAo+ID4gPiArPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KPiA+ID4gwqBHZW5lcmljIFRoZXJtYWwgU3lzZnMgZHJpdmVy IEhvdyBUbwo+ID4gPiDCoD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cj4gPiA+ IMKgCj4gPiA+IEBAIC05LDYgKzEwLDcgQEAgQ29weXJpZ2h0IChjKcKgwqAyMDA4IEludGVsIENv cnBvcmF0aW9uCj4gPiA+IMKgCj4gPiA+IMKgCj4gPiA+IMKgMC4gSW50cm9kdWN0aW9uCj4gPiA+ ICs9PT09PT09PT09PT09PT0KPiA+ID4gwqAKPiA+ID4gwqBUaGUgZ2VuZXJpYyB0aGVybWFsIHN5 c2ZzIHByb3ZpZGVzIGEgc2V0IG9mIGludGVyZmFjZXMgZm9yCj4gPiA+IHRoZXJtYWwKPiA+ID4g em9uZQo+ID4gPiDCoGRldmljZXMgKHNlbnNvcnMpIGFuZCB0aGVybWFsIGNvb2xpbmcgZGV2aWNl cyAoZmFuLAo+ID4gPiBwcm9jZXNzb3IuLi4pIHRvCj4gPiA+IHJlZ2lzdGVyCj4gPiA+IEBAIC0y NSw1OSArMjcsOTAgQEAgQW4gaW50ZWxsaWdlbnQgdGhlcm1hbCBtYW5hZ2VtZW50IGFwcGxpY2F0 aW9uCj4gPiA+IGNhbgo+ID4gPiBtYWtlIGRlY2lzaW9ucyBiYXNlZCBvbgo+ID4gPiDCoGlucHV0 cyBmcm9tIHRoZXJtYWwgem9uZSBhdHRyaWJ1dGVzICh0aGUgY3VycmVudCB0ZW1wZXJhdHVyZSBh bmQKPiA+ID4gdHJpcCBwb2ludAo+ID4gPiDCoHRlbXBlcmF0dXJlKSBhbmQgdGhyb3R0bGUgYXBw cm9wcmlhdGUgZGV2aWNlcy4KPiA+ID4gwqAKPiA+ID4gLVswLSpdCWRlbm90ZXMgYW55IHBvc2l0 aXZlIG51bWJlciBzdGFydGluZyBmcm9tIDAKPiA+ID4gLVsxLSpdCWRlbm90ZXMgYW55IHBvc2l0 aXZlIG51bWJlciBzdGFydGluZyBmcm9tIDEKPiA+ID4gKy0gYFswLSpdYAlkZW5vdGVzIGFueSBw b3NpdGl2ZSBudW1iZXIgc3RhcnRpbmcgZnJvbSAwCj4gPiA+ICstIGBbMS0qXWAJZGVub3RlcyBh bnkgcG9zaXRpdmUgbnVtYmVyIHN0YXJ0aW5nIGZyb20gMQo+ID4gPiDCoAo+ID4gPiDCoDEuIHRo ZXJtYWwgc3lzZnMgZHJpdmVyIGludGVyZmFjZSBmdW5jdGlvbnMKPiA+ID4gKz09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KPiA+ID4gwqAKPiA+ID4gwqAxLjEgdGhl cm1hbCB6b25lIGRldmljZSBpbnRlcmZhY2UKPiA+ID4gLTEuMS4xIHN0cnVjdCB0aGVybWFsX3pv bmVfZGV2aWNlCj4gPiA+ICp0aGVybWFsX3pvbmVfZGV2aWNlX3JlZ2lzdGVyKGNoYXIKPiA+ID4g KnR5cGUsCj4gPiA+IC0JCWludCB0cmlwcywgaW50IG1hc2ssIHZvaWQgKmRldmRhdGEsCj4gPiA+ IC0JCXN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlX29wcyAqb3BzLAo+ID4gPiAtCQljb25zdCBz dHJ1Y3QgdGhlcm1hbF96b25lX3BhcmFtcyAqdHpwLAo+ID4gPiAtCQlpbnQgcGFzc2l2ZV9kZWxh eSwgaW50IHBvbGxpbmdfZGVsYXkpKQo+ID4gPiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCj4gPiA+ICsKPiA+ID4gK8KgwqDCoMKgOjoKPiA+ID4gKwo+ID4gPiArCXN0cnVjdCB0 aGVybWFsX3pvbmVfZGV2aWNlCj4gPiA+ICsJKnRoZXJtYWxfem9uZV9kZXZpY2VfcmVnaXN0ZXIo Y2hhciAqdHlwZSwKPiA+ID4gKwkJCQnCoMKgwqDCoMKgwqBpbnQgdHJpcHMsIGludCBtYXNrLCB2 b2lkCj4gPiA+ICpkZXZkYXRhLAo+ID4gPiArCQkJCcKgwqDCoMKgwqDCoHN0cnVjdAo+ID4gPiB0 aGVybWFsX3pvbmVfZGV2aWNlX29wcwo+ID4gPiAqb3BzLAo+ID4gPiArCQkJCcKgwqDCoMKgwqDC oGNvbnN0IHN0cnVjdAo+ID4gPiB0aGVybWFsX3pvbmVfcGFyYW1zICp0enAsCj4gPiA+ICsJCQkJ wqDCoMKgwqDCoMKgaW50IHBhc3NpdmVfZGVsYXksIGludAo+ID4gPiBwb2xsaW5nX2RlbGF5KSkK PiA+ID4gwqAKPiA+ID4gwqDCoMKgwqDCoFRoaXMgaW50ZXJmYWNlIGZ1bmN0aW9uIGFkZHMgYSBu ZXcgdGhlcm1hbCB6b25lIGRldmljZQo+ID4gPiAoc2Vuc29yKQo+ID4gPiB0bwo+ID4gPiAtwqDC oMKgwqAvc3lzL2NsYXNzL3RoZXJtYWwgZm9sZGVyIGFzIHRoZXJtYWxfem9uZVswLSpdLiBJdCB0 cmllcyB0bwo+ID4gPiBiaW5kCj4gPiA+IGFsbCB0aGUKPiA+ID4gK8KgwqDCoMKgL3N5cy9jbGFz cy90aGVybWFsIGZvbGRlciBhcyBgdGhlcm1hbF96b25lWzAtKl1gLiBJdCB0cmllcwo+ID4gPiB0 bwo+ID4gPiBiaW5kIGFsbCB0aGUKPiA+ID4gwqDCoMKgwqDCoHRoZXJtYWwgY29vbGluZyBkZXZp Y2VzIHJlZ2lzdGVyZWQgYXQgdGhlIHNhbWUgdGltZS4KPiA+ID4gwqAKPiA+ID4gLcKgwqDCoMKg dHlwZTogdGhlIHRoZXJtYWwgem9uZSB0eXBlLgo+ID4gPiAtwqDCoMKgwqB0cmlwczogdGhlIHRv dGFsIG51bWJlciBvZiB0cmlwIHBvaW50cyB0aGlzIHRoZXJtYWwgem9uZQo+ID4gPiBzdXBwb3J0 cy4KPiA+ID4gLcKgwqDCoMKgbWFzazogQml0IHN0cmluZzogSWYgJ24ndGggYml0IGlzIHNldCwg dGhlbiB0cmlwIHBvaW50ICduJwo+ID4gPiBpcwo+ID4gPiB3cml0ZWFibGUuCj4gPiA+IC3CoMKg wqDCoGRldmRhdGE6IGRldmljZSBwcml2YXRlIGRhdGEKPiA+ID4gLcKgwqDCoMKgb3BzOiB0aGVy bWFsIHpvbmUgZGV2aWNlIGNhbGwtYmFja3MuCj4gPiA+IC0JLmJpbmQ6IGJpbmQgdGhlIHRoZXJt YWwgem9uZSBkZXZpY2Ugd2l0aCBhIHRoZXJtYWwKPiA+ID4gY29vbGluZwo+ID4gPiBkZXZpY2Uu Cj4gPiA+IC0JLnVuYmluZDogdW5iaW5kIHRoZSB0aGVybWFsIHpvbmUgZGV2aWNlIHdpdGggYSB0 aGVybWFsCj4gPiA+IGNvb2xpbmcgZGV2aWNlLgo+ID4gPiAtCS5nZXRfdGVtcDogZ2V0IHRoZSBj dXJyZW50IHRlbXBlcmF0dXJlIG9mIHRoZSB0aGVybWFsCj4gPiA+IHpvbmUuCj4gPiA+IC0JLnNl dF90cmlwczogc2V0IHRoZSB0cmlwIHBvaW50cyB3aW5kb3cuIFdoZW5ldmVyIHRoZQo+ID4gPiBj dXJyZW50Cj4gPiA+IHRlbXBlcmF0dXJlCj4gPiA+ICvCoMKgwqDCoHR5cGU6Cj4gPiA+ICsJdGhl IHRoZXJtYWwgem9uZSB0eXBlLgo+ID4gPiArwqDCoMKgwqB0cmlwczoKPiA+ID4gKwl0aGUgdG90 YWwgbnVtYmVyIG9mIHRyaXAgcG9pbnRzIHRoaXMgdGhlcm1hbCB6b25lCj4gPiA+IHN1cHBvcnRz Lgo+ID4gPiArwqDCoMKgwqBtYXNrOgo+ID4gPiArCUJpdCBzdHJpbmc6IElmICduJ3RoIGJpdCBp cyBzZXQsIHRoZW4gdHJpcCBwb2ludCAnbicgaXMKPiA+ID4gd3JpdGVhYmxlLgo+ID4gPiArwqDC oMKgwqBkZXZkYXRhOgo+ID4gPiArCWRldmljZSBwcml2YXRlIGRhdGEKPiA+ID4gK8KgwqDCoMKg b3BzOgo+ID4gPiArCXRoZXJtYWwgem9uZSBkZXZpY2UgY2FsbC1iYWNrcy4KPiA+ID4gKwo+ID4g PiArCS5iaW5kOgo+ID4gPiArCQliaW5kIHRoZSB0aGVybWFsIHpvbmUgZGV2aWNlIHdpdGggYSB0 aGVybWFsCj4gPiA+IGNvb2xpbmcKPiA+ID4gZGV2aWNlLgo+ID4gPiArCS51bmJpbmQ6Cj4gPiA+ ICsJCXVuYmluZCB0aGUgdGhlcm1hbCB6b25lIGRldmljZSB3aXRoIGEgdGhlcm1hbAo+ID4gPiBj b29saW5nIGRldmljZS4KPiA+ID4gKwkuZ2V0X3RlbXA6Cj4gPiA+ICsJCWdldCB0aGUgY3VycmVu dCB0ZW1wZXJhdHVyZSBvZiB0aGUgdGhlcm1hbCB6b25lLgo+ID4gPiArCS5zZXRfdHJpcHM6Cj4g PiA+ICsJCcKgwqDCoMKgc2V0IHRoZSB0cmlwIHBvaW50cyB3aW5kb3cuIFdoZW5ldmVyIHRoZQo+ ID4gPiBjdXJyZW50Cj4gPiA+IHRlbXBlcmF0dXJlCj4gPiA+IMKgCQnCoMKgwqDCoGlzIHVwZGF0 ZWQsIHRoZSB0cmlwIHBvaW50cyBpbW1lZGlhdGVseQo+ID4gPiBiZWxvdwo+ID4gPiBhbmQgYWJv dmUgdGhlCj4gPiA+IMKgCQnCoMKgwqDCoGN1cnJlbnQgdGVtcGVyYXR1cmUgYXJlIGZvdW5kLgo+ ID4gPiAtCS5nZXRfbW9kZTogZ2V0IHRoZSBjdXJyZW50IG1vZGUgKGVuYWJsZWQvZGlzYWJsZWQp IG9mCj4gPiA+IHRoZQo+ID4gPiB0aGVybWFsIHpvbmUuCj4gPiA+IC0JwqDCoMKgwqAtICJlbmFi bGVkIiBtZWFucyB0aGUga2VybmVsIHRoZXJtYWwgbWFuYWdlbWVudCBpcwo+ID4gPiBlbmFibGVk Lgo+ID4gPiAtCcKgwqDCoMKgLSAiZGlzYWJsZWQiIHdpbGwgcHJldmVudCBrZXJuZWwgdGhlcm1h bCBkcml2ZXIKPiA+ID4gYWN0aW9uCj4gPiA+IHVwb24gdHJpcCBwb2ludHMKPiA+ID4gLQnCoMKg wqDCoMKgwqBzbyB0aGF0IHVzZXIgYXBwbGljYXRpb25zIGNhbiB0YWtlIGNoYXJnZSBvZgo+ID4g PiB0aGVybWFsCj4gPiA+IG1hbmFnZW1lbnQuCj4gPiA+IC0JLnNldF9tb2RlOiBzZXQgdGhlIG1v ZGUgKGVuYWJsZWQvZGlzYWJsZWQpIG9mIHRoZQo+ID4gPiB0aGVybWFsCj4gPiA+IHpvbmUuCj4g PiA+IC0JLmdldF90cmlwX3R5cGU6IGdldCB0aGUgdHlwZSBvZiBjZXJ0YWluIHRyaXAgcG9pbnQu Cj4gPiA+IC0JLmdldF90cmlwX3RlbXA6IGdldCB0aGUgdGVtcGVyYXR1cmUgYWJvdmUgd2hpY2gg dGhlCj4gPiA+IGNlcnRhaW4KPiA+ID4gdHJpcCBwb2ludAo+ID4gPiArCS5nZXRfbW9kZToKPiA+ ID4gKwkJwqDCoMKgZ2V0IHRoZSBjdXJyZW50IG1vZGUgKGVuYWJsZWQvZGlzYWJsZWQpIG9mCj4g PiA+IHRoZQo+ID4gPiB0aGVybWFsIHpvbmUuCj4gPiA+ICsKPiA+ID4gKwkJCS0gImVuYWJsZWQi IG1lYW5zIHRoZSBrZXJuZWwgdGhlcm1hbAo+ID4gPiBtYW5hZ2VtZW50IGlzCj4gPiA+ICsJCQnC oMKgZW5hYmxlZC4KPiA+ID4gKwkJCS0gImRpc2FibGVkIiB3aWxsIHByZXZlbnQga2VybmVsIHRo ZXJtYWwKPiA+ID4gZHJpdmVyIGFjdGlvbgo+ID4gPiArCQkJwqDCoHVwb24gdHJpcCBwb2ludHMg c28gdGhhdCB1c2VyCj4gPiA+IGFwcGxpY2F0aW9ucwo+ID4gPiBjYW4gdGFrZQo+ID4gPiArCQkJ wqDCoGNoYXJnZSBvZiB0aGVybWFsIG1hbmFnZW1lbnQuCj4gPiA+ICsJLnNldF9tb2RlOgo+ID4g PiArCQlzZXQgdGhlIG1vZGUgKGVuYWJsZWQvZGlzYWJsZWQpIG9mIHRoZSB0aGVybWFsCj4gPiA+ IHpvbmUuCj4gPiA+ICsJLmdldF90cmlwX3R5cGU6Cj4gPiA+ICsJCWdldCB0aGUgdHlwZSBvZiBj ZXJ0YWluIHRyaXAgcG9pbnQuCj4gPiA+ICsJLmdldF90cmlwX3RlbXA6Cj4gPiA+ICsJCQlnZXQg dGhlIHRlbXBlcmF0dXJlIGFib3ZlIHdoaWNoIHRoZQo+ID4gPiBjZXJ0YWluCj4gPiA+IHRyaXAg cG9pbnQKPiA+ID4gwqAJCQl3aWxsIGJlIGZpcmVkLgo+ID4gPiAtCS5zZXRfZW11bF90ZW1wOiBz ZXQgdGhlIGVtdWxhdGlvbiB0ZW1wZXJhdHVyZSB3aGljaAo+ID4gPiBoZWxwcyBpbgo+ID4gPiBk ZWJ1Z2dpbmcKPiA+ID4gKwkuc2V0X2VtdWxfdGVtcDoKPiA+ID4gKwkJCXNldCB0aGUgZW11bGF0 aW9uIHRlbXBlcmF0dXJlIHdoaWNoCj4gPiA+IGhlbHBzIGluCj4gPiA+IGRlYnVnZ2luZwo+ID4g PiDCoAkJCWRpZmZlcmVudCB0aHJlc2hvbGQgdGVtcGVyYXR1cmUgcG9pbnRzLgo+ID4gPiAtwqDC oMKgwqB0enA6IHRoZXJtYWwgem9uZSBwbGF0Zm9ybSBwYXJhbWV0ZXJzLgo+ID4gPiAtwqDCoMKg wqBwYXNzaXZlX2RlbGF5OiBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgYmV0d2VlbiBw b2xscwo+ID4gPiB3aGVuCj4gPiA+ICvCoMKgwqDCoHR6cDoKPiA+ID4gKwl0aGVybWFsIHpvbmUg cGxhdGZvcm0gcGFyYW1ldGVycy4KPiA+ID4gK8KgwqDCoMKgcGFzc2l2ZV9kZWxheToKPiA+ID4g KwludW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgYmV0d2VlbiBwb2xscyB3aGVuCj4gPiA+ IMKgCXBlcmZvcm1pbmcgcGFzc2l2ZSBjb29saW5nLgo+ID4gPiAtwqDCoMKgwqBwb2xsaW5nX2Rl bGF5OiBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgYmV0d2VlbiBwb2xscwo+ID4gPiB3 aGVuCj4gPiA+IGNoZWNraW5nCj4gPiA+ICvCoMKgwqDCoHBvbGxpbmdfZGVsYXk6Cj4gPiA+ICsJ bnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IGJldHdlZW4gcG9sbHMgd2hlbgo+ID4gPiBj aGVja2luZwo+ID4gPiDCoAl3aGV0aGVyIHRyaXAgcG9pbnRzIGhhdmUgYmVlbiBjcm9zc2VkICgw IGZvciBpbnRlcnJ1cHQKPiA+ID4gZHJpdmVuIHN5c3RlbXMpLgo+ID4gPiDCoAo+ID4gPiArwqDC oMKgwqA6Ogo+ID4gPiDCoAo+ID4gPiAtMS4xLjIgdm9pZCB0aGVybWFsX3pvbmVfZGV2aWNlX3Vu cmVnaXN0ZXIoc3RydWN0Cj4gPiA+IHRoZXJtYWxfem9uZV9kZXZpY2UKPiA+ID4gKnR6KQo+ID4g PiArCXZvaWQgdGhlcm1hbF96b25lX2RldmljZV91bnJlZ2lzdGVyKHN0cnVjdAo+ID4gPiB0aGVy bWFsX3pvbmVfZGV2aWNlICp0eikKPiA+ID4gwqAKPiA+ID4gwqDCoMKgwqDCoFRoaXMgaW50ZXJm YWNlIGZ1bmN0aW9uIHJlbW92ZXMgdGhlIHRoZXJtYWwgem9uZSBkZXZpY2UuCj4gPiA+IMKgwqDC oMKgwqBJdCBkZWxldGVzIHRoZSBjb3JyZXNwb25kaW5nIGVudHJ5IGZyb20gL3N5cy9jbGFzcy90 aGVybWFsCj4gPiA+IGZvbGRlciBhbmQKPiA+ID4gwqDCoMKgwqDCoHVuYmluZHMgYWxsIHRoZSB0 aGVybWFsIGNvb2xpbmcgZGV2aWNlcyBpdCB1c2VzLgo+ID4gPiDCoAo+ID4gPiAtMS4xLjMgc3Ry dWN0IHRoZXJtYWxfem9uZV9kZXZpY2UKPiA+ID4gKnRoZXJtYWxfem9uZV9vZl9zZW5zb3JfcmVn aXN0ZXIoCj4gPiA+IC0JCXN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNlbnNvcl9pZCwgdm9pZCAq ZGF0YSwKPiA+ID4gLQkJY29uc3Qgc3RydWN0IHRoZXJtYWxfem9uZV9vZl9kZXZpY2Vfb3BzICpv cHMpCj4gPiA+ICsJOjoKPiA+ID4gKwo+ID4gPiArCcKgwqDCoHN0cnVjdCB0aGVybWFsX3pvbmVf ZGV2aWNlCj4gPiA+ICsJwqDCoMKgKnRoZXJtYWxfem9uZV9vZl9zZW5zb3JfcmVnaXN0ZXIoc3Ry dWN0IGRldmljZSAqZGV2LAo+ID4gPiBpbnQKPiA+ID4gc2Vuc29yX2lkLAo+ID4gPiArCQkJCXZv aWQgKmRhdGEsCj4gPiA+ICsJCQkJY29uc3Qgc3RydWN0Cj4gPiA+IHRoZXJtYWxfem9uZV9vZl9k ZXZpY2Vfb3BzICpvcHMpCj4gPiA+IMKgCj4gPiA+IMKgCVRoaXMgaW50ZXJmYWNlIGFkZHMgYSBu ZXcgc2Vuc29yIHRvIGEgRFQgdGhlcm1hbCB6b25lLgo+ID4gPiDCoAlUaGlzIGZ1bmN0aW9uIHdp bGwgc2VhcmNoIHRoZSBsaXN0IG9mIHRoZXJtYWwgem9uZXMKPiA+ID4gZGVzY3JpYmVkIGluCj4g PiA+IEBAIC04NywyNSArMTIwLDMzIEBAIHRlbXBlcmF0dXJlKSBhbmQgdGhyb3R0bGUgYXBwcm9w cmlhdGUKPiA+ID4gZGV2aWNlcy4KPiA+ID4gwqAJdGhlcm1hbCB6b25lIGRldmljZS4KPiA+ID4g wqAKPiA+ID4gwqAJVGhlIHBhcmFtZXRlcnMgZm9yIHRoaXMgaW50ZXJmYWNlIGFyZToKPiA+ID4g LQlkZXY6CQlEZXZpY2Ugbm9kZSBvZiBzZW5zb3IgY29udGFpbmluZwo+ID4gPiB2YWxpZAo+ID4g PiBub2RlIHBvaW50ZXIgaW4KPiA+ID4gKwo+ID4gPiArCWRldjoKPiA+ID4gKwkJCURldmljZSBu b2RlIG9mIHNlbnNvciBjb250YWluaW5nIHZhbGlkCj4gPiA+IG5vZGUKPiA+ID4gcG9pbnRlciBp bgo+ID4gPiDCoAkJCWRldi0+b2Zfbm9kZS4KPiA+ID4gLQlzZW5zb3JfaWQ6CWEgc2Vuc29yIGlk ZW50aWZpZXIsIGluIGNhc2UgdGhlCj4gPiA+IHNlbnNvciBJUAo+ID4gPiBoYXMgbW9yZQo+ID4g PiArCXNlbnNvcl9pZDoKPiA+ID4gKwkJCWEgc2Vuc29yIGlkZW50aWZpZXIsIGluIGNhc2UgdGhl IHNlbnNvcgo+ID4gPiBJUAo+ID4gPiBoYXMgbW9yZQo+ID4gPiDCoAkJCXRoYW4gb25lIHNlbnNv cnMKPiA+ID4gLQlkYXRhOgkJYSBwcml2YXRlIHBvaW50ZXIgKG93bmVkIGJ5IHRoZQo+ID4gPiBj YWxsZXIpCj4gPiA+IHRoYXQgd2lsbCBiZQo+ID4gPiArCWRhdGE6Cj4gPiA+ICsJCQlhIHByaXZh dGUgcG9pbnRlciAob3duZWQgYnkgdGhlIGNhbGxlcikKPiA+ID4gdGhhdAo+ID4gPiB3aWxsIGJl Cj4gPiA+IMKgCQkJcGFzc2VkIGJhY2ssIHdoZW4gYSB0ZW1wZXJhdHVyZSByZWFkaW5nCj4gPiA+ IGlzCj4gPiA+IG5lZWRlZC4KPiA+ID4gLQlvcHM6CQlzdHJ1Y3QgdGhlcm1hbF96b25lX29mX2Rl dmljZV9vcHMgKi4KPiA+ID4gKwlvcHM6Cj4gPiA+ICsJCQlgc3RydWN0IHRoZXJtYWxfem9uZV9v Zl9kZXZpY2Vfb3BzICpgLgo+ID4gPiDCoAo+ID4gPiAtCQkJZ2V0X3RlbXA6CWEgcG9pbnRlciB0 byBhIGZ1bmN0aW9uCj4gPiA+IHRoYXQgcmVhZHMgdGhlCj4gPiA+ICsJCQk9PT09PT09PT09PT09 PcKgwqA9PT09PT09PT09PT09PT09PT09PT09PT0KPiA+ID4gPT09PQo+ID4gPiA9PT09PT09PT09 PQo+ID4gPiArCQkJZ2V0X3RlbXAJYSBwb2ludGVyIHRvIGEgZnVuY3Rpb24KPiA+ID4gdGhhdAo+ ID4gPiByZWFkcyB0aGUKPiA+ID4gwqAJCQkJCXNlbnNvciB0ZW1wZXJhdHVyZS4gVGhpcwo+ID4g PiBpcwo+ID4gPiBtYW5kYXRvcnkKPiA+ID4gwqAJCQkJCWNhbGxiYWNrIHByb3ZpZGVkIGJ5Cj4g PiA+IHNlbnNvcgo+ID4gPiBkcml2ZXIuCj4gPiA+IC0JCQlzZXRfdHJpcHM6wqDCoMKgwqDCoMKg YSBwb2ludGVyIHRvIGEgZnVuY3Rpb24KPiA+ID4gdGhhdAo+ID4gPiBzZXRzIGEKPiA+ID4gKwkJ CXNldF90cmlwcwlhIHBvaW50ZXIgdG8gYSBmdW5jdGlvbgo+ID4gPiB0aGF0IHNldHMgYQo+ID4g PiDCoAkJCQkJdGVtcGVyYXR1cmUgd2luZG93LiBXaGVuCj4gPiA+IHRoaXMgd2luZG93IGlzCj4g PiA+IMKgCQkJCQlsZWZ0IHRoZSBkcml2ZXIgbXVzdAo+ID4gPiBpbmZvcm0KPiA+ID4gdGhlIHRo ZXJtYWwKPiA+ID4gwqAJCQkJCWNvcmUgdmlhCj4gPiA+IHRoZXJtYWxfem9uZV9kZXZpY2VfdXBk YXRlLgo+ID4gPiAtCQkJZ2V0X3RyZW5kOsKgCWEgcG9pbnRlciB0byBhCj4gPiA+IGZ1bmN0aW9u Cj4gPiA+IHRoYXQgcmVhZHMgdGhlCj4gPiA+ICsJCQlnZXRfdHJlbmTCoAlhIHBvaW50ZXIgdG8g YQo+ID4gPiBmdW5jdGlvbgo+ID4gPiB0aGF0IHJlYWRzIHRoZQo+ID4gPiDCoAkJCQkJc2Vuc29y IHRlbXBlcmF0dXJlCj4gPiA+IHRyZW5kLgo+ID4gPiAtCQkJc2V0X2VtdWxfdGVtcDoJYSBwb2lu dGVyIHRvIGEKPiA+ID4gZnVuY3Rpb24gdGhhdCBzZXRzCj4gPiA+ICsJCQlzZXRfZW11bF90ZW1w CWEgcG9pbnRlciB0byBhCj4gPiA+IGZ1bmN0aW9uCj4gPiA+IHRoYXQgc2V0cwo+ID4gPiDCoAkJ CQkJc2Vuc29yIGVtdWxhdGVkCj4gPiA+IHRlbXBlcmF0dXJlLgo+ID4gPiArCQkJPT09PT09PT09 PT09PT3CoMKgPT09PT09PT09PT09PT09PT09PT09PT09Cj4gPiA+ID09PT0KPiA+ID4gPT09PT09 PT09PT0KPiA+ID4gKwo+ID4gPiDCoAlUaGUgdGhlcm1hbCB6b25lIHRlbXBlcmF0dXJlIGlzIHBy b3ZpZGVkIGJ5IHRoZQo+ID4gPiBnZXRfdGVtcCgpCj4gPiA+IGZ1bmN0aW9uCj4gPiA+IMKgCXBv aW50ZXIgb2YgdGhlcm1hbF96b25lX29mX2RldmljZV9vcHMuIFdoZW4gY2FsbGVkLCBpdAo+ID4g PiB3aWxsCj4gPiA+IMKgCWhhdmUgdGhlIHByaXZhdGUgcG9pbnRlciBAZGF0YSBiYWNrLgo+ID4g PiBAQCAtMTE0LDggKzE1NSwxMCBAQCB0ZW1wZXJhdHVyZSkgYW5kIHRocm90dGxlIGFwcHJvcHJp YXRlCj4gPiA+IGRldmljZXMuCj4gPiA+IMKgCWhhbmRsZS4gQ2FsbGVyIHNob3VsZCBjaGVjayB0 aGUgcmV0dXJuIGhhbmRsZSB3aXRoCj4gPiA+IElTX0VSUigpCj4gPiA+IGZvciBmaW5kaW5nCj4g PiA+IMKgCXdoZXRoZXIgc3VjY2VzcyBvciBub3QuCj4gPiA+IMKgCj4gPiA+IC0xLjEuNCB2b2lk IHRoZXJtYWxfem9uZV9vZl9zZW5zb3JfdW5yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYsCj4g PiA+IC0JCXN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICp0emQpCj4gPiA+ICsJOjoKPiA+ID4g Kwo+ID4gPiArCcKgwqDCoMKgdm9pZCB0aGVybWFsX3pvbmVfb2Zfc2Vuc29yX3VucmVnaXN0ZXIo c3RydWN0IGRldmljZQo+ID4gPiAqZGV2LAo+ID4gPiArCQkJCQkJwqDCoMKgc3RydWN0Cj4gPiA+ IHRoZXJtYWxfem9uZV9kZXZpY2UgKnR6ZCkKPiA+ID4gwqAKPiA+ID4gwqAJVGhpcyBpbnRlcmZh Y2UgdW5yZWdpc3RlcnMgYSBzZW5zb3IgZnJvbSBhIERUIHRoZXJtYWwKPiA+ID4gem9uZQo+ID4g PiB3aGljaCB3YXMKPiA+ID4gwqAJc3VjY2Vzc2Z1bGx5IGFkZGVkIGJ5IGludGVyZmFjZQo+ID4g PiB0aGVybWFsX3pvbmVfb2Zfc2Vuc29yX3JlZ2lzdGVyKCkuCj4gPiA+IEBAIC0xMjQsMjEgKzE2 NywyOSBAQCB0ZW1wZXJhdHVyZSkgYW5kIHRocm90dGxlIGFwcHJvcHJpYXRlCj4gPiA+IGRldmlj ZXMuCj4gPiA+IMKgCWludGVyZmFjZS4gSXQgd2lsbCBhbHNvIHNpbGVudCB0aGUgem9uZSBieSBy ZW1vdmUgdGhlCj4gPiA+IC5nZXRfdGVtcCgpIGFuZAo+ID4gPiDCoAlnZXRfdHJlbmQoKSB0aGVy bWFsIHpvbmUgZGV2aWNlIGNhbGxiYWNrcy4KPiA+ID4gwqAKPiA+ID4gLTEuMS41IHN0cnVjdCB0 aGVybWFsX3pvbmVfZGV2aWNlCj4gPiA+ICpkZXZtX3RoZXJtYWxfem9uZV9vZl9zZW5zb3JfcmVn aXN0ZXIoCj4gPiA+IC0JCXN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNlbnNvcl9pZCwKPiA+ID4g LQkJdm9pZCAqZGF0YSwgY29uc3Qgc3RydWN0Cj4gPiA+IHRoZXJtYWxfem9uZV9vZl9kZXZpY2Vf b3BzCj4gPiA+ICpvcHMpCj4gPiA+ICsJOjoKPiA+ID4gKwo+ID4gPiArCcKgwqBzdHJ1Y3QgdGhl cm1hbF96b25lX2RldmljZQo+ID4gPiArCcKgwqAqZGV2bV90aGVybWFsX3pvbmVfb2Zfc2Vuc29y X3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2UKPiA+ID4gKmRldiwKPiA+ID4gKwkJCQlpbnQgc2Vuc29y X2lkLAo+ID4gPiArCQkJCXZvaWQgKmRhdGEsCj4gPiA+ICsJCQkJY29uc3Qgc3RydWN0Cj4gPiA+ IHRoZXJtYWxfem9uZV9vZl9kZXZpY2Vfb3BzICpvcHMpCj4gPiA+IMKgCj4gPiA+IMKgCVRoaXMg aW50ZXJmYWNlIGlzIHJlc291cmNlIG1hbmFnZWQgdmVyc2lvbiBvZgo+ID4gPiDCoAl0aGVybWFs X3pvbmVfb2Zfc2Vuc29yX3JlZ2lzdGVyKCkuCj4gPiA+ICsKPiA+ID4gwqAJQWxsIGRldGFpbHMg b2YgdGhlcm1hbF96b25lX29mX3NlbnNvcl9yZWdpc3RlcigpCj4gPiA+IGRlc2NyaWJlZAo+ID4g PiBpbgo+ID4gPiDCoAlzZWN0aW9uIDEuMS4zIGlzIGFwcGxpY2FibGUgaGVyZS4KPiA+ID4gKwo+ ID4gPiDCoAlUaGUgYmVuZWZpdCBvZiB1c2luZyB0aGlzIGludGVyZmFjZSB0byByZWdpc3RlciBz ZW5zb3IKPiA+ID4gaXMKPiA+ID4gdGhhdCBpdAo+ID4gPiDCoAlpcyBub3QgcmVxdWlyZSB0byBl eHBsaWNpdGx5IGNhbGwKPiA+ID4gdGhlcm1hbF96b25lX29mX3NlbnNvcl91bnJlZ2lzdGVyKCkK PiA+ID4gwqAJaW4gZXJyb3IgcGF0aCBvciBkdXJpbmcgZHJpdmVyIHVuYmluZGluZyBhcyB0aGlz IGlzIGRvbmUKPiA+ID4gYnkKPiA+ID4gZHJpdmVyCj4gPiA+IMKgCXJlc291cmNlIG1hbmFnZXIu Cj4gPiA+IMKgCj4gPiA+IC0xLjEuNiB2b2lkIGRldm1fdGhlcm1hbF96b25lX29mX3NlbnNvcl91 bnJlZ2lzdGVyKHN0cnVjdCBkZXZpY2UKPiA+ID4gKmRldiwKPiA+ID4gLQkJc3RydWN0IHRoZXJt YWxfem9uZV9kZXZpY2UgKnR6ZCkKPiA+ID4gKwk6Ogo+ID4gPiArCj4gPiA+ICsJCXZvaWQKPiA+ ID4gZGV2bV90aGVybWFsX3pvbmVfb2Zfc2Vuc29yX3VucmVnaXN0ZXIoc3RydWN0Cj4gPiA+IGRl dmljZSAqZGV2LAo+ID4gPiArCQkJCQkJc3RydWN0Cj4gPiA+IHRoZXJtYWxfem9uZV9kZXZpY2Ug KnR6ZCkKPiA+ID4gwqAKPiA+ID4gwqAJVGhpcyBpbnRlcmZhY2UgaXMgcmVzb3VyY2UgbWFuYWdl ZCB2ZXJzaW9uIG9mCj4gPiA+IMKgCXRoZXJtYWxfem9uZV9vZl9zZW5zb3JfdW5yZWdpc3Rlcigp Lgo+ID4gPiBAQCAtMTQ3LDEyMyArMTk4LDE4NiBAQCB0ZW1wZXJhdHVyZSkgYW5kIHRocm90dGxl IGFwcHJvcHJpYXRlCj4gPiA+IGRldmljZXMuCj4gPiA+IMKgCU5vcm1hbGx5IHRoaXMgZnVuY3Rp b24gd2lsbCBub3QgbmVlZCB0byBiZSBjYWxsZWQgYW5kCj4gPiA+IHRoZQo+ID4gPiByZXNvdXJj ZQo+ID4gPiDCoAltYW5hZ2VtZW50IGNvZGUgd2lsbCBlbnN1cmUgdGhhdCB0aGUgcmVzb3VyY2Ug aXMgZnJlZWQuCj4gPiA+IMKgCj4gPiA+IC0xLjEuNyBpbnQgdGhlcm1hbF96b25lX2dldF9zbG9w ZShzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqdHopCj4gPiA+ICsJOjoKPiA+ID4gKwo+ID4g PiArCQlpbnQgdGhlcm1hbF96b25lX2dldF9zbG9wZShzdHJ1Y3QKPiA+ID4gdGhlcm1hbF96b25l X2RldmljZSAqdHopCj4gPiA+IMKgCj4gPiA+IMKgCVRoaXMgaW50ZXJmYWNlIGlzIHVzZWQgdG8g cmVhZCB0aGUgc2xvcGUgYXR0cmlidXRlIHZhbHVlCj4gPiA+IMKgCWZvciB0aGUgdGhlcm1hbCB6 b25lIGRldmljZSwgd2hpY2ggbWlnaHQgYmUgdXNlZnVsIGZvcgo+ID4gPiBwbGF0Zm9ybQo+ID4g PiDCoAlkcml2ZXJzIGZvciB0ZW1wZXJhdHVyZSBjYWxjdWxhdGlvbnMuCj4gPiA+IMKgCj4gPiA+ IC0xLjEuOCBpbnQgdGhlcm1hbF96b25lX2dldF9vZmZzZXQoc3RydWN0IHRoZXJtYWxfem9uZV9k ZXZpY2UKPiA+ID4gKnR6KQo+ID4gPiArCTo6Cj4gPiA+ICsKPiA+ID4gKwkJaW50IHRoZXJtYWxf em9uZV9nZXRfb2Zmc2V0KHN0cnVjdAo+ID4gPiB0aGVybWFsX3pvbmVfZGV2aWNlICp0eikKPiA+ ID4gwqAKPiA+ID4gwqAJVGhpcyBpbnRlcmZhY2UgaXMgdXNlZCB0byByZWFkIHRoZSBvZmZzZXQg YXR0cmlidXRlCj4gPiA+IHZhbHVlCj4gPiA+IMKgCWZvciB0aGUgdGhlcm1hbCB6b25lIGRldmlj ZSwgd2hpY2ggbWlnaHQgYmUgdXNlZnVsIGZvcgo+ID4gPiBwbGF0Zm9ybQo+ID4gPiDCoAlkcml2 ZXJzIGZvciB0ZW1wZXJhdHVyZSBjYWxjdWxhdGlvbnMuCj4gPiA+IMKgCj4gPiA+IMKgMS4yIHRo ZXJtYWwgY29vbGluZyBkZXZpY2UgaW50ZXJmYWNlCj4gPiA+IC0xLjIuMSBzdHJ1Y3QgdGhlcm1h bF9jb29saW5nX2RldmljZQo+ID4gPiAqdGhlcm1hbF9jb29saW5nX2RldmljZV9yZWdpc3Rlcihj aGFyICpuYW1lLAo+ID4gPiAtCQl2b2lkICpkZXZkYXRhLCBzdHJ1Y3QgdGhlcm1hbF9jb29saW5n X2RldmljZV9vcHMKPiA+ID4gKikKPiA+ID4gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQo+ID4gPiArCj4gPiA+ICsKPiA+ID4gK8KgwqDCoMKgOjoKPiA+ID4gKwo+ID4gPiAr CXN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlCj4gPiA+ICsJKnRoZXJtYWxfY29vbGluZ19k ZXZpY2VfcmVnaXN0ZXIoY2hhciAqbmFtZSwKPiA+ID4gKwkJCXZvaWQgKmRldmRhdGEsIHN0cnVj dAo+ID4gPiB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlX29wcyAqKQo+ID4gPiDCoAo+ID4gPiDCoMKg wqDCoMKgVGhpcyBpbnRlcmZhY2UgZnVuY3Rpb24gYWRkcyBhIG5ldyB0aGVybWFsIGNvb2xpbmcg ZGV2aWNlCj4gPiA+IChmYW4vcHJvY2Vzc29yLy4uLikKPiA+ID4gLcKgwqDCoMKgdG8gL3N5cy9j bGFzcy90aGVybWFsLyBmb2xkZXIgYXMgY29vbGluZ19kZXZpY2VbMC0qXS4gSXQKPiA+ID4gdHJp ZXMKPiA+ID4gdG8gYmluZCBpdHNlbGYKPiA+ID4gK8KgwqDCoMKgdG8gL3N5cy9jbGFzcy90aGVy bWFsLyBmb2xkZXIgYXMgYGNvb2xpbmdfZGV2aWNlWzAtKl1gLiBJdAo+ID4gPiB0cmllcwo+ID4g PiB0byBiaW5kIGl0c2VsZgo+ID4gPiDCoMKgwqDCoMKgdG8gYWxsIHRoZSB0aGVybWFsIHpvbmUg ZGV2aWNlcyByZWdpc3RlcmVkIGF0IHRoZSBzYW1lIHRpbWUuCj4gPiA+IC3CoMKgwqDCoG5hbWU6 IHRoZSBjb29saW5nIGRldmljZSBuYW1lLgo+ID4gPiAtwqDCoMKgwqBkZXZkYXRhOiBkZXZpY2Ug cHJpdmF0ZSBkYXRhLgo+ID4gPiAtwqDCoMKgwqBvcHM6IHRoZXJtYWwgY29vbGluZyBkZXZpY2Vz IGNhbGwtYmFja3MuCj4gPiA+IC0JLmdldF9tYXhfc3RhdGU6IGdldCB0aGUgTWF4aW11bSB0aHJv dHRsZSBzdGF0ZSBvZiB0aGUKPiA+ID4gY29vbGluZyBkZXZpY2UuCj4gPiA+IC0JLmdldF9jdXJf c3RhdGU6IGdldCB0aGUgQ3VycmVudGx5IHJlcXVlc3RlZCB0aHJvdHRsZQo+ID4gPiBzdGF0ZQo+ ID4gPiBvZiB0aGUgY29vbGluZyBkZXZpY2UuCj4gPiA+IC0JLnNldF9jdXJfc3RhdGU6IHNldCB0 aGUgQ3VycmVudCB0aHJvdHRsZSBzdGF0ZSBvZiB0aGUKPiA+ID4gY29vbGluZyBkZXZpY2UuCj4g PiA+IC0KPiA+ID4gLTEuMi4yIHZvaWQgdGhlcm1hbF9jb29saW5nX2RldmljZV91bnJlZ2lzdGVy KHN0cnVjdAo+ID4gPiB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICpjZGV2KQo+ID4gPiArCj4gPiA+ ICvCoMKgwqDCoG5hbWU6Cj4gPiA+ICsJdGhlIGNvb2xpbmcgZGV2aWNlIG5hbWUuCj4gPiA+ICvC oMKgwqDCoGRldmRhdGE6Cj4gPiA+ICsJZGV2aWNlIHByaXZhdGUgZGF0YS4KPiA+ID4gK8KgwqDC oMKgb3BzOgo+ID4gPiArCXRoZXJtYWwgY29vbGluZyBkZXZpY2VzIGNhbGwtYmFja3MuCj4gPiA+ ICsKPiA+ID4gKwkuZ2V0X21heF9zdGF0ZToKPiA+ID4gKwkJZ2V0IHRoZSBNYXhpbXVtIHRocm90 dGxlIHN0YXRlIG9mIHRoZSBjb29saW5nCj4gPiA+IGRldmljZS4KPiA+ID4gKwkuZ2V0X2N1cl9z dGF0ZToKPiA+ID4gKwkJZ2V0IHRoZSBDdXJyZW50bHkgcmVxdWVzdGVkIHRocm90dGxlIHN0YXRl IG9mCj4gPiA+IHRoZQo+ID4gPiArCQljb29saW5nIGRldmljZS4KPiA+ID4gKwkuc2V0X2N1cl9z dGF0ZToKPiA+ID4gKwkJc2V0IHRoZSBDdXJyZW50IHRocm90dGxlIHN0YXRlIG9mIHRoZSBjb29s aW5nCj4gPiA+IGRldmljZS4KPiA+ID4gKwo+ID4gPiArwqDCoMKgwqA6Ogo+ID4gPiArCj4gPiA+ ICsJdm9pZCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlX3VucmVnaXN0ZXIoc3RydWN0Cj4gPiA+IHRo ZXJtYWxfY29vbGluZ19kZXZpY2UgKmNkZXYpCj4gPiA+IMKgCj4gPiA+IMKgwqDCoMKgwqBUaGlz IGludGVyZmFjZSBmdW5jdGlvbiByZW1vdmVzIHRoZSB0aGVybWFsIGNvb2xpbmcgZGV2aWNlLgo+ ID4gPiDCoMKgwqDCoMKgSXQgZGVsZXRlcyB0aGUgY29ycmVzcG9uZGluZyBlbnRyeSBmcm9tIC9z eXMvY2xhc3MvdGhlcm1hbAo+ID4gPiBmb2xkZXIgYW5kCj4gPiA+IMKgwqDCoMKgwqB1bmJpbmRz IGl0c2VsZiBmcm9tIGFsbCB0aGUgdGhlcm1hbCB6b25lIGRldmljZXMgdXNpbmcgaXQuCj4gPiA+ IMKgCj4gPiA+IMKgMS4zIGludGVyZmFjZSBmb3IgYmluZGluZyBhIHRoZXJtYWwgem9uZSBkZXZp Y2Ugd2l0aCBhIHRoZXJtYWwKPiA+ID4gY29vbGluZyBkZXZpY2UKPiA+ID4gLTEuMy4xIGludCB0 aGVybWFsX3pvbmVfYmluZF9jb29saW5nX2RldmljZShzdHJ1Y3QKPiA+ID4gdGhlcm1hbF96b25l X2RldmljZSAqdHosCj4gPiA+IC0JaW50IHRyaXAsIHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2 aWNlICpjZGV2LAo+ID4gPiAtCXVuc2lnbmVkIGxvbmcgdXBwZXIsIHVuc2lnbmVkIGxvbmcgbG93 ZXIsIHVuc2lnbmVkIGludAo+ID4gPiB3ZWlnaHQpOwo+ID4gPiArLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiA+ID4gLS0tLQo+ ID4gPiAtLS0tLS0tLS0tLQo+ID4gPiArCj4gPiA+ICvCoMKgwqDCoDo6Cj4gPiA+ICsKPiA+ID4g KwlpbnQgdGhlcm1hbF96b25lX2JpbmRfY29vbGluZ19kZXZpY2Uoc3RydWN0Cj4gPiA+IHRoZXJt YWxfem9uZV9kZXZpY2UgKnR6LAo+ID4gPiArCQlpbnQgdHJpcCwgc3RydWN0IHRoZXJtYWxfY29v bGluZ19kZXZpY2UgKmNkZXYsCj4gPiA+ICsJCXVuc2lnbmVkIGxvbmcgdXBwZXIsIHVuc2lnbmVk IGxvbmcgbG93ZXIsCj4gPiA+IHVuc2lnbmVkCj4gPiA+IGludCB3ZWlnaHQpOwo+ID4gPiDCoAo+ ID4gPiDCoMKgwqDCoMKgVGhpcyBpbnRlcmZhY2UgZnVuY3Rpb24gYmluZHMgYSB0aGVybWFsIGNv b2xpbmcgZGV2aWNlIHRvIGEKPiA+ID4gcGFydGljdWxhciB0cmlwCj4gPiA+IMKgwqDCoMKgwqBw b2ludCBvZiBhIHRoZXJtYWwgem9uZSBkZXZpY2UuCj4gPiA+ICsKPiA+ID4gwqDCoMKgwqDCoFRo aXMgZnVuY3Rpb24gaXMgdXN1YWxseSBjYWxsZWQgaW4gdGhlIHRoZXJtYWwgem9uZSBkZXZpY2UK PiA+ID4gLmJpbmQKPiA+ID4gY2FsbGJhY2suCj4gPiA+IC3CoMKgwqDCoHR6OiB0aGUgdGhlcm1h bCB6b25lIGRldmljZQo+ID4gPiAtwqDCoMKgwqBjZGV2OiB0aGVybWFsIGNvb2xpbmcgZGV2aWNl Cj4gPiA+IC3CoMKgwqDCoHRyaXA6IGluZGljYXRlcyB3aGljaCB0cmlwIHBvaW50IGluIHRoaXMg dGhlcm1hbCB6b25lIHRoZQo+ID4gPiBjb29saW5nIGRldmljZQo+ID4gPiAtwqDCoMKgwqDCoMKg wqDCoMKgwqBpcyBhc3NvY2lhdGVkIHdpdGguCj4gPiA+IC3CoMKgwqDCoHVwcGVyOnRoZSBNYXhp bXVtIGNvb2xpbmcgc3RhdGUgZm9yIHRoaXMgdHJpcCBwb2ludC4KPiA+ID4gLcKgwqDCoMKgwqDC oMKgwqDCoMKgVEhFUk1BTF9OT19MSU1JVCBtZWFucyBubyB1cHBlciBsaW1pdCwKPiA+ID4gKwo+ ID4gPiArwqDCoMKgwqB0ejoKPiA+ID4gKwnCoMKgdGhlIHRoZXJtYWwgem9uZSBkZXZpY2UKPiA+ ID4gK8KgwqDCoMKgY2RldjoKPiA+ID4gKwnCoMKgdGhlcm1hbCBjb29saW5nIGRldmljZQo+ID4g PiArwqDCoMKgwqB0cmlwOgo+ID4gPiArCcKgwqBpbmRpY2F0ZXMgd2hpY2ggdHJpcCBwb2ludCBp biB0aGlzIHRoZXJtYWwgem9uZSB0aGUKPiA+ID4gY29vbGluZyBkZXZpY2UKPiA+ID4gKwnCoMKg aXMgYXNzb2NpYXRlZCB3aXRoLgo+ID4gPiArwqDCoMKgwqB1cHBlcjoKPiA+ID4gKwnCoMKgdGhl IE1heGltdW0gY29vbGluZyBzdGF0ZSBmb3IgdGhpcyB0cmlwIHBvaW50Lgo+ID4gPiArCcKgwqBU SEVSTUFMX05PX0xJTUlUIG1lYW5zIG5vIHVwcGVyIGxpbWl0LAo+ID4gPiDCoAnCoMKgYW5kIHRo ZSBjb29saW5nIGRldmljZSBjYW4gYmUgaW4gbWF4X3N0YXRlLgo+ID4gPiAtwqDCoMKgwqBsb3dl cjp0aGUgTWluaW11bSBjb29saW5nIHN0YXRlIGNhbiBiZSB1c2VkIGZvciB0aGlzIHRyaXAKPiA+ ID4gcG9pbnQuCj4gPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoFRIRVJNQUxfTk9fTElNSVQgbWVh bnMgbm8gbG93ZXIgbGltaXQsCj4gPiA+ICvCoMKgwqDCoGxvd2VyOgo+ID4gPiArCcKgwqB0aGUg TWluaW11bSBjb29saW5nIHN0YXRlIGNhbiBiZSB1c2VkIGZvciB0aGlzIHRyaXAKPiA+ID4gcG9p bnQuCj4gPiA+ICsJwqDCoFRIRVJNQUxfTk9fTElNSVQgbWVhbnMgbm8gbG93ZXIgbGltaXQsCj4g PiA+IMKgCcKgwqBhbmQgdGhlIGNvb2xpbmcgZGV2aWNlIGNhbiBiZSBpbiBjb29saW5nIHN0YXRl IDAuCj4gPiA+IC3CoMKgwqDCoHdlaWdodDogdGhlIGluZmx1ZW5jZSBvZiB0aGlzIGNvb2xpbmcg ZGV2aWNlIGluIHRoaXMgdGhlcm1hbAo+ID4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgem9u ZS7CoMKgU2VlIDEuNC4xIGJlbG93IGZvciBtb3JlIGluZm9ybWF0aW9uLgo+ID4gPiArwqDCoMKg wqB3ZWlnaHQ6Cj4gPiA+ICsJwqDCoHRoZSBpbmZsdWVuY2Ugb2YgdGhpcyBjb29saW5nIGRldmlj ZSBpbiB0aGlzIHRoZXJtYWwKPiA+ID4gKwnCoMKgem9uZS7CoMKgU2VlIDEuNC4xIGJlbG93IGZv ciBtb3JlIGluZm9ybWF0aW9uLgo+ID4gPiDCoAo+ID4gPiAtMS4zLjIgaW50IHRoZXJtYWxfem9u ZV91bmJpbmRfY29vbGluZ19kZXZpY2Uoc3RydWN0Cj4gPiA+IHRoZXJtYWxfem9uZV9kZXZpY2Ug KnR6LAo+ID4gPiAtCQlpbnQgdHJpcCwgc3RydWN0IHRoZXJtYWxfY29vbGluZ19kZXZpY2UgKmNk ZXYpOwo+ID4gPiArwqDCoMKgwqA6Ogo+ID4gPiArCj4gPiA+ICsJaW50IHRoZXJtYWxfem9uZV91 bmJpbmRfY29vbGluZ19kZXZpY2Uoc3RydWN0Cj4gPiA+IHRoZXJtYWxfem9uZV9kZXZpY2UgKnR6 LAo+ID4gPiArCQkJCWludCB0cmlwLCBzdHJ1Y3QKPiA+ID4gdGhlcm1hbF9jb29saW5nX2Rldmlj ZSAqY2Rldik7Cj4gPiA+IMKgCj4gPiA+IMKgwqDCoMKgwqBUaGlzIGludGVyZmFjZSBmdW5jdGlv biB1bmJpbmRzIGEgdGhlcm1hbCBjb29saW5nIGRldmljZQo+ID4gPiBmcm9tIGEKPiA+ID4gcGFy dGljdWxhcgo+ID4gPiDCoMKgwqDCoMKgdHJpcCBwb2ludCBvZiBhIHRoZXJtYWwgem9uZSBkZXZp Y2UuIFRoaXMgZnVuY3Rpb24gaXMKPiA+ID4gdXN1YWxseQo+ID4gPiBjYWxsZWQgaW4KPiA+ID4g wqDCoMKgwqDCoHRoZSB0aGVybWFsIHpvbmUgZGV2aWNlIC51bmJpbmQgY2FsbGJhY2suCj4gPiA+ IC3CoMKgwqDCoHR6OiB0aGUgdGhlcm1hbCB6b25lIGRldmljZQo+ID4gPiAtwqDCoMKgwqBjZGV2 OiB0aGVybWFsIGNvb2xpbmcgZGV2aWNlCj4gPiA+IC3CoMKgwqDCoHRyaXA6IGluZGljYXRlcyB3 aGljaCB0cmlwIHBvaW50IGluIHRoaXMgdGhlcm1hbCB6b25lIHRoZQo+ID4gPiBjb29saW5nIGRl dmljZQo+ID4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqBpcyBhc3NvY2lhdGVkIHdpdGguCj4gPiA+ ICsKPiA+ID4gK8KgwqDCoMKgdHo6Cj4gPiA+ICsJdGhlIHRoZXJtYWwgem9uZSBkZXZpY2UKPiA+ ID4gK8KgwqDCoMKgY2RldjoKPiA+ID4gKwl0aGVybWFsIGNvb2xpbmcgZGV2aWNlCj4gPiA+ICvC oMKgwqDCoHRyaXA6Cj4gPiA+ICsJaW5kaWNhdGVzIHdoaWNoIHRyaXAgcG9pbnQgaW4gdGhpcyB0 aGVybWFsIHpvbmUgdGhlCj4gPiA+IGNvb2xpbmcKPiA+ID4gZGV2aWNlCj4gPiA+ICsJaXMgYXNz b2NpYXRlZCB3aXRoLgo+ID4gPiDCoAo+ID4gPiDCoDEuNCBUaGVybWFsIFpvbmUgUGFyYW1ldGVy cwo+ID4gPiAtMS40LjEgc3RydWN0IHRoZXJtYWxfYmluZF9wYXJhbXMKPiA+ID4gKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQo+ID4gPiArCj4gPiA+ICvCoMKgwqDCoDo6Cj4gPiA+ICsKPiA+ ID4gKwlzdHJ1Y3QgdGhlcm1hbF9iaW5kX3BhcmFtcwo+ID4gPiArCj4gPiA+IMKgwqDCoMKgwqBU aGlzIHN0cnVjdHVyZSBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycyB0aGF0IGFyZQo+ ID4gPiB1c2VkIHRvCj4gPiA+IGJpbmQKPiA+ID4gwqDCoMKgwqDCoGEgem9uZSB3aXRoIGEgY29v bGluZyBkZXZpY2UgZm9yIGEgcGFydGljdWxhciB0cmlwIHBvaW50Lgo+ID4gPiAtwqDCoMKgwqAu Y2RldjogVGhlIGNvb2xpbmcgZGV2aWNlIHBvaW50ZXIKPiA+ID4gLcKgwqDCoMKgLndlaWdodDog VGhlICdpbmZsdWVuY2UnIG9mIGEgcGFydGljdWxhciBjb29saW5nIGRldmljZSBvbgo+ID4gPiB0 aGlzCj4gPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHpvbmUuIFRoaXMgaXMgcmVsYXRp dmUgdG8gdGhlIHJlc3Qgb2YgdGhlIGNvb2xpbmcKPiA+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgZGV2aWNlcy4gRm9yIGV4YW1wbGUsIGlmIGFsbCBjb29saW5nIGRldmljZXMgaGF2ZSBh Cj4gPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHdlaWdodCBvZiAxLCB0aGVuIHRoZXkg YWxsIGNvbnRyaWJ1dGUgdGhlIHNhbWUuIFlvdQo+ID4gPiBjYW4KPiA+ID4gLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgdXNlIHBlcmNlbnRhZ2VzIGlmIHlvdSB3YW50LCBidXQgaXQncyBub3QK PiA+ID4gbWFuZGF0b3J5LiBBCj4gPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHdlaWdo dCBvZiAwIG1lYW5zIHRoYXQgdGhpcyBjb29saW5nIGRldmljZSBkb2Vzbid0Cj4gPiA+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbnRyaWJ1dGUgdG8gdGhlIGNvb2xpbmcgb2YgdGhpcyB6 b25lIHVubGVzcyBhbGwKPiA+ID4gY29vbGluZwo+ID4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBkZXZpY2VzIGhhdmUgYSB3ZWlnaHQgb2YgMC4gSWYgYWxsIHdlaWdodHMgYXJlIDAsCj4g PiA+IHRoZW4KPiA+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdGhleSBhbGwgY29udHJp YnV0ZSB0aGUgc2FtZS4KPiA+ID4gLcKgwqDCoMKgLnRyaXBfbWFzazpUaGlzIGlzIGEgYml0IG1h c2sgdGhhdCBnaXZlcyB0aGUgYmluZGluZwo+ID4gPiByZWxhdGlvbgo+ID4gPiBiZXR3ZWVuCj4g PiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB0aGlzIHRoZXJtYWwgem9uZSBhbmQg Y2RldiwgZm9yIGEgcGFydGljdWxhciB0cmlwCj4gPiA+IHBvaW50Lgo+ID4gPiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgSWYgbnRoIGJpdCBpcyBzZXQsIHRoZW4gdGhlIGNkZXYgYW5k IHRoZXJtYWwgem9uZQo+ID4gPiBhcmUKPiA+ID4gYm91bmQKPiA+ID4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGZvciB0cmlwIHBvaW50IG4uCj4gPiA+IC3CoMKgwqDCoC5iaW5kaW5n X2xpbWl0czogVGhpcyBpcyBhbiBhcnJheSBvZiBjb29saW5nIHN0YXRlIGxpbWl0cy4KPiA+ID4g TXVzdAo+ID4gPiBoYXZlCj4gPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBleGFjdGx5IDIgKgo+ID4gPiB0aGVybWFsX3pvbmUubnVtYmVyX29mX3RyaXBfcG9p bnRzLgo+ID4gPiBJdCBpcyBhbgo+ID4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgYXJyYXkgY29uc2lzdGluZyBvZiB0dXBsZXMgPGxvd2VyLXN0YXRlCj4gPiA+ IHVwcGVyLcKgwqAKPiA+ID4gc3RhdGU+IG9mwqDCoAo+ID4gPiAtwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RhdGUgbGltaXRzLiBFYWNoIHRyaXAgd2lsbCBiZSBh c3NvY2lhdGVkCj4gPiA+IHdpdGgKPiA+ID4gb25lIHN0YXRlCj4gPiA+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBsaW1pdCB0dXBsZSB3aGVuIGJpbmRpbmcuIEEg TlVMTCBwb2ludGVyCj4gPiA+IG1lYW5zCj4gPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqA8VEhFUk1BTF9OT19MSU1JVFMgVEhFUk1BTF9OT19MSU1JVFM+IG9u Cj4gPiA+IGFsbAo+ID4gPiB0cmlwcy4KPiA+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoFRoZXNlIGxpbWl0cyBhcmUgdXNlZCB3aGVuIGJpbmRpbmcgYSBjZGV2 Cj4gPiA+IHRvIGEKPiA+ID4gdHJpcCBwb2ludC4KPiA+ID4gLcKgwqDCoMKgLm1hdGNoOiBUaGlz IGNhbGwgYmFjayByZXR1cm5zIHN1Y2Nlc3MoMCkgaWYgdGhlICd0eiBhbmQKPiA+ID4gY2RldicK PiA+ID4gbmVlZCB0bwo+ID4gPiArCj4gPiA+ICvCoMKgwqDCoC5jZGV2Ogo+ID4gPiArCcKgwqDC oMKgwqBUaGUgY29vbGluZyBkZXZpY2UgcG9pbnRlcgo+ID4gPiArwqDCoMKgwqAud2VpZ2h0Ogo+ ID4gPiArCcKgwqDCoMKgwqBUaGUgJ2luZmx1ZW5jZScgb2YgYSBwYXJ0aWN1bGFyIGNvb2xpbmcg ZGV2aWNlIG9uCj4gPiA+IHRoaXMKPiA+ID4gKwnCoMKgwqDCoMKgem9uZS4gVGhpcyBpcyByZWxh dGl2ZSB0byB0aGUgcmVzdCBvZiB0aGUgY29vbGluZwo+ID4gPiArCcKgwqDCoMKgwqBkZXZpY2Vz LiBGb3IgZXhhbXBsZSwgaWYgYWxsIGNvb2xpbmcgZGV2aWNlcyBoYXZlIGEKPiA+ID4gKwnCoMKg wqDCoMKgd2VpZ2h0IG9mIDEsIHRoZW4gdGhleSBhbGwgY29udHJpYnV0ZSB0aGUgc2FtZS4gWW91 Cj4gPiA+IGNhbgo+ID4gPiArCcKgwqDCoMKgwqB1c2UgcGVyY2VudGFnZXMgaWYgeW91IHdhbnQs IGJ1dCBpdCdzIG5vdAo+ID4gPiBtYW5kYXRvcnkuIEEKPiA+ID4gKwnCoMKgwqDCoMKgd2VpZ2h0 IG9mIDAgbWVhbnMgdGhhdCB0aGlzIGNvb2xpbmcgZGV2aWNlIGRvZXNuJ3QKPiA+ID4gKwnCoMKg wqDCoMKgY29udHJpYnV0ZSB0byB0aGUgY29vbGluZyBvZiB0aGlzIHpvbmUgdW5sZXNzIGFsbAo+ ID4gPiBjb29saW5nCj4gPiA+ICsJwqDCoMKgwqDCoGRldmljZXMgaGF2ZSBhIHdlaWdodCBvZiAw LiBJZiBhbGwgd2VpZ2h0cyBhcmUgMCwKPiA+ID4gdGhlbgo+ID4gPiArCcKgwqDCoMKgwqB0aGV5 IGFsbCBjb250cmlidXRlIHRoZSBzYW1lLgo+ID4gPiArwqDCoMKgwqAudHJpcF9tYXNrOgo+ID4g PiArCcKgwqDCoMKgwqDCoMKgVGhpcyBpcyBhIGJpdCBtYXNrIHRoYXQgZ2l2ZXMgdGhlIGJpbmRp bmcKPiA+ID4gcmVsYXRpb24KPiA+ID4gYmV0d2Vlbgo+ID4gPiArCcKgwqDCoMKgwqDCoMKgdGhp cyB0aGVybWFsIHpvbmUgYW5kIGNkZXYsIGZvciBhIHBhcnRpY3VsYXIgdHJpcAo+ID4gPiBwb2lu dC4KPiA+ID4gKwnCoMKgwqDCoMKgwqDCoElmIG50aCBiaXQgaXMgc2V0LCB0aGVuIHRoZSBjZGV2 IGFuZCB0aGVybWFsIHpvbmUKPiA+ID4gYXJlCj4gPiA+IGJvdW5kCj4gPiA+ICsJwqDCoMKgwqDC oMKgwqBmb3IgdHJpcCBwb2ludCBuLgo+ID4gPiArwqDCoMKgwqAuYmluZGluZ19saW1pdHM6Cj4g PiA+ICsJCcKgwqDCoMKgwqBUaGlzIGlzIGFuIGFycmF5IG9mIGNvb2xpbmcgc3RhdGUgbGltaXRz Lgo+ID4gPiBNdXN0Cj4gPiA+IGhhdmUKPiA+ID4gKwkJwqDCoMKgwqDCoGV4YWN0bHkgMiAqCj4g PiA+IHRoZXJtYWxfem9uZS5udW1iZXJfb2ZfdHJpcF9wb2ludHMuCj4gPiA+IEl0IGlzIGFuCj4g PiA+ICsJCcKgwqDCoMKgwqBhcnJheSBjb25zaXN0aW5nIG9mIHR1cGxlcyA8bG93ZXItc3RhdGUK PiA+ID4gdXBwZXItwqDCoAo+ID4gPiBzdGF0ZT4gb2bCoMKgCj4gPiA+ICsJCcKgwqDCoMKgwqBz dGF0ZSBsaW1pdHMuIEVhY2ggdHJpcCB3aWxsIGJlIGFzc29jaWF0ZWQKPiA+ID4gd2l0aAo+ID4g PiBvbmUgc3RhdGUKPiA+ID4gKwkJwqDCoMKgwqDCoGxpbWl0IHR1cGxlIHdoZW4gYmluZGluZy4g QSBOVUxMIHBvaW50ZXIKPiA+ID4gbWVhbnMKPiA+ID4gKwkJwqDCoMKgwqDCoDxUSEVSTUFMX05P X0xJTUlUUyBUSEVSTUFMX05PX0xJTUlUUz4gb24KPiA+ID4gYWxsCj4gPiA+IHRyaXBzLgo+ID4g PiArCQnCoMKgwqDCoMKgVGhlc2UgbGltaXRzIGFyZSB1c2VkIHdoZW4gYmluZGluZyBhIGNkZXYK PiA+ID4gdG8gYQo+ID4gPiB0cmlwIHBvaW50Lgo+ID4gPiArwqDCoMKgwqAubWF0Y2g6Cj4gPiA+ ICsJwqDCoMKgwqBUaGlzIGNhbGwgYmFjayByZXR1cm5zIHN1Y2Nlc3MoMCkgaWYgdGhlICd0eiBh bmQKPiA+ID4gY2RldicKPiA+ID4gbmVlZCB0bwo+ID4gPiDCoAnCoMKgwqDCoGJlIGJvdW5kLCBh cyBwZXIgcGxhdGZvcm0gZGF0YS4KPiA+ID4gLTEuNC4yIHN0cnVjdCB0aGVybWFsX3pvbmVfcGFy YW1zCj4gPiA+ICsKPiA+ID4gK8KgwqDCoMKgOjoKPiA+ID4gKwo+ID4gPiArCXN0cnVjdCB0aGVy bWFsX3pvbmVfcGFyYW1zCj4gPiA+ICsKPiA+ID4gwqDCoMKgwqDCoFRoaXMgc3RydWN0dXJlIGRl ZmluZXMgdGhlIHBsYXRmb3JtIGxldmVsIHBhcmFtZXRlcnMgZm9yIGEKPiA+ID4gdGhlcm1hbCB6 b25lLgo+ID4gPiDCoMKgwqDCoMKgVGhpcyBkYXRhLCBmb3IgZWFjaCB0aGVybWFsIHpvbmUgc2hv dWxkIGNvbWUgZnJvbSB0aGUKPiA+ID4gcGxhdGZvcm0KPiA+ID4gbGF5ZXIuCj4gPiA+IMKgwqDC oMKgwqBUaGlzIGlzIGFuIG9wdGlvbmFsIGZlYXR1cmUgd2hlcmUgc29tZSBwbGF0Zm9ybXMgY2Fu IGNob29zZQo+ID4gPiBub3QKPiA+ID4gdG8KPiA+ID4gwqDCoMKgwqDCoHByb3ZpZGUgdGhpcyBk YXRhLgo+ID4gPiAtwqDCoMKgwqAuZ292ZXJub3JfbmFtZTogTmFtZSBvZiB0aGUgdGhlcm1hbCBn b3Zlcm5vciB1c2VkIGZvciB0aGlzCj4gPiA+IHpvbmUKPiA+ID4gLcKgwqDCoMKgLm5vX2h3bW9u OiBhIGJvb2xlYW4gdG8gaW5kaWNhdGUgaWYgdGhlIHRoZXJtYWwgdG8gaHdtb24KPiA+ID4gc3lz ZnMKPiA+ID4gaW50ZXJmYWNlCj4gPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBp cyByZXF1aXJlZC4gd2hlbiBub19od21vbiA9PSBmYWxzZSwgYSBod21vbgo+ID4gPiBzeXNmcwo+ ID4gPiBpbnRlcmZhY2UKPiA+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHdpbGwg YmUgY3JlYXRlZC4gd2hlbiBub19od21vbiA9PSB0cnVlLCBub3RoaW5nCj4gPiA+IHdpbGwKPiA+ ID4gYmUgZG9uZS4KPiA+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEluIGNhc2Ug dGhlIHRoZXJtYWxfem9uZV9wYXJhbXMgaXMgTlVMTCwgdGhlCj4gPiA+IGh3bW9uCj4gPiA+IGlu dGVyZmFjZQo+ID4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgd2lsbCBiZSBjcmVh dGVkIChmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSkuCj4gPiA+IC3CoMKgwqDCoC5udW1fdGJw czogTnVtYmVyIG9mIHRoZXJtYWxfYmluZF9wYXJhbXMgZW50cmllcyBmb3IgdGhpcwo+ID4gPiB6 b25lCj4gPiA+IC3CoMKgwqDCoC50YnA6IHRoZXJtYWxfYmluZF9wYXJhbXMgZW50cmllcwo+ID4g PiArCj4gPiA+ICvCoMKgwqDCoC5nb3Zlcm5vcl9uYW1lOgo+ID4gPiArCcKgwqDCoMKgwqDCoMKg TmFtZSBvZiB0aGUgdGhlcm1hbCBnb3Zlcm5vciB1c2VkIGZvciB0aGlzIHpvbmUKPiA+ID4gK8Kg wqDCoMKgLm5vX2h3bW9uOgo+ID4gPiArCcKgwqDCoMKgwqDCoMKgYSBib29sZWFuIHRvIGluZGlj YXRlIGlmIHRoZSB0aGVybWFsIHRvIGh3bW9uCj4gPiA+IHN5c2ZzCj4gPiA+IGludGVyZmFjZQo+ ID4gPiArCcKgwqDCoMKgwqDCoMKgaXMgcmVxdWlyZWQuIHdoZW4gbm9faHdtb24gPT0gZmFsc2Us IGEgaHdtb24KPiA+ID4gc3lzZnMKPiA+ID4gaW50ZXJmYWNlCj4gPiA+ICsJwqDCoMKgwqDCoMKg wqB3aWxsIGJlIGNyZWF0ZWQuIHdoZW4gbm9faHdtb24gPT0gdHJ1ZSwgbm90aGluZwo+ID4gPiB3 aWxsCj4gPiA+IGJlIGRvbmUuCj4gPiA+ICsJwqDCoMKgwqDCoMKgwqBJbiBjYXNlIHRoZSB0aGVy bWFsX3pvbmVfcGFyYW1zIGlzIE5VTEwsIHRoZQo+ID4gPiBod21vbgo+ID4gPiBpbnRlcmZhY2UK PiA+ID4gKwnCoMKgwqDCoMKgwqDCoHdpbGwgYmUgY3JlYXRlZCAoZm9yIGJhY2t3YXJkIGNvbXBh dGliaWxpdHkpLgo+ID4gPiArwqDCoMKgwqAubnVtX3RicHM6Cj4gPiA+ICsJwqDCoMKgwqDCoMKg wqBOdW1iZXIgb2YgdGhlcm1hbF9iaW5kX3BhcmFtcyBlbnRyaWVzIGZvciB0aGlzCj4gPiA+IHpv bmUKPiA+ID4gK8KgwqDCoMKgLnRicDoKPiA+ID4gKwnCoMKgwqDCoMKgwqDCoHRoZXJtYWxfYmlu ZF9wYXJhbXMgZW50cmllcwo+ID4gPiDCoAo+ID4gPiDCoDIuIHN5c2ZzIGF0dHJpYnV0ZXMgc3Ry dWN0dXJlCj4gPiA+ICs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo+ID4gPiDCoAo+ID4g PiArPT0JPT09PT09PT09PT09PT09PQo+ID4gPiDCoFJPCXJlYWQgb25seSB2YWx1ZQo+ID4gPiDC oFdPCXdyaXRlIG9ubHkgdmFsdWUKPiA+ID4gwqBSVwlyZWFkL3dyaXRlIHZhbHVlCj4gPiA+ICs9 PQk9PT09PT09PT09PT09PT09Cj4gPiA+IMKgCj4gPiA+IMKgVGhlcm1hbCBzeXNmcyBhdHRyaWJ1 dGVzIHdpbGwgYmUgcmVwcmVzZW50ZWQgdW5kZXIKPiA+ID4gL3N5cy9jbGFzcy90aGVybWFsLgo+ ID4gPiDCoEh3bW9uIHN5c2ZzIEkvRiBleHRlbnNpb24gaXMgYWxzbyBhdmFpbGFibGUgdW5kZXIK PiA+ID4gL3N5cy9jbGFzcy9od21vbgo+ID4gPiDCoGlmIGh3bW9uIGlzIGNvbXBpbGVkIGluIG9y IGJ1aWx0IGFzIGEgbW9kdWxlLgo+ID4gPiDCoAo+ID4gPiAtVGhlcm1hbCB6b25lIGRldmljZSBz eXMgSS9GLCBjcmVhdGVkIG9uY2UgaXQncyByZWdpc3RlcmVkOgo+ID4gPiAtL3N5cy9jbGFzcy90 aGVybWFsL3RoZXJtYWxfem9uZVswLSpdOgo+ID4gPiArVGhlcm1hbCB6b25lIGRldmljZSBzeXMg SS9GLCBjcmVhdGVkIG9uY2UgaXQncyByZWdpc3RlcmVkOjoKPiA+ID4gKwo+ID4gPiArwqDCoC9z eXMvY2xhc3MvdGhlcm1hbC90aGVybWFsX3pvbmVbMC0qXToKPiA+ID4gwqDCoMKgwqDCoHwtLS10 eXBlOgkJCVR5cGUgb2YgdGhlIHRoZXJtYWwgem9uZQo+ID4gPiDCoMKgwqDCoMKgfC0tLXRlbXA6 CQkJQ3VycmVudCB0ZW1wZXJhdHVyZQo+ID4gPiDCoMKgwqDCoMKgfC0tLW1vZGU6CQkJV29ya2lu ZyBtb2RlIG9mIHRoZSB0aGVybWFsCj4gPiA+IHpvbmUKPiA+ID4gQEAgLTI4Miw4ICszOTYsOSBA QCBUaGVybWFsIHpvbmUgZGV2aWNlIHN5cyBJL0YsIGNyZWF0ZWQgb25jZQo+ID4gPiBpdCdzCj4g PiA+IHJlZ2lzdGVyZWQ6Cj4gPiA+IMKgwqDCoMKgwqB8LS0tc2xvcGU6wqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgU2xvcGUgY29uc3RhbnQgYXBwbGllZCBhcyBsaW5lYXIKPiA+ ID4gZXh0cmFwb2xhdGlvbgo+ID4gPiDCoMKgwqDCoMKgfC0tLW9mZnNldDrCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgT2Zmc2V0IGNvbnN0YW50IGFwcGxpZWQgYXMKPiA+ID4gbGlu ZWFyCj4gPiA+IGV4dHJhcG9sYXRpb24KPiA+ID4gwqAKPiA+ID4gLVRoZXJtYWwgY29vbGluZyBk ZXZpY2Ugc3lzIEkvRiwgY3JlYXRlZCBvbmNlIGl0J3MgcmVnaXN0ZXJlZDoKPiA+ID4gLS9zeXMv Y2xhc3MvdGhlcm1hbC9jb29saW5nX2RldmljZVswLSpdOgo+ID4gPiArVGhlcm1hbCBjb29saW5n IGRldmljZSBzeXMgSS9GLCBjcmVhdGVkIG9uY2UgaXQncyByZWdpc3RlcmVkOjoKPiA+ID4gKwo+ ID4gPiArwqDCoC9zeXMvY2xhc3MvdGhlcm1hbC9jb29saW5nX2RldmljZVswLSpdOgo+ID4gPiDC oMKgwqDCoMKgfC0tLXR5cGU6CQkJVHlwZSBvZiB0aGUgY29vbGluZwo+ID4gPiBkZXZpY2UocHJv Y2Vzc29yL2Zhbi8uLi4pCj4gPiA+IMKgwqDCoMKgwqB8LS0tbWF4X3N0YXRlOgkJTWF4aW11bSBj b29saW5nIHN0YXRlIG9mIHRoZQo+ID4gPiBjb29saW5nIGRldmljZQo+ID4gPiDCoMKgwqDCoMKg fC0tLWN1cl9zdGF0ZToJCUN1cnJlbnQgY29vbGluZyBzdGF0ZSBvZiB0aGUKPiA+ID4gY29vbGlu ZyBkZXZpY2UKPiA+ID4gQEAgLTI5OSwxMSArNDE0LDEzIEBAIHRoZSByZWxhdGlvbnNoaXAgYmV0 d2VlbiBhIHRoZXJtYWwgem9uZSBhbmQKPiA+ID4gaXRzCj4gPiA+IGFzc29jaWF0ZWQgY29vbGlu ZyBkZXZpY2UuCj4gPiA+IMKgVGhleSBhcmUgY3JlYXRlZC9yZW1vdmVkIGZvciBlYWNoIHN1Y2Nl c3NmdWwgZXhlY3V0aW9uIG9mCj4gPiA+IMKgdGhlcm1hbF96b25lX2JpbmRfY29vbGluZ19kZXZp Y2UvdGhlcm1hbF96b25lX3VuYmluZF9jb29saW5nX2Rldgo+ID4gPiBpY2UuCj4gPiA+IMKgCj4g PiA+IC0vc3lzL2NsYXNzL3RoZXJtYWwvdGhlcm1hbF96b25lWzAtKl06Cj4gPiA+ICs6Ogo+ID4g PiArCj4gPiA+ICvCoMKgL3N5cy9jbGFzcy90aGVybWFsL3RoZXJtYWxfem9uZVswLSpdOgo+ID4g PiDCoMKgwqDCoMKgfC0tLWNkZXZbMC0qXToJCVswLSpddGggY29vbGluZyBkZXZpY2UgaW4KPiA+ ID4gY3VycmVudAo+ID4gPiB0aGVybWFsIHpvbmUKPiA+ID4gwqDCoMKgwqDCoHwtLS1jZGV2WzAt Kl1fdHJpcF9wb2ludDoJVHJpcCBwb2ludCB0aGF0IGNkZXZbMC0qXQo+ID4gPiBpcwo+ID4gPiBh c3NvY2lhdGVkIHdpdGgKPiA+ID4gwqDCoMKgwqDCoHwtLS1jZGV2WzAtKl1fd2VpZ2h0OsKgwqDC oMKgwqDCoMKgSW5mbHVlbmNlIG9mIHRoZSBjb29saW5nIGRldmljZQo+ID4gPiBpbgo+ID4gPiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHRoaXMgdGhlcm1hbCB6b25lCj4gPiA+ICsJCQkJdGhpcyB0aGVybWFsIHpvbmUKPiA+ ID4gwqAKPiA+ID4gwqBCZXNpZGVzIHRoZSB0aGVybWFsIHpvbmUgZGV2aWNlIHN5c2ZzIEkvRiBh bmQgY29vbGluZyBkZXZpY2UKPiA+ID4gc3lzZnMKPiA+ID4gSS9GLAo+ID4gPiDCoHRoZSBnZW5l cmljIHRoZXJtYWwgZHJpdmVyIGFsc28gY3JlYXRlcyBhIGh3bW9uIHN5c2ZzIEkvRiBmb3IKPiA+ ID4gZWFjaAo+ID4gPiBfdHlwZV8KPiA+ID4gQEAgLTMxMSwxNiArNDI4LDE3IEBAIG9mIHRoZXJt YWwgem9uZSBkZXZpY2UuIEUuZy4gdGhlIGdlbmVyaWMKPiA+ID4gdGhlcm1hbCBkcml2ZXIgcmVn aXN0ZXJzIG9uZSBod21vbgo+ID4gPiDCoGNsYXNzIGRldmljZSBhbmQgYnVpbGQgdGhlIGFzc29j aWF0ZWQgaHdtb24gc3lzZnMgSS9GIGZvciBhbGwKPiA+ID4gdGhlCj4gPiA+IHJlZ2lzdGVyZWQK PiA+ID4gwqBBQ1BJIHRoZXJtYWwgem9uZXMuCj4gPiA+IMKgCj4gPiA+IC0vc3lzL2NsYXNzL2h3 bW9uL2h3bW9uWzAtKl06Cj4gPiA+ICs6Ogo+ID4gPiArCj4gPiA+ICvCoMKgL3N5cy9jbGFzcy9o d21vbi9od21vblswLSpdOgo+ID4gPiDCoMKgwqDCoMKgfC0tLW5hbWU6CQkJVGhlIHR5cGUgb2Yg dGhlIHRoZXJtYWwKPiA+ID4gem9uZQo+ID4gPiBkZXZpY2VzCj4gPiA+IMKgwqDCoMKgwqB8LS0t dGVtcFsxLSpdX2lucHV0OglUaGUgY3VycmVudCB0ZW1wZXJhdHVyZSBvZgo+ID4gPiB0aGVybWFs Cj4gPiA+IHpvbmUgWzEtKl0KPiA+ID4gwqDCoMKgwqDCoHwtLS10ZW1wWzEtKl1fY3JpdGljYWw6 CVRoZSBjcml0aWNhbCB0cmlwIHBvaW50IG9mCj4gPiA+IHRoZXJtYWwgem9uZSBbMS0qXQo+ID4g PiDCoAo+ID4gPiDCoFBsZWFzZSByZWFkIERvY3VtZW50YXRpb24vaHdtb24vc3lzZnMtaW50ZXJm YWNlLnJzdCBmb3IKPiA+ID4gYWRkaXRpb25hbAo+ID4gPiBpbmZvcm1hdGlvbi4KPiA+ID4gwqAK PiA+ID4gLSoqKioqKioqKioqKioqKioqKioqKioqKioqKgo+ID4gPiAtKiBUaGVybWFsIHpvbmUg YXR0cmlidXRlcyAqCj4gPiA+IC0qKioqKioqKioqKioqKioqKioqKioqKioqKioKPiA+ID4gK1Ro ZXJtYWwgem9uZSBhdHRyaWJ1dGVzCj4gPiA+ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ID4g PiDCoAo+ID4gPiDCoHR5cGUKPiA+ID4gwqAJU3RyaW5ncyB3aGljaCByZXByZXNlbnQgdGhlIHRo ZXJtYWwgem9uZSB0eXBlLgo+ID4gPiBAQCAtMzQwLDU0ICs0NTgsNjcgQEAgbW9kZQo+ID4gPiDC oAlUaGlzIGZpbGUgZ2l2ZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGFsZ29yaXRobSB0aGF0IGlz Cj4gPiA+IGN1cnJlbnRseQo+ID4gPiDCoAltYW5hZ2luZyB0aGUgdGhlcm1hbCB6b25lLiBJdCBj YW4gYmUgZWl0aGVyIGRlZmF1bHQKPiA+ID4ga2VybmVsCj4gPiA+IGJhc2VkCj4gPiA+IMKgCWFs Z29yaXRobSBvciB1c2VyIHNwYWNlIGFwcGxpY2F0aW9uLgo+ID4gPiAtCWVuYWJsZWQJCT0gZW5h YmxlIEtlcm5lbCBUaGVybWFsCj4gPiA+IG1hbmFnZW1lbnQuCj4gPiA+IC0JZGlzYWJsZWQJPSBQ cmV2ZW50aW5nIGtlcm5lbCB0aGVybWFsIHpvbmUgZHJpdmVyCj4gPiA+IGFjdGlvbnMgdXBvbgo+ ID4gPiArCj4gPiA+ICsJZW5hYmxlZAo+ID4gPiArCQkJwqDCoGVuYWJsZSBLZXJuZWwgVGhlcm1h bCBtYW5hZ2VtZW50Lgo+ID4gPiArCWRpc2FibGVkCj4gPiA+ICsJCQnCoMKgUHJldmVudGluZyBr ZXJuZWwgdGhlcm1hbCB6b25lIGRyaXZlcgo+ID4gPiBhY3Rpb25zIHVwb24KPiA+ID4gwqAJCQnC oMKgdHJpcCBwb2ludHMgc28gdGhhdCB1c2VyIGFwcGxpY2F0aW9uCj4gPiA+IGNhbgo+ID4gPiB0 YWtlIGZ1bGwKPiA+ID4gwqAJCQnCoMKgY2hhcmdlIG9mIHRoZSB0aGVybWFsIG1hbmFnZW1lbnQu Cj4gPiA+ICsKPiA+ID4gwqAJUlcsIE9wdGlvbmFsCj4gPiA+IMKgCj4gPiA+IMKgcG9saWN5Cj4g PiA+IMKgCU9uZSBvZiB0aGUgdmFyaW91cyB0aGVybWFsIGdvdmVybm9ycyB1c2VkIGZvciBhCj4g PiA+IHBhcnRpY3VsYXIKPiA+ID4gem9uZS4KPiA+ID4gKwo+ID4gPiDCoAlSVywgUmVxdWlyZWQK PiA+ID4gwqAKPiA+ID4gwqBhdmFpbGFibGVfcG9saWNpZXMKPiA+ID4gwqAJQXZhaWxhYmxlIHRo ZXJtYWwgZ292ZXJub3JzIHdoaWNoIGNhbiBiZSB1c2VkIGZvciBhCj4gPiA+IHBhcnRpY3VsYXIg em9uZS4KPiA+ID4gKwo+ID4gPiDCoAlSTywgUmVxdWlyZWQKPiA+ID4gwqAKPiA+ID4gLXRyaXBf cG9pbnRfWzAtKl1fdGVtcAo+ID4gPiArYHRyaXBfcG9pbnRfWzAtKl1fdGVtcGAKPiA+ID4gwqAJ VGhlIHRlbXBlcmF0dXJlIGFib3ZlIHdoaWNoIHRyaXAgcG9pbnQgd2lsbCBiZSBmaXJlZC4KPiA+ ID4gKwo+ID4gPiDCoAlVbml0OiBtaWxsaWRlZ3JlZSBDZWxzaXVzCj4gPiA+ICsKPiA+ID4gwqAJ Uk8sIE9wdGlvbmFsCj4gPiA+IMKgCj4gPiA+IC10cmlwX3BvaW50X1swLSpdX3R5cGUKPiA+ID4g K2B0cmlwX3BvaW50X1swLSpdX3R5cGVgCj4gPiA+IMKgCVN0cmluZ3Mgd2hpY2ggaW5kaWNhdGUg dGhlIHR5cGUgb2YgdGhlIHRyaXAgcG9pbnQuCj4gPiA+IC0JRS5nLiBpdCBjYW4gYmUgb25lIG9m IGNyaXRpY2FsLCBob3QsIHBhc3NpdmUsIGFjdGl2ZVswLQo+ID4gPiAqXQo+ID4gPiBmb3IgQUNQ SQo+ID4gPiArCj4gPiA+ICsJRS5nLiBpdCBjYW4gYmUgb25lIG9mIGNyaXRpY2FsLCBob3QsIHBh c3NpdmUsIGBhY3RpdmVbMC0KPiA+ID4gKl1gCj4gPiA+IGZvciBBQ1BJCj4gPiA+IMKgCXRoZXJt YWwgem9uZS4KPiA+ID4gKwo+ID4gPiDCoAlSTywgT3B0aW9uYWwKPiA+ID4gwqAKPiA+ID4gLXRy aXBfcG9pbnRfWzAtKl1faHlzdAo+ID4gPiArYHRyaXBfcG9pbnRfWzAtKl1faHlzdGAKPiA+ID4g wqAJVGhlIGh5c3RlcmVzaXMgdmFsdWUgZm9yIGEgdHJpcCBwb2ludCwgcmVwcmVzZW50ZWQgYXMg YW4KPiA+ID4gaW50ZWdlcgo+ID4gPiDCoAlVbml0OiBDZWxzaXVzCj4gPiA+IMKgCVJXLCBPcHRp b25hbAo+ID4gPiDCoAo+ID4gPiAtY2RldlswLSpdCj4gPiA+ICtgY2RldlswLSpdYAo+ID4gPiDC oAlTeXNmcyBsaW5rIHRvIHRoZSB0aGVybWFsIGNvb2xpbmcgZGV2aWNlIG5vZGUgd2hlcmUgdGhl Cj4gPiA+IHN5cwo+ID4gPiBJL0YKPiA+ID4gwqAJZm9yIGNvb2xpbmcgZGV2aWNlIHRocm90dGxp bmcgY29udHJvbCByZXByZXNlbnRzLgo+ID4gPiArCj4gPiA+IMKgCVJPLCBPcHRpb25hbAo+ID4g PiDCoAo+ID4gPiAtY2RldlswLSpdX3RyaXBfcG9pbnQKPiA+ID4gLQlUaGUgdHJpcCBwb2ludCBp biB0aGlzIHRoZXJtYWwgem9uZSB3aGljaCBjZGV2WzAtKl0gaXMKPiA+ID4gYXNzb2NpYXRlZAo+ ID4gPiArYGNkZXZbMC0qXV90cmlwX3BvaW50YAo+ID4gPiArCVRoZSB0cmlwIHBvaW50IGluIHRo aXMgdGhlcm1hbCB6b25lIHdoaWNoIGBjZGV2WzAtKl1gIGlzCj4gPiA+IGFzc29jaWF0ZWQKPiA+ ID4gwqAJd2l0aDsgLTEgbWVhbnMgdGhlIGNvb2xpbmcgZGV2aWNlIGlzIG5vdCBhc3NvY2lhdGVk IHdpdGgKPiA+ID4gYW55Cj4gPiA+IHRyaXAKPiA+ID4gwqAJcG9pbnQuCj4gPiA+ICsKPiA+ID4g wqAJUk8sIE9wdGlvbmFsCj4gPiA+IMKgCj4gPiA+IC1jZGV2WzAtKl1fd2VpZ2h0Cj4gPiA+IC3C oMKgwqDCoMKgwqDCoMKgVGhlIGluZmx1ZW5jZSBvZiBjZGV2WzAtKl0gaW4gdGhpcyB0aGVybWFs IHpvbmUuIFRoaXMKPiA+ID4gdmFsdWUKPiA+ID4gLcKgwqDCoMKgwqDCoMKgwqBpcyByZWxhdGl2 ZSB0byB0aGUgcmVzdCBvZiBjb29saW5nIGRldmljZXMgaW4gdGhlCj4gPiA+IHRoZXJtYWwKPiA+ ID4gLcKgwqDCoMKgwqDCoMKgwqB6b25lLiBGb3IgZXhhbXBsZSwgaWYgYSBjb29saW5nIGRldmlj ZSBoYXMgYSB3ZWlnaHQKPiA+ID4gZG91YmxlCj4gPiA+IC3CoMKgwqDCoMKgwqDCoMKgdGhhbiB0 aGF0IG9mIG90aGVyLCBpdCdzIHR3aWNlIGFzIGVmZmVjdGl2ZSBpbiBjb29saW5nCj4gPiA+IHRo ZQo+ID4gPiAtwqDCoMKgwqDCoMKgwqDCoHRoZXJtYWwgem9uZS4KPiA+ID4gLcKgwqDCoMKgwqDC oMKgwqBSVywgT3B0aW9uYWwKPiA+ID4gK2BjZGV2WzAtKl1fd2VpZ2h0YAo+ID4gPiArCVRoZSBp bmZsdWVuY2Ugb2YgYGNkZXZbMC0qXWAgaW4gdGhpcyB0aGVybWFsIHpvbmUuIFRoaXMKPiA+ID4g dmFsdWUKPiA+ID4gKwlpcyByZWxhdGl2ZSB0byB0aGUgcmVzdCBvZiBjb29saW5nIGRldmljZXMg aW4gdGhlCj4gPiA+IHRoZXJtYWwKPiA+ID4gKwl6b25lLiBGb3IgZXhhbXBsZSwgaWYgYSBjb29s aW5nIGRldmljZSBoYXMgYSB3ZWlnaHQKPiA+ID4gZG91YmxlCj4gPiA+ICsJdGhhbiB0aGF0IG9m IG90aGVyLCBpdCdzIHR3aWNlIGFzIGVmZmVjdGl2ZSBpbiBjb29saW5nCj4gPiA+IHRoZQo+ID4g PiArCXRoZXJtYWwgem9uZS4KPiA+ID4gKwo+ID4gPiArCVJXLCBPcHRpb25hbAo+ID4gPiDCoAo+ ID4gPiDCoHBhc3NpdmUKPiA+ID4gwqAJQXR0cmlidXRlIGlzIG9ubHkgcHJlc2VudCBmb3Igem9u ZXMgaW4gd2hpY2ggdGhlIHBhc3NpdmUKPiA+ID4gY29vbGluZwo+ID4gPiBAQCAtMzk1LDggKzUy NiwxMSBAQCBwYXNzaXZlCj4gPiA+IMKgCWFuZCBjYW4gYmUgc2V0IHRvIGEgdGVtcGVyYXR1cmUg KGluIG1pbGxpZGVncmVlcykgdG8KPiA+ID4gZW5hYmxlCj4gPiA+IGEKPiA+ID4gwqAJcGFzc2l2 ZSB0cmlwIHBvaW50IGZvciB0aGUgem9uZS4gQWN0aXZhdGlvbiBpcyBkb25lIGJ5Cj4gPiA+IHBv bGxpbmcgd2l0aAo+ID4gPiDCoAlhbiBpbnRlcnZhbCBvZiAxIHNlY29uZC4KPiA+ID4gKwo+ID4g PiDCoAlVbml0OiBtaWxsaWRlZ3JlZXMgQ2Vsc2l1cwo+ID4gPiArCj4gPiA+IMKgCVZhbGlkIHZh bHVlczogMCAoZGlzYWJsZWQpIG9yIGdyZWF0ZXIgdGhhbiAxMDAwCj4gPiA+ICsKPiA+ID4gwqAJ UlcsIE9wdGlvbmFsCj4gPiA+IMKgCj4gPiA+IMKgZW11bF90ZW1wCj4gPiA+IEBAIC00MDcsMTcg KzU0MSwyMSBAQCBlbXVsX3RlbXAKPiA+ID4gwqAJdGhyZXNob2xkIGFuZCBpdHMgYXNzb2NpYXRl ZCBjb29saW5nIGFjdGlvbi4gVGhpcyBpcwo+ID4gPiB3cml0ZQo+ID4gPiBvbmx5IG5vZGUKPiA+ ID4gwqAJYW5kIHdyaXRpbmcgMCBvbiB0aGlzIG5vZGUgc2hvdWxkIGRpc2FibGUgZW11bGF0aW9u Lgo+ID4gPiDCoAlVbml0OiBtaWxsaWRlZ3JlZSBDZWxzaXVzCj4gPiA+ICsKPiA+ID4gwqAJV08s IE9wdGlvbmFsCj4gPiA+IMKgCj4gPiA+IC0JwqDCoFdBUk5JTkc6IEJlIGNhcmVmdWwgd2hpbGUg ZW5hYmxpbmcgdGhpcyBvcHRpb24gb24KPiA+ID4gcHJvZHVjdGlvbiBzeXN0ZW1zLAo+ID4gPiAt CcKgwqBiZWNhdXNlIHVzZXJsYW5kIGNhbiBlYXNpbHkgZGlzYWJsZSB0aGUgdGhlcm1hbCBwb2xp Y3kKPiA+ID4gYnkKPiA+ID4gc2ltcGx5Cj4gPiA+IC0JwqDCoGZsb29kaW5nIHRoaXMgc3lzZnMg bm9kZSB3aXRoIGxvdyB0ZW1wZXJhdHVyZSB2YWx1ZXMuCj4gPiA+ICsJwqDCoFdBUk5JTkc6Cj4g PiA+ICsJwqDCoMKgwqBCZSBjYXJlZnVsIHdoaWxlIGVuYWJsaW5nIHRoaXMgb3B0aW9uIG9uIHBy b2R1Y3Rpb24KPiA+ID4gc3lzdGVtcywKPiA+ID4gKwnCoMKgwqDCoGJlY2F1c2UgdXNlcmxhbmQg Y2FuIGVhc2lseSBkaXNhYmxlIHRoZSB0aGVybWFsCj4gPiA+IHBvbGljeQo+ID4gPiBieSBzaW1w bHkKPiA+ID4gKwnCoMKgwqDCoGZsb29kaW5nIHRoaXMgc3lzZnMgbm9kZSB3aXRoIGxvdyB0ZW1w ZXJhdHVyZQo+ID4gPiB2YWx1ZXMuCj4gPiA+IMKgCj4gPiA+IMKgc3VzdGFpbmFibGVfcG93ZXIK PiA+ID4gwqAJQW4gZXN0aW1hdGUgb2YgdGhlIHN1c3RhaW5lZCBwb3dlciB0aGF0IGNhbiBiZQo+ ID4gPiBkaXNzaXBhdGVkIGJ5Cj4gPiA+IMKgCXRoZSB0aGVybWFsIHpvbmUuIFVzZWQgYnkgdGhl IHBvd2VyIGFsbG9jYXRvciBnb3Zlcm5vci4KPiA+ID4gRm9yCj4gPiA+IC0JbW9yZSBpbmZvcm1h dGlvbiBzZWUKPiA+ID4gRG9jdW1lbnRhdGlvbi90aGVybWFsL3Bvd2VyX2FsbG9jYXRvci50eHQK PiA+ID4gKwltb3JlIGluZm9ybWF0aW9uIHNlZQo+ID4gPiBEb2N1bWVudGF0aW9uL3RoZXJtYWwv cG93ZXJfYWxsb2NhdG9yLnJzdAo+ID4gPiArCj4gPiA+IMKgCVVuaXQ6IG1pbGxpd2F0dHMKPiA+ ID4gKwo+ID4gPiDCoAlSVywgT3B0aW9uYWwKPiA+ID4gwqAKPiA+ID4gwqBrX3BvCj4gPiA+IEBA IC00MjUsNyArNTYzLDggQEAga19wbwo+ID4gPiDCoAljb250cm9sbGVyIGR1cmluZyB0ZW1wZXJh dHVyZSBvdmVyc2hvb3QuIFRlbXBlcmF0dXJlCj4gPiA+IG92ZXJzaG9vdAo+ID4gPiDCoAlpcyB3 aGVuIHRoZSBjdXJyZW50IHRlbXBlcmF0dXJlIGlzIGFib3ZlIHRoZSAiZGVzaXJlZAo+ID4gPiDC oAl0ZW1wZXJhdHVyZSIgdHJpcCBwb2ludC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlCj4gPiA+ IC0JRG9jdW1lbnRhdGlvbi90aGVybWFsL3Bvd2VyX2FsbG9jYXRvci50eHQKPiA+ID4gKwlEb2N1 bWVudGF0aW9uL3RoZXJtYWwvcG93ZXJfYWxsb2NhdG9yLnJzdAo+ID4gPiArCj4gPiA+IMKgCVJX LCBPcHRpb25hbAo+ID4gPiDCoAo+ID4gPiDCoGtfcHUKPiA+ID4gQEAgLTQzMywyMCArNTcyLDIz IEBAIGtfcHUKPiA+ID4gwqAJY29udHJvbGxlciBkdXJpbmcgdGVtcGVyYXR1cmUgdW5kZXJzaG9v dC4gVGVtcGVyYXR1cmUKPiA+ID4gdW5kZXJzaG9vdAo+ID4gPiDCoAlpcyB3aGVuIHRoZSBjdXJy ZW50IHRlbXBlcmF0dXJlIGlzIGJlbG93IHRoZSAiZGVzaXJlZAo+ID4gPiDCoAl0ZW1wZXJhdHVy ZSIgdHJpcCBwb2ludC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlCj4gPiA+IC0JRG9jdW1lbnRh dGlvbi90aGVybWFsL3Bvd2VyX2FsbG9jYXRvci50eHQKPiA+ID4gKwlEb2N1bWVudGF0aW9uL3Ro ZXJtYWwvcG93ZXJfYWxsb2NhdG9yLnJzdAo+ID4gPiArCj4gPiA+IMKgCVJXLCBPcHRpb25hbAo+ ID4gPiDCoAo+ID4gPiDCoGtfaQo+ID4gPiDCoAlUaGUgaW50ZWdyYWwgdGVybSBvZiB0aGUgcG93 ZXIgYWxsb2NhdG9yIGdvdmVybm9yJ3MgUElECj4gPiA+IMKgCWNvbnRyb2xsZXIuIFRoaXMgdGVy bSBhbGxvd3MgdGhlIFBJRCBjb250cm9sbGVyIHRvCj4gPiA+IGNvbXBlbnNhdGUKPiA+ID4gwqAJ Zm9yIGxvbmcgdGVybSBkcmlmdC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlCj4gPiA+IC0JRG9j dW1lbnRhdGlvbi90aGVybWFsL3Bvd2VyX2FsbG9jYXRvci50eHQKPiA+ID4gKwlEb2N1bWVudGF0 aW9uL3RoZXJtYWwvcG93ZXJfYWxsb2NhdG9yLnJzdAo+ID4gPiArCj4gPiA+IMKgCVJXLCBPcHRp b25hbAo+ID4gPiDCoAo+ID4gPiDCoGtfZAo+ID4gPiDCoAlUaGUgZGVyaXZhdGl2ZSB0ZXJtIG9m IHRoZSBwb3dlciBhbGxvY2F0b3IgZ292ZXJub3Incwo+ID4gPiBQSUQKPiA+ID4gwqAJY29udHJv bGxlci4gRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlCj4gPiA+IC0JRG9jdW1lbnRhdGlvbi90aGVy bWFsL3Bvd2VyX2FsbG9jYXRvci50eHQKPiA+ID4gKwlEb2N1bWVudGF0aW9uL3RoZXJtYWwvcG93 ZXJfYWxsb2NhdG9yLnJzdAo+ID4gPiArCj4gPiA+IMKgCVJXLCBPcHRpb25hbAo+ID4gPiDCoAo+ ID4gPiDCoGludGVncmFsX2N1dG9mZgo+ID4gPiBAQCAtNDU2LDggKzU5OCwxMCBAQCBpbnRlZ3Jh bF9jdXRvZmYKPiA+ID4gwqAJZXhhbXBsZSwgaWYgaW50ZWdyYWxfY3V0b2ZmIGlzIDAsIHRoZW4g dGhlIGludGVncmFsIHRlcm0KPiA+ID4gb25seQo+ID4gPiDCoAlhY2N1bXVsYXRlcyBlcnJvciB3 aGVuIHRlbXBlcmF0dXJlIGlzIGFib3ZlIHRoZSBkZXNpcmVkCj4gPiA+IMKgCXRlbXBlcmF0dXJl IHRyaXAgcG9pbnQuIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZQo+ID4gPiAtCURvY3VtZW50YXRp b24vdGhlcm1hbC9wb3dlcl9hbGxvY2F0b3IudHh0Cj4gPiA+ICsJRG9jdW1lbnRhdGlvbi90aGVy bWFsL3Bvd2VyX2FsbG9jYXRvci5yc3QKPiA+ID4gKwo+ID4gPiDCoAlVbml0OiBtaWxsaWRlZ3Jl ZSBDZWxzaXVzCj4gPiA+ICsKPiA+ID4gwqAJUlcsIE9wdGlvbmFsCj4gPiA+IMKgCj4gPiA+IMKg c2xvcGUKPiA+ID4gQEAgLTQ2NSw2ICs2MDksNyBAQCBzbG9wZQo+ID4gPiDCoAl0byBkZXRlcm1p bmUgYSBob3RzcG90IHRlbXBlcmF0dXJlIGJhc2VkIG9mZiB0aGUKPiA+ID4gc2Vuc29yJ3MKPiA+ ID4gwqAJcmF3IHJlYWRpbmdzLiBJdCBpcyB1cCB0byB0aGUgZGV2aWNlIGRyaXZlciB0byBkZXRl cm1pbmUKPiA+ID4gwqAJdGhlIHVzYWdlIG9mIHRoZXNlIHZhbHVlcy4KPiA+ID4gKwo+ID4gPiDC oAlSVywgT3B0aW9uYWwKPiA+ID4gwqAKPiA+ID4gwqBvZmZzZXQKPiA+ID4gQEAgLTQ3MiwyOCAr NjE3LDMzIEBAIG9mZnNldAo+ID4gPiDCoAl0byBkZXRlcm1pbmUgYSBob3RzcG90IHRlbXBlcmF0 dXJlIGJhc2VkIG9mZiB0aGUKPiA+ID4gc2Vuc29yJ3MKPiA+ID4gwqAJcmF3IHJlYWRpbmdzLiBJ dCBpcyB1cCB0byB0aGUgZGV2aWNlIGRyaXZlciB0byBkZXRlcm1pbmUKPiA+ID4gwqAJdGhlIHVz YWdlIG9mIHRoZXNlIHZhbHVlcy4KPiA+ID4gKwo+ID4gPiDCoAlSVywgT3B0aW9uYWwKPiA+ID4g wqAKPiA+ID4gLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqCj4gPiA+IC0qIENvb2xpbmcg ZGV2aWNlIGF0dHJpYnV0ZXMgKgo+ID4gPiAtKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK PiA+ID4gK0Nvb2xpbmcgZGV2aWNlIGF0dHJpYnV0ZXMKPiA+ID4gKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KPiA+ID4gwqAKPiA+ID4gwqB0eXBlCj4gPiA+IMKgCVN0cmluZyB3aGljaCByZXBy ZXNlbnRzIHRoZSB0eXBlIG9mIGRldmljZSwgZS5nOgo+ID4gPiArCj4gPiA+IMKgCS0gZm9yIGdl bmVyaWMgQUNQSTogc2hvdWxkIGJlICJGYW4iLCAiUHJvY2Vzc29yIiBvcgo+ID4gPiAiTENEIgo+ ID4gPiDCoAktIGZvciBtZW1vcnkgY29udHJvbGxlciBkZXZpY2Ugb24gaW50ZWxfbWVubG93IHBs YXRmb3JtOgo+ID4gPiDCoAnCoMKgc2hvdWxkIGJlICJNZW1vcnkgY29udHJvbGxlciIuCj4gPiA+ ICsKPiA+ID4gwqAJUk8sIFJlcXVpcmVkCj4gPiA+IMKgCj4gPiA+IMKgbWF4X3N0YXRlCj4gPiA+ IMKgCVRoZSBtYXhpbXVtIHBlcm1pc3NpYmxlIGNvb2xpbmcgc3RhdGUgb2YgdGhpcyBjb29saW5n Cj4gPiA+IGRldmljZS4KPiA+ID4gKwo+ID4gPiDCoAlSTywgUmVxdWlyZWQKPiA+ID4gwqAKPiA+ ID4gwqBjdXJfc3RhdGUKPiA+ID4gwqAJVGhlIGN1cnJlbnQgY29vbGluZyBzdGF0ZSBvZiB0aGlz IGNvb2xpbmcgZGV2aWNlLgo+ID4gPiDCoAlUaGUgdmFsdWUgY2FuIGFueSBpbnRlZ2VyIG51bWJl cnMgYmV0d2VlbiAwIGFuZAo+ID4gPiBtYXhfc3RhdGU6Cj4gPiA+ICsKPiA+ID4gwqAJLSBjdXJf c3RhdGUgPT0gMCBtZWFucyBubyBjb29saW5nCj4gPiA+IMKgCS0gY3VyX3N0YXRlID09IG1heF9z dGF0ZSBtZWFucyB0aGUgbWF4aW11bSBjb29saW5nLgo+ID4gPiArCj4gPiA+IMKgCVJXLCBSZXF1 aXJlZAo+ID4gPiDCoAo+ID4gPiDCoHN0YXRzL3Jlc2V0Cj4gPiA+IEBAIC01MDgsOSArNjU4LDEx IEBAIHN0YXRzL3RpbWVfaW5fc3RhdGVfbXM6Cj4gPiA+IMKgCXVuaXRzIGhlcmUgaXMgMTBtUyAo c2ltaWxhciB0byBvdGhlciB0aW1lIGV4cG9ydGVkIGluCj4gPiA+IC9wcm9jKS4KPiA+ID4gwqAJ Uk8sIFJlcXVpcmVkCj4gPiA+IMKgCj4gPiA+ICsKPiA+ID4gwqBzdGF0cy90b3RhbF90cmFuczoK PiA+ID4gwqAJQSBzaW5nbGUgcG9zaXRpdmUgdmFsdWUgc2hvd2luZyB0aGUgdG90YWwgbnVtYmVy IG9mCj4gPiA+IHRpbWVzCj4gPiA+IHRoZSBzdGF0ZSBvZiBhCj4gPiA+IMKgCWNvb2xpbmcgZGV2 aWNlIGlzIGNoYW5nZWQuCj4gPiA+ICsKPiA+ID4gwqAJUk8sIFJlcXVpcmVkCj4gPiA+IMKgCj4g PiA+IMKgc3RhdHMvdHJhbnNfdGFibGU6Cj4gPiA+IEBAIC01MjIsNiArNjc0LDcgQEAgc3RhdHMv dHJhbnNfdGFibGU6Cj4gPiA+IMKgCVJPLCBSZXF1aXJlZAo+ID4gPiDCoAo+ID4gPiDCoDMuIEEg c2ltcGxlIGltcGxlbWVudGF0aW9uCj4gPiA+ICs9PT09PT09PT09PT09PT09PT09PT09PT09PQo+ ID4gPiDCoAo+ID4gPiDCoEFDUEkgdGhlcm1hbCB6b25lIG1heSBzdXBwb3J0IG11bHRpcGxlIHRy aXAgcG9pbnRzIGxpa2UKPiA+ID4gY3JpdGljYWwsCj4gPiA+IGhvdCwKPiA+ID4gwqBwYXNzaXZl LCBhY3RpdmUuIElmIGFuIEFDUEkgdGhlcm1hbCB6b25lIHN1cHBvcnRzIGNyaXRpY2FsLAo+ID4g PiBwYXNzaXZlLAo+ID4gPiBAQCAtNTMyLDExICs2ODUsMTAgQEAgdGhlcm1hbF9jb29saW5nX2Rl dmljZS4gQm90aCBhcmUgY29uc2lkZXJlZAo+ID4gPiB0bwo+ID4gPiBoYXZlIHRoZSBzYW1lCj4g PiA+IMKgZWZmZWN0aXZlbmVzcyBpbiBjb29saW5nIHRoZSB0aGVybWFsIHpvbmUuCj4gPiA+IMKg Cj4gPiA+IMKgSWYgdGhlIHByb2Nlc3NvciBpcyBsaXN0ZWQgaW4gX1BTTCBtZXRob2QsIGFuZCB0 aGUgZmFuIGlzIGxpc3RlZAo+ID4gPiBpbgo+ID4gPiBfQUwwCj4gPiA+IC1tZXRob2QsIHRoZSBz eXMgSS9GIHN0cnVjdHVyZSB3aWxsIGJlIGJ1aWx0IGxpa2UgdGhpczoKPiA+ID4gK21ldGhvZCwg dGhlIHN5cyBJL0Ygc3RydWN0dXJlIHdpbGwgYmUgYnVpbHQgbGlrZSB0aGlzOjoKPiA+ID4gwqAK PiA+ID4gLS9zeXMvY2xhc3MvdGhlcm1hbDoKPiA+ID4gLQo+ID4gPiAtfHRoZXJtYWxfem9uZTE6 Cj4gPiA+ICsgL3N5cy9jbGFzcy90aGVybWFsOgo+ID4gPiArwqDCoHx0aGVybWFsX3pvbmUxOgo+ ID4gPiDCoMKgwqDCoMKgfC0tLXR5cGU6CQkJYWNwaXR6Cj4gPiA+IMKgwqDCoMKgwqB8LS0tdGVt cDoJCQkzNzAwMAo+ID4gPiDCoMKgwqDCoMKgfC0tLW1vZGU6CQkJZW5hYmxlZAo+ID4gPiBAQCAt NTU3LDI0ICs3MDksMjQgQEAgbWV0aG9kLCB0aGUgc3lzIEkvRiBzdHJ1Y3R1cmUgd2lsbCBiZSBi dWlsdAo+ID4gPiBsaWtlIHRoaXM6Cj4gPiA+IMKgwqDCoMKgwqB8LS0tY2RldjFfdHJpcF9wb2lu dDoJMgkvKiBjZGV2MSBjYW4gYmUgdXNlZAo+ID4gPiBmb3IKPiA+ID4gYWN0aXZlWzBdKi8KPiA+ ID4gwqDCoMKgwqDCoHwtLS1jZGV2MV93ZWlnaHQ6wqDCoMKgwqDCoMKgwqDCoMKgwqDCoDEwMjQK PiA+ID4gwqAKPiA+ID4gLXxjb29saW5nX2RldmljZTA6Cj4gPiA+ICvCoMKgfGNvb2xpbmdfZGV2 aWNlMDoKPiA+ID4gwqDCoMKgwqDCoHwtLS10eXBlOgkJCVByb2Nlc3Nvcgo+ID4gPiDCoMKgwqDC oMKgfC0tLW1heF9zdGF0ZToJCTgKPiA+ID4gwqDCoMKgwqDCoHwtLS1jdXJfc3RhdGU6CQkwCj4g PiA+IMKgCj4gPiA+IC18Y29vbGluZ19kZXZpY2UzOgo+ID4gPiArwqDCoHxjb29saW5nX2Rldmlj ZTM6Cj4gPiA+IMKgwqDCoMKgwqB8LS0tdHlwZToJCQlGYW4KPiA+ID4gwqDCoMKgwqDCoHwtLS1t YXhfc3RhdGU6CQkyCj4gPiA+IMKgwqDCoMKgwqB8LS0tY3VyX3N0YXRlOgkJMAo+ID4gPiDCoAo+ ID4gPiAtL3N5cy9jbGFzcy9od21vbjoKPiA+ID4gLQo+ID4gPiAtfGh3bW9uMDoKPiA+ID4gKyAv c3lzL2NsYXNzL2h3bW9uOgo+ID4gPiArwqDCoHxod21vbjA6Cj4gPiA+IMKgwqDCoMKgwqB8LS0t bmFtZToJCQlhY3BpdHoKPiA+ID4gwqDCoMKgwqDCoHwtLS10ZW1wMV9pbnB1dDoJCTM3MDAwCj4g PiA+IMKgwqDCoMKgwqB8LS0tdGVtcDFfY3JpdDoJCTEwMDAwMAo+ID4gPiDCoAo+ID4gPiDCoDQu IEV2ZW50IE5vdGlmaWNhdGlvbgo+ID4gPiArPT09PT09PT09PT09PT09PT09PT09Cj4gPiA+IMKg Cj4gPiA+IMKgVGhlIGZyYW1ld29yayBpbmNsdWRlcyBhIHNpbXBsZSBub3RpZmljYXRpb24gbWVj aGFuaXNtLCBpbiB0aGUKPiA+ID4gZm9ybQo+ID4gPiBvZiBhCj4gPiA+IMKgbmV0bGluayBldmVu dC4gTmV0bGluayBzb2NrZXQgaW5pdGlhbGl6YXRpb24gaXMgZG9uZSBkdXJpbmcgdGhlCj4gPiA+ IF9pbml0Xwo+ID4gPiBAQCAtNTg3LDIxICs3MzksMjggQEAgZXZlbnQgd2lsbCBiZSBvbmUgb2Y6 e1RIRVJNQUxfQVVYMCwKPiA+ID4gVEhFUk1BTF9BVVgxLCBUSEVSTUFMX0NSSVRJQ0FMLAo+ID4g PiDCoFRIRVJNQUxfREVWX0ZBVUxUfS4gTm90aWZpY2F0aW9uIGNhbiBiZSBzZW50IHdoZW4gdGhl IGN1cnJlbnQKPiA+ID4gdGVtcGVyYXR1cmUKPiA+ID4gwqBjcm9zc2VzIGFueSBvZiB0aGUgY29u ZmlndXJlZCB0aHJlc2hvbGRzLgo+ID4gPiDCoAo+ID4gPiAtNS4gRXhwb3J0IFN5bWJvbCBBUElz Ogo+ID4gPiArNS4gRXhwb3J0IFN5bWJvbCBBUElzCj4gPiA+ICs9PT09PT09PT09PT09PT09PT09 PT0KPiA+ID4gKwo+ID4gPiArNS4xLiBnZXRfdHpfdHJlbmQKPiA+ID4gKy0tLS0tLS0tLS0tLS0t LS0tCj4gPiA+IMKgCj4gPiA+IC01LjE6IGdldF90el90cmVuZDoKPiA+ID4gwqBUaGlzIGZ1bmN0 aW9uIHJldHVybnMgdGhlIHRyZW5kIG9mIGEgdGhlcm1hbCB6b25lLCBpLmUgdGhlIHJhdGUKPiA+ ID4gb2YKPiA+ID4gY2hhbmdlCj4gPiA+IMKgb2YgdGVtcGVyYXR1cmUgb2YgdGhlIHRoZXJtYWwg em9uZS4gSWRlYWxseSwgdGhlIHRoZXJtYWwgc2Vuc29yCj4gPiA+IGRyaXZlcnMKPiA+ID4gwqBh cmUgc3VwcG9zZWQgdG8gaW1wbGVtZW50IHRoZSBjYWxsYmFjay4gSWYgdGhleSBkb24ndCwgdGhl Cj4gPiA+IHRoZXJtYWwKPiA+ID4gwqBmcmFtZXdvcmsgY2FsY3VsYXRlZCB0aGUgdHJlbmQgYnkg Y29tcGFyaW5nIHRoZSBwcmV2aW91cyBhbmQgdGhlCj4gPiA+IGN1cnJlbnQKPiA+ID4gwqB0ZW1w ZXJhdHVyZSB2YWx1ZXMuCj4gPiA+IMKgCj4gPiA+IC01LjI6Z2V0X3RoZXJtYWxfaW5zdGFuY2U6 Cj4gPiA+ICs1LjIuIGdldF90aGVybWFsX2luc3RhbmNlCj4gPiA+ICstLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCj4gPiA+ICsKPiA+ID4gwqBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHRoZXJt YWxfaW5zdGFuY2UgY29ycmVzcG9uZGluZyB0byBhCj4gPiA+IGdpdmVuCj4gPiA+IMKge3RoZXJt YWxfem9uZSwgY29vbGluZ19kZXZpY2UsIHRyaXBfcG9pbnR9IGNvbWJpbmF0aW9uLiBSZXR1cm5z Cj4gPiA+IE5VTEwKPiA+ID4gwqBpZiBzdWNoIGFuIGluc3RhbmNlIGRvZXMgbm90IGV4aXN0Lgo+ ID4gPiDCoAo+ID4gPiAtNS4zOnRoZXJtYWxfbm90aWZ5X2ZyYW1ld29yazoKPiA+ID4gKzUuMy4g dGhlcm1hbF9ub3RpZnlfZnJhbWV3b3JrCj4gPiA+ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQo+ID4gPiArCj4gPiA+IMKgVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSB0cmlwIGV2ZW50 cyBmcm9tIHNlbnNvciBkcml2ZXJzLiBJdAo+ID4gPiBzdGFydHMKPiA+ID4gwqB0aHJvdHRsaW5n IHRoZSBjb29saW5nIGRldmljZXMgYWNjb3JkaW5nIHRvIHRoZSBwb2xpY3kKPiA+ID4gY29uZmln dXJlZC4KPiA+ID4gwqBGb3IgQ1JJVElDQUwgYW5kIEhPVCB0cmlwIHBvaW50cywgdGhpcyBub3Rp ZmllcyB0aGUgcmVzcGVjdGl2ZQo+ID4gPiBkcml2ZXJzLAo+ID4gPiBAQCAtNjA5LDEyICs3Njgs MTUgQEAgYW5kIGRvZXMgYWN0dWFsIHRocm90dGxpbmcgZm9yIG90aGVyIHRyaXAKPiA+ID4gcG9p bnRzIGkuZSBBQ1RJVkUgYW5kIFBBU1NJVkUuCj4gPiA+IMKgVGhlIHRocm90dGxpbmcgcG9saWN5 IGlzIGJhc2VkIG9uIHRoZSBjb25maWd1cmVkIHBsYXRmb3JtIGRhdGE7Cj4gPiA+IGlmCj4gPiA+ IG5vCj4gPiA+IMKgcGxhdGZvcm0gZGF0YSBpcyBwcm92aWRlZCwgdGhpcyB1c2VzIHRoZSBzdGVw X3dpc2UgdGhyb3R0bGluZwo+ID4gPiBwb2xpY3kuCj4gPiA+IMKgCj4gPiA+IC01LjQ6dGhlcm1h bF9jZGV2X3VwZGF0ZToKPiA+ID4gKzUuNC4gdGhlcm1hbF9jZGV2X3VwZGF0ZQo+ID4gPiArLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gPiA+ICsKPiA+ID4gwqBUaGlzIGZ1bmN0aW9uIHNlcnZl cyBhcyBhbiBhcmJpdHJhdG9yIHRvIHNldCB0aGUgc3RhdGUgb2YgYQo+ID4gPiBjb29saW5nCj4g PiA+IMKgZGV2aWNlLiBJdCBzZXRzIHRoZSBjb29saW5nIGRldmljZSB0byB0aGUgZGVlcGVzdCBj b29saW5nIHN0YXRlCj4gPiA+IGlmCj4gPiA+IMKgcG9zc2libGUuCj4gPiA+IMKgCj4gPiA+IC02 LiB0aGVybWFsX2VtZXJnZW5jeV9wb3dlcm9mZjoKPiA+ID4gKzYuIHRoZXJtYWxfZW1lcmdlbmN5 X3Bvd2Vyb2ZmCj4gPiA+ICs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo+ID4gPiDCoAo+ ID4gPiDCoE9uIGFuIGV2ZW50IG9mIGNyaXRpY2FsIHRyaXAgdGVtcGVyYXR1cmUgY3Jvc3Npbmcu IFRoZXJtYWwKPiA+ID4gZnJhbWV3b3JrCj4gPiA+IMKgYWxsb3dzIHRoZSBzeXN0ZW0gdG8gc2h1 dGRvd24gZ3JhY2VmdWxseSBieSBjYWxsaW5nCj4gPiA+IG9yZGVybHlfcG93ZXJvZmYoKS4KPiA+ ID4gZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGhlcm1hbC94ODZfcGtnX3RlbXBlcmF0dXJl X3RoZXJtYWwKPiA+ID4gYi9Eb2N1bWVudGF0aW9uL3RoZXJtYWwveDg2X3BrZ190ZW1wZXJhdHVy ZV90aGVybWFsLnJzdAo+ID4gPiBzaW1pbGFyaXR5IGluZGV4IDgwJQo+ID4gPiByZW5hbWUgZnJv bSBEb2N1bWVudGF0aW9uL3RoZXJtYWwveDg2X3BrZ190ZW1wZXJhdHVyZV90aGVybWFsCj4gPiA+ IHJlbmFtZSB0byBEb2N1bWVudGF0aW9uL3RoZXJtYWwveDg2X3BrZ190ZW1wZXJhdHVyZV90aGVy bWFsLnJzdAo+ID4gPiBpbmRleCAxN2EzYTRjMGEwY2EuLmYxMzRkYmQzZjVhOSAxMDA2NDQKPiA+ ID4gLS0tIGEvRG9jdW1lbnRhdGlvbi90aGVybWFsL3g4Nl9wa2dfdGVtcGVyYXR1cmVfdGhlcm1h bAo+ID4gPiArKysgYi9Eb2N1bWVudGF0aW9uL3RoZXJtYWwveDg2X3BrZ190ZW1wZXJhdHVyZV90 aGVybWFsLnJzdAo+ID4gPiBAQCAtMSwxOSArMSwyMyBAQAo+ID4gPiArPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KPiA+ID4gwqBLZXJuZWwgZHJpdmVyOiB4ODZfcGtnX3RlbXBf dGhlcm1hbAo+ID4gPiAtPT09PT09PT09PT09PT09PT09PQo+ID4gPiArPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KPiA+ID4gwqAKPiA+ID4gwqBTdXBwb3J0ZWQgY2hpcHM6Cj4g PiA+ICsKPiA+ID4gwqAqIHg4Njogd2l0aCBwYWNrYWdlIGxldmVsIHRoZXJtYWwgbWFuYWdlbWVu dAo+ID4gPiArCj4gPiA+IMKgKFZlcmlmeSB1c2luZzogQ1BVSUQuMDZIOkVBWFtiaXQgNl0gPTEp Cj4gPiA+IMKgCj4gPiA+IMKgQXV0aG9yczogU3Jpbml2YXMgUGFuZHJ1dmFkYSA8c3Jpbml2YXMu cGFuZHJ1dmFkYUBsaW51eC5pbnRlbC5jbwo+ID4gPiBtPgo+ID4gPiDCoAo+ID4gPiDCoFJlZmVy ZW5jZQo+ID4gPiAtLS0tCj4gPiA+ICstLS0tLS0tLS0KPiA+ID4gKwo+ID4gPiDCoEludGVswq4g NjQgYW5kIElBLTMyIEFyY2hpdGVjdHVyZXMgU29mdHdhcmUgRGV2ZWxvcGVy4oCZcyBNYW51YWwK PiA+ID4gKEphbiwKPiA+ID4gMjAxMyk6Cj4gPiA+IMKgQ2hhcHRlciAxNC42OiBQQUNLQUdFIExF VkVMIFRIRVJNQUwgTUFOQUdFTUVOVAo+ID4gPiDCoAo+ID4gPiDCoERlc2NyaXB0aW9uCj4gPiA+ IC0tLS0tLS0tLS0KPiA+ID4gKy0tLS0tLS0tLS0tCj4gPiA+IMKgCj4gPiA+IMKgVGhpcyBkcml2 ZXIgcmVnaXN0ZXIgQ1BVIGRpZ2l0YWwgdGVtcGVyYXR1cmUgcGFja2FnZSBsZXZlbAo+ID4gPiBz ZW5zb3IgYXMKPiA+ID4gYSB0aGVybWFsCj4gPiA+IMKgem9uZSB3aXRoIG1heGltdW0gdHdvIHVz ZXIgbW9kZSBjb25maWd1cmFibGUgdHJpcCBwb2ludHMuIE51bWJlcgo+ID4gPiBvZgo+ID4gPiB0 cmlwIHBvaW50cwo+ID4gPiBAQCAtMjUsMjMgKzI5LDI3IEBAIHRha2UgYW55IGFjdGlvbiB0byBj b250cm9sIHRlbXBlcmF0dXJlLgo+ID4gPiDCoFRocmVzaG9sZCBtYW5hZ2VtZW50Cj4gPiA+IMKg LS0tLS0tLS0tLS0tLS0tLS0tLS0KPiA+ID4gwqBFYWNoIHBhY2thZ2Ugd2lsbCByZWdpc3RlciBh cyBhIHRoZXJtYWwgem9uZSB1bmRlcgo+ID4gPiAvc3lzL2NsYXNzL3RoZXJtYWwuCj4gPiA+IC1F eGFtcGxlOgo+ID4gPiAtL3N5cy9jbGFzcy90aGVybWFsL3RoZXJtYWxfem9uZTEKPiA+ID4gKwo+ ID4gPiArRXhhbXBsZTo6Cj4gPiA+ICsKPiA+ID4gKwkvc3lzL2NsYXNzL3RoZXJtYWwvdGhlcm1h bF96b25lMQo+ID4gPiDCoAo+ID4gPiDCoFRoaXMgY29udGFpbnMgdHdvIHRyaXAgcG9pbnRzOgo+ ID4gPiArCj4gPiA+IMKgLSB0cmlwX3BvaW50XzBfdGVtcAo+ID4gPiDCoC0gdHJpcF9wb2ludF8x X3RlbXAKPiA+ID4gwqAKPiA+ID4gwqBVc2VyIGNhbiBzZXQgYW55IHRlbXBlcmF0dXJlIGJldHdl ZW4gMCB0byBUSi1NYXggdGVtcGVyYXR1cmUuCj4gPiA+IFRlbXBlcmF0dXJlIHVuaXRzCj4gPiA+ IC1hcmUgaW4gbWlsbGktZGVncmVlIENlbHNpdXMuIFJlZmVyIHRvCj4gPiA+ICJEb2N1bWVudGF0 aW9uL3RoZXJtYWwvc3lzZnMtCj4gPiA+IGFwaS50eHQiIGZvcgo+ID4gPiArYXJlIGluIG1pbGxp LWRlZ3JlZSBDZWxzaXVzLiBSZWZlciB0bwo+ID4gPiAiRG9jdW1lbnRhdGlvbi90aGVybWFsL3N5 c2ZzLQo+ID4gPiBhcGkucnN0IiBmb3IKPiA+ID4gwqB0aGVybWFsIHN5cy1mcyBkZXRhaWxzLgo+ ID4gPiDCoAo+ID4gPiDCoEFueSB2YWx1ZSBvdGhlciB0aGFuIDAgaW4gdGhlc2UgdHJpcCBwb2lu dHMsIGNhbiB0cmlnZ2VyIHRoZXJtYWwKPiA+ID4gbm90aWZpY2F0aW9ucy4KPiA+ID4gwqBTZXR0 aW5nIDAsIHN0b3BzIHNlbmRpbmcgdGhlcm1hbCBub3RpZmljYXRpb25zLgo+ID4gPiDCoAo+ID4g PiAtVGhlcm1hbCBub3RpZmljYXRpb25zOiBUbyBnZXQga29iamVjdC11ZXZlbnQgbm90aWZpY2F0 aW9ucywgc2V0Cj4gPiA+IHRoZQo+ID4gPiB0aGVybWFsIHpvbmUKPiA+ID4gLXBvbGljeSB0byAi dXNlcl9zcGFjZSIuIEZvciBleGFtcGxlOiBlY2hvIC1uICJ1c2VyX3NwYWNlIiA+Cj4gPiA+IHBv bGljeQo+ID4gPiAtCj4gPiA+IC0KPiA+ID4gK1RoZXJtYWwgbm90aWZpY2F0aW9uczoKPiA+ID4g K1RvIGdldCBrb2JqZWN0LXVldmVudCBub3RpZmljYXRpb25zLCBzZXQgdGhlIHRoZXJtYWwgem9u ZQo+ID4gPiArcG9saWN5IHRvICJ1c2VyX3NwYWNlIi4KPiA+ID4gwqAKPiA+ID4gK0ZvciBleGFt cGxlOjoKPiA+ID4gwqAKPiA+ID4gKwllY2hvIC1uICJ1c2VyX3NwYWNlIiA+IHBvbGljeQo+ID4g PiBkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwo+ID4gPiBpbmRleCBkOWUy MTRmNjhlNTIuLmIyMjU0YmM4ZTQ5NSAxMDA2NDQKPiA+ID4gLS0tIGEvTUFJTlRBSU5FUlMKPiA+ ID4gKysrIGIvTUFJTlRBSU5FUlMKPiA+ID4gQEAgLTE1Njg3LDcgKzE1Njg3LDcgQEAgTToJVmly ZXNoIEt1bWFyIDx2aXJlc2gua3VtYXJAbGluYQo+ID4gPiByby5vwqDCoAo+ID4gPiByZz7CoMKg Cj4gPiA+IMKgTToJSmF2aSBNZXJpbm8gPGphdmkubWVyaW5vQGtlcm5lbC5vcmc+Cj4gPiA+IMKg TDoJbGludXgtcG1Admdlci5rZXJuZWwub3JnCj4gPiA+IMKgUzoJU3VwcG9ydGVkCj4gPiA+IC1G OglEb2N1bWVudGF0aW9uL3RoZXJtYWwvY3B1LWNvb2xpbmctYXBpLnR4dAo+ID4gPiArRjoJRG9j dW1lbnRhdGlvbi90aGVybWFsL2NwdS1jb29saW5nLWFwaS5yc3QKPiA+ID4gwqBGOglkcml2ZXJz L3RoZXJtYWwvY3B1X2Nvb2xpbmcuYwo+ID4gPiDCoEY6CWluY2x1ZGUvbGludXgvY3B1X2Nvb2xp bmcuaAo+ID4gPiDCoAo+ID4gPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90aGVybWFsLmgg Yi9pbmNsdWRlL2xpbnV4L3RoZXJtYWwuaAo+ID4gPiBpbmRleCAxNWE0Y2E1ZDcwOTkuLjY4MTA0 N2Y4Y2MwNSAxMDA2NDQKPiA+ID4gLS0tIGEvaW5jbHVkZS9saW51eC90aGVybWFsLmgKPiA+ID4g KysrIGIvaW5jbHVkZS9saW51eC90aGVybWFsLmgKPiA+ID4gQEAgLTI1MSw3ICsyNTEsNyBAQCBz dHJ1Y3QgdGhlcm1hbF9iaW5kX3BhcmFtcyB7Cj4gPiA+IMKgCcKgKiBwbGF0Zm9ybSBjaGFyYWN0 ZXJpemF0aW9uLiBUaGlzIHZhbHVlIGlzIHJlbGF0aXZlIHRvCj4gPiA+IHRoZQo+ID4gPiDCoAnC oCogcmVzdCBvZiB0aGUgd2VpZ2h0cyBzbyBhIGNvb2xpbmcgZGV2aWNlIHdob3NlIHdlaWdodAo+ ID4gPiBpcwo+ID4gPiDCoAnCoCogZG91YmxlIHRoYXQgb2YgYW5vdGhlciBjb29saW5nIGRldmlj ZSBpcyB0d2ljZSBhcwo+ID4gPiAtCcKgKiBlZmZlY3RpdmUuIFNlZSBEb2N1bWVudGF0aW9uL3Ro ZXJtYWwvc3lzZnMtYXBpLnR4dAo+ID4gPiBmb3IKPiA+ID4gbW9yZQo+ID4gPiArCcKgKiBlZmZl Y3RpdmUuIFNlZSBEb2N1bWVudGF0aW9uL3RoZXJtYWwvc3lzZnMtYXBpLnJzdAo+ID4gPiBmb3IK PiA+ID4gbW9yZQo+ID4gPiDCoAnCoCogaW5mb3JtYXRpb24uCj4gPiA+IMKgCcKgKi8KPiA+ID4g wqAJaW50IHdlaWdodDsKPiA+ID4gQEAgLTI1OSw3ICsyNTksNyBAQCBzdHJ1Y3QgdGhlcm1hbF9i aW5kX3BhcmFtcyB7Cj4gPiA+IMKgCS8qCj4gPiA+IMKgCcKgKiBUaGlzIGlzIGEgYml0IG1hc2sg dGhhdCBnaXZlcyB0aGUgYmluZGluZyByZWxhdGlvbgo+ID4gPiBiZXR3ZWVuIHRoaXMKPiA+ID4g wqAJwqAqIHRoZXJtYWwgem9uZSBhbmQgY2RldiwgZm9yIGEgcGFydGljdWxhciB0cmlwIHBvaW50 Lgo+ID4gPiAtCcKgKiBTZWUgRG9jdW1lbnRhdGlvbi90aGVybWFsL3N5c2ZzLWFwaS50eHQgZm9y IG1vcmUKPiA+ID4gaW5mb3JtYXRpb24uCj4gPiA+ICsJwqAqIFNlZSBEb2N1bWVudGF0aW9uL3Ro ZXJtYWwvc3lzZnMtYXBpLnJzdCBmb3IgbW9yZQo+ID4gPiBpbmZvcm1hdGlvbi4KPiA+ID4gwqAJ wqAqLwo+ID4gPiDCoAlpbnQgdHJpcF9tYXNrOwo+ID4gPiDCoMKgwqAKPiAKPiAKPiBUaGFua3Ms Cj4gTWF1cm8KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5m cmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xp bnV4LWFybS1rZXJuZWwK