Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 28 Jan 2015 15:16:48 +0100
From:      Svatopluk Kraus <onwahe@gmail.com>
To:        freebsd-arm@freebsd.org
Subject:   Re: interrupt framework
Message-ID:  <CAFHCsPVhRnRXhLF6S-%2BDL5mM22X0CkMmKOkkuo0DOMShkEM=fQ@mail.gmail.com>
In-Reply-To: <CAFHCsPX5kG_v-F-cjpyMQsT_b386eok=mqWW0%2BEUb_4-_1Otnw@mail.gmail.com>
References:  <CAFHCsPX5kG_v-F-cjpyMQsT_b386eok=mqWW0%2BEUb_4-_1Otnw@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
--001a11c13d0eaf1b20050db7058a
Content-Type: text/plain; charset=UTF-8

New ARM interrupt framework is implemented fully now. At this moment,
only GIC interrupt controller is working with this framework and it
was tested on pandaboard. I'm going to change all other ARM interrupt
controllers in source tree, however, I will else be able to test only
the ones related to BBB and Raspberry Pi.

The testing was done only according to old framework at this moment.
The new features like fast interrupt handling, cascaded controllers,
explicit interrupt binding and describing were not tested.

However, interrupts are now shuffled among all running CPUs by
round-robin method according to x86 interrupt framework. Nevertheless,
it is just a proof of concept. The way on which CPU(s) an interrupt
will be served should be changed as on capable controllers the not
bound interrupt could be served on all running CPUs in controller'c
CPU cluster. The decision should be always taken by controller (with
help of framework if needed).

Thus there is still some work on the framework, but I do not suppose
any drastic changes. Therefore it is not cleaned up now. It includes
changes done in other files too.

---------------------------------------

Now, a few words about new framework which have not been said yet. It
lays between system and controllers. Communication between system and
framework is done by an interrupt number which is opaque to
controllers and more like resource handle. AFAIK there are five bus
methods:

BUS_CONFIG_INTR,
BUS_SETUP_INTR,
BUS_BIND_INTR,
BUS_DESCRIBE_INTR
BUS_TEARDOWN_INTR.

The order in which I wrote them is much the order in which should be
called by a consumer. However, the simplest consumer calls
BUS_SETUP_INTR only. New framework is more strict than man pages are
in that an interrupt configuration is not permited on active (enabled)
interrupt. In other words, BUS_CONFIG_INTR must be called before
BUS_SETUP_INTR. BUS_BIND_INTR and BUS_DESCRIBE_INTR are connected to
specific handler (MI interrupt framework) so they must be called after
BUS_SETUP_INTR. BUS_BIND_INTR binds interrupt's ithread if exists too
and BUS_DESCRIBE_INTR describes associated handler. Of course, the
order of these two methods can be switched.

Communication between framework and a controller is done by an
interrupt source (ISRC) which is now made public. It makes an access
simpler for controllers, but if there will be many controllers (on
more arch possibly), it makes framework modifications harder. So this
is still opened question: privite or public? However, for now it's not
problem to switch from one way to another. There are six main pic
methods:

PIC_REGISTER,
PIC_ENABLE_INTR,
PIC_ENABLE_SOURCE,
PIC_DISABLE_SOURCE,
PIC_DISABLE_INTR,
PIC_UNREGISTER,

three suplementary methods:

PIC_POST_FILTER,
PIC_PRE_ITHREAD,
PIC_POST_ITHREAD,

and three SMP methods:

PIC_BIND,
PIC_IPI_SEND,
PIC_INIT_SECONDARY.

As was said before, an ISRC is created by some mapping function which
provides description of the source. This can happen before ISRC's
controller is presented in system. So the creation of ISRC is
independent on related controller. Provided description must be well
known for that controller while it's opaque for framework except one
thing. Each mapping fuction must provide an opaque key to ISRC which
identificates a controller. Likewise, each controller must register
itself to framework with its opaque key.

There are two mapping function in the framework now:

u_int arm_namespace_map_irq(device_t dev, uint16_t type, uint16_t num);
u_int arm_fdt_map_irq(phandle_t node, pcell_t *cells, u_int ncells);

Thus ISRC is not connected to related controller at the beginning and
must be registered (mapped) to it later. It's done by PIC_REGISTER,
but before that a related controller (if not known already) must be
found according to saved key. Then in PIC_REGISTER, a controller
should evaluate provided ISRC desription and if recognized, do any
allocation of related data and save ISRC inside itself for interrupt
managing reason.

When ISRC is going to be enabled, PIC_ENABLE_INTR and
PIC_ENABLE_SOURCE are called. In PIC_ENABLE_INTR, a controller is
supposed to prepare everything for real enabling of related interrupt.
It means doing configuration, binding, whatever is needed.
PIC_ENABLE_SOURCE should be simple unmasking of related interrupt and
it's called repeatedly during interrupt dispaching.

Likewise PIC_DISABLE_SOURCE should be simple masking of related
interrupt, PIC_DISABLE_INTR should clean up, and PIC_UNREGISTER should
clear any evidence about.

While PIC_REGISTER and PIC_UNREGISTER are called without framework
locking and it's controller's resposibility to ensure atomicity of
registration process, the other four methods are called with framework
locking. It has simple reason as a controller is supposed to do all
hard work for an ISRC (allocation) in PIC_REGISTER and PIC_UNREGISTER.

The suplementary methods are presented due to using of MI interrupt
framework and should be tailored exactly for its needs.

The using of SMP methods are obvious. The IPIs are setup on a
controller by same PIC_REGISTER method as standard interrupts with use
of namespace mapping functions. The cpu argument passed to PIC_BIND is
an integer (not cpuset_t) as MI interface binding methods works only
with single cpu.

---------------------------------------

Finally a few words about removable controllers. It should be no
problem as we are in kernel. At least as long as everybody will act
correctly. Suprisingly, it will be only problem of interrupt counting
because of the way how sysctl and DDB work with it.

However, for now, controllers are not removable and once registered
ISRC is never unregistered (which is safe as an ISRC should be
described always same). Nevertheless, I have pretty ideas for how to
make controllers removable.

---------------------------------------

The attached diff is made against today's 277826 revision. New
framework must be anabled by option ARM_INTRNG in board's
configuration file. And debug framework's prints are enabled now.
Tomorow I'm leaving the town and will be back on next Thursday, so
sorry for any late reply if will be needed in that time.


Svata



On Thu, Jan 15, 2015 at 2:51 PM, Svatopluk Kraus <onwahe@gmail.com> wrote:
> Hi community,
>
> I and Michal Meloun have done some work on ARM interrupt framework and
> this is the result.
>
> We've started with intrng project with Ian's WIP changes, have looked
> at Andrew's ARM64 git repository, and this is how we think an
> interrupt framework should look like. We've implemented it with
> removable interrupt controllers in mind (PCI world). It's not finished
> from this point of view, however some functions are more complex
> because of it.
>
> It's tested on pandaboard and only GIC is implemented now. There is no
> problem to implement it to other controllers. We are open to questions
> and can finish our work considering any comments. Whoever is waiting
> for ARM interrupt framework as we were, you are welcome to test it.
> Whoever is welcome. The patches are done against FreeBSD-11-current
> revision 277210. There are two new files.
>
> ARM_INTRNG option must be added to board configuration file for new framework.
>
> There are still some things not implemented and some things which
> should be discussed like PPI support. For example, how to enable PPI
> interrupt on other CPUs when they are already running?
>
> We keep in mind that an interrupt framework should be helpfull but
> general enough to not dictate interrupt controlles too much. Thus we
> try to keep some things as much separated as possible. Each interrupt
> is represented by an interrupt source (ISRC) in the framework. An ISRC
> is described by an interrupt number which is much more an unique
> resource handle - totally independent on internal representation of
> interrupts in any interrupt controller.
>
> An interrupt is described by cells in FDT world. The cells can be
> decoded only by associated interrupt controller and as such, they are
> transparent for interrupt framework. The framework provides
> arm_fdt_map_irq() function which maps this transparent cells to an
> interrupt number. It creates an ISRC, saves cells on it, and once when
> associated interrupt controller is registered, it provides the ISRC
> with cells into the controller.
>
> It's a controller responsibility to save an ISRC associated with
> cells. An ISRC is transparent for any controller. However, an
> controller can set/get its data to/from an ISRC. Further, an
> controller should set a name to an ISRC according to internal
> representation of associated interrupt.
>
> An controller interrupt dispatch function can call framework only if
> it has associated ISRC to received interrupt.
>
> For legacy reason, there is arm_namespace_map_irq() function. An
> interrupt is described by namespace type and a number from the
> namespace. It's intented for use with no FDT drivers. Now, it's used
> for mapping an IPI on a controller.
>
> We think that it's better to call chained controllers (with filter
> only) without MI interrupt framework overhead, so we implemented
> shortcut. It could be utilized by INTR_SOLO flag during
> bus_setup_intr().
>
> Only an interrupt controller can really know its position in interrupt
> controller's tree. So root controller must claim itself as a root. In
> FDT world, according to ePAPR approved version 1.1 from 08 April 2011,
> page 30:
>
> "The root of the interrupt tree is determined when traversal of the
> interrupt tree reaches an interrupt controller node without an
> interrupts property and thus no explicit interrupt parent."
>
> Thus there are no need for any non-standard things in DTS files.
>
> Svata

--001a11c13d0eaf1b20050db7058a
Content-Type: text/plain; charset=US-ASCII; name="intrng_onwahe3.diff"
Content-Disposition: attachment; filename="intrng_onwahe3.diff"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_i5gsl5nf5

SW5kZXg6IHN5cy9hcm0vYXJtL2dpYy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9hcm0vYXJtL2dpYy5j
CShyZXZpc2lvbiAyNzc4MjYpCisrKyBzeXMvYXJtL2FybS9naWMuYwkod29ya2luZyBjb3B5KQpA
QCAtMzQsNiArMzQsOCBAQAogI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgogX19GQlNESUQoIiRGcmVl
QlNEJCIpOwogCisjaW5jbHVkZSAib3B0X3BsYXRmb3JtLmgiCisKICNpbmNsdWRlIDxzeXMvcGFy
YW0uaD4KICNpbmNsdWRlIDxzeXMvc3lzdG0uaD4KICNpbmNsdWRlIDxzeXMvYnVzLmg+CkBAIC00
MCw2ICs0Miw3IEBACiAjaW5jbHVkZSA8c3lzL2tlcm5lbC5oPgogI2luY2x1ZGUgPHN5cy9rdHIu
aD4KICNpbmNsdWRlIDxzeXMvbW9kdWxlLmg+CisjaW5jbHVkZSA8c3lzL21hbGxvYy5oPgogI2lu
Y2x1ZGUgPHN5cy9ybWFuLmg+CiAjaW5jbHVkZSA8c3lzL3BjcHUuaD4KICNpbmNsdWRlIDxzeXMv
cHJvYy5oPgpAQCAtNTUsNiArNTgsMTEgQEAKICNpbmNsdWRlIDxkZXYvb2Z3L29md19idXMuaD4K
ICNpbmNsdWRlIDxkZXYvb2Z3L29md19idXNfc3Vici5oPgogCisjaWZkZWYgQVJNX0lOVFJORwor
I2luY2x1ZGUgPHN5cy9zY2hlZC5oPgorI2luY2x1ZGUgInBpY19pZi5oIgorI2VuZGlmCisKIC8q
IFdlIGFyZSB1c2luZyBHSUN2MiByZWdpc3RlciBuYW1pbmcgKi8KIAogLyogRGlzdHJpYnV0b3Ig
UmVnaXN0ZXJzICovCkBAIC04Myw4ICs5MSw4IEBACiAjZGVmaW5lIEdJQ0NfQUJQUgkJMHgwMDFD
CQkJLyogdjEgSUNDQUJQUiAqLwogI2RlZmluZSBHSUNDX0lJRFIJCTB4MDBGQwkJCS8qIHYxIElD
Q0lJRFIqLwogCi0jZGVmaW5lCUdJQ19GSVJTVF9JUEkJCSAwCS8qIElycXMgMC0xNSBhcmUgU0dJ
cy9JUElzLiAqLwotI2RlZmluZQlHSUNfTEFTVF9JUEkJCTE1CisjZGVmaW5lCUdJQ19GSVJTVF9T
R0kJCSAwCS8qIElycXMgMC0xNSBhcmUgU0dJcy9JUElzLiAqLworI2RlZmluZQlHSUNfTEFTVF9T
R0kJCTE1CiAjZGVmaW5lCUdJQ19GSVJTVF9QUEkJCTE2CS8qIElycXMgMTYtMzEgYXJlIHByaXZh
dGUgKHBlciAqLwogI2RlZmluZQlHSUNfTEFTVF9QUEkJCTMxCS8qIGNvcmUpIHBlcmlwaGVyYWwg
aW50ZXJydXB0cy4gKi8KICNkZWZpbmUJR0lDX0ZJUlNUX1NQSQkJMzIJLyogSXJxcyAzMisgYXJl
IHNoYXJlZCBwZXJpcGhlcmFscy4gKi8KQEAgLTk4LDggKzEwNiwyMiBAQAogI2RlZmluZSBHSUNE
X0lDRkdSX1RSSUdfRURHRQkoMSA8PCAxKQogI2RlZmluZSBHSUNEX0lDRkdSX1RSSUdfTUFTSwkw
eDIKIAorI2lmZGVmIEFSTV9JTlRSTkcKKyNkZWZpbmUgR0lDX0lOVFJOQU1FX0xFTgkzMgorCitz
dHJ1Y3QgYXJtX2dpY19pcnEgeworCXN0cnVjdCBhcm1faXJxc3JjICoJZ2lfaXNyYzsKK307CisK
K3N0YXRpYyBpbnQgYXJtX2dpY19pbnRyKHZvaWQgKiwgc3RydWN0IHRyYXBmcmFtZSAqKTsKKyNl
bmRpZgorCiBzdHJ1Y3QgYXJtX2dpY19zb2Z0YyB7CiAJZGV2aWNlX3QJCWdpY19kZXY7CisjaWZk
ZWYgQVJNX0lOVFJORworCXZvaWQgKgkJCWdpY19pbnRyaGFuZDsKKwlzdHJ1Y3QgYXJtX2dpY19p
cnEgKglnaWNfaXJxczsKKyNlbmRpZgogCXN0cnVjdCByZXNvdXJjZSAqCWdpY19yZXNbM107CiAJ
YnVzX3NwYWNlX3RhZ190CQlnaWNfY19ic3Q7CiAJYnVzX3NwYWNlX3RhZ190CQlnaWNfZF9ic3Q7
CkBAIC0xMTMsMTAgKzEzNSwxMyBAQAogc3RhdGljIHN0cnVjdCByZXNvdXJjZV9zcGVjIGFybV9n
aWNfc3BlY1tdID0gewogCXsgU1lTX1JFU19NRU1PUlksCTAsCVJGX0FDVElWRSB9LAkvKiBEaXN0
cmlidXRvciByZWdpc3RlcnMgKi8KIAl7IFNZU19SRVNfTUVNT1JZLAkxLAlSRl9BQ1RJVkUgfSwJ
LyogQ1BVIEludGVycnVwdCBJbnRmLiByZWdpc3RlcnMgKi8KKyNpZmRlZiBBUk1fSU5UUk5HCisJ
eyBTWVNfUkVTX0lSUSwJICAwLCBSRl9BQ1RJVkUgfCBSRl9PUFRJT05BTCB9LCAvKiBQYXJlbnQg
aW50ZXJydXB0ICovCisjZW5kaWYKIAl7IC0xLCAwIH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgYXJt
X2dpY19zb2Z0YyAqYXJtX2dpY19zYyA9IE5VTEw7CitzdGF0aWMgc3RydWN0IGFybV9naWNfc29m
dGMgKmdpY19zYyA9IE5VTEw7CiAKICNkZWZpbmUJZ2ljX2NfcmVhZF80KF9zYywgX3JlZykJCVwK
ICAgICBidXNfc3BhY2VfcmVhZF80KChfc2MpLT5naWNfY19ic3QsIChfc2MpLT5naWNfY19ic2gs
IChfcmVnKSkKQEAgLTEyNyw5ICsxNTIsMTEgQEAKICNkZWZpbmUJZ2ljX2Rfd3JpdGVfNChfc2Ms
IF9yZWcsIF92YWwpCQlcCiAgICAgYnVzX3NwYWNlX3dyaXRlXzQoKF9zYyktPmdpY19kX2JzdCwg
KF9zYyktPmdpY19kX2JzaCwgKF9yZWcpLCAoX3ZhbCkpCiAKKyNpZm5kZWYgQVJNX0lOVFJORwog
c3RhdGljIGludCBnaWNfY29uZmlnX2lycShpbnQgaXJxLCBlbnVtIGludHJfdHJpZ2dlciB0cmln
LAogICAgIGVudW0gaW50cl9wb2xhcml0eSBwb2wpOwogc3RhdGljIHZvaWQgZ2ljX3Bvc3RfZmls
dGVyKHZvaWQgKik7CisjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBvZndfY29tcGF0X2RhdGEgY29t
cGF0X2RhdGFbXSA9IHsKIAl7ImFybSxnaWMiLAkJdHJ1ZX0sCS8qIE5vbi1zdGFuZGFyZCwgdXNl
ZCBpbiBGcmVlQlNEIGR0cy4gKi8KQEAgLTE1NSwxMCArMTgyLDU4IEBACiAJcmV0dXJuIChCVVNf
UFJPQkVfREVGQVVMVCk7CiB9CiAKKyNpZmRlZiBBUk1fSU5UUk5HCitzdGF0aWMgaW5saW5lIHZv
aWQKK2dpY19pcnFfdW5tYXNrKHN0cnVjdCBhcm1fZ2ljX3NvZnRjICpzYywgdV9pbnQgaXJxKQor
eworCisJZ2ljX2Rfd3JpdGVfNChzYywgR0lDRF9JU0VOQUJMRVIoaXJxID4+IDUpLCAoMVVMIDw8
IChpcnEgJiAweDFGKSkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2dpY19pcnFfbWFzayhz
dHJ1Y3QgYXJtX2dpY19zb2Z0YyAqc2MsIHVfaW50IGlycSkKK3sKKworCWdpY19kX3dyaXRlXzQo
c2MsIEdJQ0RfSUNFTkFCTEVSKGlycSA+PiA1KSwgKDFVTCA8PCAoaXJxICYgMHgxRikpKTsKK30K
KyNlbmRpZgorCisjaWZkZWYgU01QCisjaWZkZWYgQVJNX0lOVFJORwogc3RhdGljIHZvaWQKIGFy
bV9naWNfaW5pdF9zZWNvbmRhcnkoZGV2aWNlX3QgZGV2KQogewogCXN0cnVjdCBhcm1fZ2ljX3Nv
ZnRjICpzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKwl1X2ludCBpcnE7CisKKwlmb3IgKGly
cSA9IDA7IGlycSA8IHNjLT5uaXJxczsgaXJxICs9IDQpCisJCWdpY19kX3dyaXRlXzQoc2MsIEdJ
Q0RfSVBSSU9SSVRZUihpcnEgPj4gMiksIDApOworCisJLyogU2V0IGFsbCB0aGUgaW50ZXJydXB0
cyB0byBiZSBpbiBHcm91cCAwIChzZWN1cmUpICovCisJZm9yIChpcnEgPSAwOyBpcnEgPCBzYy0+
bmlycXM7IGlycSArPSAzMikgeworCQlnaWNfZF93cml0ZV80KHNjLCBHSUNEX0lHUk9VUFIoaXJx
ID4+IDUpLCAwKTsKKwl9CisKKwkvKiBFbmFibGUgQ1BVIGludGVyZmFjZSAqLworCWdpY19jX3dy
aXRlXzQoc2MsIEdJQ0NfQ1RMUiwgMSk7CisKKwkvKiBTZXQgcHJpb3JpdHkgbWFzayByZWdpc3Rl
ci4gKi8KKwlnaWNfY193cml0ZV80KHNjLCBHSUNDX1BNUiwgMHhmZik7CisKKwkvKiBFbmFibGUg
aW50ZXJydXB0IGRpc3RyaWJ1dGlvbiAqLworCWdpY19kX3dyaXRlXzQoc2MsIEdJQ0RfQ1RMUiwg
MHgwMSk7CisKKwkvKiBVbm1hc2sgYXR0YWNoZWQgUFBJIGludGVycnVwdHMuICovCisJZm9yIChp
cnEgPSBHSUNfRklSU1RfUFBJOyBpcnEgPD0gR0lDX0xBU1RfUFBJOyBpcnErKykgeworCQlpZiAo
c2MtPmdpY19pcnFzW2lycV0uZ2lfaXNyYyAhPSBOVUxMKQorCQkJZ2ljX2lycV91bm1hc2soc2Ms
IGlycSk7CisJfQorfQorI2Vsc2UKK3N0YXRpYyB2b2lkCithcm1fZ2ljX2luaXRfc2Vjb25kYXJ5
KGRldmljZV90IGRldikKK3sKKwlzdHJ1Y3QgYXJtX2dpY19zb2Z0YyAqc2MgPSBkZXZpY2VfZ2V0
X3NvZnRjKGRldik7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgc2MtPm5pcnFzOyBpICs9
IDQpCkBAIC0xODUsNyArMjYwLDEwIEBACiAJZ2ljX2Rfd3JpdGVfNChzYywgR0lDRF9JU0VOQUJM
RVIoMjkgPj4gNSksICgxVUwgPDwgKDI5ICYgMHgxRikpKTsKIAlnaWNfZF93cml0ZV80KHNjLCBH
SUNEX0lTRU5BQkxFUigzMCA+PiA1KSwgKDFVTCA8PCAoMzAgJiAweDFGKSkpOwogfQorI2VuZGlm
IC8qIEFSTV9JTlRSTkcgKi8KKyNlbmRpZiAvKiBTTVAgKi8KIAorI2lmbmRlZiBBUk1fSU5UUk5H
CiBpbnQKIGdpY19kZWNvZGVfZmR0KHVpbnQzMl90IGlwYXJlbnQsIHVpbnQzMl90ICppbnRyLCBp
bnQgKmludGVycnVwdCwKICAgICBpbnQgKnRyaWcsIGludCAqcG9sKQpAQCAtMjMwLDYgKzMwOCw3
IEBACiAJfQogCXJldHVybiAoMCk7CiB9CisjZW5kaWYKIAogc3RhdGljIGludAogYXJtX2dpY19h
dHRhY2goZGV2aWNlX3QgZGV2KQpAQCAtMjM3LDExICszMTYsMTcgQEAKIAlzdHJ1Y3QJCWFybV9n
aWNfc29mdGMgKnNjOwogCWludAkJaTsKIAl1aW50MzJfdAlpY2NpaWRyOworCWludHB0cl90CXhy
ZWY7CiAKLQlpZiAoYXJtX2dpY19zYykKKwlpZiAoZ2ljX3NjKQogCQlyZXR1cm4gKEVOWElPKTsK
IAogCXNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworI2lmZGVmIEZEVAorCXhyZWYgPSBPRl94
cmVmX2Zyb21fbm9kZShvZndfYnVzX2dldF9ub2RlKGRldikpOworI2Vsc2UKKwl4cmVmID0gTlVM
TDsKKyNlbmRpZgogCiAJaWYgKGJ1c19hbGxvY19yZXNvdXJjZXMoZGV2LCBhcm1fZ2ljX3NwZWMs
IHNjLT5naWNfcmVzKSkgewogCQlkZXZpY2VfcHJpbnRmKGRldiwgImNvdWxkIG5vdCBhbGxvY2F0
ZSByZXNvdXJjZXNcbiIpOwpAQCAtMjQ5LDcgKzMzNCw3IEBACiAJfQogCiAJc2MtPmdpY19kZXYg
PSBkZXY7Ci0JYXJtX2dpY19zYyA9IHNjOworCWdpY19zYyA9IHNjOwogCiAJLyogSW5pdGlhbGl6
ZSBtdXRleCAqLwogCW10eF9pbml0KCZzYy0+bXV0ZXgsICJHSUMgbG9jayIsICIiLCBNVFhfU1BJ
Tik7CkBAIC0yNjksOSArMzU0LDE0IEBACiAJc2MtPm5pcnFzID0gZ2ljX2RfcmVhZF80KHNjLCBH
SUNEX1RZUEVSKTsKIAlzYy0+bmlycXMgPSAzMiAqICgoc2MtPm5pcnFzICYgMHgxZikgKyAxKTsK
IAorI2lmZGVmIEFSTV9JTlRSTkcKKwlzYy0+Z2ljX2lycXMgPSBtYWxsb2Moc2MtPm5pcnFzICog
c2l6ZW9mICgqc2MtPmdpY19pcnFzKSwgTV9ERVZCVUYsCisJICAgIE1fV0FJVE9LIHwgTV9aRVJP
KTsKKyNlbHNlCiAJLyogU2V0IHVwIGZ1bmN0aW9uIHBvaW50ZXJzICovCiAJYXJtX3Bvc3RfZmls
dGVyID0gZ2ljX3Bvc3RfZmlsdGVyOwogCWFybV9jb25maWdfaXJxID0gZ2ljX2NvbmZpZ19pcnE7
CisjZW5kaWYKIAogCWljY2lpZHIgPSBnaWNfY19yZWFkXzQoc2MsIEdJQ0NfSUlEUik7CiAJZGV2
aWNlX3ByaW50ZihkZXYsInBuIDB4JXgsIGFyY2ggMHgleCwgcmV2IDB4JXgsIGltcGxlbWVudGVy
IDB4JXggaXJxcyAldVxuIiwKQEAgLTMwNywxMSArMzk3LDQ2NCBAQAogCiAJLyogRW5hYmxlIGlu
dGVycnVwdCBkaXN0cmlidXRpb24gKi8KIAlnaWNfZF93cml0ZV80KHNjLCBHSUNEX0NUTFIsIDB4
MDEpOworI2lmbmRlZiBBUk1fSU5UUk5HCisJcmV0dXJuICgwKTsKKyNlbHNlCisJLyoKKwkgKiBO
b3csIHdoZW4gZXZlcnl0aGluZyBpcyBpbml0aWFsaXplZCwgaXQncyByaWdodCB0aW1lIHRvCisJ
ICogcmVnaXN0ZXIgaW50ZXJydXB0IGNvbnRyb2xsZXIgdG8gaW50ZXJydXB0IGZyYW1lZm9yay4K
KwkgKi8KKwlpZiAoYXJtX3JlZ2lzdGVyX3BpYyhkZXYsIHhyZWYpICE9IDApIHsKKwkJZGV2aWNl
X3ByaW50ZihkZXYsICJjb3VsZCBub3QgcmVnaXN0ZXIgUElDXG4iKTsKKwkJZ290byBjbGVhbnVw
OworCX0KIAorCWlmIChzYy0+Z2ljX3Jlc1syXSA9PSBOVUxMKSB7CisJCWlmIChhcm1faXJxX3Nl
dF9yb290KGRldiwgeHJlZiwgYXJtX2dpY19pbnRyLCBzYywKKwkJICAgIEdJQ19MQVNUX1NHSSAt
IEdJQ19GSVJTVF9TR0kgKyAxKSAhPSAwKSB7CisJCQlkZXZpY2VfcHJpbnRmKGRldiwgImNvdWxk
IG5vdCBzZXQgUElDIGFzIGEgcm9vdFxuIik7CisJCQlhcm1fdW5yZWdpc3Rlcl9waWMoZGV2LCB4
cmVmKTsKKwkJCWdvdG8gY2xlYW51cDsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChidXNfc2V0dXBf
aW50cihkZXYsIHNjLT5naWNfcmVzWzJdLCBJTlRSX1RZUEVfTUlTQyB8CisJCSAgICBJTlRSX1NP
TE8sICh2b2lkKilhcm1fZ2ljX2ludHIsIE5VTEwsIHNjLAorCQkgICAgJnNjLT5naWNfaW50cmhh
bmQpKSB7CisJCQlkZXZpY2VfcHJpbnRmKGRldiwgImNvdWxkIG5vdCBzZXR1cCBpcnEgaGFuZGxl
clxuIik7CisJCQlhcm1fdW5yZWdpc3Rlcl9waWMoZGV2LCB4cmVmKTsKKwkJCWdvdG8gY2xlYW51
cDsKKwkJfQorCX0KKwogCXJldHVybiAoMCk7CisKK2NsZWFudXA6CisJLyoKKwkgKiBYWFggLSBu
b3QgaW1wbGVtZW50ZWQgYXJtX2dpY19kZXRhY2goKSBzaG91bGQgYmUgY2FsbGVkICEKKwkgKi8K
KwlpZiAoc2MtPmdpY19pcnFzICE9IE5VTEwpCisJCWZyZWUoc2MtPmdpY19pcnFzLCBNX0RFVkJV
Rik7CisJYnVzX3JlbGVhc2VfcmVzb3VyY2VzKGRldiwgYXJtX2dpY19zcGVjLCBzYy0+Z2ljX3Jl
cyk7CisJcmV0dXJuKEVOWElPKTsKKyNlbmRpZgogfQogCisjaWZkZWYgQVJNX0lOVFJORwogc3Rh
dGljIGludAorYXJtX2dpY19pbnRyKHZvaWQgKmFyZywgc3RydWN0IHRyYXBmcmFtZSAqdGYpCit7
CisJc3RydWN0IGFybV9naWNfc29mdGMgKnNjID0gKHN0cnVjdCBhcm1fZ2ljX3NvZnRjICopYXJn
OworCXN0cnVjdCBhcm1fZ2ljX2lycSAqZ2k7CisJdWludDMyX3QgaXJxX2FjdGl2ZV9yZWcsIGly
cTsKKworCWlycV9hY3RpdmVfcmVnID0gZ2ljX2NfcmVhZF80KHNjLCBHSUNDX0lBUik7CisJaXJx
ID0gaXJxX2FjdGl2ZV9yZWcgJiAweDNGRjsKKworCS8qCisJICogMS4gRU9JIG11c3QgYmUgZG9u
ZSBoZXJlIGFzIHRoZSBvdGhlciBiaXRzIChpLmUuIENQVSBudW1iZXIpLCBub3QKKwkgKiAgICBq
dXN0IHRoZSBJUlEgbnVtYmVyIGFyZSByZXF1aXJlZCwgYW5kIHdlIGRvIG5vdCBoYXZlIGEgbWV0
aG9kCisJICogICAgaG93IHRvIHBhc3MgdGhpcyBpbmZvcm1hdGlvbiB0byBkaXNwYXRjaCBmdW5j
dGlvbi4KKwkgKiAyLiBFT0kgbXVzdCBiZSBkb25lIG9uIHNhbWUgQ1BVLCB3aGVyZSBpbnRlcnJ1
cHQgaGFzIGZpcmVkLiBUaHVzCisJICogICAgd2UgbXVzdCBlbnN1cmUgdGhhdCBpbnRlcnJ1cHRl
ZCB0aHJlYWQgZG9lcyBub3QgbWlncmF0ZSB0bworCSAqICAgIGFub3RoZXIgQ1BVLgorCSAqIDMu
IEVPSSBjYW5ub3QgYmUgZGVsYXllZCBieSBhbnkgcHJlZW1wdGlvbiwgd2hpY2ggY291bGQgaGFw
cGVuIG9uCisJICogICAgY3JpdGljYWxfZXhpdCgpIHVzZWQgaW4gTUkgaW50ciBjb2RlLCB3aGVu
IGludGVycnVwdCB0aHJlYWQgaXMKKwkgKiAgICBzY2hlZHVsZWQuIFNlZSBuZXh0IHBvaW50Lgor
CSAqIDQuIElQSV9SRU5ERVpWT1VTIGFzc3VtZXMgdGhhdCBubyBwcmVlbXB0aW9uIGlzIHBlcm1p
dHRlZCBkdXJpbmcKKwkgKiAgICBhbiBhY3Rpb24gYW5kIGFueSB1c2Ugb2YgY3JpdGljYWxfZXhp
dCgpIGNvdWxkIGJyZWFrIHRoaXMKKwkgKiAgICBhc3N1bXB0aW9uLiBTZWUgY29tbWVudHMgd2l0
aGluIHNtcF9yZW5kZXp2b3VzX2FjdGlvbigpLgorCSAqLworCisJaWYgKGlycSA+PSBzYy0+bmly
cXMpIHsKKwkJZGV2aWNlX3ByaW50ZihzYy0+Z2ljX2RldiwgIlNwdXJpb3VzIGludGVycnVwdCBk
ZXRlY3RlZFxuIik7CisJCWdpY19jX3dyaXRlXzQoc2MsIEdJQ0NfRU9JUiwgaXJxX2FjdGl2ZV9y
ZWcpOworCQlyZXR1cm4gKDApOworCX0KKworCWdpID0gJnNjLT5naWNfaXJxc1tpcnFdOworCWlm
IChnaS0+Z2lfaXNyYyA9PSBOVUxMKSB7CisJCWRldmljZV9wcmludGYoc2MtPmdpY19kZXYsICJT
dHJheSBpbnRlcnJ1cHQgJXUgZGV0ZWN0ZWRcbiIsIGlycSk7CisJCWdpY19pcnFfbWFzayhzYywg
aXJxKTsKKwkJZ2ljX2Nfd3JpdGVfNChzYywgR0lDQ19FT0lSLCBpcnFfYWN0aXZlX3JlZyk7CisJ
CXJldHVybiAoMCk7CisJfQorCisJLyoKKwkgKiBOb3RlIHRoYXQgR0lDX0ZJUlNUX1NHSSBpcyB6
ZXJvIGFuZCBpcyBub3QgdXNlZCBpbiAnaWYnIHN0YXRlbWVudAorCSAqIGFzIGNvbXBpbGVyIGNv
bXBsYWlucyB0aGF0IGNvbXBhcmluZyB1X2ludCA+PSAwIGlzIGFsd2F5cyB0cnVlLgorCSAqLwor
CWlmIChpcnEgPD0gR0lDX0xBU1RfU0dJKSB7CisjaWZkZWYgU01QCisJCS8qIENhbGwgRU9JIGZv
ciBhbGwgSVBJIGJlZm9yZSBkaXNwYXRjaC4gKi8KKwkJZ2ljX2Nfd3JpdGVfNChzYywgR0lDQ19F
T0lSLCBpcnFfYWN0aXZlX3JlZyk7CisJCWFybV9kaXNwYXRjaF9zZ2koZ2ktPmdpX2lzcmMsIHRm
KTsKKwkJcmV0dXJuIChGSUxURVJfSEFORExFRCk7CisjZWxzZQorCQlwcmludGYoIlNHSSAldSBv
biBVUCBzeXN0ZW0gZGV0ZWN0ZWRcbiIsIGlycSAtIEdJQ19GSVJTVF9TR0kpOworCQlnaWNfY193
cml0ZV80KHNjLCBHSUNDX0VPSVIsIGlycV9hY3RpdmVfcmVnKTsKKwkJcmV0dXJuICgwKTsKKyNl
bmRpZgorCX0KKworCWNyaXRpY2FsX2VudGVyKCk7CisJaWYgKGlycSA8PSBHSUNfTEFTVF9QUEkp
CisJCWFybV9kaXNwYXRjaF9wcGkoZ2ktPmdpX2lzcmMsIHRmKTsKKwllbHNlCisJCWFybV9kaXNw
YXRjaF9zcGkoZ2ktPmdpX2lzcmMsIHRmKTsKKwlnaWNfY193cml0ZV80KHNjLCBHSUNDX0VPSVIs
IGlycV9hY3RpdmVfcmVnKTsKKwljcml0aWNhbF9leGl0KCk7CisJYXJtX2lycV9tZW1vcnlfYmFy
cmllcihpcnEpOworCXJldHVybiAoRklMVEVSX0hBTkRMRUQpOworfQorCitzdGF0aWMgaW50Citn
aWNfbmFtZXNwYWNlX3RvX2lycShzdHJ1Y3QgYXJtX2dpY19zb2Z0YyAqc2MsIHVfaW50IHR5cGUs
IHVfaW50IG51bSwKKyAgICB1X2ludCAqaXJxcCkKK3sKKwl1X2ludCBpcnE7CisKKwlpZiAodHlw
ZSA9PSBBUk1fSVJRX1RZUEVfU0dJKQorCQlpcnEgPSBHSUNfRklSU1RfU0dJICsgbnVtOworCWVs
c2UgaWYgKHR5cGUgPT0gQVJNX0lSUV9UWVBFX1BQSSkKKwkJaXJxID0gR0lDX0ZJUlNUX1BQSSAr
IG51bTsKKwllbHNlIGlmICh0eXBlID09IEFSTV9JUlFfVFlQRV9TUEkpCisJCWlycSA9IEdJQ19G
SVJTVF9TUEkgKyBudW07CisJZWxzZQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwlpZiAoaXJxID49
IHNjLT5uaXJxcykKKwkJcmV0dXJuIChFSU5WQUwpOworCisJKmlycXAgPSBpcnE7CisJcmV0dXJu
ICgwKTsKK30KKworc3RhdGljIGludAorZ2ljX2lycV90b19uYW1lc3BhY2Uoc3RydWN0IGFybV9n
aWNfc29mdGMgKnNjLCB1X2ludCBpcnEsIHVfaW50ICp0eXBlcCwKK3VfaW50ICpudW1wKQorewor
CisJaWYgKGlycSA8PSBHSUNfTEFTVF9TR0kpIHsKKwkJKnR5cGVwID0gQVJNX0lSUV9UWVBFX1NH
STsKKwkJKm51bXAgPSBpcnEgLSBHSUNfRklSU1RfU0dJOworCX0gZWxzZSBpZiAoaXJxIDw9IEdJ
Q19MQVNUX1BQSSkgeworCQkqdHlwZXAgPSBBUk1fSVJRX1RZUEVfUFBJOworCQkqbnVtcCA9IGly
cSAtIEdJQ19GSVJTVF9QUEk7CisJfSBlbHNlIGlmIChpcnEgPCBzYy0+bmlycXMpIHsKKwkJKnR5
cGVwID0gQVJNX0lSUV9UWVBFX1NQSTsKKwkJKm51bXAgPSBpcnEgLSBHSUNfRklSU1RfU1BJOwor
CX0gZWxzZQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMg
aW50CitnaWNfYXR0YWNoX2lzcmMoc3RydWN0IGFybV9naWNfc29mdGMgKnNjLCBzdHJ1Y3QgYXJt
X2lycXNyYyAqaXNyYywgdV9pbnQgaXJxKQoreworCWNvbnN0IGNoYXIgKm5hbWU7CisJc3RydWN0
IGFybV9naWNfaXJxICpnaSA9ICZzYy0+Z2ljX2lycXNbaXJxXTsKKworCWlmIChnaS0+Z2lfaXNy
YyA9PSBpc3JjKQorCQlyZXR1cm4gKDApOworCisJaWYgKGdpLT5naV9pc3JjICE9IE5VTEwpCisJ
CXJldHVybiAoRUVYSVNUKTsKKworCW5hbWUgPSBkZXZpY2VfZ2V0X25hbWV1bml0KHNjLT5naWNf
ZGV2KTsKKworCWlmIChpcnEgPD0gR0lDX0xBU1RfU0dJKQorCQlhcm1faXJxX3NldF9uYW1lKGlz
cmMsICIlcyxpJXUiLCBuYW1lLCBpcnEgLSBHSUNfRklSU1RfU0dJKTsKKwllbHNlIGlmIChpcnEg
PD0gR0lDX0xBU1RfUFBJKQorCQlhcm1faXJxX3NldF9uYW1lKGlzcmMsICIlcyxwJXUiLCBuYW1l
LCBpcnEgLSBHSUNfRklSU1RfUFBJKTsKKwllbHNlCisJCWFybV9pcnFfc2V0X25hbWUoaXNyYywg
IiVzLHMldSIsIG5hbWUsIGlycSAtIEdJQ19GSVJTVF9TUEkpOworCisJaXNyYy0+aXNyY19kYXRh
ID0gKHZvaWQgKilpcnE7CisJZ2ktPmdpX2lzcmMgPSBpc3JjOworCXJldHVybiAoMCk7Cit9CisK
K3N0YXRpYyBpbnQKK2dpY19kZXRhY2hfaXNyYyhzdHJ1Y3QgYXJtX2dpY19zb2Z0YyAqc2MsIHN0
cnVjdCBhcm1faXJxc3JjICppc3JjLCB1X2ludCBpcnEpCit7CisJc3RydWN0IGFybV9naWNfaXJx
ICpnaSA9ICZzYy0+Z2ljX2lycXNbaXJxXTsKKworCWlmIChpcnEgPj0gc2MtPm5pcnFzIHx8IGdp
LT5naV9pc3JjICE9IGlzcmMpCisJCXJldHVybiAoRUlOVkFMKTsKKworCWlzcmMtPmlzcmNfZGF0
YSA9IE5VTEw7CisJYXJtX2lycV9zZXRfbmFtZShpc3JjLCAiIik7CisKKwlnaS0+Z2lfaXNyYyA9
IE5VTEw7CisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIHZvaWQKK2dpY19jb25maWcoc3RydWN0
IGFybV9naWNfc29mdGMgKnNjLCB1X2ludCBpcnEsIGVudW0gaW50cl90cmlnZ2VyIHRyaWcsCisg
ICAgZW51bSBpbnRyX3BvbGFyaXR5IHBvbCkKK3sKKwl1aW50MzJfdCByZWc7CisJdWludDMyX3Qg
bWFzazsKKworCWlmIChpcnEgPCBHSUNfRklSU1RfU1BJKQorCQlyZXR1cm47CisKKwltdHhfbG9j
a19zcGluKCZzYy0+bXV0ZXgpOworCisJcmVnID0gZ2ljX2RfcmVhZF80KHNjLCBHSUNEX0lDRkdS
KGlycSA+PiA0KSk7CisJbWFzayA9IChyZWcgPj4gMiooaXJxICUgMTYpKSAmIDB4MzsKKworCWlm
IChwb2wgPT0gSU5UUl9QT0xBUklUWV9MT1cpIHsKKwkJbWFzayAmPSB+R0lDRF9JQ0ZHUl9QT0xf
TUFTSzsKKwkJbWFzayB8PSBHSUNEX0lDRkdSX1BPTF9MT1c7CisJfSBlbHNlIGlmIChwb2wgPT0g
SU5UUl9QT0xBUklUWV9ISUdIKSB7CisJCW1hc2sgJj0gfkdJQ0RfSUNGR1JfUE9MX01BU0s7CisJ
CW1hc2sgfD0gR0lDRF9JQ0ZHUl9QT0xfSElHSDsKKwl9CisKKwlpZiAodHJpZyA9PSBJTlRSX1RS
SUdHRVJfTEVWRUwpIHsKKwkJbWFzayAmPSB+R0lDRF9JQ0ZHUl9UUklHX01BU0s7CisJCW1hc2sg
fD0gR0lDRF9JQ0ZHUl9UUklHX0xWTDsKKwl9IGVsc2UgaWYgKHRyaWcgPT0gSU5UUl9UUklHR0VS
X0VER0UpIHsKKwkJbWFzayAmPSB+R0lDRF9JQ0ZHUl9UUklHX01BU0s7CisJCW1hc2sgfD0gR0lD
RF9JQ0ZHUl9UUklHX0VER0U7CisJfQorCisJLyogU2V0IG1hc2sgKi8KKwlyZWcgPSByZWcgJiB+
KDB4MyA8PCAyKihpcnEgJSAxNikpOworCXJlZyA9IHJlZyB8IChtYXNrIDw8IDIqKGlycSAlIDE2
KSk7CisJZ2ljX2Rfd3JpdGVfNChzYywgR0lDRF9JQ0ZHUihpcnEgPj4gNCksIHJlZyk7CisKKwlt
dHhfdW5sb2NrX3NwaW4oJnNjLT5tdXRleCk7Cit9CisKK3N0YXRpYyB2b2lkCitnaWNfYmluZChz
dHJ1Y3QgYXJtX2dpY19zb2Z0YyAqc2MsIHVfaW50IGlycSwgdV9pbnQgY3B1KQoreworCXVpbnQz
Ml90IG1hc2ssIHJlZzsKKworCW1hc2sgPSAoMSA8PCBjcHUpICYgMHhGRjsKKworCXJlZyA9IGdp
Y19kX3JlYWRfNChzYywgR0lDRF9JVEFSR0VUU1IoaXJxIC8gNCkpOworCXJlZyAmPSB+KDB4RkYg
PDwgKDggKiAoaXJxICUgNCkpKTsKKwlyZWcgfD0gbWFzayA8PCAoOCAqIChpcnEgJSA0KSk7CisJ
Z2ljX2Rfd3JpdGVfNChzYywgR0lDRF9JVEFSR0VUU1IoaXJxIC8gNCksIHJlZyk7Cit9CisKK3N0
YXRpYyBpbnQKK2dpY19tYXBfbnNwYyhzdHJ1Y3QgYXJtX2dpY19zb2Z0YyAqc2MsIHN0cnVjdCBh
cm1faXJxc3JjICppc3JjKQoreworCXVfaW50IGlycTsKKwlpbnQgZXJyb3I7CisKKwllcnJvciA9
IGdpY19uYW1lc3BhY2VfdG9faXJxKHNjLCBpc3JjLT5pc3JjX25zcGNfdHlwZSwKKwkgICAgaXNy
Yy0+aXNyY19uc3BjX251bSwgJmlycSk7CisJaWYgKGVycm9yICE9IDApCisJCXJldHVybiAoZXJy
b3IpOworCXJldHVybiAoZ2ljX2F0dGFjaF9pc3JjKHNjLCBpc3JjLCBpcnEpKTsKK30KKworI2lm
ZGVmIEZEVAorc3RhdGljIGludAorZ2ljX21hcF9mZHQoc3RydWN0IGFybV9naWNfc29mdGMgKnNj
LCBzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYykKK3sKKwl1X2ludCBpcnEsIHR5cGUsIG51bSwgdHJp
cG9sOworCWVudW0gaW50cl90cmlnZ2VyIHRyaWc7CisJZW51bSBpbnRyX3BvbGFyaXR5IHBvbDsK
KwlpbnQgZXJyb3I7CisKKwlpZiAoaXNyYy0+aXNyY19uY2VsbHMgPT0gMSkgeworCQlpcnEgPSBp
c3JjLT5pc3JjX2NlbGxzWzBdOworCisJCWVycm9yID0gZ2ljX2lycV90b19uYW1lc3BhY2Uoc2Ms
IGlycSwgJnR5cGUsICZudW0pOworCQlpZiAoZXJyb3IgIT0gMCkKKwkJCXJldHVybiAoZXJyb3Ip
OworCisJCXBvbCA9IElOVFJfUE9MQVJJVFlfQ09ORk9STTsKKwkJdHJpZyA9IElOVFJfVFJJR0dF
Ul9DT05GT1JNOworCX0gZWxzZSB7CisKKwkJdHlwZSA9IGlzcmMtPmlzcmNfY2VsbHNbMF0gPT0g
MCA/IEFSTV9JUlFfVFlQRV9TUEkgOgorCQkgICAgQVJNX0lSUV9UWVBFX1BQSTsKKwkJbnVtID0g
aXNyYy0+aXNyY19jZWxsc1sxXTsKKworCQllcnJvciA9IGdpY19uYW1lc3BhY2VfdG9faXJxKHNj
LCB0eXBlLCBudW0sICZpcnEpOworCQlpZiAoZXJyb3IgIT0gMCkKKwkJCXJldHVybiAoZXJyb3Ip
OworCisJCS8qCisJCSAqIEluIGludHJbMl0sIGJpdHNbMzowXSBhcmUgdHJpZ2dlciB0eXBlIGFu
ZCBsZXZlbCBmbGFncy4KKwkJICogICAxID0gbG93LXRvLWhpZ2ggZWRnZSB0cmlnZ2VyZWQKKwkJ
ICogICAyID0gaGlnaC10by1sb3cgZWRnZSB0cmlnZ2VyZWQKKwkJICogICA0ID0gYWN0aXZlIGhp
Z2ggbGV2ZWwtc2Vuc2l0aXZlCisJCSAqICAgOCA9IGFjdGl2ZSBsb3cgbGV2ZWwtc2Vuc2l0aXZl
CisJCSAqIFRoZSBoYXJkd2FyZSBvbmx5IHN1cHBvcnRzIGFjdGl2ZS1oaWdoLWxldmVsIG9yIHJp
c2luZy1lZGdlLgorCQkgKi8KKwkJdHJpcG9sID0gaXNyYy0+aXNyY19jZWxsc1syXTsKKwkJaWYg
KHRyaXBvbCAmIDB4MGEpIHsKKwkJCXByaW50ZigidW5zdXBwb3J0ZWQgdHJpZ2dlci9wb2xhcml0
eSBjb25maWd1cmF0aW9uICIKKwkJCSAgICAiMHglMnhcbiIsIHRyaXBvbCAmIDB4MGYpOworCQkJ
cmV0dXJuIChFTk9UU1VQKTsKKwkJfQorCQlwb2wgPSBJTlRSX1BPTEFSSVRZX0NPTkZPUk07CisJ
CWlmICh0cmlwb2wgJiAweDAxKQorCQkJdHJpZyA9IElOVFJfVFJJR0dFUl9FREdFOworCQllbHNl
CisJCQl0cmlnID0gSU5UUl9UUklHR0VSX0xFVkVMOworCX0KKworCWVycm9yID0gZ2ljX2F0dGFj
aF9pc3JjKHNjLCBpc3JjLCBpcnEpOworCWlmIChlcnJvciAhPSAwKQorCQlyZXR1cm4gKGVycm9y
KTsKKworCWlzcmMtPmlzcmNfbnNwY190eXBlID0gdHlwZTsKKwlpc3JjLT5pc3JjX25zcGNfbnVt
ID0gbnVtOworCWlzcmMtPmlzcmNfdHJpZyA9IHRyaWc7CisJaXNyYy0+aXNyY19wb2wgPSBwb2w7
CisKKwlyZXR1cm4gKDApOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQKK2FybV9naWNfcmVnaXN0
ZXIoZGV2aWNlX3QgZGV2LCBzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYykKK3sKKwlzdHJ1Y3QgYXJt
X2dpY19zb2Z0YyAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisKKwlpZiAoaXNyYy0+aXNy
Y190eXBlID09IEFSTV9JU1JDVF9OQU1FU1BBQ0UpCisJCXJldHVybiAoZ2ljX21hcF9uc3BjKHNj
LCBpc3JjKSk7CisjaWZkZWYgRkRUCisJZWxzZSBpZiAoaXNyYy0+aXNyY190eXBlID09IEFSTV9J
U1JDVF9GRFQpCisJCXJldHVybiAoZ2ljX21hcF9mZHQoc2MsIGlzcmMpKTsKKyNlbmRpZgorCWVs
c2UKKwkJcmV0dXJuIChFSU5WQUwpOworfQorCitzdGF0aWMgdm9pZAorYXJtX2dpY19lbmFibGVf
aW50cihkZXZpY2VfdCBkZXYsIHN0cnVjdCBhcm1faXJxc3JjICppc3JjKQoreworCXN0cnVjdCBh
cm1fZ2ljX3NvZnRjICpzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKwl1X2ludCBpcnE7CisK
KwlpcnEgPSAodV9pbnQpaXNyYy0+aXNyY19kYXRhOworCWlmIChpcnEgPj0gc2MtPm5pcnFzIHx8
IHNjLT5naWNfaXJxc1tpcnFdLmdpX2lzcmMgIT0gaXNyYykKKwkJcmV0dXJuOworCisJZ2ljX2Nv
bmZpZyhzYywgaXJxLCBpc3JjLT5pc3JjX3RyaWcsIGlzcmMtPmlzcmNfcG9sKTsKKwlnaWNfYmlu
ZChzYywgaXJxLCBpc3JjLT5pc3JjX2NwdSk7Cit9CisKK3N0YXRpYyB2b2lkCithcm1fZ2ljX2Vu
YWJsZV9zb3VyY2UoZGV2aWNlX3QgZGV2LCBzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYykKK3sKKwlz
dHJ1Y3QgYXJtX2dpY19zb2Z0YyAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJdV9pbnQg
aXJxOworCisJaXJxID0gKHVfaW50KWlzcmMtPmlzcmNfZGF0YTsKKwlpZiAoaXJxID49IHNjLT5u
aXJxcyB8fCBzYy0+Z2ljX2lycXNbaXJxXS5naV9pc3JjICE9IGlzcmMpCisJCXJldHVybjsKKwor
CWlmIChpcnEgPD0gR0lDX0xBU1RfU0dJKQorCQlyZXR1cm47IC8qIHYyIElNUExFTUVOVEFUSU9O
IERFRklORUQgKi8KKworCWFybV9pcnFfbWVtb3J5X2JhcnJpZXIoaXJxKTsKKwlnaWNfaXJxX3Vu
bWFzayhzYywgaXJxKTsKK30KKworc3RhdGljIHZvaWQKK2FybV9naWNfZGlzYWJsZV9zb3VyY2Uo
ZGV2aWNlX3QgZGV2LCBzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYykKK3sKKwlzdHJ1Y3QgYXJtX2dp
Y19zb2Z0YyAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJdV9pbnQgaXJxOworCisJaXJx
ID0gKHVfaW50KWlzcmMtPmlzcmNfZGF0YTsKKwlpZiAoaXJxID49IHNjLT5uaXJxcyB8fCBzYy0+
Z2ljX2lycXNbaXJxXS5naV9pc3JjICE9IGlzcmMpCisJCXJldHVybjsKKworCWlmIChpcnEgPD0g
R0lDX0xBU1RfU0dJKQorCQlyZXR1cm47IC8qIHYyIElNUExFTUVOVEFUSU9OIERFRklORUQgKi8K
KworCWdpY19pcnFfbWFzayhzYywgaXJxKTsKK30KKworc3RhdGljIHZvaWQKK2FybV9naWNfZGlz
YWJsZV9pbnRyKGRldmljZV90IGRldiwgc3RydWN0IGFybV9pcnFzcmMgKmlzcmMpCit7Cit9CisK
K3N0YXRpYyBpbnQKK2FybV9naWNfdW5yZWdpc3RlcihkZXZpY2VfdCBkZXYsIHN0cnVjdCBhcm1f
aXJxc3JjICppc3JjKQoreworCXN0cnVjdCBhcm1fZ2ljX3NvZnRjICpzYyA9IGRldmljZV9nZXRf
c29mdGMoZGV2KTsKKwl1X2ludCBpcnE7CisKKwlpcnEgPSAodV9pbnQpaXNyYy0+aXNyY19kYXRh
OworCWlmIChpcnEgPj0gc2MtPm5pcnFzIHx8IHNjLT5naWNfaXJxc1tpcnFdLmdpX2lzcmMgIT0g
aXNyYykKKwkJcmV0dXJuIChFSU5WQUwpOworCisJcmV0dXJuIChnaWNfZGV0YWNoX2lzcmMoc2Ms
IGlzcmMsIGlycSkpOworfQorCitzdGF0aWMgdm9pZAorYXJtX2dpY19wcmVfaXRocmVhZChkZXZp
Y2VfdCBkZXYsIHN0cnVjdCBhcm1faXJxc3JjICppc3JjKQoreworCisJYXJtX2dpY19kaXNhYmxl
X3NvdXJjZShkZXYsIGlzcmMpOworfQorCitzdGF0aWMgdm9pZAorYXJtX2dpY19wb3N0X2l0aHJl
YWQoZGV2aWNlX3QgZGV2LCBzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYykKK3sKKworCWFybV9naWNf
ZW5hYmxlX3NvdXJjZShkZXYsIGlzcmMpOworfQorCitzdGF0aWMgdm9pZAorYXJtX2dpY19wb3N0
X2ZpbHRlcihkZXZpY2VfdCBkZXYsIHN0cnVjdCBhcm1faXJxc3JjICppc3JjKQoreworCisJLyog
RU9JIG11c3QgYmUgZG9uZSBpbiBjb250cm9sbGVyJ3MgaW50ZXJydXB0IHJvdXRpbmUuICovCit9
CisKKyNpZmRlZiBTTVAKK3N0YXRpYyBpbnQKK2FybV9naWNfYmluZChkZXZpY2VfdCBkZXYsIHN0
cnVjdCBhcm1faXJxc3JjICppc3JjLCB1X2ludCBjcHUpCit7CisJc3RydWN0IGFybV9naWNfc29m
dGMgKnNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCXVpbnQzMl90IGlycTsKKworCWlycSA9
ICh1X2ludClpc3JjLT5pc3JjX2RhdGE7CisJaWYgKGlycSA+PSBzYy0+bmlycXMgfHwgc2MtPmdp
Y19pcnFzW2lycV0uZ2lfaXNyYyAhPSBpc3JjKQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwlpZiAo
aXJxIDwgR0lDX0ZJUlNUX1NQSSkKKwkJcmV0dXJuIChFSU5WQUwpOworCisJZ2ljX2JpbmQoc2Ms
IGlycSwgY3B1KTsKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgdm9pZAorYXJtX2dpY19pcGlf
c2VuZChkZXZpY2VfdCBkZXYsIHN0cnVjdCBhcm1faXJxc3JjICppc3JjLCBjcHVzZXRfdCBjcHVz
KQoreworCXN0cnVjdCBhcm1fZ2ljX3NvZnRjICpzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsK
Kwl1aW50MzJfdCBpcnEsIHZhbCA9IDAsIGk7CisKKwlpcnEgPSAodV9pbnQpaXNyYy0+aXNyY19k
YXRhOworCWlmIChpcnEgPj0gc2MtPm5pcnFzIHx8IHNjLT5naWNfaXJxc1tpcnFdLmdpX2lzcmMg
IT0gaXNyYykKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IE1BWENQVTsgaSsrKQorCQlp
ZiAoQ1BVX0lTU0VUKGksICZjcHVzKSkKKwkJCXZhbCB8PSAxIDw8ICgxNiArIGkpOworCisJZ2lj
X2Rfd3JpdGVfNChzYywgR0lDRF9TR0lSKDApLCB2YWwgfCBpcnEpOworfQorI2VuZGlmCisjZWxz
ZQorc3RhdGljIGludAogYXJtX2dpY19uZXh0X2lycShzdHJ1Y3QgYXJtX2dpY19zb2Z0YyAqc2Ms
IGludCBsYXN0X2lycSkKIHsKIAl1aW50MzJfdCBhY3RpdmVfaXJxOwpAQCAtMzIzLDcgKzg2Niw3
IEBACiAJICogYml0cyAoaWUgQ1BVIG51bWJlciksIG5vdCBqdXN0IHRoZSBJUlEgbnVtYmVyLCBh
bmQgd2UgZG8gbm90CiAJICogaGF2ZSB0aGlzIGluZm9ybWF0aW9uIGxhdGVyLgogCSAqLwotCWlm
ICgoYWN0aXZlX2lycSAmIDB4M2ZmKSA8PSBHSUNfTEFTVF9JUEkpCisJaWYgKChhY3RpdmVfaXJx
ICYgMHgzZmYpIDw9IEdJQ19MQVNUX1NHSSkKIAkJZ2ljX2Nfd3JpdGVfNChzYywgR0lDQ19FT0lS
LCBhY3RpdmVfaXJxKTsKIAlhY3RpdmVfaXJxICY9IDB4M0ZGOwogCkBAIC0zOTYsNyArOTM5LDcg
QEAKIAlzdHJ1Y3QgYXJtX2dpY19zb2Z0YyAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CiAK
IAlnaWNfZF93cml0ZV80KHNjLCBHSUNEX0lDRU5BQkxFUihpcnEgPj4gNSksICgxVUwgPDwgKGly
cSAmIDB4MUYpKSk7Ci0JZ2ljX2Nfd3JpdGVfNChzYywgR0lDQ19FT0lSLCBpcnEpOworCWdpY19j
X3dyaXRlXzQoc2MsIEdJQ0NfRU9JUiwgaXJxKTsgLyogWFhYIC0gbm90IGFsbG93ZWQgKi8KIH0K
IAogc3RhdGljIHZvaWQKQEAgLTQwNCw3ICs5NDcsNyBAQAogewogCXN0cnVjdCBhcm1fZ2ljX3Nv
ZnRjICpzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKIAotCWlmIChpcnEgPiBHSUNfTEFTVF9J
UEkpCisJaWYgKGlycSA+IEdJQ19MQVNUX1NHSSkKIAkJYXJtX2lycV9tZW1vcnlfYmFycmllcihp
cnEpOwogCiAJZ2ljX2Rfd3JpdGVfNChzYywgR0lDRF9JU0VOQUJMRVIoaXJxID4+IDUpLCAoMVVM
IDw8IChpcnEgJiAweDFGKSkpOwpAQCAtNDUxLDEwICs5OTQsMTAgQEAKIHN0YXRpYyB2b2lkCiBn
aWNfcG9zdF9maWx0ZXIodm9pZCAqYXJnKQogewotCXN0cnVjdCBhcm1fZ2ljX3NvZnRjICpzYyA9
IGFybV9naWNfc2M7CisJc3RydWN0IGFybV9naWNfc29mdGMgKnNjID0gZ2ljX3NjOwogCXVpbnRw
dHJfdCBpcnEgPSAodWludHB0cl90KSBhcmc7CiAKLQlpZiAoaXJxID4gR0lDX0xBU1RfSVBJKQor
CWlmIChpcnEgPiBHSUNfTEFTVF9TR0kpCiAJCWFybV9pcnFfbWVtb3J5X2JhcnJpZXIoaXJxKTsK
IAlnaWNfY193cml0ZV80KHNjLCBHSUNDX0VPSVIsIGlycSk7CiB9CkBAIC00NjMsNyArMTAwNiw3
IEBACiBnaWNfY29uZmlnX2lycShpbnQgaXJxLCBlbnVtIGludHJfdHJpZ2dlciB0cmlnLCBlbnVt
IGludHJfcG9sYXJpdHkgcG9sKQogewogCi0JcmV0dXJuIChhcm1fZ2ljX2NvbmZpZyhhcm1fZ2lj
X3NjLT5naWNfZGV2LCBpcnEsIHRyaWcsIHBvbCkpOworCXJldHVybiAoYXJtX2dpY19jb25maWco
Z2ljX3NjLT5naWNfZGV2LCBpcnEsIHRyaWcsIHBvbCkpOwogfQogCiB2b2lkCkBAIC00NzAsNyAr
MTAxMyw3IEBACiBhcm1fbWFza19pcnEodWludHB0cl90IG5iKQogewogCi0JYXJtX2dpY19tYXNr
KGFybV9naWNfc2MtPmdpY19kZXYsIG5iKTsKKwlhcm1fZ2ljX21hc2soZ2ljX3NjLT5naWNfZGV2
LCBuYik7CiB9CiAKIHZvaWQKQEAgLTQ3Nyw3ICsxMDIwLDcgQEAKIGFybV91bm1hc2tfaXJxKHVp
bnRwdHJfdCBuYikKIHsKIAotCWFybV9naWNfdW5tYXNrKGFybV9naWNfc2MtPmdpY19kZXYsIG5i
KTsKKwlhcm1fZ2ljX3VubWFzayhnaWNfc2MtPmdpY19kZXYsIG5iKTsKIH0KIAogaW50CkBAIC00
ODQsNyArMTAyNyw3IEBACiBhcm1fZ2V0X25leHRfaXJxKGludCBsYXN0X2lycSkKIHsKIAotCXJl
dHVybiAoYXJtX2dpY19uZXh0X2lycShhcm1fZ2ljX3NjLCBsYXN0X2lycSkpOworCXJldHVybiAo
YXJtX2dpY19uZXh0X2lycShnaWNfc2MsIGxhc3RfaXJxKSk7CiB9CiAKIHZvaWQKQEAgLTQ5MSw3
ICsxMDM0LDcgQEAKIGFybV9pbml0X3NlY29uZGFyeV9pYyh2b2lkKQogewogCi0JYXJtX2dpY19p
bml0X3NlY29uZGFyeShhcm1fZ2ljX3NjLT5naWNfZGV2KTsKKwlhcm1fZ2ljX2luaXRfc2Vjb25k
YXJ5KGdpY19zYy0+Z2ljX2Rldik7CiB9CiAKICNpZmRlZiBTTVAKQEAgLTQ5OSw3ICsxMDQyLDcg
QEAKIHBpY19pcGlfc2VuZChjcHVzZXRfdCBjcHVzLCB1X2ludCBpcGkpCiB7CiAKLQlhcm1fZ2lj
X2lwaV9zZW5kKGFybV9naWNfc2MtPmdpY19kZXYsIGNwdXMsIGlwaSk7CisJYXJtX2dpY19pcGlf
c2VuZChnaWNfc2MtPmdpY19kZXYsIGNwdXMsIGlwaSk7CiB9CiAKIGludApAQCAtNTA2LDcgKzEw
NDksNyBAQAogcGljX2lwaV9yZWFkKGludCBpKQogewogCi0JcmV0dXJuIChhcm1fZ2ljX2lwaV9y
ZWFkKGFybV9naWNfc2MtPmdpY19kZXYsIGkpKTsKKwlyZXR1cm4gKGFybV9naWNfaXBpX3JlYWQo
Z2ljX3NjLT5naWNfZGV2LCBpKSk7CiB9CiAKIHZvaWQKQEAgLTUxMywxNCArMTA1NiwzMiBAQAog
cGljX2lwaV9jbGVhcihpbnQgaXBpKQogewogCi0JYXJtX2dpY19pcGlfY2xlYXIoYXJtX2dpY19z
Yy0+Z2ljX2RldiwgaXBpKTsKKwlhcm1fZ2ljX2lwaV9jbGVhcihnaWNfc2MtPmdpY19kZXYsIGlw
aSk7CiB9CiAjZW5kaWYKKyNlbmRpZiAvKiBBUk1fSU5UUk5HICovCiAKIHN0YXRpYyBkZXZpY2Vf
bWV0aG9kX3QgYXJtX2dpY19tZXRob2RzW10gPSB7CiAJLyogRGV2aWNlIGludGVyZmFjZSAqLwog
CURFVk1FVEhPRChkZXZpY2VfcHJvYmUsCQlhcm1fZ2ljX3Byb2JlKSwKIAlERVZNRVRIT0QoZGV2
aWNlX2F0dGFjaCwJYXJtX2dpY19hdHRhY2gpLAorI2lmZGVmIEFSTV9JTlRSTkcKKwkvKiBJbnRl
cnJ1cHQgY29udHJvbGxlciBpbnRlcmZhY2UgKi8KKwlERVZNRVRIT0QocGljX2Rpc2FibGVfaW50
ciwJYXJtX2dpY19kaXNhYmxlX2ludHIpLAorCURFVk1FVEhPRChwaWNfZGlzYWJsZV9zb3VyY2Us
CWFybV9naWNfZGlzYWJsZV9zb3VyY2UpLAorCURFVk1FVEhPRChwaWNfZW5hYmxlX2ludHIsCWFy
bV9naWNfZW5hYmxlX2ludHIpLAorCURFVk1FVEhPRChwaWNfZW5hYmxlX3NvdXJjZSwJYXJtX2dp
Y19lbmFibGVfc291cmNlKSwKKwlERVZNRVRIT0QocGljX3Bvc3RfZmlsdGVyLAlhcm1fZ2ljX3Bv
c3RfZmlsdGVyKSwKKwlERVZNRVRIT0QocGljX3Bvc3RfaXRocmVhZCwJYXJtX2dpY19wb3N0X2l0
aHJlYWQpLAorCURFVk1FVEhPRChwaWNfcHJlX2l0aHJlYWQsCWFybV9naWNfcHJlX2l0aHJlYWQp
LAorCURFVk1FVEhPRChwaWNfcmVnaXN0ZXIsCQlhcm1fZ2ljX3JlZ2lzdGVyKSwKKwlERVZNRVRI
T0QocGljX3VucmVnaXN0ZXIsCWFybV9naWNfdW5yZWdpc3RlciksCisjaWZkZWYgU01QCisJREVW
TUVUSE9EKHBpY19iaW5kLAkJYXJtX2dpY19iaW5kKSwKKwlERVZNRVRIT0QocGljX2luaXRfc2Vj
b25kYXJ5LAlhcm1fZ2ljX2luaXRfc2Vjb25kYXJ5KSwKKwlERVZNRVRIT0QocGljX2lwaV9zZW5k
LAkJYXJtX2dpY19pcGlfc2VuZCksCisjZW5kaWYKKyNlbmRpZgogCXsgMCwgMCB9CiB9OwogCklu
ZGV4OiBzeXMvYXJtL2FybS9tcF9tYWNoZGVwLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2FybS9hcm0v
bXBfbWFjaGRlcC5jCShyZXZpc2lvbiAyNzc4MjYpCisrKyBzeXMvYXJtL2FybS9tcF9tYWNoZGVw
LmMJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDkgQEAKIC8qIFNldCB0byAxIG9uY2Ugd2Un
cmUgcmVhZHkgdG8gbGV0IHRoZSBBUHMgb3V0IG9mIHRoZSBwZW4uICovCiB2b2xhdGlsZSBpbnQg
YXBzX3JlYWR5ID0gMDsKIAorI2lmbmRlZiBBUk1fSU5UUk5HCiBzdGF0aWMgaW50IGlwaV9oYW5k
bGVyKHZvaWQgKmFyZyk7CisjZW5kaWYKIHZvaWQgc2V0X3N0YWNrcHRycyhpbnQgY3B1KTsKIAog
LyogVGVtcG9yYXJ5IHZhcmlhYmxlcyBmb3IgaW5pdF9zZWNvbmRhcnkoKSAgKi8KQEAgLTEzMSw4
ICsxMzMsMTIgQEAKIAlpZiAoZXJyb3IpCiAJCXByaW50ZigiV0FSTklORzogU29tZSBBUCdzIGZh
aWxlZCB0byBzdGFydFxuIik7CiAJZWxzZQotCQlmb3IgKGkgPSAxOyBpIDwgbXBfbmNwdXM7IGkr
KykKKwkJZm9yIChpID0gMTsgaSA8IG1wX25jcHVzOyBpKyspIHsKIAkJCUNQVV9TRVQoaSwgJmFs
bF9jcHVzKTsKKyNpZmRlZiBBUk1fSU5UUk5HCisJCQlhcm1faXJxX2FkZF9jcHUoaSk7IC8qIFhY
WCAtIHdoYXQgYWJvdXQgc3BhcnNlIENQVXMgPyAqLworI2VuZGlmCisJCX0KIAogfQogCkBAIC0x
NDksNyArMTU1LDYgQEAKIHsKIAlzdHJ1Y3QgcGNwdSAqcGM7CiAJdWludDMyX3QgbG9vcF9jb3Vu
dGVyOwotCWludCBzdGFydCA9IDAsIGVuZCA9IDA7CiAKIAljcHVfc2V0dXAoTlVMTCk7CiAJc2V0
dHRiKHBtYXBfcGEpOwpAQCAtMTk5LDE4ICsyMDQsNiBAQAogCiAJbXR4X3VubG9ja19zcGluKCZh
cF9ib290X210eCk7CiAKLQkvKiBFbmFibGUgaXBpICovCi0jaWZkZWYgSVBJX0lSUV9TVEFSVAot
CXN0YXJ0ID0gSVBJX0lSUV9TVEFSVDsKLSNpZmRlZiBJUElfSVJRX0VORAotICAJZW5kID0gSVBJ
X0lSUV9FTkQ7Ci0jZWxzZQotCWVuZCA9IElQSV9JUlFfU1RBUlQ7Ci0jZW5kaWYKLSNlbmRpZgot
CQkJCQotCWZvciAoaW50IGkgPSBzdGFydDsgaSA8PSBlbmQ7IGkrKykKLQkJYXJtX3VubWFza19p
cnEoaSk7CiAJZW5hYmxlX2ludGVycnVwdHMoUFNSX0kpOwogCiAJbG9vcF9jb3VudGVyID0gMDsK
QEAgLTIzMyw2ICsyMjYsMTA4IEBACiAJLyogTk9UUkVBQ0hFRCAqLwogfQogCisjaWZkZWYgQVJN
X0lOVFJORworc3RhdGljIHZvaWQKK2lwaV9yZW5kZXp2b3VzKHZvaWQgKmR1bW15IF9fdW51c2Vk
KQoreworCisJQ1RSMChLVFJfU01QLCAiSVBJX1JFTkRFWlZPVVMiKTsKKwlzbXBfcmVuZGV6dm91
c19hY3Rpb24oKTsKK30KKworc3RhdGljIHZvaWQKK2lwaV9hc3Qodm9pZCAqZHVtbXkgX191bnVz
ZWQpCit7CisKKwlDVFIwKEtUUl9TTVAsICJJUElfQVNUIik7Cit9CisKK3N0YXRpYyB2b2lkCitp
cGlfc3RvcCh2b2lkICpkdW1teSBfX3VudXNlZCkKK3sKKwl1X2ludCBjcHU7CisKKwkvKgorCSAq
IElQSV9TVE9QX0hBUkQgaXMgbWFwcGVkIHRvIElQSV9TVE9QLgorCSAqLworCUNUUjAoS1RSX1NN
UCwgIklQSV9TVE9QIG9yIElQSV9TVE9QX0hBUkQiKTsKKworCWNwdSA9IFBDUFVfR0VUKGNwdWlk
KTsKKwlzYXZlY3R4KCZzdG9wcGNic1tjcHVdKTsKKworCS8qCisJICogQ1BVcyBhcmUgc3RvcHBl
ZCB3aGVuIGVudGVyaW5nIHRoZSBkZWJ1Z2dlciBhbmQgYXQKKwkgKiBzeXN0ZW0gc2h1dGRvd24s
IGJvdGggZXZlbnRzIHdoaWNoIGNhbiBwcmVjZWRlIGEKKwkgKiBwYW5pYyBkdW1wLiAgRm9yIHRo
ZSBkdW1wIHRvIGJlIGNvcnJlY3QsIGFsbCBjYWNoZXMKKwkgKiBtdXN0IGJlIGZsdXNoZWQgYW5k
IGludmFsaWRhdGVkLCBidXQgb24gQVJNIHRoZXJlJ3MKKwkgKiBubyB3YXkgdG8gYnJvYWRjYXN0
IGEgd2JpbnZfYWxsIHRvIG90aGVyIGNvcmVzLgorCSAqIEluc3RlYWQsIHdlIGhhdmUgZWFjaCBj
b3JlIGRvIHRoZSBsb2NhbCB3Ymludl9hbGwgYXMKKwkgKiBwYXJ0IG9mIHN0b3BwaW5nIHRoZSBj
b3JlLiAgVGhlIGNvcmUgcmVxdWVzdGluZyB0aGUKKwkgKiBzdG9wIHdpbGwgZG8gdGhlIGwyIGNh
Y2hlIGZsdXNoIGFmdGVyIGFsbCBvdGhlciBjb3JlcworCSAqIGhhdmUgZG9uZSB0aGVpciBsMSBm
bHVzaGVzIGFuZCBzdG9wcGVkLgorCSAqLworCWNwdV9pZGNhY2hlX3diaW52X2FsbCgpOworCisJ
LyogSW5kaWNhdGUgd2UgYXJlIHN0b3BwZWQgKi8KKwlDUFVfU0VUX0FUT01JQyhjcHUsICZzdG9w
cGVkX2NwdXMpOworCisJLyogV2FpdCBmb3IgcmVzdGFydCAqLworCXdoaWxlICghQ1BVX0lTU0VU
KGNwdSwgJnN0YXJ0ZWRfY3B1cykpCisJCWNwdV9zcGlud2FpdCgpOworCisJQ1BVX0NMUl9BVE9N
SUMoY3B1LCAmc3RhcnRlZF9jcHVzKTsKKwlDUFVfQ0xSX0FUT01JQyhjcHUsICZzdG9wcGVkX2Nw
dXMpOworCUNUUjAoS1RSX1NNUCwgIklQSV9TVE9QIChyZXN0YXJ0KSIpOworfQorCitzdGF0aWMg
dm9pZAoraXBpX3ByZWVtcHQodm9pZCAqYXJnKQoreworCXN0cnVjdCB0cmFwZnJhbWUgKm9sZGZy
YW1lOworCXN0cnVjdCB0aHJlYWQgKnRkOworCisJY3JpdGljYWxfZW50ZXIoKTsKKwl0ZCA9IGN1
cnRocmVhZDsKKwl0ZC0+dGRfaW50cl9uZXN0aW5nX2xldmVsKys7CisJb2xkZnJhbWUgPSB0ZC0+
dGRfaW50cl9mcmFtZTsKKwl0ZC0+dGRfaW50cl9mcmFtZSA9IChzdHJ1Y3QgdHJhcGZyYW1lICop
YXJnOworCisJQ1RSMShLVFJfU01QLCAiJXM6IElQSV9QUkVFTVBUIiwgX19mdW5jX18pOworCXNj
aGVkX3ByZWVtcHQodGQpOworCisJdGQtPnRkX2ludHJfZnJhbWUgPSBvbGRmcmFtZTsKKwl0ZC0+
dGRfaW50cl9uZXN0aW5nX2xldmVsLS07CisJY3JpdGljYWxfZXhpdCgpOworfQorCitzdGF0aWMg
dm9pZAoraXBpX2hhcmRjbG9jayh2b2lkICphcmcpCit7CisJc3RydWN0IHRyYXBmcmFtZSAqb2xk
ZnJhbWU7CisJc3RydWN0IHRocmVhZCAqdGQ7CisKKwljcml0aWNhbF9lbnRlcigpOworCXRkID0g
Y3VydGhyZWFkOworCXRkLT50ZF9pbnRyX25lc3RpbmdfbGV2ZWwrKzsKKwlvbGRmcmFtZSA9IHRk
LT50ZF9pbnRyX2ZyYW1lOworCXRkLT50ZF9pbnRyX2ZyYW1lID0gKHN0cnVjdCB0cmFwZnJhbWUg
Kilhcmc7CisKKwlDVFIxKEtUUl9TTVAsICIlczogSVBJX0hBUkRDTE9DSyIsIF9fZnVuY19fKTsK
KwloYXJkY2xvY2tpbnRyKCk7CisKKwl0ZC0+dGRfaW50cl9mcmFtZSA9IG9sZGZyYW1lOworCXRk
LT50ZF9pbnRyX25lc3RpbmdfbGV2ZWwtLTsKKwljcml0aWNhbF9leGl0KCk7Cit9CisKK3N0YXRp
YyB2b2lkCitpcGlfdGxiKHZvaWQgKmR1bW15IF9fdW51c2VkKQoreworCisJQ1RSMShLVFJfU01Q
LCAiJXM6IElQSV9UTEIiLCBfX2Z1bmNfXyk7CisJY3B1ZnVuY3MuY2ZfdGxiX2ZsdXNoSUQoKTsK
K30KKyNlbHNlCiBzdGF0aWMgaW50CiBpcGlfaGFuZGxlcih2b2lkICphcmcpCiB7CkBAIC0zMDgs
MTUgKzQwMywzMiBAQAogCiAJcmV0dXJuIChGSUxURVJfSEFORExFRCk7CiB9CisjZW5kaWYKIAog
c3RhdGljIHZvaWQKIHJlbGVhc2VfYXBzKHZvaWQgKmR1bW15IF9fdW51c2VkKQogewogCXVpbnQz
Ml90IGxvb3BfY291bnRlcjsKKyNpZm5kZWYgQVJNX0lOVFJORwogCWludCBzdGFydCA9IDAsIGVu
ZCA9IDA7CisjZW5kaWYKIAogCWlmIChtcF9uY3B1cyA9PSAxKQogCQlyZXR1cm47CisKKyNpZmRl
ZiBBUk1fSU5UUk5HCisJYXJtX2lycV9hZGRfY3B1KDApOyAvKiBYWFggLSBpdCBzaG91bGQgYmUg
Ym9vdCBDUFUgKi8KKworCWFybV9zZXR1cF9pcGloYW5kbGVyKElQSV9SRU5ERVpWT1VTLCAicmVu
ZGV6dm91cyIsIGlwaV9yZW5kZXp2b3VzLCBOVUxMLAorCSAgICAwKTsKKwlhcm1fc2V0dXBfaXBp
aGFuZGxlcihJUElfQVNULCAiYXN0IiwgaXBpX2FzdCwgTlVMTCwgMCk7CisJYXJtX3NldHVwX2lw
aWhhbmRsZXIoSVBJX1NUT1AsICJzdG9wIiwgaXBpX3N0b3AsIE5VTEwsIDApOworCWFybV9zZXR1
cF9pcGloYW5kbGVyKElQSV9QUkVFTVBULCAicHJlZW1wdCIsIGlwaV9wcmVlbXB0LCBOVUxMLCAw
KTsKKwlhcm1fc2V0dXBfaXBpaGFuZGxlcihJUElfSEFSRENMT0NLLCAiaGFyZGNsb2NrIiwgaXBp
X2hhcmRjbG9jaywgTlVMTCwKKwkgICAgMCk7CisJYXJtX3NldHVwX2lwaWhhbmRsZXIoSVBJX1RM
QiwgInRsYiIsIGlwaV90bGIsIE5VTEwsIDApOworCisjZWxzZQogI2lmZGVmIElQSV9JUlFfU1RB
UlQKIAlzdGFydCA9IElQSV9JUlFfU1RBUlQ7CiAjaWZkZWYgSVBJX0lSUV9FTkQKQEAgLTM0MSw2
ICs0NTMsNyBAQAogCQkvKiBFbmFibGUgaXBpICovCiAJCWFybV91bm1hc2tfaXJxKGkpOwogCX0K
KyNlbmRpZgogCWF0b21pY19zdG9yZV9yZWxfaW50KCZhcHNfcmVhZHksIDEpOwogCiAJcHJpbnRm
KCJSZWxlYXNlIEFQc1xuIik7CkluZGV4OiBzeXMvYXJtL2FybS9uZXh1cy5jCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIHN5cy9hcm0vYXJtL25leHVzLmMJKHJldmlzaW9uIDI3NzgyNikKKysrIHN5cy9hcm0vYXJt
L25leHVzLmMJKHdvcmtpbmcgY29weSkKQEAgLTg1LDggKzg1LDEzIEBACiAgICAgdV9sb25nLCB1
X2xvbmcsIHVfbG9uZywgdV9pbnQpOwogc3RhdGljCWludCBuZXh1c19hY3RpdmF0ZV9yZXNvdXJj
ZShkZXZpY2VfdCwgZGV2aWNlX3QsIGludCwgaW50LAogICAgIHN0cnVjdCByZXNvdXJjZSAqKTsK
KyNpZmRlZiBTTVAKK3N0YXRpYwlpbnQgbmV4dXNfYmluZF9pbnRyKGRldmljZV90LCBkZXZpY2Vf
dCwgc3RydWN0IHJlc291cmNlICosIGludCk7CisjZW5kaWYKIHN0YXRpYyBpbnQgbmV4dXNfY29u
ZmlnX2ludHIoZGV2aWNlX3QgZGV2LCBpbnQgaXJxLCBlbnVtIGludHJfdHJpZ2dlciB0cmlnLAog
ICAgIGVudW0gaW50cl9wb2xhcml0eSBwb2wpOworc3RhdGljCWludCBuZXh1c19kZXNjcmliZV9p
bnRyKGRldmljZV90IGRldiwgZGV2aWNlX3QgY2hpbGQsCisgICAgc3RydWN0IHJlc291cmNlICpp
cnEsIHZvaWQgKmNvb2tpZSwgY29uc3QgY2hhciAqZGVzY3IpOwogc3RhdGljCWludCBuZXh1c19k
ZWFjdGl2YXRlX3Jlc291cmNlKGRldmljZV90LCBkZXZpY2VfdCwgaW50LCBpbnQsCiAgICAgc3Ry
dWN0IHJlc291cmNlICopOwogc3RhdGljIGludCBuZXh1c19yZWxlYXNlX3Jlc291cmNlKGRldmlj
ZV90LCBkZXZpY2VfdCwgaW50LCBpbnQsCkBAIC0xMTgsNiArMTIzLDEzIEBACiAjaWZkZWYgRkRU
CiAJREVWTUVUSE9EKG9md19idXNfbWFwX2ludHIsCW5leHVzX29md19tYXBfaW50ciksCiAjZW5k
aWYKKyNpZmRlZiBBUk1fSU5UUk5HCisjaWZkZWYgU01QCisJREVWTUVUSE9EKGJ1c19iaW5kX2lu
dHIsCW5leHVzX2JpbmRfaW50ciksCisjZW5kaWYKKwlERVZNRVRIT0QoYnVzX2Rlc2NyaWJlX2lu
dHIsCW5leHVzX2Rlc2NyaWJlX2ludHIpLAorI2VuZGlmCisKIAl7IDAsIDAgfQogfTsKIApAQCAt
MjUxLDkgKzI2MywxMiBAQAogewogCWludCByZXQgPSBFTk9ERVY7CiAKKyNpZmRlZiBBUk1fSU5U
Uk5HCisJcmV0ID0gYXJtX2lycV9jb25maWcoaXJxLCB0cmlnLCBwb2wpOworI2Vsc2UKIAlpZiAo
YXJtX2NvbmZpZ19pcnEpCiAJCXJldCA9ICgqYXJtX2NvbmZpZ19pcnEpKGlycSwgdHJpZywgcG9s
KTsKLQorI2VuZGlmCiAJcmV0dXJuIChyZXQpOwogfQogCkBAIC0yNjcsOSArMjgyLDE0IEBACiAJ
CWZsYWdzIHw9IElOVFJfRVhDTDsKIAogCWZvciAoaXJxID0gcm1hbl9nZXRfc3RhcnQocmVzKTsg
aXJxIDw9IHJtYW5fZ2V0X2VuZChyZXMpOyBpcnErKykgeworI2lmIGRlZmluZWQoQVJNX0lOVFJO
RykKKwkJYXJtX3NldHVwX2lycWhhbmRsZXIoY2hpbGQsIGZpbHQsIGludHIsIGFyZywgaXJxLCBm
bGFncywKKwkJICAgIGNvb2tpZXApOworI2Vsc2UKIAkJYXJtX3NldHVwX2lycWhhbmRsZXIoZGV2
aWNlX2dldF9uYW1ldW5pdChjaGlsZCksCiAJCSAgICBmaWx0LCBpbnRyLCBhcmcsIGlycSwgZmxh
Z3MsIGNvb2tpZXApOwogCQlhcm1fdW5tYXNrX2lycShpcnEpOworI2VuZGlmCiAJfQogCXJldHVy
biAoMCk7CiB9CkBAIC0yNzgsMTEgKzI5OCwzMiBAQAogbmV4dXNfdGVhcmRvd25faW50cihkZXZp
Y2VfdCBkZXYsIGRldmljZV90IGNoaWxkLCBzdHJ1Y3QgcmVzb3VyY2UgKnIsIHZvaWQgKmloKQog
ewogCisjaWYgZGVmaW5lZChBUk1fSU5UUk5HKQorCXJldHVybiAoYXJtX3JlbW92ZV9pcnFoYW5k
bGVyKGNoaWxkLCBybWFuX2dldF9zdGFydChyKSwgaWgpKTsKKyNlbHNlCiAJcmV0dXJuIChhcm1f
cmVtb3ZlX2lycWhhbmRsZXIocm1hbl9nZXRfc3RhcnQociksIGloKSk7CisjZW5kaWYKIH0KIAor
I2lmZGVmIEFSTV9JTlRSTkcKK3N0YXRpYyBpbnQKK25leHVzX2Rlc2NyaWJlX2ludHIoZGV2aWNl
X3QgZGV2LCBkZXZpY2VfdCBjaGlsZCwgc3RydWN0IHJlc291cmNlICppcnEsCisgICAgdm9pZCAq
Y29va2llLCBjb25zdCBjaGFyICpkZXNjcikKK3sKIAorCXJldHVybiAoYXJtX2lycV9kZXNjcmli
ZShybWFuX2dldF9zdGFydChpcnEpLCBjb29raWUsIGRlc2NyKSk7Cit9CisKKyNpZmRlZiBTTVAK
IHN0YXRpYyBpbnQKK25leHVzX2JpbmRfaW50cihkZXZpY2VfdCBkZXYsIGRldmljZV90IGNoaWxk
LCBzdHJ1Y3QgcmVzb3VyY2UgKmlycSwgaW50IGNwdSkKK3sKKwlyZXR1cm4gKGFybV9pcnFfYmlu
ZChybWFuX2dldF9zdGFydChpcnEpLCBjcHUpKTsKK30KKyNlbmRpZgorI2VuZGlmCisKK3N0YXRp
YyBpbnQKIG5leHVzX2FjdGl2YXRlX3Jlc291cmNlKGRldmljZV90IGJ1cywgZGV2aWNlX3QgY2hp
bGQsIGludCB0eXBlLCBpbnQgcmlkLAogICAgIHN0cnVjdCByZXNvdXJjZSAqcikKIHsKSW5kZXg6
IHN5cy9hcm0vaW5jbHVkZS9mZHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvYXJtL2luY2x1ZGUvZmR0
LmgJKHJldmlzaW9uIDI3NzgyNikKKysrIHN5cy9hcm0vaW5jbHVkZS9mZHQuaAkod29ya2luZyBj
b3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2lmbmRlZiBfTUFDSElORV9GRFRfSF8KICNkZWZpbmUg
X01BQ0hJTkVfRkRUX0hfCiAKKyNpbmNsdWRlICJvcHRfcGxhdGZvcm0uaCIKICNpbmNsdWRlIDxk
ZXYvb2Z3L29wZW5maXJtLmg+CiAKICNpbmNsdWRlIDx2bS92bS5oPgpAQCAtNDAsMTIgKzQxLDI0
IEBACiAjaW5jbHVkZSA8bWFjaGluZS9idXMuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2ludHIuaD4K
IAorI2lmZGVmIEFSTV9JTlRSTkcKKwogLyogTWF4IGludGVycnVwdCBudW1iZXIgKi8KKyNkZWZp
bmUJRkRUX0lOVFJfTUFYCSgweGZmZmYpCisKKy8qIE1hcCBwaGFuZGxlL2ludHBpbiBwYWlyIHRv
IGdsb2JhbCBJUlEgbnVtYmVyICovCisjZGVmaW5lCUZEVF9NQVBfSVJRKG5vZGUsIHBpbikJKGFy
bV9mZHRfbWFwX2lycShub2RlLCBwaW4pKQorCisjZWxzZQorCisvKiBNYXggaW50ZXJydXB0IG51
bWJlciAqLwogI2RlZmluZSBGRFRfSU5UUl9NQVgJTklSUQogCiAvKiBNYXAgcGhhbmRsZS9pbnRw
aW4gcGFpciB0byBnbG9iYWwgSVJRIG51bWJlciAqLwogI2RlZmluZQlGRFRfTUFQX0lSUShub2Rl
LCBwaW4pCShwaW4pCiAKKyNlbmRpZiAvKiBBUk1fSU5UUk5HICovCisKIC8qCiAgKiBCdXMgc3Bh
Y2UgdGFnLiBYWFggZW5kaWFuZXNzIGluZm8gbmVlZHMgdG8gYmUgZGVyaXZlZCBmcm9tIHRoZSBi
bG9iLgogICovCkluZGV4OiBzeXMvYXJtL2luY2x1ZGUvaW50ci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5
cy9hcm0vaW5jbHVkZS9pbnRyLmgJKHJldmlzaW9uIDI3NzgyNikKKysrIHN5cy9hcm0vaW5jbHVk
ZS9pbnRyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDk3IEBACiAjaW5jbHVkZSA8ZGV2
L29mdy9vcGVuZmlybS5oPgogI2VuZGlmCiAKKyNpZmRlZiBBUk1fSU5UUk5HCisKKyNpZm5kZWYg
TklSUQorI2RlZmluZQlOSVJRCQkxMDI0CS8qIFhYWCAtIEl0IHNob3VsZCBiZSBhbiBvcHRpb24u
ICovCisjZW5kaWYKKworI2RlZmluZQlJTlRSX1NPTE8JSU5UUl9NRDEKKworI2RlZmluZSBBUk1f
SVNSQ19OQU1FTEVOCShNQVhDT01MRU4gKyAxKQorCit0eXBlZGVmIGludCBhcm1faXJxX2ZpbHRl
cl90KHZvaWQgKmFyZywgc3RydWN0IHRyYXBmcmFtZSAqdGYpOwordHlwZWRlZiB2b2lkIGFybV9p
cGlfZmlsdGVyX3Qodm9pZCAqYXJnKTsKKworZW51bSBhcm1faXNyY190eXBlIHsKKwlBUk1fSVNS
Q1RfTkFNRVNQQUNFLAorCUFSTV9JU1JDVF9GRFQKK307CisKKy8qIEludGVycnVwdCBzb3VyY2Ug
ZGVmaW5pdGlvbi4gKi8KK3N0cnVjdCBhcm1faXJxc3JjIHsKKwlkZXZpY2VfdAkJaXNyY19kZXY7
CS8qIHdoZXJlIGlzcmMgaXMgbWFwcGVkICovCisJaW50cHRyX3QJCWlzcmNfeHJlZjsJLyogZGV2
aWNlIHJlZmVyZW5jZSBrZXkgKi8KKwl2b2lkICoJCQlpc3JjX2RhdGE7CS8qIGRldmljZSBkYXRh
IGZvciBpc3JjICovCisJdV9pbnQJCQlpc3JjX2lycTsJLyogdW5pcXVlIGlkZW50aWZpY2F0b3Ig
Ki8KKwllbnVtIGFybV9pc3JjX3R5cGUJaXNyY190eXBlOwkvKiBob3cgaXMgaXNyYyBkZWNyaWJl
ZCAqLworCXVfaW50CQkJaXNyY19mbGFnczsKKwljaGFyCQkJaXNyY19uYW1lW0FSTV9JU1JDX05B
TUVMRU5dOworCXVpbnQxNl90CQlpc3JjX25zcGNfdHlwZTsKKwl1aW50MTZfdAkJaXNyY19uc3Bj
X251bTsKKwllbnVtIGludHJfdHJpZ2dlcglpc3JjX3RyaWc7CisJZW51bSBpbnRyX3BvbGFyaXR5
CWlzcmNfcG9sOworCWludAkJCWlzcmNfY3B1OworCXVfaW50CQkJaXNyY19pbmRleDsKKwl1X2xv
bmcgKgkJaXNyY19jb3VudDsKKwl1X2ludAkJCWlzcmNfaGFuZGxlcnM7CisJc3RydWN0IGludHJf
ZXZlbnQgKglpc3JjX2V2ZW50OworCWFybV9pcnFfZmlsdGVyX3QgKglpc3JjX2ZpbHRlcjsKKwlh
cm1faXBpX2ZpbHRlcl90ICoJaXNyY19pcGlmaWx0ZXI7CisJdm9pZCAqCQkJaXNyY19hcmc7Cisj
aWZkZWYgRkRUCisJdV9pbnQJCQlpc3JjX25jZWxsczsKKwlwY2VsbF90CQkJaXNyY19jZWxsc1td
OwkvKiBsZWF2ZSBpdCBsYXN0ICovCisjZW5kaWYKK307CisKK3ZvaWQgYXJtX2lycV9zZXRfbmFt
ZShzdHJ1Y3QgYXJtX2lycXNyYyAqaXNyYywgY29uc3QgY2hhciAqZm10LCAuLi4pCisgICAgX19w
cmludGZsaWtlKDIsIDMpOworCit2b2lkIGFybV9kaXNwYXRjaF9zcGkoc3RydWN0IGFybV9pcnFz
cmMgKmlzcmMsIHN0cnVjdCB0cmFwZnJhbWUgKnRmKTsKKyNkZWZpbmUgYXJtX2Rpc3BhdGNoX3Bw
aQlhcm1fZGlzcGF0Y2hfc3BpCisKKyNkZWZpbmUgQVJNX0lSUV9UWVBFX05PTkUJMAorI2RlZmlu
ZSBBUk1fSVJRX1RZUEVfU1BJCTEKKyNkZWZpbmUgQVJNX0lSUV9UWVBFX1BQSQkyCisjZGVmaW5l
IEFSTV9JUlFfVFlQRV9TR0kJMworCit1X2ludCBhcm1fbmFtZXNwYWNlX21hcF9pcnEoZGV2aWNl
X3QgZGV2LCB1aW50MTZfdCB0eXBlLCB1aW50MTZfdCBudW0pOworCitpbnQgYXJtX2lycV9zZXRf
cm9vdChkZXZpY2VfdCBkZXYsIGludHB0cl90IHhyZWYsIGFybV9pcnFfZmlsdGVyX3QgKmZpbHRl
ciwKKyAgICB2b2lkICphcmcsIHVfaW50IGlwaWNvdW50KTsKKworaW50IGFybV9yZWdpc3Rlcl9w
aWMoZGV2aWNlX3QgZGV2LCBpbnRwdHJfdCB4cmVmKTsKK2ludCBhcm1fdW5yZWdpc3Rlcl9waWMo
ZGV2aWNlX3QgZGV2LCBpbnRwdHJfdCB4cmVmKTsKKworaW50IGFybV9zZXR1cF9pcnFoYW5kbGVy
KGRldmljZV90IGRldiwgZHJpdmVyX2ZpbHRlcl90LCBkcml2ZXJfaW50cl90LCB2b2lkICosCisg
ICAgdV9pbnQsIGludCwgdm9pZCAqKik7CitpbnQgYXJtX3JlbW92ZV9pcnFoYW5kbGVyKGRldmlj
ZV90IGRldiwgdV9pbnQsIHZvaWQgKik7CisKK2ludCBhcm1faXJxX2NvbmZpZyh1X2ludCwgZW51
bSBpbnRyX3RyaWdnZXIsIGVudW0gaW50cl9wb2xhcml0eSk7CitpbnQgYXJtX2lycV9kZXNjcmli
ZSh1X2ludCwgdm9pZCAqLCBjb25zdCBjaGFyICopOworCisjaWZkZWYgRkRUCit1X2ludCBhcm1f
ZmR0X21hcF9pcnEocGhhbmRsZV90LCBwY2VsbF90ICosIHVfaW50KTsKKyNlbmRpZgorCisjaWZk
ZWYgU01QCitpbnQgYXJtX2lycV9iaW5kKHVfaW50LCBpbnQpOwordm9pZCBhcm1faXJxX2FkZF9j
cHUodV9pbnQgY3B1KTsKKwordm9pZCBhcm1fZGlzcGF0Y2hfc2dpKHN0cnVjdCBhcm1faXJxc3Jj
ICppc3JjLCBzdHJ1Y3QgdHJhcGZyYW1lICp0Zik7CisKKyNkZWZpbmUgQVNJRl9OT0FMTE9DCTB4
MDAwMQorCitpbnQgYXJtX3NldHVwX2lwaWhhbmRsZXIodV9pbnQgaXBpLCBjb25zdCBjaGFyICpu
YW1lLCBhcm1faXBpX2ZpbHRlcl90ICpmaWx0ZXIsCisgICAgdm9pZCAqYXJnLCB1X2ludCBmbGFn
cyk7CisKK3ZvaWQgYXJtX2luaXRfc2Vjb25kYXJ5X3BpYyh2b2lkKTsKKyNlbmRpZgorCisjZWxz
ZSAvKiBBUk1fSU5UUk5HICovCisKIC8qIFhYWCBtb3ZlIHRvIHN0ZC4qIGZpbGVzPyAqLwogI2lm
ZGVmIENQVV9YU0NBTEVfODEzNDIKICNkZWZpbmUgTklSUQkJMTI4CkBAIC03MSw3ICsxNjIsNiBA
QAogI2RlZmluZSBOSVJRCQkzMgogI2VuZGlmCiAKLQogaW50IGFybV9nZXRfbmV4dF9pcnEoaW50
KTsKIHZvaWQgYXJtX21hc2tfaXJxKHVpbnRwdHJfdCk7CiB2b2lkIGFybV91bm1hc2tfaXJxKHVp
bnRwdHJfdCk7CkBAIC04Myw4ICsxNzMsNiBAQAogZXh0ZXJuIGludCAoKmFybV9jb25maWdfaXJx
KShpbnQgaXJxLCBlbnVtIGludHJfdHJpZ2dlciB0cmlnLAogICAgIGVudW0gaW50cl9wb2xhcml0
eSBwb2wpOwogCi12b2lkIGFybV9pcnFfbWVtb3J5X2JhcnJpZXIodWludHB0cl90KTsKLQogdm9p
ZCBhcm1faW5pdF9zZWNvbmRhcnlfaWModm9pZCk7CiBpbnQgIGdpY19kZWNvZGVfZmR0KHVpbnQz
Ml90IGlwYXJlbnRub2RlLCB1aW50MzJfdCAqaW50cmNlbGxzLCBpbnQgKmludGVycnVwdCwKICAg
ICBpbnQgKnRyaWcsIGludCAqcG9sKTsKQEAgLTkzLDQgKzE4MSw4IEBACiBpbnQgYXJtX2ZkdF9t
YXBfaXJxKHBoYW5kbGVfdCwgcGNlbGxfdCAqLCBpbnQpOwogI2VuZGlmCiAKKyNlbmRpZiAvKiBB
Uk1fSU5UUk5HICovCisKK3ZvaWQgYXJtX2lycV9tZW1vcnlfYmFycmllcih1aW50cHRyX3QpOwor
CiAjZW5kaWYJLyogX01BQ0hJTkVfSU5UUl9IICovCkluZGV4OiBzeXMvYXJtL2luY2x1ZGUvc21w
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gc3lzL2FybS9pbmNsdWRlL3NtcC5oCShyZXZpc2lvbiAyNzc4MjYp
CisrKyBzeXMvYXJtL2luY2x1ZGUvc21wLmgJKHdvcmtpbmcgY29weSkKQEAgLTYsNiArNiwxOCBA
QAogI2luY2x1ZGUgPHN5cy9fY3B1c2V0Lmg+CiAjaW5jbHVkZSA8bWFjaGluZS9wY2IuaD4KIAor
I2lmZGVmIEFSTV9JTlRSTkcKK2VudW0geworCUlQSV9BU1QsCisJSVBJX1BSRUVNUFQsCisJSVBJ
X1JFTkRFWlZPVVMsCisJSVBJX1NUT1AsCisJSVBJX1NUT1BfSEFSRCA9IElQSV9TVE9QLCAvKiBU
aGVzZSBhcmUgc3lub255bXMgb24gYXJtLiAqLworCUlQSV9IQVJEQ0xPQ0ssCisJSVBJX1RMQiwK
KwlBUk1fSVBJX0NPVU5UCit9OworI2Vsc2UKICNkZWZpbmUgSVBJX0FTVAkJMAogI2RlZmluZSBJ
UElfUFJFRU1QVAkyCiAjZGVmaW5lIElQSV9SRU5ERVpWT1VTCTMKQEAgLTEzLDYgKzI1LDcgQEAK
ICNkZWZpbmUgSVBJX1NUT1BfSEFSRAk0CiAjZGVmaW5lIElQSV9IQVJEQ0xPQ0sJNgogI2RlZmlu
ZSBJUElfVExCCQk3CisjZW5kaWYKIAogdm9pZAlpbml0X3NlY29uZGFyeShpbnQgY3B1KTsKIHZv
aWQJbXBlbnRyeSh2b2lkKTsKQEAgLTIzLDggKzM2LDEwIEBACiAKIC8qIFBJQyBpbnRlcmZhY2Ug
Ki8KIHZvaWQJcGljX2lwaV9zZW5kKGNwdXNldF90IGNwdXMsIHVfaW50IGlwaSk7CisjaWZuZGVm
IEFSTV9JTlRSTkcKIHZvaWQJcGljX2lwaV9jbGVhcihpbnQgaXBpKTsKIGludAlwaWNfaXBpX3Jl
YWQoaW50IGFyZyk7CisjZW5kaWYKIAogLyogUGxhdGZvcm0gaW50ZXJmYWNlICovCiB2b2lkCXBs
YXRmb3JtX21wX3NldG1heGlkKHZvaWQpOwpJbmRleDogc3lzL2FybS90aS9vbWFwNC9vbWFwNF9t
cC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIHN5cy9hcm0vdGkvb21hcDQvb21hcDRfbXAuYwkocmV2aXNpb24g
Mjc3ODI2KQorKysgc3lzL2FybS90aS9vbWFwNC9vbWFwNF9tcC5jCSh3b3JraW5nIGNvcHkpCkBA
IC00MSw3ICs0MSwxMiBAQAogdm9pZAogcGxhdGZvcm1fbXBfaW5pdF9zZWNvbmRhcnkodm9pZCkK
IHsKKworI2lmZGVmIEFSTV9JTlRSTkcKKwlhcm1faW5pdF9zZWNvbmRhcnlfcGljKCk7CisjZWxz
ZQogCWFybV9pbml0X3NlY29uZGFyeV9pYygpOworI2VuZGlmCiB9CiAKIHZvaWQKSW5kZXg6IHN5
cy9jb25mL2ZpbGVzLmFybQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvY29uZi9maWxlcy5hcm0JKHJldmlz
aW9uIDI3NzgyNikKKysrIHN5cy9jb25mL2ZpbGVzLmFybQkod29ya2luZyBjb3B5KQpAQCAtMjks
NyArMjksOCBAQAogYXJtL2FybS9pZGVudGNwdS5jCQlzdGFuZGFyZAogYXJtL2FybS9pbl9ja3N1
bS5jCQlvcHRpb25hbAlpbmV0IHwgaW5ldDYKIGFybS9hcm0vaW5fY2tzdW1fYXJtLlMJCW9wdGlv
bmFsCWluZXQgfCBpbmV0NgotYXJtL2FybS9pbnRyLmMJCQlzdGFuZGFyZAorYXJtL2FybS9pbnRy
LmMJCQlvcHRpb25hbAkhYXJtX2ludHJuZworYXJtL2FybS9pbnRybmcuYwkJb3B0aW9uYWwJYXJt
X2ludHJuZwogYXJtL2FybS9sb2NvcmUuUwkJc3RhbmRhcmQJbm8tb2JqCiBhcm0vYXJtL21hY2hk
ZXAuYwkJc3RhbmRhcmQKIGFybS9hcm0vbWVtLmMJCQlvcHRpb25hbAltZW0KQEAgLTM3LDYgKzM4
LDcgQEAKIGFybS9hcm0vbXBfbWFjaGRlcC5jCQlvcHRpb25hbAlzbXAKIGFybS9hcm0vbmV4dXMu
YwkJCXN0YW5kYXJkCiBhcm0vYXJtL3BoeXNtZW0uYwkJc3RhbmRhcmQKK2FybS9hcm0vcGljX2lm
Lm0JCW9wdGlvbmFsCWFybV9pbnRybmcKIGFybS9hcm0vcGwxOTAuYwkJCW9wdGlvbmFsCXBsMTkw
CiBhcm0vYXJtL3BsMzEwLmMJCQlvcHRpb25hbAlwbDMxMAogYXJtL2FybS9wbGF0Zm9ybS5jCQlv
cHRpb25hbAlwbGF0Zm9ybQpJbmRleDogc3lzL2NvbmYvb3B0aW9ucy5hcm0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gc3lzL2NvbmYvb3B0aW9ucy5hcm0JKHJldmlzaW9uIDI3NzgyNikKKysrIHN5cy9jb25mL29w
dGlvbnMuYXJtCSh3b3JraW5nIGNvcHkpCkBAIC0yLDYgKzIsNyBAQAogQVJNOV9DQUNIRV9XUklU
RV9USFJPVUdICW9wdF9nbG9iYWwuaAogQVJNVjYJCQlvcHRfZ2xvYmFsLmgKIEFSTV9DQUNIRV9M
T0NLX0VOQUJMRQlvcHRfZ2xvYmFsLmgKK0FSTV9JTlRSTkcJCW9wdF9nbG9iYWwuaAogQVJNX0tF
Uk5fRElSRUNUTUFQCW9wdF92bS5oCiBBUk1fTDJfUElQVAkJb3B0X2dsb2JhbC5oCiBBUk1fTUFO
WV9CT0FSRAkJb3B0X2dsb2JhbC5oCkluZGV4OiBzeXMvZGV2L2ZkdC9mZHRfY29tbW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gc3lzL2Rldi9mZHQvZmR0X2NvbW1vbi5oCShyZXZpc2lvbiAyNzc4MjYpCisr
KyBzeXMvZGV2L2ZkdC9mZHRfY29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDYgKzc5LDcg
QEAKIGludCBmZHRfYWRkcnNpemVfY2VsbHMocGhhbmRsZV90LCBpbnQgKiwgaW50ICopOwogdV9s
b25nIGZkdF9kYXRhX2dldCh2b2lkICosIGludCk7CiBpbnQgZmR0X2RhdGFfdG9fcmVzKHBjZWxs
X3QgKiwgaW50LCBpbnQsIHVfbG9uZyAqLCB1X2xvbmcgKik7CitpbnQgZmR0X2Rlc2NyaWJlX2ly
cShjaGFyICosIHVfaW50LCB1X2ludCk7CiBwaGFuZGxlX3QgZmR0X2ZpbmRfY29tcGF0aWJsZShw
aGFuZGxlX3QsIGNvbnN0IGNoYXIgKiwgaW50KTsKIHBoYW5kbGVfdCBmZHRfZGVwdGhfc2VhcmNo
X2NvbXBhdGlibGUocGhhbmRsZV90LCBjb25zdCBjaGFyICosIGludCk7CiBpbnQgZmR0X2dldF9t
ZW1fcmVnaW9ucyhzdHJ1Y3QgbWVtX3JlZ2lvbiAqLCBpbnQgKiwgdWludDMyX3QgKik7CkluZGV4
OiBzeXMvZGV2L2ZkdC9zaW1wbGVidXMuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvZGV2L2ZkdC9zaW1w
bGVidXMuYwkocmV2aXNpb24gMjc3ODI2KQorKysgc3lzL2Rldi9mZHQvc2ltcGxlYnVzLmMJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDggQEAKICNpbmNsdWRlIDxkZXYvb2Z3L29md19idXMu
aD4KICNpbmNsdWRlIDxkZXYvb2Z3L29md19idXNfc3Vici5oPgogCisjaW5jbHVkZSA8ZGV2L2Zk
dC9mZHRfY29tbW9uLmg+CisKIHN0cnVjdCBzaW1wbGVidXNfcmFuZ2UgewogCXVpbnQ2NF90IGJ1
czsKIAl1aW50NjRfdCBob3N0OwpAQCAtNjgsNiArNzAsOSBAQAogICAgIGludCAqLCB1X2xvbmcs
IHVfbG9uZywgdV9sb25nLCB1X2ludCk7CiBzdGF0aWMgdm9pZAkJc2ltcGxlYnVzX3Byb2JlX25v
bWF0Y2goZGV2aWNlX3QgYnVzLCBkZXZpY2VfdCBjaGlsZCk7CiBzdGF0aWMgaW50CQlzaW1wbGVi
dXNfcHJpbnRfY2hpbGQoZGV2aWNlX3QgYnVzLCBkZXZpY2VfdCBjaGlsZCk7CisjaWZkZWYgQVJN
X0lOVFJORworc3RhdGljIGludAkJc2ltcGxlYnVzX3ByaW50X2lycXMoc3RydWN0IHJlc291cmNl
X2xpc3QgKnJsKTsKKyNlbmRpZgogCiAvKgogICogb2Z3X2J1cyBpbnRlcmZhY2UKQEAgLTM0NCw3
ICszNDksMTEgQEAKIAogCXJ2ID0gMDsKIAlydiArPSByZXNvdXJjZV9saXN0X3ByaW50X3R5cGUo
JmRpLT5ybCwgIm1lbSIsIFNZU19SRVNfTUVNT1JZLCAiJSNseCIpOworI2lmZGVmIEFSTV9JTlRS
TkcKKwlydiArPSBzaW1wbGVidXNfcHJpbnRfaXJxcygmZGktPnJsKTsKKyNlbHNlCiAJcnYgKz0g
cmVzb3VyY2VfbGlzdF9wcmludF90eXBlKCZkaS0+cmwsICJpcnEiLCBTWVNfUkVTX0lSUSwgIiVs
ZCIpOworI2VuZGlmCiAJcmV0dXJuIChydik7CiB9CiAKQEAgLTM4MywzICszOTIsMzAgQEAKIAly
diArPSBidXNfcHJpbnRfY2hpbGRfZm9vdGVyKGJ1cywgY2hpbGQpOwogCXJldHVybiAocnYpOwog
fQorCisjaWZkZWYgQVJNX0lOVFJORworc3RhdGljIGludAorc2ltcGxlYnVzX3ByaW50X2lycXMo
c3RydWN0IHJlc291cmNlX2xpc3QgKnJsKQoreworCXN0cnVjdCByZXNvdXJjZV9saXN0X2VudHJ5
ICpybGU7CisJaW50IGVyciwgcHJpbnRlZCwgcmV0dmFsOworCWNoYXIgYnVmWzE2XTsKKworCXBy
aW50ZWQgPSAwOworCXJldHZhbCA9IDA7CisKKwlTVEFJTFFfRk9SRUFDSChybGUsIHJsLCBsaW5r
KSB7CisJCWlmIChybGUtPnR5cGUgIT0gU1lTX1JFU19JUlEpCisJCQljb250aW51ZTsKKworCQll
cnIgPSBmZHRfZGVzY3JpYmVfaXJxKGJ1Ziwgc2l6ZW9mKGJ1ZiksIHJsZS0+c3RhcnQpOworCQlp
ZiAoZXJyIDwgMCkKKwkJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICI/Pz8iKTsKKworCQly
ZXR2YWwgKz0gcHJpbnRmKCIlcyVzIiwgcHJpbnRlZCA/ICIsIiA6ICIgaXJxICIsIGJ1Zik7CisJ
CXByaW50ZWQrKzsKKwl9CisKKwlyZXR1cm4gKHJldHZhbCk7Cit9CisjZW5kaWYK
--001a11c13d0eaf1b20050db7058a
Content-Type: application/octet-stream; name="pic_if.m"
Content-Disposition: attachment; filename="pic_if.m"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_i5gsl1f34

Iy0KIyBDb3B5cmlnaHQgKGMpIDIwMTIgSmFrdWIgV29qY2llY2ggS2xhbWEgPGpjZWVsQEZyZWVC
U0Qub3JnPgojIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiMKIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
IyBhcmUgbWV0OgojIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CiMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgojIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiMgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQojICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCiMKIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECiMgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCiMg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UKIyBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQojIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCiMg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMKIyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKIyBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAojIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkKIyBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCiMgU1VDSCBEQU1BR0UuCiMKIyAkRnJlZUJTRCQK
IwoKI2luY2x1ZGUgIm9wdF9wbGF0Zm9ybS5oIgoKI2luY2x1ZGUgPHN5cy9idXMuaD4KI2luY2x1
ZGUgPHN5cy9jcHVzZXQuaD4KI2luY2x1ZGUgPGRldi9vZncvb3BlbmZpcm0uaD4KI2luY2x1ZGUg
PG1hY2hpbmUvZnJhbWUuaD4KI2luY2x1ZGUgPG1hY2hpbmUvaW50ci5oPgoKSU5URVJGQUNFIHBp
YzsKCkNPREUgewoJc3RhdGljIGludCBudWxsX3BpY19iaW5kKGRldmljZV90IGRldiwgc3RydWN0
IGFybV9pcnFzcmMgKmlzcmMsCgkgICAgdV9pbnQgY3B1KQoJewoJCXJldHVybiAoRU9QTk9UU1VQ
UCk7Cgl9CgoJc3RhdGljIHZvaWQgbnVsbF9waWNfaW5pdF9zZWNvbmRhcnkoZGV2aWNlX3QgZGV2
KQoJewoJCXJldHVybjsKCX0KCglzdGF0aWMgdm9pZCBudWxsX3BpY19pcGlfc2VuZChkZXZpY2Vf
dCBkZXYsIGNwdXNldF90IGNwdXMsIHVfaW50IGlwaSkKCXsKCQlyZXR1cm47Cgl9Cn07CgpNRVRI
T0QgaW50IHJlZ2lzdGVyIHsKCWRldmljZV90CQlkZXY7CglzdHJ1Y3QgYXJtX2lycXNyYwkqaXNy
YzsKfTsKCk1FVEhPRCBpbnQgdW5yZWdpc3RlciB7CglkZXZpY2VfdAkJZGV2OwoJc3RydWN0IGFy
bV9pcnFzcmMJKmlzcmM7Cn07CgpNRVRIT0Qgdm9pZCBkaXNhYmxlX2ludHIgewoJZGV2aWNlX3QJ
CWRldjsKCXN0cnVjdCBhcm1faXJxc3JjCSppc3JjOwp9OwoKTUVUSE9EIHZvaWQgZGlzYWJsZV9z
b3VyY2UgewoJZGV2aWNlX3QJCWRldjsKCXN0cnVjdCBhcm1faXJxc3JjCSppc3JjOwp9OwoKTUVU
SE9EIHZvaWQgZW5hYmxlX3NvdXJjZSB7CglkZXZpY2VfdAkJZGV2OwoJc3RydWN0IGFybV9pcnFz
cmMJKmlzcmM7Cn07CgpNRVRIT0Qgdm9pZCBlbmFibGVfaW50ciB7CglkZXZpY2VfdAkJZGV2OwoJ
c3RydWN0IGFybV9pcnFzcmMJKmlzcmM7Cn07CgpNRVRIT0Qgdm9pZCBwcmVfaXRocmVhZCB7Cglk
ZXZpY2VfdAkJZGV2OwoJc3RydWN0IGFybV9pcnFzcmMJKmlzcmM7Cn07CgpNRVRIT0Qgdm9pZCBw
b3N0X2l0aHJlYWQgewoJZGV2aWNlX3QJCWRldjsKCXN0cnVjdCBhcm1faXJxc3JjCSppc3JjOwp9
OwoKTUVUSE9EIHZvaWQgcG9zdF9maWx0ZXIgewoJZGV2aWNlX3QJCWRldjsKCXN0cnVjdCBhcm1f
aXJxc3JjCSppc3JjOwp9OwoKTUVUSE9EIGludCBiaW5kIHsKCWRldmljZV90CQlkZXY7CglzdHJ1
Y3QgYXJtX2lycXNyYwkqaXNyYzsKCXVfaW50CQkJY3B1Owp9IERFRkFVTFQgbnVsbF9waWNfYmlu
ZDsKCk1FVEhPRCB2b2lkIGluaXRfc2Vjb25kYXJ5IHsKCWRldmljZV90CWRldjsKfSBERUZBVUxU
IG51bGxfcGljX2luaXRfc2Vjb25kYXJ5OwoKTUVUSE9EIHZvaWQgaXBpX3NlbmQgewoJZGV2aWNl
X3QJCWRldjsKCXN0cnVjdCBhcm1faXJxc3JjCSppc3JjOwoJY3B1c2V0X3QJCWNwdXM7Cn0gREVG
QVVMVCBudWxsX3BpY19pcGlfc2VuZDsKCg==
--001a11c13d0eaf1b20050db7058a--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAFHCsPVhRnRXhLF6S-%2BDL5mM22X0CkMmKOkkuo0DOMShkEM=fQ>